ConfTreeNodeEditor.py
changeset 781 cdc6393705ce
parent 775 172be32a2482
--- a/ConfTreeNodeEditor.py	Mon Jun 25 12:13:58 2012 +0200
+++ b/ConfTreeNodeEditor.py	Mon Jun 25 20:05:29 2012 +0200
@@ -9,9 +9,9 @@
 
 from PLCOpenEditor import TITLE, FILEMENU, PROJECTTREE, PAGETITLES
 
-from util.misc import opjimg
 from util.TextCtrlAutoComplete import TextCtrlAutoComplete
 from util.BrowseValuesLibraryDialog import BrowseValuesLibraryDialog
+from utils.BitmapLibrary import GetBitmap
 
 if wx.Platform == '__WXMSW__':
     faces = { 'times': 'Times New Roman',
@@ -124,12 +124,8 @@
                  style = 0,
                  name = "genstatbmp"):
         
-        bitmappath = Bpath( "images", bitmapname)
-        if os.path.isfile(bitmappath):
-            bitmap = wx.Bitmap(bitmappath)
-        else:
-            bitmap = None
-        wx.lib.statbmp.GenStaticBitmap.__init__(self, parent, ID, bitmap,
+        wx.lib.statbmp.GenStaticBitmap.__init__(self, parent, ID, 
+                 GetBitmap(bitmapname),
                  pos, size,
                  style,
                  name)
@@ -151,15 +147,15 @@
     def _init_ConfNodeEditor(self, prnt):
         self.ConfNodeEditor = None
     
-    def _init_Editor(self, prnt):
-        self.Editor = wx.SplitterWindow(id=self.ID, name='EditorSplitter', parent=prnt,
-              size=wx.Size(0, 0), style=wx.SUNKEN_BORDER|wx.SP_3D)
+    def _init_Editor(self, parent):
+        self.Editor = wx.SplitterWindow(parent,
+              style=wx.SUNKEN_BORDER|wx.SP_3D)
         self.SetNeedUpdating(True)
         self.SetMinimumPaneSize(1)
         
         if self.SHOW_PARAMS:
-            self.ParamsEditor = wx.ScrolledWindow(self.Editor, -1, size=wx.Size(-1, -1),
-                            style=wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER|wx.HSCROLL|wx.VSCROLL)
+            self.ParamsEditor = wx.ScrolledWindow(self.Editor, 
+                  style=wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER|wx.HSCROLL|wx.VSCROLL)
             self.ParamsEditor.SetBackgroundColour(WINDOW_COLOUR)
             self.ParamsEditor.Bind(wx.EVT_SIZE, self.OnWindowResize)
             self.ParamsEditor.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheel)
@@ -175,51 +171,45 @@
                 self.ParamsEditor.SetSizer(self.ParamsEditorSizer)
                 
                 baseparamseditor_sizer = wx.BoxSizer(wx.HORIZONTAL)
-                self.ParamsEditorSizer.AddSizer(baseparamseditor_sizer, 0, border=5, 
-                                                flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.TOP)
+                self.ParamsEditorSizer.AddSizer(baseparamseditor_sizer, border=5, 
+                      flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.TOP)
                 
                 self.FullIECChannel = wx.StaticText(self.ParamsEditor, -1)
                 self.FullIECChannel.SetFont(
                     wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL, 
                             wx.BOLD, faceName = faces["helv"]))
