editors/ConfTreeNodeEditor.py
branchwxPython4
changeset 3303 0ffb41625592
parent 3291 7d0e7e4d88cd
child 3589 a0b645a934c9
equal deleted inserted replaced
3302:c89fc366bebd 3303:0ffb41625592
   118                  style=0,
   118                  style=0,
   119                  name="genstatbmp"):
   119                  name="genstatbmp"):
   120 
   120 
   121         bitmap = GetBitmap(bitmapname)
   121         bitmap = GetBitmap(bitmapname)
   122         if bitmap is None:
   122         if bitmap is None:
   123             bitmap = wx.EmptyBitmap(0, 0)
   123             bitmap = wx.Bitmap()
   124 
   124 
   125         wx.StaticBitmap.__init__(self, parent, ID,
   125         wx.StaticBitmap.__init__(self, parent, ID,
   126                                  bitmap,
   126                                  bitmap,
   127                                  pos, size,
   127                                  pos, size,
   128                                  style,
   128                                  style,
   146 
   146 
   147             self.MainSizer = wx.BoxSizer(wx.VERTICAL)
   147             self.MainSizer = wx.BoxSizer(wx.VERTICAL)
   148 
   148 
   149             if self.SHOW_BASE_PARAMS:
   149             if self.SHOW_BASE_PARAMS:
   150                 baseparamseditor_sizer = wx.BoxSizer(wx.HORIZONTAL)
   150                 baseparamseditor_sizer = wx.BoxSizer(wx.HORIZONTAL)
   151                 self.MainSizer.AddSizer(baseparamseditor_sizer, border=5,
   151                 self.MainSizer.Add(baseparamseditor_sizer, border=5,
   152                                         flag=wx.GROW | wx.ALL)
   152                                         flag=wx.GROW | wx.ALL)
   153 
   153 
   154                 self.FullIECChannel = wx.StaticText(self.Editor, -1)
   154                 self.FullIECChannel = wx.StaticText(self.Editor, -1)
   155                 self.FullIECChannel.SetFont(
   155                 self.FullIECChannel.SetFont(
   156                     wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL,
   156                     wx.Font(faces["size"], wx.DEFAULT, wx.NORMAL,
   157                             wx.BOLD, faceName=faces["helv"]))
   157                             wx.BOLD, faceName=faces["helv"]))
   158                 baseparamseditor_sizer.AddWindow(self.FullIECChannel,
   158                 baseparamseditor_sizer.Add(self.FullIECChannel,
   159                                                  flag=wx.ALIGN_CENTER_VERTICAL)
   159                                                  flag=wx.ALIGN_CENTER_VERTICAL)
   160 
   160 
   161                 updownsizer = wx.BoxSizer(wx.VERTICAL)
   161                 updownsizer = wx.BoxSizer(wx.VERTICAL)
   162                 baseparamseditor_sizer.AddSizer(updownsizer, border=5,
   162                 baseparamseditor_sizer.Add(updownsizer, border=5,
   163                                                 flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL)
   163                                                 flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL)
   164 
   164 
   165                 self.IECCUpButton = wx.lib.buttons.GenBitmapTextButton(
   165                 self.IECCUpButton = wx.lib.buttons.GenBitmapTextButton(
   166                     self.Editor,
   166                     self.Editor,
   167                     bitmap=GetBitmap('IECCDown'),
   167                     bitmap=GetBitmap('IECCDown'),
   168                     size=wx.Size(16, 16),
   168                     size=wx.Size(16, 16),
   169                     style=wx.NO_BORDER)
   169                     style=wx.NO_BORDER)
   170                 self.IECCUpButton.Bind(wx.EVT_BUTTON, self.GetItemChannelChangedFunction(1),
   170                 self.IECCUpButton.Bind(wx.EVT_BUTTON, self.GetItemChannelChangedFunction(1),
   171                                        self.IECCUpButton)
   171                                        self.IECCUpButton)
   172                 updownsizer.AddWindow(self.IECCUpButton, flag=wx.ALIGN_LEFT)
   172                 updownsizer.Add(self.IECCUpButton, flag=wx.ALIGN_LEFT)
   173 
   173 
   174                 self.IECCDownButton = wx.lib.buttons.GenBitmapButton(
   174                 self.IECCDownButton = wx.lib.buttons.GenBitmapButton(
   175                     self.Editor, bitmap=GetBitmap('IECCUp'),
   175                     self.Editor, bitmap=GetBitmap('IECCUp'),
   176                     size=wx.Size(16, 16), style=wx.NO_BORDER)
   176                     size=wx.Size(16, 16), style=wx.NO_BORDER)
   177                 self.IECCDownButton.Bind(wx.EVT_BUTTON, self.GetItemChannelChangedFunction(-1),
   177                 self.IECCDownButton.Bind(wx.EVT_BUTTON, self.GetItemChannelChangedFunction(-1),
   178                                          self.IECCDownButton)
   178                                          self.IECCDownButton)
   179                 updownsizer.AddWindow(self.IECCDownButton, flag=wx.ALIGN_LEFT)
   179                 updownsizer.Add(self.IECCDownButton, flag=wx.ALIGN_LEFT)
   180 
   180 
   181                 self.ConfNodeName = wx.TextCtrl(self.Editor,
   181                 self.ConfNodeName = wx.TextCtrl(self.Editor,
   182                                                 size=wx.Size(150, 25))
   182                                                 size=wx.Size(150, 25))
   183                 self.ConfNodeName.SetFont(
   183                 self.ConfNodeName.SetFont(
   184                     wx.Font(faces["size"] * 0.75, wx.DEFAULT, wx.NORMAL,
   184                     wx.Font(faces["size"] * 0.75, wx.DEFAULT, wx.NORMAL,
   185                             wx.BOLD, faceName=faces["helv"]))
   185                             wx.BOLD, faceName=faces["helv"]))
   186                 self.ConfNodeName.Bind(
   186                 self.ConfNodeName.Bind(
   187                     wx.EVT_TEXT,
   187                     wx.EVT_TEXT,
   188                     self.GetTextCtrlCallBackFunction(self.ConfNodeName, "BaseParams.Name", True),
   188                     self.GetTextCtrlCallBackFunction(self.ConfNodeName, "BaseParams.Name", True),
   189                     self.ConfNodeName)
   189                     self.ConfNodeName)
   190                 baseparamseditor_sizer.AddWindow(
   190                 baseparamseditor_sizer.Add(
   191                     self.ConfNodeName, border=5,
   191                     self.ConfNodeName, border=5,
   192                     flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL)
   192                     flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER_VERTICAL)
   193 
   193 
   194                 buttons_sizer = self.GenerateMethodButtonSizer()
   194                 buttons_sizer = self.GenerateMethodButtonSizer()
   195                 baseparamseditor_sizer.AddSizer(buttons_sizer, flag=wx.ALIGN_CENTER)
   195                 baseparamseditor_sizer.Add(buttons_sizer, flag=wx.ALIGN_CENTER)
   196 
   196 
   197             if tabs_num > 1:
   197             if tabs_num > 1:
   198                 self.ConfNodeNoteBook = wx.Notebook(self.Editor)
   198                 self.ConfNodeNoteBook = wx.Notebook(self.Editor)
   199                 parent = self.ConfNodeNoteBook
   199                 parent = self.ConfNodeNoteBook
   200                 self.MainSizer.AddWindow(self.ConfNodeNoteBook, 1, flag=wx.GROW)
   200                 self.MainSizer.Add(self.ConfNodeNoteBook, 1, flag=wx.GROW)
   201             else:
   201             else:
   202                 parent = self.Editor
   202                 parent = self.Editor
   203                 self.ConfNodeNoteBook = None
   203                 self.ConfNodeNoteBook = None
   204 
   204 
   205             self.Editor.SetSizer(self.MainSizer)
   205             self.Editor.SetSizer(self.MainSizer)
   210         for title, create_func_name in self.CONFNODEEDITOR_TABS:
   210         for title, create_func_name in self.CONFNODEEDITOR_TABS:
   211             editor = getattr(self, create_func_name)(parent)
   211             editor = getattr(self, create_func_name)(parent)
   212             if self.ConfNodeNoteBook is not None:
   212             if self.ConfNodeNoteBook is not None:
   213                 self.ConfNodeNoteBook.AddPage(editor, title)
   213                 self.ConfNodeNoteBook.AddPage(editor, title)
   214             elif self.SHOW_BASE_PARAMS:
   214             elif self.SHOW_BASE_PARAMS:
   215                 self.MainSizer.AddWindow(editor, 1, flag=wx.GROW)
   215                 self.MainSizer.Add(editor, 1, flag=wx.GROW)
   216             else:
   216             else:
   217                 self.Editor = editor
   217                 self.Editor = editor
   218 
   218 
   219         if self.SHOW_PARAMS and len(self.Controler.GetParamsAttributes()) > 0:
   219         if self.SHOW_PARAMS and len(self.Controler.GetParamsAttributes()) > 0:
   220 
   220 
   230             self.ParamsEditorSizer.AddGrowableCol(0)
   230             self.ParamsEditorSizer.AddGrowableCol(0)
   231             self.ParamsEditorSizer.AddGrowableRow(0)
   231             self.ParamsEditorSizer.AddGrowableRow(0)
   232             self.ParamsEditor.SetSizer(self.ParamsEditorSizer)
   232             self.ParamsEditor.SetSizer(self.ParamsEditorSizer)
   233 
   233 
   234             self.ConfNodeParamsSizer = wx.BoxSizer(wx.VERTICAL)
   234             self.ConfNodeParamsSizer = wx.BoxSizer(wx.VERTICAL)
   235             self.ParamsEditorSizer.AddSizer(self.ConfNodeParamsSizer, border=5,
   235             self.ParamsEditorSizer.Add(self.ConfNodeParamsSizer, border=5,
   236                                             flag=wx.LEFT | wx.RIGHT | wx.BOTTOM)
   236                                             flag=wx.LEFT | wx.RIGHT | wx.BOTTOM)
   237 
   237 
   238             self.RefreshConfNodeParamsSizer()
   238             self.RefreshConfNodeParamsSizer()
   239 
   239 
   240             if self.ConfNodeNoteBook is not None:
   240             if self.ConfNodeNoteBook is not None:
   241                 self.ConfNodeNoteBook.AddPage(self.ParamsEditor, _("Config"))
   241                 self.ConfNodeNoteBook.AddPage(self.ParamsEditor, _("Config"))
   242             elif self.SHOW_BASE_PARAMS:
   242             elif self.SHOW_BASE_PARAMS:
   243                 self.MainSizer.AddWindow(self.ParamsEditor, 1, flag=wx.GROW)
   243                 self.MainSizer.Add(self.ParamsEditor, 1, flag=wx.GROW)
   244             else:
   244             else:
   245                 self.Editor = self.ParamsEditor
   245                 self.Editor = self.ParamsEditor
   246         else:
   246         else:
   247             self.ParamsEditor = None
   247             self.ParamsEditor = None
   248 
   248 
   315                 button = GenBitmapTextButton(self.Editor,
   315                 button = GenBitmapTextButton(self.Editor,
   316                                              bitmap=GetBitmap(confnode_method.get("bitmap", "Unknown")),
   316                                              bitmap=GetBitmap(confnode_method.get("bitmap", "Unknown")),
   317                                              label=confnode_method["name"],
   317                                              label=confnode_method["name"],
   318                                              style=wx.NO_BORDER)
   318                                              style=wx.NO_BORDER)
   319                 button.SetFont(normal_bt_font)
   319                 button.SetFont(normal_bt_font)
   320                 button.SetToolTipString(confnode_method["tooltip"])
   320                 button.SetToolTip(confnode_method["tooltip"])
   321                 if confnode_method.get("push", False):
   321                 if confnode_method.get("push", False):
   322                     button.Bind(wx.EVT_LEFT_DOWN, self.GetButtonCallBackFunction(confnode_method["method"], True))
   322                     button.Bind(wx.EVT_LEFT_DOWN, self.GetButtonCallBackFunction(confnode_method["method"], True))
   323                 else:
   323                 else:
   324                     button.Bind(wx.EVT_BUTTON, self.GetButtonCallBackFunction(confnode_method["method"]), button)
   324                     button.Bind(wx.EVT_BUTTON, self.GetButtonCallBackFunction(confnode_method["method"]), button)
   325                 # a fancy underline on mouseover
   325                 # a fancy underline on mouseover
   333                 button.Bind(wx.EVT_ENTER_WINDOW, setFontStyle(button, mouseover_bt_font))
   333                 button.Bind(wx.EVT_ENTER_WINDOW, setFontStyle(button, mouseover_bt_font))
   334                 button.Bind(wx.EVT_LEAVE_WINDOW, setFontStyle(button, normal_bt_font))
   334                 button.Bind(wx.EVT_LEAVE_WINDOW, setFontStyle(button, normal_bt_font))
   335                 # hack to force size to mini
   335                 # hack to force size to mini
   336                 if not confnode_method.get("enabled", True):
   336                 if not confnode_method.get("enabled", True):
   337                     button.Disable()
   337                     button.Disable()
   338                 msizer.AddWindow(button, flag=wx.ALIGN_CENTER)
   338                 msizer.Add(button, flag=wx.ALIGN_CENTER)
   339         return msizer
   339         return msizer
   340 
   340 
   341     def UriOptions(self, event):
   341     def UriOptions(self, event):
   342         CTR = self.ParentWindow.CTR
   342         CTR = self.ParentWindow.CTR
   343         CTR_BeremizRoot = CTR.BeremizRoot
   343         CTR_BeremizRoot = CTR.BeremizRoot
   378                                          label=_(label), size=wx.Size(10, 0))
   378                                          label=_(label), size=wx.Size(10, 0))
   379                 staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL)
   379                 staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL)
   380                 flags = (wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
   380                 flags = (wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
   381                 if first:
   381                 if first:
   382                     flags |= wx.TOP
   382                     flags |= wx.TOP
   383                 sizer.AddSizer(staticboxsizer, border=5, flag=flags)
   383                 sizer.Add(staticboxsizer, border=5, flag=flags)
   384                 self.GenerateSizerElements(staticboxsizer,
   384                 self.GenerateSizerElements(staticboxsizer,
   385                                            element_infos["children"],
   385                                            element_infos["children"],
   386                                            element_path)
   386                                            element_path)
   387             else:
   387             else:
   388                 boxsizer = wx.FlexGridSizer(cols=4, rows=1)
   388                 boxsizer = wx.FlexGridSizer(cols=4, rows=1, gap=wx.Size(0,0))
   389                 boxsizer.AddGrowableCol(1)
   389                 boxsizer.AddGrowableCol(1)
   390                 flags = (wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
   390                 flags = (wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
   391                 if first:
   391                 if first:
   392                     flags |= wx.TOP
   392                     flags |= wx.TOP
   393                 sizer.AddSizer(boxsizer, border=5, flag=flags)
   393                 sizer.Add(boxsizer, border=5, flag=flags)
   394                 staticbitmap = GenStaticBitmap(
   394                 staticbitmap = GenStaticBitmap(
   395                     ID=-1, bitmapname=element_infos["name"],
   395                     ID=-1, bitmapname=element_infos["name"],
   396                     name="%s_bitmap" % element_infos["name"], parent=self.ParamsEditor,
   396                     name="%s_bitmap" % element_infos["name"], parent=self.ParamsEditor,
   397                     pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
   397                     pos=wx.Point(0, 0), size=wx.Size(24, 24), style=0)
   398                 boxsizer.AddWindow(staticbitmap, border=5, flag=wx.RIGHT)
   398                 boxsizer.Add(staticbitmap, border=5, flag=wx.RIGHT)
   399 
   399 
   400                 statictext = wx.StaticText(self.ParamsEditor,
   400                 statictext = wx.StaticText(self.ParamsEditor,
   401                                            label="%s:" % _(element_infos["name"]))
   401                                            label="%s:" % _(element_infos["name"]))
   402                 boxsizer.AddWindow(statictext, border=5,
   402                 boxsizer.Add(statictext, border=5,
   403                                    flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT)
   403                                    flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT)
   404 
   404 
   405                 if isinstance(element_infos["type"], list):
   405                 if isinstance(element_infos["type"], list):
   406                     if isinstance(element_infos["value"], tuple):
   406                     if isinstance(element_infos["value"], tuple):
   407                         browse_boxsizer = wx.BoxSizer(wx.HORIZONTAL)
   407                         browse_boxsizer = wx.BoxSizer(wx.HORIZONTAL)
   408                         boxsizer.AddSizer(browse_boxsizer)
   408                         boxsizer.Add(browse_boxsizer)
   409 
   409 
   410                         textctrl = wx.TextCtrl(self.ParamsEditor,
   410                         textctrl = wx.TextCtrl(self.ParamsEditor,
   411                                                size=wx.Size(275, -1), style=wx.TE_READONLY)
   411                                                size=wx.Size(275, -1), style=wx.TE_READONLY)
   412                         if element_infos["value"] is not None:
   412                         if element_infos["value"] is not None:
   413                             textctrl.SetValue(element_infos["value"][0])
   413                             textctrl.SetValue(element_infos["value"][0])
   414                             value_infos = element_infos["value"][1]
   414                             value_infos = element_infos["value"][1]
   415                         else:
   415                         else:
   416                             value_infos = None
   416                             value_infos = None
   417                         browse_boxsizer.AddWindow(textctrl)
   417                         browse_boxsizer.Add(textctrl)
   418 
   418 
   419                         button = wx.Button(self.ParamsEditor, label="...")
   419                         button = wx.Button(self.ParamsEditor, label="...")
   420                         browse_boxsizer.AddWindow(button)
   420                         browse_boxsizer.Add(button)
   421                         button.Bind(wx.EVT_BUTTON,
   421                         button.Bind(wx.EVT_BUTTON,
   422                                     self.GetBrowseCallBackFunction(element_infos["name"], textctrl, element_infos["type"],
   422                                     self.GetBrowseCallBackFunction(element_infos["name"], textctrl, element_infos["type"],
   423                                                                    value_infos, element_path),
   423                                                                    value_infos, element_path),
   424                                     button)
   424                                     button)
   425                     else:
   425                     else:
   426                         combobox = wx.ComboBox(self.ParamsEditor,
   426                         combobox = wx.ComboBox(self.ParamsEditor,
   427                                                size=wx.Size(300, -1), style=wx.CB_READONLY)
   427                                                size=wx.Size(300, -1), style=wx.CB_READONLY)
   428                         boxsizer.AddWindow(combobox)
   428                         boxsizer.Add(combobox)
   429 
   429 
   430                         if element_infos["use"] == "optional":
   430                         if element_infos["use"] == "optional":
   431                             combobox.Append("")
   431                             combobox.Append("")
   432                         if len(element_infos["type"]) > 0 and isinstance(element_infos["type"][0], tuple):
   432                         if len(element_infos["type"]) > 0 and isinstance(element_infos["type"][0], tuple):
   433                             for choice, _xsdclass in element_infos["type"]:
   433                             for choice, _xsdclass in element_infos["type"]:
   437 
   437 
   438                             staticbox = wx.StaticBox(self.ParamsEditor,
   438                             staticbox = wx.StaticBox(self.ParamsEditor,
   439                                                      label="%s - %s" % (_(name), _(value)),
   439                                                      label="%s - %s" % (_(name), _(value)),
   440                                                      size=wx.Size(10, 0))
   440                                                      size=wx.Size(10, 0))
   441                             staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL)
   441                             staticboxsizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL)
   442                             sizer.AddSizer(staticboxsizer, border=5, flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
   442                             sizer.Add(staticboxsizer, border=5, flag=wx.GROW | wx.BOTTOM | wx.LEFT | wx.RIGHT)
   443                             self.GenerateSizerElements(staticboxsizer, element_infos["children"], element_path)
   443                             self.GenerateSizerElements(staticboxsizer, element_infos["children"], element_path)
   444                             callback = self.GetChoiceContentCallBackFunction(combobox, staticboxsizer, element_path)
   444                             callback = self.GetChoiceContentCallBackFunction(combobox, staticboxsizer, element_path)
   445                         else:
   445                         else:
   446                             for choice in element_infos["type"]:
   446                             for choice in element_infos["type"]:
   447                                 combobox.Append(choice)
   447                                 combobox.Append(choice)
   461                         scmax = element_infos["type"]["max"]
   461                         scmax = element_infos["type"]["max"]
   462                     spinctrl = wx.SpinCtrl(self.ParamsEditor,
   462                     spinctrl = wx.SpinCtrl(self.ParamsEditor,
   463                                            size=wx.Size(300, -1),
   463                                            size=wx.Size(300, -1),
   464                                            style=wx.SP_ARROW_KEYS | wx.ALIGN_RIGHT)
   464                                            style=wx.SP_ARROW_KEYS | wx.ALIGN_RIGHT)
   465                     spinctrl.SetRange(scmin, scmax)
   465                     spinctrl.SetRange(scmin, scmax)
   466                     boxsizer.AddWindow(spinctrl)
   466                     boxsizer.Add(spinctrl)
   467                     if element_infos["value"] is not None:
   467                     if element_infos["value"] is not None:
   468                         spinctrl.SetValue(element_infos["value"])
   468                         spinctrl.SetValue(element_infos["value"])
   469                     spinctrl.Bind(wx.EVT_SPINCTRL,
   469                     spinctrl.Bind(wx.EVT_SPINCTRL,
   470                                   self.GetTextCtrlCallBackFunction(spinctrl, element_path),
   470                                   self.GetTextCtrlCallBackFunction(spinctrl, element_path),
   471                                   spinctrl)
   471                                   spinctrl)
   472 
   472 
   473                 else:
   473                 else:
   474                     if element_infos["type"] == "boolean":
   474                     if element_infos["type"] == "boolean":
   475                         checkbox = wx.CheckBox(self.ParamsEditor)
   475                         checkbox = wx.CheckBox(self.ParamsEditor)
   476                         boxsizer.AddWindow(checkbox, flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT)
   476                         boxsizer.Add(checkbox, flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT)
   477                         if element_infos["value"] is not None:
   477                         if element_infos["value"] is not None:
   478                             checkbox.SetValue(element_infos["value"])
   478                             checkbox.SetValue(element_infos["value"])
   479                         checkbox.Bind(wx.EVT_CHECKBOX,
   479                         checkbox.Bind(wx.EVT_CHECKBOX,
   480                                       self.GetCheckBoxCallBackFunction(checkbox, element_path),
   480                                       self.GetCheckBoxCallBackFunction(checkbox, element_path),
   481                                       checkbox)
   481                                       checkbox)
   488                         scmax = 2**31-1
   488                         scmax = 2**31-1
   489                         spinctrl = wx.SpinCtrl(self.ParamsEditor,
   489                         spinctrl = wx.SpinCtrl(self.ParamsEditor,
   490                                                size=wx.Size(300, -1),
   490                                                size=wx.Size(300, -1),
   491                                                style=wx.SP_ARROW_KEYS | wx.ALIGN_RIGHT)
   491                                                style=wx.SP_ARROW_KEYS | wx.ALIGN_RIGHT)
   492                         spinctrl.SetRange(scmin, scmax)
   492                         spinctrl.SetRange(scmin, scmax)
   493                         boxsizer.AddWindow(spinctrl)
   493                         boxsizer.Add(spinctrl)
   494                         if element_infos["value"] is not None:
   494                         if element_infos["value"] is not None:
   495                             spinctrl.SetValue(element_infos["value"])
   495                             spinctrl.SetValue(element_infos["value"])
   496                         spinctrl.Bind(wx.EVT_SPINCTRL,
   496                         spinctrl.Bind(wx.EVT_SPINCTRL,
   497                                       self.GetTextCtrlCallBackFunction(spinctrl, element_path),
   497                                       self.GetTextCtrlCallBackFunction(spinctrl, element_path),
   498                                       spinctrl)
   498                                       spinctrl)
   511                             uriSizer.AddGrowableRow(0)
   511                             uriSizer.AddGrowableRow(0)
   512 
   512 
   513                             self.EditButton = wx.Button(self.ParamsEditor, label='...', size=wx.Size(30, -1))
   513                             self.EditButton = wx.Button(self.ParamsEditor, label='...', size=wx.Size(30, -1))
   514                             self.Bind(wx.EVT_BUTTON, self.UriOptions, self.EditButton)
   514                             self.Bind(wx.EVT_BUTTON, self.UriOptions, self.EditButton)
   515 
   515 
   516                             uriSizer.AddWindow(textctrl, flag=wx.GROW)
   516                             uriSizer.Add(textctrl, flag=wx.GROW)
   517                             uriSizer.AddWindow(self.EditButton, flag=wx.GROW)
   517                             uriSizer.Add(self.EditButton, flag=wx.GROW)
   518 
   518 
   519                             boxsizer.AddWindow(uriSizer)
   519                             boxsizer.Add(uriSizer)
   520                         else:
   520                         else:
   521                             boxsizer.AddWindow(textctrl)
   521                             boxsizer.Add(textctrl)
   522 
   522 
   523                         if element_infos["value"] is not None:
   523                         if element_infos["value"] is not None:
   524                             textctrl.ChangeValue(str(element_infos["value"]))
   524                             textctrl.ChangeValue(str(element_infos["value"]))
   525                         callback = self.GetTextCtrlCallBackFunction(textctrl, element_path)
   525                         callback = self.GetTextCtrlCallBackFunction(textctrl, element_path)
   526                         textctrl.Bind(wx.EVT_TEXT_ENTER, callback)
   526                         textctrl.Bind(wx.EVT_TEXT_ENTER, callback)
   533                         style=wx.BORDER_NONE)
   533                         style=wx.BORDER_NONE)
   534                     self.Bind(wx.EVT_BUTTON, 
   534                     self.Bind(wx.EVT_BUTTON, 
   535                               self.GetResetFunction(element_path),
   535                               self.GetResetFunction(element_path),
   536                               bt)
   536                               bt)
   537 
   537 
   538                     boxsizer.AddWindow(bt, border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT)
   538                     boxsizer.Add(bt, border=5, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT)
   539             first = False
   539             first = False
   540         sizer.Layout()
   540         sizer.Layout()
   541         self.RefreshScrollbars()
   541         self.RefreshScrollbars()
   542 
   542 
   543     def GetItemChannelChangedFunction(self, dir):
   543     def GetItemChannelChangedFunction(self, dir):