2059: need a way to compare and merge all objects, by MD Nauta

svn: r15645
This commit is contained in:
Doug Blank
2010-07-22 02:16:32 +00:00
parent 59403835fe
commit 3e28ee67ec
67 changed files with 7835 additions and 109 deletions

View File

@@ -204,13 +204,10 @@ class BasePersonView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
</placeholder>
<menuitem action="SetActive"/>
<menuitem action="FilterEdit"/>
<placeholder name="Merge">
<menuitem action="CmpMerge"/>
<menuitem action="FastMerge"/>
</placeholder>
</menu>
</menubar>
<toolbar name="ToolBar">
@@ -223,6 +220,7 @@ class BasePersonView(ListView):
<toolitem action="Add"/>
<toolitem action="Edit"/>
<toolitem action="Remove"/>
<toolitem action="Merge"/>
</placeholder>
</toolbar>
<popup name="Popup">
@@ -233,6 +231,7 @@ class BasePersonView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
<separator/>
<menu name="QuickReport" action="QuickReport">
<menuitem action="Dummy"/>
@@ -343,10 +342,8 @@ class BasePersonView(ListView):
_("Add a new person"), self.add),
('Remove', gtk.STOCK_REMOVE, _("_Remove"), "<control>Delete",
_("Remove the Selected Person"), self.remove),
('CmpMerge', None, _('Compare and _Merge...'), None, None,
self.cmp_merge),
('FastMerge', None, _('_Fast Merge...'), None, None,
self.fast_merge),
('Merge', 'gramps-merge', _('_Merge...'), None, None,
self.merge),
('ExportTab', None, _('Export View...'), None, None, self.export),
])
@@ -365,31 +362,10 @@ class BasePersonView(ListView):
self.all_action.set_visible(False)
self.edit_action.set_visible(False)
def cmp_merge(self, obj):
mlist = self.selected_handles()
if len(mlist) != 2:
ErrorDialog(
_("Cannot merge people"),
_("Exactly two people must be selected to perform a merge. "
"A second person can be selected by holding down the "
"control key while clicking on the desired person."))
else:
import Merge
person1 = self.dbstate.db.get_person_from_handle(mlist[0])
person2 = self.dbstate.db.get_person_from_handle(mlist[1])
if person1 and person2:
Merge.PersonCompare(self.dbstate, self.uistate, person1,
person2, self.build_tree)
else:
ErrorDialog(
_("Cannot merge people"),
_("Exactly two people must be selected to perform a "
"merge. A second person can be selected by holding "
"down the control key while clicking on the desired "
"person."))
def fast_merge(self, obj):
def merge(self, obj):
"""
Merge the selected people.
"""
mlist = self.selected_handles()
if len(mlist) != 2:
@@ -400,15 +376,4 @@ class BasePersonView(ListView):
"control key while clicking on the desired person."))
else:
import Merge
person1 = self.dbstate.db.get_person_from_handle(mlist[0])
person2 = self.dbstate.db.get_person_from_handle(mlist[1])
if person1 and person2:
Merge.MergePeopleUI(self.dbstate, self.uistate, person1,
person2, self.build_tree)
else:
ErrorDialog(
_("Cannot merge people"),
_("Exactly two people must be selected to perform a merge. "
"A second person can be selected by holding down the "
"control key while clicking on the desired person."))
Merge.MergePeople(self.dbstate, self.uistate, mlist[0], mlist[1])

View File

