* src/PluginUtils/_Tool.py (BatchTool): Add class taking care of

tools with batch transactions.
	(ActivePersonTool.pass): Remove method.
	* src/plugins/Check.py (Check): Derive from BatchTool.
	* src/plugins/ReorderIds.py (ReorderIds): Use batch transactions;
	derive from BatchTool.
	* src/plugins/ChangeTypes.py (ChangeTypes): Use batch
	transactions; derive from BatchTool. 
	* src/plugins/ChangeNames.py (ChangeNames): Derive from BatchTool.
	* src/plugins/PatchNames.py (PatchNames): Use batch transactions;
	derive from BatchTool.
	* src/glade/gramps.glade: Make both buttons' lables in
	questiondialog use underline property.
	(ViewManager.import_data): Add undo warning for imports.


svn: r6540
This commit is contained in:
Alex Roitman 2006-05-04 02:05:50 +00:00
parent 23b7ec08d6
commit 4ea2ca6a28
9 changed files with 90 additions and 24 deletions

View File

@ -2,6 +2,19 @@
* src/ViewManager.py: do a better job of building the buttons. * src/ViewManager.py: do a better job of building the buttons.
2006-05-03 Alex Roitman <shura@gramps-project.org> 2006-05-03 Alex Roitman <shura@gramps-project.org>
* src/PluginUtils/_Tool.py (BatchTool): Add class taking care of
tools with batch transactions.
(ActivePersonTool.pass): Remove method.
* src/plugins/Check.py (Check): Derive from BatchTool.
* src/plugins/ReorderIds.py (ReorderIds): Use batch transactions;
derive from BatchTool.
* src/plugins/ChangeTypes.py (ChangeTypes): Use batch
transactions; derive from BatchTool.
* src/plugins/ChangeNames.py (ChangeNames): Derive from BatchTool.
* src/plugins/PatchNames.py (PatchNames): Use batch transactions;
derive from BatchTool.
* src/glade/gramps.glade: Make both buttons' lables in
questiondialog use underline property.
* src/GrampsDb/_GrampsInMemDB.py (abort_changes): Remove method. * src/GrampsDb/_GrampsInMemDB.py (abort_changes): Remove method.
* src/GrampsDb/_GrampsDbBase.py (abort_changes): Remove method. * src/GrampsDb/_GrampsDbBase.py (abort_changes): Remove method.
(GrampsDbBase.transaction_begin): No aborting after batch transaction. (GrampsDbBase.transaction_begin): No aborting after batch transaction.
@ -10,6 +23,7 @@
(abort_changes): Remove method. (abort_changes): Remove method.
(GrampsBSDDB.transaction_begin): No aborting after batch transaction. (GrampsBSDDB.transaction_begin): No aborting after batch transaction.
* src/ViewManager.py (abort): Add method for abandoning changes. * src/ViewManager.py (abort): Add method for abandoning changes.
(ViewManager.import_data): Add undo warning for imports.
* configure.in: Set release to 0.SVN. * configure.in: Set release to 0.SVN.
* src/DataViews/_PersonView.py (define_actions): Change label. * src/DataViews/_PersonView.py (define_actions): Change label.

View File

