1#!/usr/bin/env python 2 3import wx 4import wx.adv 5import os 6import sys 7import images 8import random 9 10import wx.dataview as dv 11 12from wx.lib.expando import ExpandoTextCtrl 13import wx.lib.agw.aui as AUI 14import wx.lib.agw.floatspin as FS 15 16try: 17 dirName = os.path.dirname(os.path.abspath(__file__)) 18except: 19 dirName = os.path.dirname(os.path.abspath(sys.argv[0])) 20 21sys.path.append(os.path.split(dirName)[0]) 22 23try: 24 import agw.persist as PM 25except ImportError: # if it's not there locally, try the wxPython lib. 26 import wx.lib.agw.persist as PM 27 28_sampleText1 = "wx.Frame with AUI perspective, wx.MenuBar, wx.ColourDialog, " \ 29 "wx.FindReplaceDialog, wx.FontDialog, wx.TextEntryDialog, " \ 30 "wx.ColourPickerCtrl, wx.DirPickerCtrl, wx.FilePickerCtrl, " \ 31 "AuiToolBar, wx.RadioBox, wx.ToggleButton, wx.ComboBox, " \ 32 "wx.Slider, wx.SpinCtrl, FloatSpin\n\n" \ 33 "PersistenceManager Style: PM.PM_DEFAULT_STYLE\n" 34 35_sampleText2 = "wx.Frame, wx.SplitterWindow, wx.TreeCtrl, wx.Notebook, " \ 36 "wx.CheckListBox, wx.CheckBox, wx.SearchCtrl, wx.TextCtrl, " \ 37 "wx.DatePickerCtrl, wx.Choice, AuiNotebook, wx.ListCtrl, " \ 38 "TreeListCtrl, wx.HtmlListBox\n\nPersistenceManager Style: " \ 39 "PM.PM_SAVE_RESTORE_TREE_LIST_SELECTIONS\n" 40 41_sampleList = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'] 42_sampleList2 = _sampleList + ['nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen'] 43 44_title = "PersistentControls for wxPython :-D " 45_configFile1 = os.path.join(dirName, "Example1") 46_configFile2 = os.path.join(dirName, "Example2") 47 48 49ID_AuiToolBar = wx.ID_HIGHEST + 100 50 51 52class PersistentPanel(wx.Panel): 53 54 def __init__(self, parent, log): 55 56 wx.Panel.__init__(self, parent) 57 58 mainSizer = wx.BoxSizer(wx.VERTICAL) 59 sizer = wx.FlexGridSizer(3, 2, 10, 10) 60 61 btn1 = wx.Button(self, -1, "Example 1") 62 text1 = ExpandoTextCtrl(self, -1, _sampleText1, size=(300,-1), style=wx.TE_READONLY) 63 64 btn2 = wx.Button(self, -1, "Example 2") 65 text2 = ExpandoTextCtrl(self, -1, _sampleText2, size=(300,-1), style=wx.TE_READONLY) 66 67 sizer.Add(btn1, 0, wx.ALIGN_CENTER) 68 sizer.Add(text1, 1, wx.EXPAND) 69 70 sizer.Add(btn2, 0, wx.ALIGN_CENTER) 71 sizer.Add(text2, 1, wx.EXPAND) 72 73 sizer.AddGrowableCol(1) 74 mainSizer.Add(sizer, 1, wx.EXPAND|wx.ALL, 20) 75 self.SetSizer(mainSizer) 76 mainSizer.Layout() 77 78 btn1.Bind(wx.EVT_BUTTON, self.OnExample1) 79 btn2.Bind(wx.EVT_BUTTON, self.OnExample2) 80 81 82 def OnExample1(self, event): 83 84 frame = PersistentFrame1(self, _title + "- Example 1", (700, 500)) 85 86 87 def OnExample2(self, event): 88 89 frame = PersistentFrame2(self, _title + "- Example 2", (700, 500)) 90 91 92class PersistentFrame1(wx.Frame): 93 94 def __init__(self, parent, title, size): 95 96 wx.Frame.__init__(self, parent, -1, title, size=size, name="Example1") 97 98 self._auiMgr = AUI.AuiManager() 99 self._auiMgr.SetManagedWindow(self) 100 101 self._persistMgr = PM.PersistenceManager.Get() 102 self._persistMgr.SetPersistenceFile(_configFile1) 103 104 self.CreateMenuBar() 105 self.CreateAuiToolBar() 106 107 self.BuildPanes() 108 109 self.SetIcon(images.Mondrian.Icon) 110 self.CenterOnParent() 111 self.Show() 112 113 self.Bind(wx.EVT_CLOSE, self.OnClose) 114 wx.CallAfter(self.RegisterControls) 115 116 117 def CreateMenuBar(self): 118 119 # Prepare the menu bar 120 menuBar = wx.MenuBar() 121 menuBar.SetName("MenuBar1") 122 123 # 1st menu from left 124 menu1 = wx.Menu() 125 menu1.Append(101, "wx.Colo&urDialog") 126 menu1.Append(102, "wx.F&ontDialog") 127 menu1.AppendSeparator() 128 menu1.Append(103, "wx.&TextEntryDialog") 129 menu1.AppendSeparator() 130 menu1.Append(105, "&Close", "Close this frame") 131 # Add menu to the menu bar 132 menuBar.Append(menu1, "&Dialogs") 133 134 menu2 = wx.Menu() 135 # Radio items 136 menu2.Append(201, "Radio 1-1", "", wx.ITEM_RADIO) 137 menu2.Append(202, "Radio 1-2", "", wx.ITEM_RADIO) 138 menu2.Append(203, "Radio 1-3", "", wx.ITEM_RADIO) 139 menu2.AppendSeparator() 140 menu2.Append(204, "Radio 2-1", "", wx.ITEM_RADIO) 141 menu2.Append(205, "Radio 2-2", "", wx.ITEM_RADIO) 142 menuBar.Append(menu2, "&Radio Items") 143 144 menu3 = wx.Menu() 145 # Check menu items 146 menu3.Append(301, "Check 1", "", wx.ITEM_CHECK) 147 menu3.Append(302, "Check 2", "", wx.ITEM_CHECK) 148 menu3.Append(303, "Check 3", "", wx.ITEM_CHECK) 149 menuBar.Append(menu3, "Chec&k Items") 150 151 self.SetMenuBar(menuBar) 152 153 self.Bind(wx.EVT_MENU_RANGE, self.OnDialogs, id=101, id2=103) 154 self.Bind(wx.EVT_MENU, self.CloseWindow, id=105) 155 156 157 def CreateAuiToolBar(self): 158 159 tb3 = AUI.AuiToolBar(self, -1, wx.DefaultPosition, wx.DefaultSize, AUI.AUI_TB_DEFAULT_STYLE) 160 tb3.SetName("AuiToolBar") 161 tb3.SetToolBitmapSize(wx.Size(16, 16)) 162 163 tb3_bmp1 = wx.ArtProvider.GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, wx.Size(16, 16)) 164 tb3.AddSimpleTool(ID_AuiToolBar, "Check 1", tb3_bmp1, "Check 1", AUI.ITEM_CHECK) 165 tb3.AddSimpleTool(ID_AuiToolBar+1, "Check 2", tb3_bmp1, "Check 2", AUI.ITEM_CHECK) 166 tb3.AddSimpleTool(ID_AuiToolBar+2, "Check 3", tb3_bmp1, "Check 3", AUI.ITEM_CHECK) 167 tb3.AddSimpleTool(ID_AuiToolBar+3, "Check 4", tb3_bmp1, "Check 4", AUI.ITEM_CHECK) 168 tb3.AddSeparator() 169 tb3.AddSimpleTool(ID_AuiToolBar+4, "Radio 1", tb3_bmp1, "Radio 1", AUI.ITEM_RADIO) 170 tb3.AddSimpleTool(ID_AuiToolBar+5, "Radio 2", tb3_bmp1, "Radio 2", AUI.ITEM_RADIO) 171 tb3.AddSimpleTool(ID_AuiToolBar+6, "Radio 3", tb3_bmp1, "Radio 3", AUI.ITEM_RADIO) 172 tb3.AddSeparator() 173 tb3.AddSimpleTool(ID_AuiToolBar+7, "Radio 1 (Group 2)", tb3_bmp1, "Radio 1 (Group 2)", AUI.ITEM_RADIO) 174 tb3.AddSimpleTool(ID_AuiToolBar+8, "Radio 2 (Group 2)", tb3_bmp1, "Radio 2 (Group 2)", AUI.ITEM_RADIO) 175 tb3.AddSimpleTool(ID_AuiToolBar+9, "Radio 3 (Group 2)", tb3_bmp1, "Radio 3 (Group 2)", AUI.ITEM_RADIO) 176 177 tb3.Realize() 178 179 self._auiMgr.AddPane(tb3, AUI.AuiPaneInfo().Name("tb3").Caption("AuiToolbar").ToolbarPane().Top()) 180 181 182 def BuildPanes(self): 183 184 pickerPanel = wx.Panel(self) 185 186 box1 = wx.BoxSizer(wx.VERTICAL) 187 fgs = wx.FlexGridSizer(cols=2, hgap=5, vgap=5) 188 189 fgs.Add(wx.StaticText(pickerPanel, -1, "wx.ColourPickerCtrl:"), 0, wx.ALIGN_CENTER_VERTICAL) 190 cp1 = wx.ColourPickerCtrl(pickerPanel, name="ColourPicker1") 191 fgs.Add(cp1, 0, wx.ALIGN_CENTER) 192 fgs.Add(wx.StaticText(pickerPanel, -1, " with label:"), 0, wx.ALIGN_CENTER_VERTICAL) 193 cp3 = wx.ColourPickerCtrl(pickerPanel, style=wx.CLRP_SHOW_LABEL, name="ColourPicker2") 194 fgs.Add(cp3, 0, wx.ALIGN_CENTER) 195 196 fgs.Add(wx.StaticText(pickerPanel, -1, "wx.DirPickerCtrl:"), 0, wx.ALIGN_CENTER_VERTICAL) 197 dp1 = wx.DirPickerCtrl(pickerPanel, name="DirPicker1") 198 fgs.Add(dp1, 0, wx.ALIGN_CENTER) 199 200 fgs.Add(wx.StaticText(pickerPanel, -1, "wx.FilePickerCtrl:"), 0, wx.ALIGN_CENTER_VERTICAL) 201 fp1 = wx.FilePickerCtrl(pickerPanel, name="FilePicker1") 202 fgs.Add(fp1, 0, wx.ALIGN_CENTER) 203 204 fgs.Add(wx.StaticText(pickerPanel, -1, "wx.FontPickerCtrl:"), 0, wx.ALIGN_CENTER_VERTICAL) 205 fnt1 = wx.FontPickerCtrl(pickerPanel, style=wx.FNTP_FONTDESC_AS_LABEL, name="FontPicker1") 206 fgs.Add(fnt1, 0, wx.ALIGN_CENTER) 207 208 box1.Add(fgs, 1, wx.EXPAND|wx.ALL, 5) 209 pickerPanel.SetSizer(box1) 210 box1.Layout() 211 212 otherPanel = wx.Panel(self) 213 box2 = wx.BoxSizer(wx.VERTICAL) 214 215 radiobox = wx.RadioBox(otherPanel, -1, "RadioBox", choices=_sampleList, majorDimension=2, 216 style=wx.RA_SPECIFY_COLS, name="RadioBox1") 217 toggle = wx.ToggleButton(otherPanel, -1, "ToggleButton", name="Toggle1") 218 combo = wx.ComboBox(otherPanel, -1, choices=_sampleList, style=wx.CB_DROPDOWN|wx.CB_READONLY, 219 name="ComboBox1") 220 221 boldFont = wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, 0, "") 222 223 box2 = wx.BoxSizer(wx.HORIZONTAL) 224 box2.Add((0, 0), 1) 225 box2.Add(radiobox, 0, wx.ALL|wx.ALIGN_CENTER, 5) 226 box2.Add((20, 0)) 227 228 sizer_1 = wx.BoxSizer(wx.VERTICAL) 229 sizer_1.Add((20, 20), 1) 230 sizer_1.Add(toggle, 0, wx.ALL, 5) 231 sizer_1.Add((0, 10)) 232 label_1 = wx.StaticText(otherPanel, -1, "ComboBox") 233 label_1.SetFont(boldFont) 234 sizer_1.Add(label_1, 0, wx.ALL, 5) 235 sizer_1.Add(combo, 0, wx.LEFT|wx.RIGHT, 5) 236 sizer_1.Add((20, 20), 1) 237 box2.Add(sizer_1, 1, wx.EXPAND|wx.ALIGN_CENTER, 0) 238 box2.Add((0, 0), 1, 1) 239 240 otherPanel.SetSizer(box2) 241 242 otherPanel2 = wx.Panel(self) 243 box3 = wx.BoxSizer(wx.VERTICAL) 244 245 gs1 = wx.FlexGridSizer(2, 3, 5, 10) 246 247 slider = wx.Slider(otherPanel2, -1, 3, 0, 10, style=wx.SL_HORIZONTAL|wx.SL_LABELS, 248 name="Slider1") 249 spinctrl = wx.SpinCtrl(otherPanel2, -1, "20", min=0, max=100, name="SpinCtrl1") 250 floatspin = FS.FloatSpin(otherPanel2, -1, value=150, min_val=20, max_val=200, name="FloatSpin1") 251 floatspin.SetDigits(2) 252 253 label_2 = wx.StaticText(otherPanel2, -1, "Slider") 254 label_2.SetFont(boldFont) 255 gs1.Add(label_2, 0, wx.ALIGN_CENTER_VERTICAL, 0) 256 label_3 = wx.StaticText(otherPanel2, -1, "SpinCtrl") 257 label_3.SetFont(boldFont) 258 gs1.Add(label_3, 0, wx.ALIGN_CENTER_VERTICAL, 0) 259 label_4 = wx.StaticText(otherPanel2, -1, "FloatSpin") 260 label_4.SetFont(boldFont) 261 gs1.Add(label_4, 0, wx.ALIGN_CENTER_VERTICAL, 0) 262 gs1.Add(slider, 0, wx.ALIGN_CENTER_VERTICAL, 0) 263 gs1.Add(spinctrl, 0, wx.ALIGN_CENTER_VERTICAL, 0) 264 gs1.Add(floatspin, 0, wx.ALIGN_CENTER_VERTICAL, 0) 265 gs1.AddGrowableCol(0) 266 gs1.AddGrowableCol(1) 267 gs1.AddGrowableCol(2) 268 box3.Add(gs1, 1, wx.EXPAND|wx.ALL, 5) 269 otherPanel2.SetSizer(box3) 270 271 self._auiMgr.AddPane(pickerPanel, AUI.AuiPaneInfo().Name("DummyPanel1").Caption("Pickers"). 272 Left().MinSize(wx.Size(300, -1)).FloatingSize(wx.Size(300, 300))) 273 self._auiMgr.AddPane(otherPanel, AUI.AuiPaneInfo().Name("DummyPanel2").CenterPane()) 274 self._auiMgr.AddPane(otherPanel2, AUI.AuiPaneInfo().Name("DummyPanel3").Bottom(). 275 BestSize(wx.Size(-1, 200)).Caption("Slider & Spins"). 276 FloatingSize(wx.Size(300, 300))) 277 self._auiMgr.Update() 278 279 280 def RegisterControls(self): 281 282 self.Freeze() 283 self.Register() 284 self.Thaw() 285 286 287 def Register(self, children=None): 288 289 if children is None: 290 self._persistMgr.RegisterAndRestore(self) 291 self._persistMgr.RegisterAndRestore(self.GetMenuBar()) 292 children = self.GetChildren() 293 294 for child in children: 295 296 name = child.GetName() 297 298 if name not in PM.BAD_DEFAULT_NAMES and "widget" not in name and \ 299 "wxSpinButton" not in name and "auiFloating" not in name and \ 300 "AuiTabCtrl" not in name and "AuiNotebook" not in name: 301 self._persistMgr.RegisterAndRestore(child) 302 303 if child.GetChildren(): 304 self.Register(child.GetChildren()) 305 306 307 def CloseWindow(self, event): 308 309 self.Close() 310 311 312 def OnClose(self, event): 313 314 self._persistMgr.SaveAndUnregister() 315 event.Skip() 316 317 318 def OnDialogs(self, event): 319 320 evId = event.GetId() 321 322 if evId == 101: 323 # wx.ColourDialog 324 data = wx.ColourData() 325 dlg = wx.ColourDialog(self, data) 326 dlg.SetName("ColourDialog1") 327 328 elif evId == 102: 329 # wx.FontDialog 330 data = wx.FontData() 331 dlg = wx.FontDialog(self, data) 332 dlg.SetName("FontDialog1") 333 334 elif evId == 103: 335 # wx.TextEntryDialog 336 dlg = wx.TextEntryDialog(self, 'What is your favorite programming language?', 337 'Eh??', 'Python') 338 dlg.SetValue("Python is the best!") 339 dlg.SetName("TextEntryDialog1") 340 341 self._persistMgr.RegisterAndRestore(dlg) 342 343 if dlg.ShowModal() == wx.ID_OK: 344 self._persistMgr.Save(dlg) 345 346 self._persistMgr.Unregister(dlg) 347 dlg.Destroy() 348 349 350# The wx.HtmlListBox derives from wx.VListBox, but draws each item 351# itself as a wx.HtmlCell. 352class MyHtmlListBox(wx.html.HtmlListBox): 353 354 def OnGetItem(self, n): 355 if n % 2 == 0: 356 return "This is item# <b>%d</b>" % n 357 else: 358 return "This is item# <b>%d</b> <br>Any <font color='RED'>HTML</font> is okay." % n 359 360 361class PersistentFrame2(wx.Frame): 362 363 def __init__(self, parent, title, size): 364 365 wx.Frame.__init__(self, parent, -1, title, size=size, name="Example2") 366 367 self._persistMgr = PM.PersistenceManager.Get() 368 self._persistMgr.SetManagerStyle(PM.PM_DEFAULT_STYLE|PM.PM_SAVE_RESTORE_TREE_LIST_SELECTIONS) 369 self._persistMgr.SetPersistenceFile(_configFile2) 370 371 self.split1 = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER, name="Splitter1") 372 self.treectrl = self.CreateTreeListCtrl(False) 373 374 self.split2 = wx.SplitterWindow(self.split1, -1, style=wx.SP_3D|wx.SP_BORDER, name="Splitter2") 375 self.notebook = wx.Notebook(self.split2, name="Notebook1") 376 dummyPanel = wx.Panel(self.split2) 377 378 text = "Hello world!\nI am a simple wx.TextCtrl" \ 379 "I will remember my value if you change it!" 380 381 self.checklistbox = wx.CheckListBox(dummyPanel, -1, choices=_sampleList2, name="CheckListBox1") 382 self.textctrl = wx.TextCtrl(dummyPanel, -1, text, style=wx.TE_MULTILINE, name="TextCtrl1") 383 self.searchctrl = wx.SearchCtrl(dummyPanel, -1, "", name="SearchCtrl1") 384 self.checkbox = wx.CheckBox(dummyPanel, -1, "CheckBox", name="CheckBox1") 385 self.datepickerctrl = wx.adv.DatePickerCtrl(dummyPanel, style=wx.adv.DP_DROPDOWN, name="DatePicker1") 386 self.choice = wx.Choice(dummyPanel, -1, choices=_sampleList, name="Choice1") 387 388 self.split2.SplitHorizontally(self.notebook, dummyPanel) 389 self.split1.SplitVertically(self.treectrl, self.split2) 390 391 self.DoLayout(dummyPanel) 392 self.SetIcon(images.Mondrian.Icon) 393 394 self.Bind(wx.EVT_CLOSE, self.OnClose) 395 wx.CallAfter(self.RegisterControls) 396 397 self.CenterOnParent() 398 self.Show() 399 400 401 def DoLayout(self, dummyPanel): 402 403 sizer_5 = wx.BoxSizer(wx.HORIZONTAL) 404 sizer_6 = wx.BoxSizer(wx.VERTICAL) 405 406 self.notebook.AddPage(self.CreateNotebook(), "AuiNotebook") 407 self.notebook.AddPage(self.CreateListCtrl(), "wx.ListCtrl") 408 self.notebook.AddPage(self.CreateTreeListCtrl(True), "TreeListCtrl") 409 self.notebook.AddPage(self.CreateHtmlListBox(), "wx.HtmlListBox") 410 411 sizer_5.Add(self.checklistbox, 1, wx.EXPAND|wx.ALL, 5) 412 sizer_6.Add(self.textctrl, 1, wx.EXPAND|wx.BOTTOM, 10) 413 sizer_6.Add(self.searchctrl, 0, wx.BOTTOM, 10) 414 sizer_6.Add(self.checkbox, 0, wx.BOTTOM, 10) 415 sizer_6.Add(self.datepickerctrl, 0, wx.BOTTOM, 10) 416 sizer_6.Add(self.choice, 0, 0, 0) 417 sizer_5.Add(sizer_6, 1, wx.ALL|wx.EXPAND, 5) 418 419 dummyPanel.SetSizer(sizer_5) 420 self.Layout() 421 422 423 def CreateNotebook(self): 424 425 # create the notebook off-window to avoid flicker 426 ctrl = AUI.AuiNotebook(self.notebook, -1) 427 ctrl.SetName("AuiNotebook1") 428 page_bmp = wx.ArtProvider.GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, wx.Size(16, 16)) 429 ctrl.AddPage(wx.Panel(ctrl), "Page 1", False, page_bmp) 430 ctrl.AddPage(wx.TextCtrl(ctrl, -1, "Some text", wx.DefaultPosition, wx.DefaultSize, 431 wx.TE_MULTILINE|wx.NO_BORDER), "Page 1", False, page_bmp) 432 433 ctrl.AddPage(wx.TextCtrl(ctrl, -1, "Some more text", wx.DefaultPosition, wx.DefaultSize, 434 wx.TE_MULTILINE|wx.NO_BORDER), "Page 2") 435 436 ctrl.AddPage(wx.TextCtrl(ctrl, -1, "Some more text", wx.DefaultPosition, wx.DefaultSize, 437 wx.TE_MULTILINE|wx.NO_BORDER), "Page 3") 438 439 ctrl.AddPage(wx.TextCtrl(ctrl, -1, "Some more text", wx.DefaultPosition, wx.DefaultSize, 440 wx.TE_MULTILINE|wx.NO_BORDER), "Page 4") 441 442 return ctrl 443 444 445 def CreateListCtrl(self): 446 447 il = wx.ImageList(16, 16) 448 il.Add(images.Smiles.GetBitmap()) 449 450 listCtrl = wx.ListCtrl(self.notebook, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER, name="ListCtrl1") 451 for col in range(6): 452 listCtrl.InsertColumn(col, "Column %d"%col) 453 454 listCtrl.AssignImageList(il, wx.IMAGE_LIST_SMALL) 455 text = "Row: %d, Col: %d" 456 for row in range(30): 457 if random.randint(0, 1): 458 idx = listCtrl.InsertItem(sys.maxsize, text%(row+1, 1), 0) 459 else: 460 idx = listCtrl.InsertItem(sys.maxsize, text%(row+1, 1)) 461 462 for col in range(1, 6): 463 listCtrl.SetItem(idx, col, text%(row+1, col+1), random.randint(0, 1)-1) 464 465 return listCtrl 466 467 468 def CreateTreeListCtrl(self, isTreeList): 469 470 if isTreeList: 471 treeList = dv.TreeListCtrl(self.notebook, style=wx.TR_DEFAULT_STYLE|wx.TR_FULL_ROW_HIGHLIGHT| 472 wx.SUNKEN_BORDER|wx.TR_MULTIPLE, name="TreeList1") 473 else: 474 treeList = wx.TreeCtrl(self.split1, style=wx.TR_DEFAULT_STYLE|wx.SUNKEN_BORDER|wx.TR_MULTIPLE, 475 name="TreeCtrl1") 476 477 il = wx.ImageList(16, 16) 478 fldridx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, (16, 16))) 479 smileidx = il.Add(images.Smiles.GetBitmap()) 480 481 treeList.AssignImageList(il) 482 483 if isTreeList: 484 # create some columns 485 treeList.AppendColumn("Main column") 486 treeList.AppendColumn("Column 1") 487 treeList.AppendColumn("Column 2") 488 ##treeList.SetMainColumn(0) # the one with the tree in it... 489 treeList.SetColumnWidth(0, 175) 490 491 if isTreeList: 492 root = treeList.InsertItem(treeList.GetRootItem(), dv.TLI_FIRST, "The Root Item") 493 else: 494 root = treeList.AddRoot("The Root Item") 495 496 if isTreeList: 497 treeList.SetItemText(root, 1, "col 1 root") 498 treeList.SetItemText(root, 2, "col 2 root") 499 500 treeList.SetItemImage(root, fldridx) 501 502 for x in range(15): 503 txt = "Item %d" % x 504 child = treeList.AppendItem(root, txt) 505 treeList.SetItemImage(child, smileidx) 506 if isTreeList: 507 treeList.SetItemText(child, 1, txt + "(c1)") 508 treeList.SetItemText(child, 2, txt + "(c2)") 509 510 for y in range(5): 511 txt = "item %d-%s" % (x, chr(ord("a")+y)) 512 last = treeList.AppendItem(child, txt) 513 treeList.SetItemImage(last, fldridx) 514 if isTreeList: 515 treeList.SetItemText(last, 1, txt + "(c1)") 516 treeList.SetItemText(last, 2, txt + "(c2)") 517 518 for z in range(5): 519 txt = "item %d-%s-%d" % (x, chr(ord("a")+y), z) 520 item = treeList.AppendItem(last, txt) 521 treeList.SetItemImage(item, smileidx) 522 if isTreeList: 523 treeList.SetItemText(item, 1, txt + "(c1)") 524 treeList.SetItemText(item, 2, txt + "(c2)") 525 526 treeList.Expand(root) 527 return treeList 528 529 530 def CreateHtmlListBox(self): 531 532 hlb = MyHtmlListBox(self.notebook, -1, style=wx.BORDER_SUNKEN|wx.LB_MULTIPLE, name="HtmlListBox1") 533 hlb.SetItemCount(300) 534 hlb.SetSelection(0) 535 536 return hlb 537 538 539 def OnClose(self, event): 540 541 self._persistMgr.SaveAndUnregister() 542 event.Skip() 543 544 545 def RegisterControls(self): 546 547 self.Freeze() 548 self.Register() 549 self.Thaw() 550 551 552 def Register(self, children=None): 553 554 if children is None: 555 self._persistMgr.RegisterAndRestore(self) 556 children = self.GetChildren() 557 558 for child in children: 559 560 name = child.GetName() 561 562 if name not in PM.BAD_DEFAULT_NAMES and "wxtreelist" not in name and \ 563 "AuiTabCtrl" not in name: 564 self._persistMgr.RegisterAndRestore(child) 565 566 if child.GetChildren(): 567 self.Register(child.GetChildren()) 568 569 570#---------------------------------------------------------------------- 571 572def runTest(frame, nb, log): 573 574 win = PersistentPanel(nb, log) 575 return win 576 577#---------------------------------------------------------------------- 578 579overview = PM.__doc__ 580 581if __name__ == '__main__': 582 import sys,os 583 import run 584 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) 585