4 import wx
.lib
.colourselect
as csel
6 import wx
.lib
.customtreectrl
as CT
11 #---------------------------------------------------------------------------
14 penstyle
= ["wx.SOLID", "wx.TRANSPARENT", "wx.DOT", "wx.LONG_DASH", "wx.DOT_DASH", "wx.USER_DASH",
15 "wx.BDIAGONAL_HATCH", "wx.CROSSDIAG_HATCH", "wx.FDIAGONAL_HATCH", "wx.CROSS_HATCH",
16 "wx.HORIZONTAL_HATCH", "wx.VERTICAL_HATCH"]
19 "wx.ART_ADD_BOOKMARK",
20 "wx.ART_DEL_BOOKMARK",
21 "wx.ART_HELP_SIDE_PANEL",
22 "wx.ART_HELP_SETTINGS",
30 "wx.ART_GO_TO_PARENT",
46 "wx.ART_EXECUTABLE_FILE",
54 "wx.ART_MISSING_IMAGE",
59 wx
.WXK_BACK
: "WXK_BACK",
60 wx
.WXK_TAB
: "WXK_TAB",
61 wx
.WXK_RETURN
: "WXK_RETURN",
62 wx
.WXK_ESCAPE
: "WXK_ESCAPE",
63 wx
.WXK_SPACE
: "WXK_SPACE",
64 wx
.WXK_DELETE
: "WXK_DELETE",
65 wx
.WXK_START
: "WXK_START",
66 wx
.WXK_LBUTTON
: "WXK_LBUTTON",
67 wx
.WXK_RBUTTON
: "WXK_RBUTTON",
68 wx
.WXK_CANCEL
: "WXK_CANCEL",
69 wx
.WXK_MBUTTON
: "WXK_MBUTTON",
70 wx
.WXK_CLEAR
: "WXK_CLEAR",
71 wx
.WXK_SHIFT
: "WXK_SHIFT",
72 wx
.WXK_ALT
: "WXK_ALT",
73 wx
.WXK_CONTROL
: "WXK_CONTROL",
74 wx
.WXK_MENU
: "WXK_MENU",
75 wx
.WXK_PAUSE
: "WXK_PAUSE",
76 wx
.WXK_CAPITAL
: "WXK_CAPITAL",
77 wx
.WXK_PRIOR
: "WXK_PRIOR",
78 wx
.WXK_NEXT
: "WXK_NEXT",
79 wx
.WXK_END
: "WXK_END",
80 wx
.WXK_HOME
: "WXK_HOME",
81 wx
.WXK_LEFT
: "WXK_LEFT",
83 wx
.WXK_RIGHT
: "WXK_RIGHT",
84 wx
.WXK_DOWN
: "WXK_DOWN",
85 wx
.WXK_SELECT
: "WXK_SELECT",
86 wx
.WXK_PRINT
: "WXK_PRINT",
87 wx
.WXK_EXECUTE
: "WXK_EXECUTE",
88 wx
.WXK_SNAPSHOT
: "WXK_SNAPSHOT",
89 wx
.WXK_INSERT
: "WXK_INSERT",
90 wx
.WXK_HELP
: "WXK_HELP",
91 wx
.WXK_NUMPAD0
: "WXK_NUMPAD0",
92 wx
.WXK_NUMPAD1
: "WXK_NUMPAD1",
93 wx
.WXK_NUMPAD2
: "WXK_NUMPAD2",
94 wx
.WXK_NUMPAD3
: "WXK_NUMPAD3",
95 wx
.WXK_NUMPAD4
: "WXK_NUMPAD4",
96 wx
.WXK_NUMPAD5
: "WXK_NUMPAD5",
97 wx
.WXK_NUMPAD6
: "WXK_NUMPAD6",
98 wx
.WXK_NUMPAD7
: "WXK_NUMPAD7",
99 wx
.WXK_NUMPAD8
: "WXK_NUMPAD8",
100 wx
.WXK_NUMPAD9
: "WXK_NUMPAD9",
101 wx
.WXK_MULTIPLY
: "WXK_MULTIPLY",
102 wx
.WXK_ADD
: "WXK_ADD",
103 wx
.WXK_SEPARATOR
: "WXK_SEPARATOR",
104 wx
.WXK_SUBTRACT
: "WXK_SUBTRACT",
105 wx
.WXK_DECIMAL
: "WXK_DECIMAL",
106 wx
.WXK_DIVIDE
: "WXK_DIVIDE",
107 wx
.WXK_F1
: "WXK_F1",
108 wx
.WXK_F2
: "WXK_F2",
109 wx
.WXK_F3
: "WXK_F3",
110 wx
.WXK_F4
: "WXK_F4",
111 wx
.WXK_F5
: "WXK_F5",
112 wx
.WXK_F6
: "WXK_F6",
113 wx
.WXK_F7
: "WXK_F7",
114 wx
.WXK_F8
: "WXK_F8",
115 wx
.WXK_F9
: "WXK_F9",
116 wx
.WXK_F10
: "WXK_F10",
117 wx
.WXK_F11
: "WXK_F11",
118 wx
.WXK_F12
: "WXK_F12",
119 wx
.WXK_F13
: "WXK_F13",
120 wx
.WXK_F14
: "WXK_F14",
121 wx
.WXK_F15
: "WXK_F15",
122 wx
.WXK_F16
: "WXK_F16",
123 wx
.WXK_F17
: "WXK_F17",
124 wx
.WXK_F18
: "WXK_F18",
125 wx
.WXK_F19
: "WXK_F19",
126 wx
.WXK_F20
: "WXK_F20",
127 wx
.WXK_F21
: "WXK_F21",
128 wx
.WXK_F22
: "WXK_F22",
129 wx
.WXK_F23
: "WXK_F23",
130 wx
.WXK_F24
: "WXK_F24",
131 wx
.WXK_NUMLOCK
: "WXK_NUMLOCK",
132 wx
.WXK_SCROLL
: "WXK_SCROLL",
133 wx
.WXK_PAGEUP
: "WXK_PAGEUP",
134 wx
.WXK_PAGEDOWN
: "WXK_PAGEDOWN",
135 wx
.WXK_NUMPAD_SPACE
: "WXK_NUMPAD_SPACE",
136 wx
.WXK_NUMPAD_TAB
: "WXK_NUMPAD_TAB",
137 wx
.WXK_NUMPAD_ENTER
: "WXK_NUMPAD_ENTER",
138 wx
.WXK_NUMPAD_F1
: "WXK_NUMPAD_F1",
139 wx
.WXK_NUMPAD_F2
: "WXK_NUMPAD_F2",
140 wx
.WXK_NUMPAD_F3
: "WXK_NUMPAD_F3",
141 wx
.WXK_NUMPAD_F4
: "WXK_NUMPAD_F4",
142 wx
.WXK_NUMPAD_HOME
: "WXK_NUMPAD_HOME",
143 wx
.WXK_NUMPAD_LEFT
: "WXK_NUMPAD_LEFT",
144 wx
.WXK_NUMPAD_UP
: "WXK_NUMPAD_UP",
145 wx
.WXK_NUMPAD_RIGHT
: "WXK_NUMPAD_RIGHT",
146 wx
.WXK_NUMPAD_DOWN
: "WXK_NUMPAD_DOWN",
147 wx
.WXK_NUMPAD_PRIOR
: "WXK_NUMPAD_PRIOR",
148 wx
.WXK_NUMPAD_PAGEUP
: "WXK_NUMPAD_PAGEUP",
149 wx
.WXK_NUMPAD_NEXT
: "WXK_NUMPAD_NEXT",
150 wx
.WXK_NUMPAD_PAGEDOWN
: "WXK_NUMPAD_PAGEDOWN",
151 wx
.WXK_NUMPAD_END
: "WXK_NUMPAD_END",
152 wx
.WXK_NUMPAD_BEGIN
: "WXK_NUMPAD_BEGIN",
153 wx
.WXK_NUMPAD_INSERT
: "WXK_NUMPAD_INSERT",
154 wx
.WXK_NUMPAD_DELETE
: "WXK_NUMPAD_DELETE",
155 wx
.WXK_NUMPAD_EQUAL
: "WXK_NUMPAD_EQUAL",
156 wx
.WXK_NUMPAD_MULTIPLY
: "WXK_NUMPAD_MULTIPLY",
157 wx
.WXK_NUMPAD_ADD
: "WXK_NUMPAD_ADD",
158 wx
.WXK_NUMPAD_SEPARATOR
: "WXK_NUMPAD_SEPARATOR",
159 wx
.WXK_NUMPAD_SUBTRACT
: "WXK_NUMPAD_SUBTRACT",
160 wx
.WXK_NUMPAD_DECIMAL
: "WXK_NUMPAD_DECIMAL",
161 wx
.WXK_NUMPAD_DIVIDE
: "WXK_NUMPAD_DIVIDE"
166 #---------------------------------------------------------------------------
167 # Just A Dialog To Select Pen Styles
168 #---------------------------------------------------------------------------
169 class PenDialog(wx
.Dialog
):
171 def __init__(self
, parent
=None, id=-1, title
="", pos
=wx
.DefaultPosition
,
172 size
=wx
.DefaultSize
, style
=wx
.DEFAULT_DIALOG_STYLE
, oldpen
=None,
175 wx
.Dialog
.__init
__(self
, parent
, id, title
, pos
, size
, style
)
177 self
.colourbutton
= csel
.ColourSelect(self
)
178 self
.spinwidth
= wx
.SpinCtrl(self
, -1, "1", min=1, max=3, style
=wx
.SP_ARROW_KEYS
)
180 self
.combostyle
= wx
.ComboBox(self
, -1, choices
=penstyle
, style
=wx
.CB_DROPDOWN|wx
.CB_READONLY
)
182 choices
= ["[1, 1]", "[2, 2]", "[3, 3]", "[4, 4]"]
183 self
.combodash
= wx
.ComboBox(self
, -1, choices
=choices
, style
=wx
.CB_DROPDOWN|wx
.CB_READONLY
)
185 self
.okbutton
= wx
.Button(self
, wx
.ID_OK
)
186 self
.cancelbutton
= wx
.Button(self
, wx
.ID_CANCEL
)
190 self
.pentype
= pentype
192 self
.__set
_properties
()
195 self
.Bind(wx
.EVT_COMBOBOX
, self
.OnStyle
, self
.combostyle
)
196 self
.Bind(wx
.EVT_BUTTON
, self
.OnOk
, self
.okbutton
)
197 self
.Bind(wx
.EVT_BUTTON
, self
.OnCancel
, self
.cancelbutton
)
200 def __set_properties(self
):
202 self
.SetTitle("Pen Dialog Selector")
203 self
.colourbutton
.SetMinSize((25, 25))
204 self
.colourbutton
.SetColour(self
.oldpen
.GetColour())
206 style
= self
.oldpen
.GetStyle()
207 for count
, st
in enumerate(penstyle
):
208 if eval(st
) == style
:
209 self
.combostyle
.SetSelection(count
)
211 self
.combodash
.Enable(True)
213 self
.combodash
.Enable(False)
216 if self
.combodash
.IsEnabled():
217 dashes
= repr(self
.oldpen
.GetDashes())
218 self
.combodash
.SetValue(dashes
)
220 self
.spinwidth
.SetValue(self
.oldpen
.GetWidth())
221 self
.okbutton
.SetDefault()
223 if self
.pentype
== 1:
224 self
.spinwidth
.Enable(False)
227 def __do_layout(self
):
229 mainsizer
= wx
.BoxSizer(wx
.VERTICAL
)
230 bottomsizer
= wx
.BoxSizer(wx
.HORIZONTAL
)
231 middlesizer
= wx
.BoxSizer(wx
.VERTICAL
)
232 stylesizer
= wx
.BoxSizer(wx
.HORIZONTAL
)
233 widthsizer
= wx
.BoxSizer(wx
.HORIZONTAL
)
234 coloursizer
= wx
.BoxSizer(wx
.HORIZONTAL
)
235 label_1
= wx
.StaticText(self
, -1, "Please Choose The Pen Settings:")
236 label_1
.SetFont(wx
.Font(8, wx
.DEFAULT
, wx
.NORMAL
, wx
.BOLD
, 0, ""))
237 mainsizer
.Add(label_1
, 0, wx
.ALL|wx
.ADJUST_MINSIZE
, 10)
238 label_2
= wx
.StaticText(self
, -1, "Pen Colour")
239 coloursizer
.Add(label_2
, 0, wx
.ALL|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
240 coloursizer
.Add((5, 5), 1, wx
.ADJUST_MINSIZE
, 0)
241 coloursizer
.Add(self
.colourbutton
, 0, wx
.ALL|wx
.ADJUST_MINSIZE
, 5)
242 middlesizer
.Add(coloursizer
, 0, wx
.EXPAND
, 0)
243 label_3
= wx
.StaticText(self
, -1, "Pen Width")
244 widthsizer
.Add(label_3
, 0, wx
.ALL|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
245 widthsizer
.Add((5, 5), 1, wx
.ADJUST_MINSIZE
, 0)
246 widthsizer
.Add(self
.spinwidth
, 0, wx
.ALL|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
247 middlesizer
.Add(widthsizer
, 0, wx
.EXPAND
, 0)
248 label_4
= wx
.StaticText(self
, -1, "Pen Style")
249 stylesizer
.Add(label_4
, 0, wx
.ALL|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
250 stylesizer
.Add((5, 5), 1, wx
.ADJUST_MINSIZE
, 0)
251 stylesizer
.Add(self
.combostyle
, 0, wx
.ALL|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
252 stylesizer
.Add(self
.combodash
, 0, wx
.ALL|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
253 middlesizer
.Add(stylesizer
, 0, wx
.BOTTOM|wx
.EXPAND
, 5)
254 mainsizer
.Add(middlesizer
, 1, wx
.EXPAND
, 0)
255 bottomsizer
.Add(self
.okbutton
, 0, wx
.ALL|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 20)
256 bottomsizer
.Add((20, 20), 1, wx
.ADJUST_MINSIZE
, 0)
257 bottomsizer
.Add(self
.cancelbutton
, 0, wx
.ALL|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 20)
258 mainsizer
.Add(bottomsizer
, 0, wx
.EXPAND
, 0)
259 self
.SetAutoLayout(True)
260 self
.SetSizer(mainsizer
)
262 mainsizer
.SetSizeHints(self
)
269 def OnStyle(self
, event
):
271 choice
= event
.GetEventObject().GetValue()
272 self
.combodash
.Enable(choice
==5)
276 def OnOk(self
, event
):
278 colour
= self
.colourbutton
.GetColour()
279 style
= eval(self
.combostyle
.GetValue())
280 width
= int(self
.spinwidth
.GetValue())
283 if self
.combostyle
.GetSelection() == 5:
284 dashes
= eval(self
.combodash
.GetValue())
286 pen
= wx
.Pen(colour
, width
, style
)
289 pen
.SetDashes(dashes
)
291 pen
.SetCap(wx
.CAP_BUTT
)
293 if self
.pentype
== 0:
294 self
.parent
.SetConnectionPen(pen
)
296 self
.parent
.SetBorderPen(pen
)
302 def OnCancel(self
, event
):
308 #---------------------------------------------------------------------------
309 # Just A Dialog To Select Tree Buttons Icons
310 #---------------------------------------------------------------------------
311 class TreeButtonsDialog(wx
.Dialog
):
313 def __init__(self
, parent
=None, id=-1, title
="", pos
=wx
.DefaultPosition
,
314 size
=wx
.DefaultSize
, style
=wx
.DEFAULT_DIALOG_STYLE
, oldicons
=None):
316 wx
.Dialog
.__init
__(self
, parent
, id, title
, pos
, size
, style
)
318 self
.listicons
= wx
.ListBox(self
, -1, choices
=["Set 1", "Set 2", "Set 3", "Set 4", "Set 5"], style
=wx
.LB_SINGLE
)
320 bitmap_plus
= opj("bitmaps/plus" + str(oldicons
+1) + ".ico")
321 bitmap_minus
= opj("bitmaps/minus" + str(oldicons
+1) + ".ico")
323 bitmap_plus
= wx
.Image(bitmap_plus
, wx
.BITMAP_TYPE_ICO
)
324 bitmap_plus
.Rescale(24, 24)
325 bitmap_plus
= bitmap_plus
.ConvertToBitmap()
326 bitmap_minus
= wx
.Image(bitmap_minus
, wx
.BITMAP_TYPE_ICO
)
327 bitmap_minus
.Rescale(24, 24)
328 bitmap_minus
= bitmap_minus
.ConvertToBitmap()
330 self
.bitmap_plus
= wx
.StaticBitmap(self
, -1, bitmap_plus
)
331 self
.bitmap_minus
= wx
.StaticBitmap(self
, -1, bitmap_minus
)
333 self
.okbutton
= wx
.Button(self
, wx
.ID_OK
)
334 self
.cancelbutton
= wx
.Button(self
, wx
.ID_CANCEL
)
338 self
.__set
_properties
()
341 self
.Bind(wx
.EVT_BUTTON
, self
.OnOk
, self
.okbutton
)
342 self
.Bind(wx
.EVT_BUTTON
, self
.OnCancel
, self
.cancelbutton
)
343 self
.Bind(wx
.EVT_LISTBOX
, self
.OnListBox
, self
.listicons
)
346 def __set_properties(self
):
348 self
.SetTitle("Tree Buttons Selector")
349 self
.listicons
.SetSelection(0)
350 self
.okbutton
.SetDefault()
353 def __do_layout(self
):
355 mainsizer
= wx
.BoxSizer(wx
.VERTICAL
)
356 bottomsizer
= wx
.BoxSizer(wx
.HORIZONTAL
)
357 topsizer
= wx
.BoxSizer(wx
.HORIZONTAL
)
358 rightsizer
= wx
.BoxSizer(wx
.VERTICAL
)
359 sizer_2
= wx
.BoxSizer(wx
.HORIZONTAL
)
360 sizer_1
= wx
.BoxSizer(wx
.HORIZONTAL
)
361 label_1
= wx
.StaticText(self
, -1, "Please Choose One Of These Sets Of Icons:")
362 label_1
.SetFont(wx
.Font(8, wx
.DEFAULT
, wx
.NORMAL
, wx
.BOLD
, 0, ""))
363 mainsizer
.Add(label_1
, 0, wx
.ALL|wx
.ADJUST_MINSIZE
, 10)
364 topsizer
.Add(self
.listicons
, 0, wx
.ALL|wx
.EXPAND|wx
.ADJUST_MINSIZE
, 5)
365 label_2
= wx
.StaticText(self
, -1, "Collapsed")
366 sizer_1
.Add(label_2
, 0, wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 10)
367 sizer_1
.Add((20, 20), 1, wx
.ALIGN_RIGHT|wx
.ADJUST_MINSIZE
, 0)
368 sizer_1
.Add(self
.bitmap_plus
, 1, wx
.RIGHT|wx
.EXPAND|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 10)
369 rightsizer
.Add(sizer_1
, 0, wx
.EXPAND
, 0)
370 label_3
= wx
.StaticText(self
, -1, "Expanded")
371 sizer_2
.Add(label_3
, 0, wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 10)
372 sizer_2
.Add((20, 20), 1, wx
.ADJUST_MINSIZE
, 0)
373 sizer_2
.Add(self
.bitmap_minus
, 1, wx
.RIGHT|wx
.EXPAND|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 10)
374 rightsizer
.Add(sizer_2
, 0, wx
.EXPAND
, 0)
375 topsizer
.Add(rightsizer
, 0, wx
.ALL|wx
.EXPAND
, 5)
376 mainsizer
.Add(topsizer
, 1, wx
.EXPAND
, 0)
377 bottomsizer
.Add(self
.okbutton
, 0, wx
.ALL|wx
.ADJUST_MINSIZE
, 20)
378 bottomsizer
.Add((20, 20), 1, wx
.ADJUST_MINSIZE
, 0)
379 bottomsizer
.Add(self
.cancelbutton
, 0, wx
.ALL|wx
.ADJUST_MINSIZE
, 20)
380 mainsizer
.Add(bottomsizer
, 0, wx
.EXPAND
, 0)
381 self
.SetAutoLayout(True)
382 self
.SetSizer(mainsizer
)
384 mainsizer
.SetSizeHints(self
)
388 def OnListBox(self
, event
):
390 selection
= self
.listicons
.GetSelection()
391 bitmap_plus
= opj("bitmaps/plus" + str(selection
+1) + ".ico")
392 bitmap_minus
= opj("bitmaps/minus" + str(selection
+1) + ".ico")
394 bitmap_plus
= wx
.Image(bitmap_plus
, wx
.BITMAP_TYPE_ICO
)
395 bitmap_plus
.Rescale(24, 24)
396 bitmap_plus
= bitmap_plus
.ConvertToBitmap()
397 bitmap_minus
= wx
.Image(bitmap_minus
, wx
.BITMAP_TYPE_ICO
)
398 bitmap_minus
.Rescale(24, 24)
399 bitmap_minus
= bitmap_minus
.ConvertToBitmap()
401 self
.bitmap_plus
.SetBitmap(bitmap_plus
)
402 self
.bitmap_minus
.SetBitmap(bitmap_minus
)
404 self
.bitmap_plus
.Refresh()
405 self
.bitmap_minus
.Refresh()
409 def OnOk(self
, event
):
411 selection
= self
.listicons
.GetSelection()
412 self
.parent
.SetTreeButtons(selection
)
417 def OnCancel(self
, event
):
423 #---------------------------------------------------------------------------
424 # Just A Dialog To Select Tree Check/Radio Item Icons
425 #---------------------------------------------------------------------------
426 class CheckDialog(wx
.Dialog
):
428 def __init__(self
, parent
=None, id=-1, title
="", pos
=wx
.DefaultPosition
,
429 size
=wx
.DefaultSize
, style
=wx
.DEFAULT_DIALOG_STYLE
):
431 wx
.Dialog
.__init
__(self
, parent
, id, title
, pos
, size
, style
)
433 self
.listicons
= wx
.ListBox(self
, -1, choices
=["Set 1", "Set 2"], style
=wx
.LB_SINGLE
)
435 bitmap_check
= wx
.Bitmap(opj("bitmaps/checked.ico"), wx
.BITMAP_TYPE_ICO
)
436 bitmap_uncheck
= wx
.Bitmap(opj("bitmaps/notchecked.ico"), wx
.BITMAP_TYPE_ICO
)
437 bitmap_flag
= wx
.Bitmap(opj("bitmaps/flagged.ico"), wx
.BITMAP_TYPE_ICO
)
438 bitmap_unflag
= wx
.Bitmap(opj("bitmaps/notflagged.ico"), wx
.BITMAP_TYPE_ICO
)
440 self
.bitmap_check
= wx
.StaticBitmap(self
, -1, bitmap_check
)
441 self
.bitmap_uncheck
= wx
.StaticBitmap(self
, -1, bitmap_uncheck
)
442 self
.bitmap_flag
= wx
.StaticBitmap(self
, -1, bitmap_flag
)
443 self
.bitmap_unflag
= wx
.StaticBitmap(self
, -1, bitmap_unflag
)
445 self
.okbutton
= wx
.Button(self
, wx
.ID_OK
)
446 self
.cancelbutton
= wx
.Button(self
, wx
.ID_CANCEL
)
450 self
.__set
_properties
()
453 self
.Bind(wx
.EVT_BUTTON
, self
.OnOk
, self
.okbutton
)
454 self
.Bind(wx
.EVT_BUTTON
, self
.OnCancel
, self
.cancelbutton
)
455 self
.Bind(wx
.EVT_LISTBOX
, self
.OnListBox
, self
.listicons
)
458 def __set_properties(self
):
460 self
.SetTitle("Check/Radio Icon Selector")
461 self
.listicons
.SetSelection(0)
462 self
.okbutton
.SetDefault()
465 def __do_layout(self
):
467 mainsizer
= wx
.BoxSizer(wx
.VERTICAL
)
468 bottomsizer
= wx
.BoxSizer(wx
.HORIZONTAL
)
469 topsizer
= wx
.BoxSizer(wx
.HORIZONTAL
)
470 rightsizer
= wx
.BoxSizer(wx
.VERTICAL
)
471 sizer_2
= wx
.BoxSizer(wx
.HORIZONTAL
)
472 sizer_1
= wx
.BoxSizer(wx
.HORIZONTAL
)
473 sizer_3
= wx
.BoxSizer(wx
.HORIZONTAL
)
474 sizer_4
= wx
.BoxSizer(wx
.HORIZONTAL
)
475 label_1
= wx
.StaticText(self
, -1, "Please Choose One Of These Sets Of Icons:")
476 label_1
.SetFont(wx
.Font(8, wx
.DEFAULT
, wx
.NORMAL
, wx
.BOLD
, 0, ""))
477 mainsizer
.Add(label_1
, 0, wx
.ALL|wx
.ADJUST_MINSIZE
, 10)
478 topsizer
.Add(self
.listicons
, 0, wx
.ALL|wx
.EXPAND|wx
.ADJUST_MINSIZE
, 5)
479 label_2
= wx
.StaticText(self
, -1, "Checked")
480 sizer_1
.Add(label_2
, 0, wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 10)
481 sizer_1
.Add((20, 20), 1, wx
.ALIGN_RIGHT|wx
.ADJUST_MINSIZE
, 0)
482 sizer_1
.Add(self
.bitmap_check
, 0, wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 10)
483 rightsizer
.Add(sizer_1
, 0, wx
.EXPAND
, 0)
484 label_3
= wx
.StaticText(self
, -1, "Not Checked")
485 sizer_2
.Add(label_3
, 0, wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 10)
486 sizer_2
.Add((20, 20), 1, wx
.ADJUST_MINSIZE
, 0)
487 sizer_2
.Add(self
.bitmap_uncheck
, 0, wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 10)
488 rightsizer
.Add(sizer_2
, 0, wx
.EXPAND
, 0)
489 label_4
= wx
.StaticText(self
, -1, "Flagged")
490 sizer_3
.Add(label_4
, 0, wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 10)
491 sizer_3
.Add((20, 20), 1, wx
.ADJUST_MINSIZE
, 0)
492 sizer_3
.Add(self
.bitmap_flag
, 0, wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 10)
493 rightsizer
.Add(sizer_3
, 0, wx
.EXPAND
, 0)
494 label_5
= wx
.StaticText(self
, -1, "Not Flagged")
495 sizer_4
.Add(label_5
, 0, wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 10)
496 sizer_4
.Add((20, 20), 1, wx
.ADJUST_MINSIZE
, 0)
497 sizer_4
.Add(self
.bitmap_unflag
, 0, wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 10)
498 rightsizer
.Add(sizer_4
, 0, wx
.EXPAND
, 0)
500 topsizer
.Add(rightsizer
, 0, wx
.ALL|wx
.EXPAND
, 5)
501 mainsizer
.Add(topsizer
, 1, wx
.EXPAND
, 0)
502 bottomsizer
.Add(self
.okbutton
, 0, wx
.ALL|wx
.ADJUST_MINSIZE
, 20)
503 bottomsizer
.Add((20, 20), 1, wx
.ADJUST_MINSIZE
, 0)
504 bottomsizer
.Add(self
.cancelbutton
, 0, wx
.ALL|wx
.ADJUST_MINSIZE
, 20)
505 mainsizer
.Add(bottomsizer
, 0, wx
.EXPAND
, 0)
506 self
.SetAutoLayout(True)
507 self
.SetSizer(mainsizer
)
509 mainsizer
.SetSizeHints(self
)
513 def OnListBox(self
, event
):
515 selection
= self
.listicons
.GetSelection()
518 bitmap_check
= opj("bitmaps/checked.ico")
519 bitmap_uncheck
= opj("bitmaps/notchecked.ico")
520 bitmap_flag
= opj("bitmaps/flagged.ico")
521 bitmap_unflag
= opj("bitmaps/notflagged.ico")
523 bitmap_check
= opj("bitmaps/aquachecked.ico")
524 bitmap_uncheck
= opj("bitmaps/aquanotchecked.ico")
525 bitmap_flag
= opj("bitmaps/aquaflagged.ico")
526 bitmap_unflag
= opj("bitmaps/aquanotflagged.ico")
528 bitmap_check
= wx
.Bitmap(bitmap_check
, wx
.BITMAP_TYPE_ICO
)
529 bitmap_uncheck
= wx
.Bitmap(bitmap_uncheck
, wx
.BITMAP_TYPE_ICO
)
530 bitmap_flag
= wx
.Bitmap(bitmap_flag
, wx
.BITMAP_TYPE_ICO
)
531 bitmap_unflag
= wx
.Bitmap(bitmap_unflag
, wx
.BITMAP_TYPE_ICO
)
533 self
.bitmap_uncheck
.SetBitmap(bitmap_uncheck
)
534 self
.bitmap_check
.SetBitmap(bitmap_check
)
535 self
.bitmap_unflag
.SetBitmap(bitmap_unflag
)
536 self
.bitmap_flag
.SetBitmap(bitmap_flag
)
538 self
.bitmap_check
.Refresh()
539 self
.bitmap_uncheck
.Refresh()
540 self
.bitmap_flag
.Refresh()
541 self
.bitmap_unflag
.Refresh()
546 def OnOk(self
, event
):
548 selection
= self
.listicons
.GetSelection()
549 self
.parent
.SetCheckRadio(selection
)
554 def OnCancel(self
, event
):
560 #---------------------------------------------------------------------------
561 # Just A Dialog To Select Tree Items Icons
562 #---------------------------------------------------------------------------
563 class TreeIcons(wx
.Dialog
):
565 def __init__(self
, parent
=None, id=-1, title
="", pos
=wx
.DefaultPosition
,
566 size
=wx
.DefaultSize
, style
=wx
.DEFAULT_DIALOG_STYLE
, oldpen
=None,
569 wx
.Dialog
.__init
__(self
, parent
, id, title
, pos
, size
, style
)
571 self
.bitmaps
= [None, None, None, None]
572 empty
= wx
.EmptyBitmap(16, 16)
575 self
.bitmaps
[0] = wx
.StaticBitmap(self
, -1, empty
)
576 self
.combonormal
= wx
.ComboBox(self
, -1, choices
=ArtIDs
, style
=wx
.CB_DROPDOWN|wx
.CB_READONLY
)
577 self
.bitmaps
[1] = wx
.StaticBitmap(self
, -1, empty
)
578 self
.comboselected
= wx
.ComboBox(self
, -1, choices
=ArtIDs
, style
=wx
.CB_DROPDOWN|wx
.CB_READONLY
)
579 self
.bitmaps
[2] = wx
.StaticBitmap(self
, -1, empty
)
580 self
.comboexpanded
= wx
.ComboBox(self
, -1, choices
=ArtIDs
, style
=wx
.CB_DROPDOWN|wx
.CB_READONLY
)
581 self
.bitmaps
[3] = wx
.StaticBitmap(self
, -1, empty
)
582 self
.comboselectedexpanded
= wx
.ComboBox(self
, -1, choices
=ArtIDs
, style
=wx
.CB_DROPDOWN|wx
.CB_READONLY
)
583 self
.okbutton
= wx
.Button(self
, wx
.ID_OK
)
584 self
.cancelbutton
= wx
.Button(self
, wx
.ID_CANCEL
)
586 self
.combonormal
.SetSelection(bitmaps
[0] >= 0 and bitmaps
[0]+1 or 0)
587 self
.comboselected
.SetSelection(bitmaps
[1] >= 0 and bitmaps
[1]+1 or 0)
588 self
.comboexpanded
.SetSelection(bitmaps
[2] >= 0 and bitmaps
[2]+1 or 0)
589 self
.comboselectedexpanded
.SetSelection(bitmaps
[3] >= 0 and bitmaps
[3]+1 or 0)
591 self
.GetBitmaps(bitmaps
)
593 self
.__set
_properties
()
596 self
.Bind(wx
.EVT_COMBOBOX
, self
.OnComboNormal
, self
.combonormal
)
597 self
.Bind(wx
.EVT_COMBOBOX
, self
.OnComboSelected
, self
.comboselected
)
598 self
.Bind(wx
.EVT_COMBOBOX
, self
.OnComboExpanded
, self
.comboexpanded
)
599 self
.Bind(wx
.EVT_COMBOBOX
, self
.OnComboSelectedExpanded
, self
.comboselectedexpanded
)
600 self
.Bind(wx
.EVT_BUTTON
, self
.OnOk
, self
.okbutton
)
601 self
.Bind(wx
.EVT_BUTTON
, self
.OnCancel
, self
.cancelbutton
)
604 def __set_properties(self
):
606 self
.SetTitle("Item Icon Selector")
607 self
.okbutton
.SetDefault()
610 def __do_layout(self
):
612 mainsizer
= wx
.BoxSizer(wx
.VERTICAL
)
613 sizer_2
= wx
.BoxSizer(wx
.HORIZONTAL
)
614 gridsizer
= wx
.FlexGridSizer(4, 3, 5, 5)
615 label_1
= wx
.StaticText(self
, -1, "Please Choose The Icons For This Item (All Are Optional):")
616 label_1
.SetFont(wx
.Font(8, wx
.DEFAULT
, wx
.NORMAL
, wx
.BOLD
, 0, ""))
617 mainsizer
.Add(label_1
, 0, wx
.ALL|wx
.ADJUST_MINSIZE
, 10)
618 label_2
= wx
.StaticText(self
, -1, "TreeIcon_Normal:")
619 gridsizer
.Add(label_2
, 0, wx
.LEFT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
620 gridsizer
.Add(self
.bitmaps
[0], 0, wx
.LEFT|wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
621 gridsizer
.Add(self
.combonormal
, 0, wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 0)
622 label_3
= wx
.StaticText(self
, -1, "TreeIcon_Selected:")
623 gridsizer
.Add(label_3
, 0, wx
.LEFT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
624 gridsizer
.Add(self
.bitmaps
[1], 0, wx
.LEFT|wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
625 gridsizer
.Add(self
.comboselected
, 0, wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 0)
626 label_4
= wx
.StaticText(self
, -1, "TreeIcon_Expanded:")
627 gridsizer
.Add(label_4
, 0, wx
.LEFT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
628 gridsizer
.Add(self
.bitmaps
[2], 0, wx
.LEFT|wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
629 gridsizer
.Add(self
.comboexpanded
, 0, wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 0)
630 label_5
= wx
.StaticText(self
, -1, "TreeIcon_SelectedExpanded:")
631 gridsizer
.Add(label_5
, 0, wx
.LEFT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
632 gridsizer
.Add(self
.bitmaps
[3], 0, wx
.LEFT|wx
.RIGHT|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 5)
633 gridsizer
.Add(self
.comboselectedexpanded
, 0, wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 0)
634 gridsizer
.AddGrowableCol(0)
635 gridsizer
.AddGrowableCol(1)
636 gridsizer
.AddGrowableCol(2)
637 mainsizer
.Add(gridsizer
, 0, wx
.ALL|wx
.EXPAND
, 5)
638 sizer_2
.Add(self
.okbutton
, 0, wx
.ALL|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 20)
639 sizer_2
.Add((20, 20), 1, wx
.ADJUST_MINSIZE
, 0)
640 sizer_2
.Add(self
.cancelbutton
, 0, wx
.ALL|wx
.ALIGN_CENTER_VERTICAL|wx
.ADJUST_MINSIZE
, 20)
641 mainsizer
.Add(sizer_2
, 1, wx
.EXPAND
, 0)
642 self
.SetAutoLayout(True)
643 self
.SetSizer(mainsizer
)
645 mainsizer
.SetSizeHints(self
)
650 def OnComboNormal(self
, event
):
652 input = event
.GetSelection()
653 self
.GetBitmap(input, 0)
657 def OnComboSelected(self
, event
):
659 input = event
.GetSelection()
660 self
.GetBitmap(input, 1)
664 def OnComboExpanded(self
, event
):
666 input = event
.GetSelection()
667 self
.GetBitmap(input, 2)
671 def OnComboSelectedExpanded(self
, event
):
673 input = event
.GetSelection()
674 self
.GetBitmap(input, 3)
678 def OnOk(self
, event
):
680 bitmaps
= [-1, -1, -1, -1]
681 normal
= self
.combonormal
.GetSelection()
682 selected
= self
.comboselected
.GetSelection()
683 expanded
= self
.comboexpanded
.GetSelection()
684 selexp
= self
.comboselectedexpanded
.GetSelection()
686 bitmaps
= [(normal
> 0 and normal
or -1), (selected
> 0 and selected
or -1),
687 (expanded
> 0 and expanded
or -1), (selexp
> 0 and selexp
or -1)]
693 newbitmaps
.append(bmp
-1)
695 newbitmaps
.append(bmp
)
697 self
.parent
.SetNewIcons(newbitmaps
)
703 def OnCancel(self
, event
):
709 def GetBitmap(self
, input, which
):
712 bmp
= wx
.EmptyBitmap(16,16)
715 bmp
= images
.getSmilesBitmap()
717 bmp
= wx
.ArtProvider_GetBitmap(eval(ArtIDs
[input]), wx
.ART_OTHER
, (16,16))
719 bmp
= wx
.EmptyBitmap(16,16)
722 self
.bitmaps
[which
].SetBitmap(bmp
)
723 self
.bitmaps
[which
].Refresh()
726 def GetBitmaps(self
, bitmaps
):
730 for count
, input in enumerate(bitmaps
):
732 bmp
= wx
.EmptyBitmap(16,16)
735 bmp
= images
.getSmilesBitmap()
737 bmp
= wx
.ArtProvider_GetBitmap(eval(ArtIDs
[input+1]), wx
.ART_OTHER
, (16,16))
739 bmp
= wx
.EmptyBitmap(16,16)
742 self
.bitmaps
[count
].SetBitmap(bmp
)
745 def ClearBmp(self
, bmp
):
749 dc
.SetBackground(wx
.Brush("white"))
753 #---------------------------------------------------------------------------
754 # CustomTreeCtrl Demo Implementation
755 #---------------------------------------------------------------------------
756 class CustomTreeCtrlDemo(wx
.Panel
):
758 def __init__(self
, parent
, log
):
759 wx
.Panel
.__init
__(self
, parent
)
764 splitter
= wx
.SplitterWindow(self
, -1, style
=wx
.CLIP_CHILDREN | wx
.SP_LIVE_UPDATE | wx
.SP_3D
)
766 # Create the CustomTreeCtrl, using a derived class defined below
767 self
.tree
= CustomTreeCtrl(splitter
, -1, log
=self
.log
, style
=wx
.SUNKEN_BORDER
)
769 self
.leftpanel
= wx
.ScrolledWindow(splitter
, -1, style
=wx
.SUNKEN_BORDER
)
770 self
.leftpanel
.SetScrollRate(20,20)
771 width
= self
.PopulateLeftPanel(self
.tree
.styles
, self
.tree
.events
)
773 # add the windows to the splitter and split it.
774 splitter
.SplitVertically(self
.leftpanel
, self
.tree
, 300)
775 splitter
.SetMinimumPaneSize(width
+5)
777 sizer
= wx
.BoxSizer()
778 sizer
.Add(splitter
, 1, wx
.EXPAND
)
782 def PopulateLeftPanel(self
, styles
, events
):
783 pnl
= wx
.Panel(self
.leftpanel
)
784 mainsizer
= wx
.BoxSizer(wx
.VERTICAL
)
785 recreatetree
= wx
.Button(pnl
, -1, "Recreate CustomTreeCtrl")
786 mainsizer
.Add(recreatetree
, 0, wx
.ALL|wx
.ALIGN_CENTER
, 10)
787 recreatetree
.Bind(wx
.EVT_BUTTON
, self
.OnRecreateTree
)
789 staticboxstyles
= wx
.StaticBox(pnl
, -1, "CustomTreeCtrl Styles")
790 stylesizer
= wx
.StaticBoxSizer(staticboxstyles
, wx
.VERTICAL
)
791 staticboxevents
= wx
.StaticBox(pnl
, -1, "CustomTreeCtrl Events")
792 eventssizer
= wx
.StaticBoxSizer(staticboxevents
, wx
.VERTICAL
)
793 staticboxcolours
= wx
.StaticBox(pnl
, -1, "CustomTreeCtrl Images/Colours")
794 colourssizer
= wx
.StaticBoxSizer(staticboxcolours
, wx
.VERTICAL
)
795 staticboxthemes
= wx
.StaticBox(pnl
, -1, "CustomTreeCtrl Themes/Gradients")
796 themessizer
= wx
.StaticBoxSizer(staticboxthemes
, wx
.VERTICAL
)
801 for count
, style
in enumerate(styles
):
806 tags
= wx
.LEFT|wx
.RIGHT|wx
.BOTTOM
808 if style
!= "TR_DEFAULT_STYLE":
809 check
= wx
.CheckBox(pnl
, -1, style
)
810 stylesizer
.Add(check
, 0, tags
, 3)
812 if style
in ["TR_HAS_BUTTONS", "TR_HAS_VARIABLE_ROW_HEIGHT"]:
815 if style
== "TR_HAS_VARIABLE_ROW_HEIGHT":
818 check
.Bind(wx
.EVT_CHECKBOX
, self
.OnCheckStyle
)
819 self
.treestyles
.append(check
)
822 for count
, event
in enumerate(events
):
827 tags
= wx
.LEFT|wx
.RIGHT|wx
.BOTTOM
829 if count
not in [6, 17, 22, 23]:
830 check
= wx
.CheckBox(pnl
, -1, event
)
831 eventssizer
.Add(check
, 0, tags
, 3)
833 if event
in ["EVT_TREE_ITEM_EXPANDED", "EVT_TREE_ITEM_COLLAPSED",
834 "EVT_TREE_SEL_CHANGED", "EVT_TREE_SEL_CHANGING"]:
838 check
.Bind(wx
.EVT_CHECKBOX
, self
.OnCheckEvent
)
839 self
.treeevents
.append(check
)
841 sizer1
= wx
.BoxSizer(wx
.HORIZONTAL
)
842 label
= wx
.StaticText(pnl
, -1, "Connection Pen")
843 font
= label
.GetFont()
844 font
.SetWeight(wx
.FONTWEIGHT_BOLD
)
846 buttonconnection
= wx
.Button(pnl
, -1, "Choose...")
847 buttonconnection
.Bind(wx
.EVT_BUTTON
, self
.OnButtonConnection
)
848 sizer1
.Add(label
, 0, wx
.ALL|wx
.ALIGN_CENTER
, 5)
849 sizer1
.Add((1,0), 1, wx
.EXPAND
)
850 sizer1
.Add(buttonconnection
, 0, wx
.ALL|wx
.ALIGN_CENTER_HORIZONTAL|wx
.ALIGN_RIGHT
, 5)
852 sizer2
= wx
.BoxSizer(wx
.HORIZONTAL
)
853 label
= wx
.StaticText(pnl
, -1, "Border Pen")
854 font
= label
.GetFont()
855 font
.SetWeight(wx
.FONTWEIGHT_BOLD
)
857 buttonborder
= wx
.Button(pnl
, -1, "Choose...")
858 buttonborder
.Bind(wx
.EVT_BUTTON
, self
.OnButtonBorder
)
859 sizer2
.Add(label
, 0, wx
.LEFT|wx
.RIGHT|wx
.BOTTOM|wx
.ALIGN_CENTER
, 5)
860 sizer2
.Add((1,0), 1, wx
.EXPAND
)
861 sizer2
.Add(buttonborder
, 0, wx
.LEFT|wx
.RIGHT|wx
.BOTTOM|wx
.ALIGN_CENTER_HORIZONTAL|wx
.ALIGN_RIGHT
, 5)
863 sizer3
= wx
.BoxSizer(wx
.HORIZONTAL
)
864 label
= wx
.StaticText(pnl
, -1, "Tree Buttons")
865 font
= label
.GetFont()
866 font
.SetWeight(wx
.FONTWEIGHT_BOLD
)
868 buttontree
= wx
.Button(pnl
, -1, "Choose...")
869 buttontree
.Bind(wx
.EVT_BUTTON
, self
.OnButtonTree
)
870 sizer3
.Add(label
, 0, wx
.LEFT|wx
.RIGHT|wx
.BOTTOM|wx
.ALIGN_CENTER
, 5)
871 sizer3
.Add((1,0), 1, wx
.EXPAND
)
872 sizer3
.Add(buttontree
, 0, wx
.LEFT|wx
.RIGHT|wx
.BOTTOM|wx
.ALIGN_CENTER_HORIZONTAL|wx
.ALIGN_RIGHT
, 5)
874 sizer4
= wx
.BoxSizer(wx
.HORIZONTAL
)
875 label
= wx
.StaticText(pnl
, -1, "Check/Radio Buttons")
876 font
= label
.GetFont()
877 font
.SetWeight(wx
.FONTWEIGHT_BOLD
)
879 buttoncr
= wx
.Button(pnl
, -1, "Choose...")
880 buttoncr
.Bind(wx
.EVT_BUTTON
, self
.OnButtonCheckRadio
)
881 sizer4
.Add(label
, 0, wx
.LEFT|wx
.RIGHT|wx
.BOTTOM|wx
.ALIGN_CENTER
, 5)
882 sizer4
.Add((1,0), 1, wx
.EXPAND
)
883 sizer4
.Add(buttoncr
, 0, wx
.LEFT|wx
.RIGHT|wx
.BOTTOM|wx
.ALIGN_CENTER_HORIZONTAL|wx
.ALIGN_RIGHT
, 5)
885 sizer5
= wx
.BoxSizer(wx
.HORIZONTAL
)
886 radioimage
= wx
.RadioButton(pnl
, -1, "Image Background", style
=wx
.RB_GROUP
)
887 radioimage
.Bind(wx
.EVT_RADIOBUTTON
, self
.OnBackgroundImage
)
888 self
.imagebutton
= wx
.Button(pnl
, -1, "Choose...")
889 self
.imagebutton
.Bind(wx
.EVT_BUTTON
, self
.OnChooseImage
)
890 sizer5
.Add(radioimage
, 0, wx
.ALL|wx
.ALIGN_CENTER
, 5)
891 sizer5
.Add((1,0), 1, wx
.EXPAND
)
892 sizer5
.Add(self
.imagebutton
, 0, wx
.ALL|wx
.ALIGN_CENTER_HORIZONTAL|wx
.ALIGN_RIGHT
, 5)
894 sizer6
= wx
.BoxSizer(wx
.HORIZONTAL
)
895 radiobackground
= wx
.RadioButton(pnl
, -1, "Background Colour")
896 radiobackground
.Bind(wx
.EVT_RADIOBUTTON
, self
.OnBackgroundColour
)
897 self
.backbutton
= csel
.ColourSelect(pnl
, -1, "Choose...", wx
.WHITE
)
898 self
.backbutton
.Bind(csel
.EVT_COLOURSELECT
, self
.OnChooseBackground
)
899 sizer6
.Add(radiobackground
, 0, wx
.LEFT|wx
.RIGHT|wx
.BOTTOM|wx
.ALIGN_CENTER
, 5)
900 sizer6
.Add((1,0), 1, wx
.EXPAND
)
901 sizer6
.Add(self
.backbutton
, 0, wx
.LEFT|wx
.RIGHT|wx
.BOTTOM|wx
.ALIGN_CENTER
, 5)
903 colourssizer
.Add(sizer1
, 0, wx
.EXPAND
)
904 colourssizer
.Add(sizer2
, 0, wx
.EXPAND
)
905 colourssizer
.Add(sizer3
, 0, wx
.EXPAND
)
906 colourssizer
.Add(sizer4
, 0, wx
.EXPAND
)
907 colourssizer
.Add(sizer5
, 0, wx
.EXPAND
)
908 colourssizer
.Add(sizer6
, 0, wx
.EXPAND
)
910 sizera
= wx
.BoxSizer(wx
.HORIZONTAL
)
911 self
.checknormal
= wx
.CheckBox(pnl
, -1, "Standard Colours")
912 self
.focus
= csel
.ColourSelect(pnl
, -1, "Focus",
913 self
.tree
.GetHilightFocusColour())
914 self
.unfocus
= csel
.ColourSelect(pnl
, -1, "Non-Focus",
915 self
.tree
.GetHilightNonFocusColour())
916 self
.checknormal
.Bind(wx
.EVT_CHECKBOX
, self
.OnCheckNormal
)
917 self
.focus
.Bind(csel
.EVT_COLOURSELECT
, self
.OnFocusColour
)
918 self
.unfocus
.Bind(csel
.EVT_COLOURSELECT
, self
.OnNonFocusColour
)
919 sizera1
= wx
.BoxSizer(wx
.VERTICAL
)
920 sizera1
.Add(self
.focus
, 0, wx
.BOTTOM
, 2)
921 sizera1
.Add(self
.unfocus
, 0)
922 sizera
.Add(self
.checknormal
, 0, wx
.ALL
, 3)
923 sizera
.Add((1, 0), 1, wx
.EXPAND
)
924 sizera
.Add(sizera1
, 0, wx
.ALL|wx
.ALIGN_CENTER_HORIZONTAL|wx
.EXPAND
, 3)
926 sizerb
= wx
.BoxSizer(wx
.VERTICAL
)
927 self
.checkgradient
= wx
.CheckBox(pnl
, -1, "Gradient Theme")
928 self
.checkgradient
.Bind(wx
.EVT_CHECKBOX
, self
.OnCheckGradient
)
929 sizerb1
= wx
.BoxSizer(wx
.HORIZONTAL
)
931 self
.radiohorizontal
= wx
.RadioButton(pnl
, -1, "Horizontal", style
=wx
.RB_GROUP
)
932 self
.radiohorizontal
.Bind(wx
.EVT_RADIOBUTTON
, self
.OnHorizontal
)
933 sizerb1
.Add(self
.radiohorizontal
, 0, wx
.TOP|wx
.BOTTOM
, 3)
934 sizerb2
= wx
.BoxSizer(wx
.HORIZONTAL
)
936 self
.radiovertical
= wx
.RadioButton(pnl
, -1, "Vertical")
937 self
.radiovertical
.Bind(wx
.EVT_RADIOBUTTON
, self
.OnVertical
)
938 sizerb2
.Add(self
.radiovertical
, 0, wx
.BOTTOM
, 3)
939 sizerb3
= wx
.BoxSizer(wx
.HORIZONTAL
)
940 self
.firstcolour
= csel
.ColourSelect(pnl
, -1, "First Colour",
941 self
.tree
.GetFirstGradientColour())
942 self
.secondcolour
= csel
.ColourSelect(pnl
, -1, "Second Colour",
943 self
.tree
.GetSecondGradientColour())
944 self
.firstcolour
.Bind(csel
.EVT_COLOURSELECT
, self
.OnFirstColour
)
945 self
.secondcolour
.Bind(csel
.EVT_COLOURSELECT
, self
.OnSecondColour
)
946 sizerb3
.Add(self
.firstcolour
, 0, wx
.TOP|wx
.BOTTOM|wx
.ALIGN_CENTER_HORIZONTAL
, 3)
947 sizerb3
.Add(self
.secondcolour
, 0, wx
.LEFT|wx
.TOP|wx
.BOTTOM|wx
.ALIGN_CENTER_HORIZONTAL
, 3)
948 sizerb
.Add(self
.checkgradient
, 0, wx
.ALL
, 3)
949 sizerb
.Add(sizerb1
, 0)
950 sizerb
.Add(sizerb2
, 0)
951 sizerb
.Add(sizerb3
, 0, wx
.ALIGN_CENTER
)
953 self
.checkvista
= wx
.CheckBox(pnl
, -1, "Windows Vista Theme")
954 self
.checkvista
.Bind(wx
.EVT_CHECKBOX
, self
.OnVista
)
956 themessizer
.Add(sizera
, 0, wx
.EXPAND
)
957 themessizer
.Add(sizerb
, 0, wx
.EXPAND
)
958 themessizer
.Add((0, 5))
959 themessizer
.Add(self
.checkvista
, 0, wx
.EXPAND|wx
.ALL
, 3)
961 mainsizer
.Add(stylesizer
, 0, wx
.EXPAND|wx
.ALL
, 5)
962 mainsizer
.Add(colourssizer
, 0, wx
.EXPAND|wx
.ALL
, 5)
963 mainsizer
.Add(themessizer
, 0, wx
.EXPAND|wx
.ALL
, 5)
964 mainsizer
.Add(eventssizer
, 0, wx
.EXPAND|wx
.ALL
, 5)
966 pnl
.SetSizer(mainsizer
)
969 swsizer
= wx
.BoxSizer(wx
.VERTICAL
)
970 swsizer
.Add(pnl
, 0, wx
.EXPAND
)
971 self
.leftpanel
.SetSizer(swsizer
)
974 radiobackground
.SetValue(1)
975 self
.checknormal
.SetValue(1)
976 self
.radiohorizontal
.Enable(False)
977 self
.radiovertical
.Enable(False)
978 self
.firstcolour
.Enable(False)
979 self
.secondcolour
.Enable(False)
980 self
.imagebutton
.Enable(False)
982 return mainsizer
.CalcMin().width
+ wx
.SystemSettings
.GetMetric(wx
.SYS_VSCROLL_X
)
985 def OnRecreateTree(self
, event
):
987 splitter
= self
.tree
.GetParent()
988 newtree
= CustomTreeCtrl(splitter
, -1, log
=self
.log
)
989 splitter
.ReplaceWindow(self
.tree
, newtree
)
992 # Todo: The settings in the leftpanel should be reset too
995 def OnCheckStyle(self
, event
):
997 self
.tree
.ChangeStyle(self
.treestyles
)
1001 def OnCheckEvent(self
, event
):
1003 obj
= event
.GetEventObject()
1004 self
.tree
.BindEvents(obj
)
1009 def OnButtonConnection(self
, event
):
1011 pen
= self
.tree
.GetConnectionPen()
1012 dlg
= PenDialog(self
, -1, oldpen
=pen
, pentype
=0)
1019 def SetConnectionPen(self
, pen
):
1021 self
.tree
.SetConnectionPen(pen
)
1024 def OnButtonBorder(self
, event
):
1026 pen
= self
.tree
.GetBorderPen()
1027 dlg
= PenDialog(self
, -1, oldpen
=pen
, pentype
=1)
1033 def SetBorderPen(self
, pen
):
1035 self
.tree
.SetBorderPen(pen
)
1038 def OnButtonTree(self
, event
):
1040 dlg
= TreeButtonsDialog(self
, -1, oldicons
=self
.oldicons
)
1046 def OnButtonCheckRadio(self
, event
):
1048 dlg
= CheckDialog(self
, -1)
1054 def SetTreeButtons(self
, selection
):
1056 bitmap_plus
= opj("bitmaps/plus" + str(selection
+1) + ".ico")
1057 bitmap_minus
= opj("bitmaps/minus" + str(selection
+1) + ".ico")
1059 bitmap
= wx
.Bitmap(bitmap_plus
, wx
.BITMAP_TYPE_ICO
)
1060 width
= bitmap
.GetWidth()
1062 il
= wx
.ImageList(width
, width
)
1064 il
.Add(wx
.Bitmap(bitmap_plus
, wx
.BITMAP_TYPE_ICO
))
1065 il
.Add(wx
.Bitmap(bitmap_plus
, wx
.BITMAP_TYPE_ICO
))
1066 il
.Add(wx
.Bitmap(bitmap_minus
, wx
.BITMAP_TYPE_ICO
))
1067 il
.Add(wx
.Bitmap(bitmap_minus
, wx
.BITMAP_TYPE_ICO
))
1070 self
.tree
.SetButtonsImageList(il
)
1073 def SetCheckRadio(self
, selection
):
1076 self
.tree
.SetImageListCheck(13, 13)
1078 bitmap_check
= opj("bitmaps/aquachecked.ico")
1079 bitmap_uncheck
= opj("bitmaps/aquanotchecked.ico")
1080 bitmap_flag
= opj("bitmaps/aquaflagged.ico")
1081 bitmap_unflag
= opj("bitmaps/aquanotflagged.ico")
1083 il
= wx
.ImageList(16, 16)
1085 il
.Add(wx
.Bitmap(bitmap_check
, wx
.BITMAP_TYPE_ICO
))
1086 il
.Add(wx
.Bitmap(bitmap_uncheck
, wx
.BITMAP_TYPE_ICO
))
1087 il
.Add(wx
.Bitmap(bitmap_flag
, wx
.BITMAP_TYPE_ICO
))
1088 il
.Add(wx
.Bitmap(bitmap_unflag
, wx
.BITMAP_TYPE_ICO
))
1089 self
.tree
.SetImageListCheck(16, 16, il
)
1092 def OnBackgroundImage(self
, event
):
1094 if hasattr(self
, "backgroundimage"):
1095 self
.tree
.SetBackgroundImage(self
.backgroundimage
)
1097 self
.backbutton
.Enable(False)
1098 self
.imagebutton
.Enable(True)
1103 def OnChooseImage(self
, event
):
1105 wildcard
= "JPEG Files (*.jpg)|*.jpg|" \
1106 "Bitmap Files (*.bmp)|*.bmp|" \
1107 "PNG Files (*.png)|*.png|" \
1108 "Icon Files (*.ico)|*.ico|" \
1109 "GIF Files (*.gif)|*.gif|" \
1110 "All files (*.*)|*.*"
1112 dlg
= wx
.FileDialog(self
, "Choose An Image File", ".", "", wildcard
, wx
.OPEN
)
1114 if dlg
.ShowModal() == wx
.ID_OK
:
1115 path
= dlg
.GetPath()
1121 bitmap
= wx
.Bitmap(path
, wx
.BITMAP_TYPE_ANY
)
1122 self
.tree
.SetBackgroundImage(bitmap
)
1123 self
.backgroundimage
= bitmap
1128 def OnBackgroundColour(self
, event
):
1130 self
.imagebutton
.Enable(False)
1131 self
.backbutton
.Enable(True)
1132 self
.tree
.SetBackgroundImage(None)
1137 def OnChooseBackground(self
, event
):
1139 col1
= event
.GetValue()
1140 self
.tree
.SetBackgroundColour(col1
)
1144 def OnCheckNormal(self
, event
):
1146 self
.radiohorizontal
.Enable(False)
1147 self
.radiovertical
.Enable(False)
1148 self
.firstcolour
.Enable(False)
1149 self
.secondcolour
.Enable(False)
1150 self
.focus
.Enable(True)
1151 self
.unfocus
.Enable(True)
1152 self
.checkgradient
.SetValue(0)
1153 self
.checkvista
.SetValue(0)
1154 self
.tree
.EnableSelectionGradient(False)
1155 self
.tree
.EnableSelectionVista(False)
1159 def OnFocusColour(self
, event
):
1161 col1
= event
.GetValue()
1162 self
.tree
.SetHilightFocusColour(col1
)
1166 def OnNonFocusColour(self
, event
):
1168 col1
= event
.GetValue()
1169 self
.tree
.SetHilightNonFocusColour(col1
)
1173 def OnCheckGradient(self
, event
):
1175 self
.radiohorizontal
.Enable(True)
1176 self
.radiovertical
.Enable(True)
1177 self
.firstcolour
.Enable(True)
1178 self
.secondcolour
.Enable(True)
1179 self
.checknormal
.SetValue(0)
1180 self
.checkvista
.SetValue(0)
1181 self
.focus
.Enable(False)
1182 self
.unfocus
.Enable(False)
1183 self
.tree
.SetGradientStyle(self
.radiovertical
.GetValue())
1184 self
.tree
.EnableSelectionVista(False)
1185 self
.tree
.EnableSelectionGradient(True)
1190 def OnHorizontal(self
, event
):
1192 self
.tree
.SetGradientStyle(self
.radiovertical
.GetValue())
1196 def OnVertical(self
, event
):
1198 self
.tree
.SetGradientStyle(self
.radiovertical
.GetValue())
1202 def OnFirstColour(self
, event
):
1204 col1
= event
.GetValue()
1205 self
.tree
.SetFirstGradientColour(wx
.Colour(col1
[0], col1
[1], col1
[2]))
1209 def OnSecondColour(self
, event
):
1211 col1
= event
.GetValue()
1212 self
.tree
.SetSecondGradientColour(wx
.Colour(col1
[0], col1
[1], col1
[2]))
1216 def OnVista(self
, event
):
1218 self
.radiohorizontal
.Enable(False)
1219 self
.radiovertical
.Enable(False)
1220 self
.firstcolour
.Enable(False)
1221 self
.secondcolour
.Enable(False)
1222 self
.checknormal
.SetValue(0)
1223 self
.checkgradient
.SetValue(0)
1224 self
.focus
.Enable(False)
1225 self
.unfocus
.Enable(False)
1226 self
.tree
.EnableSelectionGradient(False)
1227 self
.tree
.EnableSelectionVista(True)
1235 #---------------------------------------------------------------------------
1236 # CustomTreeCtrl Demo Implementation
1237 #---------------------------------------------------------------------------
1238 class CustomTreeCtrl(CT
.CustomTreeCtrl
):
1240 def __init__(self
, parent
, id=wx
.ID_ANY
, pos
=wx
.DefaultPosition
,
1241 size
=wx
.DefaultSize
,
1242 style
=wx
.SUNKEN_BORDER
,
1243 ctstyle
=CT
.TR_HAS_BUTTONS | CT
.TR_HAS_VARIABLE_ROW_HEIGHT
,
1246 CT
.CustomTreeCtrl
.__init
__(self
, parent
, id, pos
, size
, style
, ctstyle
)
1252 for data
in alldata
:
1253 if data
.startswith("TR_"):
1254 treestyles
.append(data
)
1255 elif data
.startswith("EVT_"):
1258 self
.events
= events
1259 self
.styles
= treestyles
1262 il
= wx
.ImageList(16, 16)
1264 for items
in ArtIDs
[1:-1]:
1265 bmp
= wx
.ArtProvider_GetBitmap(eval(items
), wx
.ART_TOOLBAR
, (16, 16))
1268 smileidx
= il
.Add(images
.getSmilesBitmap())
1269 numicons
= il
.GetImageCount()
1271 self
.AssignImageList(il
)
1275 # NOTE: For some reason tree items have to have a data object in
1276 # order to be sorted. Since our compare just uses the labels
1277 # we don't need any real data, so we'll just use None below for
1280 self
.root
= self
.AddRoot("The Root Item")
1282 if not(self
.GetTreeStyle() & CT
.TR_HIDE_ROOT
):
1283 self
.SetPyData(self
.root
, None)
1284 self
.SetItemImage(self
.root
, 24, CT
.TreeItemIcon_Normal
)
1285 self
.SetItemImage(self
.root
, 13, CT
.TreeItemIcon_Expanded
)
1287 textctrl
= wx
.TextCtrl(self
, -1, "I Am A Simple\nMultiline wx.TexCtrl", style
=wx
.TE_MULTILINE
)
1288 self
.gauge
= wx
.Gauge(self
, -1, 50, style
=wx
.GA_HORIZONTAL|wx
.GA_SMOOTH
)
1289 self
.gauge
.SetValue(0)
1290 combobox
= wx
.ComboBox(self
, -1, choices
=["That", "Was", "A", "Nice", "Holyday!"], style
=wx
.CB_READONLY|wx
.CB_DROPDOWN
)
1292 textctrl
.Bind(wx
.EVT_CHAR
, self
.OnTextCtrl
)
1293 combobox
.Bind(wx
.EVT_COMBOBOX
, self
.OnComboBox
)
1297 child
= self
.AppendItem(self
.root
, "Item %d" % x
+ "\nHello World\nHappy wxPython-ing!")
1298 self
.SetItemBold(child
, True)
1300 child
= self
.AppendItem(self
.root
, "Item %d" % x
)
1301 self
.SetPyData(child
, None)
1302 self
.SetItemImage(child
, 24, CT
.TreeItemIcon_Normal
)
1303 self
.SetItemImage(child
, 13, CT
.TreeItemIcon_Expanded
)
1306 if y
== 0 and x
== 1:
1307 last
= self
.AppendItem(child
, "item %d-%s" % (x
, chr(ord("a")+y
)), ct_type
=2, wnd
=self
.gauge
)
1308 elif y
== 1 and x
== 2:
1309 last
= self
.AppendItem(child
, "Item %d-%s" % (x
, chr(ord("a")+y
)), ct_type
=1, wnd
=textctrl
)
1311 last
= self
.AppendItem(child
, "item %d-%s" % (x
, chr(ord("a")+y
)))
1312 elif y
== 4 and x
== 1:
1313 last
= self
.AppendItem(child
, "item %d-%s" % (x
, chr(ord("a")+y
)), wnd
=combobox
)
1315 last
= self
.AppendItem(child
, "item %d-%s" % (x
, chr(ord("a")+y
)), ct_type
=2)
1317 self
.SetPyData(last
, None)
1318 self
.SetItemImage(last
, 24, CT
.TreeItemIcon_Normal
)
1319 self
.SetItemImage(last
, 13, CT
.TreeItemIcon_Expanded
)
1323 item
= self
.AppendItem(last
, "item %d-%s-%d" % (x
, chr(ord("a")+y
), z
), ct_type
=1)
1325 item
= self
.AppendItem(last
, "item %d-%s-%d" % (x
, chr(ord("a")+y
), z
), ct_type
=2)
1327 item
= self
.AppendItem(last
, "item %d-%s-%d" % (x
, chr(ord("a")+y
), z
))
1328 self
.SetItemHyperText(item
, True)
1329 self
.SetPyData(item
, None)
1330 self
.SetItemImage(item
, 28, CT
.TreeItemIcon_Normal
)
1331 self
.SetItemImage(item
, numicons
-1, CT
.TreeItemIcon_Selected
)
1333 self
.Bind(wx
.EVT_LEFT_DCLICK
, self
.OnLeftDClick
)
1334 self
.Bind(wx
.EVT_IDLE
, self
.OnIdle
)
1337 self
.eventdict
= {'EVT_TREE_BEGIN_DRAG': self
.OnBeginDrag
, 'EVT_TREE_BEGIN_LABEL_EDIT': self
.OnBeginEdit
,
1338 'EVT_TREE_BEGIN_RDRAG': self
.OnBeginRDrag
, 'EVT_TREE_DELETE_ITEM': self
.OnDeleteItem
,
1339 'EVT_TREE_END_DRAG': self
.OnEndDrag
, 'EVT_TREE_END_LABEL_EDIT': self
.OnEndEdit
,
1340 'EVT_TREE_ITEM_ACTIVATED': self
.OnActivate
, 'EVT_TREE_ITEM_CHECKED': self
.OnItemCheck
,
1341 'EVT_TREE_ITEM_CHECKING': self
.OnItemChecking
, 'EVT_TREE_ITEM_COLLAPSED': self
.OnItemCollapsed
,
1342 'EVT_TREE_ITEM_COLLAPSING': self
.OnItemCollapsing
, 'EVT_TREE_ITEM_EXPANDED': self
.OnItemExpanded
,
1343 'EVT_TREE_ITEM_EXPANDING': self
.OnItemExpanding
, 'EVT_TREE_ITEM_GETTOOLTIP': self
.OnToolTip
,
1344 'EVT_TREE_ITEM_MENU': self
.OnItemMenu
, 'EVT_TREE_ITEM_RIGHT_CLICK': self
.OnRightDown
,
1345 'EVT_TREE_KEY_DOWN': self
.OnKey
, 'EVT_TREE_SEL_CHANGED': self
.OnSelChanged
,
1346 'EVT_TREE_SEL_CHANGING': self
.OnSelChanging
, "EVT_TREE_ITEM_HYPERLINK": self
.OnHyperLink
}
1348 mainframe
= wx
.GetTopLevelParent(self
)
1350 if not hasattr(mainframe
, "leftpanel"):
1351 self
.Bind(CT
.EVT_TREE_ITEM_EXPANDED
, self
.OnItemExpanded
)
1352 self
.Bind(CT
.EVT_TREE_ITEM_COLLAPSED
, self
.OnItemCollapsed
)
1353 self
.Bind(CT
.EVT_TREE_SEL_CHANGED
, self
.OnSelChanged
)
1354 self
.Bind(CT
.EVT_TREE_SEL_CHANGING
, self
.OnSelChanging
)
1355 self
.Bind(wx
.EVT_RIGHT_DOWN
, self
.OnRightDown
)
1356 self
.Bind(wx
.EVT_RIGHT_UP
, self
.OnRightUp
)
1358 for combos
in mainframe
.treeevents
:
1359 self
.BindEvents(combos
)
1361 if hasattr(mainframe
, "leftpanel"):
1362 self
.ChangeStyle(mainframe
.treestyles
)
1364 if not(self
.GetTreeStyle() & CT
.TR_HIDE_ROOT
):
1365 self
.SelectItem(self
.root
)
1366 self
.Expand(self
.root
)
1369 def BindEvents(self
, choice
, recreate
=False):
1371 value
= choice
.GetValue()
1372 text
= choice
.GetLabel()
1375 binder
= self
.eventdict
[text
]
1378 if evt
== "CT.EVT_TREE_BEGIN_RDRAG":
1379 self
.Bind(wx
.EVT_RIGHT_DOWN
, None)
1380 self
.Bind(wx
.EVT_RIGHT_UP
, None)
1381 self
.Bind(eval(evt
), binder
)
1383 self
.Bind(eval(evt
), None)
1384 if evt
== "CT.EVT_TREE_BEGIN_RDRAG":
1385 self
.Bind(wx
.EVT_RIGHT_DOWN
, self
.OnRightDown
)
1386 self
.Bind(wx
.EVT_RIGHT_UP
, self
.OnRightUp
)
1389 def ChangeStyle(self
, combos
):
1392 for combo
in combos
:
1393 if combo
.GetValue() == 1:
1394 style
= style |
eval("CT." + combo
.GetLabel())
1396 if self
.GetTreeStyle() != style
:
1397 self
.SetTreeStyle(style
)
1400 def OnCompareItems(self
, item1
, item2
):
1402 t1
= self
.GetItemText(item1
)
1403 t2
= self
.GetItemText(item2
)
1405 self
.log
.write('compare: ' + t1
+ ' <> ' + t2
+ "\n")
1415 def OnIdle(self
, event
):
1419 if self
.gauge
.IsEnabled() and self
.gauge
.IsShown():
1420 self
.count
= self
.count
+ 1
1422 if self
.count
>= 50:
1425 self
.gauge
.SetValue(self
.count
)
1433 def OnRightDown(self
, event
):
1435 pt
= event
.GetPosition()
1436 item
, flags
= self
.HitTest(pt
)
1440 self
.log
.write("OnRightClick: %s, %s, %s" % (self
.GetItemText(item
), type(item
), item
.__class
__) + "\n")
1441 self
.SelectItem(item
)
1444 def OnRightUp(self
, event
):
1452 if not self
.IsEnabled(item
):
1456 # Item Text Appearance
1457 ishtml
= self
.IsItemHyperText(item
)
1458 back
= self
.GetItemBackgroundColour(item
)
1459 fore
= self
.GetItemTextColour(item
)
1460 isbold
= self
.IsBold(item
)
1461 font
= self
.GetItemFont(item
)
1464 normal
= self
.GetItemImage(item
, CT
.TreeItemIcon_Normal
)
1465 selected
= self
.GetItemImage(item
, CT
.TreeItemIcon_Selected
)
1466 expanded
= self
.GetItemImage(item
, CT
.TreeItemIcon_Expanded
)
1467 selexp
= self
.GetItemImage(item
, CT
.TreeItemIcon_SelectedExpanded
)
1469 # Enabling/Disabling Windows Associated To An Item
1470 haswin
= self
.GetItemWindow(item
)
1472 # Enabling/Disabling Items
1473 enabled
= self
.IsEnabled(item
)
1475 # Generic Item's Info
1476 children
= self
.GetChildrenCount(item
)
1477 itemtype
= self
.GetItemType(item
)
1478 text
= self
.GetItemText(item
)
1479 pydata
= self
.GetPyData(item
)
1482 self
.itemdict
= {"ishtml": ishtml
, "back": back
, "fore": fore
, "isbold": isbold
,
1483 "font": font
, "normal": normal
, "selected": selected
, "expanded": expanded
,
1484 "selexp": selexp
, "haswin": haswin
, "children": children
,
1485 "itemtype": itemtype
, "text": text
, "pydata": pydata
, "enabled": enabled
}
1489 item1
= menu
.Append(wx
.ID_ANY
, "Change Item Background Colour")
1490 item2
= menu
.Append(wx
.ID_ANY
, "Modify Item Text Colour")
1491 menu
.AppendSeparator()
1493 strs
= "Make Item Text Not Bold"
1495 strs
= "Make Item Text Bold"
1496 item3
= menu
.Append(wx
.ID_ANY
, strs
)
1497 item4
= menu
.Append(wx
.ID_ANY
, "Change Item Font")
1498 menu
.AppendSeparator()
1500 strs
= "Set Item As Non-Hyperlink"
1502 strs
= "Set Item As Hyperlink"
1503 item5
= menu
.Append(wx
.ID_ANY
, strs
)
1504 menu
.AppendSeparator()
1506 enabled
= self
.GetItemWindowEnabled(item
)
1508 strs
= "Disable Associated Widget"
1510 strs
= "Enable Associated Widget"
1512 strs
= "Enable Associated Widget"
1513 item6
= menu
.Append(wx
.ID_ANY
, strs
)
1518 item7
= menu
.Append(wx
.ID_ANY
, "Disable Item")
1520 menu
.AppendSeparator()
1521 item8
= menu
.Append(wx
.ID_ANY
, "Change Item Icons")
1522 menu
.AppendSeparator()
1523 item9
= menu
.Append(wx
.ID_ANY
, "Get Other Information For This Item")
1524 menu
.AppendSeparator()
1526 item10
= menu
.Append(wx
.ID_ANY
, "Delete Item")
1527 if item
== self
.GetRootItem():
1528 item10
.Enable(False)
1529 item11
= menu
.Append(wx
.ID_ANY
, "Prepend An Item")
1530 item12
= menu
.Append(wx
.ID_ANY
, "Append An Item")
1532 self
.Bind(wx
.EVT_MENU
, self
.OnItemBackground
, item1
)
1533 self
.Bind(wx
.EVT_MENU
, self
.OnItemForeground
, item2
)
1534 self
.Bind(wx
.EVT_MENU
, self
.OnItemBold
, item3
)
1535 self
.Bind(wx
.EVT_MENU
, self
.OnItemFont
, item4
)
1536 self
.Bind(wx
.EVT_MENU
, self
.OnItemHyperText
, item5
)
1537 self
.Bind(wx
.EVT_MENU
, self
.OnEnableWindow
, item6
)
1538 self
.Bind(wx
.EVT_MENU
, self
.OnDisableItem
, item7
)
1539 self
.Bind(wx
.EVT_MENU
, self
.OnItemIcons
, item8
)
1540 self
.Bind(wx
.EVT_MENU
, self
.OnItemInfo
, item9
)
1541 self
.Bind(wx
.EVT_MENU
, self
.OnItemDelete
, item10
)
1542 self
.Bind(wx
.EVT_MENU
, self
.OnItemPrepend
, item11
)
1543 self
.Bind(wx
.EVT_MENU
, self
.OnItemAppend
, item12
)
1545 self
.PopupMenu(menu
)
1550 def OnItemBackground(self
, event
):
1552 colourdata
= wx
.ColourData()
1553 colourdata
.SetColour(self
.itemdict
["back"])
1554 dlg
= wx
.ColourDialog(self
, colourdata
)
1556 dlg
.GetColourData().SetChooseFull(True)
1558 if dlg
.ShowModal() == wx
.ID_OK
:
1559 data
= dlg
.GetColourData()
1560 col1
= data
.GetColour().Get()
1561 self
.SetItemBackgroundColour(self
.current
, col1
)
1566 def OnItemForeground(self
, event
):
1568 colourdata
= wx
.ColourData()
1569 colourdata
.SetColour(self
.itemdict
["fore"])
1570 dlg
= wx
.ColourDialog(self
, colourdata
)
1572 dlg
.GetColourData().SetChooseFull(True)
1574 if dlg
.ShowModal() == wx
.ID_OK
:
1575 data
= dlg
.GetColourData()
1576 col1
= data
.GetColour().Get()
1577 self
.SetItemTextColour(self
.current
, col1
)
1582 def OnItemBold(self
, event
):
1584 self
.SetItemBold(self
.current
, not self
.itemdict
["isbold"])
1588 def OnItemFont(self
, event
):
1590 data
= wx
.FontData()
1591 font
= self
.itemdict
["font"]
1594 font
= wx
.SystemSettings_GetFont(wx
.SYS_DEFAULT_GUI_FONT
)
1596 data
.SetInitialFont(font
)
1598 dlg
= wx
.FontDialog(self
, data
)
1600 if dlg
.ShowModal() == wx
.ID_OK
:
1601 data
= dlg
.GetFontData()
1602 font
= data
.GetChosenFont()
1603 self
.SetItemFont(self
.current
, font
)
1609 def OnItemHyperText(self
, event
):
1611 self
.SetItemHyperText(self
.current
, not self
.itemdict
["ishtml"])
1615 def OnEnableWindow(self
, event
):
1617 enable
= self
.GetItemWindowEnabled(self
.current
)
1618 self
.SetItemWindowEnabled(self
.current
, not enable
)
1623 def OnDisableItem(self
, event
):
1625 self
.EnableItem(self
.current
, False)
1629 def OnItemIcons(self
, event
):
1631 bitmaps
= [self
.itemdict
["normal"], self
.itemdict
["selected"],
1632 self
.itemdict
["expanded"], self
.itemdict
["selexp"]]
1634 wx
.BeginBusyCursor()
1635 dlg
= TreeIcons(self
, -1, bitmaps
=bitmaps
)
1641 def SetNewIcons(self
, bitmaps
):
1643 self
.SetItemImage(self
.current
, bitmaps
[0], CT
.TreeItemIcon_Normal
)
1644 self
.SetItemImage(self
.current
, bitmaps
[1], CT
.TreeItemIcon_Selected
)
1645 self
.SetItemImage(self
.current
, bitmaps
[2], CT
.TreeItemIcon_Expanded
)
1646 self
.SetItemImage(self
.current
, bitmaps
[3], CT
.TreeItemIcon_SelectedExpanded
)
1649 def OnItemInfo(self
, event
):
1651 itemtext
= self
.itemdict
["text"]
1652 numchildren
= str(self
.itemdict
["children"])
1653 itemtype
= self
.itemdict
["itemtype"]
1654 pydata
= repr(type(self
.itemdict
["pydata"]))
1659 itemtype
= "CheckBox"
1661 itemtype
= "RadioButton"
1663 strs
= "Information On Selected Item:\n\n" + "Text: " + itemtext
+ "\n" \
1664 "Number Of Children: " + numchildren
+ "\n" \
1665 "Item Type: " + itemtype
+ "\n" \
1666 "Item Data Type: " + pydata
+ "\n"
1668 dlg
= wx
.MessageDialog(self
, strs
, "CustomTreeCtrlDemo Info", wx
.OK | wx
.ICON_INFORMATION
)
1675 def OnItemDelete(self
, event
):
1677 strs
= "Are You Sure You Want To Delete Item " + self
.GetItemText(self
.current
) + "?"
1678 dlg
= wx
.MessageDialog(None, strs
, 'Deleting Item', wx
.YES_NO | wx
.NO_DEFAULT | wx
.CANCEL | wx
.ICON_QUESTION
)
1680 if dlg
.ShowModal() in [wx
.ID_NO
, wx
.ID_CANCEL
]:
1686 self
.DeleteChildren(self
.current
)
1687 self
.Delete(self
.current
)
1693 def OnItemPrepend(self
, event
):
1695 dlg
= wx
.TextEntryDialog(self
, "Please Enter The New Item Name", 'Item Naming', 'Python')
1697 if dlg
.ShowModal() == wx
.ID_OK
:
1698 newname
= dlg
.GetValue()
1699 newitem
= self
.PrependItem(self
.current
, newname
)
1700 self
.EnsureVisible(newitem
)
1706 def OnItemAppend(self
, event
):
1708 dlg
= wx
.TextEntryDialog(self
, "Please Enter The New Item Name", 'Item Naming', 'Python')
1710 if dlg
.ShowModal() == wx
.ID_OK
:
1711 newname
= dlg
.GetValue()
1712 newitem
= self
.AppendItem(self
.current
, newname
)
1713 self
.EnsureVisible(newitem
)
1719 def OnBeginEdit(self
, event
):
1721 self
.log
.write("OnBeginEdit" + "\n")
1722 # show how to prevent edit...
1723 item
= event
.GetItem()
1724 if item
and self
.GetItemText(item
) == "The Root Item":
1726 self
.log
.write("You can't edit this one..." + "\n")
1728 # Lets just see what's visible of its children
1730 root
= event
.GetItem()
1731 (child
, cookie
) = self
.GetFirstChild(root
)
1734 self
.log
.write("Child [%s] visible = %d" % (self
.GetItemText(child
), self
.IsVisible(child
)) + "\n")
1735 (child
, cookie
) = self
.GetNextChild(root
, cookie
)
1740 def OnEndEdit(self
, event
):
1742 self
.log
.write("OnEndEdit: %s %s" %(event
.IsEditCancelled(), event
.GetLabel()))
1743 # show how to reject edit, we'll not allow any digits
1744 for x
in event
.GetLabel():
1745 if x
in string
.digits
:
1746 self
.log
.write(", You can't enter digits..." + "\n")
1750 self
.log
.write("\n")
1753 def OnLeftDClick(self
, event
):
1755 pt
= event
.GetPosition()
1756 item
, flags
= self
.HitTest(pt
)
1757 if item
and (flags
& CT
.TREE_HITTEST_ONITEMLABEL
):
1758 if self
.GetTreeStyle() & CT
.TR_EDIT_LABELS
:
1759 self
.log
.write("OnLeftDClick: %s (manually starting label edit)"% self
.GetItemText(item
) + "\n")
1760 self
.EditLabel(item
)
1762 self
.log
.write("OnLeftDClick: Cannot Start Manual Editing, Missing Style TR_EDIT_LABELS\n")
1767 def OnItemExpanded(self
, event
):
1769 item
= event
.GetItem()
1771 self
.log
.write("OnItemExpanded: %s" % self
.GetItemText(item
) + "\n")
1774 def OnItemExpanding(self
, event
):
1776 item
= event
.GetItem()
1778 self
.log
.write("OnItemExpanding: %s" % self
.GetItemText(item
) + "\n")
1783 def OnItemCollapsed(self
, event
):
1785 item
= event
.GetItem()
1787 self
.log
.write("OnItemCollapsed: %s" % self
.GetItemText(item
) + "\n")
1790 def OnItemCollapsing(self
, event
):
1792 item
= event
.GetItem()
1794 self
.log
.write("OnItemCollapsing: %s" % self
.GetItemText(item
) + "\n")
1799 def OnSelChanged(self
, event
):
1801 self
.item
= event
.GetItem()
1803 self
.log
.write("OnSelChanged: %s" % self
.GetItemText(self
.item
))
1804 if wx
.Platform
== '__WXMSW__':
1805 self
.log
.write(", BoundingRect: %s" % self
.GetBoundingRect(self
.item
, True) + "\n")
1807 self
.log
.write("\n")
1812 def OnSelChanging(self
, event
):
1814 item
= event
.GetItem()
1815 olditem
= event
.GetOldItem()
1819 olditemtext
= "None"
1821 olditemtext
= self
.GetItemText(olditem
)
1822 self
.log
.write("OnSelChanging: From %s" % olditemtext
+ " To %s" % self
.GetItemText(item
) + "\n")
1827 def OnBeginDrag(self
, event
):
1829 self
.item
= event
.GetItem()
1831 self
.log
.write("Beginning Drag..." + "\n")
1837 def OnBeginRDrag(self
, event
):
1839 self
.item
= event
.GetItem()
1841 self
.log
.write("Beginning Right Drag..." + "\n")
1847 def OnEndDrag(self
, event
):
1849 self
.item
= event
.GetItem()
1851 self
.log
.write("Ending Drag!" + "\n")
1856 def OnDeleteItem(self
, event
):
1858 item
= event
.GetItem()
1863 self
.log
.write("Deleting Item: %s" % self
.GetItemText(item
) + "\n")
1867 def OnItemCheck(self
, event
):
1869 item
= event
.GetItem()
1870 self
.log
.write("Item " + self
.GetItemText(item
) + " Has Been Checked!\n")
1874 def OnItemChecking(self
, event
):
1876 item
= event
.GetItem()
1877 self
.log
.write("Item " + self
.GetItemText(item
) + " Is Being Checked...\n")
1881 def OnToolTip(self
, event
):
1883 item
= event
.GetItem()
1885 event
.SetToolTip(wx
.ToolTip(self
.GetItemText(item
)))
1888 def OnItemMenu(self
, event
):
1890 item
= event
.GetItem()
1892 self
.log
.write("OnItemMenu: %s" % self
.GetItemText(item
) + "\n")
1897 def OnKey(self
, event
):
1899 keycode
= event
.GetKeyCode()
1900 keyname
= keyMap
.get(keycode
, None)
1902 if keycode
== wx
.WXK_BACK
:
1903 self
.log
.write("OnKeyDown: HAHAHAHA! I Vetoed Your Backspace! HAHAHAHA\n")
1907 if "unicode" in wx
.PlatformInfo
:
1908 keycode
= event
.GetUnicodeKey()
1910 keycode
= event
.GetKeyCode()
1911 keyname
= "\"" + unichr(event
.GetUnicodeKey()) + "\""
1913 keyname
= "Ctrl-%s" % chr(ord('A') + keycode
-1)
1919 keyname
= "Ctrl-%s" % chr(ord('A') + keycode
-1)
1921 keyname
= "\"%s\"" % chr(keycode
)
1923 keyname
= "unknown (%s)" % keycode
1925 self
.log
.write("OnKeyDown: You Pressed '" + keyname
+ "'\n")
1930 def OnActivate(self
, event
):
1933 self
.log
.write("OnActivate: %s" % self
.GetItemText(self
.item
) + "\n")
1938 def OnHyperLink(self
, event
):
1940 item
= event
.GetItem()
1942 self
.log
.write("OnHyperLink: %s" % self
.GetItemText(self
.item
) + "\n")
1945 def OnTextCtrl(self
, event
):
1947 char
= chr(event
.GetKeyCode())
1948 self
.log
.write("EDITING THE TEXTCTRL: You Wrote '" + char
+ \
1949 "' (KeyCode = " + str(event
.GetKeyCode()) + ")\n")
1953 def OnComboBox(self
, event
):
1955 selection
= event
.GetEventObject().GetValue()
1956 self
.log
.write("CHOICE FROM COMBOBOX: You Chose '" + selection
+ "'\n")
1961 #----------------------------------------------------------------------
1963 def runTest(frame
, nb
, log
):
1964 win
= CustomTreeCtrlDemo(nb
, log
)
1967 #----------------------------------------------------------------------
1971 overview
= CT
.__doc
__
1974 if __name__
== '__main__':
1977 run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])