Cat
tree.py
Go to the documentation of this file.
1 
2 import string
3 import wx
4 import images
5 
6 #---------------------------------------------------------------------------
7 
8 class MyTreeCtrl(wx.TreeCtrl):
9  def __init__(self, parent, id, pos, size, style):
10  # def __init__(self, parent, id, pos, size, style, log):
11  wx.TreeCtrl.__init__(self, parent, id, pos, size, style)
12 # self.log = log
13 
14  def OnCompareItems(self, item1, item2):
15  t1 = self.GetItemText(item1)
16  t2 = self.GetItemText(item2)
17 # self.log.WriteText('compare: ' + t1 + ' <> ' + t2 + '\n')
18  if t1 < t2: return -1
19  if t1 == t2: return 0
20  return 1
21 
22 #---------------------------------------------------------------------------
23 
24 class TreeCtrlPanel(wx.Panel):
25  def __init__(self, parent):
26  # Use the WANTS_CHARS style so the panel doesn't eat the Return key.
27  wx.Panel.__init__(self, parent, -1, style=wx.WANTS_CHARS)
28  self.Bind(wx.EVT_SIZE, self.OnSize)
29  tID = wx.NewId()
30  self.tree = MyTreeCtrl(self, tID, wx.DefaultPosition, wx.DefaultSize,
31  wx.TR_DEFAULT_STYLE
32  #wx.TR_HAS_BUTTONS
33  #| wx.TR_EDIT_LABELS
34  #| wx.TR_MULTIPLE
35  #| wx.TR_HIDE_ROOT
36 # , self.log
37  )
38  isz = (16,16)
39  il = wx.ImageList(isz[0], isz[1])
40  self.fldridx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, isz))
41  self.fldropenidx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, isz))
42  self.fileidx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, isz))
43 # smileidx = il.Add(images.getSmilesBitmap())
44 
45  self.tree.SetImageList(il)
46  self.il = il
47 
48  # NOTE: For some reason tree items have to have a data object in
49  # order to be sorted. Since our compare just uses the labels
50  # we don't need any real data, so we'll just use None below for
51  # the item data.
52 
53 
57 
58 
63 
64 
69 
70 
74 
75 # self.tree.SetItemImage(item, smileidx, wx.TreeItemIcon_Selected)
76 
77  self.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded, self.tree)
78  self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed, self.tree)
79  self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, self.tree)
80  self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnBeginEdit, self.tree)
81  self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnEndEdit, self.tree)
82  self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivate, self.tree)
83 
84  self.tree.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick)
85  self.tree.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
86  self.tree.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
87 
88 
89  def GetItem(self):
90  def getType():
91  item=self.item
92  while self.tree.GetItemParent(item)!=self.root:
93  item=self.tree.GetItemParent(item)
94  return str(self.tree.GetItemText(item))
95 
96  def getElement():
97  item=self.item
98  path=str(self.tree.GetItemText(item))
99  while str(self.tree.GetItemText(self.tree.GetItemParent(item)))!='Elements':
100  item=self.tree.GetItemParent(item)
101  path=str(self.tree.GetItemText(item))+'/'+path
102  path='/'+path
103  return path
104 
105  def getProcessus():
106  item=self.item
107  return str(self.tree.GetItemText(item))
108 
109  objtype=getType()
110  if (objtype=='Elements'):
111  objtype='Element'
112  obj=getElement()
113  return [obj,objtype]
114  if (objtype=='Processus'):
115  obj=getProcessus()
116  return [obj,objtype]
117 
118 
119  def OnRightDown(self, event):
120  pt = event.GetPosition();
121  item, flags = self.tree.HitTest(pt)
122  if item:
123 # self.log.WriteText("OnRightClick: %s, %s, %s\n" %
124 # (self.tree.GetItemText(item), type(item), item.__class__))
125  self.tree.SelectItem(item)
126 
127 
128  def OnRightUp(self, event):
129  pt = event.GetPosition();
130  item, flags = self.tree.HitTest(pt)
131  if item:
132 # self.log.WriteText("OnRightUp: %s (manually starting label edit)\n"
133 # % self.tree.GetItemText(item))
134  self.tree.EditLabel(item)
135 
136 
137 
138  def OnBeginEdit(self, event):
139 # self.log.WriteText("OnBeginEdit\n")
140  # show how to prevent edit...
141  item = event.GetItem()
142  if item and self.tree.GetItemText(item) == "The Root Item":
143  wx.Bell()
144 # self.log.WriteText("You can't edit this one...\n")
145 
146  # Lets just see what's visible of its children
147  cookie = 0
148  root = event.GetItem()
149  (child, cookie) = self.tree.GetFirstChild(root)
150 
151  while child.IsOk():
152 # self.log.WriteText("Child [%s] visible = %d" %
153 # (self.tree.GetItemText(child),
154 # self.tree.IsVisible(child)))
155  (child, cookie) = self.tree.GetNextChild(root, cookie)
156 
157  event.Veto()
158 
159 
160  def OnEndEdit(self, event):
161 # self.log.WriteText("OnEndEdit: %s %s\n" %
162 # (event.IsEditCancelled(), event.GetLabel()) )
163  # show how to reject edit, we'll not allow any digits
164  for x in event.GetLabel():
165  if x in string.digits:
166 # self.log.WriteText("You can't enter digits...\n")
167  event.Veto()
168  return
169 
170 
171  def OnLeftDClick(self, event):
172  pt = event.GetPosition();
173  item, flags = self.tree.HitTest(pt)
174  if item:
175 # self.log.WriteText("OnLeftDClick: %s\n" % self.tree.GetItemText(item))
176  parent = self.tree.GetItemParent(item)
177  if parent.IsOk():
178  self.tree.SortChildren(parent)
179  event.Skip()
180 
181 
182  def OnSize(self, event):
183  w,h = self.GetClientSizeTuple()
184  self.tree.SetDimensions(0, 0, w, h)
185 
186 
187  def OnExpand(self):
188  self.tree.Expand(event.GetItem())
189 
190  def OnCollapse(self):
191  self.tree.Collapse(event.GetItem())
192 
193  def OnItemExpanded(self, event):
194  item = event.GetItem()
195 # if item:
196 # self.log.WriteText("OnItemCollapsed: %s\n" % self.tree.GetItemText(item))
197 
198  def OnItemCollapsed(self, event):
199  item = event.GetItem()
200 # if item:
201 # self.log.WriteText("OnItemCollapsed: %s\n" % self.tree.GetItemText(item))
202 
203  def OnSelChanged(self, event):
204  self.item = event.GetItem()
205 # print "onselchanged"
206 # print self.tree.GetItemText(self.item), type(self.item), self.item.__class__
207 # if self.item:
208 # self.log.WriteText("OnSelChanged: %s\n" % self.tree.GetItemText(self.item))
209 # if wx.Platform == '__WXMSW__':
210 # self.log.WriteText("BoundingRect: %s\n" %
211 # self.tree.GetBoundingRect(self.item, True))
212  #items = self.tree.GetSelections()
213  #print map(self.tree.GetItemText, items)
214  event.Skip()
215 
216 
217  def OnActivate(self, event):
218  if self.tree.IsExpanded(event.GetItem()):
219  self.tree.Collapse(event.GetItem())
220  else:
221  self.tree.Expand(event.GetItem())
222 
223 
224  def RecreateTree(self, myElements, myProcessus ):
225  def makeHierarchy( parent, children, image):
226 # print "call with ",self.tree.GetItemText(parent)," ",children
227  for child in range(len(children)):
228  if type(children[child])==list:
229 # print "recurcive list found "
230  makeHierarchy(nChild,children[child],image)
231  else:
232 # print "add item ", children[child], " at ", self.tree.GetItemText(parent)
233  nChild=self.tree.AppendItem(parent, children[child], image)
234  self.tree.SetItemPyData(nChild, image)
235  self.TreeItem.append(nChild)
236 
237  _treeList = [
238  ('Elements', myElements),
239  ('Processus', myProcessus),
240  ('Data', []),
241  ('Documents', []),
242  ]
243 
244 # self.tree.Freeze()
245  self.tree.DeleteAllItems()
246  self.root = self.tree.AddRoot("Objects")
247 
248  self.tree.SetItemPyData(self.root, None)
249  self.tree.SetItemImage(self.root, self.fldridx, wx.TreeItemIcon_Normal)
250  self.tree.SetItemImage(self.root, self.fldropenidx, wx.TreeItemIcon_Expanded)
251 
252  treeFont = self.tree.GetFont()
253  catFont = self.tree.GetFont()
254 
255  # The old native treectrl on MSW has a bug where it doesn't
256  # draw all of the text for an item if the font is larger than
257  # the default. It seems to be clipping the item's label as if
258  # it was the size of the same label in the default font.
259  if 'wxMSW' not in wx.PlatformInfo or wx.GetApp().GetComCtl32Version() >= 600:
260  treeFont.SetPointSize(treeFont.GetPointSize()+2)
261  treeFont.SetWeight(wx.BOLD)
262  catFont.SetWeight(wx.BOLD)
263 
264  self.tree.SetItemFont(self.root, treeFont)
265 
266  firstChild = None
267  selectItem = None
268 
269  count = 0
270 
271  self.TreeItem=[self.root]
272 
273  for category, items in _treeList:
274  count += 1
275  child = self.tree.AppendItem(self.root, category, image=count)
276 # self.tree.SetItemFont(child, catFont)
277  self.tree.SetItemPyData(child, count)
278  self.tree.SetItemImage(child, self.fldridx, wx.TreeItemIcon_Normal)
279  self.tree.SetItemImage(child, self.fldropenidx, wx.TreeItemIcon_Expanded)
280 
281  if not firstChild: firstChild = child
282  makeHierarchy(child, items, count)
283 
284  self.tree.Expand(self.root)
285  self.item=self.root
286 
287  def SetTreeModified(self, modified):
288  item = self.tree.GetSelection()
289  if modified:
290  image = len(_objectTypes)
291  else:
292  image = self.tree.GetItemPyData(item)
293  self.tree.SetItemImage(item, image)
294 
295  def GetItemIdentity(self, item):
296  return self.tree.GetPyData(item)
297 
298  def ExpandAll(self):
299  self.tree.ExpandAll()
300 
301  def CollapseAll(self):
302  self.tree.CollapseAll()
def OnRightUp(self, event)
Definition: tree.py:128
def SetTreeModified(self, modified)
Definition: tree.py:287
def OnActivate(self, event)
Definition: tree.py:217
def OnExpand(self)
Definition: tree.py:187
def RecreateTree(self, myElements, myProcessus)
Definition: tree.py:224
def OnSize(self, event)
Definition: tree.py:182
def CollapseAll(self)
Definition: tree.py:301
def OnCompareItems(self, item1, item2)
Definition: tree.py:14
def OnItemExpanded(self, event)
Definition: tree.py:193
def GetItemIdentity(self, item)
Definition: tree.py:295
def OnEndEdit(self, event)
Definition: tree.py:160
def __init__(self, parent, id, pos, size, style)
Definition: tree.py:9
def GetItem(self)
self.root = self.tree.AddRoot("The Root Item") self.tree.SetPyData(self.root, None) self...
Definition: tree.py:89
def __init__(self, parent)
Definition: tree.py:25
def OnLeftDClick(self, event)
Definition: tree.py:171
def OnItemCollapsed(self, event)
Definition: tree.py:198
def OnBeginEdit(self, event)
Definition: tree.py:138
def ExpandAll(self)
Definition: tree.py:298
def OnCollapse(self)
Definition: tree.py:190
def OnSelChanged(self, event)
Definition: tree.py:203
def OnRightDown(self, event)
Definition: tree.py:119