dabo Commit
Revision 3206
Date: 2007-06-22 16:18:04 -0700 (Fri, 22 Jun 2007)
Author: Dj
Trac: http://svn.dabodev.com/trac/dabo/changeset/3206

Changed:
U   dj/dabo/ui/uiwx/__init__.py
A   dj/dabo/ui/uiwx/dTabGroup.py
U   dj/dabo/ui/uiwx/uiApp.py

Log:
Applied Ticket #1065 (Tab Grouping)

Diff:
Modified: dj/dabo/ui/uiwx/__init__.py
===================================================================
--- dj/dabo/ui/uiwx/__init__.py 2007-06-22 23:10:41 UTC (rev 3205)
+++ dj/dabo/ui/uiwx/__init__.py 2007-06-22 23:18:04 UTC (rev 3206)
@@ -131,6 +131,7 @@
 from dSplitForm import dSplitForm
 from dSplitter import dSplitter
 from dStatusBar import dStatusBar
+from dTabGroup import dTabGroup
 from dTextBox import dTextBox
 from dTimer import dTimer
 from dToolBar import dToolBar

Added: dj/dabo/ui/uiwx/dTabGroup.py
===================================================================
--- dj/dabo/ui/uiwx/dTabGroup.py                                (rev 0)
+++ dj/dabo/ui/uiwx/dTabGroup.py        2007-06-22 23:18:04 UTC (rev 3206)
@@ -0,0 +1,131 @@
+# -*- coding: utf-8 -*-
+import sys, os, wx
+
+class dTabItem:
+    def __init__(self, nextobj=None, prevobj=None):
+        self._next = nextobj
+        self._prev = prevobj
+
+    def _getNext(self):
+        return self._next
+
+    def _setNext(self, obj):
+        self._next = obj
+
+    def _getPrev(self):
+        return self._prev
+
+    def _setPrev(self, obj):
+        self._prev = obj
+
+
+    Next = property(_getNext, _setNext)
+    Prev = property(_getPrev, _setPrev)
+
+class dTabGroup(dict):
+    def __init__(self):
+        self.__lastItem = None
+        self.__firstItem = None
+        self.__curItem = None
+
+    def addItem(self, item):
+        self[item] = dTabItem()
+        self.__curItem = item
+
+        if self.__firstItem is None:
+            self.__firstItem = item
+
+        self[item].Next = self.__firstItem
+        self[item].Prev = self.__firstItem
+
+        if self.__lastItem is not None:
+            self[item].Prev = self.__lastItem
+            self[self.__lastItem].Next = item
+
+        self.__lastItem = item
+
+        self[self.__firstItem].Prev = self.__lastItem
+
+    def addItems(self, items):
+        for item in items:
+            self.addItem(item)
+
+    def insertItem(self, item, before):
+        self[item] = dTabItem()
+
+        #Set This items Next and Prev
+        self[item].Next = before
+        self[item].Prev = self[before].Prev
+
+        #Fix the Prev item to point to this item next
+        self[self[before].Prev].Next = item
+
+        #Fix the next item to point to this item as Prev
+        self[before].Prev = item
+
+    def removeItem(self, item):
+        self._fixOrder(item)
+
+    def addGroup(self, group):
+        for key, value in group.iteritems():
+            self[key] = value
+
+        self[self.__lastItem].Next = group.getFirst()
+        self[group.getFirst()].Prev = self.__lastItem
+        self[group.getLast()].Next = self.__firstItem
+
+    def insertGroup(self, group, before):
+        for key, value in group.iteritems():
+            self[key] = value
+
+
+        self[self[before].Prev].Next = group.getFirst()
+        self[before].Prev = group.getLast()
+        self[group.getLast()].Next = before
+
+    def removeGroup(self, group):
+        for item in group.keys():
+            self._fixOrder(item)
+
+
+    def next(self):
+        try:
+            self[self.__curItem].Next.SetFocus()
+            self.__curItem = self[self.__curItem].Next
+        except wx.PyDeadObjectError:
+            self._fixOrder(self[self.__curItem].Next)
+            self.next()
+        except KeyError:
+            self.last()
+
+    def prev(self):
+        try:
+            self[self.__curItem].Prev.SetFocus()
+            self.__curItem = self[self.__curItem].Prev
+        except wx.PyDeadObjectError:
+            self._fixOrder(self[self.__curItem].Prev)
+            self.prev()
+        except KeyError:
+            self.first()
+
+    def first(self):
+        self.__firstItem.SetFocus()
+        self.__curItem = self.__firstItem
+
+    def last(self):
+        self.__lastItem.SetFocus()
+        self.__curItem = self.__lastItem
+
+    def setCurrent(self, item):
+        self.__curItem = item
+
+    def getFirst(self):
+        return self.__firstItem
+
+    def getLast(self):
+        return self.__lastItem
+
+    def _fixOrder(self, item):
+        self[self[item].Prev] = self[item].Next
+        self[self[item].Next] = self[item].Prev
+        del self[item]
\ No newline at end of file

