* src/AddSpouse.py: use ComboBox instead of ComboBoxEntry for

handling child/parent relationships
* src/ChooseParents.py: use ComboBox instead of ComboBoxEntry for
handling child/parent relationships
* src/FamilyView.py: use ModifyParents instead of EditRel
* src/SelectChild.py: use ComboBox instead of ComboBoxEntry for
handling child/parent relationships. Remove EditRel class
* src/gramps.glade: use ComboBox instead of ComboBoxEntry for
handling child/parent relationships, delete editrel


svn: r4109
This commit is contained in:
Don Allingham 2005-03-02 20:48:58 +00:00
parent 9a507d524c
commit 01431cee86
6 changed files with 253 additions and 2082 deletions

View File

@ -1,3 +1,14 @@
2005-03-02 Don Allingham <dallingham@users.sourceforge.net>
* src/AddSpouse.py: use ComboBox instead of ComboBoxEntry for
handling child/parent relationships
* src/ChooseParents.py: use ComboBox instead of ComboBoxEntry for
handling child/parent relationships
* src/FamilyView.py: use ModifyParents instead of EditRel
* src/SelectChild.py: use ComboBox instead of ComboBoxEntry for
handling child/parent relationships. Remove EditRel class
* src/gramps.glade: use ComboBox instead of ComboBoxEntry for
handling child/parent relationships, delete editrel
2005-03-02 Alex Roitman <shura@alex.neuro.umn.edu>
* src/DbPrompter.py (ImportDbPrompter.chooser): Explicitly
import XML and GEDCOM.

View File

@ -136,7 +136,6 @@ class AddSpouse:
"on_spouse_help_clicked" : self.on_spouse_help_clicked,
"on_show_toggled" : self.on_show_toggled,
"on_new_spouse_clicked" : self.new_spouse_clicked,
"on_rel_type_changed" : self.relation_type_changed,
"destroy_passed_object" : Utils.destroy_passed_object
})

View File

