From 2ad78d83abec708a1677c2c643a5a2e08a8ba0e5 Mon Sep 17 00:00:00 2001 From: wernerfb Date: Sun, 1 Mar 2015 18:07:04 +0100 Subject: [PATCH] Allow that an individual controls saves/restores its value (got into SVN at some point) --- ...test_lib_agw_persist_persistencemanager.py | 24 +++++++++++++++++++ wx/lib/agw/persist/persist_handlers.py | 2 ++ wx/lib/agw/persist/persistencemanager.py | 22 ++++++++++++++--- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/unittests/test_lib_agw_persist_persistencemanager.py b/unittests/test_lib_agw_persist_persistencemanager.py index f3083812..46915bde 100644 --- a/unittests/test_lib_agw_persist_persistencemanager.py +++ b/unittests/test_lib_agw_persist_persistencemanager.py @@ -13,6 +13,7 @@ class lib_agw_persist_persistencemanager_Tests(wtc.WidgetTestCase): def test_lib_agw_persist_persistencemanagerCtor(self): self._persistMgr = PM.PersistenceManager.Get() + self._persistMgr.SetManagerStyle(PM.PM_SAVE_RESTORE_AUI_PERSPECTIVES) dirName, fileName = os.path.split(os.path.abspath(__file__)) _configFile1 = os.path.join(dirName, "PersistTest1") @@ -20,6 +21,9 @@ class lib_agw_persist_persistencemanager_Tests(wtc.WidgetTestCase): # give the frame a Name for below self.frame.SetName('PersistTestFrame') + cb = wx.CheckBox(self.frame, name='PersistCheck') + cb.persistValue = True + cb.SetValue(False) self._persistMgr.RegisterAndRestoreAll(self.frame) @@ -41,6 +45,26 @@ class lib_agw_persist_persistencemanager_Tests(wtc.WidgetTestCase): self.assertEqual(self._persistMgr.HasRestored(), True, "Persistence should be there, as it was created in CTOR test.") + def test_lib_agw_persist_persistencemanagerPersistValue(self): + + self._persistMgr = PM.PersistenceManager.Get() + self._persistMgr.SetManagerStyle(PM.PM_SAVE_RESTORE_AUI_PERSPECTIVES) + + dirName, fileName = os.path.split(os.path.abspath(__file__)) + _configFile1 = os.path.join(dirName, "PersistTest1") + self._persistMgr.SetPersistenceFile(_configFile1) + + # give the frame a Name for below + self.frame.SetName('PersistTestFrame') + cb = wx.CheckBox(self.frame, name='PersistCheck') + cb.persistValue = True + + self._persistMgr.RegisterAndRestoreAll(self.frame) + + self.assertEqual(self._persistMgr.HasRestored(), True, "Persistence should be there, as it was created in CTOR test.") + self.assertEqual(cb.GetValue(), False, "Should be False as set in CTOR test") + + def test_lib_agw_persist_persistencemanagerConstantsExist(self): # PersistenceManager styles PM.PM_SAVE_RESTORE_AUI_PERSPECTIVES diff --git a/wx/lib/agw/persist/persist_handlers.py b/wx/lib/agw/persist/persist_handlers.py index e9b5bd89..ac2b8c9e 100644 --- a/wx/lib/agw/persist/persist_handlers.py +++ b/wx/lib/agw/persist/persist_handlers.py @@ -125,6 +125,8 @@ class AbstractHandler(object): object.__init__(self) self._pObject = pObject self._window = pObject.GetWindow() + if not hasattr(self._window, 'persistValue'): + self._window.persistValue = None # need to move the import to here, otherwise we error in Python 3 from . import persistencemanager as PM diff --git a/wx/lib/agw/persist/persistencemanager.py b/wx/lib/agw/persist/persistencemanager.py index 43f931fd..8a4a5b63 100644 --- a/wx/lib/agw/persist/persistencemanager.py +++ b/wx/lib/agw/persist/persistencemanager.py @@ -245,6 +245,10 @@ class PersistenceManager(object): ``PM_DEFAULT_STYLE`` Same as ``PM_SAVE_RESTORE_AUI_PERSPECTIVES`` ======================================== ================================== + :note: An individual window can also set the variable `persistValue` to + indicate that its value should be saved/restored even so the style + `PM_PERSIST_CONTROL_VALUE` is not set. + :note: UI settings are stored as dictionaries key <=> tuple: the tuple value contains two items. The first is the value *type* (i.e., float, int, bool etc...) while the second is the actual key value. @@ -734,7 +738,10 @@ class PersistenceManager(object): def SaveCtrlValue(self, obj, keyName, value): """ - Check if we persist the widget value, if so pass it to :meth:`~PersistenceManager.DoSaveValue`. + Check if we persist the widget value, if so pass it to :meth:`~PersistenceManager.DoSaveValue`, + this method checks the style `PM_PERSIST_CONTROL_VALUE` and if it is not + set it will also check the variable `persistValue` of the individual + window. :param `obj`: an instance of :class:`PersistentObject`; :param `keyName`: a string specifying the key name; @@ -743,6 +750,9 @@ class PersistenceManager(object): if self._style & PM_PERSIST_CONTROL_VALUE: return self.DoSaveValue(obj, keyName, value) + elif obj._window.persistValue: + # an individual control wants to be saved + return self.DoSaveValue(obj, keyName, value) def SaveValue(self, obj, keyName, value): @@ -784,14 +794,20 @@ class PersistenceManager(object): def RestoreCtrlValue(self, obj, keyName): """ - Check if we persist the widget value, if so pass it to :meth:`~PersistenceManager.DoRestoreValue`. - + Check if we should restore the widget value, if so pass it to :meth:`~PersistenceManager.DoRestoreValue`, + this method checks the style `PM_PERSIST_CONTROL_VALUE` and if if it is + not set it will also check the variable `persistValue` of the individual + window. + :param `obj`: an instance of :class:`PersistentObject`; :param `keyName`: a string specifying the key name. """ if self._style & PM_PERSIST_CONTROL_VALUE: return self.DoRestoreValue(obj, keyName) + elif obj._window.persistValue: + # an individual control wants to be saved + return self.DoRestoreValue(obj, keyName) def RestoreValue(self, obj, keyName):