etherlab/ConfigEditor.py
changeset 2030 7147f20c23e3
parent 2029 7c848efa21c6
child 2034 ae8fecf082a1
equal deleted inserted replaced
2029:7c848efa21c6 2030:7147f20c23e3
   470 
   470 
   471 [ID_CONFIGEDITOR, ID_CONFIGEDITORADDSLAVEBUTTON,
   471 [ID_CONFIGEDITOR, ID_CONFIGEDITORADDSLAVEBUTTON,
   472  ID_CONFIGEDITORDELETESLAVEBUTTON, ID_CONFIGEDITORSLAVENODES,
   472  ID_CONFIGEDITORDELETESLAVEBUTTON, ID_CONFIGEDITORSLAVENODES,
   473 ] = [wx.NewId() for _init_ctrls in range(4)]
   473 ] = [wx.NewId() for _init_ctrls in range(4)]
   474 
   474 
       
   475 [ID_CONFIGEDITORPLUGINMENUADDSLAVE, ID_CONFIGEDITORPLUGINMENUDELETESLAVE,
       
   476 ] = [wx.NewId() for _init_coll_PluginMenu_Items in range(2)]
       
   477 
   475 class ConfigEditor(EditorPanel):
   478 class ConfigEditor(EditorPanel):
   476     
   479     
   477     ID = ID_CONFIGEDITOR
   480     ID = ID_CONFIGEDITOR
   478     
   481     
   479     def _init_coll_MainSizer_Items(self, parent):
   482     def _init_coll_MainSizer_Items(self, parent):
   480         parent.AddSizer(self.ButtonSizer, 0, border=5, flag=wx.ALIGN_RIGHT|wx.TOP|wx.LEFT|wx.RIGHT)
   483         parent.AddWindow(self.SlaveNodes, 0, border=5, flag=wx.GROW|wx.ALL)
   481         parent.AddWindow(self.SlaveNodes, 0, border=5, flag=wx.GROW|wx.BOTTOM|wx.LEFT|wx.RIGHT)
       
   482 
   484 
   483     def _init_coll_MainSizer_Growables(self, parent):
   485     def _init_coll_MainSizer_Growables(self, parent):
   484         parent.AddGrowableCol(0)
   486         parent.AddGrowableCol(0)
   485         parent.AddGrowableRow(1)
   487         parent.AddGrowableRow(0)
   486     
   488     
   487     def _init_coll_ButtonSizer_Items(self, parent):
       
   488         parent.AddWindow(self.AddSlaveButton, 0, border=5, flag=wx.RIGHT)
       
   489         parent.AddWindow(self.DeleteSlaveButton, 0, border=5, flag=0)
       
   490         
       
   491     def _init_sizers(self):
   489     def _init_sizers(self):
   492         self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10)
   490         self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=1, vgap=0)
   493         self.ButtonSizer = wx.BoxSizer(wx.HORIZONTAL)
       
   494         
   491         
   495         self._init_coll_MainSizer_Items(self.MainSizer)
   492         self._init_coll_MainSizer_Items(self.MainSizer)
   496         self._init_coll_MainSizer_Growables(self.MainSizer)
   493         self._init_coll_MainSizer_Growables(self.MainSizer)
   497         self._init_coll_ButtonSizer_Items(self.ButtonSizer)
       
   498         
   494         
   499         self.Editor.SetSizer(self.MainSizer)
   495         self.Editor.SetSizer(self.MainSizer)
   500     
   496     
   501     def _init_Editor(self, prnt):
   497     def _init_Editor(self, prnt):
   502         self.Editor = wx.Panel(id=-1, parent=prnt, pos=wx.Point(0, 0), 
   498         self.Editor = wx.Panel(id=-1, parent=prnt, pos=wx.Point(0, 0), 
   503                 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   499                 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
   504     
       
   505         self.AddSlaveButton = wx.Button(id=ID_CONFIGEDITORADDSLAVEBUTTON, label=_('Add slave'),
       
   506               name='AddSlaveButton', parent=self.Editor, pos=wx.Point(0, 0),
       
   507               size=wx.DefaultSize, style=0)
       
   508         self.Bind(wx.EVT_BUTTON, self.OnAddSlaveButtonClick, id=ID_CONFIGEDITORADDSLAVEBUTTON)
       
   509         
       
   510         self.DeleteSlaveButton = wx.Button(id=ID_CONFIGEDITORDELETESLAVEBUTTON, label=_('Delete slave'),
       
   511               name='DeleteSlaveButton', parent=self.Editor, pos=wx.Point(0, 0),
       
   512               size=wx.DefaultSize, style=0)
       
   513         self.Bind(wx.EVT_BUTTON, self.OnDeleteSlaveButtonClick, id=ID_CONFIGEDITORDELETESLAVEBUTTON)
       
   514         
   500         
   515         self.SlaveNodes = wx.Notebook(id=ID_CONFIGEDITORSLAVENODES,
   501         self.SlaveNodes = wx.Notebook(id=ID_CONFIGEDITORSLAVENODES,
   516               name='SlaveNodes', parent=self.Editor, pos=wx.Point(0, 0),
   502               name='SlaveNodes', parent=self.Editor, pos=wx.Point(0, 0),
   517               size=wx.Size(0, 0), style=wx.NB_LEFT)
   503               size=wx.Size(0, 0), style=wx.NB_LEFT)
   518         
   504         
   519         self._init_sizers()
   505         self._init_sizers()
   520     
   506     
       
   507     def _init_MenuItems(self):
       
   508         self.MenuItems = [
       
   509             (wx.ITEM_NORMAL, (_("Add slave"), ID_CONFIGEDITORPLUGINMENUADDSLAVE, '', self.OnAddSlaveMenu)),
       
   510             (wx.ITEM_NORMAL, (_("Delete slave"), ID_CONFIGEDITORPLUGINMENUDELETESLAVE, '', self.OnDeleteSlaveMenu)),
       
   511         ]
       
   512     
   521     def __init__(self, parent, controler, window):
   513     def __init__(self, parent, controler, window):
   522         EditorPanel.__init__(self, parent, "", window, controler)
   514         EditorPanel.__init__(self, parent, "", window, controler)
   523         
   515         
   524         img = wx.Bitmap(self.Controler.GetIconPath("Cfile.png"), wx.BITMAP_TYPE_PNG).ConvertToImage()
   516         img = wx.Bitmap(self.Controler.GetIconPath("Cfile.png"), wx.BITMAP_TYPE_PNG).ConvertToImage()
   525         self.SetIcon(wx.BitmapFromImage(img.Rescale(16, 16)))
   517         self.SetIcon(wx.BitmapFromImage(img.Rescale(16, 16)))
   526     
   518     
   527     def __del__(self):
   519     def __del__(self):
   528         self.Controler.OnCloseEditor()
   520         self.Controler.OnCloseEditor(self)
   529     
   521     
   530     def GetTitle(self):
   522     def GetTitle(self):
   531         fullname = self.Controler.PlugFullName()
   523         fullname = self.Controler.PlugFullName()
   532         if not self.Controler.ConfigIsSaved():
   524         if not self.Controler.ConfigIsSaved():
   533             return "~%s~" % fullname
   525             return "~%s~" % fullname
   554                 panel = SlavePanel(self.SlaveNodes, self.Controler, self, slave)
   546                 panel = SlavePanel(self.SlaveNodes, self.Controler, self, slave)
   555                 self.SlaveNodes.AddPage(panel, "")
   547                 self.SlaveNodes.AddPage(panel, "")
   556         while self.SlaveNodes.GetPageCount() > len(slaves):
   548         while self.SlaveNodes.GetPageCount() > len(slaves):
   557             self.SlaveNodes.RemovePage(len(slaves))
   549             self.SlaveNodes.RemovePage(len(slaves))
   558         self.RefreshSlaveNodesTitles()
   550         self.RefreshSlaveNodesTitles()
   559         self.RefreshButtons()
       
   560         if slave_pos is not None:
   551         if slave_pos is not None:
   561             self.SelectSlave(slave_pos)
   552             self.SelectSlave(slave_pos)
   562     
   553     
   563     def RefreshParentWindow(self):
   554     def RefreshParentWindow(self):
   564         self.ParentWindow.RefreshTitle()
   555         self.ParentWindow.RefreshTitle()
   565         self.ParentWindow.RefreshFileMenu()
   556         self.ParentWindow.RefreshFileMenu()
   566         self.ParentWindow.RefreshEditMenu()
   557         self.ParentWindow.RefreshEditMenu()
       
   558         self.ParentWindow.RefreshPluginMenu()
   567         self.ParentWindow.RefreshPageTitles()
   559         self.ParentWindow.RefreshPageTitles()
   568     
   560     
   569     def RefreshSlaveNodesTitles(self):
   561     def RefreshSlaveNodesTitles(self):
   570         for idx in xrange(self.SlaveNodes.GetPageCount()):
   562         for idx in xrange(self.SlaveNodes.GetPageCount()):
   571             panel = self.SlaveNodes.GetPage(idx)
   563             panel = self.SlaveNodes.GetPage(idx)
   572             self.SlaveNodes.SetPageText(idx, panel.GetSlaveTitle())
   564             self.SlaveNodes.SetPageText(idx, panel.GetSlaveTitle())
   573             
   565             
   574     def RefreshButtons(self):
   566     def RefreshPluginMenu(self, plugin_menu):
   575         self.DeleteSlaveButton.Enable(self.SlaveNodes.GetPageCount() > 0)
   567         plugin_menu.Enable(ID_CONFIGEDITORPLUGINMENUDELETESLAVE, 
       
   568                            self.SlaveNodes.GetPageCount() > 0)
   576     
   569     
   577     def SelectSlave(self, slave):
   570     def SelectSlave(self, slave):
   578         for idx in xrange(self.SlaveNodes.GetPageCount()):
   571         for idx in xrange(self.SlaveNodes.GetPageCount()):
   579             panel = self.SlaveNodes.GetPage(idx)
   572             panel = self.SlaveNodes.GetPage(idx)
   580             if panel.GetSlave() == slave:
   573             if panel.GetSlave() == slave:
   581                 self.SlaveNodes.SetSelection(idx)
   574                 self.SlaveNodes.SetSelection(idx)
   582                 return
   575                 return
   583     
   576     
   584     def OnAddSlaveButtonClick(self, event):
   577     def OnAddSlaveMenu(self, event):
   585         slave = self.Controler.AddSlave()
   578         slave = self.Controler.AddSlave()
   586         self.RefreshParentWindow()
   579         self.RefreshParentWindow()
   587         wx.CallAfter(self.RefreshView, slave)
   580         wx.CallAfter(self.RefreshView, slave)
   588         event.Skip()
   581         
   589     
   582     def OnDeleteSlaveMenu(self, event):
   590     def OnDeleteSlaveButtonClick(self, event):
       
   591         selected = self.SlaveNodes.GetSelection()
   583         selected = self.SlaveNodes.GetSelection()
   592         if selected != -1:
   584         if selected != -1:
   593             panel = self.SlaveNodes.GetPage(selected)
   585             panel = self.SlaveNodes.GetPage(selected)
   594             if self.Controler.RemoveSlave(panel.GetSlave()[:2]):
   586             if self.Controler.RemoveSlave(panel.GetSlave()[:2]):
   595                 self.RefreshParentWindow()
   587                 self.RefreshParentWindow()