@ -54,6 +54,7 @@ import const
import Utils
import PeopleModel
import NameDisplay
import GenericFilter
from QuestionDialog import ErrorDialog
#-------------------------------------------------------------------------
@ -92,8 +93,11 @@ class ChooseParents:
self.renderer = gtk.CellRendererText()
# set default filters
self.father_filter = self.likely_father_filter
self.mother_filter = self.likely_mother_filter
self.father_filter = GenericFilter.GenericFilter()
self.father_filter.add_rule(GenericFilter.IsMale([]))
self.mother_filter = GenericFilter.GenericFilter()
self.mother_filter.add_rule(GenericFilter.IsFemale([]))
birth_event = self.db.get_event_from_handle(self.person.get_birth_handle())
if birth_event:
@ -122,8 +126,8 @@ class ChooseParents:
Utils.set_titles(self.top,self.glade.get_widget('title'),
self.title_text,_('Choose Parents'))
self.mother_rel = self.glade.get_widget("mrel")
self.father_rel = self.glade.get_widget("frel")
self.mcombo = self.glade.get_widget("mcombo")
self.fcombo = self.glade.get_widget("fcombo")
self.prel = self.glade.get_widget("prel_combo")
self.title = self.glade.get_widget("chooseTitle")
self.father_list = self.glade.get_widget("father_list")
@ -132,6 +136,7 @@ class ChooseParents:
self.mlabel = self.glade.get_widget("mlabel")
self.showallf = self.glade.get_widget('showallf')
self.showallm = self.glade.get_widget('showallm')
self.add_itself_to_menu()
self.build_father_list()
self.build_mother_list()
@ -139,15 +144,15 @@ class ChooseParents:
if gtk.gdk.screen_height() > 700:
self.father_list.set_size_request(-1,150)
self.mother_list.set_size_request(-1,150)
for (f,mr,fr) in self.person.get_parent_family_handle_list():
if f == self.family:
self.mother_rel.set_text(_(mr))
self.father_rel.set_text(_(fr))
mrel = mr
frel = fr
break
else:
self.mother_rel.set_text(_("Birth"))
self.father_rel.set_text(_("Birth"))
mrel = "Birth"
frel = "Birth"
if self.family:
self.type = self.family.get_relationship()
@ -158,18 +163,44 @@ class ChooseParents:
self.redrawm()
self.glade.signal_autoconnect({
"on_save_parents_clicked" : self.save_parents_clicked,
"on_add_parent_clicked" : self.add_parent_clicked,
"on_prel_changed" : self.parent_relation_changed,
"on_showallf_toggled" : self.showallf_toggled,
"on_showallm_toggled" : self.showallm_toggled,
"destroy_passed_object" : self.close,
#"on_showallf_toggled" : self.showallf_toggled,
#"on_showallm_toggled" : self.showallm_toggled,
#"destroy_passed_object" : self.close,
"on_help_familyDialog_clicked" : self.on_help_clicked,
"on_familyDialog_delete_event" : self.on_delete_event,
})
self.add_itself_to_menu()
self.top.show()
values = const.child_relations.get_values()
self.keys = []
for value in values:
self.keys.append(const.child_relations.find_key(value))
self.keys.sort()
self.build_list(self.mcombo,mr)
self.build_list(self.fcombo,fr)
self.val = self.top.run()
if self.val == gtk.RESPONSE_OK:
self.save_parents_clicked(None)
self.close(None)
def build_list(self,opt_menu,sel):
cell = gtk.CellRendererText()
opt_menu.pack_start(cell,True)
opt_menu.add_attribute(cell,'text',0)
store = gtk.ListStore(str)
sel_index = 0
index = 0
for val in self.keys:
if _(sel) == val:
sel_index = index
index += 1
store.append(row=[val])
opt_menu.set_model(store)
opt_menu.set_active(sel_index)
def build_father_list(self):
self.father_selection = self.father_list.get_selection()
@ -202,14 +233,14 @@ class ChooseParents:
tree.append_column(column)
def on_delete_event(self,obj,b):
self.close_child_windows()
self.remove_itself_from_menu()
self.close_child_windows()
def close(self,obj):
self.close_child_windows()
self.remove_itself_from_menu()
self.close_child_windows()
self.top.destroy()
def close_child_windows(self):
for child_window in self.child_windows.values():
child_window.close(None)
@ -246,88 +277,9 @@ class ChooseParents:
def all_females_filter(self,person):
return (person.get_gender() == RelLib.Person.FEMALE)
def likely_father_filter(self,person):
if person.get_gender() != RelLib.Person.MALE:
return 0
if self.exclude.has_key(person.get_handle()):
return 0
return self.likely_filter(person)
def likely_mother_filter(self,person):
if person.get_gender() != RelLib.Person.FEMALE:
return 0
if self.exclude.has_key(person.get_handle()):
return 0
return self.likely_filter(person)
def likely_filter(self,person):
if person.get_handle() == self.person.get_handle():
return 0
birth_event = self.db.get_event_from_handle(person.get_birth_handle())
if birth_event:
pbday = birth_event.get_date_object()
else:
pbday = None
death_event = self.db.get_event_from_handle(person.get_death_handle())
if death_event:
pdday = death_event.get_date_object()
else:
pdday = None
if self.bday and self.bday.get_year_valid():
if pbday and pbday.get_year_valid():
# reject if parents birthdate + 10 > child birthdate
if pbday.get_year()+10 > self.bday.get_high_year():
return 0
# reject if parents birthdate + 90 < child birthdate
if pbday.get_high_year()+90 < self.bday.get_year():
return 0
if pdday and pdday.get_year_valid():
# reject if parents birthdate + 10 > child deathdate
if self.dday and pbday.get_year()+10 > self.dday.get_high_year():
return 0
if self.dday and self.dday.get_year_valid():
if pbday and pbday.get_year_valid():
# reject if parents deathday + 3 < childs birth date
if pdday and self.bday and pdday.get_high_year()+3 < self.bday.get_year():
return 0
if pdday and pdday.get_year_valid():
# reject if parents deathday + 150 < childs death date
if pdday.get_high_year() + 150 < self.dday.get_year():
return 0
return 1
def build_exclude_list(self):
self.exclude = { self.person.get_handle() : 1 }
for family_handle in self.person.get_family_handle_list():
fam = self.db.get_family_from_handle(family_handle)
for handle in [fam.get_father_handle(), fam.get_mother_handle()] + \
fam.get_child_handle_list():
if handle:
self.exclude[handle] = 1
def redrawf(self):
"""Redraws the potential father list"""
self.build_exclude_list()
self.father_nsort = PeopleModel.PeopleModel(self.db)
cursor = self.db.get_person_cursor()
data = cursor.first()
while data:
person = RelLib.Person()
person.unserialize(data[1])
visible = self.father_filter(person)
if visible:
self.father_nsort.set_visible(data[0],visible)
data = cursor.next()
cursor.close()
self.father_model = gtk.TreeModelSort(self.father_nsort)
self.father_model = PeopleModel.PeopleModel(self.db,self.father_filter)
self.father_list.set_model(self.father_model)
if self.type == RelLib.Family.CIVIL_UNION:
@ -337,21 +289,7 @@ class ChooseParents:
def redrawm(self):
"""Redraws the potential mother list"""
self.mother_nsort = PeopleModel.PeopleModel(self.db)
self.build_exclude_list()
cursor = self.db.get_person_cursor()
data = cursor.first()
while data:
person = RelLib.Person()
person.unserialize(data[1])
visible = self.mother_filter(person)
if visible:
self.mother_nsort.set_visible(data[0],visible)
data = cursor.next()
cursor.close()
self.mother_model = gtk.TreeModelSort(self.mother_nsort)
self.mother_model = PeopleModel.PeopleModel(self.db,self.mother_filter)
self.mother_list.set_model(self.mother_model)
if self.type == RelLib.Family.CIVIL_UNION:
@ -492,14 +430,14 @@ class ChooseParents:
of the main perosn.
"""
try:
mother_rel = const.child_relations.find_value(self.mother_rel.get_text())
mother_rel = self.keys[self.mcombo.get_active()]
except KeyError:
mother_rel = const.child_relations.find_value("Birth")
mother_rel = "Birth"
try:
father_rel = const.child_relations.find_value(self.father_rel.get_text())
father_rel = self.keys[self.fcombo.get_active()]
except KeyError:
father_rel = const.child_relations.find_value("Birth")
father_rel = "Birth"
trans = self.db.transaction_begin()
if self.father or self.mother:
@ -548,7 +486,6 @@ class ChooseParents:
self.db.commit_family(self.family,trans)
self.family_update(None)
self.db.transaction_commit(trans,_("Choose Parents"))
self.close(obj)
def add_new_parent(self,epo,val):
"""Adds a new person to either the father list or the mother list,
@ -604,11 +541,11 @@ class ChooseParents:
if mother_rel == fam[1] and father_rel == fam[2]:
return
if mother_rel != fam[1] or father_rel != fam[2]:
self.person.remove_parent_family_handle(family.get_handle())
self.person.add_parent_family_handle(family.get_handle(),mother_rel,father_rel)
self.person.remove_parent_family_handle(family_handle)
self.person.add_parent_family_handle(family_handle,mother_rel,father_rel)
break
else:
self.person.add_parent_family_handle(family.get_handle(),mother_rel,father_rel)
self.person.add_parent_family_handle(family_handle,mother_rel,father_rel)
trans = self.db.transaction_begin()
self.db.commit_person(self.person,trans)
@ -620,7 +557,8 @@ class ChooseParents:
self.db.transaction_commit(trans,_("Choose Parents"))
class ModifyParents:
def __init__(self,db,person,family_handle,family_update,full_update,parent_window=None):
def __init__(self, db, person, family_handle, family_update,
full_update, parent_window=None):
"""
Creates a ChoosePerson dialog box.
@ -661,9 +599,6 @@ class ModifyParents:
self.orig_mrel = _(mr)
self.orig_frel = _(fr)
self.mother_rel.set_text(self.orig_mrel)
self.father_rel.set_text(self.orig_frel)
self.glade.signal_autoconnect({
"on_parents_help_clicked" : self.on_help_clicked,
})
@ -682,35 +617,61 @@ class ModifyParents:
fname = NameDisplay.displayer.display(self.father)
self.glade.get_widget("fname").set_text(fname)
else:
self.father_rel.set_sensitive(0)
self.father_rel.set_sensitive(False)
if self.mother:
mname = NameDisplay.displayer.display(self.mother)
self.glade.get_widget("mname").set_text(mname)
else:
self.mother_rel.set_sensitive(0)
self.mother_rel.set_sensitive(False)
self.pref = self.glade.get_widget('preferred')
if len(self.person.get_parent_family_handle_list()) > 1:
self.glade.get_widget('pref_label').show()
self.pref.show()
if self.family == self.person.get_parent_family_handle_list()[0]:
self.pref.set_active(1)
self.pref.set_active(True)
else:
self.pref.set_active(0)
self.pref.set_active(False)
if parent_window:
self.top.set_transient_for(parent_window)
self.glade.get_widget('fcombo').set_sensitive(False)
self.glade.get_widget('mcombo').set_sensitive(False)
self.glade.get_widget('ok').set_sensitive(False)
self.fcombo = self.glade.get_widget('fcombo')
self.mcombo = self.glade.get_widget('mcombo')
if self.db.readonly:
self.fcombo.set_sensitive(False)
self.mcombo.set_sensitive(False)
self.glade.get_widget('ok').set_sensitive(False)
values = const.child_relations.get_values()
self.keys = []
for value in values:
self.keys.append(const.child_relations.find_key(value))
self.keys.sort()
self.build_list(self.mcombo,self.orig_mrel)
self.build_list(self.fcombo,self.orig_frel)
self.val = self.top.run()
if self.val == gtk.RESPONSE_OK:
self.save_parents_clicked()
self.top.destroy()
def build_list(self,opt_menu,sel):
cell = gtk.CellRendererText()
store = gtk.ListStore(str)
sel_index = 0
index = 0
for val in self.keys:
if _(sel) == val:
sel_index = index
index += 1
store.append(row=[val])
opt_menu.set_model(store)
opt_menu.set_active(sel_index)
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
@ -722,14 +683,16 @@ class ModifyParents:
Called with the OK button nis pressed. Saves the selected people as parents
of the main perosn.
"""
mother_rel = const.child_relations.find_value(self.mother_rel.get_text())
father_rel = const.child_relations.find_value(self.father_rel.get_text())
mod = 0
mother_rel = self.keys[self.mcombo.get_active()]
father_rel = self.keys[self.fcombo.get_active()]
mod = False
fhandle = self.family.get_handle()
if mother_rel != self.orig_mrel or father_rel != self.orig_frel:
self.person.remove_parent_family_handle(self.family.get_handle())
self.person.add_parent_family_handle(self.family.get_handle(),mother_rel,father_rel)
mod = 1
self.person.remove_parent_family_handle(fhandle)
self.person.add_parent_family_handle(fhandle,mother_rel,father_rel)
mod = True
if len(self.person.get_parent_family_handle_list()):
make_pref = self.pref.get_active()
@ -737,15 +700,16 @@ class ModifyParents:
plist = self.person.get_parent_family_handle_list()
if make_pref:
if self.family != plist[0]:
self.person.set_main_parent_family_handle(self.family.get_handle())
mod = 1
self.person.set_main_parent_family_handle(fhandle)
mod = True
else:
if self.family == plist[0]:
self.person.set_main_parent_family_handle(plist[0])
mod = 1
mod = True
if mod:
trans = self.db.transaction_begin()
self.db.commit_person(self.person,trans)
self.db.transaction_commit(trans,_("Modify Parents"))
self.family_update(None)
if self.family_update:
self.family_update(None)

