--- a/etherlab/ConfigEditor.py Thu Feb 16 18:40:13 2012 +0100
+++ b/etherlab/ConfigEditor.py Wed Feb 22 01:39:22 2012 +0100
@@ -145,20 +145,16 @@
grid.SetCellTextColour(row, col, highlight_colours[1])
self.ResizeRow(grid, row)
-[ID_SLAVEPANEL, ID_SLAVEPANELTYPELABEL,
- ID_SLAVEPANELTYPE, ID_SLAVEPANELTYPEBROWSE,
- ID_SLAVEPANELALIASLABEL, ID_SLAVEPANELALIAS,
- ID_SLAVEPANELPOSLABEL, ID_SLAVEPANELPOS,
- ID_SLAVEPANELSLAVEINFOSSTATICBOX, ID_SLAVEPANELVENDORLABEL,
- ID_SLAVEPANELVENDOR, ID_SLAVEPANELPRODUCTCODELABEL,
- ID_SLAVEPANELPRODUCTCODE, ID_SLAVEPANELREVISIONNUMBERLABEL,
- ID_SLAVEPANELREVISIONNUMBER, ID_SLAVEPANELPHYSICSLABEL,
- ID_SLAVEPANELPHYSICS, ID_SLAVEPANELSYNCMANAGERSLABEL,
- ID_SLAVEPANELSYNCMANAGERSGRID, ID_SLAVEPANELVARIABLESLABEL,
- ID_SLAVEPANELVARIABLESGRID,
-] = [wx.NewId() for _init_ctrls in range(21)]
-
-class SlavePanel(wx.Panel):
+[ID_SLAVEINFOSPANEL, ID_SLAVEINFOSPANELVENDORLABEL,
+ ID_SLAVEINFOSPANELVENDOR, ID_SLAVEINFOSPANELPRODUCTCODELABEL,
+ ID_SLAVEINFOSPANELPRODUCTCODE, ID_SLAVEINFOSPANELREVISIONNUMBERLABEL,
+ ID_SLAVEINFOSPANELREVISIONNUMBER, ID_SLAVEINFOSPANELPHYSICSLABEL,
+ ID_SLAVEINFOSPANELPHYSICS, ID_SLAVEINFOSPANELSYNCMANAGERSLABEL,
+ ID_SLAVEINFOSPANELSYNCMANAGERSGRID, ID_SLAVEINFOSPANELVARIABLESLABEL,
+ ID_SLAVEINFOSPANELVARIABLESGRID,
+] = [wx.NewId() for _init_ctrls in range(13)]
+
+class SlaveInfosPanel(wx.Panel):
if wx.VERSION < (2, 6, 0):
def Bind(self, event, function, id = None):
@@ -168,43 +164,14 @@
event(self, function)
def _init_coll_MainSizer_Items(self, parent):
- parent.AddSizer(self.PositionSizer, 0, border=5, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
- parent.AddSizer(self.SlaveInfosBoxSizer, 0, border=5, flag=wx.GROW|wx.ALIGN_RIGHT|wx.LEFT|wx.RIGHT)
-
+ parent.AddSizer(self.SlaveInfosDetailsSizer, 0, border=5, flag=wx.TOP|wx.LEFT|wx.RIGHT|wx.GROW)
+ parent.AddWindow(self.SyncManagersLabel, 0, border=5, flag=wx.LEFT|wx.RIGHT|wx.GROW)
+ parent.AddWindow(self.SyncManagersGrid, 0, border=5, flag=wx.LEFT|wx.RIGHT|wx.GROW)
+ parent.AddWindow(self.VariablesLabel, 0, border=5, flag=wx.LEFT|wx.RIGHT|wx.GROW)
+ parent.AddWindow(self.VariablesGrid, 0, border=5, flag=wx.BOTTOM|wx.LEFT|wx.RIGHT|wx.GROW)
+
def _init_coll_MainSizer_Growables(self, parent):
parent.AddGrowableCol(0)
- parent.AddGrowableRow(1)
-
- def _init_coll_PositionSizer_Items(self, parent):
- parent.AddWindow(self.TypeLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
- parent.AddSizer(self.TypeSizer, 0, border=0, flag=wx.GROW)
- parent.AddWindow(self.AliasLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
- parent.AddWindow(self.Alias, 0, border=0, flag=wx.GROW)
- parent.AddWindow(self.PosLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
- parent.AddWindow(self.Pos, 0, border=0, flag=wx.GROW)
-
- def _init_coll_PositionSizer_Growables(self, parent):
- parent.AddGrowableCol(1)
- parent.AddGrowableCol(3)
- parent.AddGrowableCol(5)
- parent.AddGrowableRow(0)
-
- def _init_coll_TypeSizer_Items(self, parent):
- parent.AddWindow(self.Type, 1, border=0, flag=0)
- parent.AddWindow(self.TypeBrowse, 0, border=0, flag=0)
-
- def _init_coll_SlaveInfosBoxSizer_Items(self, parent):
- parent.AddSizer(self.SlaveInfosSizer, 1, border=5, flag=wx.GROW|wx.ALL)
-
- def _init_coll_SlaveInfosSizer_Items(self, parent):
- parent.AddSizer(self.SlaveInfosDetailsSizer, 0, border=0, flag=wx.GROW)
- parent.AddWindow(self.SyncManagersLabel, 0, border=0, flag=wx.GROW)
- parent.AddWindow(self.SyncManagersGrid, 0, border=0, flag=wx.GROW)
- parent.AddWindow(self.VariablesLabel, 0, border=0, flag=wx.GROW)
- parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wx.GROW)
-
- def _init_coll_SlaveInfosSizer_Growables(self, parent):
- parent.AddGrowableCol(0)
parent.AddGrowableRow(2, 1)
parent.AddGrowableRow(4, 2)
@@ -223,110 +190,65 @@
parent.AddGrowableCol(3)
def _init_sizers(self):
- self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
- self.PositionSizer = wx.FlexGridSizer(cols=6, hgap=5, rows=1, vgap=0)
- self.TypeSizer = wx.BoxSizer(wx.HORIZONTAL)
- self.SlaveInfosBoxSizer = wx.StaticBoxSizer(self.SlaveInfosStaticBox, wx.VERTICAL)
- self.SlaveInfosSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=5, vgap=5)
+ self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=5, vgap=5)
self.SlaveInfosDetailsSizer = wx.FlexGridSizer(cols=4, hgap=5, rows=2, vgap=5)
self._init_coll_MainSizer_Growables(self.MainSizer)
self._init_coll_MainSizer_Items(self.MainSizer)
- self._init_coll_PositionSizer_Growables(self.PositionSizer)
- self._init_coll_PositionSizer_Items(self.PositionSizer)
- self._init_coll_TypeSizer_Items(self.TypeSizer)
- self._init_coll_SlaveInfosBoxSizer_Items(self.SlaveInfosBoxSizer)
- self._init_coll_SlaveInfosSizer_Growables(self.SlaveInfosSizer)
- self._init_coll_SlaveInfosSizer_Items(self.SlaveInfosSizer)
self._init_coll_SlaveInfosDetailsSizer_Growables(self.SlaveInfosDetailsSizer)
self._init_coll_SlaveInfosDetailsSizer_Items(self.SlaveInfosDetailsSizer)
self.SetSizer(self.MainSizer)
-
+
def _init_ctrls(self, prnt):
- wx.Panel.__init__(self, id=ID_SLAVEPANEL, name='SlavePanel', parent=prnt,
+ wx.Panel.__init__(self, id=ID_SLAVEINFOSPANEL, name='SlavePanel', parent=prnt,
size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
- self.TypeLabel = wx.StaticText(id=ID_SLAVEPANELTYPELABEL,
- label=_('Type:'), name='TypeLabel', parent=self,
- pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
-
- self.Type = wx.TextCtrl(id=ID_SLAVEPANELTYPE, value='',
- name='Type', parent=self, pos=wx.Point(0, 0),
- size=wx.Size(0, 24), style=wx.TE_READONLY)
-
- self.TypeBrowse = wx.Button(id=ID_SLAVEPANELTYPEBROWSE, label='...',
- name='TypeBrowse', parent=self, pos=wx.Point(0, 0),
- size=wx.Size(30, 24), style=0)
- self.Bind(wx.EVT_BUTTON, self.OnTypeBrowseClick, id=ID_SLAVEPANELTYPEBROWSE)
-
- self.AliasLabel = wx.StaticText(id=ID_SLAVEPANELALIASLABEL,
- label=_('Alias:'), name='AliasLabel', parent=self,
- pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
-
- self.Alias = wx.SpinCtrl(id=ID_SLAVEPANELALIAS,
- name='Alias', parent=self, pos=wx.Point(0, 0),
- size=wx.Size(0, 24), style=wx.SP_ARROW_KEYS, min=0, max=0xffff)
- self.Bind(wx.EVT_SPINCTRL, self.OnAliasChanged, id=ID_SLAVEPANELALIAS)
-
- self.PosLabel = wx.StaticText(id=ID_SLAVEPANELPOSLABEL,
- label=_('Position:'), name='PositionLabel', parent=self,
- pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
-
- self.Pos = wx.SpinCtrl(id=ID_SLAVEPANELPOS,
- name='Pos', parent=self, pos=wx.Point(0, 0),
- size=wx.Size(0, 24), style=wx.SP_ARROW_KEYS, min=0, max=0xffff)
- self.Bind(wx.EVT_SPINCTRL, self.OnPositionChanged, id=ID_SLAVEPANELPOS)
-
- self.SlaveInfosStaticBox = wx.StaticBox(id=ID_SLAVEPANELSLAVEINFOSSTATICBOX,
- label=_('Slave infos:'), name='SlaveInfosStaticBox', parent=self,
- pos=wx.Point(0, 0), size=wx.Size(0, 0), style=0)
-
- self.VendorLabel = wx.StaticText(id=ID_SLAVEPANELVENDORLABEL,
+ self.VendorLabel = wx.StaticText(id=ID_SLAVEINFOSPANELVENDORLABEL,
label=_('Vendor:'), name='VendorLabel', parent=self,
pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
- self.Vendor = wx.TextCtrl(id=ID_SLAVEPANELVENDOR, value='',
+ self.Vendor = wx.TextCtrl(id=ID_SLAVEINFOSPANELVENDOR, value='',
name='Vendor', parent=self, pos=wx.Point(0, 0),
size=wx.Size(0, 24), style=wx.TE_READONLY)
- self.ProductCodeLabel = wx.StaticText(id=ID_SLAVEPANELPRODUCTCODELABEL,
+ self.ProductCodeLabel = wx.StaticText(id=ID_SLAVEINFOSPANELPRODUCTCODELABEL,
label=_('Product code:'), name='ProductCodeLabel', parent=self,
pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
- self.ProductCode = wx.TextCtrl(id=ID_SLAVEPANELPRODUCTCODE, value='',
+ self.ProductCode = wx.TextCtrl(id=ID_SLAVEINFOSPANELPRODUCTCODE, value='',
name='ProductCode', parent=self, pos=wx.Point(0, 0),
size=wx.Size(0, 24), style=wx.TE_READONLY)
- self.RevisionNumberLabel = wx.StaticText(id=ID_SLAVEPANELREVISIONNUMBERLABEL,
+ self.RevisionNumberLabel = wx.StaticText(id=ID_SLAVEINFOSPANELREVISIONNUMBERLABEL,
label=_('Revision number:'), name='RevisionNumberLabel', parent=self,
pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
- self.RevisionNumber = wx.TextCtrl(id=ID_SLAVEPANELREVISIONNUMBER, value='',
+ self.RevisionNumber = wx.TextCtrl(id=ID_SLAVEINFOSPANELREVISIONNUMBER, value='',
name='RevisionNumber', parent=self, pos=wx.Point(0, 0),
size=wx.Size(0, 24), style=wx.TE_READONLY)
- self.PhysicsLabel = wx.StaticText(id=ID_SLAVEPANELPHYSICSLABEL,
+ self.PhysicsLabel = wx.StaticText(id=ID_SLAVEINFOSPANELPHYSICSLABEL,
label=_('Physics:'), name='PhysicsLabel', parent=self,
pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
- self.Physics = wx.TextCtrl(id=ID_SLAVEPANELPHYSICS, value='',
+ self.Physics = wx.TextCtrl(id=ID_SLAVEINFOSPANELPHYSICS, value='',
name='Physics', parent=self, pos=wx.Point(0, 0),
size=wx.Size(0, 24), style=wx.TE_READONLY)
- self.SyncManagersLabel = wx.StaticText(id=ID_SLAVEPANELSYNCMANAGERSLABEL,
+ self.SyncManagersLabel = wx.StaticText(id=ID_SLAVEINFOSPANELSYNCMANAGERSLABEL,
label=_('Sync managers:'), name='SyncManagersLabel', parent=self,
pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
- self.SyncManagersGrid = CustomGrid(id=ID_SLAVEPANELSYNCMANAGERSGRID,
+ self.SyncManagersGrid = CustomGrid(id=ID_SLAVEINFOSPANELSYNCMANAGERSGRID,
name='SyncManagersGrid', parent=self, pos=wx.Point(0, 0),
size=wx.Size(0, 0), style=wx.VSCROLL)
- self.VariablesLabel = wx.StaticText(id=ID_SLAVEPANELVARIABLESLABEL,
+ self.VariablesLabel = wx.StaticText(id=ID_SLAVEINFOSPANELVARIABLESLABEL,
label=_('Variable entries:'), name='VariablesLabel', parent=self,
pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
- self.VariablesGrid = CustomGrid(id=ID_SLAVEPANELVARIABLESGRID,
+ self.VariablesGrid = CustomGrid(id=ID_SLAVEINFOSPANELVARIABLESGRID,
name='VariablesGrid', parent=self, pos=wx.Point(0, 0),
size=wx.Size(0, 0), style=wx.VSCROLL)
if wx.VERSION >= (2, 5, 0):
@@ -335,13 +257,11 @@
wx.grid.EVT_GRID_CELL_LEFT_CLICK(self.VariablesGrid, self.OnVariablesGridCellLeftClick)
self._init_sizers()
-
- def __init__(self, parent, controler, window, slave):
+
+ def __init__(self, parent, controler):
self._init_ctrls(parent)
self.Controler = controler
- self.ParentWindow = window
- self.Slave = slave
self.SyncManagersTable = SyncManagersTable(self, [], GetSyncManagersTableColnames())
self.SyncManagersGrid.SetTable(self.SyncManagersTable)
@@ -369,27 +289,9 @@
self.VariablesGrid.SetColAttr(col, attr)
self.VariablesGrid.SetColMinimalWidth(col, self.VariablesGridColSizes[col])
self.VariablesGrid.AutoSizeColumn(col, False)
-
- self.RefreshView()
-
- def GetSlaveTitle(self):
- type_infos = self.Controler.GetSlaveType(self.Slave)
- return "%s (%d:%d)" % (type_infos["device_type"], self.Slave[0], self.Slave[1])
-
- def GetSlave(self):
- return self.Slave
-
- def SetSlave(self, slave):
- if self.Slave != slave:
- self.Slave = slave
- self.RefreshView()
-
- def RefreshView(self):
- self.Alias.SetValue(self.Slave[0])
- self.Pos.SetValue(self.Slave[1])
- slave_infos = self.Controler.GetSlaveInfos(self.Slave)
+
+ def SetSlaveInfos(self, slave_infos):
if slave_infos is not None:
- self.Type.SetValue(slave_infos["device_type"])
self.Vendor.SetValue(slave_infos["vendor"])
self.ProductCode.SetValue(slave_infos["product_code"])
self.RevisionNumber.SetValue(slave_infos["revision_number"])
@@ -399,49 +301,14 @@
self.VariablesTable.SetData(slave_infos["entries"])
self.VariablesTable.ResetView(self.VariablesGrid)
else:
- type_infos = self.Controler.GetSlaveType(self.Slave)
- self.Type.SetValue(type_infos["device_type"])
-
- def OnAliasChanged(self, event):
- alias = self.Alias.GetValue()
- if alias != self.Slave[0]:
- result = self.Controler.SetSlavePos(self.Slave[:2], alias = alias)
- if result is not None:
- message = wx.MessageDialog(self, result, _("Error"), wx.OK|wx.ICON_ERROR)
- message.ShowModal()
- message.Destroy()
- else:
- wx.CallAfter(self.ParentWindow.RefreshView, (alias, self.Slave[1]))
- wx.CallAfter(self.ParentWindow.RefreshParentWindow)
- event.Skip()
-
- def OnPositionChanged(self, event):
- position = self.Pos.GetValue()
- if position != self.Slave[1]:
- result = self.Controler.SetSlavePos(self.Slave, position = position)
- if result is not None:
- message = wx.MessageDialog(self, result, _("Error"), wx.OK|wx.ICON_ERROR)
- message.ShowModal()
- message.Destroy()
- else:
- wx.CallAfter(self.ParentWindow.RefreshView, (self.Slave[0], position))
- wx.CallAfter(self.ParentWindow.RefreshParentWindow)
- event.Skip()
-
- def OnTypeBrowseClick(self, event):
- dialog = SlaveTypeChoiceDialog(self, self.Controler, self.Controler.GetSlaveType(self.Slave))
- if dialog.ShowModal() == wx.ID_OK:
- result = self.Controler.SetSlaveType(self.Slave, dialog.GetType())
- if result is not None:
- message = wx.MessageDialog(self, result, _("Error"), wx.OK|wx.ICON_ERROR)
- message.ShowModal()
- message.Destroy()
- else:
- wx.CallAfter(self.RefreshView)
- wx.CallAfter(self.ParentWindow.RefreshSlaveNodesTitles)
- wx.CallAfter(self.ParentWindow.RefreshParentWindow)
- dialog.Destroy()
- event.Skip()
+ self.Vendor.SetValue("")
+ self.ProductCode.SetValue("")
+ self.RevisionNumber.SetValue("")
+ self.Physics.SetValue("")
+ self.SyncManagersTable.SetData([])
+ self.SyncManagersTable.ResetView(self.SyncManagersGrid)
+ self.VariablesTable.SetData([])
+ self.VariablesTable.ResetView(self.VariablesGrid)
def OnVariablesGridCellLeftClick(self, event):
row = event.GetRow()
@@ -468,9 +335,184 @@
event.Skip()
-[ID_CONFIGEDITOR, ID_CONFIGEDITORADDSLAVEBUTTON,
- ID_CONFIGEDITORDELETESLAVEBUTTON, ID_CONFIGEDITORSLAVENODES,
-] = [wx.NewId() for _init_ctrls in range(4)]
+[ID_SLAVEPANEL, ID_SLAVEPANELTYPELABEL,
+ ID_SLAVEPANELTYPE, ID_SLAVEPANELTYPEBROWSE,
+ ID_SLAVEPANELALIASLABEL, ID_SLAVEPANELALIAS,
+ ID_SLAVEPANELPOSLABEL, ID_SLAVEPANELPOS,
+ ID_SLAVEPANELSLAVEINFOSSTATICBOX,
+] = [wx.NewId() for _init_ctrls in range(9)]
+
+class SlavePanel(wx.Panel):
+
+ if wx.VERSION < (2, 6, 0):
+ def Bind(self, event, function, id = None):
+ if id is not None:
+ event(self, id, function)
+ else:
+ event(self, function)
+
+ def _init_coll_MainSizer_Items(self, parent):
+ parent.AddSizer(self.PositionSizer, 0, border=5, flag=wx.GROW|wx.TOP|wx.LEFT|wx.RIGHT)
+ parent.AddSizer(self.SlaveInfosBoxSizer, 0, border=5, flag=wx.GROW|wx.ALIGN_RIGHT|wx.LEFT|wx.RIGHT)
+
+ def _init_coll_MainSizer_Growables(self, parent):
+ parent.AddGrowableCol(0)
+ parent.AddGrowableRow(1)
+
+ def _init_coll_PositionSizer_Items(self, parent):
+ parent.AddWindow(self.TypeLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
+ parent.AddSizer(self.TypeSizer, 0, border=0, flag=wx.GROW)
+ parent.AddWindow(self.AliasLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
+ parent.AddWindow(self.Alias, 0, border=0, flag=wx.GROW)
+ parent.AddWindow(self.PosLabel, 0, border=0, flag=wx.ALIGN_CENTER_VERTICAL)
+ parent.AddWindow(self.Pos, 0, border=0, flag=wx.GROW)
+
+ def _init_coll_PositionSizer_Growables(self, parent):
+ parent.AddGrowableCol(1)
+ parent.AddGrowableCol(3)
+ parent.AddGrowableCol(5)
+ parent.AddGrowableRow(0)
+
+ def _init_coll_TypeSizer_Items(self, parent):
+ parent.AddWindow(self.Type, 1, border=0, flag=0)
+ parent.AddWindow(self.TypeBrowse, 0, border=0, flag=0)
+
+ def _init_coll_SlaveInfosBoxSizer_Items(self, parent):
+ parent.AddWindow(self.SlaveInfosPanel, 1, border=0, flag=wx.GROW)
+
+ def _init_sizers(self):
+ self.MainSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=5)
+ self.PositionSizer = wx.FlexGridSizer(cols=6, hgap=5, rows=1, vgap=0)
+ self.TypeSizer = wx.BoxSizer(wx.HORIZONTAL)
+ self.SlaveInfosBoxSizer = wx.StaticBoxSizer(self.SlaveInfosStaticBox, wx.VERTICAL)
+
+ self._init_coll_MainSizer_Growables(self.MainSizer)
+ self._init_coll_MainSizer_Items(self.MainSizer)
+ self._init_coll_PositionSizer_Growables(self.PositionSizer)
+ self._init_coll_PositionSizer_Items(self.PositionSizer)
+ self._init_coll_TypeSizer_Items(self.TypeSizer)
+ self._init_coll_SlaveInfosBoxSizer_Items(self.SlaveInfosBoxSizer)
+
+ self.SetSizer(self.MainSizer)
+
+ def _init_ctrls(self, prnt):
+ wx.Panel.__init__(self, id=ID_SLAVEPANEL, name='SlavePanel', parent=prnt,
+ size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL)
+
+ self.TypeLabel = wx.StaticText(id=ID_SLAVEPANELTYPELABEL,
+ label=_('Type:'), name='TypeLabel', parent=self,
+ pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
+
+ self.Type = wx.TextCtrl(id=ID_SLAVEPANELTYPE, value='',
+ name='Type', parent=self, pos=wx.Point(0, 0),
+ size=wx.Size(0, 24), style=wx.TE_READONLY)
+
+ self.TypeBrowse = wx.Button(id=ID_SLAVEPANELTYPEBROWSE, label='...',
+ name='TypeBrowse', parent=self, pos=wx.Point(0, 0),
+ size=wx.Size(30, 24), style=0)
+ self.Bind(wx.EVT_BUTTON, self.OnTypeBrowseClick, id=ID_SLAVEPANELTYPEBROWSE)
+
+ self.AliasLabel = wx.StaticText(id=ID_SLAVEPANELALIASLABEL,
+ label=_('Alias:'), name='AliasLabel', parent=self,
+ pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
+
+ self.Alias = wx.SpinCtrl(id=ID_SLAVEPANELALIAS,
+ name='Alias', parent=self, pos=wx.Point(0, 0),
+ size=wx.Size(0, 24), style=wx.SP_ARROW_KEYS, min=0, max=0xffff)
+ self.Bind(wx.EVT_SPINCTRL, self.OnAliasChanged, id=ID_SLAVEPANELALIAS)
+
+ self.PosLabel = wx.StaticText(id=ID_SLAVEPANELPOSLABEL,
+ label=_('Position:'), name='PositionLabel', parent=self,
+ pos=wx.Point(0, 0), size=wx.DefaultSize, style=0)
+
+ self.Pos = wx.SpinCtrl(id=ID_SLAVEPANELPOS,
+ name='Pos', parent=self, pos=wx.Point(0, 0),
+ size=wx.Size(0, 24), style=wx.SP_ARROW_KEYS, min=0, max=0xffff)
+ self.Bind(wx.EVT_SPINCTRL, self.OnPositionChanged, id=ID_SLAVEPANELPOS)
+
+ self.SlaveInfosStaticBox = wx.StaticBox(id=ID_SLAVEPANELSLAVEINFOSSTATICBOX,
+ label=_('Slave infos:'), name='SlaveInfosStaticBox', parent=self,
+ pos=wx.Point(0, 0), size=wx.Size(0, 0), style=0)
+
+ self.SlaveInfosPanel = SlaveInfosPanel(self, self.Controler)
+
+ self._init_sizers()
+
+ def __init__(self, parent, controler, window, slave):
+ self.Controler = controler
+ self.ParentWindow = window
+ self.Slave = slave
+
+ self._init_ctrls(parent)
+
+ self.RefreshView()
+
+ def GetSlaveTitle(self):
+ type_infos = self.Controler.GetSlaveType(self.Slave)
+ return "%s (%d:%d)" % (type_infos["device_type"], self.Slave[0], self.Slave[1])
+
+ def GetSlave(self):
+ return self.Slave
+
+ def SetSlave(self, slave):
+ if self.Slave != slave:
+ self.Slave = slave
+ self.RefreshView()
+
+ def RefreshView(self):
+ self.Alias.SetValue(self.Slave[0])
+ self.Pos.SetValue(self.Slave[1])
+ slave_infos = self.Controler.GetSlaveInfos(self.Slave)
+ if slave_infos is not None:
+ self.Type.SetValue(slave_infos["device_type"])
+ else:
+ type_infos = self.Controler.GetSlaveType(self.Slave)
+ self.Type.SetValue(type_infos["device_type"])
+ self.SlaveInfosPanel.SetSlaveInfos(slave_infos)
+
+ def OnAliasChanged(self, event):
+ alias = self.Alias.GetValue()
+ if alias != self.Slave[0]:
+ result = self.Controler.SetSlavePos(self.Slave[:2], alias = alias)
+ if result is not None:
+ message = wx.MessageDialog(self, result, _("Error"), wx.OK|wx.ICON_ERROR)
+ message.ShowModal()
+ message.Destroy()
+ else:
+ wx.CallAfter(self.ParentWindow.RefreshView, (alias, self.Slave[1]))
+ wx.CallAfter(self.ParentWindow.RefreshParentWindow)
+ event.Skip()
+
+ def OnPositionChanged(self, event):
+ position = self.Pos.GetValue()
+ if position != self.Slave[1]:
+ result = self.Controler.SetSlavePos(self.Slave, position = position)
+ if result is not None:
+ message = wx.MessageDialog(self, result, _("Error"), wx.OK|wx.ICON_ERROR)
+ message.ShowModal()
+ message.Destroy()
+ else:
+ wx.CallAfter(self.ParentWindow.RefreshView, (self.Slave[0], position))
+ wx.CallAfter(self.ParentWindow.RefreshParentWindow)
+ event.Skip()
+
+ def OnTypeBrowseClick(self, event):
+ dialog = SlaveTypeChoiceDialog(self, self.Controler, self.Controler.GetSlaveType(self.Slave))
+ if dialog.ShowModal() == wx.ID_OK:
+ result = self.Controler.SetSlaveType(self.Slave, dialog.GetType())
+ if result is not None:
+ message = wx.MessageDialog(self, result, _("Error"), wx.OK|wx.ICON_ERROR)
+ message.ShowModal()
+ message.Destroy()
+ else:
+ wx.CallAfter(self.RefreshView)
+ wx.CallAfter(self.ParentWindow.RefreshSlaveNodesTitles)
+ wx.CallAfter(self.ParentWindow.RefreshParentWindow)
+ dialog.Destroy()
+ event.Skip()
+
+[ID_CONFIGEDITOR, ID_CONFIGEDITORSLAVENODES,
+] = [wx.NewId() for _init_ctrls in range(2)]
[ID_CONFIGEDITORPLUGINMENUADDSLAVE, ID_CONFIGEDITORPLUGINMENUDELETESLAVE,
] = [wx.NewId() for _init_coll_PluginMenu_Items in range(2)]
@@ -586,4 +628,33 @@
if self.Controler.RemoveSlave(panel.GetSlave()[:2]):
self.RefreshParentWindow()
wx.CallAfter(self.RefreshView)
-
\ No newline at end of file
+
+
+[ID_DS402NODEEDITOR,
+] = [wx.NewId() for _init_ctrls in range(1)]
+
+class DS402NodeEditor(EditorPanel):
+
+ ID = ID_DS402NODEEDITOR
+
+ def _init_Editor(self, prnt):
+ self.Editor = SlaveInfosPanel(prnt, self.Controler)
+
+ def __init__(self, parent, controler, window):
+ EditorPanel.__init__(self, parent, "", window, controler)
+
+ img = wx.Bitmap(self.Controler.GetIconPath("Cfile.png"), wx.BITMAP_TYPE_PNG).ConvertToImage()
+ self.SetIcon(wx.BitmapFromImage(img.Rescale(16, 16)))
+
+ def __del__(self):
+ self.Controler.OnCloseEditor(self)
+
+ def GetTitle(self):
+ return self.Controler.PlugFullName()
+
+ def GetBufferState(self):
+ return False, False
+
+ def RefreshView(self):
+ self.Editor.SetSlaveInfos(self.Controler.GetSlaveInfos())
+
\ No newline at end of file