diff --git a/src/ChooseParents.py b/src/ChooseParents.py
index 229928c32..941aba7bf 100644
--- a/src/ChooseParents.py
+++ b/src/ChooseParents.py
@@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
-# Copyright (C) 2000 Donald N. Allingham
+# Copyright (C) 2000-2003 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -107,7 +107,7 @@ class ChooseParents:
self.mother_list = self.glade.get_widget("mother_list")
self.flabel = self.glade.get_widget("flabel")
self.mlabel = self.glade.get_widget("mlabel")
- self.showallf = self.glade.get_widget('showall')
+ self.showallf = self.glade.get_widget('showallf')
self.showallm = self.glade.get_widget('showallm')
self.fcombo.set_popdown_strings(const.familyRelations)
@@ -133,92 +133,181 @@ class ChooseParents:
self.type = "Married"
self.prel.set_text(_(self.type))
- self.redraw()
+ self.redrawf()
+ 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_showall_toggled" : self.showall_toggled,
+ "on_showallf_toggled" : self.showallf_toggled,
+ "on_showallm_toggled" : self.showallm_toggled,
"destroy_passed_object" : Utils.destroy_passed_object
})
- def redraw(self):
- """Redraws the potential father and mother lists"""
+ def redrawf(self):
+ """Redraws the potential father list"""
self.fmodel.clear()
- self.mmodel.clear()
-
self.fmodel.new_model()
- self.mmodel.new_model()
-
+
pkey = self.person.getId()
- gender = self.person.getGender()
+
if self.father:
fid = self.father.getId()
else:
fid = None
+
+ bday = self.person.getBirth().getDateObj()
+ dday = self.person.getDeath().getDateObj()
+
+ person_list = []
+ for key in self.db.getPersonKeys():
+ if pkey == key:
+ continue
+
+ person = self.db.getPerson(key)
+ if person.getGender() != person.male:
+ continue
+
+ if not self.showallf.get_active():
+
+ pdday = person.getDeath().getDateObj()
+ pbday = person.getBirth().getDateObj()
+
+ if bday.getYearValid():
+ if pbday.getYearValid():
+ # reject if parents birthdate + 10 > child birthdate
+ if pbday.getLowYear()+10 > bday.getHighYear():
+ continue
+
+ # reject if parents birthdate + 90 < child birthdate
+ if pbday.getHighYear()+90 < bday.getLowYear():
+ continue
+
+ if pdday.getYearValid():
+ # reject if parents birthdate + 10 > child deathdate
+ if pbday.getLowYear()+10 > dday.getHighYear():
+ continue
+
+ if dday.getYearValid():
+ if pbday.getYearValid():
+ # reject if parents deathday + 3 < childs birth date
+ if pdday.getHighYear()+3 < bday.getLowYear():
+ continue
+
+ if pdday.getYearValid():
+ # reject if parents deathday + 150 < childs death date
+ if pdday.getHighYear() + 150 < dday.getLowYear():
+ continue
+
+ person_list.append(person.getId())
+
+ for idval in person_list:
+ d = self.db.getPersonDisplay(idval)
+ info = [d[0],d[1],d[3],d[5],d[6]]
+ if self.type == "Partners":
+ self.fmodel.add(info,None,fid==d[1])
+ elif d[2] == const.male:
+ self.fmodel.add(info,None,fid==d[1])
+
+ if self.type == "Partners":
+ self.flabel.set_label("%s" % _("Parent"))
+ else:
+ self.flabel.set_label("%s" % _("Father"))
+
+ self.fmodel.connect_model()
+
+
+ def redrawm(self):
+ """Redraws the potential mother list"""
+
+ self.mmodel.clear()
+ self.mmodel.new_model()
+
+ pkey = self.person.getId()
+
if self.mother:
mid = self.mother.getId()
else:
mid = None
- comparef = self.date.isValid() and not self.showallf.get_active()
- comparem = self.date.isValid() and not self.showallm.get_active()
-
+ bday = self.person.getBirth().getDateObj()
+ dday = self.person.getDeath().getDateObj()
+
+ person_list = []
for key in self.db.getPersonKeys():
if pkey == key:
continue
- if gender == const.unknown:
+
+ person = self.db.getPerson(key)
+ if person.getGender() != person.female:
continue
- p = self.db.getPerson(key)
+ person = self.db.getPerson(key)
+
+ if not self.showallm.get_active():
- d = self.db.getPersonDisplay(key)
+ pdday = person.getDeath().getDateObj()
+ pbday = person.getBirth().getDateObj()
+
+ if bday.getYearValid():
+ if pbday.getYearValid():
+ # reject if parents birthdate + 10 > child birthdate
+ if pbday.getLowYear()+10 > bday.getHighYear():
+ continue
+
+ # reject if parents birthdate + 90 < child birthdate
+ if pbday.getHighYear()+90 < bday.getLowYear():
+ continue
+
+ if pdday.getYearValid():
+ # reject if parents birthdate + 10 > child deathdate
+ if pbday.getLowYear()+10 > dday.getHighYear():
+ continue
+
+ if dday.getYearValid():
+ if pbday.getYearValid():
+ # reject if parents deathday + 3 < childs birth date
+ if pdday.getHighYear()+3 < bday.getLowYear():
+ continue
+
+ if pdday.getYearValid():
+ # reject if parents deathday + 150 < childs death date
+ if pdday.getHighYear() + 150 < dday.getLowYear():
+ continue
+
+ person_list.append(person.getId())
+
+ for idval in person_list:
+ d = self.db.getPersonDisplay(idval)
info = [d[0],d[1],d[3],d[5],d[6]]
if self.type == "Partners":
- if not(comparef and self.not_likely(p)):
- self.fmodel.add(info,None,fid==d[1])
- if not(comparem and self.not_likely(p)):
- self.mmodel.add(info,None,mid==d[1])
- elif d[2] == const.male:
- if comparef and self.not_likely(p):
- continue
- self.fmodel.add(info,None,fid==d[1])
- else:
- if comparem and self.not_likely(p):
- continue
+ self.mmodel.add(info,None,mid==d[1])
+ elif d[2] == const.female:
self.mmodel.add(info,None,mid==d[1])
if self.type == "Partners":
self.mlabel.set_label("%s" % _("Parent"))
- self.flabel.set_label("%s" % _("Parent"))
else:
self.mlabel.set_label("%s" % _("Mother"))
- self.flabel.set_label("%s" % _("Father"))
- self.fmodel.connect_model()
self.mmodel.connect_model()
- def not_likely(self,person):
- """
- Rough attempt to eliminate a few non-realistic relationships. If the person
- was born after the primary person, he or she can't be a parent.
- """
- bdate = person.getBirth().getDateObj()
- if bdate.isValid() and Date.compare_dates(self.date,bdate) < 1:
- return 1
- return 0
def parent_relation_changed(self,obj):
"""Called everytime the parent relationship information is changegd"""
self.old_type = self.type
self.type = const.save_frel(obj.get_text())
if self.old_type == "Partners" or self.type == "Partners":
- self.redraw()
+ self.redrawf()
+ self.redrawm()
- def showall_toggled(self,obj):
- self.redraw()
+ def showallf_toggled(self,obj):
+ self.redrawf()
+
+ def showallm_toggled(self,obj):
+ self.redrawm()
def find_family(self,father,mother):
"""
diff --git a/src/gramps.glade b/src/gramps.glade
index 22019063b..994fb3c09 100644
--- a/src/gramps.glade
+++ b/src/gramps.glade
@@ -3264,7 +3264,7 @@
-
+
True
True
_Show all
@@ -3276,7 +3276,7 @@
Show all
-
+
0
@@ -3426,7 +3426,7 @@
False
False
True
-
+
0