diff --git a/gramps/gui/editors/editeventref.py b/gramps/gui/editors/editeventref.py index 2213dece0..2c6a0f20f 100644 --- a/gramps/gui/editors/editeventref.py +++ b/gramps/gui/editors/editeventref.py @@ -28,14 +28,14 @@ # Python modules # #------------------------------------------------------------------------- -from gramps.gen.const import GRAMPS_LOCALE as glocale -_ = glocale.translation.gettext #------------------------------------------------------------------------- # # gramps modules # #------------------------------------------------------------------------- +from gramps.gen.const import GRAMPS_LOCALE as glocale +_ = glocale.translation.gettext from gramps.gen.lib import EventType, NoteType from gramps.gen.db import DbTxn from ..glade import Glade @@ -245,6 +245,9 @@ class EditEventRef(EditReference): def ok_clicked(self, obj): + if self.check_for_duplicate_id('Event'): + return + if self.source.handle: with DbTxn(_("Modify Event"), self.db) as trans: self.commit_event(self.source,trans) diff --git a/gramps/gui/editors/editmediaref.py b/gramps/gui/editors/editmediaref.py index 89127679a..a980f1ea1 100644 --- a/gramps/gui/editors/editmediaref.py +++ b/gramps/gui/editors/editmediaref.py @@ -29,8 +29,6 @@ # Standard python modules # #------------------------------------------------------------------------- -from gramps.gen.const import GRAMPS_LOCALE as glocale -_ = glocale.translation.sgettext #------------------------------------------------------------------------- # @@ -634,6 +632,10 @@ class EditMediaRef(EditReference): self._setup_notebook_tabs(notebook_ref) def save(self,*obj): + + if self.check_for_duplicate_id('Media'): + return + #first save primary object if self.source.handle: with DbTxn(_("Edit Media Object (%s)") % diff --git a/gramps/gui/editors/editreference.py b/gramps/gui/editors/editreference.py index 0d695cb4f..7ae36dfde 100644 --- a/gramps/gui/editors/editreference.py +++ b/gramps/gui/editors/editreference.py @@ -3,6 +3,7 @@ # # Copyright (C) 2000-2006 Donald N. Allingham # 2009 Gary Burton +# Copyright (C) 2014 Paul Franklin # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -33,6 +34,9 @@ from gi.repository import Gtk # gramps modules # #------------------------------------------------------------------------- +from gramps.gen.const import GRAMPS_LOCALE as glocale +_ = glocale.translation.gettext +from ..dialog import ErrorDialog from ..managedwindow import ManagedWindow from .displaytabs import GrampsTab from gramps.gen.config import config @@ -255,3 +259,43 @@ class EditReference(ManagedWindow, DbGUIElement): of the main interface, not of the displaytabs. """ pass + + def check_for_duplicate_id(self, type): + """ + check to see if the gramps ID (if any) already exists + + type : the gramps primary object type, a string + returns : True if the gramps ID already exists, else False + + N.B. the various strings, string variables, and titles existed already + """ + new_id = self.source.get_gramps_id() + if new_id: + old_primary = self.db.get_from_name_and_gramps_id(type, new_id) + if old_primary: + if type == 'Event': + msg1 = _("Cannot save event. ID already exists.") + description = old_primary.get_description() + elif type == 'Media': + msg1 = _("Cannot save media object. ID already exists.") + description = old_primary.get_description() + elif type == 'Repository': + msg1 = _("Cannot save repository. ID already exists.") + description = old_primary.get_name() + if description: + msg2 = _("You have attempted to use the existing Gramps " + "ID with value %(id)s. This value is already " + "used by '%(prim_object)s'. Please enter a " + "different ID or leave blank to get the next " + "available ID value.") % { + 'id' : new_id, 'prim_object' : description } + else: + msg2 = _("You have attempted to use the existing Gramps " + "ID with value %(id)s. This value is already " + "used. Please enter a " + "different ID or leave blank to get the next " + "available ID value.") % { + 'id' : new_id} + ErrorDialog(msg1, msg2) + return True + return False diff --git a/gramps/gui/editors/editreporef.py b/gramps/gui/editors/editreporef.py index 08616a276..cb35003bb 100644 --- a/gramps/gui/editors/editreporef.py +++ b/gramps/gui/editors/editreporef.py @@ -26,14 +26,14 @@ # Python modules # #------------------------------------------------------------------------- -from gramps.gen.const import GRAMPS_LOCALE as glocale -_ = glocale.translation.gettext #------------------------------------------------------------------------- # # gramps modules # #------------------------------------------------------------------------- +from gramps.gen.const import GRAMPS_LOCALE as glocale +_ = glocale.translation.gettext from gramps.gen.lib import NoteType from gramps.gen.db import DbTxn @@ -191,6 +191,9 @@ class EditRepoRef(EditReference): def ok_clicked(self, obj): + if self.check_for_duplicate_id('Repository'): + return + if self.source.handle: with DbTxn(_("Modify Repository"), self.db) as trans: self.db.commit_repository(self.source,trans) diff --git a/po/POTFILES.in b/po/POTFILES.in index 0c6c3cd15..0e26c612b 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -375,6 +375,7 @@ gramps/gui/editors/editperson.py gramps/gui/editors/editpersonref.py gramps/gui/editors/editplace.py gramps/gui/editors/editprimary.py +gramps/gui/editors/editreference.py gramps/gui/editors/editreporef.py gramps/gui/editors/editrepository.py gramps/gui/editors/editsource.py diff --git a/po/POTFILES.skip b/po/POTFILES.skip index 3fff050eb..84525ae9c 100644 --- a/po/POTFILES.skip +++ b/po/POTFILES.skip @@ -281,7 +281,6 @@ gramps/gui/glade/catalog/grampswidgets.py # gui/editors - the GUI editors package # gramps/gui/editors/__init__.py -gramps/gui/editors/editreference.py gramps/gui/editors/editsecondary.py # # gui/editors/displaytabs - the GUI display tabs package