diff --git a/ChangeLog b/ChangeLog index 4073e183f..97d58d335 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,6 @@ 2006-06-15 Alex Roitman + * src/Config/_GrampsConfigKeys.py: Re-generate file. + * src/GrampsCfg.py: More name display prefs. * src/GrampsLogger/_ErrorReportAssistant.py (__init__): Adapt to the Assistant change. * src/Assistant.py: Convert to working both with and without diff --git a/data/gramps.schemas.in b/data/gramps.schemas.in index ddc5033ec..c1dc9c166 100644 --- a/data/gramps.schemas.in +++ b/data/gramps.schemas.in @@ -404,13 +404,19 @@ /schemas/apps/gramps/preferences/name-format /apps/gramps/preferences/name-format gramps - int + string 0 Name display format - This key determines the name display format. Use 0 - for "Firstname Surname", 1 for "Surname, Firstname", - 2 for "Firstname SURNAME", and 3 for "SURNAME, Firstname" style. + This key determines the name display format. + Use "0" for "Surname, Firstname", + "1" for "Firstname Surname", + "2" for "Patronymic Firstname", + and "3" for "Firstname" style. + For custom styles, use a string where every character denotes + the name component as follows: "f" for firstname, "s" for surname, + "t" for title, "p" for prefix", "u" for suffix", "a" for patronymic, + "c" for callname". diff --git a/src/Config/_GrampsConfigKeys.py b/src/Config/_GrampsConfigKeys.py index 0d049da31..27589148b 100644 --- a/src/Config/_GrampsConfigKeys.py +++ b/src/Config/_GrampsConfigKeys.py @@ -30,7 +30,7 @@ PAPER_PREFERENCE = ('preferences','paper-preference', 2) RECENT_FILE = ('paths','recent-file', 2) RECENT_IMPORT_DIR = ('paths','recent-import-dir', 2) RECENT_EXPORT_DIR = ('paths','recent-export-dir', 2) -NAME_FORMAT = ('preferences','name-format', 1) +NAME_FORMAT = ('preferences','name-format', 2) REPORT_DIRECTORY = ('paths','report-directory', 2) RESEARCHER_ADDR = ('researcher','researcher-addr', 2) RESEARCHER_CITY = ('researcher','researcher-city', 2) @@ -86,7 +86,7 @@ default_value = { RECENT_FILE : '', RECENT_IMPORT_DIR : '', RECENT_EXPORT_DIR : '', - NAME_FORMAT : 0, + NAME_FORMAT : '0', REPORT_DIRECTORY : './', RESEARCHER_ADDR : '', RESEARCHER_CITY : '', diff --git a/src/GrampsCfg.py b/src/GrampsCfg.py index 1a8cfb219..371d85c0d 100644 --- a/src/GrampsCfg.py +++ b/src/GrampsCfg.py @@ -33,7 +33,6 @@ from gettext import gettext as _ # #------------------------------------------------------------------------- import gtk -import gtk.glade #------------------------------------------------------------------------- # @@ -43,6 +42,7 @@ import gtk.glade import Config import DateHandler import NameDisplay +from RelLib import Name import ManagedWindow from GrampsWidgets import * @@ -209,24 +209,81 @@ class GrampsPreferences(ManagedWindow.ManagedWindow): table.set_col_spacings(6) table.set_row_spacings(6) + self.name_exp = gtk.expander_new_with_mnemonic( + _('C_ustom format details')) + self.name_exp.set_sensitive(False) + obox = gtk.combo_box_new_text() for key,value in NameDisplay.formats.items(): obox.append_text(value) - active = Config.get(Config.NAME_FORMAT) - if active >= len(NameDisplay.formats): - active = 0 - obox.set_active(active) - obox.connect('changed', - lambda obj: Config.set(Config.NAME_FORMAT, - obj.get_active())) + try: + active = int(Config.get(Config.NAME_FORMAT)) + if active >= len(NameDisplay.formats): + active = 0 + except ValueError: # not an integer-convertible string => custom + active = len(NameDisplay.formats) + self.name_exp.set_sensitive(True) + obox.set_active(active) + obox.connect('changed', self.name_changed) lwidget = BasicLabel("%s: " % _('Preset format')) + custom_ui = self.build_custom_name_ui() + self.name_exp.add(custom_ui) + table.attach(lwidget, 0, 1, 0, 1, yoptions=0) table.attach(obox, 1,3,0, 1, yoptions=0) + table.attach(self.name_exp, 0,3,1, 2, yoptions=0) return table + def build_custom_name_ui(self): + table = gtk.Table(2,3) + table.set_border_width(6) + table.set_col_spacings(6) + table.set_row_spacings(6) + + avail_sw = gtk.ScrolledWindow() + avail_sw.set_policy(gtk.POLICY_NEVER,gtk.POLICY_NEVER) + avail_tree = gtk.TreeView() + avail_sw.add(avail_tree) + + use_sw = gtk.ScrolledWindow() + use_sw.set_policy(gtk.POLICY_NEVER,gtk.POLICY_NEVER) + use_tree = gtk.TreeView() + use_sw.add(use_tree) + + button_table = gtk.Table(3,3) + + up_button = _set_button(gtk.STOCK_GO_UP) + down_button = _set_button(gtk.STOCK_GO_DOWN) + add_button = _set_button(gtk.STOCK_ADD) + remove_button = _set_button(gtk.STOCK_REMOVE) + button_table.attach(up_button, 1, 2, 0, 1, xoptions = 0, yoptions=0) + button_table.attach(remove_button, 2, 3, 1, 2, xoptions = 0,yoptions=0) + button_table.attach(down_button, 1, 2, 2, 3, xoptions = 0, yoptions=0) + button_table.attach(add_button, 0, 1, 1, 2, xoptions = 0,yoptions=0) + + example_label = gtk.Label('%s' % _('Example')) + example_label.set_use_markup(True) + + table.attach(example_label,0,3,0,1,xoptions = 0,yoptions=0) + table.attach(avail_sw, 0,1,1,2, yoptions=gtk.FILL) + table.attach(button_table, 1, 2, 1, 2, xoptions = 0, yoptions=0) + table.attach(use_sw, 2,3,1,2, yoptions=gtk.FILL) + + return table + + def name_changed(self,obj): + custom_text = NameDisplay.formats[Name.CUSTOM] + if obj.get_active_text() == custom_text: + self.name_exp.set_sensitive(True) + self.name_exp.set_expanded(True) + else: + Config.set(Config.NAME_FORMAT,str(obj.get_active())) + self.name_exp.set_expanded(False) + self.name_exp.set_sensitive(False) + def add_formats_panel(self): table = gtk.Table(3,8) table.set_border_width(12) @@ -345,3 +402,12 @@ class GrampsPreferences(ManagedWindow.ManagedWindow): def build_menu_names(self,obj): return (_('Preferences'),None) + +def _set_button(stock): + button = gtk.Button() + image = gtk.Image() + image.set_from_stock(stock, gtk.ICON_SIZE_BUTTON) + image.show() + button.add(image) + button.show() + return button