Changeset 458

Show
Ignore:
Timestamp:
Wed Jun 18 13:27:42 2008
Author:
Alexander
Message:

removed CustomTreeCtrl? and FlatNotebookfrom? ORM.py

Files:

Legend:

Unmodified
Added
Removed
Modified
  • ganttpv/trunk/ORM.py

    r457 r458  
    1 1 # Copyright 2007, 2008 by Brian C. Christensen  
    2 2  
    3   # uses FlagNotebook to control placement of the notebook pages on the screen  
    4    
    5 3 # higher priority  
    6 4 # - get undo working  
     
    65 63  
    66 64 from __future__ import division  
      65  
    67 66 import wx  
    68   # import wx.lib.flatnotebook as fnb  
    69   import random  
    70 67 # import images  
    71 68 import sys  
    72 69 import math  # to calculate angles of connectors  
      70 import random  
      71 import string  
      72 import os  
    73 73  
    74   #---------------------------------------------------------------------------  
    75   # This is the code from the custom tree control demo  
    76   #---------------------------------------------------------------------------  
    77 74 import wx.lib.ogl as ogl  
    78   #ogl.OGLInitialize()  # after app object, but before OGL is used  
      75 # ogl.OGLInitialize()  # after app object, but before OGL is used  
      76  
    79 77 import Data, ID, Menu  
    80   #db = Data.DB(Data.Database)  # will get objects from this database  
    81   #Data._db = db  # where should this be saved????? ---IMPORTANT TO FIX  
    82 78  
    83 79 debug = 1  
    84 80  
    85   #import wx  
    86   import string  
    87   import os  
    88   import wx.lib.colourselect as csel  
    89    
    90   # import wx.lib.customtreectrl as CT  
    91    
    92   # from Main import opj  
    93   # import images  
    94 81  
    95 82  
     
    172 159  
    173 160  
    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