selection and preview of person and family

svn: r5774
This commit is contained in:
Richard Taylor
2006-01-17 13:43:29 +00:00
parent 58ef8176d4
commit 345b35c3b9
11 changed files with 239 additions and 38 deletions

View File

@@ -7,12 +7,14 @@ import gobject
import _Factories
from _Constants import ObjectTypes
from _ObjectSelectorResult import ObjectSelectorResult
class _ObjectTypeWidgets(object):
def __init__(self):
self.frame = None
self.sel_label = None
self.selected_id = None
def show(self):
self.frame.show_all()
@@ -22,16 +24,22 @@ class _ObjectTypeWidgets(object):
self.frame.hide_all()
self.sel_label.hide_all()
def set_selected_id(self,id):
self.selected_id = id
OBJECT_LIST = [ObjectTypes.PERSON, ObjectTypes.FAMILY,
ObjectTypes.SOURCE, ObjectTypes.EVENT,
ObjectTypes.MEDIA, ObjectTypes.PLACE,
ObjectTypes.REPOSITORY, ObjectTypes.REFERENCE]
ObjectTypes.REPOSITORY]
class ObjectSelectorWindow(gtk.Window):
__gproperties__ = {}
__gsignals__ = {
'add-object' : (gobject.SIGNAL_RUN_LAST,
gobject.TYPE_NONE,
(gobject.TYPE_PYOBJECT,)),
}
__default_border_width = 5
@@ -47,6 +55,7 @@ class ObjectSelectorWindow(gtk.Window):
self._dbstate = dbstate
self._object_list = object_list
self._current_object_type = None
self.set_title("Add Person")
@@ -146,15 +155,25 @@ class ObjectSelectorWindow(gtk.Window):
lambda widget,text,handle,label: label.set_text(text),
self._object_frames[object_type].sel_label)
self._object_frames[object_type].frame.connect(
'selection-changed',
lambda widget,text,handle,current_object: current_object.set_selected_id(handle),
self._object_frames[object_type])
self._object_frames[object_type].frame.connect(
'selection-changed',
self.on_selection_changed)
frame_box.pack_start(self._object_frames[object_type].frame,True,True)
self._set_object_type(default_object_type)
# Bottom buttons
add_button = gtk.Button(stock=gtk.STOCK_ADD)
add_button.set_sensitive(False)
add_button.show()
self._add_button = gtk.Button(stock=gtk.STOCK_ADD)
self._add_button.set_sensitive(False)
self._add_button.show()
self._add_button.connect("clicked", self.on_add)
cancel_button = gtk.Button(stock=gtk.STOCK_CANCEL)
cancel_button.show()
@@ -166,7 +185,7 @@ class ObjectSelectorWindow(gtk.Window):
bottom_button_bar.set_spacing(self.__class__.__default_border_width/2)
bottom_button_bar.set_border_width(self.__class__.__default_border_width)
bottom_button_bar.add(cancel_button)
bottom_button_bar.add(add_button)
bottom_button_bar.add(self._add_button)
bottom_button_bar.show()
box = gtk.VBox()
@@ -186,15 +205,20 @@ class ObjectSelectorWindow(gtk.Window):
self.add(align)
self._set_object_type(default_object_type)
def _set_object_type(self,selected_object_type):
# enable default
# enable selected object type
self._object_frames[selected_object_type].show()
# disable all the others
[ self._object_frames[object_type].hide() for object_type in self._object_list
if object_type != selected_object_type]
# Set the object selector list to the selected object type
# this is required because we may be asked to set the object type
# without the use selecting it explicitly from the list.
store = self._tool_list
it = store.get_iter_first()
while it:
@@ -204,7 +228,32 @@ class ObjectSelectorWindow(gtk.Window):
if it != None:
self._tool_combo.set_active_iter(it)
self._current_object_type = selected_object_type
# Set the add button sensitivity
if self._object_frames[selected_object_type].selected_id:
self._add_button.set_sensitive(True)
else:
self._add_button.set_sensitive(False)
def get_result(self):
result = ObjectSelectorResult()
result.set_object_type(self._current_object_type)
result.set_gramps_id(self._object_frames[self._current_object_type].selected_id)
return result
def on_add(self,button):
self.emit('add-object',self.get_result())
def on_selection_changed(self,widget,text,handle):
if handle:
self._add_button.set_sensitive(True)
else:
self._add_button.set_sensitive(False)
if gtk.pygtk_version < (2,8,0):
gobject.type_register(PersonSearchCriteriaWidget)
@@ -214,11 +263,24 @@ if __name__ == "__main__":
import GrampsDb
import const
import logging
import sys,os.path
form = logging.Formatter(fmt="%(relativeCreated)d: %(levelname)s: %(filename)s: line %(lineno)d: %(message)s")
stderrh = logging.StreamHandler(sys.stderr)
stderrh.setFormatter(form)
stderrh.setLevel(logging.DEBUG)
# everything.
l = logging.getLogger()
l.setLevel(logging.DEBUG)
l.addHandler(stderrh)
def cb(d):
pass
db = GrampsDb.gramps_db_factory(const.app_gramps)()
db.load("/home/rtaylor/devel/Personal/gramps/test/Untitled_2.grdb",
db.load(os.path.realpath(sys.argv[1]),
cb, # callback
"w")
class D:
@@ -226,7 +288,7 @@ if __name__ == "__main__":
dbstate = D()
dbstate.db = db
w = ObjectSelectorWindow(dbstate=dbstate,
default_object_type = ObjectTypes.FAMILY,
@@ -235,4 +297,9 @@ if __name__ == "__main__":
w.show()
w.connect("destroy", gtk.main_quit)
def add(w,results):
print str(results)
w.connect('add-object',add)
gtk.main()