| 174 |
|
#---------------------------------------------------------------------------
|
| 175 |
|
|
| 176 |
|
|
| 177 |
|
##penstyle = ["wx.SOLID", "wx.TRANSPARENT", "wx.DOT", "wx.LONG_DASH", "wx.DOT_DASH", "wx.USER_DASH",
|
| 178 |
|
## "wx.BDIAGONAL_HATCH", "wx.CROSSDIAG_HATCH", "wx.FDIAGONAL_HATCH", "wx.CROSS_HATCH",
|
| 179 |
|
## "wx.HORIZONTAL_HATCH", "wx.VERTICAL_HATCH"]
|
| 180 |
|
|
| 181 |
|
ArtIDs = [ "None",
|
| 182 |
|
"wx.ART_ADD_BOOKMARK",
|
| 183 |
|
"wx.ART_DEL_BOOKMARK",
|
| 184 |
|
"wx.ART_HELP_SIDE_PANEL",
|
| 185 |
|
"wx.ART_HELP_SETTINGS",
|
| 186 |
|
"wx.ART_HELP_BOOK",
|
| 187 |
|
"wx.ART_HELP_FOLDER",
|
| 188 |
|
"wx.ART_HELP_PAGE",
|
| 189 |
|
"wx.ART_GO_BACK",
|
| 190 |
|
"wx.ART_GO_FORWARD",
|
| 191 |
|
"wx.ART_GO_UP",
|
| 192 |
|
"wx.ART_GO_DOWN",
|
| 193 |
|
"wx.ART_GO_TO_PARENT",
|
| 194 |
|
"wx.ART_GO_HOME",
|
| 195 |
|
"wx.ART_FILE_OPEN",
|
| 196 |
|
"wx.ART_PRINT",
|
| 197 |
|
"wx.ART_HELP",
|
| 198 |
|
"wx.ART_TIP",
|
| 199 |
|
"wx.ART_REPORT_VIEW",
|
| 200 |
|
"wx.ART_LIST_VIEW",
|
| 201 |
|
"wx.ART_NEW_DIR",
|
| 202 |
|
"wx.ART_HARDDISK",
|
| 203 |
|
"wx.ART_FLOPPY",
|
| 204 |
|
"wx.ART_CDROM",
|
| 205 |
|
"wx.ART_REMOVABLE",
|
| 206 |
|
"wx.ART_FOLDER",
|
| 207 |
|
"wx.ART_FOLDER_OPEN",
|
| 208 |
|
"wx.ART_GO_DIR_UP",
|
| 209 |
|
"wx.ART_EXECUTABLE_FILE",
|
| 210 |
|
"wx.ART_NORMAL_FILE",
|
| 211 |
|
"wx.ART_TICK_MARK",
|
| 212 |
|
"wx.ART_CROSS_MARK",
|
| 213 |
|
"wx.ART_ERROR",
|
| 214 |
|
"wx.ART_QUESTION",
|
| 215 |
|
"wx.ART_WARNING",
|
| 216 |
|
"wx.ART_INFORMATION",
|
| 217 |
|
"wx.ART_MISSING_IMAGE",
|
| 218 |
|
"SmileBitmap"
|
| 219 |
|
]
|
| 220 |
|
|
| 221 |
|
keyMap = {
|
| 222 |
|
wx.WXK_BACK : "WXK_BACK",
|
| 223 |
|
wx.WXK_TAB : "WXK_TAB",
|
| 224 |
|
wx.WXK_RETURN : "WXK_RETURN",
|
| 225 |
|
wx.WXK_ESCAPE : "WXK_ESCAPE",
|
| 226 |
|
wx.WXK_SPACE : "WXK_SPACE",
|
| 227 |
|
wx.WXK_DELETE : "WXK_DELETE",
|
| 228 |
|
wx.WXK_START : "WXK_START",
|
| 229 |
|
wx.WXK_LBUTTON : "WXK_LBUTTON",
|
| 230 |
|
wx.WXK_RBUTTON : "WXK_RBUTTON",
|
| 231 |
|
wx.WXK_CANCEL : "WXK_CANCEL",
|
| 232 |
|
wx.WXK_MBUTTON : "WXK_MBUTTON",
|
| 233 |
|
wx.WXK_CLEAR : "WXK_CLEAR",
|
| 234 |
|
wx.WXK_SHIFT : "WXK_SHIFT",
|
| 235 |
|
wx.WXK_ALT : "WXK_ALT",
|
| 236 |
|
wx.WXK_CONTROL : "WXK_CONTROL",
|
| 237 |
|
wx.WXK_MENU : "WXK_MENU",
|
| 238 |
|
wx.WXK_PAUSE : "WXK_PAUSE",
|
| 239 |
|
wx.WXK_CAPITAL : "WXK_CAPITAL",
|
| 240 |
|
wx.WXK_PRIOR : "WXK_PRIOR",
|
| 241 |
|
wx.WXK_NEXT : "WXK_NEXT",
|
| 242 |
|
wx.WXK_END : "WXK_END",
|
| 243 |
|
wx.WXK_HOME : "WXK_HOME",
|
| 244 |
|
wx.WXK_LEFT : "WXK_LEFT",
|
| 245 |
|
wx.WXK_UP : "WXK_UP",
|
| 246 |
|
wx.WXK_RIGHT : "WXK_RIGHT",
|
| 247 |
|
wx.WXK_DOWN : "WXK_DOWN",
|
| 248 |
|
wx.WXK_SELECT : "WXK_SELECT",
|
| 249 |
|
wx.WXK_PRINT : "WXK_PRINT",
|
| 250 |
|
wx.WXK_EXECUTE : "WXK_EXECUTE",
|
| 251 |
|
wx.WXK_SNAPSHOT : "WXK_SNAPSHOT",
|
| 252 |
|
wx.WXK_INSERT : "WXK_INSERT",
|
| 253 |
|
wx.WXK_HELP : "WXK_HELP",
|
| 254 |
|
wx.WXK_NUMPAD0 : "WXK_NUMPAD0",
|
| 255 |
|
wx.WXK_NUMPAD1 : "WXK_NUMPAD1",
|
| 256 |
|
wx.WXK_NUMPAD2 : "WXK_NUMPAD2",
|
| 257 |
|
wx.WXK_NUMPAD3 : "WXK_NUMPAD3",
|
| 258 |
|
wx.WXK_NUMPAD4 : "WXK_NUMPAD4",
|
| 259 |
|
wx.WXK_NUMPAD5 : "WXK_NUMPAD5",
|
| 260 |
|
wx.WXK_NUMPAD6 : "WXK_NUMPAD6",
|
| 261 |
|
wx.WXK_NUMPAD7 : "WXK_NUMPAD7",
|
| 262 |
|
wx.WXK_NUMPAD8 : "WXK_NUMPAD8",
|
| 263 |
|
wx.WXK_NUMPAD9 : "WXK_NUMPAD9",
|
| 264 |
|
wx.WXK_MULTIPLY : "WXK_MULTIPLY",
|
| 265 |
|
wx.WXK_ADD : "WXK_ADD",
|
| 266 |
|
wx.WXK_SEPARATOR : "WXK_SEPARATOR",
|
| 267 |
|
wx.WXK_SUBTRACT : "WXK_SUBTRACT",
|
| 268 |
|
wx.WXK_DECIMAL : "WXK_DECIMAL",
|
| 269 |
|
wx.WXK_DIVIDE : "WXK_DIVIDE",
|
| 270 |
|
wx.WXK_F1 : "WXK_F1",
|
| 271 |
|
wx.WXK_F2 : "WXK_F2",
|
| 272 |
|
wx.WXK_F3 : "WXK_F3",
|
| 273 |
|
wx.WXK_F4 : "WXK_F4",
|
| 274 |
|
wx.WXK_F5 : "WXK_F5",
|
| 275 |
|
wx.WXK_F6 : "WXK_F6",
|
| 276 |
|
wx.WXK_F7 : "WXK_F7",
|
| 277 |
|
wx.WXK_F8 : "WXK_F8",
|
| 278 |
|
wx.WXK_F9 : "WXK_F9",
|
| 279 |
|
wx.WXK_F10 : "WXK_F10",
|
| 280 |
|
wx.WXK_F11 : "WXK_F11",
|
| 281 |
|
wx.WXK_F12 : "WXK_F12",
|
| 282 |
|
wx.WXK_F13 : "WXK_F13",
|
| 283 |
|
wx.WXK_F14 : "WXK_F14",
|
| 284 |
|
wx.WXK_F15 : "WXK_F15",
|
| 285 |
|
wx.WXK_F16 : "WXK_F16",
|
| 286 |
|
wx.WXK_F17 : "WXK_F17",
|
| 287 |
|
wx.WXK_F18 : "WXK_F18",
|
| 288 |
|
wx.WXK_F19 : "WXK_F19",
|
| 289 |
|
wx.WXK_F20 : "WXK_F20",
|
| 290 |
|
wx.WXK_F21 : "WXK_F21",
|
| 291 |
|
wx.WXK_F22 : "WXK_F22",
|
| 292 |
|
wx.WXK_F23 : "WXK_F23",
|
| 293 |
|
wx.WXK_F24 : "WXK_F24",
|
| 294 |
|
wx.WXK_NUMLOCK : "WXK_NUMLOCK",
|
| 295 |
|
wx.WXK_SCROLL : "WXK_SCROLL",
|
| 296 |
|
wx.WXK_PAGEUP : "WXK_PAGEUP",
|
| 297 |
|
wx.WXK_PAGEDOWN : "WXK_PAGEDOWN",
|
| 298 |
|
wx.WXK_NUMPAD_SPACE : "WXK_NUMPAD_SPACE",
|
| 299 |
|
wx.WXK_NUMPAD_TAB : "WXK_NUMPAD_TAB",
|
| 300 |
|
wx.WXK_NUMPAD_ENTER : "WXK_NUMPAD_ENTER",
|
| 301 |
|
wx.WXK_NUMPAD_F1 : "WXK_NUMPAD_F1",
|
| 302 |
|
wx.WXK_NUMPAD_F2 : "WXK_NUMPAD_F2",
|
| 303 |
|
wx.WXK_NUMPAD_F3 : "WXK_NUMPAD_F3",
|
| 304 |
|
wx.WXK_NUMPAD_F4 : "WXK_NUMPAD_F4",
|
| 305 |
|
wx.WXK_NUMPAD_HOME : "WXK_NUMPAD_HOME",
|
| 306 |
|
wx.WXK_NUMPAD_LEFT : "WXK_NUMPAD_LEFT",
|
| 307 |
|
wx.WXK_NUMPAD_UP : "WXK_NUMPAD_UP",
|
| 308 |
|
wx.WXK_NUMPAD_RIGHT : "WXK_NUMPAD_RIGHT",
|
| 309 |
|
wx.WXK_NUMPAD_DOWN : "WXK_NUMPAD_DOWN",
|
| 310 |
|
wx.WXK_NUMPAD_PRIOR : "WXK_NUMPAD_PRIOR",
|
| 311 |
|
wx.WXK_NUMPAD_PAGEUP : "WXK_NUMPAD_PAGEUP",
|
| 312 |
|
wx.WXK_NUMPAD_NEXT : "WXK_NUMPAD_NEXT",
|
| 313 |
|
wx.WXK_NUMPAD_PAGEDOWN : "WXK_NUMPAD_PAGEDOWN",
|
| 314 |
|
wx.WXK_NUMPAD_END : "WXK_NUMPAD_END",
|
| 315 |
|
wx.WXK_NUMPAD_BEGIN : "WXK_NUMPAD_BEGIN",
|
| 316 |
|
wx.WXK_NUMPAD_INSERT : "WXK_NUMPAD_INSERT",
|
| 317 |
|
wx.WXK_NUMPAD_DELETE : "WXK_NUMPAD_DELETE",
|
| 318 |
|
wx.WXK_NUMPAD_EQUAL : "WXK_NUMPAD_EQUAL",
|
| 319 |
|
wx.WXK_NUMPAD_MULTIPLY : "WXK_NUMPAD_MULTIPLY",
|
| 320 |
|
wx.WXK_NUMPAD_ADD : "WXK_NUMPAD_ADD",
|
| 321 |
|
wx.WXK_NUMPAD_SEPARATOR : "WXK_NUMPAD_SEPARATOR",
|
| 322 |
|
wx.WXK_NUMPAD_SUBTRACT : "WXK_NUMPAD_SUBTRACT",
|
| 323 |
|
wx.WXK_NUMPAD_DECIMAL : "WXK_NUMPAD_DECIMAL",
|
| 324 |
|
wx.WXK_NUMPAD_DIVIDE : "WXK_NUMPAD_DIVIDE"
|
| 325 |
|
}
|
| 326 |
|
|
| 327 |
|
#---------------------------------------------------------------------------
|
| 328 |
|
# Just A Dialog To Select Tree Items Icons
|
| 329 |
|
#---------------------------------------------------------------------------
|
| 330 |
|
class TreeIcons(wx.Dialog):
|
| 331 |
|
|
| 332 |
|
def __init__(self, parent=None, id=-1, title="", pos=wx.DefaultPosition,
|
| 333 |
|
size=wx.DefaultSize, style=wx.DEFAULT_DIALOG_STYLE, oldpen=None,
|
| 334 |
|
bitmaps=None):
|
| 335 |
|
|
| 336 |
|
wx.Dialog.__init__(self, parent, id, title, pos, size, style)
|
| 337 |
|
|
| 338 |
|
self.bitmaps = [None, None, None, None]
|
| 339 |
|
empty = wx.EmptyBitmap(16, 16)
|
| 340 |
|
self.parent = parent
|
| 341 |
|
|
| 342 |
|
self.bitmaps[0] = wx.StaticBitmap(self, -1, empty)
|
| 343 |
|
self.combonormal = wx.ComboBox(self, -1, choices=ArtIDs, style=wx.CB_DROPDOWN|wx.CB_READONLY)
|
| 344 |
|
self.bitmaps[1] = wx.StaticBitmap(self, -1, empty)
|
| 345 |
|
self.comboselected = wx.ComboBox(self, -1, choices=ArtIDs, style=wx.CB_DROPDOWN|wx.CB_READONLY)
|
| 346 |
|
self.bitmaps[2] = wx.StaticBitmap(self, -1, empty)
|
| 347 |
|
self.comboexpanded = wx.ComboBox(self, -1, choices=ArtIDs, style=wx.CB_DROPDOWN|wx.CB_READONLY)
|
| 348 |
|
self.bitmaps[3] = wx.StaticBitmap(self, -1, empty)
|
| 349 |
|
self.comboselectedexpanded = wx.ComboBox(self, -1, choices=ArtIDs, style=wx.CB_DROPDOWN|wx.CB_READONLY)
|
| 350 |
|
self.okbutton = wx.Button(self, wx.ID_OK)
|
| 351 |
|
self.cancelbutton = wx.Button(self, wx.ID_CANCEL)
|
| 352 |
|
|
| 353 |
|
self.combonormal.SetSelection(bitmaps[0] >= 0 and bitmaps[0]+1 or 0)
|
| 354 |
|
self.comboselected.SetSelection(bitmaps[1] >= 0 and bitmaps[1]+1 or 0)
|
| 355 |
|
self.comboexpanded.SetSelection(bitmaps[2] >= 0 and bitmaps[2]+1 or 0)
|
| 356 |
|
self.comboselectedexpanded.SetSelection(bitmaps[3] >= 0 and bitmaps[3]+1 or 0)
|
| 357 |
|
|
| 358 |
|
self.GetBitmaps(bitmaps)
|
| 359 |
|
|
| 360 |
|
self.__set_properties()
|
| 361 |
|
self.__do_layout()
|
| 362 |
|
|
| 363 |
|
self.Bind(wx.EVT_COMBOBOX, self.OnComboNormal, self.combonormal)
|
| 364 |
|
self.Bind(wx.EVT_COMBOBOX, self.OnComboSelected, self.comboselected)
|
| 365 |
|
self.Bind(wx.EVT_COMBOBOX, self.OnComboExpanded, self.comboexpanded)
|
| 366 |
|
self.Bind(wx.EVT_COMBOBOX, self.OnComboSelectedExpanded, self.comboselectedexpanded)
|
| 367 |
|
self.Bind(wx.EVT_BUTTON, self.OnOk, self.okbutton)
|
| 368 |
|
self.Bind(wx.EVT_BUTTON, self.OnCancel, self.cancelbutton)
|
| 369 |
|
|
| 370 |
|
|
| 371 |
|
def __set_properties(self):
|
| 372 |
|
|
| 373 |
|
self.SetTitle("Item Icon Selector")
|
| 374 |
|
self.okbutton.SetDefault()
|
| 375 |
|
|
| 376 |
|
|
| 377 |
|
def __do_layout(self):
|
| 378 |
|
|
| 379 |
|
mainsizer = wx.BoxSizer(wx.VERTICAL)
|
| 380 |
|
sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
|
| 381 |
|
gridsizer = wx.FlexGridSizer(4, 3, 5, 5)
|
| 382 |
|
label_1 = wx.StaticText(self, -1, "Please Choose The Icons For This Item (All Are Optional):")
|
| 383 |
|
label_1.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, ""))
|
| 384 |
|
mainsizer.Add(label_1, 0, wx.ALL|wx.ADJUST_MINSIZE, 10)
|
| 385 |
|
label_2 = wx.StaticText(self, -1, "TreeIcon_Normal:")
|
| 386 |
|
gridsizer.Add(label_2, 0, wx.LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
|
| 387 |
|
gridsizer.Add(self.bitmaps[0], 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
|
| 388 |
|
gridsizer.Add(self.combonormal, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
|
| 389 |
|
label_3 = wx.StaticText(self, -1, "TreeIcon_Selected:")
|
| 390 |
|
gridsizer.Add(label_3, 0, wx.LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
|
| 391 |
|
gridsizer.Add(self.bitmaps[1], 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
|
| 392 |
|
gridsizer.Add(self.comboselected, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
|
| 393 |
|
label_4 = wx.StaticText(self, -1, "TreeIcon_Expanded:")
|
| 394 |
|
gridsizer.Add(label_4, 0, wx.LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
|
| 395 |
|
gridsizer.Add(self.bitmaps[2], 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
|
| 396 |
|
gridsizer.Add(self.comboexpanded, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
|
| 397 |
|
label_5 = wx.StaticText(self, -1, "TreeIcon_SelectedExpanded:")
|
| 398 |
|
gridsizer.Add(label_5, 0, wx.LEFT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
|
| 399 |
|
gridsizer.Add(self.bitmaps[3], 0, wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5)
|
| 400 |
|
gridsizer.Add(self.comboselectedexpanded, 0, wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 0)
|
| 401 |
|
gridsizer.AddGrowableCol(0)
|
| 402 |
|
gridsizer.AddGrowableCol(1)
|
| 403 |
|
gridsizer.AddGrowableCol(2)
|
| 404 |
|
mainsizer.Add(gridsizer, 0, wx.ALL|wx.EXPAND, 5)
|
| 405 |
|
sizer_2.Add(self.okbutton, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 20)
|
| 406 |
|
sizer_2.Add((20, 20), 1, wx.ADJUST_MINSIZE, 0)
|
| 407 |
|
sizer_2.Add(self.cancelbutton, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 20)
|
| 408 |
|
mainsizer.Add(sizer_2, 1, wx.EXPAND, 0)
|
| 409 |
|
self.SetAutoLayout(True)
|
| 410 |
|
self.SetSizer(mainsizer)
|
| 411 |
|
mainsizer.Fit(self)
|
| 412 |
|
mainsizer.SetSizeHints(self)
|
| 413 |
|
self.Layout()
|
| 414 |
|
self.Centre()
|
| 415 |
|
|
| 416 |
|
|
| 417 |
|
def OnComboNormal(self, event):
|
| 418 |
|
|
| 419 |
|
input = event.GetSelection()
|
| 420 |
|
self.GetBitmap(input, 0)
|
| 421 |
|
event.Skip()
|
| 422 |
|
|
| 423 |
|
|
| 424 |
|
def OnComboSelected(self, event):
|
| 425 |
|
|
| 426 |
|
input = event.GetSelection()
|
| 427 |
|
self.GetBitmap(input, 1)
|
| 428 |
|
event.Skip()
|
| 429 |
|
|
| 430 |
|
|
| 431 |
|
def OnComboExpanded(self, event):
|
| 432 |
|
|
| 433 |
|
input = event.GetSelection()
|
| 434 |
|
self.GetBitmap(input, 2)
|
| 435 |
|
event.Skip()
|
| 436 |
|
|
| 437 |
|
|
| 438 |
|
def OnComboSelectedExpanded(self, event):
|
| 439 |
|
|
| 440 |
|
input = event.GetSelection()
|
| 441 |
|
self.GetBitmap(input, 3)
|
| 442 |
|
event.Skip()
|
| 443 |
|
|
| 444 |
|
|
| 445 |
|
def OnOk(self, event):
|
| 446 |
|
|
| 447 |
|
bitmaps = [-1, -1, -1, -1]
|
| 448 |
|
normal = self.combonormal.GetSelection()
|
| 449 |
|
selected = self.comboselected.GetSelection()
|
| 450 |
|
expanded = self.comboexpanded.GetSelection()
|
| 451 |
|
selexp = self.comboselectedexpanded.GetSelection()
|
| 452 |
|
|
| 453 |
|
bitmaps = [(normal > 0 and normal or -1), (selected > 0 and selected or -1),
|
| 454 |
|
(expanded > 0 and expanded or -1), (selexp > 0 and selexp or -1)]
|
| 455 |
|
|
| 456 |
|
newbitmaps = []
|
| 457 |
|
|
| 458 |
|
for bmp in bitmaps:
|
| 459 |
|
if bmp > 0:
|
| 460 |
|
newbitmaps.append(bmp-1)
|
| 461 |
|
else:
|
| 462 |
|
newbitmaps.append(bmp)
|
| 463 |
|
|
| 464 |
|
self.parent.SetNewIcons(newbitmaps)
|
| 465 |
|
|
| 466 |
|
self.Destroy()
|
| 467 |
|
event.Skip()
|
| 468 |
|
|
| 469 |
|
|
| 470 |
|
def OnCancel(self, event):
|
| 471 |
|
|
| 472 |
|
self.Destroy()
|
| 473 |
|
event.Skip()
|
| 474 |
|
|
| 475 |
|
|
| 476 |
|
def GetBitmap(self, input, which):
|
| 477 |
|
|
| 478 |
|
if input == 0:
|
| 479 |
|
bmp = wx.EmptyBitmap(16,16)
|
| 480 |
|
self.ClearBmp(bmp)
|
| 481 |
|
elif input > 36:
|
| 482 |
|
# bmp = images.getSmilesBitmap()
|
| 483 |
|
bmp = Menu.Bitmap("icons/New Project.bmp", wx.BITMAP_TYPE_ANY)
|
| 484 |
|
|
| 485 |
|
else:
|
| 486 |
|
bmp = wx.ArtProvider_GetBitmap(eval(ArtIDs[input]), wx.ART_OTHER, (16,16))
|
| 487 |
|
if not bmp.Ok():
|
| 488 |
|
bmp = wx.EmptyBitmap(16,16)
|
| 489 |
|
self.ClearBmp(bmp)
|
| 490 |
|
|
| 491 |
|
self.bitmaps[which].SetBitmap(bmp)
|
| 492 |
|
self.bitmaps[which].Refresh()
|
| 493 |
|
|
| 494 |
|
|
| 495 |
|
def GetBitmaps(self, bitmaps):
|
| 496 |
|
|
| 497 |
|
output = []
|
| 498 |
|
|
| 499 |
|
for count, input in enumerate(bitmaps):
|
| 500 |
|
if input < 0:
|
| 501 |
|
bmp = wx.EmptyBitmap(16,16)
|
| 502 |
|
self.ClearBmp(bmp)
|
| 503 |
|
elif input > 35:
|
| 504 |
|
# bmp = images.getSmilesBitmap()
|
| 505 |
|
bmp = Menu.Bitmap("icons/New Project.bmp", wx.BITMAP_TYPE_ANY)
|
| 506 |
|
else:
|
| 507 |
|
bmp = wx.ArtProvider_GetBitmap(eval(ArtIDs[input+1]), wx.ART_OTHER, (16,16))
|
| 508 |
|
if not bmp.Ok():
|
| 509 |
|
bmp = wx.EmptyBitmap(16,16)
|
| 510 |
|
self.ClearBmp(bmp)
|
| 511 |
|
|
| 512 |
|
self.bitmaps[count].SetBitmap(bmp)
|
| 513 |
|
|
| 514 |
|
|
| 515 |
|
def ClearBmp(self, bmp):
|
| 516 |
|
|
| 517 |
|
dc = wx.MemoryDC()
|
| 518 |
|
dc.SelectObject(bmp)
|
| 519 |
|
dc.SetBackground(wx.Brush("white"))
|
| 520 |
|
dc.Clear()
|
| 521 |
|
|
| 522 |
|
|
| 523 |
|
#---------------------------------------------------------------------------
|
| 524 |
|
### CustomTreeCtrl Demo Implementation
|
| 525 |
|
###---------------------------------------------------------------------------
|
| 526 |
|
##
|
| 527 |
|
##class CustomTreeCtrl(CT.CustomTreeCtrl):
|
| 528 |
|
##
|
| 529 |
|
## def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
|
| 530 |
|
## size=wx.DefaultSize,
|
| 531 |
|
## style=wx.SUNKEN_BORDER,
|
| 532 |
|
## ctstyle=CT.TR_HAS_BUTTONS | CT.TR_TWIST_BUTTONS | CT.TR_HAS_VARIABLE_ROW_HEIGHT,
|
| 533 |
|
## log=None):
|
| 534 |
|
##
|
| 535 |
|
## CT.CustomTreeCtrl.__init__(self, parent, id, pos, size, style, ctstyle)
|
| 536 |
|
##
|
| 537 |
|
## self.log = log # the demo will write message to this file-like object
|
| 538 |
|
##
|
| 539 |
|
## # build lists of tree styles and events
|
| 540 |
|
## alldata = dir(CT)
|
| 541 |
|
##
|
| 542 |
|
## treestyles = []
|
| 543 |
|
## events = []
|
| 544 |
|
## for data in alldata:
|
| 545 |
|
## if data.startswith("TR_"):
|
| 546 |
|
## treestyles.append(data)
|
| 547 |
|
## elif data.startswith("EVT_"):
|
| 548 |
|
## events.append(data)
|
| 549 |
|
##
|
| 550 |
|
## self.events = events
|
| 551 |
|
## self.styles = treestyles
|
| 552 |
|
##
|
| 553 |
|
## self.item = None # what is this? - used to keep track of right clicked item??
|
| 554 |
|
##
|
| 555 |
|
## # make a list of icons to label tree nodes
|
| 556 |
|
## il = wx.ImageList(16, 16)
|
| 557 |
|
##
|
| 558 |
|
## for items in ArtIDs[1:-1]:
|
| 559 |
|
## bmp = wx.ArtProvider_GetBitmap(eval(items), wx.ART_TOOLBAR, (16, 16))
|
| 560 |
|
## il.Add(bmp)
|
| 561 |
|
##
|
| 562 |
|
## #smileidx = il.Add(images.getSmilesBitmap())
|
| 563 |
|
## smileidx = il.Add(Menu.Bitmap("icons/New Project.bmp", wx.BITMAP_TYPE_ANY))
|
| 564 |
|
## numicons = il.GetImageCount()
|
| 565 |
|
##
|
| 566 |
|
## self.AssignImageList(il)
|
| 567 |
|
##
|
| 568 |
|
## self.count = 0 # counts idle clicks for meter display - demo only
|
| 569 |
|
##
|
| 570 |
|
## # NOTE: For some reason tree items have to have a data object in
|
| 571 |
|
## # order to be sorted. Since our compare just uses the labels
|
| 572 |
|
## # we don't need any real data, so we'll just use None below for
|
| 573 |
|
## # the item data.
|
| 574 |
|
##
|
| 575 |
|
## self.root = self.AddRoot("The Root Item")
|
| 576 |
|
##
|
| 577 |
|
## if not(self.GetTreeStyle() & CT.TR_HIDE_ROOT):
|
| 578 |
|
## self.SetPyData(self.root, None)
|
| 579 |
|
## self.SetItemImage(self.root, 24, CT.TreeItemIcon_Normal)
|
| 580 |
|
## self.SetItemImage(self.root, 13, CT.TreeItemIcon_Expanded)
|
| 581 |
|
##
|
| 582 |
|
#### # controls attached to tree nodes for demo purposes
|
| 583 |
|
#### textctrl = wx.TextCtrl(self, -1, "I Am A Simple\nMultiline wx.TexCtrl", style=wx.TE_MULTILINE)
|
| 584 |
|
#### self.gauge = wx.Gauge(self, -1, 50, style=wx.GA_HORIZONTAL|wx.GA_SMOOTH)
|
| 585 |
|
#### self.gauge.SetValue(0)
|
| 586 |
|
#### combobox = wx.ComboBox(self, -1, choices=["That", "Was", "A", "Nice", "Holyday!"], style=wx.CB_READONLY|wx.CB_DROPDOWN)
|
| 587 |
|
####
|
| 588 |
|
#### textctrl.Bind(wx.EVT_CHAR, self.OnTextCtrl)
|
| 589 |
|
#### combobox.Bind(wx.EVT_COMBOBOX, self.OnComboBox)
|
| 590 |
|
##
|
| 591 |
|
## # build the tree
|
| 592 |
|
## #### db = Data._dbDatabase(Data.Database) # will get objects from this database
|
| 593 |
|
## projects = Data.DBObject.GetList('Project')
|
| 594 |
|
## for x in projects: # projects
|
| 595 |
|
#### if x == 1:
|
| 596 |
|
#### child = self.AppendItem(self.root, "Item %d" % x + "\nHello World\nHappy wxPython-ing!")
|
| 597 |
|
#### self.SetItemBold(child, True)
|
| 598 |
|
#### else:
|
| 599 |
|
#### child = self.AppendItem(self.root, "Item %d" % x)
|
| 600 |
|
## child = self.AppendItem(self.root, "%s" % x.Name, ct_type=1)
|
| 601 |
|
## self.SetPyData(child, x)
|
| 602 |
|
## self.SetItemImage(child, 24, CT.TreeItemIcon_Normal)
|
| 603 |
|
## self.SetItemImage(child, 13, CT.TreeItemIcon_Expanded)
|
| 604 |
|
##
|
| 605 |
|
## reports = x.GetList('Report')
|
| 606 |
|
## for y in reports: # reports
|
| 607 |
|
#### if y == 0 and x == 1:
|
| 608 |
|
#### last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)), ct_type=2)
|
| 609 |
|
#### elif y == 1 and x == 2:
|
| 610 |
|
#### last = self.AppendItem(child, "Item %d-%s" % (x, chr(ord("a")+y)), ct_type=1)
|
| 611 |
|
#### elif 2 < y < 4:
|
| 612 |
|
#### last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)))
|
| 613 |
|
#### elif y == 4 and x == 1:
|
| 614 |
|
#### last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)))
|
| 615 |
|
#### else:
|
| 616 |
|
#### last = self.AppendItem(child, "item %d-%s" % (x, chr(ord("a")+y)), ct_type=2)
|
| 617 |
|
## last = self.AppendItem(child, "%s" % y.Name, ct_type=1)
|
| 618 |
|
##
|
| 619 |
|
## self.SetPyData(last, y)
|
| 620 |
|
### self.SetItemImage(last, 24, CT.TreeItemIcon_Normal)
|
| 621 |
|
## self.SetItemImage(last, 28, CT.TreeItemIcon_Normal)
|
| 622 |
|
### self.SetItemImage(last, 13, CT.TreeItemIcon_Expanded)
|
| 623 |
|
## self.SetItemImage(last, numicons-1, CT.TreeItemIcon_Selected)
|
| 624 |
|
##
|
| 625 |
|
#### for z in range(5):
|
| 626 |
|
#### if z > 2:
|
| 627 |
|
#### item = self.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z), ct_type=1)
|
| 628 |
|
#### elif 0 < z <= 2:
|
| 629 |
|
#### item = self.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z), ct_type=2)
|
| 630 |
|
#### elif z == 0:
|
| 631 |
|
#### item = self.AppendItem(last, "item %d-%s-%d" % (x, chr(ord("a")+y), z))
|
| 632 |
|
#### self.SetItemHyperText(item, True)
|
| 633 |
|
#### self.SetPyData(item, None)
|
| 634 |
|
#### self.SetItemImage(item, 28, CT.TreeItemIcon_Normal)
|
| 635 |
|
#### self.SetItemImage(item, numicons-1, CT.TreeItemIcon_Selected)
|
| 636 |
|
##
|
| 637 |
|
## self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick)
|
| 638 |
|
#### self.Bind(wx.EVT_IDLE, self.OnIdle)
|
| 639 |
|
## self.Bind(CT.EVT_TREE_ITEM_CHECKED, self.OnItemCheck)
|
| 640 |
|
##
|
| 641 |
|
## self.eventdict = {
|
| 642 |
|
## 'EVT_TREE_BEGIN_DRAG': self.OnBeginDrag,
|
| 643 |
|
## 'EVT_TREE_BEGIN_LABEL_EDIT': self.OnBeginEdit,
|
| 644 |
|
## 'EVT_TREE_BEGIN_RDRAG': self.OnBeginRDrag,
|
| 645 |
|
## 'EVT_TREE_DELETE_ITEM': self.OnDeleteItem,
|
| 646 |
|
## 'EVT_TREE_END_DRAG': self.OnEndDrag,
|
| 647 |
|
## 'EVT_TREE_END_LABEL_EDIT': self.OnEndEdit,
|
| 648 |
|
## 'EVT_TREE_ITEM_ACTIVATED': self.OnActivate,
|
| 649 |
|
## 'EVT_TREE_ITEM_CHECKED': self.OnItemCheck,
|
| 650 |
|
## 'EVT_TREE_ITEM_CHECKING': self.OnItemChecking,
|
| 651 |
|
## 'EVT_TREE_ITEM_COLLAPSED': self.OnItemCollapsed,
|
| 652 |
|
## 'EVT_TREE_ITEM_COLLAPSING': self.OnItemCollapsing,
|
| 653 |
|
## 'EVT_TREE_ITEM_EXPANDED': self.OnItemExpanded,
|
| 654 |
|
## 'EVT_TREE_ITEM_EXPANDING': self.OnItemExpanding,
|
| 655 |
|
## 'EVT_TREE_ITEM_GETTOOLTIP': self.OnToolTip,
|
| 656 |
|
## 'EVT_TREE_ITEM_MENU': self.OnItemMenu,
|
| 657 |
|
## 'EVT_TREE_ITEM_RIGHT_CLICK': self.OnRightDown,
|
| 658 |
|
## 'EVT_TREE_KEY_DOWN': self.OnKey,
|
| 659 |
|
## 'EVT_TREE_SEL_CHANGED': self.OnSelChanged,
|
| 660 |
|
## 'EVT_TREE_SEL_CHANGING': self.OnSelChanging,
|
| 661 |
|
## "EVT_TREE_ITEM_HYPERLINK": self.OnHyperLink}
|
| 662 |
|
##
|
| 663 |
|
## mainframe = wx.GetTopLevelParent(self)
|
| 664 |
|
##
|
| 665 |
|
## if not hasattr(mainframe, "leftpanel"):
|
| 666 |
|
## self.Bind(CT.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded)
|
| 667 |
|
## self.Bind(CT.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed)
|
| 668 |
|
## self.Bind(CT.EVT_TREE_SEL_CHANGED, self.OnSelChanged)
|
| 669 |
|
## self.Bind(CT.EVT_TREE_SEL_CHANGING, self.OnSelChanging)
|
| 670 |
|
## self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
|
| 671 |
|
## self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
|
| 672 |
|
## else:
|
| 673 |
|
## for combos in mainframe.treeevents:
|
| 674 |
|
## self.BindEvents(combos)
|
| 675 |
|
##
|
| 676 |
|
## if hasattr(mainframe, "leftpanel"):
|
| 677 |
|
## self.ChangeStyle(mainframe.treestyles)
|
| 678 |
|
##
|
| 679 |
|
## if not(self.GetTreeStyle() & CT.TR_HIDE_ROOT):
|
| 680 |
|
## self.SelectItem(self.root)
|
| 681 |
|
## self.Expand(self.root)
|
| 682 |
|
##
|
| 683 |
|
##
|
| 684 |
|
## def BindEvents(self, choice, recreate=False):
|
| 685 |
|
##
|
| 686 |
|
## value = choice.GetValue()
|
| 687 |
|
## text = choice.GetLabel()
|
| 688 |
|
##
|
| 689 |
|
## evt = "CT." + text
|
| 690 |
|
## binder = self.eventdict[text]
|
| 691 |
|
##
|
| 692 |
|
## if value == 1:
|
| 693 |
|
## if evt == "CT.EVT_TREE_BEGIN_RDRAG":
|
| 694 |
|
## self.Bind(wx.EVT_RIGHT_DOWN, None)
|
| 695 |
|
## self.Bind(wx.EVT_RIGHT_UP, None)
|
| 696 |
|
## self.Bind(eval(evt), binder)
|
| 697 |
|
## else:
|
| 698 |
|
## self.Bind(eval(evt), None)
|
| 699 |
|
## if evt == "CT.EVT_TREE_BEGIN_RDRAG":
|
| 700 |
|
## self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
|
| 701 |
|
## self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
|
| 702 |
|
##
|
| 703 |
|
##
|
| 704 |
|
## def ChangeStyle(self, combos):
|
| 705 |
|
##
|
| 706 |
|
## style = 0
|
| 707 |
|
## for combo in combos:
|
| 708 |
|
## if combo.GetValue() == 1:
|
| 709 |
|
## style = style | eval("CT." + combo.GetLabel())
|
| 710 |
|
##
|
| 711 |
|
## if self.GetTreeStyle() != style:
|
| 712 |
|
## self.SetTreeStyle(style)
|
| 713 |
|
##
|
| 714 |
|
##
|
| 715 |
|
## def OnCompareItems(self, item1, item2):
|
| 716 |
|
##
|
| 717 |
|
## t1 = self.GetItemText(item1)
|
| 718 |
|
## t2 = self.GetItemText(item2)
|
| 719 |
|
##
|
| 720 |
|
## self.log.write('compare: ' + t1 + ' <> ' + t2 + "\n")
|
| 721 |
|
##
|
| 722 |
|
## if t1 < t2:
|
| 723 |
|
## return -1
|
| 724 |
|
## if t1 == t2:
|
| 725 |
|
## return 0
|
| 726 |
|
##
|
| 727 |
|
## return 1
|
| 728 |
|
##
|
| 729 |
|
##
|
| 730 |
|
#### def OnIdle(self, event):
|
| 731 |
|
####
|
| 732 |
|
#### if self.gauge:
|
| 733 |
|
#### try:
|
| 734 |
|
#### if self.gauge.IsEnabled() and self.gauge.IsShown():
|
| 735 |
|
#### self.count = self.count + 1
|
| 736 |
|
####
|
| 737 |
|
#### if self.count >= 50:
|
| 738 |
|
#### self.count = 0
|
| 739 |
|
####
|
| 740 |
|
#### self.gauge.SetValue(self.count)
|
| 741 |
|
####
|
| 742 |
|
#### except:
|
| 743 |
|
#### self.gauge = None
|
| 744 |
|
####
|
| 745 |
|
#### event.Skip()
|
| 746 |
|
##
|
| 747 |
|
##
|
| 748 |
|
## def OnRightDown(self, event):
|
| 749 |
|
##
|
| 750 |
|
## pt = event.GetPosition()
|
| 751 |
|
## item, flags = self.HitTest(pt)
|
| 752 |
|
##
|
| 753 |
|
## if item:
|
| 754 |
|
## self.item = item
|
| 755 |
|
## self.log.write("OnRightClick: %s, %s, %s" % (self.GetItemText(item), type(item), item.__class__) + "\n")
|
| 756 |
|
## self.SelectItem(item)
|
| 757 |
|
##
|
| 758 |
|
##
|
| 759 |
|
## def OnRightUp(self, event):
|
| 760 |
|
##
|
| 761 |
|
## item = self.item
|
| 762 |
|
##
|
| 763 |
|
## if not item:
|
| 764 |
|
## event.Skip()
|
| 765 |
|
## return
|
| 766 |
|
##
|
| 767 |
|
## if not self.IsEnabled(item):
|
| 768 |
|
## event.Skip()
|
| 769 |
|
## return
|
| 770 |
|
##
|
| 771 |
|
## # Item Text Appearance
|
| 772 |
|
## ishtml = self.IsItemHyperText(item)
|
| 773 |
|
## back = self.GetItemBackgroundColour(item)
|
| 774 |
|
## fore = self.GetItemTextColour(item)
|
| 775 |
|
## isbold = self.IsBold(item)
|
| 776 |
|
## font = self.GetItemFont(item)
|
| 777 |
|
##
|
| 778 |
|
## # Icons On Item
|
| 779 |
|
## normal = self.GetItemImage(item, CT.TreeItemIcon_Normal)
|
| 780 |
|
## selected = self.GetItemImage(item, CT.TreeItemIcon_Selected)
|
| 781 |
|
## expanded = self.GetItemImage(item, CT.TreeItemIcon_Expanded)
|
| 782 |
|
## selexp = s |