diff -r 70632f4612a1 -r cdc6393705ce ConfTreeNodeEditor.py --- 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))