Ticket #1065: dTabGroup.py

File dTabGroup.py, 2.8 kB (added by dj, 1 year ago)

The uiwx/dTabGroup.py file, which stores info about the Tab order for an application

Line 
1 # -*- coding: utf-8 -*-
2 import sys, os, wx
3
4 class dTabItem:
5     def __init__(self, nextobj=None, prevobj=None):
6         self._next = nextobj
7         self._prev = prevobj
8
9     def _getNext(self):
10         return self._next
11
12     def _setNext(self, obj):
13         self._next = obj
14
15     def _getPrev(self):
16         return self._prev
17
18     def _setPrev(self, obj):
19         self._prev = obj
20
21
22     Next = property(_getNext, _setNext)
23     Prev = property(_getPrev, _setPrev)
24
25 class dTabGroup(dict):
26     def __init__(self):
27         self.__lastItem = None
28         self.__firstItem = None
29         self.__curItem = None
30
31     def addItem(self, item):
32         self[item] = dTabItem()
33         self.__curItem = item
34
35         if self.__firstItem is None:
36             self.__firstItem = item
37
38         self[item].Next = self.__firstItem
39         self[item].Prev = self.__firstItem
40
41         if self.__lastItem is not None:
42             self[item].Prev = self.__lastItem
43             self[self.__lastItem].Next = item
44
45         self.__lastItem = item
46
47         self[self.__firstItem].Prev = self.__lastItem
48
49     def addItems(self, items):
50         for item in items:
51             self.addItem(item)
52
53     def insertItem(self, item, before):
54         self[item] = dTabItem()
55
56         #Set This items Next and Prev
57         self[item].Next = before
58         self[item].Prev = self[before].Prev
59
60         #Fix the Prev item to point to this item next
61         self[self[before].Prev].Next = item
62
63         #Fix the next item to point to this item as Prev
64         self[before].Prev = item
65
66     def removeItem(self, item):
67         self._fixOrder(item)
68
69     def addGroup(self, group):
70         for key, value in group.iteritems():
71             self[key] = value
72
73         self[self.__lastItem].Next = group.getFirst()
74         self[group.getFirst()].Prev = self.__lastItem
75         self[group.getLast()].Next = self.__firstItem
76
77     def insertGroup(self, group, before):
78         for key, value in group.iteritems():
79             self[key] = value
80
81
82         self[self[before].Prev].Next = group.getFirst()
83         self[before].Prev = group.getLast()
84         self[group.getLast()].Next = before
85
86     def removeGroup(self, group):
87         for item in group.keys():
88             self._fixOrder(item)
89
90
91     def next(self):
92         try:
93             self[self.__curItem].Next.SetFocus()
94             self.__curItem = self[self.__curItem].Next
95         except wx.PyDeadObjectError:
96             self._fixOrder(self[self.__curItem].Next)
97             self.next()
98         except KeyError:
99             self.last()
100
101     def prev(self):
102         try:
103             self[self.__curItem].Prev.SetFocus()
104             self.__curItem = self[self.__curItem].Prev
105         except wx.PyDeadObjectError:
106             self._fixOrder(self[self.__curItem].Prev)
107             self.prev()
108         except KeyError:
109             self.first()
110
111     def first(self):
112         self.__firstItem.SetFocus()
113         self.__curItem = self.__firstItem
114
115     def last(self):
116         self.__lastItem.SetFocus()
117         self.__curItem = self.__lastItem
118
119     def setCurrent(self, item):
120         self.__curItem = item
121
122     def getFirst(self):
123         return self.__firstItem
124
125     def getLast(self):
126         return self.__lastItem
127
128     def _fixOrder(self, item):
129         self[self[item].Prev] = self[item].Next
130         self[self[item].Next] = self[item].Prev
131         del self[item]