-                baseparamseditor_sizer.AddWindow(self.FullIECChannel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
+                baseparamseditor_sizer.AddWindow(self.FullIECChannel, 
+                      flag=wx.ALIGN_CENTER_VERTICAL)
                 
                 updownsizer = wx.BoxSizer(wx.VERTICAL)
-                baseparamseditor_sizer.AddSizer(updownsizer, 0, border=5, 
-                                            flag=wx.LEFT|wx.ALIGN_CENTER_VERTICAL)
-                
-                ieccupbutton_id = wx.NewId()
-                self.IECCUpButton = wx.lib.buttons.GenBitmapTextButton(
-                      id=ieccupbutton_id, bitmap=wx.Bitmap(opjimg('IECCDown')),
-                      name='IECUpButton', parent=self.ParamsEditor, pos=wx.Point(0, 0),
-                      size=wx.Size(16, 16), style=wx.NO_BORDER)
+                baseparamseditor_sizer.AddSizer(updownsizer, border=5, 
+                      flag=wx.LEFT|wx.ALIGN_CENTER_VERTICAL)
+                
+                self.IECCUpButton = wx.lib.buttons.GenBitmapTextButton(self.ParamsEditor, 
+                      bitmap=GetBitmap('IECCDown'), size=wx.Size(16, 16), style=wx.NO_BORDER)
                 self.IECCUpButton.Bind(wx.EVT_BUTTON, self.GetItemChannelChangedFunction(1), 
-                                      id=ieccupbutton_id)
-                updownsizer.AddWindow(self.IECCUpButton, 0, border=0, flag=wx.ALIGN_LEFT)
-                
-                ieccdownbutton_id = wx.NewId()
-                self.IECCDownButton = wx.lib.buttons.GenBitmapButton(
-                      id=ieccdownbutton_id, bitmap=wx.Bitmap(opjimg('IECCUp')),
-                      name='IECDownButton', parent=self.ParamsEditor, pos=wx.Point(0, 0),
-                      size=wx.Size(16, 16), style=wx.NO_BORDER)
+                      self.IECCUpButton)
+                updownsizer.AddWindow(self.IECCUpButton, flag=wx.ALIGN_LEFT)
+                
+                self.IECCDownButton = wx.lib.buttons.GenBitmapButton(self.ParamsEditor, 
+                      bitmap=GetBitmap('IECCUp'), size=wx.Size(16, 16), style=wx.NO_BORDER)
                 self.IECCDownButton.Bind(wx.EVT_BUTTON, self.GetItemChannelChangedFunction(-1), 
-                                        id=ieccdownbutton_id)
-                updownsizer.AddWindow(self.IECCDownButton, 0, border=0, flag=wx.ALIGN_LEFT)
-                
-                confnodename_id = wx.NewId()
-                self.ConfNodeName = wx.TextCtrl(
-                      self.ParamsEditor, confnodename_id, 
+                      self.IECCDownButton)
+                updownsizer.AddWindow(self.IECCDownButton, flag=wx.ALIGN_LEFT)
+                
+                self.ConfNodeName = wx.TextCtrl(self.ParamsEditor, 
                       size=wx.Size(150, 25), style=wx.NO_BORDER)
                 self.ConfNodeName.SetFont(
                     wx.Font(faces["size"] * 0.75, wx.DEFAULT, wx.NORMAL, 
                             wx.BOLD, faceName = faces["helv"]))
                 self.ConfNodeName.Bind(wx.EVT_TEXT, 
-                    self.GetTextCtrlCallBackFunction(self.ConfNodeName, "BaseParams.Name", True), 
-                    id=confnodename_id)
-                baseparamseditor_sizer.AddWindow(self.ConfNodeName, 0, border=5, flag=wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
+                      self.GetTextCtrlCallBackFunction(self.ConfNodeName, "BaseParams.Name", True), 
+                      self.ConfNodeName)
+                baseparamseditor_sizer.AddWindow(self.ConfNodeName, border=5, 
+                      flag=wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
                 
                 buttons_sizer = self.GenerateMethodButtonSizer()
-                baseparamseditor_sizer.AddSizer(buttons_sizer, 0, border=0, flag=wx.ALIGN_CENTER)
+                baseparamseditor_sizer.AddSizer(buttons_sizer, flag=wx.ALIGN_CENTER)
             
             else:
                 self.ParamsEditorSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=1, vgap=5)
@@ -227,8 +217,8 @@
                 self.ParamsEditorSizer.AddGrowableRow(0)
             
             self.ConfNodeParamsSizer = wx.BoxSizer(wx.VERTICAL)
-            self.ParamsEditorSizer.AddSizer(self.ConfNodeParamsSizer, 0, border=5, 
-                                            flag=wx.LEFT|wx.RIGHT|wx.BOTTOM)
+            self.ParamsEditorSizer.AddSizer(self.ConfNodeParamsSizer, border=5, 
+                  flag=wx.LEFT|wx.RIGHT|wx.BOTTOM)
             
             self.RefreshConfNodeParamsSizer()
         else:
@@ -250,11 +240,12 @@
     def __init__(self, parent, controler, window, tagname=""):
         EditorPanel.__init__(self, parent, tagname, window, controler)
         
-        icon_path = self.Controler.GetIconPath()
-        if icon_path is None:
-            icon_path = opjimg("Extension")
-        self.SetIcon(wx.Bitmap(icon_path, wx.BITMAP_TYPE_PNG))
-    
+        icon_name = self.Controler.GetIconName()
+        if icon_name is not None:
+            self.SetIcon(GetBitmap(icon_name))
+        else:
+            self.SetIcon(GetBitmap("Extension"))
+        
     def __del__(self):
         self.Controler.OnCloseEditor(self)
     
