2642: Add or move the entry 'Patronymic' from the Name Editor to 'Prefered Names' area

svn: r11753
This commit is contained in:
Benny Malengier 2009-01-28 18:13:29 +00:00
parent dfb3ee201b
commit 059a0deb02
5 changed files with 547 additions and 376 deletions

View File

@ -82,6 +82,8 @@ NOTE_HEIGHT = ('interface', 'note-height', 1)
NOTE_WIDTH = ('interface', 'note-width', 1) NOTE_WIDTH = ('interface', 'note-width', 1)
PERSON_HEIGHT = ('interface', 'person-height', 1) PERSON_HEIGHT = ('interface', 'person-height', 1)
PERSON_WIDTH = ('interface', 'person-width', 1) PERSON_WIDTH = ('interface', 'person-width', 1)
PREFIX_SUFFIX = ('interface', 'prefix-suffix', 1)
PATRO_TITLE = ('interface', 'patro-title', 1)
EVENT_HEIGHT = ('interface', 'event-height', 1) EVENT_HEIGHT = ('interface', 'event-height', 1)
EVENT_WIDTH = ('interface', 'event-width', 1) EVENT_WIDTH = ('interface', 'event-width', 1)
EVENT_REF_HEIGHT = ('interface', 'event-ref-height', 1) EVENT_REF_HEIGHT = ('interface', 'event-ref-height', 1)
@ -211,6 +213,8 @@ default_value = {
NOTE_WIDTH : 700, NOTE_WIDTH : 700,
PERSON_HEIGHT : 550, PERSON_HEIGHT : 550,
PERSON_WIDTH : 750, PERSON_WIDTH : 750,
PREFIX_SUFFIX : 0,
PATRO_TITLE : 0,
EVENT_HEIGHT : 450, EVENT_HEIGHT : 450,
EVENT_WIDTH : 600, EVENT_WIDTH : 600,
EVENT_REF_HEIGHT : 450, EVENT_REF_HEIGHT : 450,

View File

@ -76,10 +76,6 @@ _select_gender = ((True, False, False),
(False, True, False), (False, True, False),
(False, False, True)) (False, False, True))
_use_patronymic = set(
["ru", "RU", "ru_RU", "koi8r", "ru_koi8r", "russian", "Russian"]
)
class EditPerson(EditPrimary): class EditPerson(EditPrimary):
""" """
The EditPerson dialog is derived from the EditPrimary class. The EditPerson dialog is derived from the EditPrimary class.
@ -88,7 +84,6 @@ class EditPerson(EditPrimary):
""" """
use_patronymic = locale.getlocale(locale.LC_TIME)[0] in _use_patronymic
QR_CATEGORY = CATEGORY_QR_PERSON QR_CATEGORY = CATEGORY_QR_PERSON
def __init__(self, dbstate, uistate, track, person, callback=None): def __init__(self, dbstate, uistate, track, person, callback=None):
@ -114,7 +109,11 @@ class EditPerson(EditPrimary):
def get_menu_title(self): def get_menu_title(self):
if self.obj.get_handle(): if self.obj.get_handle():
name = name_displayer.display(self.obj) name = name_displayer.display(self.obj)
title = _('Person') + ': %s' % name title = _('Person: %(name)s') % {'name': name}
else:
name = name_displayer.display(self.obj)
if name:
title = _('New Person: %(name)s') % {'name': name}
else: else:
title = _('New Person') title = _('New Person')
return title return title
@ -255,28 +254,23 @@ class EditPerson(EditPrimary):
self.db.readonly, self.db.readonly,
self.db.get_name_types()) self.db.get_name_types())
if self.use_patronymic: self.prefix_suffix = widgets.MonitoredComboSelectedEntry(
self.prefix = widgets.MonitoredEntry( self.top.get_widget("prefixcmb"),
self.top.get_widget("prefix"), self.top.get_widget("prefixentry"),
self.pname.set_patronymic, [_('Prefix'), _('Suffix')],
self.pname.get_patronymic, [self.pname.set_surname_prefix, self.pname.set_suffix],
self.db.readonly) [self.pname.get_surname_prefix, self.pname.get_suffix],
default = Config.get(Config.PREFIX_SUFFIX),
read_only = self.db.readonly)
prefix_label = self.top.get_widget('prefix_label') self.patro_title = widgets.MonitoredComboSelectedEntry(
prefix_label.set_text(_('Patronymic:')) self.top.get_widget("patrocmb"),
prefix_label.set_use_underline(True) self.top.get_widget("patroentry"),
else: [_('Patronymic'), _('Title')],
self.prefix = widgets.MonitoredEntry( [self.pname.set_patronymic, self.pname.set_title],
self.top.get_widget("prefix"), [self.pname.get_patronymic, self.pname.get_title],
self.pname.set_surname_prefix, default = Config.get(Config.PATRO_TITLE),
self.pname.get_surname_prefix, read_only = self.db.readonly)
self.db.readonly)
self.suffix = widgets.MonitoredEntry(
self.top.get_widget("suffix"),
self.pname.set_suffix,
self.pname.get_suffix,
self.db.readonly)
self.call = widgets.MonitoredEntry( self.call = widgets.MonitoredEntry(
self.top.get_widget("call"), self.top.get_widget("call"),
@ -290,12 +284,6 @@ class EditPerson(EditPrimary):
self.pname.get_first_name, self.pname.get_first_name,
self.db.readonly) self.db.readonly)
self.title = widgets.MonitoredEntry(
self.top.get_widget("title"),
self.pname.set_title,
self.pname.get_title,
self.db.readonly)
self.surname_field = widgets.MonitoredEntry( self.surname_field = widgets.MonitoredEntry(
self.top.get_widget("surname"), self.top.get_widget("surname"),
self.pname.set_surname, self.pname.set_surname,
@ -309,6 +297,15 @@ class EditPerson(EditPrimary):
self.obj.get_gramps_id, self.obj.get_gramps_id,
self.db.readonly) self.db.readonly)
#make sure title updates automatically
for obj in [self.top.get_widget("surname"),
self.top.get_widget("given_name"),
self.top.get_widget("patroentry"),
self.top.get_widget("call"),
self.top.get_widget("prefixentry"),
]:
obj.connect('changed', self._changed_title)
def _create_tabbed_pages(self): def _create_tabbed_pages(self):
""" """
Create the notebook tabs and insert them into the main window. Create the notebook tabs and insert them into the main window.
@ -376,23 +373,26 @@ class EditPerson(EditPrimary):
notebook.show_all() notebook.show_all()
self.top.get_widget('vbox').pack_start(notebook, True) self.top.get_widget('vbox').pack_start(notebook, True)
def _changed_title(self, obj):
"""
callback to changes typed by user to the person name.
Update the window title
"""
self.update_title(self.get_menu_title())
def name_callback(self): def name_callback(self):
"""
Callback if changes happen in the name tab.
The Preferred Name is _NOT_ part of the name tab, but name tab allows
reorder and hence setting of new primary name.
"""
self.pname = self.obj.get_primary_name() self.pname = self.obj.get_primary_name()
self.ntype_field.reinit(self.pname.set_type, self.pname.get_type) self.ntype_field.reinit(self.pname.set_type, self.pname.get_type)
if self.use_patronymic: self.prefix_suffix.reinit(
self.prefix.reinit( [self.pname.set_surname_prefix, self.pname.set_suffix],
self.pname.set_patronymic, [self.pname.get_surname_prefix, self.pname.get_suffix])
self.pname.get_patronymic)
else:
self.prefix.reinit(
self.pname.set_surname_prefix,
self.pname.get_surname_prefix)
self.suffix.reinit(
self.pname.set_suffix,
self.pname.get_suffix)
self.call.reinit( self.call.reinit(
self.pname.set_call_name, self.pname.set_call_name,
@ -402,9 +402,9 @@ class EditPerson(EditPrimary):
self.pname.set_first_name, self.pname.set_first_name,
self.pname.get_first_name) self.pname.get_first_name)
self.title.reinit( self.patro_title.reinit(
self.pname.set_title, [self.pname.set_patronymic, self.pname.set_title],
self.pname.get_title) [self.pname.get_patronymic, self.pname.get_title])
self.surname_field.reinit( self.surname_field.reinit(
self.pname.set_surname, self.pname.set_surname,
@ -740,7 +740,7 @@ class EditPerson(EditPrimary):
This allows us to update the main form in response to any changes. This allows us to update the main form in response to any changes.
""" """
for obj in (self.suffix, self.prefix, self.given, self.title, for obj in (self.prefix_suffix, self.patro_title, self.given,
self.ntype_field, self.surname_field, self.call): self.ntype_field, self.surname_field, self.call):
obj.update() obj.update()
@ -855,6 +855,8 @@ class EditPerson(EditPrimary):
(width, height) = self.window.get_size() (width, height) = self.window.get_size()
Config.set(Config.PERSON_WIDTH, width) Config.set(Config.PERSON_WIDTH, width)
Config.set(Config.PERSON_HEIGHT, height) Config.set(Config.PERSON_HEIGHT, height)
Config.set(Config.PREFIX_SUFFIX, self.prefix_suffix.active_key)
Config.set(Config.PATRO_TITLE, self.patro_title.active_key)
Config.sync() Config.sync()

View File

@ -379,6 +379,8 @@ class ManagedWindow:
""" """
self.isWindow = isWindow self.isWindow = isWindow
self.msg = msg
self.titlelabel = title
if self.isWindow : if self.isWindow :
set_titles(self, title, text, msg) set_titles(self, title, text, msg)
else : else :
@ -387,6 +389,12 @@ class ManagedWindow:
self.window = window self.window = window
self.window.connect('delete-event', self.close) self.window.connect('delete-event', self.close)
def update_title(self, text):
if self.isWindow:
set_titles(self, self.titlelabel, text, self.msg)
else:
set_titles(self.window, self.titlelabel, text, self.msg)
def build_menu_names(self, obj): def build_menu_names(self, obj):
return ('Undefined Menu','Undefined Submenu') return ('Undefined Menu','Undefined Submenu')

View File

@ -159,87 +159,6 @@
</packing> </packing>
</child> </child>
<child>
<widget class="GtkLabel" id="prefix_label">
<property name="visible">True</property>
<property name="label" translatable="yes">_Prefix:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_CENTER</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">prefix</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">5</property>
<property name="right_attach">6</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label47">
<property name="visible">True</property>
<property name="label" translatable="yes">Tit_le:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_CENTER</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">title</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="title">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">A title used to refer to the person, such as &quot;Dr.&quot; or &quot;Rev.&quot;</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
<property name="width_chars">13</property>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="y_options"></property>
</packing>
</child>
<child> <child>
<widget class="GtkLabel" id="label436"> <widget class="GtkLabel" id="label436">
<property name="visible">True</property> <property name="visible">True</property>
@ -272,6 +191,7 @@
<child> <child>
<widget class="GtkEntry" id="surname"> <widget class="GtkEntry" id="surname">
<property name="visible">True</property> <property name="visible">True</property>
<property name="tooltip" translatable="yes">part of a person's name indicating the family to which the person belongs</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="editable">True</property> <property name="editable">True</property>
<property name="visibility">True</property> <property name="visibility">True</property>
@ -290,116 +210,6 @@
</packing> </packing>
</child> </child>
<child>
<widget class="GtkLabel" id="label23">
<property name="visible">True</property>
<property name="label" translatable="yes">S_uffix:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_CENTER</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">suffix</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label437">
<property name="visible">True</property>
<property name="label" translatable="yes">_ID:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">gid</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label269">
<property name="visible">True</property>
<property name="label" translatable="yes">_Type:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_CENTER</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">ntype</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">5</property>
<property name="right_attach">6</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="suffix">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">An optional suffix to the name, such as &quot;Jr.&quot; or &quot;III&quot;</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
<property name="width_chars">6</property>
</widget>
<packing>
<property name="left_attach">4</property>
<property name="right_attach">5</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="y_options"></property>
</packing>
</child>
<child> <child>
<widget class="GtkEntry" id="gid"> <widget class="GtkEntry" id="gid">
<property name="visible">True</property> <property name="visible">True</property>
@ -411,7 +221,7 @@
<property name="has_frame">True</property> <property name="has_frame">True</property>
<property name="invisible_char">*</property> <property name="invisible_char">*</property>
<property name="activates_default">False</property> <property name="activates_default">False</property>
<property name="width_chars">12</property> <property name="width_chars">7</property>
</widget> </widget>
<packing> <packing>
<property name="left_attach">4</property> <property name="left_attach">4</property>
@ -422,23 +232,6 @@
</packing> </packing>
</child> </child>
<child>
<widget class="GtkComboBoxEntry" id="ntype">
<property name="visible">True</property>
<property name="add_tearoffs">False</property>
<property name="has_frame">True</property>
<property name="focus_on_click">True</property>
</widget>
<packing>
<property name="left_attach">6</property>
<property name="right_attach">7</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child> <child>
<widget class="GtkLabel" id="label439"> <widget class="GtkLabel" id="label439">
<property name="visible">True</property> <property name="visible">True</property>
@ -467,34 +260,6 @@
</packing> </packing>
</child> </child>
<child>
<widget class="GtkLabel" id="label296">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Preferred name&lt;/b&gt;</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">7</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child> <child>
<widget class="GtkFrame" id="frame5"> <widget class="GtkFrame" id="frame5">
<property name="width_request">124</property> <property name="width_request">124</property>
@ -614,71 +379,6 @@
</packing> </packing>
</child> </child>
<child>
<widget class="GtkHBox" id="hbox108">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">6</property>
<child>
<widget class="GtkEntry" id="prefix">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">An optional prefix for the family name that is not used in sorting, such as &quot;de&quot; or &quot;van&quot;</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
<property name="width_chars">10</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button177">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Edit the preferred name</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_edit_name_clicked" last_modification_time="Tue, 28 Sep 2004 19:54:46 GMT"/>
<child>
<widget class="GtkImage" id="image2261">
<property name="visible">True</property>
<property name="stock">gtk-edit</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="left_attach">6</property>
<property name="right_attach">7</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options">fill</property>
</packing>
</child>
<child> <child>
<widget class="GtkEntry" id="given_name"> <widget class="GtkEntry" id="given_name">
<property name="visible">True</property> <property name="visible">True</property>
@ -706,6 +406,7 @@
<child> <child>
<widget class="GtkEntry" id="call"> <widget class="GtkEntry" id="call">
<property name="visible">True</property> <property name="visible">True</property>
<property name="tooltip" translatable="yes">Part of the Given name that is the normally used name. </property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="editable">True</property> <property name="editable">True</property>
<property name="visibility">True</property> <property name="visibility">True</property>
@ -724,25 +425,6 @@
</packing> </packing>
</child> </child>
<child>
<widget class="GtkComboBox" id="gender">
<property name="visible">True</property>
<property name="items" translatable="yes">Female
Male
Unknown</property>
<property name="add_tearoffs">False</property>
<property name="focus_on_click">True</property>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child> <child>
<widget class="GtkHBox" id="hbox109"> <widget class="GtkHBox" id="hbox109">
<property name="visible">True</property> <property name="visible">True</property>
@ -801,6 +483,363 @@ Unknown</property>
<property name="y_options">fill</property> <property name="y_options">fill</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkHBox" id="hbox110">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkLabel" id="label296">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt;Preferred name&lt;/b&gt;</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label445">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;b&gt; - &lt;/b&gt; </property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button177">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Edit the preferred name</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_edit_name_clicked" last_modification_time="Tue, 28 Sep 2004 19:54:46 GMT"/>
<child>
<widget class="GtkImage" id="image2261">
<property name="visible">True</property>
<property name="stock">gtk-edit</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="left_attach">0</property>
<property name="right_attach">4</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options">fill</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label269">
<property name="visible">True</property>
<property name="label" translatable="yes">_Type:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_CENTER</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">ntype</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">5</property>
<property name="right_attach">6</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkComboBoxEntry" id="ntype">
<property name="visible">True</property>
<property name="add_tearoffs">False</property>
<property name="has_frame">True</property>
<property name="focus_on_click">True</property>
</widget>
<packing>
<property name="left_attach">6</property>
<property name="right_attach">7</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options">fill</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="prefixentry">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Prefix: An optional prefix for the family name that is not used in sorting, such as &quot;de&quot; or &quot;van&quot;
Suffix: An optional suffix to the name, such as &quot;Jr.&quot; or &quot;III&quot;</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
<property name="width_chars">6</property>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox111">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">12</property>
<child>
<widget class="GtkComboBox" id="gender">
<property name="visible">True</property>
<property name="items" translatable="yes">Female
Male
Unknown</property>
<property name="add_tearoffs">False</property>
<property name="focus_on_click">True</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label437">
<property name="visible">True</property>
<property name="label" translatable="yes">_ID:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_RIGHT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">gid</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">4</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">fill</property>
<property name="y_options">fill</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="patroentry">
<property name="visible">True</property>
<property name="tooltip" translatable="yes">Patronimic: component of a personal name based on the name of one's father, grandfather, ....
Title: A title used to refer to the person, such as 'Dr.' or 'Rev.'</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">4</property>
<property name="right_attach">5</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox112">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkComboBox" id="prefixcmb">
<property name="visible">True</property>
<property name="add_tearoffs">False</property>
<property name="focus_on_click">True</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label446">
<property name="visible">True</property>
<property name="label" translatable="yes"> :</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">prefixentry</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options">fill</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox113">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkComboBox" id="patrocmb">
<property name="visible">True</property>
<property name="items" translatable="yes"></property>
<property name="add_tearoffs">False</property>
<property name="focus_on_click">True</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label447">
<property name="visible">True</property>
<property name="label" translatable="yes"> :</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">patroentry</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">fill</property>
<property name="y_options">fill</property>
</packing>
</child>
</widget> </widget>
</child> </child>
</widget> </widget>

View File

@ -22,7 +22,8 @@
__all__ = ["MonitoredCheckbox", "MonitoredEntry", "MonitoredSpinButton", __all__ = ["MonitoredCheckbox", "MonitoredEntry", "MonitoredSpinButton",
"MonitoredText", "MonitoredType", "MonitoredDataType", "MonitoredText", "MonitoredType", "MonitoredDataType",
"MonitoredMenu", "MonitoredStrMenu", "MonitoredDate"] "MonitoredMenu", "MonitoredStrMenu", "MonitoredDate",
"MonitoredComboSelectedEntry"]
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -31,6 +32,7 @@ __all__ = ["MonitoredCheckbox", "MonitoredEntry", "MonitoredSpinButton",
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import logging import logging
_LOG = logging.getLogger(".widgets.monitoredwidgets") _LOG = logging.getLogger(".widgets.monitoredwidgets")
import locale
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -479,3 +481,119 @@ class MonitoredDate:
field.set_editable(not readonly) field.set_editable(not readonly)
button.set_sensitive(not readonly) button.set_sensitive(not readonly)
#-------------------------------------------------------------------------
#
# MonitoredComboSelectedEntry class
#
#-------------------------------------------------------------------------
class MonitoredComboSelectedEntry:
"""
A MonitoredEntry driven by a Combobox to select what the entry field
works upon
"""
def __init__(self, objcombo, objentry, textlist, set_val_list,
get_val_list, default=0, read_only=False):
"""
Create a MonitoredComboSelectedEntry
Objcombo and objentry should be the gtk widgets to use
textlist is the values that must be used in the combobox
Every value needs an entry in set/get_val_list with the data retrieval
and storage method of the data entered in the entry box
Read_only should be true if no changes may be done
default is the entry in the combobox that must be preselected
"""
self.objcombo = objcombo
self.objentry = objentry
self.set_val_list = set_val_list
self.get_val_list = get_val_list
#fill the combobox, set on a specific entry
self.mapping = dict([[i,x] for (i,x) in zip(range(len(textlist)),
textlist)])
self.active_key = default
self.active_index = 0
self.__fill()
self.objcombo.clear()
self.objcombo.set_model(self.store)
cell = gtk.CellRendererText()
self.objcombo.pack_start(cell, True)
self.objcombo.add_attribute(cell, 'text', 1)
self.objcombo.set_active(self.active_index)
self.objcombo.connect('changed', self.on_combochange)
#fill the entrybox with required data
self.entry_reinit()
self.objentry.connect('changed', self._on_change_entry)
#set correct editable
self.enable(not read_only)
def __fill(self):
"""
Fill combo with data
"""
self.store = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING)
keys = self.mapping.keys()
keys.sort(self.__by_value)
index = 0
for key in keys:
self.store.append(row=[key, self.mapping[key]])
if key == self.active_key:
self.active_index = index
index = index + 1
def __by_value(self, first, second):
"""
Method for sorting keys based on the values.
"""
fvalue = self.mapping[first]
svalue = self.mapping[second]
return locale.strcoll(fvalue, svalue)
def on_combochange(self, obj):
"""
callback for change on the combo, change active iter, update
associated entrybox
"""
self.active_key = self.store.get_value(self.objcombo.get_active_iter(),
0)
self.entry_reinit()
def reinit(self, set_val_list, get_val_list):
"""
The interface is attached to another object, so the methods need to be
reset.
"""
self.set_val_list = set_val_list
self.get_val_list = get_val_list
self.update()
def entry_reinit(self):
"""
Make the entry field show the value corresponding to the active key
"""
self.objentry.set_text(self.get_val_list[self.active_key]())
self.set_val = self.set_val_list[self.active_key]
self.get_val = self.get_val_list[self.active_key]
def _on_change_entry(self, obj):
"""
Callback when the entry field changes
"""
self.set_val_list[self.active_key](self.get_value_entry())
def get_value_entry(self):
return unicode(self.objentry.get_text())
def enable(self, value):
self.objentry.set_sensitive(value)
self.objentry.set_editable(value)
def update(self):
"""
Method called when object changed without interface change
Eg: name editor save brings you back to person editor that must update
"""
self.entry_reinit()