@@ -155,8 +155,6 @@ class PlaceBaseView(ListView):
def define_actions(self):
ListView.define_actions(self)
self._add_action('FastMerge', None, _('_Merge...'),
callback=self.fast_merge)
self._add_toolmenu_action('MapsList', _('Loading...'),
_("Attempt to see selected locations with a Map "
"Service (OpenstreetMap, Google Maps, ...)"),
@@ -317,11 +315,9 @@ class PlaceBaseView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
</placeholder>
<menuitem action="FilterEdit"/>
<placeholder name="Merge">
<menuitem action="FastMerge"/>
</placeholder>
</menu>
</menubar>
<toolbar name="ToolBar">
@@ -333,6 +329,7 @@ class PlaceBaseView(ListView):
<toolitem action="Add"/>
<toolitem action="Edit"/>
<toolitem action="Remove"/>
<toolitem action="Merge"/>
<separator/>
<toolitem action="MapsList"/>
</placeholder>
@@ -344,6 +341,7 @@ class PlaceBaseView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
<separator/>
<menu name="QuickReport" action="QuickReport">
<menuitem action="Dummy"/>
@@ -397,7 +395,10 @@ class PlaceBaseView(ListView):
except Errors.WindowActiveError:
pass
def fast_merge(self, obj):
def merge(self, obj):
"""
Merge the selected places.
"""
mlist = self.selected_handles()
if len(mlist) != 2:

View File

@@ -53,6 +53,7 @@ import Errors
import Bookmarks
import config
from DdTargets import DdTargets
from QuestionDialog import ErrorDialog
from gui.editors import EditEvent, DeleteEventQuery
from Filters.SideBar import EventSidebarFilter
from gen.plug import CATEGORY_QR_EVENT
@@ -178,6 +179,7 @@ class EventView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
</placeholder>
<menuitem action="FilterEdit"/>
</menu>
@@ -191,6 +193,7 @@ class EventView(ListView):
<toolitem action="Add"/>
<toolitem action="Edit"/>
<toolitem action="Remove"/>
<toolitem action="Merge"/>
</placeholder>
</toolbar>
<popup name="Popup">
@@ -200,6 +203,7 @@ class EventView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
<separator/>
<menu name="QuickReport" action="QuickReport">
<menuitem action="Dummy"/>
@@ -256,6 +260,22 @@ class EventView(ListView):
except Errors.WindowActiveError:
pass
def merge(self, obj):
"""
Merge the selected events.
"""
mlist = self.selected_handles()
if len(mlist) != 2:
msg = _("Cannot merge event objects.")
msg2 = _("Exactly two events must be selected to perform a merge. "
"A second object can be selected by holding down the "
"control key while clicking on the desired event.")
ErrorDialog(msg, msg2)
else:
import Merge
Merge.MergeEvents(self.dbstate, self.uistate, mlist[0], mlist[1])
def dummy_report(self, obj):
""" For the xml UI definition of popup to work, the submenu
Quick Report must have an entry in the xml

View File

@@ -50,6 +50,7 @@ from gui.editors import EditFamily
import Bookmarks
import Errors
import config
from QuestionDialog import ErrorDialog
from Filters.SideBar import FamilySidebarFilter
from gen.plug import CATEGORY_QR_FAMILY
@@ -107,6 +108,7 @@ class FamilyView(ListView):
FamilyModel,
signal_map, dbstate.db.get_family_bookmarks(),
Bookmarks.FamilyBookmarks, nav_group,
multiple=True,
filter_class=FamilySidebarFilter)
self.func_list = {
@@ -143,6 +145,7 @@ class FamilyView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
</placeholder>
<menuitem action="FilterEdit"/>
</menu>
@@ -162,6 +165,7 @@ class FamilyView(ListView):
<toolitem action="Add"/>
<toolitem action="Edit"/>
<toolitem action="Remove"/>
<toolitem action="Merge"/>
</placeholder>
</toolbar>
<popup name="Popup">
@@ -171,6 +175,7 @@ class FamilyView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
<separator/>
<menu name="QuickReport" action="QuickReport">
<menuitem action="Dummy"/>
@@ -236,6 +241,22 @@ class FamilyView(ListView):
except Errors.WindowActiveError:
pass
def merge(self, obj):
"""
Merge the selected families.
"""
mlist = self.selected_handles()
if len(mlist) != 2:
msg = _("Cannot merge families.")
msg2 = _("Exactly two families must be selected to perform a merge."
" A second family can be selected by holding down the "
"control key while clicking on the desired family.")
ErrorDialog(msg, msg2)
else:
import Merge
Merge.MergeFamilies(self.dbstate, self.uistate, mlist[0], mlist[1])
def dummy_report(self, obj):
""" For the xml UI definition of popup to work, the submenu
Quick Report must have an entry in the xml

View File

@@ -62,6 +62,7 @@ from gui.editors import EditMedia, DeleteMediaQuery
import Errors
from Filters.SideBar import MediaSidebarFilter
from DdTargets import DdTargets
from QuestionDialog import ErrorDialog
from gen.plug import CATEGORY_QR_MEDIA
#-------------------------------------------------------------------------
@@ -355,6 +356,7 @@ class MediaView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
</placeholder>
<menuitem action="FilterEdit"/>
</menu>
@@ -381,6 +383,7 @@ class MediaView(ListView):
<toolitem action="Add"/>
<toolitem action="Edit"/>
<toolitem action="Remove"/>
<toolitem action="Merge"/>
</placeholder>
<separator/>
<toolitem action="OpenMedia"/>
@@ -395,6 +398,7 @@ class MediaView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
<separator/>
<menu name="QuickReport" action="QuickReport">
<menuitem action="Dummy"/>
@@ -441,6 +445,23 @@ class MediaView(ListView):
except Errors.WindowActiveError:
pass
def merge(self, obj):
"""
Merge the selected objects.
"""
mlist = self.selected_handles()
if len(mlist) != 2:
msg = _("Cannot merge media objects.")
msg2 = _("Exactly two media objects must be selected to perform a "
"merge. A second object can be selected by holding down the "
"control key while clicking on the desired object.")
ErrorDialog(msg, msg2)
else:
import Merge
Merge.MergeMediaObjects(self.dbstate, self.uistate, mlist[0],
mlist[1])
def get_handle_from_gramps_id(self, gid):
"""
returns the handle of the specified object

View File

@@ -52,6 +52,7 @@ import Bookmarks
import config
from gen.lib import Note
from DdTargets import DdTargets
from QuestionDialog import ErrorDialog
from Filters.SideBar import NoteSidebarFilter
from gui.editors import EditNote, DeleteNoteQuery
from gen.plug import CATEGORY_QR_NOTE
@@ -166,6 +167,7 @@ class NoteView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
</placeholder>
<menuitem action="FilterEdit"/>
</menu>
@@ -179,6 +181,7 @@ class NoteView(ListView):
<toolitem action="Add"/>
<toolitem action="Edit"/>
<toolitem action="Remove"/>
<toolitem action="Merge"/>
</placeholder>
</toolbar>
<popup name="Popup">
@@ -188,6 +191,7 @@ class NoteView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
<separator/>
<menu name="QuickReport" action="QuickReport">
<menuitem action="Dummy"/>
@@ -239,3 +243,19 @@ class NoteView(ListView):
EditNote(self.dbstate, self.uistate, [], note)
except Errors.WindowActiveError:
pass
def merge(self, obj):
"""
Merge the selected notes.
"""
mlist = self.selected_handles()
if len(mlist) != 2:
msg = _("Cannot merge notes.")
msg2 = _("Exactly two notes must be selected to perform a merge. "
"A second note can be selected by holding down the "
"control key while clicking on the desired note.")
ErrorDialog(msg, msg2)
else:
import Merge
Merge.MergeNotes(self.dbstate, self.uistate, mlist[0], mlist[1])

View File

@@ -44,6 +44,7 @@ import Errors
import config
from gui.editors import EditRepository, DeleteRepositoryQuery
from DdTargets import DdTargets
from QuestionDialog import ErrorDialog
from Filters.SideBar import RepoSidebarFilter
from gen.plug import CATEGORY_QR_REPOSITORY
@@ -182,6 +183,7 @@ class RepositoryView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
</placeholder>
<menuitem action="FilterEdit"/>
</menu>
@@ -195,6 +197,7 @@ class RepositoryView(ListView):
<toolitem action="Add"/>
<toolitem action="Edit"/>
<toolitem action="Remove"/>
<toolitem action="Merge"/>
</placeholder>
</toolbar>
<popup name="Popup">
@@ -204,6 +207,7 @@ class RepositoryView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
<separator/>
<menu name="QuickReport" action="QuickReport">
<menuitem action="Dummy"/>
@@ -235,6 +239,24 @@ class RepositoryView(ListView):
except Errors.WindowActiveError:
pass
def merge(self, obj):
"""
Merge the selected repositories.
"""
mlist = self.selected_handles()
if len(mlist) != 2:
msg = _("Cannot merge repositories.")
msg2 = _("Exactly two repositories must be selected to perform a "
"merge. A second repository can be selected by holding "
"down the control key while clicking on the desired "
"repository.")
ErrorDialog(msg, msg2)
else:
import Merge
Merge.MergeRepositories(self.dbstate, self.uistate, mlist[0],
mlist[1])
def get_handle_from_gramps_id(self, gid):
obj = self.dbstate.db.get_repository_from_gramps_id(gid)
if obj:

View File

@@ -130,8 +130,6 @@ class SourceView(ListView):
def define_actions(self):
ListView.define_actions(self)
self._add_action('FastMerge', None, _('_Merge'),
callback=self.fast_merge)
self._add_action('FilterEdit', None, _('Source Filter Editor'),
callback=self.filter_editor,)
self._add_action('QuickReport', None, _("Quick View"), None, None, None)
@@ -166,11 +164,9 @@ class SourceView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
</placeholder>
<menuitem action="FilterEdit"/>
<placeholder name="Merge">
<menuitem action="FastMerge"/>
</placeholder>
</menu>
</menubar>
<toolbar name="ToolBar">
@@ -182,6 +178,7 @@ class SourceView(ListView):
<toolitem action="Add"/>
<toolitem action="Edit"/>
<toolitem action="Remove"/>
<toolitem action="Merge"/>
</placeholder>
</toolbar>
<popup name="Popup">
@@ -191,6 +188,7 @@ class SourceView(ListView):
<menuitem action="Add"/>
<menuitem action="Edit"/>
<menuitem action="Remove"/>
<menuitem action="Merge"/>
<separator/>
<menu name="QuickReport" action="QuickReport">
<menuitem action="Dummy"/>
@@ -226,7 +224,10 @@ class SourceView(ListView):
except Errors.WindowActiveError:
pass
def fast_merge(self, obj):
def merge(self, obj):
"""
Merge the selected sources.
"""
mlist = self.selected_handles()
if len(mlist) != 2: