dabo Commit
Revision 6030
Date: 2010-09-22 18:52:32 -0700 (Wed, 22 Sep 2010)
Author: Ed
Trac: http://trac.dabodev.com/changeset/6030
Changed:
U trunk/dabo/ui/uiwx/dPageFrameNoTabs.py
Log:
Revamped some of the code that was either sloppy or inefficient. In the process
I found a couple of edge case bugs that I fixed.
Added the 'cyclePages()' method to be consistent with other paged controls.
Diff:
Modified: trunk/dabo/ui/uiwx/dPageFrameNoTabs.py
===================================================================
--- trunk/dabo/ui/uiwx/dPageFrameNoTabs.py 2010-09-23 00:36:54 UTC (rev
6029)
+++ trunk/dabo/ui/uiwx/dPageFrameNoTabs.py 2010-09-23 01:52:32 UTC (rev
6030)
@@ -100,7 +100,7 @@
newPage = (pg is not ap)
if pg in self.Pages:
if newPage:
- if ap is not None:
+ if ap:
dabo.ui.callAfter(ap.raiseEvent,
dEvents.PageLeave)
apNum = self.getPageNumber(ap)
else:
@@ -108,7 +108,7 @@
dabo.ui.callAfter(pg.raiseEvent,
dEvents.PageEnter)
dabo.ui.callAfter(self.raiseEvent,
dEvents.PageChanged,
oldPageNum=apNum,
newPageNum=self.getPageNumber(pg))
- self._activePage = pg
+ self._activePage = pg
for ch in self.Pages:
self.Sizer.Show(ch, (ch is pg))
self.layout()
@@ -120,22 +120,24 @@
"""Selects the next page. If the last page is selected,
it will select the first page.
"""
- try:
- self.SelectedPageNumber += 1
- except IndexError:
- self.SelectedPageNumber = 0
+ self.cyclePages(1)
def priorPage(self):
"""Selects the previous page. If the first page is selected,
it will select the last page.
"""
- try:
- self.SelectedPageNumber -= 1
- except IndexError:
- self.SelectedPage = self.Pages[-1]
+ self.cyclePages(-1)
+ def cyclePages(self, num):
+ """Moves through the pages by the specified amount, wrapping
+ around the ends. Negative values move to previous pages;
positive
+ move through the next pages.
+ """
+ self.SelectedPageNumber = (self.SelectedPageNumber + num) %
self.PageCount
+
+
def getPageNumber(self, pg):
"""Given a page, returns its position."""
try:
@@ -167,10 +169,10 @@
#------------------------------------
- def _getPgCls(self):
+ def _getPageClass(self):
return self._pageClass
- def _setPgCls(self, val):
+ def _setPageClass(self, val):
if isinstance(val, basestring):
from dabo.lib.DesignerClassConverter import
DesignerClassConverter
conv = DesignerClassConverter()
@@ -179,10 +181,10 @@
self._pageClass = val
- def _getPgCnt(self):
+ def _getPageCount(self):
return len(self._pages)
- def _setPgCnt(self, val):
+ def _setPageCount(self, val):
diff = (val - len(self._pages))
if diff > 0:
# Need to add pages
@@ -190,18 +192,16 @@
self.appendPage()
diff -= 1
elif diff < 0:
- # Need to remove pages. If the active page is one
- # of those being removed, set the active page to the
- # last page.
- currPg = self.SelectedPage
- while len(self._pages) > val:
- delPg = self._pages[-1]
- self._pages.remove(delPg)
- if delPg:
- # It may already have been released
- delPg.release()
- if len(self._pages) < currPg:
- self.SelectedPage = self._pages[-1]
+ currPg = self.SelectedPageNumber
+ pagesToKill = self._pages[val:]
+ self._pages = self._pages[:val]
+ # Need to add the check if the page exists since it
+ # may have already been released.
+ [pg.release() for pg in pagesToKill if pg]
+ # Make sure the page we were on isn't one of the
deleted pages.
+ # If so, switch to the last page.
+ newPg = min(currPg, val-1)
+ self.SelectedPage = newPg
def _getPages(self):
@@ -236,10 +236,10 @@
self.showPage(pg)
- PageClass = property(_getPgCls, _setPgCls, None,
+ PageClass = property(_getPageClass, _setPageClass, None,
_("The default class used when adding new pages.
(dPage)") )
- PageCount = property(_getPgCnt, _setPgCnt, None,
+ PageCount = property(_getPageCount, _setPageCount, None,
_("Returns the number of pages in this pageframe
(int)") )
Pages = property(_getPages, None, None,
@@ -285,7 +285,7 @@
self.Caption = "Tabless Pageframe Example"
self.pgf = pgf = dPageFrameNoTabs(self)
pgf.PageClass = TestPage
- pgf.PageCount = 5
+ pgf.PageCount = 12
idx = 0
for pg in pgf.Pages:
pg.setLabel("Page #%s" % idx)
@@ -299,16 +299,26 @@
bn.bindEvent(dEvents.Hit, self.onNextPage)
hsz = dabo.ui.dSizer("h")
hsz.append(bp, 1)
+ hsz.appendSpacer(4)
hsz.append(bn, 1)
- self.Sizer.append(hsz, halign="center")
+ hsz.appendSpacer(24)
+ lbl = dabo.ui.dLabel(self, Caption="Select Page:")
+ hsz.append(lbl)
+ dd = dabo.ui.dDropdownList(self, DataSource=pgf,
+ DataField="SelectedPageNumber",
ValueMode="Position",
+ Choices=["%s" % ii for ii in
xrange(pgf.PageCount)])
+ hsz.append(dd)
+ self.Sizer.append(hsz, halign="center", border=8)
self.layout()
def onPriorPage(self, evt):
self.pgf.priorPage()
+ self.update()
def onNextPage(self, evt):
self.pgf.nextPage()
+ self.update()
def main():
_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev
Searchable Archives: http://leafe.com/archives/search/dabo-dev
This message:
http://leafe.com/archives/byMID/[email protected]