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]