diff --git a/src/FamilyView.py b/src/FamilyView.py index 1b77262f9..31a64af30 100644 --- a/src/FamilyView.py +++ b/src/FamilyView.py @@ -692,7 +692,7 @@ class FamilyView: if not self.person: return try: - SelectChild.SelectChild(self.parent.db, self.family, + SelectChild.SelectChild(self.parent, self.parent.db, self.family, self.person, self.load_family, self.update_person_list) except: diff --git a/src/SelectChild.py b/src/SelectChild.py index b692aa2a0..18bc3bb89 100644 --- a/src/SelectChild.py +++ b/src/SelectChild.py @@ -55,7 +55,8 @@ from RelLib import Person #------------------------------------------------------------------------- class SelectChild: - def __init__(self,db,family,person,redraw,add_person): + def __init__(self,parent,db,family,person,redraw,add_person): + self.parent = parent self.db = db self.person = person self.family = family @@ -72,7 +73,8 @@ class SelectChild: "on_save_child_clicked" : self.on_save_child_clicked, "on_child_help_clicked" : self.on_child_help_clicked, "on_show_toggled" : self.on_show_toggled, - "destroy_passed_object" : self.close + "destroy_passed_object" : self.close, + "on_select_child_delete_event" : self.on_delete_event, }) self.select_child_list = {} @@ -122,19 +124,47 @@ class SelectChild: self.refmodel = ListModel.ListModel(self.add_child,titles) self.redraw_child_list(2) + self.add_itself_to_menu() + self.top.show() + + def on_delete_event(self,obj,b): + self.remove_itself_from_menu() + + def close(self,obj): + self.remove_itself_from_menu() + self.top.destroy() + + def add_itself_to_menu(self): + self.parent.child_windows[self] = self + self.parent_menu_item = gtk.MenuItem(_('Add Child to Family')) + self.parent_menu_item.connect("activate",self.present) + self.parent_menu_item.show() + self.parent.winsmenu.append(self.parent_menu_item) + + def remove_itself_from_menu(self): + del self.parent.child_windows[self] + self.parent_menu_item.destroy() + + def present(self,obj): + self.top.present() def on_child_help_clicked(self,obj): """Display the relevant portion of GRAMPS manual""" gnome.help_display('gramps-manual','gramps-edit-quick') - def close(self,obj): - self.top.destroy() - def redraw_child_list(self,filter): self.refmodel.clear() self.refmodel.new_model() - bday = self.person.get_birth().get_date_object() - dday = self.person.get_death().get_date_object() + birth = self.db.find_event_from_id(self.person.get_birth_id()) + death = self.db.find_event_from_id(self.person.get_death_id()) + if birth: + bday = birth.get_date_object() + else: + bday = None + if death: + dday = death.get_date_object() + else: + dday = None slist = {} for f in self.person.get_parent_family_id_list(): @@ -154,11 +184,20 @@ class SelectChild: if slist.has_key(key) or person.get_main_parents_family_id(): continue - pdday = person.get_death().get_date_object() - pbday = person.get_birth().get_date_object() + birth_event = self.db.find_event_from_id(person.get_birth_id()) + if birth_event: + pbday = birth_event.get_date_object() + else: + pbday = None - if bday.getYearValid(): - if pbday.getYearValid(): + death_event = self.db.find_event_from_id(person.get_death_id()) + if death_event: + pdday = death_event.get_date_object() + else: + pdday = None + + if bday and bday.getYearValid(): + if pbday and pbday.getYearValid(): # reject if child birthdate < parents birthdate + 10 if pbday.getLowYear() < bday.getHighYear()+10: continue @@ -167,18 +206,18 @@ class SelectChild: if pbday.getLowYear() > bday.getHighYear()+90: continue - if pdday.getYearValid(): + if pdday and pdday.getYearValid(): # reject if child deathdate < parents birthdate+ 10 if pdday.getLowYear() < bday.getHighYear()+10: continue - if dday.getYearValid(): - if pbday.getYearValid(): + if dday and dday.getYearValid(): + if pbday and pbday.getYearValid(): # reject if childs birth date > parents deathday + 3 if pbday.getLowYear() > dday.getHighYear()+3: continue - if pdday.getYearValid(): + if pdday and pdday.getYearValid(): # reject if childs death date > parents deathday + 150 if pdday.getLowYear() > dday.getHighYear() + 150: continue @@ -237,9 +276,9 @@ class SelectChild: select_child.add_parent_family_id(self.family.get_id(),mrel,frel) - Utils.modified() - self.top.destroy() + self.db.commit_person(select_child) self.redraw(self.family) + self.close(obj) def on_show_toggled(self,obj): self.redraw_child_list(not obj.get_active()) @@ -367,5 +406,6 @@ class EditRel: frel = "Unknown" self.child.change_parent_family_id(self.family.get_id(),mrel,frel) + self.db.commit_person(self.child) self.update() self.top.destroy() diff --git a/src/gramps.glade b/src/gramps.glade index 64df27bad..d074306a6 100644 --- a/src/gramps.glade +++ b/src/gramps.glade @@ -4907,13 +4907,14 @@ GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE - True + False 500 400 True False gramps.png False +