4376: A different Edit Person dialog

svn: r16196
This commit is contained in:
Benny Malengier
2010-11-16 20:12:26 +00:00
parent a581b61cfd
commit 864b3b6ef7
4 changed files with 394 additions and 376 deletions

View File

@@ -79,8 +79,9 @@ class SurnameTab(EmbeddedList):
_column_combo = (_('Origin'), -1, 150, 3) # name, sort, width, modelcol
_column_toggle = (_('Primary'), -1, 80, 4)
def __init__(self, dbstate, uistate, track, name):
def __init__(self, dbstate, uistate, track, name, on_change=None):
self.obj = name
self.on_change = on_change
self.curr_col = -1
self.curr_cellr = None
self.curr_celle = None
@@ -187,8 +188,9 @@ class SurnameTab(EmbeddedList):
"""
new_map = self._get_surn_from_model()
self.obj.set_surname_list(new_map)
# update name in title name editor
# TODO
# update name in previews
if self.on_change:
self.on_change()
def column_order(self):
# order of columns for EmbeddedList. Only the text columns here

View File

@@ -41,6 +41,7 @@ from gen.ggettext import sgettext as _
#
#-------------------------------------------------------------------------
import gtk
import pango
#-------------------------------------------------------------------------
#
@@ -86,7 +87,7 @@ class SingSurn(object):
self.top = gladeobj
def hide_all(self):
self.top.get_object('prefixlabel').hide()
#self.top.get_object('prefixlabel').hide()
self.top.get_object('prefix').hide()
self.top.get_object('surnamelabel').hide()
self.top.get_object('surname').hide()
@@ -97,7 +98,7 @@ class SingSurn(object):
self.top.get_object('surnlabel').show()
def show_all(self):
self.top.get_object('prefixlabel').show()
#self.top.get_object('prefixlabel').show()
self.top.get_object('prefix').show()
self.top.get_object('surnamelabel').show()
self.top.get_object('surname').show()
@@ -152,6 +153,10 @@ class EditPerson(EditPrimary):
else:
title = _('New Person')
return title
def get_preview_name(self):
prevname = name_displayer.display(self.obj)
return prevname
def _local_init(self):
"""
@@ -177,12 +182,14 @@ class EditPerson(EditPrimary):
self.get_menu_title())
self.obj_photo = self.top.get_object("personPix")
self.frame_photo = self.top.get_object("frame5")
self.eventbox = self.top.get_object("eventbox1")
self.singsurnfr = SingSurn(self.top)
self.multsurnfr = self.top.get_object("hboxmultsurnames")
self.singlesurn_active = True
self.surntab = SurnameTab(self.dbstate, self.uistate, self.track,
self.obj.get_primary_name())
self.obj.get_primary_name(),
on_change=self._changed_name)
self.top.get_object("hboxmultsurnames").pack_start(self.surntab)
self.set_contexteventbox(self.top.get_object("eventboxtop"))
@@ -199,6 +206,7 @@ class EditPerson(EditPrimary):
"""
self.load_person_image()
self.given.grab_focus()
self._changed_name(None)
if len(self.obj.get_primary_name().get_surname_list()) > 1:
self.singsurnfr.hide_all()
@@ -347,10 +355,11 @@ class EditPerson(EditPrimary):
self.pname.get_title,
self.db.readonly)
self.suffix = widgets.MonitoredEntry(
self.suffix = widgets.MonitoredEntryIndicator(
self.top.get_object("suffix"),
self.pname.set_suffix,
self.pname.get_suffix,
self.pname.get_suffix,
_('suffix'),
self.db.readonly)
self.nick = widgets.MonitoredEntry(
@@ -367,10 +376,11 @@ class EditPerson(EditPrimary):
self.db.readonly,
autolist=self.db.get_surname_list() if not self.db.readonly else [])
self.prefix = widgets.MonitoredEntry(
self.prefix = widgets.MonitoredEntryIndicator(
self.top.get_object("prefix"),
self.pname.get_primary_surname().set_prefix,
self.pname.get_primary_surname().get_prefix,
_('prefix'),
self.db.readonly)
self.ortype_field = widgets.MonitoredDataType(
@@ -405,6 +415,10 @@ class EditPerson(EditPrimary):
self.top.get_object("surname"),
]:
obj.connect('changed', self._changed_name)
self.preview_name = self.top.get_object("full_name")
self.preview_name.modify_font(pango.FontDescription('sans bold 12'))
def _create_tabbed_pages(self):
"""
@@ -498,12 +512,13 @@ class EditPerson(EditPrimary):
notebook.show_all()
self.top.get_object('vbox').pack_start(notebook, True)
def _changed_name(self, obj):
def _changed_name(self, *obj):
"""
callback to changes typed by user to the person name.
Update the window title, and default name in name tab
"""
self.update_title(self.get_menu_title())
self.preview_name.set_text(self.get_preview_name())
self.name_list.update_defname()
def name_callback(self):
@@ -709,6 +724,7 @@ class EditPerson(EditPrimary):
self.load_rect = rectangle
if path is None:
self.obj_photo.hide()
self.frame_photo.hide_all()
else:
try:
i = gtk.gdk.pixbuf_new_from_file(path)
@@ -734,8 +750,10 @@ class EditPerson(EditPrimary):
i = i.scale_simple(x, y, gtk.gdk.INTERP_BILINEAR)
self.obj_photo.set_from_pixbuf(i)
self.obj_photo.show()
self.frame_photo.show_all()
except:
self.obj_photo.hide()
self.frame_photo.hide_all()
def _check_for_unknown_gender(self):
if self.obj.get_gender() == gen.lib.Person.UNKNOWN:
@@ -876,6 +894,8 @@ class EditPerson(EditPrimary):
"""
self.singsurnfr.hide_all()
self.singlesurn_active = False
#update multsurnfr for possible changes
self.__renewmultsurnames()
self.multsurnfr.show_all()
def _update_name(self, name):
@@ -891,12 +911,7 @@ class EditPerson(EditPrimary):
self.ortype_field):
obj.update()
#remove present surname tab, and put new one
msurhbox = self.top.get_object("hboxmultsurnames")
msurhbox.remove(self.surntab)
self.surntab = SurnameTab(self.dbstate, self.uistate, self.track,
self.obj.get_primary_name())
msurhbox.pack_start(self.surntab)
self.__renewmultsurnames()
if len(self.obj.get_primary_name().get_surname_list()) == 1:
self.singlesurn_active = True
@@ -910,6 +925,19 @@ class EditPerson(EditPrimary):
self.singsurnfr.hide_all()
self.multsurnfr.show_all()
def __renewmultsurnames(self):
"""Update mult surnames section with what is presently the
correct surname.
It is easier to recreate the entire mult surnames GUI than
changing what has changed visually.
"""
#remove present surname tab, and put new one
msurhbox = self.top.get_object("hboxmultsurnames")
msurhbox.remove(self.surntab)
self.surntab = SurnameTab(self.dbstate, self.uistate, self.track,
self.obj.get_primary_name())
msurhbox.pack_start(self.surntab)
def load_person_image(self):
"""
Load the primary image into the main form if it exists.

