My main form is composed of navigation on the left and a
dPageFrameNoTabs on the right.
Every time I want to display a new page I click on a button in the navigator.
This not only changes de current Page, also lazy loads it (if
unloaded) and changes the primary bizobj if need (loads bizobjs if not
loaded and assigns then to the fom).
Everything was working very well until I tried to trap for changes in
the ui before changing page.
I needed to do this because if I changed a couple of textboxes and
then navigated to a new page, Dabo would not be aware of the changes.
1. So a question (and the fast way to solving my problem) is:
How can I force Dabo to recognize there are changes?
If I'm able to do this, then I can check for them and avoid all the
subsequent problems.
2. Here's what I've tried and the woes I got!
After failed attempts at using confirmChanges() and isAnyChanged(), I
tried form.requery() but this gives raise to a strange exception when
I pressed "Yes" on the save changes dialog. If I press "No" everything
works well, and if I press "Cancel" the navigation happens without
problems and when I get back to the Page I get the dialog again!
Traceback (most recent call last):
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dControlMixin.py",
line 27, in _onWxHit
self.raiseEvent(dEvents.Hit, evt, *args, **kwargs)
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dPemMixin.py",
line 949, in raiseEvent
super(dPemMixin, self).raiseEvent(eventClass, nativeEvent, *args, **kwargs)
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/lib/eventMixin.py",
line 93, in raiseEvent
bindingFunction(event)
File
"/Users/miguel/Documents/programming/daboprgs/HandCoding_02/ui/MainForm.py",
line 92, in onAppModuleNav
self.requery(self.PrimaryBizobj)
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dForm.py",
line 473, in requery
if not self.confirmChanges(bizobjs=bizobj):
File
"/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/dabo/ui/uiwx/dForm.py",
line 165, in confirmChanges
self.save(dataSource=biz.DataSource)
TypeError: save() got an unexpected keyword argument 'dataSource'
My code is:
def onAppModuleNav(self, evt):
"""Navigate to application module.
Loads the module if not loaded yet!
NOTE: Toolbar updates automagically in each page.
"""
self.requery()
# if self.PrimaryBizobj.isAnyChanged(useCurrentParent=None): #
Doesn't work
# self.confirmChanges()
caption = evt.EventObject.Caption
self.navToModule(caption)
self.requery()
def navToModule(self, caption):
"""Takes a module page name as argument.
Get the corresponding class and, if not instanciated,
instanciate it and load it.
"""
for label,klass in APP_MODULES:
if label == caption:
page = klass
break
mainPanel = self.splitter.Panel2
# Check if module main page is already instanciated
for pg in mainPanel.Pages:
if isinstance(pg, page):
page = pg
break
# if we are already on the right page exit
if mainPanel.SelectedPage == page:
return
else:
try:
# if there is a selected page
self.removeModuleToolBar(mainPanel.SelectedPage)
except AttributeError:
pass
# SET PRIMARY BIZOBJ
self.changePrimaryBizobj(page)
try:
# if already loaded & page is instance
mainPanel.showPage(page)
self.showModuleToolBar(mainPanel.SelectedPage)
except AttributeError:
# page is not loaded & is class
PageClass = page
mainPanel.appendPage(PageClass, makeActive=True)
self.loadModuleToolbar(mainPanel.SelectedPage)
def changePrimaryBizobj(self, modulePageReference):
"""Uses the modulePageReference to access its class attributes
bizobjData.
bizobjData is a dict containing: datasource, bizobj, childBizobjs.
Tries to get the bizobj by datasource & if needed creates one,
its children, and
assigns it as the primaryBozobj of the MainForm.
Notes:
"""
newPrimaryBizobj =
self.getBizobj(modulePageReference.bizobjData['datasource'])
if newPrimaryBizobj == None:
# bizobj does not exists - instanciate it
newPrimaryBizobj =
modulePageReference.bizobjData['bizobj'](self.Connection)
self.addBizobj(newPrimaryBizobj)
for klass in modulePageReference.bizobjData['childBizobjs']:
childBiz = klass(self.Connection)
newPrimaryBizobj.addChild(childBiz)
self.PrimaryBizobj = newPrimaryBizobj
Txs for all the help,
Miguel
_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-users
Searchable Archives: http://leafe.com/archives/search/dabo-users
This message:
http://leafe.com/archives/byMID/[email protected]