@ -75,7 +75,7 @@ tool_categories = {
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Report # Tool
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class Tool: class Tool:
@ -97,11 +97,39 @@ class Tool:
pass pass
class BatchTool(Tool):
"""
Same as Tool, except the warning is displayed about the potential
loss of undo history. Should be used for tools using batch transactions.
"""
def __init__(self, dbstate, options_class, name):
from QuestionDialog import QuestionDialog2
warn_dialog = QuestionDialog2(
_('Undo history warning'),
_('Proceeding with this tool will erase the undo history '
'for this session. In particular, you will not be able '
'to revert the changes made by this tool or any changes '
'made prior to it.\n\n'
'If you think you may want to revert running this tool, '
'please stop here and backup your database.'),
_('_Proceed with the tool'), _('_Stop'))
if not warn_dialog.run():
self.fail = True
return
Tool.__init__(self, dbstate, options_class, name)
self.fail = False
def run_tool(self): pass
class ActivePersonTool(Tool): class ActivePersonTool(Tool):
""" """
The Tool base class. This is a base class for generating Same as Tool , except the existence of the active person is checked
customized tools. It cannot be used as is, but it can be easily and the tool is aborted if no active person exists. Should be used
sub-classed to create a functional tool. for tools that depend on active person.
""" """
def __init__(self, dbstate, options_class, name): def __init__(self, dbstate, options_class, name):
@ -118,7 +146,6 @@ class ActivePersonTool(Tool):
Tool.__init__(self, dbstate, options_class, name) Tool.__init__(self, dbstate, options_class, name)
self.fail = False self.fail = False
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
# Command-line tool # Command-line tool

View File

@ -1009,13 +1009,27 @@ class ViewManager:
Exporter.Exporter(self.state, self.uistate) Exporter.Exporter(self.state, self.uistate)
def import_data(self, obj): def import_data(self, obj):
# First thing first: import is a batch transaction
# so we will lose the undo history. Warn the user.
warn_dialog = QuestionDialog.QuestionDialog2(
_('Undo history warning'),
_('Proceeding with import will erase the undo history '
'for this session. In particular, you will not be able '
'to revert the import or any changes made prior to it.\n\n'
'If you think you may want to revert the import, '
'please stop here and backup your database.'),
_('_Proceed with import'), _('_Stop'),
self.window)
if not warn_dialog.run():
return False
choose = gtk.FileChooserDialog(_('GRAMPS: Import database'), choose = gtk.FileChooserDialog(_('GRAMPS: Import database'),
self.uistate.window, self.uistate.window,
gtk.FILE_CHOOSER_ACTION_OPEN, gtk.FILE_CHOOSER_ACTION_OPEN,
(gtk.STOCK_CANCEL, (gtk.STOCK_CANCEL,
gtk.RESPONSE_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OPEN, gtk.STOCK_OPEN,
gtk.RESPONSE_OK)) gtk.RESPONSE_OK))
choose.set_local_only(False) choose.set_local_only(False)
# Always add automatic (macth all files) filter # Always add automatic (macth all files) filter
add_all_files_filter(choose) add_all_files_filter(choose)

View File

@ -7695,6 +7695,7 @@ Text Beside Icons</property>
<property name="can_default">True</property> <property name="can_default">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="label">gtk-cancel</property> <property name="label">gtk-cancel</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property> <property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property> <property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property> <property name="focus_on_click">True</property>

View File

@ -57,12 +57,14 @@ from PluginUtils import Tool, register_tool
# ChangeNames # ChangeNames
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class ChangeNames(Tool.Tool, ManagedWindow.ManagedWindow): class ChangeNames(Tool.BatchTool, ManagedWindow.ManagedWindow):
def __init__(self, dbstate, uistate, options_class, name, callback=None): def __init__(self, dbstate, uistate, options_class, name, callback=None):
self.label = _('Capitalization changes') self.label = _('Capitalization changes')
Tool.Tool.__init__(self, dbstate, options_class, name) Tool.BatchTool.__init__(self, dbstate, options_class, name)
if self.fail:
return
ManagedWindow.ManagedWindow.__init__(self, uistate, [], self.__class__) ManagedWindow.ManagedWindow.__init__(self, uistate, [], self.__class__)
self.cb = callback self.cb = callback

View File

@ -56,11 +56,13 @@ from PluginUtils import Tool, register_tool
# #
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class ChangeTypes(Tool.Tool, ManagedWindow.ManagedWindow): class ChangeTypes(Tool.BatchTool, ManagedWindow.ManagedWindow):
def __init__(self, dbstate, uistate, options_class, name, callback=None): def __init__(self, dbstate, uistate, options_class, name, callback=None):
Tool.Tool.__init__(self, dbstate, options_class, name) Tool.BatchTool.__init__(self, dbstate, options_class, name)
if self.fail:
return
if uistate: if uistate:
self.title = _('Change Event Types') self.title = _('Change Event Types')
@ -110,7 +112,7 @@ class ChangeTypes(Tool.Tool, ManagedWindow.ManagedWindow):
modified = 0 modified = 0
self.trans = self.db.transaction_begin() self.trans = self.db.transaction_begin("",batch=True)
if not cli: if not cli:
progress = Utils.ProgressMeter(_('Analyzing events'),'') progress = Utils.ProgressMeter(_('Analyzing events'),'')
progress.set_pass('',self.db.get_number_of_people()) progress.set_pass('',self.db.get_number_of_people())

View File

@ -138,10 +138,12 @@ def _table_low_level(db,table):
# runTool # runTool
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class Check(Tool.Tool): class Check(Tool.BatchTool):
def __init__(self, dbstate, uistate, options_class, name, callback=None): def __init__(self, dbstate, uistate, options_class, name, callback=None):
Tool.Tool.__init__(self, dbstate, options_class, name) Tool.BatchTool.__init__(self, dbstate, options_class, name)
if self.fail:
return
cli = uistate == None cli = uistate == None

View File

@ -85,16 +85,18 @@ _sn_prefix_re = re.compile("^\s*(%s)\s+(.*)" % '|'.join(prefix_list),
# PatchNames # PatchNames
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class PatchNames(Tool.Tool, ManagedWindow.ManagedWindow): class PatchNames(Tool.BatchTool, ManagedWindow.ManagedWindow):
def __init__(self, dbstate, uistate, options_class, name, callback=None): def __init__(self, dbstate, uistate, options_class, name, callback=None):
self.label = _('Name and title extraction tool') self.label = _('Name and title extraction tool')
Tool.Tool.__init__(self, dbstate, options_class, name) Tool.BatchTool.__init__(self, dbstate, options_class, name)
if self.fail:
return
ManagedWindow.ManagedWindow.__init__(self,uistate,[],self.__class__) ManagedWindow.ManagedWindow.__init__(self,uistate,[],self.__class__)
self.cb = callback self.cb = callback
self.trans = self.db.transaction_begin() self.trans = self.db.transaction_begin("",batch=True)
self.title_list = [] self.title_list = []
self.nick_list = [] self.nick_list = []
self.prefix1_list = [] self.prefix1_list = []

View File

@ -50,9 +50,11 @@ _findint = re.compile('^[^\d]*(\d+)[^\d]*')
# Actual tool # Actual tool
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
class ReorderIds(Tool.Tool): class ReorderIds(Tool.BatchTool):
def __init__(self,dbstate,uistate,options_class,name,callback=None): def __init__(self,dbstate,uistate,options_class,name,callback=None):
Tool.Tool.__init__(self,dbstate,options_class,name) Tool.BatchTool.__init__(self,dbstate,options_class,name)
if self.fail:
return
db = dbstate.db db = dbstate.db
self.uistate = uistate self.uistate = uistate
@ -61,7 +63,7 @@ class ReorderIds(Tool.Tool):
else: else:
print "Reordering GRAMPS IDs..." print "Reordering GRAMPS IDs..."
self.trans = db.transaction_begin() self.trans = db.transaction_begin("",batch=True)
if uistate: if uistate:
self.progress.set_pass(_('Reordering People IDs'), self.progress.set_pass(_('Reordering People IDs'),