EditName call in EditPerson
svn: r6289
This commit is contained in:
parent
706ed650c9
commit
1439dcf535
@ -1,3 +1,6 @@
|
||||
2006-04-07 Don Allingham <don@gramps-project.org>
|
||||
* src/EditPerson.py: Fix call to EditName, pylint fixes
|
||||
|
||||
2006-04-06 Don Allingham <don@gramps-project.org>
|
||||
* src/glade/gramps.glade: restored addr_edit
|
||||
* src/DataViews/_FamilyView.py: add select parents function
|
||||
|
@ -8,7 +8,7 @@
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
@ -20,15 +20,21 @@
|
||||
|
||||
# $Id$
|
||||
|
||||
"""
|
||||
EditPerson Dialog. Provides the interface to allow the GRAMPS program
|
||||
to edit information about a particular Person.
|
||||
"""
|
||||
|
||||
__author__ = "Don Allingham"
|
||||
__revision__ = "$Revision$"
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Standard python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
import locale
|
||||
from gettext import gettext as _
|
||||
from cgi import escape
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -39,6 +45,11 @@ import gtk
|
||||
import gtk.glade
|
||||
import gtk.gdk
|
||||
|
||||
try:
|
||||
set()
|
||||
except NameError:
|
||||
from sets import Set as set
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# gramps modules
|
||||
@ -46,25 +57,13 @@ import gtk.gdk
|
||||
#-------------------------------------------------------------------------
|
||||
import const
|
||||
import Utils
|
||||
import Config
|
||||
import Mime
|
||||
import RelLib
|
||||
import DateHandler
|
||||
import NameDisplay
|
||||
import DisplayState
|
||||
import GrampsDisplay
|
||||
import GrampsWidgets
|
||||
import AutoComp
|
||||
|
||||
from _EditPrimary import EditPrimary
|
||||
from DisplayTabs import *
|
||||
|
||||
from QuestionDialog import WarningDialog, ErrorDialog, QuestionDialog2
|
||||
from DdTargets import DdTargets
|
||||
|
||||
try:
|
||||
set()
|
||||
except:
|
||||
from sets import Set as set
|
||||
from DisplayTabs import NoteTab, GalleryTab, WebEmbedList, LdsEmbedList
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -72,93 +71,125 @@ except:
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
_select_gender = ((True,False,False),(False,True,False),(False,False,True))
|
||||
_use_patronymic = set(["ru","RU","ru_RU","koi8r","ru_koi8r","russian","Russian"])
|
||||
_select_gender = ((True, False, False),
|
||||
(False, True, False),
|
||||
(False, False, True))
|
||||
|
||||
_use_patronymic = set(
|
||||
["ru", "RU", "ru_RU", "koi8r", "ru_koi8r", "russian", "Russian"]
|
||||
)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# EditPerson class
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class EditPerson(EditPrimary):
|
||||
"""
|
||||
The EditPerson dialog is derived from the EditPrimary class. It
|
||||
allos for the editing of the primary object type of Person.
|
||||
"""
|
||||
|
||||
use_patronymic = locale.getlocale(locale.LC_TIME)[0] in _use_patronymic
|
||||
|
||||
def __init__(self,state,uistate,track,person,callback=None):
|
||||
"""Creates an edit window. Associates a person with the window."""
|
||||
def __init__(self, state, uistate, track, person, callback=None):
|
||||
"""
|
||||
Creates an EditPerson window. Associates a person with the window.
|
||||
"""
|
||||
|
||||
EditPrimary.__init__(self, state, uistate, track, person,
|
||||
EditPrimary.__init__(self, state, uistate, track, person,
|
||||
state.db.get_person_from_handle, callback)
|
||||
|
||||
def empty_object(self):
|
||||
"""
|
||||
Returns an empty Person object for comparison for changes. This
|
||||
is used by the base class (EditPrimary)
|
||||
"""
|
||||
return RelLib.Person()
|
||||
|
||||
def _local_init(self):
|
||||
"""
|
||||
Local initialization function. Performs basic initialization,
|
||||
including setting up widgets and the glade interface. This is called
|
||||
by the base class of EditPrimary, and overridden here.
|
||||
"""
|
||||
self.pname = self.obj.get_primary_name()
|
||||
self.should_guess_gender = (not self.obj.get_gramps_id() and
|
||||
self.obj.get_gender () ==
|
||||
RelLib.Person.UNKNOWN)
|
||||
|
||||
self.load_obj = None
|
||||
self.top = gtk.glade.XML(const.person_glade, "edit_person","gramps")
|
||||
self.define_top_level(self.top.get_widget("edit_person"), None,
|
||||
self.top = gtk.glade.XML(const.person_glade, "edit_person", "gramps")
|
||||
self.define_top_level(self.top.get_widget("edit_person"), None,
|
||||
_('Edit Person'))
|
||||
|
||||
self.obj_photo = self.top.get_widget("personPix")
|
||||
self.eventbox = self.top.get_widget("eventbox1")
|
||||
|
||||
def _post_init(self):
|
||||
"""
|
||||
Post initalization function. Handles any initialization that
|
||||
needs to be done after the interface is brought up. This called
|
||||
by _EditPrimary's init routine, and overridden in the derived
|
||||
class (this class)
|
||||
"""
|
||||
self.load_person_image()
|
||||
self.surname_field.grab_focus()
|
||||
|
||||
def _connect_signals(self):
|
||||
"""
|
||||
Connects any signals that need to be connected. Called by the
|
||||
init routine of the base class (_EditPrimary).
|
||||
"""
|
||||
self.define_cancel_button(self.top.get_widget("button15"))
|
||||
self.define_ok_button(self.top.get_widget("ok"), self.save)
|
||||
self.define_help_button(self.top.get_widget("button134"),'adv-pers')
|
||||
self.define_help_button(self.top.get_widget("button134"), 'adv-pers')
|
||||
|
||||
self.given.connect("focus_out_event",self.given_focus_out_event)
|
||||
self.top.get_widget("button177").connect("clicked", self.edit_name_clicked)
|
||||
self.given.connect("focus_out_event", self._given_focus_out_event)
|
||||
self.top.get_widget("button177").connect("clicked",
|
||||
self._edit_name_clicked)
|
||||
|
||||
self.eventbox.connect('button-press-event',self.image_button_press)
|
||||
self.eventbox.connect('button-press-event',
|
||||
self._image_button_press)
|
||||
|
||||
def _setup_fields(self):
|
||||
"""
|
||||
Connects the GrampsWidget objects to field in the interface. This
|
||||
allows the widgets to keep the data in the attached Person object
|
||||
up to date at all times, eliminating a lot of need in 'save' routine.
|
||||
"""
|
||||
|
||||
self.private = GrampsWidgets.PrivacyButton(
|
||||
self.top.get_widget('private'),
|
||||
self.top.get_widget('private'),
|
||||
self.obj)
|
||||
|
||||
self.gender = GrampsWidgets.MonitoredMenu(
|
||||
self.top.get_widget('gender'),
|
||||
self.obj.set_gender,
|
||||
self.obj.get_gender,
|
||||
self.top.get_widget('gender'),
|
||||
self.obj.set_gender,
|
||||
self.obj.get_gender,
|
||||
(
|
||||
(_('female'),RelLib.Person.FEMALE),
|
||||
(_('male'),RelLib.Person.MALE),
|
||||
(_('unknown'),RelLib.Person.UNKNOWN)
|
||||
),
|
||||
(_('female'), RelLib.Person.FEMALE),
|
||||
(_('male'), RelLib.Person.MALE),
|
||||
(_('unknown'), RelLib.Person.UNKNOWN)
|
||||
),
|
||||
self.db.readonly)
|
||||
|
||||
self.ntype_field = GrampsWidgets.MonitoredType(
|
||||
self.top.get_widget("ntype"),
|
||||
self.pname.set_type,
|
||||
self.pname.get_type,
|
||||
dict(Utils.name_types),
|
||||
RelLib.Name.CUSTOM,
|
||||
self.top.get_widget("ntype"),
|
||||
self.pname.set_type,
|
||||
self.pname.get_type,
|
||||
dict(Utils.name_types),
|
||||
RelLib.Name.CUSTOM,
|
||||
self.db.readonly)
|
||||
|
||||
self.marker = GrampsWidgets.MonitoredType(
|
||||
self.top.get_widget('marker'),
|
||||
self.obj.set_marker,
|
||||
self.obj.get_marker,
|
||||
dict(Utils.marker_types),
|
||||
RelLib.PrimaryObject.MARKER_CUSTOM,
|
||||
self.top.get_widget('marker'),
|
||||
self.obj.set_marker,
|
||||
self.obj.get_marker,
|
||||
dict(Utils.marker_types),
|
||||
RelLib.PrimaryObject.MARKER_CUSTOM,
|
||||
self.db.readonly)
|
||||
|
||||
if self.use_patronymic:
|
||||
self.prefix = GrampsWidgets.MonitoredEntry(
|
||||
self.top.get_widget("prefix"),
|
||||
self.pname.set_patronymic,
|
||||
self.pname.get_patronymic,
|
||||
self.top.get_widget("prefix"),
|
||||
self.pname.set_patronymic,
|
||||
self.pname.get_patronymic,
|
||||
self.db.readonly)
|
||||
|
||||
prefix_label = self.top.get_widget('prefix_label')
|
||||
@ -166,40 +197,40 @@ class EditPerson(EditPrimary):
|
||||
prefix_label.set_use_underline(True)
|
||||
else:
|
||||
self.prefix = GrampsWidgets.MonitoredEntry(
|
||||
self.top.get_widget("prefix"),
|
||||
self.pname.set_surname_prefix,
|
||||
self.pname.get_surname_prefix,
|
||||
self.top.get_widget("prefix"),
|
||||
self.pname.set_surname_prefix,
|
||||
self.pname.get_surname_prefix,
|
||||
self.db.readonly)
|
||||
|
||||
self.suffix = GrampsWidgets.MonitoredEntry(
|
||||
self.top.get_widget("suffix"),
|
||||
self.pname.set_suffix,
|
||||
self.pname.get_suffix,
|
||||
self.top.get_widget("suffix"),
|
||||
self.pname.set_suffix,
|
||||
self.pname.get_suffix,
|
||||
self.db.readonly)
|
||||
|
||||
self.given = GrampsWidgets.MonitoredEntry(
|
||||
self.top.get_widget("given_name"),
|
||||
self.pname.set_first_name,
|
||||
self.pname.get_first_name,
|
||||
self.top.get_widget("given_name"),
|
||||
self.pname.set_first_name,
|
||||
self.pname.get_first_name,
|
||||
self.db.readonly)
|
||||
|
||||
self.title = GrampsWidgets.MonitoredEntry(
|
||||
self.top.get_widget("title"),
|
||||
self.pname.set_title,
|
||||
self.pname.get_title,
|
||||
self.top.get_widget("title"),
|
||||
self.pname.set_title,
|
||||
self.pname.get_title,
|
||||
self.db.readonly)
|
||||
|
||||
self.surname_field = GrampsWidgets.MonitoredEntry(
|
||||
self.top.get_widget("surname"),
|
||||
self.pname.set_surname,
|
||||
self.pname.get_surname,
|
||||
self.db.readonly,
|
||||
self.top.get_widget("surname"),
|
||||
self.pname.set_surname,
|
||||
self.pname.get_surname,
|
||||
self.db.readonly,
|
||||
autolist=self.db.get_surname_list())
|
||||
|
||||
self.gid = GrampsWidgets.MonitoredEntry(
|
||||
self.top.get_widget("gid"),
|
||||
self.obj.set_gramps_id,
|
||||
self.obj.get_gramps_id,
|
||||
self.top.get_widget("gid"),
|
||||
self.obj.set_gramps_id,
|
||||
self.obj.get_gramps_id,
|
||||
self.db.readonly)
|
||||
|
||||
def _create_tabbed_pages(self):
|
||||
@ -211,74 +242,77 @@ class EditPerson(EditPrimary):
|
||||
notebook = gtk.Notebook()
|
||||
|
||||
self.event_list = self._add_tab(
|
||||
notebook,
|
||||
PersonEventEmbedList(self.dbstate,self.uistate,
|
||||
self.track,self.obj))
|
||||
notebook,
|
||||
PersonEventEmbedList(self.dbstate, self.uistate,
|
||||
self.track, self.obj))
|
||||
|
||||
self.name_list = self._add_tab(
|
||||
notebook,
|
||||
NameEmbedList(self.dbstate, self.uistate, self.track,
|
||||
notebook,
|
||||
NameEmbedList(self.dbstate, self.uistate, self.track,
|
||||
self.obj.get_alternate_names()))
|
||||
|
||||
self.srcref_list = self._add_tab(
|
||||
notebook,
|
||||
SourceEmbedList(self.dbstate,self.uistate,
|
||||
notebook,
|
||||
SourceEmbedList(self.dbstate, self.uistate,
|
||||
self.track, self.obj.source_list))
|
||||
|
||||
self.attr_list = self._add_tab(
|
||||
notebook,
|
||||
AttrEmbedList(self.dbstate,self.uistate, self.track,
|
||||
notebook,
|
||||
AttrEmbedList(self.dbstate, self.uistate, self.track,
|
||||
self.obj.get_attribute_list()))
|
||||
|
||||
self.addr_list = self._add_tab(
|
||||
notebook,
|
||||
AddrEmbedList(self.dbstate,self.uistate,self.track,
|
||||
notebook,
|
||||
AddrEmbedList(self.dbstate, self.uistate, self.track,
|
||||
self.obj.get_address_list()))
|
||||
|
||||
self.note_tab = self._add_tab(
|
||||
notebook,
|
||||
NoteTab(self.dbstate, self.uistate, self.track,
|
||||
notebook,
|
||||
NoteTab(self.dbstate, self.uistate, self.track,
|
||||
self.obj.get_note_object()))
|
||||
|
||||
self.gallery_tab = self._add_tab(
|
||||
notebook,
|
||||
GalleryTab(self.dbstate, self.uistate, self.track,
|
||||
notebook,
|
||||
GalleryTab(self.dbstate, self.uistate, self.track,
|
||||
self.obj.get_media_list()))
|
||||
|
||||
self.web_list = self._add_tab(
|
||||
notebook,
|
||||
WebEmbedList(self.dbstate,self.uistate,self.track,
|
||||
notebook,
|
||||
WebEmbedList(self.dbstate, self.uistate, self.track,
|
||||
self.obj.get_url_list()))
|
||||
|
||||
self.lds_list = self._add_tab(
|
||||
notebook,
|
||||
LdsEmbedList(self.dbstate,self.uistate,self.track,
|
||||
notebook,
|
||||
LdsEmbedList(self.dbstate, self.uistate, self.track,
|
||||
self.obj.get_lds_ord_list()))
|
||||
|
||||
notebook.show_all()
|
||||
self.top.get_widget('vbox').pack_start(notebook,True)
|
||||
self.top.get_widget('vbox').pack_start(notebook, True)
|
||||
|
||||
def build_menu_names(self,person):
|
||||
def build_menu_names(self, person):
|
||||
"""
|
||||
Provides the information need by the base class to define the
|
||||
window management menu entries.
|
||||
"""
|
||||
win_menu_label = self.nd.display(person)
|
||||
if not win_menu_label.strip():
|
||||
win_menu_label = _("New Person")
|
||||
return (_('Edit Person'),win_menu_label)
|
||||
return (_('Edit Person'), win_menu_label)
|
||||
|
||||
# def set_list_dnd(self,obj, get, begin, receive):
|
||||
# obj.drag_dest_set(gtk.DEST_DEFAULT_ALL, [DdTargets.NAME.target()],
|
||||
# gtk.gdk.ACTION_COPY)
|
||||
# obj.drag_source_set(gtk.gdk.BUTTON1_MASK,[DdTargets.NAME.target()],
|
||||
# gtk.gdk.ACTION_COPY)
|
||||
# obj.connect('drag_data_get', get)
|
||||
# obj.connect('drag_begin', begin)
|
||||
# if not self.db.readonly:
|
||||
# obj.connect('drag_data_received', receive)
|
||||
|
||||
def image_callback(self,ref):
|
||||
def _image_callback(self, ref):
|
||||
"""
|
||||
Called when a media reference had been edited. This allows fot
|
||||
the updating image on the main form which has just been modified.
|
||||
"""
|
||||
obj = self.db.get_object_from_handle(ref.get_reference_handle())
|
||||
self.load_photo(obj)
|
||||
|
||||
def image_button_press(self,obj,event):
|
||||
def _image_button_press(self, obj, event):
|
||||
"""
|
||||
Button press event that is caught when a button has been
|
||||
pressed while on the image on the main form. This does not apply
|
||||
to the images in galleries, just the image on the main form.
|
||||
"""
|
||||
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
|
||||
|
||||
media_list = self.obj.get_media_list()
|
||||
@ -289,17 +323,19 @@ class EditPerson(EditPrimary):
|
||||
object_handle = media_ref.get_reference_handle()
|
||||
media_obj = self.db.get_object_from_handle(object_handle)
|
||||
|
||||
EditMediaRef(self.dbstate, self.uistate, self.track,
|
||||
media_obj, media_ref, self.image_callback)
|
||||
EditMediaRef(self.dbstate, self.uistate, self.track,
|
||||
media_obj, media_ref, self._image_callback)
|
||||
elif event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:
|
||||
media_list = self.obj.get_media_list()
|
||||
if media_list:
|
||||
ph = media_list[0]
|
||||
self.show_popup(ph,event)
|
||||
photo = media_list[0]
|
||||
self._show_popup(photo, event)
|
||||
|
||||
def show_popup(self, photo, event):
|
||||
"""Look for right-clicks on a picture and create a popup
|
||||
menu of the available actions."""
|
||||
def _show_popup(self, photo, event):
|
||||
"""
|
||||
Look for right-clicks on a picture and create a popup
|
||||
menu of the available actions.
|
||||
"""
|
||||
|
||||
menu = gtk.Menu()
|
||||
menu.set_title(_("Media Object"))
|
||||
@ -308,21 +344,26 @@ class EditPerson(EditPrimary):
|
||||
progname = Mime.get_application(mtype)
|
||||
|
||||
if progname and len(progname) > 1:
|
||||
Utils.add_menuitem(menu,_("Open in %s") % progname[1],
|
||||
photo,self.popup_view_photo)
|
||||
Utils.add_menuitem(menu,_("Edit Object Properties"),photo,
|
||||
self.popup_change_description)
|
||||
menu.popup(None,None,None,event.button,event.time)
|
||||
Utils.add_menuitem(menu, _("Open in %s") % progname[1],
|
||||
photo, self._popup_view_photo)
|
||||
Utils.add_menuitem(menu, _("Edit Object Properties"), photo,
|
||||
self._popup_change_description)
|
||||
menu.popup(None, None, None, event.button, event.time)
|
||||
|
||||
def popup_view_photo(self, obj):
|
||||
"""Open this picture in a picture viewer"""
|
||||
def _popup_view_photo(self, obj):
|
||||
"""
|
||||
Open this picture in the default picture viewer
|
||||
"""
|
||||
media_list = self.obj.get_media_list()
|
||||
if media_list:
|
||||
ph = media_list[0]
|
||||
object_handle = ph.get_reference_handle()
|
||||
photo = media_list[0]
|
||||
object_handle = photo.get_reference_handle()
|
||||
Utils.view_photo(self.db.get_object_from_handle(object_handle))
|
||||
|
||||
def popup_change_description(self,obj):
|
||||
def _popup_change_description(self, obj):
|
||||
"""
|
||||
Brings up the EditMediaRef dialog for the image on the main form.
|
||||
"""
|
||||
media_list = self.obj.get_media_list()
|
||||
if media_list:
|
||||
from Editors import EditMediaRef
|
||||
@ -330,19 +371,25 @@ class EditPerson(EditPrimary):
|
||||
media_ref = media_list[0]
|
||||
object_handle = media_ref.get_reference_handle()
|
||||
media_obj = self.db.get_object_from_handle(object_handle)
|
||||
EditMediaRef(self.dbstate, self.uistate, self.track,
|
||||
media_obj, media_ref, self.image_callback)
|
||||
EditMediaRef(self.dbstate, self.uistate, self.track,
|
||||
media_obj, media_ref, self._image_callback)
|
||||
|
||||
def given_focus_out_event (self, entry, event):
|
||||
def _given_focus_out_event (self, entry, event):
|
||||
"""
|
||||
Callback that occurs when the user leaves the given name field,
|
||||
allowing us to attempt to guess the gender of the person if
|
||||
so requested.
|
||||
"""
|
||||
if not self.should_guess_gender:
|
||||
return False
|
||||
try:
|
||||
self.gender.force(self.db.genderStats.guess_gender(entry.get_text()))
|
||||
gender_type = self.db.genderStats.guess_gender(entry.get_text())
|
||||
self.gender.force(gender_type)
|
||||
except:
|
||||
return False
|
||||
return False
|
||||
|
||||
def load_photo(self,photo):
|
||||
def load_photo(self, photo):
|
||||
"""loads, scales, and displays the person's main photo"""
|
||||
self.load_obj = photo
|
||||
if photo == None:
|
||||
@ -350,11 +397,11 @@ class EditPerson(EditPrimary):
|
||||
else:
|
||||
try:
|
||||
i = gtk.gdk.pixbuf_new_from_file(photo)
|
||||
ratio = float(max(i.get_height(),i.get_width()))
|
||||
ratio = float(max(i.get_height(), i.get_width()))
|
||||
scale = float(100.0)/ratio
|
||||
x = int(scale*(i.get_width()))
|
||||
y = int(scale*(i.get_height()))
|
||||
i = i.scale_simple(x,y,gtk.gdk.INTERP_BILINEAR)
|
||||
i = i.scale_simple(x, y, gtk.gdk.INTERP_BILINEAR)
|
||||
self.obj_photo.set_from_pixbuf(i)
|
||||
self.obj_photo.show()
|
||||
except:
|
||||
@ -363,12 +410,12 @@ class EditPerson(EditPrimary):
|
||||
def _check_for_unknown_gender(self):
|
||||
if self.obj.get_gender() == RelLib.Person.UNKNOWN:
|
||||
dialog = QuestionDialog2(
|
||||
_("Unknown gender specified"),
|
||||
_("Unknown gender specified"),
|
||||
_("The gender of the person is currently unknown. "
|
||||
"Usually, this is a mistake. You may choose to "
|
||||
"either continue saving, or returning to the "
|
||||
"Edit Person dialog to fix the problem."),
|
||||
_("Continue saving"), _("Return to window"),
|
||||
"Edit Person dialog to fix the problem."),
|
||||
_("Continue saving"), _("Return to window"),
|
||||
self.window)
|
||||
if not dialog.run():
|
||||
return True
|
||||
@ -381,35 +428,38 @@ class EditPerson(EditPrimary):
|
||||
idval = self.obj.get_gramps_id()
|
||||
person = self.db.get_person_from_gramps_id(idval)
|
||||
if person:
|
||||
n = self.nd.display(person)
|
||||
name = 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.") % {
|
||||
'grampsid' : idval,
|
||||
'person' : n }
|
||||
WarningDialog(msg1,msg2)
|
||||
msg2 = _("You have attempted to change the GRAMPS ID "
|
||||
"to a value of %(grampsid)s. This value is "
|
||||
"already used by %(person)s.") % {
|
||||
'grampsid' : idval,
|
||||
'person' : name }
|
||||
WarningDialog(msg1, msg2)
|
||||
|
||||
def _update_family_ids(self, trans):
|
||||
# Update each of the families child lists to reflect any
|
||||
# change in ordering due to the new birth date
|
||||
family = self.obj.get_main_parents_family_handle()
|
||||
if (family):
|
||||
f = self.db.find_family_from_handle(family,trans)
|
||||
new_order = self.reorder_child_list(self.obj,f.get_child_handle_list())
|
||||
f = self.db.find_family_from_handle(family, trans)
|
||||
new_order = self.reorder_child_list(self.obj,
|
||||
f.get_child_handle_list())
|
||||
f.set_child_handle_list(new_order)
|
||||
for (family, rel1, rel2) in self.obj.get_parent_family_handle_list():
|
||||
f = self.db.find_family_from_handle(family,trans)
|
||||
new_order = self.reorder_child_list(self.obj,f.get_child_handle_list())
|
||||
f = self.db.find_family_from_handle(family, trans)
|
||||
new_order = self.reorder_child_list(self.obj,
|
||||
f.get_child_handle_list())
|
||||
f.set_child_handle_list(new_order)
|
||||
|
||||
error = False
|
||||
original = self.db.get_person_from_handle(self.obj.handle)
|
||||
|
||||
if original:
|
||||
(female,male,unknown) = _select_gender[self.obj.get_gender()]
|
||||
(female, male, unknown) = _select_gender[self.obj.get_gender()]
|
||||
if male and original.get_gender() != RelLib.Person.MALE:
|
||||
for temp_family_handle in self.obj.get_family_handle_list():
|
||||
temp_family = self.db.get_family_from_handle(temp_family_handle)
|
||||
for tmp_handle in self.obj.get_family_handle_list():
|
||||
temp_family = self.db.get_family_from_handle(tmp_handle)
|
||||
if self.obj == temp_family.get_mother_handle():
|
||||
if temp_family.get_father_handle() != None:
|
||||
error = True
|
||||
@ -417,8 +467,8 @@ class EditPerson(EditPrimary):
|
||||
temp_family.set_mother_handle(None)
|
||||
temp_family.set_father_handle(self.obj)
|
||||
elif female and original != RelLib.Person.FEMALE:
|
||||
for temp_family_handle in self.obj.get_family_handle_list():
|
||||
temp_family = self.db.get_family_from_handle(temp_family_handle)
|
||||
for tmp_handle in self.obj.get_family_handle_list():
|
||||
temp_family = self.db.get_family_from_handle(tmp_handle)
|
||||
if self.obj == temp_family.get_father_handle():
|
||||
if temp_family.get_mother_handle() != None:
|
||||
error = True
|
||||
@ -426,8 +476,8 @@ class EditPerson(EditPrimary):
|
||||
temp_family.set_father_handle(None)
|
||||
temp_family.set_mother_handle(self.obj)
|
||||
elif unknown and original.get_gender() != RelLib.Person.UNKNOWN:
|
||||
for temp_family_handle in self.obj.get_family_handle_list():
|
||||
temp_family = self.db.get_family_from_handle(temp_family_handle)
|
||||
for tmp_handle in self.obj.get_family_handle_list():
|
||||
temp_family = self.db.get_family_from_handle(tmp_handle)
|
||||
if self.obj == temp_family.get_father_handle():
|
||||
if temp_family.get_mother_handle() != None:
|
||||
error = True
|
||||
@ -446,15 +496,15 @@ class EditPerson(EditPrimary):
|
||||
msg = _("Changing the gender caused problems "
|
||||
"with marriage information.\nPlease check "
|
||||
"the person's marriages.")
|
||||
ErrorDialog(msg)
|
||||
ErrorDialog(msg2, msg)
|
||||
|
||||
def save(self,*obj):
|
||||
def save(self, *obj):
|
||||
"""
|
||||
Save the data.
|
||||
"""
|
||||
|
||||
if self.object_is_empty():
|
||||
ErrorDialog(_("Cannot save person"),
|
||||
ErrorDialog(_("Cannot save person"),
|
||||
_("No data exists for this person. Please "
|
||||
"enter data or cancel the edit."))
|
||||
return
|
||||
@ -462,10 +512,10 @@ class EditPerson(EditPrimary):
|
||||
if self._check_for_unknown_gender():
|
||||
return
|
||||
|
||||
(br, dr, el) = self.event_list.return_info()
|
||||
self.obj.set_birth_ref(br)
|
||||
self.obj.set_death_ref(dr)
|
||||
self.obj.set_event_ref_list(el)
|
||||
(birth_ref, death_ref, event_list) = self.event_list.return_info()
|
||||
self.obj.set_birth_ref(birth_ref)
|
||||
self.obj.set_death_ref(death_ref)
|
||||
self.obj.set_event_ref_list(event_list)
|
||||
|
||||
self.window.hide()
|
||||
|
||||
@ -481,25 +531,40 @@ class EditPerson(EditPrimary):
|
||||
self.obj.set_gramps_id(self.db.find_next_person_gramps_id())
|
||||
self.db.commit_person(self.obj, trans)
|
||||
|
||||
self.db.transaction_commit(trans,_("Edit Person (%s)") % self.nd.display(self.obj))
|
||||
msg = _("Edit Person (%s)") % self.nd.display(self.obj)
|
||||
self.db.transaction_commit(trans, msg)
|
||||
self.close()
|
||||
if self.callback:
|
||||
self.callback(self.obj)
|
||||
|
||||
def edit_name_clicked(self,obj):
|
||||
NameEdit.NameEditor(self.dbstate, self.uistate, self.track,
|
||||
self.pname, self.update_name)
|
||||
def _edit_name_clicked(self, obj):
|
||||
"""
|
||||
Called when the edit name button is clicked for the primary name
|
||||
on the main form (not in the names tab). Brings up the EditName
|
||||
dialog for this name.
|
||||
"""
|
||||
from Editors import EditName
|
||||
EditName(self.dbstate, self.uistate, self.track,
|
||||
self.pname, self._update_name)
|
||||
|
||||
def update_name(self,name):
|
||||
for obj in (self.suffix, self.prefix, self.given, self.title,
|
||||
def _update_name(self, name):
|
||||
"""
|
||||
Called when the primary name has been changed by the EditName
|
||||
dialog. This allows us to update the main form in response to
|
||||
any changes.
|
||||
"""
|
||||
for obj in (self.suffix, self.prefix, self.given, self.title,
|
||||
self.ntype_field, self.surname_field):
|
||||
obj.update()
|
||||
|
||||
def load_person_image(self):
|
||||
"""
|
||||
Loads the primary image into the main form if it exists.
|
||||
"""
|
||||
media_list = self.obj.get_media_list()
|
||||
if media_list:
|
||||
ph = media_list[0]
|
||||
object_handle = ph.get_reference_handle()
|
||||
photo = media_list[0]
|
||||
object_handle = photo.get_reference_handle()
|
||||
obj = self.db.get_object_from_handle(object_handle)
|
||||
if self.load_obj != obj.get_path():
|
||||
mime_type = obj.get_mime_type()
|
||||
@ -510,16 +575,17 @@ class EditPerson(EditPrimary):
|
||||
else:
|
||||
self.load_photo(None)
|
||||
|
||||
def birth_dates_in_order(self,list):
|
||||
def birth_dates_in_order(self, child_list):
|
||||
"""Check any *valid* birthdates in the list to insure that they are in
|
||||
numerically increasing order."""
|
||||
inorder = True
|
||||
prev_date = 0
|
||||
for i in range(len(list)):
|
||||
child_handle = list[i]
|
||||
for i in range(len(child_list)):
|
||||
child_handle = child_list[i]
|
||||
child = self.db.get_person_from_handle(child_handle)
|
||||
if child.get_birth_ref():
|
||||
event = self.db.get_event_from_handle(child.get_birth_ref().ref)
|
||||
event_handle = child.get_birth_ref().ref
|
||||
event = self.db.get_event_from_handle(event_handle)
|
||||
child_date = event.get_date_object().get_sort_value()
|
||||
else:
|
||||
continue
|
||||
@ -529,13 +595,13 @@ class EditPerson(EditPrimary):
|
||||
inorder = False
|
||||
return inorder
|
||||
|
||||
def reorder_child_list(self, person, list):
|
||||
def reorder_child_list(self, person, child_list):
|
||||
"""Reorder the child list to put the specified person in his/her
|
||||
correct birth order. Only check *valid* birthdates. Move the person
|
||||
as short a distance as possible."""
|
||||
|
||||
if (self.birth_dates_in_order(list)):
|
||||
return(list)
|
||||
if self.birth_dates_in_order(child_list):
|
||||
return(child_list)
|
||||
|
||||
# Build the person's date string once
|
||||
event_ref = person.get_birth_ref()
|
||||
@ -547,10 +613,10 @@ class EditPerson(EditPrimary):
|
||||
|
||||
# First, see if the person needs to be moved forward in the list
|
||||
|
||||
index = list.index(person.get_handle())
|
||||
index = child_list.index(person.get_handle())
|
||||
target = index
|
||||
for i in range(index-1, -1, -1):
|
||||
other = self.db.get_person_from_handle(list[i])
|
||||
other = self.db.get_person_from_handle(child_list[i])
|
||||
event_ref = other.get_birth_ref()
|
||||
if event_ref:
|
||||
event = self.db.get_event_from_handle(event_ref.ref)
|
||||
@ -564,8 +630,8 @@ class EditPerson(EditPrimary):
|
||||
|
||||
# Now try moving to a later position in the list
|
||||
if (target == index):
|
||||
for i in range(index, len(list)):
|
||||
other = self.db.get_person_from_handle(list[i])
|
||||
for i in range(index, len(child_list)):
|
||||
other = self.db.get_person_from_handle(child_list[i])
|
||||
event_ref = other.get_birth_ref()
|
||||
if event_ref:
|
||||
event = self.db.get_event_from_handle(event_ref.ref)
|
||||
@ -579,7 +645,7 @@ class EditPerson(EditPrimary):
|
||||
|
||||
# Actually need to move? Do it now.
|
||||
if (target != index):
|
||||
list.remove(person.get_handle())
|
||||
list.insert(target,person.get_handle())
|
||||
return list
|
||||
child_list.remove(person.get_handle())
|
||||
child_list.insert(target, person.get_handle())
|
||||
return child_list
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user