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]

Reply via email to