* 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
This commit is contained in:
Don Allingham 2004-11-19 01:14:37 +00:00
parent 003912f326
commit a6a6c78782
4 changed files with 76 additions and 11 deletions

View File

@ -1,4 +1,8 @@
2004-11-18 Don Allingham <dallingham@users.sourceforge.net>
* 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

View File

@ -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" % _("<double click to add spouse>"))
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()

View File

@ -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.

View File

@ -731,10 +731,6 @@
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<widget class="GtkSeparatorToolItem" id="separatortoolitem1">
<property name="visible">True</property>
@ -2010,7 +2006,7 @@
<property name="can_focus">True</property>
<property name="headers_visible">False</property>
<property name="rules_hint">True</property>
<property name="reorderable">False</property>
<property name="reorderable">True</property>
<property name="enable_search">True</property>
</widget>
</child>
@ -2199,7 +2195,7 @@
<property name="can_focus">True</property>
<property name="headers_visible">False</property>
<property name="rules_hint">True</property>
<property name="reorderable">False</property>
<property name="reorderable">True</property>
<property name="enable_search">True</property>
</widget>
</child>