Modified: dj/dabo/ui/uiwx/uiApp.py
===================================================================
--- dj/dabo/ui/uiwx/uiApp.py    2007-06-22 23:10:41 UTC (rev 3205)
+++ dj/dabo/ui/uiwx/uiApp.py    2007-06-22 23:18:04 UTC (rev 3206)
@@ -149,7 +149,11 @@
                self._mruMaxItems = 12
                wx.InitAllImageHandlers()
 
+               #Atribute used by CustomTabOrder Property
+               self._tabOrder = dabo.ui.dTabGroup()
+               self._useTabOrder = False
 
+
        def OnInit(self):
                app = self.dApp
                if app.showSplashScreen:
@@ -795,7 +799,14 @@
                if self.ActiveForm:
                        self.ActiveForm.refresh()
 
+       def onNav(self, evt):
+               self._tabOrder.setCurrent(self.ActiveForm.FindFocus())
+               if evt.GetDirection():
+                       self._tabOrder.next()
+               else:
+                       self._tabOrder.prev()
 
+
        def _getActiveForm(self):
                af = getattr(self, "_activeForm", None)
                if af is None:
@@ -806,6 +817,16 @@
                self._activeForm = frm
 
 
+       def _getTabOrder(self):
+               return self._tabOrder
+
+       def _setTabOrder(self, val):
+               if not isinstance(val, dabo.ui.dTabGroup):
+                       raise ValueError("CustomTabOrder must be an instance of 
dabo.ui.dTabGroup")
+
+               self._tabOrder = val
+
+
        def _getDrawSizerOutlines(self):
                return self._drawSizerOutlines
 
@@ -813,9 +834,25 @@
                self._drawSizerOutlines = val
 
 
+       def _getUseTabOrder(self):
+               return self._useTabOrder
+
+       def _setUseTabOrder(self, val):
+               if val:
+                       self.Bind(wx.EVT_NAVIGATION_KEY, self.onNav)
+               else:
+                       self.Unbind(wx.EVT_NAVIGATION_KEY)
+
+
        ActiveForm = property(_getActiveForm, _setActiveForm, None,
                        _("Returns the form that currently has focus, or None.  
(dForm)" ) )
 
+       TabOrder = property(_getTabOrder, _setTabOrder, None,
+                       _("Returns the Custom Tab Order (dTabGroup)") )
+
        DrawSizerOutlines = property(_getDrawSizerOutlines, 
_setDrawSizerOutlines, None,
                        _("Determines if sizer outlines are drawn on the 
ActiveForm.  (bool)") )
 
+       UseTabOrder = property(_getUseTabOrder, _setUseTabOrder, None,
+                       _("Determins if we should use a custom Tab Order or 
not.  (bool)") )
+




_______________________________________________
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/dabo-dev/[EMAIL PROTECTED]

Reply via email to