Nate Lowrie wrote: > dabo Commit > Revision 4404 > Date: 2008-08-13 12:44:54 -0700 (Wed, 13 Aug 2008) > Author: Nate > Trac: http://svn.dabodev.com/trac/dabo/changeset/4404 > > Changed: > U branches/Nate/dabo/dEvents.py > U branches/Nate/dabo/ui/uiwx/dPageFrame.py > > Log: > Initial rewriting of dPageFrame to using the FlatNotebook control in wx.lib. > The only downside is that the control doesn't support the left or right tab > position. However, the functionality it brings out more than warrants it's > inclusion. So far, I have wrapped the wx events for page closing, page > closed, and page context menu. Added dEvents to correspond to the wx events. > All works so feel free to play around with it, though I am going to add more > functionality. > > Ed and Paul, is the TabPosition property not support right and left is going > to be a problem for inclusion into trunk as dPageFrame? If so, did you just > want to rename this class? > > Diff: > Modified: branches/Nate/dabo/dEvents.py > =================================================================== > --- branches/Nate/dabo/dEvents.py 2008-08-13 16:43:21 UTC (rev 4403) > +++ branches/Nate/dabo/dEvents.py 2008-08-13 19:44:54 UTC (rev 4404) > @@ -467,6 +467,27 @@ > appliesToClass = classmethod(appliesToClass) > > > +class PageClosed(dEvent): > + """Occurs when a page in a dPageFrame control is closed""" > + def appliesToClass(eventClass, objectClass): > + return issubclass(objectClass, dabo.ui.dPageFrame) > + appliesToClass = classmethod(appliesToClass) > + > + > +class PageClosing(dEvent): > + """Occurs when a page in a dPageFrame control is about to close""" > + def appliesToClass(eventClass, objectClass): > + return issubclass(objectClass, dabo.ui.dPageFrame) > + appliesToClass = classmethod(appliesToClass) > + > + > +class PageContextMenu(dEvent): > + """Occurs when the user requests a context event for a dPage""" > + def appliesToClass(eventClass, objectClass): > + return issubclass(objectClass, dabo.ui.dPage) > + appliesToClass = classmethod(appliesToClass) > + > + > class PageEnter(dEvent): > """Occurs when the page becomes the active page.""" > def appliesToClass(eventClass, objectClass): > > Modified: branches/Nate/dabo/ui/uiwx/dPageFrame.py > =================================================================== > --- branches/Nate/dabo/ui/uiwx/dPageFrame.py 2008-08-13 16:43:21 UTC (rev > 4403) > +++ branches/Nate/dabo/ui/uiwx/dPageFrame.py 2008-08-13 19:44:54 UTC (rev > 4404) > @@ -1,6 +1,7 @@ > # -*- coding: utf-8 -*- > import sys > import wx > +import wx.lib.flatnotebook as fnb > import dabo > import dabo.ui > > @@ -21,31 +22,80 @@ > return property(lambda self: value) > > > -class dPageFrame(dPageFrameMixin, wx.Notebook): > +class dPageFrame(dPageFrameMixin, fnb.FlatNotebook): > """Creates a pageframe, which can contain an unlimited number of pages, > each of which should be a subclass/instance of the dPage class. > """ > - _evtPageChanged = readonly(wx.EVT_NOTEBOOK_PAGE_CHANGED) > - _evtPageChanging = readonly(wx.EVT_NOTEBOOK_PAGE_CHANGING) > - _tabposBottom = readonly(wx.NB_BOTTOM) > - _tabposRight = readonly(wx.NB_RIGHT) > - _tabposLeft = readonly(wx.NB_LEFT) > + _evtPageChanged = readonly(fnb.EVT_FLATNOTEBOOK_PAGE_CHANGED) > + _evtPageChanging = readonly(fnb.EVT_FLATNOTEBOOK_PAGE_CHANGING) > + _tabposBottom = readonly(fnb.FNB_BOTTOM) > > def __init__(self, parent, properties=None, attProperties=None, *args, > **kwargs): > self._baseClass = dPageFrame > - preClass = wx.PreNotebook > + preClass = fnb.FlatNotebook > > dPageFrameMixin.__init__(self, preClass, parent, properties, > attProperties, *args, **kwargs) > - > - > + > + def _initEvents(self): > + super(dPageFrame, self)._initEvents() > + self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSING, > self.__onPageClosing) > + self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSED, self.__onPageClosed) > + self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CONTEXT_MENU, > self.__onPageContextMenu) > + > def _afterInit(self): > if sys.platform[:3] == "win": > ## This keeps Pages from being ugly on Windows: > self.SetBackgroundColour(self.GetBackgroundColour()) > super(dPageFrame, self)._afterInit() > + > + def __onPageClosing(self, evt): > + """The page has not yet been closed, so we can veto it if > conditions call for it.""" > + pageNum = evt.GetSelection() > + if self._beforePageClose(pageNum) is False: > + evt.Veto() > + else: > + evt.Skip() > + self.raiseEvent(dEvents.PageClosing, pageNum=pageNum) > + > + def _beforePageClose(self, page): > + return self.beforePageClose(page) > + > + > + def beforePageClose(self, page): > + """Return False from this method to prevent the page from > closing.""" > + pass > + > + def __onPageClosed(self, evt): > + self.raiseEvent(dEvents.PageClosed) > + > + def __onPageContextMenu(self, evt): > + > self.GetPage(self.GetSelection()).raiseEvent(dEvents.PageContextMenu) > + > + #Property getters and setters > + def _getTabPosition(self): > + if self._hasWindowStyleFlag(self._tabposBottom): > + return "Bottom" > + else: > + return "Top" > + > + def _setTabPosition(self, val): > + val = str(val) > + self._delWindowStyleFlag(self._tabposBottom) > + > + if val == "Top": > + pass > + elif val == "Bottom": > + self._addWindowStyleFlag(self._tabposBottom) > + else: > + raise ValueError, (_("The only possible values are > 'Top' and 'Bottom'")) > + > + #Property definitions > + TabPosition = property(_getTabPosition, _setTabPosition, None, > + _("""Specifies where the page tabs are located. > (string) > + Top (default) > + Bottom""") ) > > > - > class dPageList(dPageFrameMixin, wx.Listbook): > _evtPageChanged = readonly(wx.EVT_LISTBOOK_PAGE_CHANGED) > _evtPageChanging = readonly(wx.EVT_LISTBOOK_PAGE_CHANGING) > @@ -219,7 +269,12 @@ > def onPageChanged(self, evt): > print "Page number changed from %s to %s" % (evt.oldPageNum, > evt.newPageNum) > > -class _dPageFrame_test(TestMixin, dPageFrame): pass > +class _dPageFrame_test(TestMixin, dPageFrame): > + def initProperties(self): > + self.Width = 400 > + self.Height = 175 > + self.TabPosition = random.choice(("Top", "Bottom")) > + > class _dPageList_test(TestMixin, dPageList): pass > class _dPageSelect_test(TestMixin, dPageSelect): pass > class _dDockTabs_test(TestMixin, dDockTabs): pass > > Nate Does this mean you are doing away with left and right tabbed pages? If so, I am against the change!
I use Left Tabbed pages for just about all my paged forms. Paul McNary [EMAIL PROTECTED] _______________________________________________ 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]
