From 38556466b06adecf1a4717020bcd3f863e44b0d2 Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Thu, 25 May 2006 21:02:49 +0000 Subject: [PATCH] * src/DataViews/_PersonView.py: Merge module support * src/Merge/_MergeSource.py: broken out of MergeData.py * src/Merge/__init__.py: support of module * src/Merge/Makefile.am: added * src/Merge/_MergePlace.py: broken out of MergeData.py * src/Merge/_MergePerson.py: renamed svn: r6778 --- gramps2/ChangeLog | 6 + gramps2/src/DataViews/_PersonView.py | 8 +- gramps2/src/DataViews/_PlaceView.py | 4 +- gramps2/src/DataViews/_SourceView.py | 4 +- gramps2/src/Merge/Makefile.am | 2 + .../Merge/{MergePerson.py => _MergePerson.py} | 2 +- gramps2/src/Merge/_MergePlace.py | 170 ++++++++++++++++++ .../{MergeData.py => Merge/_MergeSource.py} | 128 +------------ gramps2/src/Merge/__init__.py | 4 +- 9 files changed, 191 insertions(+), 137 deletions(-) rename gramps2/src/Merge/{MergePerson.py => _MergePerson.py} (99%) create mode 100644 gramps2/src/Merge/_MergePlace.py rename gramps2/src/{MergeData.py => Merge/_MergeSource.py} (61%) diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index f6be34cda..46cf99b0d 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,4 +1,10 @@ 2006-05-25 Don Allingham + * src/DataViews/_PersonView.py: Merge module support + * src/Merge/_MergeSource.py: broken out of MergeData.py + * src/Merge/__init__.py: support of module + * src/Merge/Makefile.am: added + * src/Merge/_MergePlace.py: broken out of MergeData.py + * src/Merge/_MergePerson.py: renamed * src/DataViews/_SourceView.py: source merge support * src/DataViews/_PlaceView.py: place merge support * src/glade/mergedata.glade: place merge support diff --git a/gramps2/src/DataViews/_PersonView.py b/gramps2/src/DataViews/_PersonView.py index 8f3782393..252f8685e 100644 --- a/gramps2/src/DataViews/_PersonView.py +++ b/gramps2/src/DataViews/_PersonView.py @@ -154,11 +154,11 @@ class PersonView(PageView.PersonNavView): ErrorDialog(msg,msg2) else: from QuestionDialog import ErrorDialog - from Merge import MergePeople + import Merge p1 = self.db.get_person_from_handle(mlist[0]) p2 = self.db.get_person_from_handle(mlist[1]) if p1 and p2: - merger = MergePeople.Compare(self.dbstate, self.uistate, p1, p2) + Merge.PersonCompare(self.dbstate, self.uistate, p1, p2) else: msg = _("Cannot merge people") msg2 = _("Exactly two people must be selected to perform a merge. " @@ -176,12 +176,12 @@ class PersonView(PageView.PersonNavView): "control key while clicking on the desired person.") ErrorDialog(msg,msg2) else: - from Merge import MergePeople + import Merge p1 = self.db.get_person_from_handle(mlist[0]) p2 = self.db.get_person_from_handle(mlist[1]) if p1 and p2: - MergePeople.MergePeopleUI(self.dbstate, self.uistate, p1, p2) + Merge.MergePeopleUI(self.dbstate, self.uistate, p1, p2) else: msg = _("Cannot merge people") msg2 = _("Exactly two people must be selected to perform a merge. " diff --git a/gramps2/src/DataViews/_PlaceView.py b/gramps2/src/DataViews/_PlaceView.py index d52dbd20e..aa0ea1acd 100644 --- a/gramps2/src/DataViews/_PlaceView.py +++ b/gramps2/src/DataViews/_PlaceView.py @@ -221,7 +221,7 @@ class PlaceView(PageView.ListView): "control key while clicking on the desired place.") ErrorDialog(msg,msg2) else: - import MergeData - MergeData.MergePlaces(self.dbstate, self.uistate, mlist[0], mlist[1]) + import Merge + Merge.MergePlaces(self.dbstate, self.uistate, mlist[0], mlist[1]) diff --git a/gramps2/src/DataViews/_SourceView.py b/gramps2/src/DataViews/_SourceView.py index 20316d567..f0b75f807 100644 --- a/gramps2/src/DataViews/_SourceView.py +++ b/gramps2/src/DataViews/_SourceView.py @@ -210,6 +210,6 @@ class SourceView(PageView.ListView): "control key while clicking on the desired source.") ErrorDialog(msg,msg2) else: - import MergeData - MergeData.MergeSources(self.dbstate, self.uistate, mlist[0], mlist[1]) + import Merge + Merge.MergeSources(self.dbstate, self.uistate, mlist[0], mlist[1]) diff --git a/gramps2/src/Merge/Makefile.am b/gramps2/src/Merge/Makefile.am index 9b549847f..3f0c36d0f 100644 --- a/gramps2/src/Merge/Makefile.am +++ b/gramps2/src/Merge/Makefile.am @@ -8,6 +8,8 @@ pkgdatadir = $(datadir)/@PACKAGE@/Merge pkgdata_PYTHON = \ __init__.py \ _MergePerson.py \ + _MergePlace.py \ + _MergeSource.py pkgpyexecdir = @pkgpyexecdir@/Merge pkgpythondir = @pkgpythondir@/Merge diff --git a/gramps2/src/Merge/MergePerson.py b/gramps2/src/Merge/_MergePerson.py similarity index 99% rename from gramps2/src/Merge/MergePerson.py rename to gramps2/src/Merge/_MergePerson.py index 006459a6a..d4f677787 100644 --- a/gramps2/src/Merge/MergePerson.py +++ b/gramps2/src/Merge/_MergePerson.py @@ -54,7 +54,7 @@ import GrampsDb sex = ( _("female"), _("male"), _("unknown")) -class Compare(ManagedWindow.ManagedWindow): +class PersonCompare(ManagedWindow.ManagedWindow): def __init__(self, dbstate, uistate, person1, person2, update=None) : diff --git a/gramps2/src/Merge/_MergePlace.py b/gramps2/src/Merge/_MergePlace.py new file mode 100644 index 000000000..32f7705ba --- /dev/null +++ b/gramps2/src/Merge/_MergePlace.py @@ -0,0 +1,170 @@ +# +# Gramps - a GTK+/GNOME based genealogy program +# +# Copyright (C) 2000-2005 Donald N. Allingham +# +# 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 +# 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, +# 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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +# $Id$ + +#------------------------------------------------------------------------- +# +# Standard python modules +# +#------------------------------------------------------------------------- +from gettext import gettext as _ + +#------------------------------------------------------------------------- +# +# GNOME +# +#------------------------------------------------------------------------- +import gtk + +#------------------------------------------------------------------------- +# +# GRAMPS modules +# +#------------------------------------------------------------------------- +import const +import GrampsDisplay +import ManagedWindow + +#------------------------------------------------------------------------- +# +# Merge Places +# +#------------------------------------------------------------------------- +class MergePlaces(ManagedWindow.ManagedWindow): + """ + Merges to places into a single place. Displays a dialog box that + allows the places to be combined into one. + """ + def __init__(self, dbstate, uistate, new_handle, old_handle): + + ManagedWindow.ManagedWindow.__init__(self, uistate, [], self.__class__) + + self.db = dbstate.db + self.new_handle = new_handle + self.old_handle = old_handle + self.p1 = self.db.get_place_from_handle(self.new_handle) + self.p2 = self.db.get_place_from_handle(self.old_handle) + + self.glade = gtk.glade.XML(const.merge_glade,"merge_places","gramps") + self.set_window(self.glade.get_widget("merge_places"), + self.glade.get_widget('title'), + _("Select title")) + + self.glade.get_widget("title1_text").set_text(self.p1.get_title()) + self.glade.get_widget("title2_text").set_text(self.p2.get_title()) + self.t3 = self.glade.get_widget("title3_text") + self.t3.set_text(self.p1.get_title()) + + self.glade.get_widget('cancel').connect('clicked', self.close_window) + self.glade.get_widget('ok').connect('clicked', self.merge) + self.glade.get_widget('help').connect('clicked', self.help) + + self.show() + + def close_window(self, obj): + self.close() + + def build_menu_names(self,obj): + return (_('Merge Places'),None) + + def help(self,obj): + """Display the relevant portion of GRAMPS manual""" + GrampsDisplay.help('adv-merge-places') + + def merge(self,obj): + """ + Performs the merge of the places when the merge button is clicked. + """ + t2active = self.glade.get_widget("title2").get_active() + + if t2active: + self.p1.set_title(self.p2.get_title()) + elif self.glade.get_widget("title3").get_active(): + self.p1.set_title(unicode(self.t3.get_text())) + + # Set longitude + if self.p1.get_longitude() == "" and self.p2.get_longitude() != "": + self.p1.set_longitude(self.p2.get_longitude()) + + # Set latitude + if self.p1.get_latitude() == "" and self.p2.get_latitude() != "": + self.p1.set_latitude(self.p2.get_latitude()) + + # Add URLs from P2 to P1 + for url in self.p2.get_url_list(): + self.p1.add_url(url) + + # Copy photos from P2 to P1 + for photo in self.p2.get_media_list(): + self.p1.add_media_reference(photo) + + # Copy sources from P2 to P1 + for source in self.p2.get_source_references(): + self.p1.add_source(source) + + # Add notes from P2 to P1 + note = self.p2.get_note() + if note != "": + if self.p1.get_note() == "": + self.p1.set_note(note) + elif self.p1.get_note() != note: + self.p1.set_note("%s\n\n%s" % (self.p1.get_note(),note)) + + if t2active: + lst = [self.p1.get_main_location()] + self.p1.get_alternate_locations() + self.p1.set_main_location(self.p2.get_main_location()) + for l in lst: + if not l.is_empty(): + self.p1.add_alternate_locations(l) + else: + lst = [self.p2.get_main_location()] + self.p2.get_alternate_locations() + for l in lst: + if not l.is_empty(): + self.p1.add_alternate_locations(l) + + # remove old and commit new source + trans = self.db.transaction_begin() + + self.db.remove_place(self.old_handle,trans) + self.db.commit_place(self.p1,trans) + + # replace references in other objetcs + # people + for handle in self.db.get_person_handles(sort_handles=False): + person = self.db.get_person_from_handle(handle) + if person.has_handle_reference('Place',self.old_handle): + person.replace_handle_reference('Place',self.old_handle,self.new_handle) + self.db.commit_person(person,trans) + # families + for handle in self.db.get_family_handles(): + family = self.db.get_family_from_handle(handle) + if family.has_handle_reference('Place',self.old_handle): + family.replace_handle_reference('Place',self.old_handle,self.new_handle) + self.db.commit_family(family,trans) + # events + for handle in self.db.get_event_handles(): + event = self.db.get_event_from_handle(handle) + if event.has_handle_reference('Place',self.old_handle): + event.replace_handle_reference('Place',self.old_handle,self.new_handle) + self.db.commit_event(event,trans) + + self.db.transaction_commit(trans,_("Merge Places")) + self.close() diff --git a/gramps2/src/MergeData.py b/gramps2/src/Merge/_MergeSource.py similarity index 61% rename from gramps2/src/MergeData.py rename to gramps2/src/Merge/_MergeSource.py index 4bd2e6c27..55694b6ba 100644 --- a/gramps2/src/MergeData.py +++ b/gramps2/src/Merge/_MergeSource.py @@ -18,7 +18,7 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -# $Id$ +# $Id: MergeData.py 6777 2006-05-25 20:35:04Z dallingham $ #------------------------------------------------------------------------- # @@ -43,132 +43,6 @@ import const import GrampsDisplay import ManagedWindow -#------------------------------------------------------------------------- -# -# Merge Places -# -#------------------------------------------------------------------------- -class MergePlaces(ManagedWindow.ManagedWindow): - """ - Merges to places into a single place. Displays a dialog box that - allows the places to be combined into one. - """ - def __init__(self, dbstate, uistate, new_handle, old_handle): - - ManagedWindow.ManagedWindow.__init__(self, uistate, [], self.__class__) - - self.db = dbstate.db - self.new_handle = new_handle - self.old_handle = old_handle - self.p1 = self.db.get_place_from_handle(self.new_handle) - self.p2 = self.db.get_place_from_handle(self.old_handle) - - self.glade = gtk.glade.XML(const.merge_glade,"merge_places","gramps") - self.set_window(self.glade.get_widget("merge_places"), - self.glade.get_widget('title'), - _("Select title")) - - self.glade.get_widget("title1_text").set_text(self.p1.get_title()) - self.glade.get_widget("title2_text").set_text(self.p2.get_title()) - self.t3 = self.glade.get_widget("title3_text") - self.t3.set_text(self.p1.get_title()) - - self.glade.get_widget('cancel').connect('clicked', self.close_window) - self.glade.get_widget('ok').connect('clicked', self.merge) - self.glade.get_widget('help').connect('clicked', self.help) - - self.show() - - def close_window(self, obj): - self.close() - - def build_menu_names(self,obj): - return (_('Merge Places'),None) - - def help(self,obj): - """Display the relevant portion of GRAMPS manual""" - GrampsDisplay.help('adv-merge-places') - - def merge(self,obj): - """ - Performs the merge of the places when the merge button is clicked. - """ - t2active = self.glade.get_widget("title2").get_active() - - if t2active: - self.p1.set_title(self.p2.get_title()) - elif self.glade.get_widget("title3").get_active(): - self.p1.set_title(unicode(self.t3.get_text())) - - # Set longitude - if self.p1.get_longitude() == "" and self.p2.get_longitude() != "": - self.p1.set_longitude(self.p2.get_longitude()) - - # Set latitude - if self.p1.get_latitude() == "" and self.p2.get_latitude() != "": - self.p1.set_latitude(self.p2.get_latitude()) - - # Add URLs from P2 to P1 - for url in self.p2.get_url_list(): - self.p1.add_url(url) - - # Copy photos from P2 to P1 - for photo in self.p2.get_media_list(): - self.p1.add_media_reference(photo) - - # Copy sources from P2 to P1 - for source in self.p2.get_source_references(): - self.p1.add_source(source) - - # Add notes from P2 to P1 - note = self.p2.get_note() - if note != "": - if self.p1.get_note() == "": - self.p1.set_note(note) - elif self.p1.get_note() != note: - self.p1.set_note("%s\n\n%s" % (self.p1.get_note(),note)) - - if t2active: - lst = [self.p1.get_main_location()] + self.p1.get_alternate_locations() - self.p1.set_main_location(self.p2.get_main_location()) - for l in lst: - if not l.is_empty(): - self.p1.add_alternate_locations(l) - else: - lst = [self.p2.get_main_location()] + self.p2.get_alternate_locations() - for l in lst: - if not l.is_empty(): - self.p1.add_alternate_locations(l) - - # remove old and commit new source - trans = self.db.transaction_begin() - - self.db.remove_place(self.old_handle,trans) - self.db.commit_place(self.p1,trans) - - # replace references in other objetcs - # people - for handle in self.db.get_person_handles(sort_handles=False): - person = self.db.get_person_from_handle(handle) - if person.has_handle_reference('Place',self.old_handle): - person.replace_handle_reference('Place',self.old_handle,self.new_handle) - self.db.commit_person(person,trans) - # families - for handle in self.db.get_family_handles(): - family = self.db.get_family_from_handle(handle) - if family.has_handle_reference('Place',self.old_handle): - family.replace_handle_reference('Place',self.old_handle,self.new_handle) - self.db.commit_family(family,trans) - # events - for handle in self.db.get_event_handles(): - event = self.db.get_event_from_handle(handle) - if event.has_handle_reference('Place',self.old_handle): - event.replace_handle_reference('Place',self.old_handle,self.new_handle) - self.db.commit_event(event,trans) - - self.db.transaction_commit(trans,_("Merge Places")) - self.close() - #------------------------------------------------------------------------- # # Merge Sources diff --git a/gramps2/src/Merge/__init__.py b/gramps2/src/Merge/__init__.py index 5b7b715fb..8c850bd46 100644 --- a/gramps2/src/Merge/__init__.py +++ b/gramps2/src/Merge/__init__.py @@ -23,4 +23,6 @@ """ """ -from MergePeople import MergePeople +from _MergePerson import * +from _MergePlace import * +from _MergeSource import *