basic object selection now working
svn: r5773
This commit is contained in:
parent
1226c0d55a
commit
58ef8176d4
10
ChangeLog
10
ChangeLog
@ -1,3 +1,12 @@
|
||||
2006-01-17 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
|
||||
* src/ObjectSelector/_FamilyFrame.py: basic object selection now working
|
||||
* src/ObjectSelector/_FamilyTreeFrame.py: basic object selection now working
|
||||
* src/ObjectSelector/_ObjectFrameBase.py: basic object selection now working
|
||||
* src/ObjectSelector/_ObjectSelectorWindow.py: basic object selection now working
|
||||
* src/ObjectSelector/_PersonFrame.py: basic object selection now working
|
||||
* src/ObjectSelector/_PersonTreeFrame.py: basic object selection now working
|
||||
|
||||
|
||||
2006-01-16 Don Allingham <don@gramps-project.org>
|
||||
* src/AddMedia.py: glade path
|
||||
* src/AddrEdit.py: glade path
|
||||
@ -31,6 +40,7 @@
|
||||
* src/gramps.glade: reposition add/delete buttons, remove separator
|
||||
between parents and relationship info
|
||||
|
||||
|
||||
2006-01-16 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
|
||||
* src/ObjectSelector/_Factories.py: refactored object frame
|
||||
* src/ObjectSelector/_FamilyFrame.py: refactored object frame
|
||||
|
@ -14,7 +14,12 @@ class FamilyFrame(ObjectFrameBase):
|
||||
|
||||
__gproperties__ = {}
|
||||
|
||||
__gsignals__ = {}
|
||||
__gsignals__ = {
|
||||
'selection-changed' : (gobject.SIGNAL_RUN_LAST,
|
||||
gobject.TYPE_NONE,
|
||||
(gobject.TYPE_STRING,
|
||||
gobject.TYPE_STRING)),
|
||||
}
|
||||
|
||||
__default_border_width = 5
|
||||
|
||||
@ -27,6 +32,31 @@ class FamilyFrame(ObjectFrameBase):
|
||||
preview_frame = FamilyPreviewFrame(dbstate),
|
||||
tree_frame = FamilyTreeFrame(dbstate))
|
||||
|
||||
def handle_selection(treeselection):
|
||||
(model, iter) = treeselection.get_selected()
|
||||
if iter:
|
||||
self.emit('selection-changed', "%s / %s (%s)" % (
|
||||
str(model.get_value(iter,1)),
|
||||
str(model.get_value(iter,2)),
|
||||
str(model.get_value(iter,0))),
|
||||
model.get_value(iter,0))
|
||||
else:
|
||||
self.emit('selection-changed',"No Selection","")
|
||||
|
||||
|
||||
self._tree_frame.get_selection().connect('changed',handle_selection)
|
||||
|
||||
def set_preview_frame_sensitivity(treeselection):
|
||||
(model, iter) = treeselection.get_selected()
|
||||
if iter:
|
||||
self._preview_frame.set_sensitive(True)
|
||||
else:
|
||||
self._preview_frame.set_sensitive(False)
|
||||
|
||||
self._tree_frame.get_selection().connect('changed',set_preview_frame_sensitivity)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if gtk.pygtk_version < (2,8,0):
|
||||
|
@ -16,6 +16,9 @@ class FamilyTreeFrame(gtk.Frame):
|
||||
def __init__(self,dbstate):
|
||||
gtk.Frame.__init__(self)
|
||||
|
||||
self._selection = None
|
||||
self._model = None
|
||||
|
||||
self._dbstate = dbstate
|
||||
|
||||
self._list = gtk.TreeView()
|
||||
@ -60,6 +63,11 @@ class FamilyTreeFrame(gtk.Frame):
|
||||
self._model = FamilyModel(db)
|
||||
|
||||
self._list.set_model(self._model)
|
||||
|
||||
self._selection = self._list.get_selection()
|
||||
|
||||
def get_selection(self):
|
||||
return self._selection
|
||||
|
||||
if gtk.pygtk_version < (2,8,0):
|
||||
gobject.type_register(FamilyTreeFrame)
|
||||
|
@ -25,6 +25,8 @@ class ObjectFrameBase(gtk.Frame):
|
||||
self._filter_frame = filter_frame
|
||||
self._preview_frame = preview_frame
|
||||
self._tree_frame = tree_frame
|
||||
|
||||
self._preview_frame.set_sensitive(False)
|
||||
|
||||
# Create the widgets for each of the object types
|
||||
|
||||
@ -55,6 +57,9 @@ class ObjectFrameBase(gtk.Frame):
|
||||
|
||||
self.add(pane_align)
|
||||
|
||||
def get_selection(self):
|
||||
return self._tree_frame.get_selection()
|
||||
|
||||
|
||||
if gtk.pygtk_version < (2,8,0):
|
||||
gobject.type_register(PersonFrame)
|
||||
|
@ -12,12 +12,15 @@ class _ObjectTypeWidgets(object):
|
||||
|
||||
def __init__(self):
|
||||
self.frame = None
|
||||
self.sel_label = None
|
||||
|
||||
def show(self):
|
||||
self.frame.show_all()
|
||||
self.sel_label.show_all()
|
||||
|
||||
def hide(self):
|
||||
self.frame.hide_all()
|
||||
self.sel_label.hide_all()
|
||||
|
||||
OBJECT_LIST = [ObjectTypes.PERSON, ObjectTypes.FAMILY,
|
||||
ObjectTypes.SOURCE, ObjectTypes.EVENT,
|
||||
@ -51,12 +54,26 @@ class ObjectSelectorWindow(gtk.Window):
|
||||
label = gtk.Label("Selected:")
|
||||
label.set_alignment(xalign=1,yalign=0.5)
|
||||
label.show()
|
||||
|
||||
sel_label = gtk.Label("No Selected Object")
|
||||
|
||||
sel_frame = gtk.Frame()
|
||||
sel_frame.set_shadow_type(gtk.SHADOW_IN)
|
||||
sel_frame.set_border_width(self.__class__.__default_border_width*2)
|
||||
sel_frame.add(sel_label)
|
||||
|
||||
sel_label_box = gtk.HBox()
|
||||
sel_label_box.show()
|
||||
|
||||
self._object_frames = {}
|
||||
|
||||
for object_type in object_list:
|
||||
self._object_frames[object_type] = _ObjectTypeWidgets()
|
||||
|
||||
sel_label = gtk.Label("No Selected Object")
|
||||
sel_label.set_alignment(xalign=0,yalign=0.5)
|
||||
sel_label_box.pack_start(sel_label)
|
||||
|
||||
self._object_frames[object_type].sel_label = sel_label
|
||||
|
||||
sel_frame.add(sel_label_box)
|
||||
sel_frame.show()
|
||||
|
||||
label_box = gtk.HBox()
|
||||
@ -74,10 +91,13 @@ class ObjectSelectorWindow(gtk.Window):
|
||||
flist_pixbuf = gtk.gdk.pixbuf_new_from_file("../flist.svg")
|
||||
|
||||
self._tool_list = gtk.ListStore(gtk.gdk.Pixbuf, str,int)
|
||||
self._tool_list.append([person_pixbuf,'People',ObjectTypes.PERSON])
|
||||
self._tool_list.append([flist_pixbuf,'Families',ObjectTypes.FAMILY])
|
||||
self._tool_list.append([person_pixbuf,'Events',ObjectTypes.EVENT])
|
||||
|
||||
d={ObjectTypes.PERSON: [person_pixbuf,'People',ObjectTypes.PERSON],
|
||||
ObjectTypes.FAMILY: [flist_pixbuf,'Families',ObjectTypes.FAMILY],
|
||||
ObjectTypes.EVENT: [person_pixbuf,'Events',ObjectTypes.EVENT]}
|
||||
|
||||
for object_type in self._object_list:
|
||||
self._tool_list.append(d[object_type])
|
||||
|
||||
self._tool_combo = gtk.ComboBox(self._tool_list)
|
||||
|
||||
@ -113,15 +133,20 @@ class ObjectSelectorWindow(gtk.Window):
|
||||
|
||||
frame_box = gtk.HBox()
|
||||
frame_box.show()
|
||||
|
||||
self._object_frames = {}
|
||||
|
||||
|
||||
|
||||
for object_type in object_list:
|
||||
self._object_frames[object_type] = _ObjectTypeWidgets()
|
||||
|
||||
self._object_frames[object_type].frame = \
|
||||
_Factories.ObjectFrameFactory().get_frame(object_type,dbstate)
|
||||
|
||||
# connect signals
|
||||
self._object_frames[object_type].frame.connect(
|
||||
'selection-changed',
|
||||
lambda widget,text,handle,label: label.set_text(text),
|
||||
self._object_frames[object_type].sel_label)
|
||||
|
||||
|
||||
frame_box.pack_start(self._object_frames[object_type].frame,True,True)
|
||||
|
||||
self._set_object_type(default_object_type)
|
||||
@ -193,7 +218,7 @@ if __name__ == "__main__":
|
||||
pass
|
||||
|
||||
db = GrampsDb.gramps_db_factory(const.app_gramps)()
|
||||
db.load("/home/rtaylor/devel/Personal/gramps/test/Untitled_1.grdb",
|
||||
db.load("/home/rtaylor/devel/Personal/gramps/test/Untitled_2.grdb",
|
||||
cb, # callback
|
||||
"w")
|
||||
class D:
|
||||
@ -204,8 +229,9 @@ if __name__ == "__main__":
|
||||
|
||||
|
||||
w = ObjectSelectorWindow(dbstate=dbstate,
|
||||
default_object_type = ObjectTypes.PERSON,
|
||||
object_list=[ObjectTypes.PERSON,ObjectTypes.FAMILY])
|
||||
default_object_type = ObjectTypes.FAMILY,
|
||||
object_list=[ObjectTypes.FAMILY,
|
||||
ObjectTypes.PERSON])
|
||||
w.show()
|
||||
w.connect("destroy", gtk.main_quit)
|
||||
|
||||
|
@ -14,9 +14,12 @@ class PersonFrame(ObjectFrameBase):
|
||||
|
||||
__gproperties__ = {}
|
||||
|
||||
__gsignals__ = {}
|
||||
|
||||
__default_border_width = 5
|
||||
__gsignals__ = {
|
||||
'selection-changed' : (gobject.SIGNAL_RUN_LAST,
|
||||
gobject.TYPE_NONE,
|
||||
(gobject.TYPE_STRING,
|
||||
gobject.TYPE_STRING)),
|
||||
}
|
||||
|
||||
def __init__(self,
|
||||
dbstate):
|
||||
@ -27,6 +30,15 @@ class PersonFrame(ObjectFrameBase):
|
||||
preview_frame = PersonPreviewFrame(dbstate),
|
||||
tree_frame = PersonTreeFrame(dbstate))
|
||||
|
||||
def handle_selection(treeselection):
|
||||
(model, iter) = treeselection.get_selected()
|
||||
self.emit('selection-changed', "%s (%s)" % (
|
||||
str(model.get_value(iter,0)),
|
||||
str(model.get_value(iter,1))),
|
||||
model.get_value(iter,0))
|
||||
|
||||
|
||||
self._tree_frame.get_selection().connect('changed',handle_selection)
|
||||
|
||||
|
||||
if gtk.pygtk_version < (2,8,0):
|
||||
|
@ -1,6 +1,23 @@
|
||||
from gettext import gettext as _
|
||||
|
||||
import gtk
|
||||
import gobject
|
||||
|
||||
from PeopleModel import PeopleModel
|
||||
|
||||
column_names = [
|
||||
_('Name'),
|
||||
_('ID') ,
|
||||
_('Gender'),
|
||||
_('Birth Date'),
|
||||
_('Birth Place'),
|
||||
_('Death Date'),
|
||||
_('Death Place'),
|
||||
_('Spouse'),
|
||||
_('Last Change'),
|
||||
_('Cause of Death'),
|
||||
]
|
||||
|
||||
|
||||
class PersonTreeFrame(gtk.Frame):
|
||||
|
||||
@ -15,29 +32,48 @@ class PersonTreeFrame(gtk.Frame):
|
||||
def __init__(self,dbstate):
|
||||
gtk.Frame.__init__(self)
|
||||
|
||||
# dummy data for testing
|
||||
self.treestore = gtk.TreeStore(str)
|
||||
self._dbstate = dbstate
|
||||
self._selection = None
|
||||
self._model = None
|
||||
|
||||
# we'll add some data now - 4 rows with 3 child rows each
|
||||
for parent in range(4):
|
||||
piter = self.treestore.append(None, ['parent %i' % parent])
|
||||
for child in range(3):
|
||||
self.treestore.append(piter, ['child %i of parent %i' %
|
||||
(child, parent)])
|
||||
|
||||
self.person_tree = gtk.TreeView(self.treestore)
|
||||
self.tvcolumn = gtk.TreeViewColumn('Column 0')
|
||||
self.person_tree.append_column(self.tvcolumn)
|
||||
self.cell = gtk.CellRendererText()
|
||||
self.tvcolumn.pack_start(self.cell, True)
|
||||
self.tvcolumn.add_attribute(self.cell, 'text', 0)
|
||||
self.person_tree.set_search_column(0)
|
||||
self.tvcolumn.set_sort_column_id(0)
|
||||
self.person_tree.set_reorderable(True)
|
||||
self._tree = gtk.TreeView()
|
||||
self._tree.set_rules_hint(True)
|
||||
self._tree.set_headers_visible(True)
|
||||
#self._tree.connect('key-press-event',self.key_press)
|
||||
|
||||
renderer = gtk.CellRendererText()
|
||||
|
||||
column = gtk.TreeViewColumn(_('Name'), renderer,text=0)
|
||||
column.set_resizable(True)
|
||||
column.set_min_width(225)
|
||||
column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
|
||||
self._tree.append_column(column)
|
||||
|
||||
for pair in self._dbstate.db.get_person_column_order():
|
||||
if not pair[0]:
|
||||
continue
|
||||
name = column_names[pair[1]]
|
||||
column = gtk.TreeViewColumn(name, renderer, markup=pair[1])
|
||||
column.set_resizable(True)
|
||||
column.set_min_width(60)
|
||||
column.set_sizing(gtk.TREE_VIEW_COLUMN_GROW_ONLY)
|
||||
self._tree.append_column(column)
|
||||
|
||||
self.add(self.person_tree)
|
||||
self.add(self._tree)
|
||||
self.set_shadow_type(gtk.SHADOW_IN)
|
||||
|
||||
self.set_model(self._dbstate.db)
|
||||
|
||||
def set_model(self,db):
|
||||
|
||||
self._model = PeopleModel(db)
|
||||
|
||||
self._tree.set_model(self._model)
|
||||
|
||||
self._selection = self._tree.get_selection()
|
||||
|
||||
def get_selection(self):
|
||||
return self._selection
|
||||
|
||||
if gtk.pygtk_version < (2,8,0):
|
||||
gobject.type_register(PersonTreeFrame)
|
||||
|
Loading…
Reference in New Issue
Block a user