I setup the PM like this:
# persistance setup
self._persistMgr = PM.PersistenceManager.Get()
log.debug("persist base setup: %s" % self)
log.debug("persist base setup1: %s" % len(self._persistMgr._persistentObjects))
_configFile = os.path.join(wx.GetApp().persistanceLoc,
self.view.GetName())
self._persistMgr.SetPersistenceFile(_configFile)
log.debug("persist base setup2: %s" % len(self._persistMgr._persistentObjects))
For my test case I get this as output:
2012-04-13 19:13:33,947 - twcbsrc.base - DEBUG - base.py - 994 - persist base setup: <twcbsrc.controllers.dtastingevt.Tastingevt; proxy of <Swig Object of type 'wxEvtHandler *' at 0x9a519e8> >
2012-04-13 19:13:33,947 - twcbsrc.base - DEBUG - base.py - 995 - persist base setup1: 48
2012-04-13 19:13:33,948 - twcbsrc.base - DEBUG - base.py - 999 - persist base setup2: 48
The "persist base setup2" output should in my view have a length of zero as I have not yet called:
self._persistMgr.RegisterAndRestoreAll(self.view)
Depending on the sequence I call up dialogs I run into the following exception if the dialog being called contains a control name which is also used on the parent calling the dialog.
Exception: Object (class=<class 'twcbsrc.libui.textctrl.TextCtrlML'>, name=eNotes) is already registered
....
File "c:\dev\twcbv4\twcbsrc\controllers\base.py", line 926, in persistRegisterControls
self._persistMgr.RegisterAndRestoreAll(self.view)
File "c:\Python27\Lib\site-packages\wx-2.9.3-msw\wx\lib\agw\persist\persistencemanager.py", line 638, in RegisterAndRestoreAll
self.RegisterAndRestoreAll(window, child.GetChildren())
File "c:\Python27\Lib\site-packages\wx-2.9.3-msw\wx\lib\agw\persist\persistencemanager.py", line 638, in RegisterAndRestoreAll
self.RegisterAndRestoreAll(window, child.GetChildren())
File "c:\Python27\Lib\site-packages\wx-2.9.3-msw\wx\lib\agw\persist\persistencemanager.py", line 636, in RegisterAndRestoreAll
self.RegisterAndRestore(child)
File "c:\Python27\Lib\site-packages\wx-2.9.3-msw\wx\lib\agw\persist\persistencemanager.py", line 612, in RegisterAndRestore
return self.Register(window) and self.Restore(window)
File "c:\Python27\Lib\site-packages\wx-2.9.3-msw\wx\lib\agw\persist\persistencemanager.py", line 461, in Register
raise Exception("Object (class=%s, name=%s) is already registered"%(window.__class__, window.GetName()))
Adding the following line to PersistanceManager.SetPersistanceFile fixes the issue.
self._persistentObjects = {}
Werner