@@ -313,20 +304,15 @@
         
         for confnode_method in self.Controler.ConfNodeMethods:
             if "method" in confnode_method and confnode_method.get("shown",True):
-                id = wx.NewId()
-                label = confnode_method["name"]
-                bitmap_path = confnode_method.get("bitmap", "Unknown")
-                if os.path.splitext(bitmap_path)[1] == "":
-                    bitmap_path = Bpath("images", "%s.png" % bitmap_path)
-                button = GenBitmapTextButton(id=id, parent=self.ParamsEditor,
-                    bitmap=wx.Bitmap(bitmap_path), label=label, 
-                    name=label, pos=wx.DefaultPosition, style=wx.NO_BORDER)
+                button = GenBitmapTextButton(self.ParamsEditor,
+                    bitmap=GetBitmap(confnode_method.get("bitmap", "Unknown")), 
+                    label=confnode_method["name"], style=wx.NO_BORDER)
                 button.SetFont(normal_bt_font)
                 button.SetToolTipString(confnode_method["tooltip"])
                 if confnode_method.get("push", False):
                     button.Bind(wx.EVT_LEFT_DOWN, self.GetButtonCallBackFunction(confnode_method["method"], True))
                 else:
-                    button.Bind(wx.EVT_BUTTON, self.GetButtonCallBackFunction(confnode_method["method"]), id=id)
+                    button.Bind(wx.EVT_BUTTON, self.GetButtonCallBackFunction(confnode_method["method"]), button)
                 # a fancy underline on mouseover
                 def setFontStyle(b, s):
                     def fn(event):
@@ -339,7 +325,7 @@
                 #hack to force size to mini
                 if not confnode_method.get("enabled",True):
                     button.Disable()
-                msizer.AddWindow(button, 0, border=0, flag=wx.ALIGN_CENTER)
+                msizer.AddWindow(button, flag=wx.ALIGN_CENTER)
         return msizer
     
     def GenerateSizerElements(self, sizer, elements, path, clean = True):
@@ -353,57 +339,64 @@
                 element_path = element_infos["name"]
             if element_infos["type"] == "element":
                 label = element_infos["name"]
-                staticbox = wx.StaticBox(id=-1, label=_(label), 
-                    name='%s_staticbox'%element_infos["name"], parent=self.ParamsEditor,
-                    pos=wx.Point(0, 0), size=wx.Size(10, 0), style=0)
+                staticbox = wx.StaticBox(self.ParamsEditor, 
+                      label=_(label), size=wx.Size(10, 0))
                 staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL)
                 if first:
-                    sizer.AddSizer(staticboxsizer, 0, border=5, flag=wx.GROW|wx.TOP|wx.BOTTOM)
+                    sizer.AddSizer(staticboxsizer, border=5, 
+                          flag=wx.GROW|wx.TOP|wx.BOTTOM)
                 else:
-                    sizer.AddSizer(staticboxsizer, 0, border=5, flag=wx.GROW|wx.BOTTOM)
-                self.GenerateSizerElements(staticboxsizer, element_infos["children"], element_path)
+                    sizer.AddSizer(staticboxsizer, border=5, 
+                          flag=wx.GROW|wx.BOTTOM)
+                self.GenerateSizerElements(staticboxsizer, 
+                                           element_infos["children"], 
+                                           element_path)
             else:
                 boxsizer = wx.FlexGridSizer(cols=3, rows=1)
                 boxsizer.AddGrowableCol(1)
                 if first:
-                    sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.ALL)
+                    sizer.AddSizer(boxsizer, border=5, 
+                          flag=wx.GROW|wx.ALL)
                 else:
-                    sizer.AddSizer(boxsizer, 0, border=5, flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
-                staticbitmap = GenStaticBitmap(ID=-1, bitmapname="%s.png"%element_infos["name"],
+                    sizer.AddSizer(boxsizer, border=5, 
+                          flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM)
+                
+                staticbitmap = GenStaticBitmap(ID=-1, bitmapname=element_infos["name"],
                     name="%s_bitmap"%element_infos["name"], parent=self.ParamsEditor,
                     pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
-                boxsizer.AddWindow(staticbitmap, 0, border=5, flag=wx.RIGHT)
-                label = element_infos["name"]
-                statictext = wx.StaticText(id=-1, label="%s:"%_(label), 
-                    name="%s_label"%element_infos["name"], parent=self.ParamsEditor, 
-                    pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
-                boxsizer.AddWindow(statictext, 0, border=5, flag=wx.ALIGN_CENTER_VERTICAL|wx.RIGHT)
-                id = wx.NewId()
+                boxsizer.AddWindow(staticbitmap, border=5, flag=wx.RIGHT)
+                
+                statictext = wx.StaticText(self.ParamsEditor, 
+                      label="%s:"%_(element_infos["name"]))
+                boxsizer.AddWindow(statictext, border=5, 
+                      flag=wx.ALIGN_CENTER_VERTICAL|wx.RIGHT)
+                
                 if isinstance(element_infos["type"], types.ListType):
                     if isinstance(element_infos["value"], types.TupleType):
                         browse_boxsizer = wx.BoxSizer(wx.HORIZONTAL)
-                        boxsizer.AddSizer(browse_boxsizer, 0, border=0, flag=0)
+                        boxsizer.AddSizer(browse_boxsizer)
                         
-                        textctrl = wx.TextCtrl(id=id, name=element_infos["name"], parent=self.ParamsEditor, 
-                            pos=wx.Point(0, 0), size=wx.Size(275, 25), style=wx.TE_READONLY)
+                        textctrl = wx.TextCtrl(self.ParamsEditor, 
+                              size=wx.Size(275, 25), style=wx.TE_READONLY)
                         if element_infos["value"] is not None:
                             textctrl.SetValue(element_infos["value"][0])
                             value_infos = element_infos["value"][1]
                         else:
                             value_infos = None
-                        browse_boxsizer.AddWindow(textctrl, 0, border=0, flag=0)
-                        button_id = wx.NewId()
-                        button = wx.Button(id=button_id, name="browse_%s" % element_infos["name"], parent=self.ParamsEditor, 
-                            label="...", pos=wx.Point(0, 0), size=wx.Size(25, 25))
-                        browse_boxsizer.AddWindow(button, 0, border=0, flag=0)
+                        browse_boxsizer.AddWindow(textctrl)
+                        
+                        button = wx.Button(self.ParamsEditor, 
+                              label="...", size=wx.Size(25, 25))
+                        browse_boxsizer.AddWindow(button)
                         button.Bind(wx.EVT_BUTTON, 
                                     self.GetBrowseCallBackFunction(element_infos["name"], textctrl, element_infos["type"], 
                                                                    value_infos, element_path), 
-                                    id=button_id)
+                                    button)
                     else:
-                        combobox = wx.ComboBox(id=id, name=element_infos["name"], parent=self.ParamsEditor, 
-                            pos=wx.Point(0, 0), size=wx.Size(300, 28), style=wx.CB_READONLY)
-                        boxsizer.AddWindow(combobox, 0, border=0, flag=0)
+                        combobox = wx.ComboBox(self.ParamsEditor, 
+                              size=wx.Size(300, 28), style=wx.CB_READONLY)
+                        boxsizer.AddWindow(combobox)
+                        
                         if element_infos["use"] == "optional":
                             combobox.Append("")
                         if len(element_infos["type"]) > 0 and isinstance(element_infos["type"][0], types.TupleType):
@@ -411,11 +404,11 @@
                                 combobox.Append(choice)
                             name = element_infos["name"]
                             value = element_infos["value"]
-                            staticbox = wx.StaticBox(id=-1, label="%s - %s"%(_(name), _(value)), 
-                                name='%s_staticbox'%element_infos["name"], parent=self.ParamsEditor,
-                                pos=wx.Point(0, 0), size=wx.Size(10, 0), style=0)
+                        
+                            staticbox = wx.StaticBox(self.ParamsEditor, 
+                                  label="%s - %s"%(_(name), _(value)), size=wx.Size(10, 0))
                             staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL)
-                            sizer.AddSizer(staticboxsizer, 0, border=5, flag=wx.GROW|wx.BOTTOM)
+                            sizer.AddSizer(staticboxsizer, border=5, flag=wx.GROW|wx.BOTTOM)
                             self.GenerateSizerElements(staticboxsizer, element_infos["children"], element_path)
                             callback = self.GetChoiceContentCallBackFunction(combobox, staticboxsizer, element_path)
                         else:
@@ -426,7 +419,8 @@
                             combobox.SetStringSelection("")
                         else:
                             combobox.SetStringSelection(element_infos["value"])
-                        combobox.Bind(wx.EVT_COMBOBOX, callback, id=id)
+                        combobox.Bind(wx.EVT_COMBOBOX, callback, combobox)
+                
                 elif isinstance(element_infos["type"], types.DictType):
                     scmin = -(2**31)
                     scmax = 2**31-1
@@ -434,47 +428,52 @@
                         scmin = element_infos["type"]["min"]
                     if "max" in element_infos["type"]:
                         scmax = element_infos["type"]["max"]
-                    spinctrl = wx.SpinCtrl(id=id, name=element_infos["name"], parent=self.ParamsEditor, 
-                        pos=wx.Point(0, 0), size=wx.Size(300, 25), style=wx.SP_ARROW_KEYS|wx.ALIGN_RIGHT)
-                    spinctrl.SetRange(scmin,scmax)
-                    boxsizer.AddWindow(spinctrl, 0, border=0, flag=0)
+                    spinctrl = wx.SpinCtrl(self.ParamsEditor, 
+                          size=wx.Size(300, 25), style=wx.SP_ARROW_KEYS|wx.ALIGN_RIGHT)
+                    spinctrl.SetRange(scmin, scmax)
+                    boxsizer.AddWindow(spinctrl)
                     if element_infos["value"] is not None:
                         spinctrl.SetValue(element_infos["value"])
-                    spinctrl.Bind(wx.EVT_SPINCTRL, self.GetTextCtrlCallBackFunction(spinctrl, element_path), id=id)
+                    spinctrl.Bind(wx.EVT_SPINCTRL, 
+                                  self.GetTextCtrlCallBackFunction(spinctrl, element_path),
+                                  spinctrl)
+                
                 else:
                     if element_infos["type"] == "boolean":
-                        checkbox = wx.CheckBox(id=id, name=element_infos["name"], parent=self.ParamsEditor, 
-                            pos=wx.Point(0, 0), size=wx.Size(17, 25), style=0)
-                        boxsizer.AddWindow(checkbox, 0, border=0, flag=0)
+                        checkbox = wx.CheckBox(self.ParamsEditor, size=wx.Size(17, 25))
+                        boxsizer.AddWindow(checkbox)
                         if element_infos["value"] is not None:
                             checkbox.SetValue(element_infos["value"])
-                        checkbox.Bind(wx.EVT_CHECKBOX, self.GetCheckBoxCallBackFunction(checkbox, element_path), id=id)
+                        checkbox.Bind(wx.EVT_CHECKBOX, 
+                                      self.GetCheckBoxCallBackFunction(checkbox, element_path), 
+                                      checkbox)
+                    
                     elif element_infos["type"] in ["unsignedLong", "long","integer"]:
                         if element_infos["type"].startswith("unsigned"):
                             scmin = 0
                         else:
                             scmin = -(2**31)
                         scmax = 2**31-1
-                        spinctrl = wx.SpinCtrl(id=id, name=element_infos["name"], parent=self.ParamsEditor, 
-                            pos=wx.Point(0, 0), size=wx.Size(300, 25), style=wx.SP_ARROW_KEYS|wx.ALIGN_RIGHT)
+                        spinctrl = wx.SpinCtrl(self.ParamsEditor, 
+                              size=wx.Size(300, 25), style=wx.SP_ARROW_KEYS|wx.ALIGN_RIGHT)
                         spinctrl.SetRange(scmin, scmax)
-                        boxsizer.AddWindow(spinctrl, 0, border=0, flag=0)
+                        boxsizer.AddWindow(spinctrl)
                         if element_infos["value"] is not None:
                             spinctrl.SetValue(element_infos["value"])
-                        spinctrl.Bind(wx.EVT_SPINCTRL, self.GetTextCtrlCallBackFunction(spinctrl, element_path), id=id)
+                        spinctrl.Bind(wx.EVT_SPINCTRL, 
+                                      self.GetTextCtrlCallBackFunction(spinctrl, element_path), 
+                                      spinctrl)
+                    
                     else:
                         choices = self.ParentWindow.GetConfigEntry(element_path, [""])
-                        textctrl = TextCtrlAutoComplete(id=id, 
-                                                                     name=element_infos["name"], 
-                                                                     parent=self.ParamsEditor, 
-                                                                     appframe=self, 
-                                                                     choices=choices, 
-                                                                     element_path=element_path,
-                                                                     pos=wx.Point(0, 0), 
-                                                                     size=wx.Size(300, 25), 
-                                                                     style=0)
+                        textctrl = TextCtrlAutoComplete(name=element_infos["name"], 
+                                                        parent=self.ParamsEditor, 
+                                                        appframe=self, 
+                                                        choices=choices, 
+                                                        element_path=element_path,
+                                                        size=wx.Size(300, 25))
                         
-                        boxsizer.AddWindow(textctrl, 0, border=0, flag=0)
+                        boxsizer.AddWindow(textctrl)
                         if element_infos["value"] is not None:
                             textctrl.ChangeValue(str(element_infos["value"]))
                         textctrl.Bind(wx.EVT_TEXT, self.GetTextCtrlCallBackFunction(textctrl, element_path))