diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index c5d512c19..fa011a19f 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,4 +1,7 @@ 2005-08-31 Don Allingham + * src/plugins/RelCalc.py: use PeopleModel instead of ListModel, + check to the person being compared to him/herself + * src/plugins/relcalc.glade: increase the width of the window. * src/Report.py: Catch thrown Database error * src/GraphLayout.py: catch database loops * src/po/de.po: fix %()s mismatches diff --git a/gramps2/src/plugins/RelCalc.py b/gramps2/src/plugins/RelCalc.py index 8e328eb1a..75e2649a4 100644 --- a/gramps2/src/plugins/RelCalc.py +++ b/gramps2/src/plugins/RelCalc.py @@ -47,6 +47,20 @@ import Utils import NameDisplay import ListModel import PluginMgr +import PeopleModel + +column_names = [ + _('Name'), + _('ID') , + _('Gender'), + _('Birth Date'), + _('Birth Place'), + _('Death Date'), + _('Death Place'), + _('Spouse'), + _('Last Change'), + _('Cause of Death'), + ] #------------------------------------------------------------------------- # @@ -89,40 +103,35 @@ class RelCalc: 'person_name' : name }, self.title) - self.people = self.glade.get_widget("peopleList") + self.tree = self.glade.get_widget("peopleList") + + self.model = PeopleModel.PeopleModel(self.db) + self.tree.set_model(self.model) - self.clist = ListModel.ListModel(self.people, - [(_('Name'),3,150),(_('Gender'),1,50), - (_('Birth Date'),4,150), - ('',-1,0),('',-1,0)], - self.on_apply_clicked) - self.clist.new_model() - for key in self.db.get_person_handles(sort_handles=False): - p = self.db.get_person_from_handle(key) - if p == self.person: + column = gtk.TreeViewColumn(_('Name'), gtk.CellRendererText(),text=0) + column.set_resizable(True) + column.set_min_width(225) + column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + self.tree.append_column(column) + + index = 1 + for pair in self.db.get_person_column_order(): + if not pair[0]: continue - bh = p.get_birth_handle() - if bh: - bdate = self.db.get_event_from_handle(bh).get_date() - else: - bdate = "" - name = p.get_primary_name() - if p.get_gender() == RelLib.Person.MALE: - gender = _("male") - elif p.get_gender() == RelLib.Person.FEMALE: - gender = _("female") - else: - gender = _("unknown") - self.clist.add([name.get_name(), gender, bdate, - name.get_sort_name(), bdate], - p.get_handle()) + name = column_names[pair[1]] + column = gtk.TreeViewColumn(name, gtk.CellRendererText(), markup=pair[1]) + column.set_resizable(True) + column.set_min_width(60) + column.set_sizing(gtk.TREE_VIEW_COLUMN_GROW_ONLY) + self.tree.append_column(column) + index += 1 + + self.tree.get_selection().connect('changed',self.on_apply_clicked) - self.clist.connect_model() self.glade.signal_autoconnect({ "on_close_clicked" : self.close, "on_delete_event" : self.on_delete_event, - "on_apply_clicked" : self.on_apply_clicked }) self.add_itself_to_menu() @@ -150,17 +159,22 @@ class RelCalc: self.window.present() def on_apply_clicked(self,obj): - model,node = self.clist.get_selected() + model,node = self.tree.get_selection().get_selected() if not node: return - handle = self.clist.get_object(node) + handle = model.get_value(node,len(PeopleModel.COLUMN_DEFS)-1) other_person = self.db.get_person_from_handle(handle) - (rel_string,common) = self.relationship.get_relationship(self.person,other_person) - length = len(common) + if other_person != None: + (rel_string,common) = self.relationship.get_relationship(self.person,other_person) + length = len(common) + else: + length = 0 - if length == 1: + if other_person == None: + commontext = "" + elif length == 1: person = self.db.get_person_from_handle(common[0]) name = person.get_primary_name().get_regular_name() commontext = " " + _("Their common ancestor is %s.") % name @@ -184,10 +198,16 @@ class RelCalc: commontext = "" text1 = self.glade.get_widget("text1").get_buffer() - p1 = NameDisplay.displayer.display(self.person) - p2 = NameDisplay.displayer.display(other_person) - if rel_string == "": + if other_person: + p1 = NameDisplay.displayer.display(self.person) + p2 = NameDisplay.displayer.display(other_person) + + if other_person == None: + rstr = "" + elif self.person.handle == other_person.handle: + rstr = _("%s and %s are the same person.") % (p1,p2) + elif rel_string == "": rstr = _("%(person)s and %(active_person)s are not related.") % { 'person' : p2, 'active_person' : p1 } else: diff --git a/gramps2/src/plugins/relcalc.glade b/gramps2/src/plugins/relcalc.glade index e7a72c495..b7d04bc59 100644 --- a/gramps2/src/plugins/relcalc.glade +++ b/gramps2/src/plugins/relcalc.glade @@ -9,7 +9,7 @@ GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False - 450 + 600 400 True False @@ -18,6 +18,7 @@ False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST + True False @@ -74,6 +75,10 @@ 0.5 0 6 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 5 @@ -100,6 +105,9 @@ True False True + False + False + False