From a6a6c787825d5c1996798508534af6f532aadadb Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Fri, 19 Nov 2004 01:14:37 +0000 Subject: [PATCH] * src/FamilyView.py: Handle reordering of spouses by drag and drop * src/RelLib.py: Allow the family list to be set externally * src/gramps.glade: enable reordering flag for spouse list svn: r3736 --- gramps2/ChangeLog | 4 +++ gramps2/src/FamilyView.py | 70 ++++++++++++++++++++++++++++++++++++--- gramps2/src/RelLib.py | 5 +++ gramps2/src/gramps.glade | 8 ++--- 4 files changed, 76 insertions(+), 11 deletions(-) diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 783c47390..1f1359064 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,4 +1,8 @@ 2004-11-18 Don Allingham + * src/FamilyView.py: Handle reordering of spouses by drag + and drop + * src/RelLib.py: Allow the family list to be set externally + * src/gramps.glade: enable reordering flag for spouse list * src/DisplayModels.py: Added ChildModel to handle the child list in the Family View * src/gramps_main.py: add column editor for Family View diff --git a/gramps2/src/FamilyView.py b/gramps2/src/FamilyView.py index 8575adeb7..80050398d 100644 --- a/gramps2/src/FamilyView.py +++ b/gramps2/src/FamilyView.py @@ -57,6 +57,8 @@ _DIED = _('d.') pycode_tgts = [('child', 0, 0)] +spcode_tgts = [('spouse', 0, 0)] + column_names = [ (_('#'),0) , (_('ID'),1) , @@ -82,6 +84,7 @@ class FamilyView: self.top = parent.gtop self.family = None self.cadded = [ 0, 0 ] + self.in_drag = False self.init_interface() def set_widgets(self,val): @@ -124,6 +127,7 @@ class FamilyView: self.ap_parents_clicked) self.top.get_widget('sp_parents_btn2').connect('clicked', self.sp_parents_clicked) + self.parent.views.get_nth_page(2).show_all() if self.parent.views.get_current_page() == 1: self.parent.views.set_current_page(2) @@ -169,6 +173,15 @@ class FamilyView: self.parent.views.set_current_page(1) self.parent.views.get_nth_page(2).hide() + self.spouse_list.drag_dest_set(gtk.DEST_DEFAULT_ALL, + spcode_tgts,ACTION_COPY) + self.spouse_list.drag_source_set(BUTTON1_MASK, + spcode_tgts, ACTION_COPY) + self.spouse_list.connect('drag_data_get', + self.sp_drag_data_get) + self.spouse_list.connect('drag_data_received', + self.sp_drag_data_received) + def init_interface(self): fv = GrampsGconfKeys.get_family_view() self.dd = DateHandler.create_display() @@ -202,7 +215,7 @@ class FamilyView: self.sp_parents.connect('button-press-event',self.sp_par_button_press) self.sp_parents.connect('key-press-event',self.sp_par_key_press) - self.spouse_model = gtk.ListStore(TYPE_STRING) + self.spouse_model = gtk.ListStore(TYPE_STRING,TYPE_STRING) self.spouse_list.set_model(self.spouse_model) self.spouse_selection = self.spouse_list.get_selection() if not already_init: @@ -530,6 +543,8 @@ class FamilyView: SelectChild.EditRel(self.parent.db,person,self.family,self.load_family) def spouse_changed(self,obj): + if self.in_drag: + return model, node = obj.get_selected() if not node: self.display_marriage(None) @@ -539,7 +554,6 @@ class FamilyView: fam = self.parent.db.get_family_from_handle(family_handle) self.display_marriage(fam) - def build_spouse_menu(self,event): menu = gtk.Menu() @@ -660,7 +674,7 @@ class FamilyView: self.parent.people_view.redisplay_person_list(epo.person) self.parent.active_person = ap - self.load_family(self.family) + self.load_family() def new_spouse_after_edit(self,epo,val): @@ -891,7 +905,6 @@ class FamilyView: 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) @@ -961,8 +974,10 @@ class FamilyView: const.family_relations[fm.get_relationship()][0], mdate) self.spouse_model.set(node,0,v) + self.spouse_model.set(node,1,f) else: self.spouse_model.set(node,0,"%s\n" % _("")) + self.spouse_model.set(node,1,f) if family and family.get_handle() in flist: self.display_marriage(family) @@ -1348,7 +1363,43 @@ class FamilyView: trans = self.parent.db.transaction_begin() self.parent.db.commit_family(self.family,trans) self.parent.db.transaction_commit(trans,_('Reorder children')) - self.display_marriage(self.family) + self.load_family(self.family) + + def sp_drag_data_received(self,widget,context,x,y,sel_data,info,time): + self.in_drag = True + path = self.spouse_list.get_path_at_pos(x,y) + if path == None: + row = len(self.person.get_family_handle_list()) + else: + row = path[0][0] -1 + + if sel_data and sel_data.data: + exec 'data = %s' % sel_data.data + exec 'mytype = "%s"' % data[0] + exec 'person = "%s"' % data[1] + + if mytype != 'spouse': + return + + s,i = self.spouse_selection.get_selected() + if not i: + return + + spath = s.get_path(i) + src = spath[0] + family_list = self.person.get_family_handle_list() + + obj = family_list[src] + family_list.remove(obj) + family_list.insert(row,obj) + + self.person.set_family_handle_list(family_list) + trans = self.parent.db.transaction_begin() + self.parent.db.commit_person(self.person,trans) + self.parent.db.transaction_commit(trans,_('Reorder spouses')) + self.load_family() + #self.display_marriage(self.family) + self.in_drag = False def drag_data_get(self,widget, context, sel_data, info, time): store,node = self.child_selection.get_selected() @@ -1359,6 +1410,15 @@ class FamilyView: data = str(('child',handle)); sel_data.set(sel_data.target, bits_per, data) + def sp_drag_data_get(self,widget, context, sel_data, info, time): + store,node = self.spouse_selection.get_selected() + if not node: + return + handle = self.spouse_model.get_value(node,1) + bits_per = 8; # we're going to pass a string + data = str(('spouse',handle)); + sel_data.set(sel_data.target, bits_per, data) + def north_american(self,val): if self.person.get_gender() == RelLib.Person.male: pname = self.person.get_primary_name() diff --git a/gramps2/src/RelLib.py b/gramps2/src/RelLib.py index 2bef86389..c48a64a94 100644 --- a/gramps2/src/RelLib.py +++ b/gramps2/src/RelLib.py @@ -430,6 +430,11 @@ class Person(PrimaryObject,SourceNote): person is a parent or spouse""" return self.family_list + def set_family_handle_list(self,flist) : + """returns the list of Family instances in which the + person is a parent or spouse""" + self.family_list = flist + def clear_family_handle_list(self) : """ Removes all familyts from the family list. diff --git a/gramps2/src/gramps.glade b/gramps2/src/gramps.glade index c11d4b22c..0fee3e8bb 100644 --- a/gramps2/src/gramps.glade +++ b/gramps2/src/gramps.glade @@ -731,10 +731,6 @@ - - - - True @@ -2010,7 +2006,7 @@ True False True - False + True True @@ -2199,7 +2195,7 @@ True False True - False + True True