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)
PERSON_HEIGHT = ('interface', 'person-height', 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_WIDTH = ('interface', 'event-width', 1)
EVENT_REF_HEIGHT = ('interface', 'event-ref-height', 1)
@ -211,6 +213,8 @@ default_value = {
NOTE_WIDTH : 700,
PERSON_HEIGHT : 550,
PERSON_WIDTH : 750,
PREFIX_SUFFIX : 0,
PATRO_TITLE : 0,
EVENT_HEIGHT : 450,
EVENT_WIDTH : 600,
EVENT_REF_HEIGHT : 450,

View File

@ -76,10 +76,6 @@ _select_gender = ((True, False, False),
(False, True, False),
(False, False, True))
_use_patronymic = set(
["ru", "RU", "ru_RU", "koi8r", "ru_koi8r", "russian", "Russian"]
)
class EditPerson(EditPrimary):
"""
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
def __init__(self, dbstate, uistate, track, person, callback=None):
@ -114,9 +109,13 @@ class EditPerson(EditPrimary):
def get_menu_title(self):
if self.obj.get_handle():
name = name_displayer.display(self.obj)
title = _('Person') + ': %s' % name
title = _('Person: %(name)s') % {'name': name}
else:
title = _('New Person')
name = name_displayer.display(self.obj)
if name:
title = _('New Person: %(name)s') % {'name': name}
else:
title = _('New Person')
return title
def _local_init(self):
@ -255,28 +254,23 @@ class EditPerson(EditPrimary):
self.db.readonly,
self.db.get_name_types())
if self.use_patronymic:
self.prefix = widgets.MonitoredEntry(
self.top.get_widget("prefix"),
self.pname.set_patronymic,
self.pname.get_patronymic,
self.db.readonly)
prefix_label = self.top.get_widget('prefix_label')
prefix_label.set_text(_('Patronymic:'))
prefix_label.set_use_underline(True)
else:
self.prefix = widgets.MonitoredEntry(
self.top.get_widget("prefix"),
self.pname.set_surname_prefix,
self.pname.get_surname_prefix,
self.db.readonly)
self.suffix = widgets.MonitoredEntry(
self.top.get_widget("suffix"),
self.pname.set_suffix,
self.pname.get_suffix,
self.db.readonly)
self.prefix_suffix = widgets.MonitoredComboSelectedEntry(
self.top.get_widget("prefixcmb"),
self.top.get_widget("prefixentry"),
[_('Prefix'), _('Suffix')],
[self.pname.set_surname_prefix, self.pname.set_suffix],
[self.pname.get_surname_prefix, self.pname.get_suffix],
default = Config.get(Config.PREFIX_SUFFIX),
read_only = self.db.readonly)
self.patro_title = widgets.MonitoredComboSelectedEntry(
self.top.get_widget("patrocmb"),
self.top.get_widget("patroentry"),
[_('Patronymic'), _('Title')],
[self.pname.set_patronymic, self.pname.set_title],
[self.pname.get_patronymic, self.pname.get_title],
default = Config.get(Config.PATRO_TITLE),
read_only = self.db.readonly)
self.call = widgets.MonitoredEntry(
self.top.get_widget("call"),
@ -290,12 +284,6 @@ class EditPerson(EditPrimary):
self.pname.get_first_name,
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.top.get_widget("surname"),
self.pname.set_surname,
@ -309,6 +297,15 @@ class EditPerson(EditPrimary):
self.obj.get_gramps_id,
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):
"""
Create the notebook tabs and insert them into the main window.
@ -376,23 +373,26 @@ class EditPerson(EditPrimary):
notebook.show_all()
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):
"""
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.ntype_field.reinit(self.pname.set_type, self.pname.get_type)
if self.use_patronymic:
self.prefix.reinit(
self.pname.set_patronymic,
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.prefix_suffix.reinit(
[self.pname.set_surname_prefix, self.pname.set_suffix],
[self.pname.get_surname_prefix, self.pname.get_suffix])
self.call.reinit(
self.pname.set_call_name,
@ -402,9 +402,9 @@ class EditPerson(EditPrimary):
self.pname.set_first_name,
self.pname.get_first_name)
self.title.reinit(
self.pname.set_title,
self.pname.get_title)
self.patro_title.reinit(
[self.pname.set_patronymic, self.pname.set_title],
[self.pname.get_patronymic, self.pname.get_title])
self.surname_field.reinit(
self.pname.set_surname,
@ -740,7 +740,7 @@ class EditPerson(EditPrimary):
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):
obj.update()
@ -855,6 +855,8 @@ class EditPerson(EditPrimary):
(width, height) = self.window.get_size()
Config.set(Config.PERSON_WIDTH, width)
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()

View File

@ -379,6 +379,8 @@ class ManagedWindow:
"""
self.isWindow = isWindow
self.msg = msg
self.titlelabel = title
if self.isWindow :
set_titles(self, title, text, msg)
else :
@ -386,6 +388,12 @@ class ManagedWindow:
#closing the gtk.Window must also close ManagedWindow
self.window = window
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):
return ('Undefined Menu','Undefined Submenu')

View File

@ -159,87 +159,6 @@
</packing>
</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>
<widget class="GtkLabel" id="label436">
<property name="visible">True</property>
@ -253,7 +172,7 @@
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">gender</property>
<property name="mnemonic_widget">gender</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
@ -272,6 +191,7 @@
<child>
<widget class="GtkEntry" id="surname">
<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="editable">True</property>
<property name="visibility">True</property>
@ -290,116 +210,6 @@
</packing>
</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>
<widget class="GtkEntry" id="gid">
<property name="visible">True</property>
@ -411,7 +221,7 @@
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
<property name="width_chars">12</property>
<property name="width_chars">7</property>
</widget>
<packing>
<property name="left_attach">4</property>
@ -422,23 +232,6 @@
</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">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="label439">
<property name="visible">True</property>
@ -467,34 +260,6 @@
</packing>
</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>
<widget class="GtkFrame" id="frame5">
<property name="width_request">124</property>
@ -569,7 +334,7 @@
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">marker</property>
<property name="mnemonic_widget">marker</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
@ -598,7 +363,7 @@
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">call</property>
<property name="mnemonic_widget">call</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
@ -614,71 +379,6 @@
</packing>
</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>
<widget class="GtkEntry" id="given_name">
<property name="visible">True</property>
@ -706,6 +406,7 @@
<child>
<widget class="GtkEntry" id="call">
<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="editable">True</property>
<property name="visibility">True</property>
@ -724,25 +425,6 @@
</packing>
</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>
<widget class="GtkHBox" id="hbox109">
<property name="visible">True</property>
@ -801,6 +483,363 @@ Unknown</property>
<property name="y_options">fill</property>
</packing>
</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>
</child>
</widget>

View File

@ -22,7 +22,8 @@
__all__ = ["MonitoredCheckbox", "MonitoredEntry", "MonitoredSpinButton",
"MonitoredText", "MonitoredType", "MonitoredDataType",
"MonitoredMenu", "MonitoredStrMenu", "MonitoredDate"]
"MonitoredMenu", "MonitoredStrMenu", "MonitoredDate",
"MonitoredComboSelectedEntry"]
#-------------------------------------------------------------------------
#
@ -31,6 +32,7 @@ __all__ = ["MonitoredCheckbox", "MonitoredEntry", "MonitoredSpinButton",
#-------------------------------------------------------------------------
import logging
_LOG = logging.getLogger(".widgets.monitoredwidgets")
import locale
#-------------------------------------------------------------------------
#
@ -479,3 +481,119 @@ class MonitoredDate:
field.set_editable(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()