diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 957f414d2..9671a4100 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,18 @@ +2005-07-26 Don Allingham + * src/EditPerson.py: NameDisplay enhancements + * src/FamilyView.py: NameDisplay enhancements + * src/NameDisplay.py: NameDisplay enhancements + * src/NameEdit.py: NameDisplay enhancements + * src/PedView.py: NameDisplay enhancements + * src/PeopleModel.py: NameDisplay enhancements + * src/PeopleView.py: NameDisplay enhancements + * src/RelLib.py: NameDisplay enhancements + * src/Report.py: NameDisplay enhancements + * src/SelectChild.py: NameDisplay enhancements + * src/Witness.py: NameDisplay enhancements + * src/gramps.glade: NameDisplay enhancements + * src/gramps_main.py: NameDisplay enhancements + 2005-07-26 Martin Hawlisch * src/NavWebPage.py: Catch missing header/footer notes; Add Surname page that is sorted by the number of persons. diff --git a/gramps2/src/EditPerson.py b/gramps2/src/EditPerson.py index 7b0d476c4..a6429ddfd 100644 --- a/gramps2/src/EditPerson.py +++ b/gramps2/src/EditPerson.py @@ -99,6 +99,7 @@ class EditPerson: self.dp = DateHandler.parser self.dd = DateHandler.displayer + self.nd = NameDisplay.displayer self.orig_handle = person.get_handle() # UGLY HACK to refresh person object from handle if that exists # done to ensure that the person object is not stale, as it could @@ -122,7 +123,6 @@ class EditPerson: self.update_death = False self.pdmap = {} self.add_places = [] - self.name_display = NameDisplay.displayer self.should_guess_gender = (not person.get_gramps_id() and person.get_gender () == RelLib.Person.UNKNOWN) @@ -629,7 +629,7 @@ class EditPerson: def add_itself_to_winsmenu(self): self.parent.child_windows[self.orig_handle] = self - win_menu_label = self.name_display.display(self.person) + win_menu_label = self.nd.display(self.person) if not win_menu_label.strip(): win_menu_label = _("New Person") self.win_menu_item = gtk.MenuItem(win_menu_label) @@ -1175,13 +1175,13 @@ class EditPerson: def on_add_url_clicked(self,obj): """Invokes the url editor to add a new name""" import UrlEdit - pname = self.name_display.display(self.person) + pname = self.nd.display(self.person) UrlEdit.UrlEditor(self,pname,None,self.url_edit_callback,self.window) def on_add_attr_clicked(self,obj): """Brings up the AttributeEditor for a new attribute""" import AttrEdit - pname = self.name_display.display(self.person) + pname = self.nd.display(self.person) AttrEdit.AttributeEditor(self,None,pname,const.personalAttributes, self.attr_edit_callback,self.window) @@ -1202,7 +1202,7 @@ class EditPerson: def on_event_add_clicked(self,obj): """Brings up the EventEditor for a new event""" import EventEdit - pname = self.name_display.display(self.person) + pname = self.nd.display(self.person) EventEdit.EventEditor( self,pname,const.personalEvents, const.personal_events,None,None,0, @@ -1215,7 +1215,7 @@ class EditPerson: import EventEdit self.update_birth = True - pname = self.name_display.display(self.person) + pname = self.nd.display(self.person) event = self.birth event.set_date_object(Date.Date(self.birth_date_object)) def_placename = unicode(self.bplace.get_text()) @@ -1235,7 +1235,7 @@ class EditPerson: import EventEdit self.update_death = True - pname = self.name_display.display(self.person) + pname = self.nd.display(self.person) event = self.death event.set_date_object(Date.Date(self.death_date_object)) def_placename = unicode(self.dplace.get_text()) @@ -1292,7 +1292,7 @@ class EditPerson: the close window""" if self.did_data_change() and not GrampsKeys.get_dont_ask(): - n = "%s" % self.person.get_primary_name().get_regular_name() + n = "%s" % self.nd.display(self.person) SaveDialog(_('Save changes to %s?') % n, _('If you close without saving, the changes you ' 'have made will be lost'), @@ -1308,7 +1308,7 @@ class EditPerson: """If the data has changed, give the user a chance to cancel the close window""" if self.did_data_change() and not GrampsKeys.get_dont_ask(): - n = "%s" % self.person.get_primary_name().get_regular_name() + n = "%s" % self.nd.display(self.person) SaveDialog(_('Save Changes to %s?') % n, _('If you close without saving, the changes you ' 'have made will be lost'), @@ -1472,7 +1472,7 @@ class EditPerson: store,node = self.atree.get_selected() if node: attr = self.atree.get_object(node) - pname = self.name_display.display(self.person) + pname = self.nd.display(self.person) AttrEdit.AttributeEditor(self,attr,pname,const.personalAttributes, self.attr_edit_callback,self.window) @@ -1488,7 +1488,7 @@ class EditPerson: import UrlEdit store,node = self.wtree.get_selected() if node: - pname = self.name_display.display(self.person) + pname = self.nd.display(self.person) url = self.wtree.get_object(node) UrlEdit.UrlEditor(self,pname,url,self.url_edit_callback,self.window) @@ -1498,7 +1498,7 @@ class EditPerson: store,node = self.etree.get_selected() if not node: return - pname = self.name_display.display(self.person) + pname = self.nd.display(self.person) event = self.etree.get_object(node) EventEdit.EventEditor( self,pname,const.personalEvents, @@ -1737,7 +1737,7 @@ class EditPerson: if not person: self.person.set_gramps_id(idval) else: - n = self.name_display.display(person) + n = self.nd.display(person) msg1 = _("GRAMPS ID value was not changed.") msg2 = _("You have attempted to change the GRAMPS ID to a value " "of %(grampsid)s. This value is already used by %(person)s.") % { @@ -1894,7 +1894,7 @@ class EditPerson: if not self.person.get_gramps_id(): self.person.set_gramps_id(self.db.find_next_person_gramps_id()) self.db.commit_person(self.person, trans) - n = self.person.get_primary_name().get_regular_name() + n = self.nd.display(self.person) self.db.transaction_commit(trans,_("Edit Person (%s)") % n) if self.callback: self.callback(self,self.retval) @@ -2042,7 +2042,7 @@ class EditPerson: def write_primary_name(self): # initial values - name = '%s' % self.name_display.display(self.person) + name = '%s' % self.nd.display(self.person) self.get_widget("activepersonTitle").set_text(name) self.get_widget("activepersonTitle").set_use_markup(True) self.suffix.set_text(self.pname.get_suffix()) diff --git a/gramps2/src/FamilyView.py b/gramps2/src/FamilyView.py index 262e23651..065d71d14 100644 --- a/gramps2/src/FamilyView.py +++ b/gramps2/src/FamilyView.py @@ -850,7 +850,7 @@ class FamilyView: # commit the transaction self.parent.db.commit_person(child,trans) - n = child.get_primary_name().get_regular_name() + n = NameDisplay.displayer.display(child) self.parent.db.transaction_commit(trans,_("Remove Child (%s)") % n) self.parent.db.enable_all_signals() self.parent.db.emit('family-update',([family.get_handle()],)) @@ -901,7 +901,7 @@ class FamilyView: person_id = cur_person.get_handle() self.person = self.parent.db.get_person_from_handle(person_id) - n = self.person.get_primary_name().get_regular_name() + n = NameDisplay.displayer.display(self.person) self.parent.db.transaction_commit(trans,_("Remove Spouse (%s)") % n) if len(self.person.get_family_handle_list()) <= 1: @@ -1407,7 +1407,7 @@ class FamilyView: self.parent.db.remove_family(fam,trans) self.parent.db.commit_person(person,trans) - n = person.get_primary_name().get_regular_name() + n = NameDisplay.displayer.display(person) self.parent.db.transaction_commit(trans,_("Remove Parents (%s)") % n) self.load_family() diff --git a/gramps2/src/NameDisplay.py b/gramps2/src/NameDisplay.py index b88da928c..92aec0b4a 100644 --- a/gramps2/src/NameDisplay.py +++ b/gramps2/src/NameDisplay.py @@ -83,8 +83,12 @@ class NameDisplay: @rtype: str """ name = person.get_primary_name() - if name.get_sort_as() == RelLib.Name.FNLN: + if name.sort_as == RelLib.Name.FNLN: return self._fnln(name) + elif name.sort_as == RelLib.Name.PTFN: + return self._ptfn(name) + elif name.sort_as == RelLib.Name.FN: + return name.first_name else: return self._lnfn(name) @@ -99,8 +103,12 @@ class NameDisplay: @returns: Returns the L{RelLib.Name} string representation @rtype: str """ - if name.get_sort_as() == RelLib.Name.FNLN: + if name.sort_as == RelLib.Name.FNLN: return self._fnln(name) + elif name.sort_as == RelLib.Name.PTFN: + return self._ptfn(name) + elif name.sort_as == RelLib.Name.FN: + return name.first_name else: return self._lnfn(name) @@ -136,9 +144,37 @@ class NameDisplay: return "" elif name.display_as == RelLib.Name.LNFN: return self._lnfn(name) + elif name.display_as == RelLib.Name.PTFN: + return self._ptfn(name) else: return self._fnln(name) + def _ptfn(self,name): + """ + Prints the Western style first name, last name style. + Typically this is:: + + SurnamePrefix Patronymic SurnameSuffix, FirstName + """ + + first = name.first_name + + if self.force_upper: + last = name.patronymic.upper() + else: + last = name.patronymic + + if name.suffix == "": + if name.prefix: + return "%s %s, %s" % (name.prefix, last, first) + else: + return "%s, %s" % (last, first) + else: + if name.prefix: + return "%s %s %s, %s" % (name.prefix, last, name.suffix, first) + else: + return "%s %s, %s" % (last, name.suffix, first) + def _fnln(self,name): """ Prints the Western style first name, last name style. @@ -166,6 +202,21 @@ class NameDisplay: return "%s %s %s, %s" % (first, name.prefix, last, name.suffix) else: return "%s %s, %s" % (first, last, name.suffix) + + def name_grouping(self,db,person): + return self.name_grouping_name(db,person.primary_name) + + def name_grouping_name(self,db,pn): + sv = pn.sort_as + if pn.group_as: + return pn.group_as + if sv <= RelLib.Name.LNFN: + val = pn.surname + elif sv == RelLib.Name.PTFN: + val = pn.patronymic + else: + val = pn.first_name + return db.get_name_group_mapping(val) def _lnfn(self,name): """ diff --git a/gramps2/src/NameEdit.py b/gramps2/src/NameEdit.py index bf9dbc2ef..a7195eed4 100644 --- a/gramps2/src/NameEdit.py +++ b/gramps2/src/NameEdit.py @@ -189,7 +189,9 @@ class NameEditor: self.group_as.set_sensitive(True) self.group_as.set_editable(True) else: - self.group_as.set_text(self.db.get_name_group_mapping(self.surname_field.get_text())) + field_value = self.surname_field.get_text() + mapping = self.db.get_name_group_mapping(field_value) + self.group_as.set_text(mapping) self.group_as.set_sensitive(False) self.group_as.set_editable(False) diff --git a/gramps2/src/PedView.py b/gramps2/src/PedView.py index f809436f9..bbfa01e76 100644 --- a/gramps2/src/PedView.py +++ b/gramps2/src/PedView.py @@ -378,7 +378,7 @@ class PedigreeView: def make_anchor_label(self): """Make a label containing the name of the anchored person""" if self.anchor: - anchor_string = self.anchor.get_primary_name().get_regular_name() + anchor_string = NameDisplay.displayer.display(self.anchor) return "%s: %s" % (_("Anchor"),anchor_string) else: return "" diff --git a/gramps2/src/PeopleModel.py b/gramps2/src/PeopleModel.py index ef8582bc3..d4f90c4ea 100644 --- a/gramps2/src/PeopleModel.py +++ b/gramps2/src/PeopleModel.py @@ -124,11 +124,8 @@ class PeopleModel(gtk.GenericTreeModel): while node: if node[0] in flist: primary_name = node[1][_NAME_COL] - if primary_name.group_as: - surname = primary_name.group_as - else: - surname = self.db.get_name_group_mapping(primary_name.surname) - self.sortnames[node[0]] = primary_name.sname + surname = NameDisplay.displayer.name_grouping_name(self.db,primary_name) + self.sortnames[node[0]] = NameDisplay.displayer.sorted_name(primary_name) if self.temp_sname_sub.has_key(surname): self.temp_sname_sub[surname].append(node[0]) diff --git a/gramps2/src/PeopleView.py b/gramps2/src/PeopleView.py index 4b39bd620..50a6422fb 100644 --- a/gramps2/src/PeopleView.py +++ b/gramps2/src/PeopleView.py @@ -52,6 +52,7 @@ from gtk.gdk import ACTION_COPY, BUTTON1_MASK #------------------------------------------------------------------------- import PeopleModel import GenericFilter +import NameDisplay from DdTargets import DdTargets column_names = [ @@ -154,9 +155,9 @@ class PeopleView: index += 1 def build_tree(self): - self.person_model = PeopleModel.PeopleModel(self.parent.db, - self.DataFilter, - self.parent.filter_invert.get_active()) + self.person_model = PeopleModel.PeopleModel( + self.parent.db,self.DataFilter, + self.parent.filter_invert.get_active()) self.person_tree.set_model(self.person_model) def get_selected_objects(self): @@ -240,7 +241,7 @@ class PeopleView: p = self.parent.active_person try: path = self.person_model.on_get_path(p.get_handle()) - group_name = p.get_primary_name().get_group_name() + group_name = NameDisplay.displayer.name_grouping(self.parent.db,p) top_name = self.parent.db.get_name_group_mapping(group_name) top_path = self.person_model.on_get_path(top_name) self.person_tree.expand_row(top_path,0) @@ -320,7 +321,7 @@ class PeopleView: def person_added(self,handle_list): for node in handle_list: person = self.parent.db.get_person_from_handle(node) - top = person.get_primary_name().get_group_name() + top = NameDisplay.displayer.name_grouping(self.parent.db,person) self.person_model.rebuild_data(self.DataFilter) if not self.person_model.is_visable(node): continue @@ -338,7 +339,7 @@ class PeopleView: person = self.parent.db.get_person_from_handle(node) if not self.person_model.is_visable(node): continue - top = person.get_primary_name().get_group_name() + top = NameDisplay.displayer.name_grouping(self.parent.db,person) mylist = self.person_model.sname_sub.get(top,[]) if mylist: try: @@ -364,11 +365,7 @@ class PeopleView: # calculate the new data - if person.primary_name.group_as: - surname = person.primary_name.group_as - else: - surname = self.parent.db.get_name_group_mapping(person.primary_name.surname) - + surname = NameDisplay.displayer.name_grouping(self.parent.db,person) if oldpath[0] == surname: self.person_model.build_sub_entry(surname) diff --git a/gramps2/src/RelLib.py b/gramps2/src/RelLib.py index 2ba577753..6d4f47d6e 100644 --- a/gramps2/src/RelLib.py +++ b/gramps2/src/RelLib.py @@ -3493,8 +3493,10 @@ class Name(PrivateSourceNote,DateBase): that one name throughout his or her life.""" DEF = 0 # locale default - LNFN = 1 # last name, first name - FNLN = 2 # first name, last name + LNFN = 1 # last name first name [patronymic] + FNLN = 2 # first name last name + PTFN = 3 # patronymic last name + FN = 4 # first name def __init__(self,source=None): """creates a new Name instance, copying from the source if provided""" @@ -3751,24 +3753,6 @@ class Name(PrivateSourceNote,DateBase): else: return "%s %s, %s" % (first, self.surname, self.suffix) - def get_regular_upper_name(self): - """returns a name string built from the components of the Name - instance, in the form of Firstname surname""" - if self.patronymic: - first = "%s %s" % (self.first_name, self.patronymic) - else: - first = self.first_name - if (self.suffix == ""): - if self.prefix: - return "%s %s %s" % (first, self.prefix.upper(), self.surname.upper()) - else: - return "%s %s" % (first, self.surname.upper()) - else: - if self.prefix: - return "%s %s %s, %s" % (first, self.prefix.upper(), self.surname.upper(), self.suffix) - else: - return "%s %s, %s" % (first, self.surname.upper(), self.suffix) - def is_equal(self,other): """ compares to names to see if they are equal, return 0 if they diff --git a/gramps2/src/Report.py b/gramps2/src/Report.py index 18040ec89..a69cb2cf0 100644 --- a/gramps2/src/Report.py +++ b/gramps2/src/Report.py @@ -522,7 +522,7 @@ class BareReportDialog: """Set up the title bar of the dialog. This function relies on the get_title() customization function for what the title should be.""" - self.name = self.person.get_primary_name().get_regular_name() + self.name = NameDisplay.displayer.display(self.person) self.window.set_title(self.get_title()) def setup_header(self): @@ -559,7 +559,7 @@ class BareReportDialog: self.tbl.attach(center_label,0,4,self.col,self.col+1) self.col += 1 - name = self.person.get_primary_name().get_regular_name() + name = NameDisplay.displayer.display(self.person) self.person_label = gtk.Label( "%s" % name ) self.person_label.set_alignment(0.0,0.5) self.tbl.attach(self.person_label,2,3,self.col,self.col+1) @@ -869,7 +869,7 @@ class BareReportDialog: new_person = sel_person.run() if new_person: self.new_person = new_person - new_name = new_person.get_primary_name().get_regular_name() + new_name = NameDisplay.displayer.display(new_person) if new_name: self.person_label.set_text( "%s" % new_name ) self.person_label.set_use_markup(True) diff --git a/gramps2/src/SelectChild.py b/gramps2/src/SelectChild.py index 9e4312888..1d71a55c1 100644 --- a/gramps2/src/SelectChild.py +++ b/gramps2/src/SelectChild.py @@ -233,7 +233,7 @@ class SelectChild: self.db.commit_person(select_child,trans) self.db.commit_family(self.family,trans) - n = select_child.get_primary_name().get_regular_name() + n = NameDisplay.displayer.display(select_child) self.db.transaction_commit(trans,_("Add Child to Family (%s)") % n) self.close(obj) self.callback() diff --git a/gramps2/src/Witness.py b/gramps2/src/Witness.py index 1d0fc2b4a..eb87115cb 100644 --- a/gramps2/src/Witness.py +++ b/gramps2/src/Witness.py @@ -160,14 +160,15 @@ class WitnessEditor: self.idval = self.ref.get_value() if self.db.has_person_handle(self.idval): person = self.db.get_person_from_handle(self.idval) - self.name.set_text(person.get_primary_name().get_regular_name()) - self.in_db.set_active(1) + name = NameDisplay.displayer.display(person) + self.name.set_text(name) + self.in_db.set_active(True) else: self.name.set_text(_("Unknown")) - self.in_db.set_active(0) + self.in_db.set_active(False) else: self.name.set_text(self.ref.get_value()) - self.in_db.set_active(0) + self.in_db.set_active(False) self.comment.get_buffer().set_text(self.ref.get_comment()) self.private.set_active(self.ref.get_privacy()) @@ -208,24 +209,25 @@ class WitnessEditor: def choose(self,obj): import SelectPerson - sel_person = SelectPerson.SelectPerson(self.db,_('Select Person'),parent_window=self.window) + sel_person = SelectPerson.SelectPerson(self.db,_('Select Person'), + parent_window=self.window) new_person = sel_person.run() if new_person: self.new_person = new_person self.idval = new_person.get_handle() - new_name = new_person.get_primary_name().get_regular_name() + new_name = NameDisplay.displayer.display(new_person) if new_name: self.name.set_text(new_name) def on_toggled(self,obj): if self.in_db.get_active(): - self.name.set_editable(0) - self.name.set_sensitive(0) - self.select.set_sensitive(1) + self.name.set_editable(False) + self.name.set_sensitive(False) + self.select.set_sensitive(True) else: - self.name.set_editable(1) - self.name.set_sensitive(1) - self.select.set_sensitive(0) + self.name.set_editable(True) + self.name.set_sensitive(True) + self.select.set_sensitive(False) def ok_clicked(self,obj): if not self.ref: diff --git a/gramps2/src/gramps.glade b/gramps2/src/gramps.glade index 297108595..0b89563d6 100644 --- a/gramps2/src/gramps.glade +++ b/gramps2/src/gramps.glade @@ -31101,9 +31101,6 @@ Very High -1 False 0 - - - 1 @@ -31192,8 +31189,10 @@ Very High True Default (based on locale) -Family name, Given name -Given name, Family name +Family name, Given name [Patronymic] +Given name, Family name +Patronymic, Given name +Given name False True @@ -31207,26 +31206,6 @@ Given name, Family name - - - True - Default (based on locale) -Given name Family name -Family name Given name - - False - True - - - 2 - 3 - 11 - 12 - fill - fill - - - True @@ -31370,6 +31349,28 @@ Family name Given name fill + + + + True + Default (based on locale) +Given name [Patronymic] Family name +Family name Given name +Given name Patronymic +Given name + + False + True + + + 2 + 3 + 11 + 12 + fill + fill + + False diff --git a/gramps2/src/gramps_main.py b/gramps2/src/gramps_main.py index 4a9161af8..e2e6e0f46 100755 --- a/gramps2/src/gramps_main.py +++ b/gramps2/src/gramps_main.py @@ -1493,7 +1493,7 @@ class Gramps(GrampsDBCallback.GrampsDBCallback): self.disable_interface() trans = self.db.transaction_begin() - n = self.active_person.get_primary_name().get_regular_name() + n = NameDisplay.displayer.display(self.active_person) if self.db.get_default_person() == self.active_person: self.db.set_default_person_handle(None) @@ -1885,7 +1885,7 @@ class Gramps(GrampsDBCallback.GrampsDBCallback): def on_default_person_activate(self,obj): if self.active_person: - name = self.active_person.get_primary_name().get_regular_name() + name = NameDisplay.displayer.display(self.active_person) QuestionDialog(_('Set %s as the Home Person') % name, _('Once a Home Person is defined, pressing the ' 'Home button on the toolbar will make the home ' diff --git a/gramps2/src/plugins/NavWebPage.py b/gramps2/src/plugins/NavWebPage.py index 592769b8e..b79f883b2 100644 --- a/gramps2/src/plugins/NavWebPage.py +++ b/gramps2/src/plugins/NavWebPage.py @@ -777,8 +777,7 @@ class SurnameListPage(BasePage): BasePage.__init__(self, title, options, archive, media_list, levels) if order_by == self.ORDER_BY_NAME: of = self.create_file("surnames") - self.display_header(of,db,_('Surnames'), - get_researcher().get_name()) + self.display_header(of,db,_('Surnames'),get_researcher().get_name()) of.write('

%s

\n' % _('Surnames')) else: of = self.create_file("surnames_count") @@ -1213,7 +1212,8 @@ class IndividualPage(BasePage): source = self.db.get_source_from_handle(shandle) title = source.get_title() - of.write('%d.' % (index,index)) + of.write('') + of.write('%d.' % (index,index)) of.write('') self.source_link(of,source.handle,title,source.gramps_id,True) of.write('')