View File

@ -546,11 +546,13 @@ class FamilyView:
def child_rel(self,obj):
handle = obj.get_data('o')
person = self.parent.db.get_person_from_handle(handle)
SelectChild.EditRel(self.parent.db,person,self.family,self.load_family)
ChooseParents.ModifyParents(self.parent.db, person, self.family.get_handle(),
None,self.load_family)
def child_rel_by_id(self,handle):
person = self.parent.db.get_person_from_handle(handle)
SelectChild.EditRel(self.parent.db,person,self.family,self.load_family)
ChooseParents.ModifyParents(self.parent.db, person, self.family.get_handle(),
None,self.load_family)
def spouse_changed(self,obj):
if self.in_drag:

View File

@ -87,39 +87,26 @@ class SelectChild:
self.add_child = self.xml.get_widget("childlist")
if (self.family):
self.mrel = self.xml.get_widget("mrel_combo")
self.frel = self.xml.get_widget("frel_combo")
values = const.child_relations.get_values()
self.keys = []
for value in values:
self.keys.append(const.child_relations.find_key(value))
self.keys.sort()
self.build_list(self.mrel,"Birth")
self.build_list(self.frel,"Birth")
if self.family:
father = self.db.get_person_from_handle(self.family.get_father_handle())
mother = self.db.get_person_from_handle(self.family.get_mother_handle())
if father != None:
fname = NameDisplay.displayer.display(father)
label = _("Relationship to %(father)s") % {
'father' : fname
}
self.xml.get_widget("flabel").set_text(label)
if mother != None:
mname = NameDisplay.displayer.display(mother)
label = _("Relationship to %(mother)s") % {
'mother' : mname
}
self.xml.get_widget("mlabel").set_text(label)
else:
fname = NameDisplay.displayer.display(self.person)
label = _("Relationship to %s") % fname
if self.person.get_gender() == RelLib.Person.MALE:
self.xml.get_widget("flabel").set_text(label)
self.xml.get_widget("mrel_combo").set_sensitive(0)
self.mrel.set_sensitive(False)
else:
self.xml.get_widget("mlabel").set_text(label)
self.xml.get_widget("frel_combo").set_sensitive(0)
self.mrel = self.xml.get_widget("mrel")
self.frel = self.xml.get_widget("frel")
self.mrel.set_text(_("Birth"))
self.frel.set_text(_("Birth"))
self.frel.set_sensitive(False)
self.refmodel = PeopleModel.PeopleModel(self.db)
@ -129,6 +116,22 @@ class SelectChild:
self.add_columns(self.add_child)
self.top.show()
def build_list(self,opt_menu,sel):
cell = gtk.CellRendererText()
opt_menu.pack_start(cell,True)
opt_menu.add_attribute(cell,'text',0)
store = gtk.ListStore(str)
sel_index = 0
index = 0
for val in self.keys:
if _(sel) == val:
sel_index = index
index += 1
store.append(row=[val])
opt_menu.set_model(store)
opt_menu.set_active(sel_index)
def add_columns(self,tree):
column = gtk.TreeViewColumn(_('Name'), self.renderer,text=0)
column.set_resizable(True)
@ -317,13 +320,13 @@ class SelectChild:
self.family.add_child_handle(select_child.get_handle())
mrel = const.child_relations.find_value(self.mrel.get_text())
mrel = self.keys[self.mrel.get_active()]
mother = self.db.get_person_from_handle(self.family.get_mother_handle())
if mother and mother.get_gender() != RelLib.Person.FEMALE:
if mrel == "Birth":
mrel = "Unknown"
frel = const.child_relations.find_value(self.frel.get_text())
frel = self.keys[self.frel.get_active()]
father = self.db.get_person_from_handle(self.family.get_father_handle())
if father and father.get_gender() !=RelLib.Person.MALE:
if frel == "Birth":

File diff suppressed because it is too large Load Diff