| 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] |
|---|