* src/DisplayModels.py: Added ChildModel to handle the

child list in the Family View
* src/gramps_main.py: add column editor for Family View
* src/GrampsDbBase.py: add storing/retrieving child column order
* src/FamilyView.py: use new ChildModel
* src/PlaceView.py: removed unused index


svn: r3735
This commit is contained in:
Don Allingham
2004-11-18 20:21:06 +00:00
parent 284cc849c3
commit 3139f636f0
6 changed files with 172 additions and 62 deletions

View File

@ -47,6 +47,7 @@ import ChooseParents
import RelLib
import EditPerson
import DateHandler
import DisplayModels
from gettext import gettext as _
from QuestionDialog import QuestionDialog,WarningDialog
@ -56,6 +57,19 @@ _DIED = _('d.')
pycode_tgts = [('child', 0, 0)]
column_names = [
(_('#'),0) ,
(_('ID'),1) ,
(_('Name'),9),
(_('Gender'),3),
(_('Birth Date'),10),
(_('Death Date'),11),
(_('Birth Place'),6),
(_('Death Place'),7),
]
_HANDLE_COL = 8
#-------------------------------------------------------------------------
#
# FamilyView
@ -72,6 +86,8 @@ class FamilyView:
def set_widgets(self,val):
already_init = self.cadded[val]
self.columns = []
if (val):
self.ap_data = self.top.get_widget('ap_data2')
self.swap_btn = self.top.get_widget('swap_btn2')
@ -203,13 +219,6 @@ class FamilyView:
self.child_list.drag_source_set(BUTTON1_MASK, pycode_tgts, ACTION_COPY)
self.child_list.connect('drag_data_get', self.drag_data_get)
self.child_list.connect('drag_data_received',self.drag_data_received)
self.child_model = gtk.ListStore(TYPE_INT, TYPE_STRING,
TYPE_STRING,TYPE_STRING,
TYPE_STRING,TYPE_STRING,
TYPE_STRING,TYPE_STRING)
self.child_selection = self.child_list.get_selection()
if not already_init:
self.child_list.connect('button-press-event',
@ -221,16 +230,32 @@ class FamilyView:
self.add_spouse_btn.connect('clicked',self.add_spouse)
self.select_spouse_btn.connect('clicked',self.select_spouse)
if not already_init:
self.build_columns()
self.child_model = DisplayModels.ChildModel([],self.parent.db)
self.child_list.set_model(self.child_model)
self.child_list.set_search_column(0)
#self.child_list.set_search_column(2)
self.child_selection = self.child_list.get_selection()
if not already_init:
Utils.build_columns(self.child_list,
[ (' ',30,0), (_('Name'),250,-1), (_('ID'),50,-1),
(_('Gender'),75,-1), (_('Birth date'),150,6),
(_('Status'),100,-1), ('',0,-1) ])
self.cadded[fv] = 1
def build_columns(self):
for column in self.columns:
self.child_list.remove_column(column)
self.columns = []
for pair in self.parent.db.get_child_column_order():
if not pair[0]:
continue
name = column_names[pair[1]][0]
column = gtk.TreeViewColumn(name, gtk.CellRendererText(),
text=pair[1])
column.set_resizable(gtk.TRUE)
column.set_min_width(40)
column.set_sort_column_id(column_names[pair[1]][1])
self.columns.append(column)
self.child_list.append_column(column)
def ap_button_press(self,obj,event):
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
@ -294,7 +319,7 @@ class FamilyView:
model, node = self.child_selection.get_selected()
if not node:
return
handle = self.child_model.get_value(node,7)
handle = self.child_model.get_value(node,_HANDLE_COL)
if event.keyval == gtk.gdk.keyval_from_name("Return") and not event.state:
self.child_rel_by_id(handle)
elif event.keyval == gtk.gdk.keyval_from_name("Return") \
@ -434,7 +459,7 @@ class FamilyView:
if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:
self.build_nav_menu(event)
return
handle = self.child_model.get_value(node,7)
handle = self.child_model.get_value(node,_HANDLE_COL)
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
self.child_rel_by_id(handle)
elif event.state == gtk.gdk.SHIFT_MASK and \
@ -487,7 +512,7 @@ class FamilyView:
model, node = self.child_selection.get_selected()
if not node:
return
handle = self.child_model.get_value(node,7)
handle = self.child_model.get_value(node,_HANDLE_COL)
child = self.parent.db.get_person_from_handle(handle)
try:
EditPerson.EditPerson(self.parent, child, self.parent.db,
@ -747,7 +772,7 @@ class FamilyView:
if not node:
return
handle = self.child_model.get_value(node,7)
handle = self.child_model.get_value(node,_HANDLE_COL)
child = self.parent.db.get_person_from_handle(handle)
trans = self.parent.db.transaction_begin()
@ -858,13 +883,15 @@ class FamilyView:
def clear(self):
self.spouse_model.clear()
self.child_model.clear()
self.sp_parents_model.clear()
self.ap_parents_model.clear()
self.ap_model.clear()
self.child_model = DisplayModels.ChildModel([],self.parent.db)
self.child_list.set_model(self.child_model)
def load_family(self,family=None):
self.build_columns()
if self.parent.active_person:
handle = self.parent.active_person.get_handle()
self.person = self.parent.db.get_person_from_handle(handle)
@ -900,7 +927,6 @@ class FamilyView:
self.selected_spouse = None
self.spouse_model.clear()
self.child_model.clear()
self.sp_parents_model.clear()
splist = self.person.get_family_handle_list()
@ -1008,7 +1034,9 @@ class FamilyView:
self.parent.db.transaction_commit(trans,_("Remove from family (%s)") % n)
def display_marriage(self,family):
self.child_model.clear()
hlist = family.get_child_handle_list()
self.child_model = DisplayModels.ChildModel(hlist,self.parent.db)
self.child_list.set_model(self.child_model)
if not family:
self.family = None
@ -1032,39 +1060,6 @@ class FamilyView:
self.update_list(self.sp_parents_model,self.sp_parents,
self.selected_spouse)
i = 0
fiter = None
child_list = list(self.family.get_child_handle_list())
self.child_map = {}
for child_handle in child_list:
status = _("Unknown")
child = self.parent.db.get_person_from_handle(child_handle)
for fam in child.get_parent_family_handle_list():
if fam[0] == self.family.get_handle():
if self.person == self.family.get_father_handle():
status = "%s/%s" % (_(fam[2]),_(fam[1]))
else:
status = "%s/%s" % (_(fam[1]),_(fam[2]))
node = self.child_model.append()
self.child_map[node] = child.get_handle()
if fiter == None:
fiter = self.child_model.get_path(node)
val = child.get_display_info()
i += 1
event = self.parent.db.get_event_from_handle(val[3])
if event:
dval = self.dd.display(event.get_date_object())
else:
dval = u''
self.child_model.set(node,0,i,1,val[0],2,val[1],3,val[2],
4,dval,5,status,6,val[6],7,child.get_handle())
def build_parents_menu(self,family,event):
"""Builds the menu that allows editing operations on the child list"""
menu = gtk.Menu()