View File

@@ -21,7 +21,8 @@
# $Id$
__all__ = ["MonitoredCheckbox", "MonitoredEntry", "MonitoredSpinButton",
__all__ = ["MonitoredCheckbox", "MonitoredEntry",
"MonitoredEntryIndicator", "MonitoredSpinButton",
"MonitoredText", "MonitoredType", "MonitoredDataType",
"MonitoredMenu", "MonitoredStrMenu", "MonitoredDate",
"MonitoredComboSelectedEntry", "MonitoredTagList"]
@@ -148,6 +149,49 @@ class MonitoredEntry(object):
if self.get_val() is not None:
self.obj.set_text(self.get_val())
#-------------------------------------------------------------------------
#
# MonitoredEntryIndicator class
#
#-------------------------------------------------------------------------
class MonitoredEntryIndicator(MonitoredEntry):
"""
Show an Entry box with an indicator in it that disappears when
entry becomes active
"""
def __init__(self, obj, set_val, get_val, indicator, read_only=False,
autolist=None, changed=None):
MonitoredEntry.__init__(self, obj, set_val, get_val, read_only,
autolist, changed)
if get_val():
self.indicatorshown = False
else:
self.indicatorshown = True
self.indicator = indicator
self.obj.set_text(indicator)
self.obj.modify_text(gtk.STATE_NORMAL,
gtk.gdk.color_parse('grey'))
self.obj.modify_font(pango.FontDescription('sans italic'))
self.fockey = self.obj.connect('focus-in-event',
self._obj_focus)
def _on_change(self, obj):
if not self.indicatorshown:
self.set_val(unicode(obj.get_text()))
if self.changed:
self.changed(obj)
def _obj_focus(self, widg, eve):
"""
callback for when prefix obtains focus
"""
self.set_text('')
self.obj.modify_text(gtk.STATE_NORMAL, gtk.gdk.color_parse('black'))
self.obj.modify_font(pango.FontDescription('normal'))
self.obj.disconnect(self.fockey)
self.indicatorshown = False
return False
#-------------------------------------------------------------------------
#
# MonitoredSpinButton class