2059: need a way to compare and merge all objects, by MD Nauta
svn: r15645
This commit is contained in:
@@ -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])
|
||||
|
@@ -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:
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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])
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
Reference in New Issue
Block a user