* src/AddrEdit.py: remove already_exist check in favor of exception
* src/AttrEdit.py: remove already_exist check in favor of exception * src/DisplayState.py: remove already_exist variable * src/DisplayTabs.py: handle exception * src/EditEventRef.py: remove already_exist check in favor of exception * src/EditFamily.py: update to derive from EditPrimary * src/EditMedia.py: update to derive from EditPrimary * src/EditMediaRef.py: remove already_exist check in favor of exception * src/EditPerson.py: update to derive from EditPrimary * src/EditPlace.py: update to derive from EditPrimary * src/EditRepository.py:update to derive from EditPrimary * src/EditSource.py: update to derive from EditPrimary * src/EditSourceRef.py: remove already_exist check in favor of exception * src/Errors.py: new exception * src/EventEdit.py: update to derive from EditPrimary * src/EventView.py: catch exception of window already exists * src/FamilyList.py: catch exception of window already exists * src/FamilyView.py: catch exception of window already exists * src/GrampsWidgets.py: typos * src/NameEdit.py: remove already_exist check in favor of exception * src/PedView.py: catch exception of window already exists * src/PersonView.py: catch exception of window already exists * src/PlaceView.py: catch exception of window already exists * src/Plugins.py: catch exception of window already exists * src/UrlEdit.py: remove already_exist check in favor of exception * src/const.py.in: dynamically determine path * src/gramps.glade: name changes * src/gramps.py: set path svn: r6014
This commit is contained in:
@@ -37,7 +37,6 @@ from cgi import escape
|
||||
#-------------------------------------------------------------------------
|
||||
import gtk
|
||||
import gtk.glade
|
||||
import gobject
|
||||
import gtk.gdk
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@@ -49,7 +48,6 @@ import const
|
||||
import Utils
|
||||
import GrampsKeys
|
||||
import GrampsMime
|
||||
import AutoComp
|
||||
import RelLib
|
||||
import DateHandler
|
||||
import NameDisplay
|
||||
@@ -57,218 +55,201 @@ import NameEdit
|
||||
import DisplayState
|
||||
import GrampsDisplay
|
||||
import GrampsWidgets
|
||||
import EditPrimary
|
||||
from DisplayTabs import *
|
||||
|
||||
from WindowUtils import GladeIf
|
||||
from QuestionDialog import WarningDialog, ErrorDialog, SaveDialog, QuestionDialog2
|
||||
from QuestionDialog import WarningDialog, ErrorDialog, QuestionDialog2
|
||||
from DdTargets import DdTargets
|
||||
|
||||
try:
|
||||
set()
|
||||
except:
|
||||
from sets import Set as set
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Constants
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
_temple_names = const.lds_temple_codes.keys()
|
||||
_temple_names.sort()
|
||||
_temple_names = [""] + _temple_names
|
||||
_select_gender = ((True,False,False),(False,True,False),(False,False,True))
|
||||
_use_patronymic = [
|
||||
"ru","RU","ru_RU","koi8r","ru_koi8r","russian","Russian",
|
||||
]
|
||||
_use_patronymic = set(["ru","RU","ru_RU","koi8r","ru_koi8r","russian","Russian"])
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# EditPerson class
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
class EditPerson(DisplayState.ManagedWindow):
|
||||
class EditPerson(EditPrimary.EditPrimary):
|
||||
|
||||
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."""
|
||||
|
||||
self.dp = DateHandler.parser
|
||||
self.dd = DateHandler.displayer
|
||||
self.nd = NameDisplay.displayer
|
||||
EditPrimary.EditPrimary.__init__(self, state, uistate, track,
|
||||
person, state.db.get_person_from_handle,
|
||||
callback)
|
||||
|
||||
self.person = person
|
||||
self.orig_handle = self.person.get_handle()
|
||||
if self.orig_handle:
|
||||
self.person = state.db.get_person_from_handle(self.orig_handle)
|
||||
|
||||
DisplayState.ManagedWindow.__init__(self, uistate, track, self.person)
|
||||
|
||||
if self.already_exist:
|
||||
return
|
||||
|
||||
self.dbstate = state
|
||||
self.uistate = uistate
|
||||
self.retval = const.UPDATE_PERSON
|
||||
|
||||
self.orig_surname = self.person.get_primary_name().get_group_name()
|
||||
self.db = self.dbstate.db
|
||||
self.callback = callback
|
||||
self.pdmap = {}
|
||||
self.add_places = []
|
||||
self.should_guess_gender = (not person.get_gramps_id() and
|
||||
person.get_gender () ==
|
||||
def _local_init(self):
|
||||
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)
|
||||
|
||||
for key in self.db.get_place_handles():
|
||||
p = self.db.get_place_from_handle(key).get_display_info()
|
||||
self.pdmap[p[0]] = key
|
||||
|
||||
mod = not self.db.readonly
|
||||
|
||||
self.load_obj = None
|
||||
self.top = gtk.glade.XML(const.editPersonFile, "edit_person","gramps")
|
||||
self.window = self.top.get_widget("edit_person")
|
||||
self.gladeif = GladeIf(self.top)
|
||||
self.window.set_title("%s - GRAMPS" % _('Edit Person'))
|
||||
self.define_top_level(self.top.get_widget("edit_person"), None,
|
||||
_('Edit Person'))
|
||||
|
||||
self.marker = self.top.get_widget('marker')
|
||||
self.marker.set_sensitive(mod)
|
||||
if person:
|
||||
try:
|
||||
defval = person.get_marker()[0]
|
||||
except:
|
||||
defval = (RelLib.PrimaryObject.MARKER_NONE,"")
|
||||
else:
|
||||
defval = None
|
||||
self.marker_type_selector = AutoComp.StandardCustomSelector(
|
||||
Utils.marker_types, self.marker,
|
||||
RelLib.PrimaryObject.MARKER_CUSTOM, defval)
|
||||
|
||||
self.gender = self.top.get_widget('gender')
|
||||
self.gender.set_sensitive(mod)
|
||||
self.private = GrampsWidgets.PrivacyButton(self.top.get_widget('private'),
|
||||
self.person)
|
||||
|
||||
self.ntype_field = self.top.get_widget("ntype")
|
||||
self.ntype_field.set_sensitive(mod)
|
||||
|
||||
self.vbox = self.top.get_widget('vbox')
|
||||
self.suffix = self.top.get_widget("suffix")
|
||||
self.suffix.set_editable(mod)
|
||||
self.prefix = self.top.get_widget("prefix")
|
||||
self.prefix.set_editable(mod)
|
||||
self.given = self.top.get_widget("given_name")
|
||||
self.given.set_editable(mod)
|
||||
self.title = self.top.get_widget("title")
|
||||
self.title.set_editable(mod)
|
||||
self.surname = self.top.get_widget("surname")
|
||||
self.surname.set_editable(mod)
|
||||
self.gid = self.top.get_widget("gid")
|
||||
self.gid.set_editable(mod)
|
||||
|
||||
self.person_photo = self.top.get_widget("personPix")
|
||||
self.obj_photo = self.top.get_widget("personPix")
|
||||
self.eventbox = self.top.get_widget("eventbox1")
|
||||
self.prefix_label = self.top.get_widget('prefix_label')
|
||||
|
||||
if self.use_patronymic:
|
||||
self.prefix_label.set_text(_('Patronymic:'))
|
||||
self.prefix_label.set_use_underline(True)
|
||||
|
||||
self.birth_ref = person.get_birth_ref()
|
||||
self.death_ref = person.get_death_ref()
|
||||
|
||||
self.pname = RelLib.Name(self.person.get_primary_name())
|
||||
|
||||
self.gender.set_active(self.person.get_gender())
|
||||
|
||||
self.place_list = self.pdmap.keys()
|
||||
self.place_list.sort()
|
||||
|
||||
build_dropdown(self.surname,self.db.get_surname_list())
|
||||
|
||||
gid = self.person.get_gramps_id()
|
||||
if gid:
|
||||
self.gid.set_text(gid)
|
||||
self.gid.set_editable(True)
|
||||
|
||||
# self.lds_baptism = RelLib.LdsOrd(self.person.get_lds_baptism())
|
||||
# self.lds_endowment = RelLib.LdsOrd(self.person.get_lds_endowment())
|
||||
# self.lds_sealing = RelLib.LdsOrd(self.person.get_lds_sealing())
|
||||
|
||||
# if GrampsKeys.get_uselds() \
|
||||
# or (not self.lds_baptism.is_empty()) \
|
||||
# or (not self.lds_endowment.is_empty()) \
|
||||
# or (not self.lds_sealing.is_empty()):
|
||||
# self.top.get_widget("lds_tab").show()
|
||||
# self.top.get_widget("lds_page").show()
|
||||
# if (not self.lds_baptism.is_empty()) \
|
||||
# or (not self.lds_endowment.is_empty()) \
|
||||
# or (not self.lds_sealing.is_empty()):
|
||||
# Utils.bold_label(self.lds_tab)
|
||||
# else:
|
||||
# self.top.get_widget("lds_tab").hide()
|
||||
# self.top.get_widget("lds_page").hide()
|
||||
|
||||
self.ntype_selector = \
|
||||
AutoComp.StandardCustomSelector(Utils.name_types,
|
||||
self.ntype_field,
|
||||
RelLib.Name.CUSTOM,
|
||||
RelLib.Name.BIRTH)
|
||||
self.write_primary_name()
|
||||
def _post_init(self):
|
||||
self.load_person_image()
|
||||
|
||||
self.gladeif.connect("edit_person", "delete_event", self.on_delete_event)
|
||||
self.gladeif.connect("button15", "clicked", self.on_cancel_edit)
|
||||
self.gladeif.connect("ok", "clicked", self.on_apply_person_clicked)
|
||||
self.gladeif.connect("button134", "clicked", self.on_help_clicked)
|
||||
self.gladeif.connect("given_name", "focus_out_event",
|
||||
self.on_given_focus_out_event)
|
||||
self.gladeif.connect("button177", "clicked", self.on_edit_name_clicked)
|
||||
self.surname_field.grab_focus()
|
||||
|
||||
def _connect_signals(self):
|
||||
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.top.get_widget("given_name").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._create_tabbed_pages()
|
||||
|
||||
self.surname.grab_focus()
|
||||
self.show()
|
||||
def _setup_fields(self):
|
||||
|
||||
def _add_page(self,page):
|
||||
self.notebook.insert_page(page)
|
||||
self.notebook.set_tab_label(page,page.get_tab_widget())
|
||||
return page
|
||||
self.private = GrampsWidgets.PrivacyButton(
|
||||
self.top.get_widget('private'),
|
||||
self.obj)
|
||||
|
||||
self.gender = GrampsWidgets.MonitoredMenu(
|
||||
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)
|
||||
),
|
||||
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.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.db.readonly)
|
||||
|
||||
if self.use_patronymic:
|
||||
self.prefix = GrampsWidgets.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 = GrampsWidgets.MonitoredEntry(
|
||||
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.db.readonly)
|
||||
|
||||
self.given = GrampsWidgets.MonitoredEntry(
|
||||
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.db.readonly)
|
||||
|
||||
self.surname_field = GrampsWidgets.MonitoredEntry(
|
||||
self.top.get_widget("surname"),
|
||||
self.pname.set_surname,
|
||||
self.pname.get_surname,
|
||||
self.db.readonly)
|
||||
|
||||
self.gid = GrampsWidgets.MonitoredEntry(
|
||||
self.top.get_widget("gid"),
|
||||
self.obj.set_gramps_id,
|
||||
self.obj.get_gramps_id,
|
||||
self.db.readonly)
|
||||
|
||||
def _create_tabbed_pages(self):
|
||||
"""
|
||||
Creates the notebook tabs and inserts them into the main
|
||||
window.
|
||||
|
||||
"""
|
||||
self.notebook = gtk.Notebook()
|
||||
notebook = gtk.Notebook()
|
||||
|
||||
self.event_list = self._add_page(PersonEventEmbedList(
|
||||
self.dbstate,self.uistate, self.track,self.person))
|
||||
self.event_list = self._add_tab(
|
||||
notebook,
|
||||
PersonEventEmbedList(self.dbstate,self.uistate,
|
||||
self.track,self.obj))
|
||||
|
||||
self.name_list = self._add_page(NameEmbedList(
|
||||
self.dbstate, self.uistate, self.track,
|
||||
self.person.get_alternate_names()))
|
||||
self.srcref_list = self._add_page(SourceEmbedList(
|
||||
self.dbstate,self.uistate, self.track,
|
||||
self.person.source_list))
|
||||
self.attr_list = self._add_page(AttrEmbedList(
|
||||
self.dbstate,self.uistate,self.track,
|
||||
self.person.get_attribute_list()))
|
||||
self.addr_list = self._add_page(AddrEmbedList(
|
||||
self.dbstate,self.uistate,self.track,
|
||||
self.person.get_address_list()))
|
||||
self.note_tab = self._add_page(NoteTab(
|
||||
self.dbstate, self.uistate, self.track,
|
||||
self.person.get_note_object()))
|
||||
self.gallery_tab = self._add_page(GalleryTab(
|
||||
self.dbstate, self.uistate, self.track,
|
||||
self.person.get_media_list()))
|
||||
self.web_list = self._add_page(WebEmbedList(
|
||||
self.dbstate,self.uistate,self.track,
|
||||
self.person.get_url_list()))
|
||||
self.name_list = self._add_tab(
|
||||
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,
|
||||
self.track, self.obj.source_list))
|
||||
|
||||
self.attr_list = self._add_tab(
|
||||
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,
|
||||
self.obj.get_address_list()))
|
||||
|
||||
self.note_tab = self._add_tab(
|
||||
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,
|
||||
self.obj.get_media_list()))
|
||||
|
||||
self.web_list = self._add_tab(
|
||||
notebook,
|
||||
WebEmbedList(self.dbstate,self.uistate,self.track,
|
||||
self.obj.get_url_list()))
|
||||
|
||||
self.notebook.show_all()
|
||||
self.vbox.pack_start(self.notebook,True)
|
||||
notebook.show_all()
|
||||
self.top.get_widget('vbox').pack_start(notebook,True)
|
||||
|
||||
def build_menu_names(self,person):
|
||||
win_menu_label = self.nd.display(person)
|
||||
@@ -276,31 +257,15 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
win_menu_label = _("New Person")
|
||||
return (_('Edit Person'),win_menu_label)
|
||||
|
||||
def build_window_key(self,person):
|
||||
if person:
|
||||
return person.get_handle()
|
||||
else:
|
||||
return id(self)
|
||||
|
||||
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 build_pdmap(self):
|
||||
self.pdmap.clear()
|
||||
cursor = self.db.get_place_cursor()
|
||||
data = cursor.next()
|
||||
while data:
|
||||
if data[1][2]:
|
||||
self.pdmap[data[1][2]] = data[0]
|
||||
data = cursor.next()
|
||||
cursor.close()
|
||||
# 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):
|
||||
obj = self.db.get_object_from_handle(ref.get_reference_handle())
|
||||
@@ -309,7 +274,7 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
def image_button_press(self,obj,event):
|
||||
if event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
|
||||
|
||||
media_list = self.person.get_media_list()
|
||||
media_list = self.obj.get_media_list()
|
||||
if media_list:
|
||||
from EditMediaRef import EditMediaRef
|
||||
|
||||
@@ -320,7 +285,7 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
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.person.get_media_list()
|
||||
media_list = self.obj.get_media_list()
|
||||
if media_list:
|
||||
ph = media_list[0]
|
||||
self.show_popup(ph,event)
|
||||
@@ -347,7 +312,7 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
|
||||
def popup_view_photo(self, obj):
|
||||
"""Open this picture in a picture viewer"""
|
||||
media_list = self.person.get_media_list()
|
||||
media_list = self.obj.get_media_list()
|
||||
if media_list:
|
||||
ph = media_list[0]
|
||||
object_handle = ph.get_reference_handle()
|
||||
@@ -355,7 +320,7 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
|
||||
def popup_edit_photo(self, obj):
|
||||
"""Open this picture in a picture editor"""
|
||||
media_list = self.person.get_media_list()
|
||||
media_list = self.obj.get_media_list()
|
||||
if media_list:
|
||||
ph = media_list[0]
|
||||
object_handle = ph.get_reference_handle()
|
||||
@@ -364,7 +329,7 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
os.execvp(const.editor,[const.editor, obj.get_path()])
|
||||
|
||||
def popup_change_description(self,obj):
|
||||
media_list = self.person.get_media_list()
|
||||
media_list = self.obj.get_media_list()
|
||||
if media_list:
|
||||
from EditMediaRef import EditMediaRef
|
||||
|
||||
@@ -375,167 +340,17 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
media_obj, media_ref, self.image_callback)
|
||||
|
||||
|
||||
def on_help_clicked(self,obj):
|
||||
"""Display the relevant portion of GRAMPS manual"""
|
||||
GrampsDisplay.help('adv-pers')
|
||||
|
||||
def on_gender_activate (self, button):
|
||||
self.should_guess_gender = False
|
||||
|
||||
def on_given_focus_out_event (self, entry, event):
|
||||
def given_focus_out_event (self, entry, event):
|
||||
if not self.should_guess_gender:
|
||||
return
|
||||
|
||||
gender = self.db.genderStats.guess_gender(unicode(entry.get_text ()))
|
||||
self.gender.set_active( gender)
|
||||
|
||||
def build_menu(self,list,task,opt_menu,type):
|
||||
cell = gtk.CellRendererText()
|
||||
opt_menu.pack_start(cell,True)
|
||||
opt_menu.add_attribute(cell,'text',0)
|
||||
|
||||
store = gtk.ListStore(str)
|
||||
for val in list:
|
||||
store.append(row=[val])
|
||||
opt_menu.set_model(store)
|
||||
opt_menu.connect('changed',task)
|
||||
opt_menu.set_active(type)
|
||||
|
||||
def on_cancel_edit(self,obj):
|
||||
"""If the data has changed, give the user a chance to cancel
|
||||
the close window"""
|
||||
|
||||
if not self.db.readonly and self.did_data_change() and not GrampsKeys.get_dont_ask():
|
||||
n = "<i>%s</i>" % escape(self.nd.display(self.person))
|
||||
SaveDialog(_('Save changes to %s?') % n,
|
||||
_('If you close without saving, the changes you '
|
||||
'have made will be lost'),
|
||||
self.cancel_callback,
|
||||
self.save)
|
||||
else:
|
||||
self.close()
|
||||
|
||||
def save(self):
|
||||
self.on_apply_person_clicked(None)
|
||||
|
||||
def on_delete_event(self,obj,b):
|
||||
"""If the data has changed, give the user a chance to cancel
|
||||
the close window"""
|
||||
if not self.db.readonly and self.did_data_change() and not GrampsKeys.get_dont_ask():
|
||||
n = "<i>%s</i>" % escape(self.nd.display(self.person))
|
||||
SaveDialog(_('Save Changes to %s?') % n,
|
||||
_('If you close without saving, the changes you '
|
||||
'have made will be lost'),
|
||||
self.cancel_callback,
|
||||
self.save)
|
||||
return True
|
||||
else:
|
||||
self.close()
|
||||
return False
|
||||
|
||||
def cancel_callback(self):
|
||||
"""If the user answered yes to abandoning changes, close the window"""
|
||||
self.close()
|
||||
|
||||
def did_data_change(self):
|
||||
"""Check to see if any of the data has changed from the
|
||||
orig record"""
|
||||
|
||||
return False
|
||||
surname = unicode(self.surname.get_text())
|
||||
|
||||
ntype = self.ntype_selector.get_values()
|
||||
suffix = unicode(self.suffix.get_text())
|
||||
prefix = unicode(self.prefix.get_text())
|
||||
given = unicode(self.given.get_text())
|
||||
title = unicode(self.title.get_text())
|
||||
|
||||
idval = unicode(self.gid.get_text())
|
||||
if idval == "":
|
||||
idval = None
|
||||
|
||||
changed = False
|
||||
name = self.person.get_primary_name()
|
||||
|
||||
if self.private.get_active() != self.person.get_privacy():
|
||||
changed = True
|
||||
|
||||
if self.person.get_gramps_id() != idval:
|
||||
changed = True
|
||||
if suffix != name.get_suffix():
|
||||
changed = True
|
||||
if self.use_patronymic:
|
||||
if prefix != name.get_patronymic():
|
||||
changed = True
|
||||
elif prefix != name.get_surname_prefix():
|
||||
changed = True
|
||||
if surname.upper() != name.get_surname().upper():
|
||||
changed = True
|
||||
if ntype != name.get_type():
|
||||
changed = True
|
||||
if given != name.get_first_name():
|
||||
changed = True
|
||||
if title != name.get_title():
|
||||
changed = True
|
||||
if self.pname.get_note() != name.get_note():
|
||||
changed = True
|
||||
# if self.check_lds():
|
||||
# changed = True
|
||||
|
||||
(female,male,unknown) = _select_gender[self.gender.get_active()]
|
||||
|
||||
if male and self.person.get_gender() != RelLib.Person.MALE:
|
||||
changed = True
|
||||
elif female and self.person.get_gender() != RelLib.Person.FEMALE:
|
||||
changed = True
|
||||
elif unknown and self.person.get_gender() != RelLib.Person.UNKNOWN:
|
||||
changed = True
|
||||
|
||||
# if not self.lds_baptism.are_equal(self.person.get_lds_baptism()):
|
||||
# changed= True
|
||||
|
||||
# if not self.lds_endowment.are_equal(self.person.get_lds_endowment()):
|
||||
# changed = True
|
||||
|
||||
# if not self.lds_sealing.are_equal(self.person.get_lds_sealing()):
|
||||
# changed = True
|
||||
|
||||
return changed
|
||||
|
||||
# def check_lds(self):
|
||||
# date_str = unicode(self.ldsbap_date.get_text())
|
||||
# DateHandler.set_date(self.lds_baptism,date_str)
|
||||
# temple = _temple_names[self.ldsbap_temple.get_active()]
|
||||
# if const.lds_temple_codes.has_key(temple):
|
||||
# self.lds_baptism.set_temple(const.lds_temple_codes[temple])
|
||||
# else:
|
||||
# self.lds_baptism.set_temple("")
|
||||
# self.lds_baptism.set_place_handle(self.get_place(self.ldsbapplace,1))
|
||||
|
||||
# date_str = unicode(self.ldsend_date.get_text())
|
||||
# DateHandler.set_date(self.lds_endowment,date_str)
|
||||
# temple = _temple_names[self.ldsend_temple.get_active()]
|
||||
# if const.lds_temple_codes.has_key(temple):
|
||||
# self.lds_endowment.set_temple(const.lds_temple_codes[temple])
|
||||
# else:
|
||||
# self.lds_endowment.set_temple("")
|
||||
# self.lds_endowment.set_place_handle(self.get_place(self.ldsendowplace,1))
|
||||
|
||||
# date_str = unicode(self.ldsseal_date.get_text())
|
||||
# DateHandler.set_date(self.lds_sealing,date_str)
|
||||
# temple = _temple_names[self.ldsseal_temple.get_active()]
|
||||
# if const.lds_temple_codes.has_key(temple):
|
||||
# self.lds_sealing.set_temple(const.lds_temple_codes[temple])
|
||||
# else:
|
||||
# self.lds_sealing.set_temple("")
|
||||
# self.lds_sealing.set_family_handle(self.ldsfam)
|
||||
# self.lds_sealing.set_place_handle(self.get_place(self.ldssealplace,1))
|
||||
self.gender.force(self.db.genderStats.guess_gender(self.given.get_value()))
|
||||
|
||||
def load_photo(self,photo):
|
||||
"""loads, scales, and displays the person's main photo"""
|
||||
self.load_obj = photo
|
||||
if photo == None:
|
||||
self.person_photo.hide()
|
||||
self.obj_photo.hide()
|
||||
else:
|
||||
try:
|
||||
i = gtk.gdk.pixbuf_new_from_file(photo)
|
||||
@@ -544,13 +359,13 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
x = int(scale*(i.get_width()))
|
||||
y = int(scale*(i.get_height()))
|
||||
i = i.scale_simple(x,y,gtk.gdk.INTERP_BILINEAR)
|
||||
self.person_photo.set_from_pixbuf(i)
|
||||
self.person_photo.show()
|
||||
self.obj_photo.set_from_pixbuf(i)
|
||||
self.obj_photo.show()
|
||||
except:
|
||||
self.person_photo.hide()
|
||||
self.obj_photo.hide()
|
||||
|
||||
def _check_for_unknown_gender(self):
|
||||
if self.gender.get_active() == RelLib.Person.UNKNOWN:
|
||||
if self.obj.get_gender() == RelLib.Person.UNKNOWN:
|
||||
dialog = QuestionDialog2(
|
||||
_("Unknown gender specified"),
|
||||
_("The gender of the person is currently unknown. "
|
||||
@@ -564,12 +379,12 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
return False
|
||||
|
||||
def _check_and_update_id(self):
|
||||
idval = unicode(self.gid.get_text())
|
||||
if idval != self.person.get_gramps_id():
|
||||
original = self.db.get_person_from_handle(self.obj.get_handle())
|
||||
|
||||
if original.get_gramps_id() != self.obj.get_gramps_id():
|
||||
idval = self.obj.get_gramps_id()
|
||||
person = self.db.get_person_from_gramps_id(idval)
|
||||
if not person:
|
||||
self.person.set_gramps_id(idval)
|
||||
else:
|
||||
if person:
|
||||
n = self.nd.display(person)
|
||||
msg1 = _("GRAMPS ID value was not changed.")
|
||||
msg2 = _("You have attempted to change the GRAMPS ID to a value "
|
||||
@@ -578,92 +393,56 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
'person' : n }
|
||||
WarningDialog(msg1,msg2)
|
||||
|
||||
def _update_primary_name(self):
|
||||
surname = unicode(self.surname.get_text())
|
||||
suffix = unicode(self.suffix.get_text())
|
||||
prefix = unicode(self.prefix.get_text())
|
||||
ntype = self.ntype_selector.get_values()
|
||||
given = unicode(self.given.get_text())
|
||||
title = unicode(self.title.get_text())
|
||||
|
||||
name = self.pname
|
||||
|
||||
if suffix != name.get_suffix():
|
||||
name.set_suffix(suffix)
|
||||
|
||||
if self.use_patronymic:
|
||||
if prefix != name.get_patronymic():
|
||||
name.set_patronymic(prefix)
|
||||
else:
|
||||
if prefix != name.get_surname_prefix():
|
||||
name.set_surname_prefix(prefix)
|
||||
|
||||
if surname != name.get_surname():
|
||||
name.set_surname(surname)
|
||||
|
||||
if given != name.get_first_name():
|
||||
name.set_first_name(given)
|
||||
|
||||
if title != name.get_title():
|
||||
name.set_title(title)
|
||||
|
||||
name.set_source_reference_list(self.pname.get_source_references())
|
||||
|
||||
if name != self.person.get_primary_name():
|
||||
self.person.set_primary_name(name)
|
||||
|
||||
|
||||
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.person.get_main_parents_family_handle()
|
||||
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.person,f.get_child_handle_list())
|
||||
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.person.get_parent_family_handle_list():
|
||||
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.person,f.get_child_handle_list())
|
||||
new_order = self.reorder_child_list(self.obj,f.get_child_handle_list())
|
||||
f.set_child_handle_list(new_order)
|
||||
|
||||
error = False
|
||||
(female,male,unknown) = _select_gender[self.gender.get_active()]
|
||||
if male and self.person.get_gender() != RelLib.Person.MALE:
|
||||
self.person.set_gender(RelLib.Person.MALE)
|
||||
for temp_family_handle in self.person.get_family_handle_list():
|
||||
original = self.db.get_person_from_handle(self.obj.handle)
|
||||
|
||||
(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)
|
||||
if self.person == temp_family.get_mother_handle():
|
||||
if self.obj == temp_family.get_mother_handle():
|
||||
if temp_family.get_father_handle() != None:
|
||||
error = True
|
||||
else:
|
||||
temp_family.set_mother_handle(None)
|
||||
temp_family.set_father_handle(self.person)
|
||||
elif female and self.person.get_gender() != RelLib.Person.FEMALE:
|
||||
self.person.set_gender(RelLib.Person.FEMALE)
|
||||
for temp_family_handle in self.person.get_family_handle_list():
|
||||
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)
|
||||
if self.person == temp_family.get_father_handle():
|
||||
if self.obj == temp_family.get_father_handle():
|
||||
if temp_family.get_mother_handle() != None:
|
||||
error = True
|
||||
else:
|
||||
temp_family.set_father_handle(None)
|
||||
temp_family.set_mother_handle(self.person)
|
||||
elif unknown and self.person.get_gender() != RelLib.Person.UNKNOWN:
|
||||
self.person.set_gender(RelLib.Person.UNKNOWN)
|
||||
for temp_family_handle in self.person.get_family_handle_list():
|
||||
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)
|
||||
if self.person == temp_family.get_father_handle():
|
||||
if self.obj == temp_family.get_father_handle():
|
||||
if temp_family.get_mother_handle() != None:
|
||||
error = True
|
||||
else:
|
||||
temp_family.set_father_handle(None)
|
||||
temp_family.set_mother_handle(self.person)
|
||||
if self.person == temp_family.get_mother_handle():
|
||||
temp_family.set_mother_handle(self.obj)
|
||||
if self.obj == temp_family.get_mother_handle():
|
||||
if temp_family.get_father_handle() != None:
|
||||
error = True
|
||||
else:
|
||||
temp_family.set_mother_handle(None)
|
||||
temp_family.set_father_handle(self.person)
|
||||
temp_family.set_father_handle(self.obj)
|
||||
|
||||
if error:
|
||||
msg2 = _("Problem changing the gender")
|
||||
@@ -671,104 +450,47 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
"with marriage information.\nPlease check "
|
||||
"the person's marriages.")
|
||||
ErrorDialog(msg)
|
||||
|
||||
|
||||
def on_apply_person_clicked(self,obj):
|
||||
def save(self,*obj):
|
||||
"""
|
||||
Save the data.
|
||||
"""
|
||||
|
||||
if self._check_for_unknown_gender():
|
||||
return
|
||||
|
||||
|
||||
(br, dr, el) = self.event_list.return_info()
|
||||
self.person.set_birth_ref(br)
|
||||
self.person.set_death_ref(dr)
|
||||
self.person.set_event_ref_list(el)
|
||||
self.obj.set_birth_ref(br)
|
||||
self.obj.set_death_ref(dr)
|
||||
self.obj.set_event_ref_list(el)
|
||||
|
||||
self.window.hide()
|
||||
|
||||
trans = self.db.transaction_begin()
|
||||
|
||||
self._check_and_update_id()
|
||||
self._update_primary_name()
|
||||
|
||||
self.build_pdmap()
|
||||
|
||||
self._update_family_ids(trans)
|
||||
|
||||
self.person.set_marker(self.marker_type_selector.get_values())
|
||||
self.person.set_privacy(self.private.get_active())
|
||||
|
||||
# if not self.lds_not_loaded:
|
||||
# self.check_lds()
|
||||
# lds_ord = RelLib.LdsOrd(self.person.get_lds_baptism())
|
||||
# if not self.lds_baptism.are_equal(lds_ord):
|
||||
# self.person.set_lds_baptism(self.lds_baptism)
|
||||
|
||||
# lds_ord = RelLib.LdsOrd(self.person.get_lds_endowment())
|
||||
# if not self.lds_endowment.are_equal(lds_ord):
|
||||
# self.person.set_lds_endowment(self.lds_endowment)
|
||||
|
||||
# lds_ord = RelLib.LdsOrd(self.person.get_lds_sealing())
|
||||
# if not self.lds_sealing.are_equal(lds_ord):
|
||||
# self.person.set_lds_sealing(self.lds_sealing)
|
||||
|
||||
# self.person.set_source_reference_list(self.srcreflist)
|
||||
|
||||
if not self.person.get_handle():
|
||||
self.db.add_person(self.person, trans)
|
||||
if not self.obj.get_handle():
|
||||
self.db.add_person(self.obj, trans)
|
||||
else:
|
||||
if not self.person.get_gramps_id():
|
||||
self.person.set_gramps_id(self.db.find_next_person_gramps_id())
|
||||
self.db.commit_person(self.person, trans)
|
||||
if not self.obj.get_gramps_id():
|
||||
self.obj.set_gramps_id(self.db.find_next_person_gramps_id())
|
||||
self.db.commit_person(self.obj, trans)
|
||||
|
||||
n = self.nd.display(self.person)
|
||||
|
||||
self.db.transaction_commit(trans,_("Edit Person (%s)") % n)
|
||||
self.db.transaction_commit(trans,_("Edit Person (%s)") % self.nd.display(self.obj))
|
||||
self.close()
|
||||
|
||||
def get_place(self,field,makenew=0):
|
||||
text = unicode(field.get_text().strip())
|
||||
if text:
|
||||
if self.pdmap.has_key(text):
|
||||
return self.pdmap[text]
|
||||
elif makenew:
|
||||
place = RelLib.Place()
|
||||
place.set_title(text)
|
||||
trans = self.db.transaction_begin()
|
||||
self.db.add_place(place,trans)
|
||||
self.retval |= const.UPDATE_PLACE
|
||||
self.db.transaction_commit(trans,_('Add Place (%s)' % text))
|
||||
self.pdmap[text] = place.get_handle()
|
||||
self.add_places.append(place)
|
||||
return place.get_handle()
|
||||
else:
|
||||
return u""
|
||||
else:
|
||||
return u""
|
||||
|
||||
def on_edit_name_clicked(self,obj):
|
||||
ntype = self.ntype_selector.get_values()
|
||||
self.pname.set_type(ntype)
|
||||
self.pname.set_suffix(unicode(self.suffix.get_text()))
|
||||
self.pname.set_surname(unicode(self.surname.get_text()))
|
||||
if self.use_patronymic:
|
||||
self.pname.set_patronymic(unicode(self.prefix.get_text()))
|
||||
else:
|
||||
self.pname.set_surname_prefix(unicode(self.prefix.get_text()))
|
||||
self.pname.set_first_name(unicode(self.given.get_text()))
|
||||
self.pname.set_title(unicode(self.title.get_text()))
|
||||
|
||||
def edit_name_clicked(self,obj):
|
||||
NameEdit.NameEditor(self.dbstate, self.uistate, self.track,
|
||||
self.pname, self)
|
||||
self.pname, self.update_name)
|
||||
|
||||
def update_name(self,name):
|
||||
self.write_primary_name()
|
||||
for obj in (self.suffix, self.prefix, self.given, self.title, self.ntype_field,
|
||||
self.surname_field):
|
||||
obj.update()
|
||||
|
||||
def load_person_image(self):
|
||||
media_list = self.person.get_media_list()
|
||||
media_list = self.obj.get_media_list()
|
||||
if media_list:
|
||||
ph = media_list[0]
|
||||
object_handle = ph.get_reference_handle()
|
||||
@@ -782,18 +504,6 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
else:
|
||||
self.load_photo(None)
|
||||
|
||||
def write_primary_name(self):
|
||||
# initial values
|
||||
self.suffix.set_text(self.pname.get_suffix())
|
||||
if self.use_patronymic:
|
||||
self.prefix.set_text(self.pname.get_patronymic())
|
||||
else:
|
||||
self.prefix.set_text(self.pname.get_surname_prefix())
|
||||
|
||||
self.surname.set_text(self.pname.get_surname())
|
||||
self.given.set_text(self.pname.get_first_name())
|
||||
self.title.set_text(self.pname.get_title())
|
||||
|
||||
def birth_dates_in_order(self,list):
|
||||
"""Check any *valid* birthdates in the list to insure that they are in
|
||||
numerically increasing order."""
|
||||
@@ -867,22 +577,3 @@ class EditPerson(DisplayState.ManagedWindow):
|
||||
list.insert(target,person.get_handle())
|
||||
return list
|
||||
|
||||
def build_dropdown(entry,strings):
|
||||
store = gtk.ListStore(str)
|
||||
for value in strings:
|
||||
node = store.append()
|
||||
store.set(node,0,unicode(value))
|
||||
completion = gtk.EntryCompletion()
|
||||
completion.set_text_column(0)
|
||||
completion.set_model(store)
|
||||
entry.set_completion(completion)
|
||||
|
||||
def build_combo(entry,strings):
|
||||
cell = gtk.CellRendererText()
|
||||
entry.pack_start(cell,True)
|
||||
entry.add_attribute(cell,'text',0)
|
||||
store = gtk.ListStore(str)
|
||||
for value in strings:
|
||||
node = store.append()
|
||||
store.set(node,0,unicode(value))
|
||||
entry.set_model(store)
|
||||
|
||||
Reference in New Issue
Block a user