etherlab/ConfigEditor.py
changeset 2100 bb43a81356eb
parent 2099 ea5384ab152c
child 2105 a62c0de6986f
equal deleted inserted replaced
2099:ea5384ab152c 2100:bb43a81356eb
   258             colname = self.GetColLabelValue(col, False)
   258             colname = self.GetColLabelValue(col, False)
   259             if colname.startswith("Read from"):
   259             if colname.startswith("Read from"):
   260                 value = self.data[row].get("ReadFrom", "")
   260                 value = self.data[row].get("ReadFrom", "")
   261                 if value == "":
   261                 if value == "":
   262                     return value
   262                     return value
   263                 return "%d, #x%0.4x, #x%0.2x" % value
   263                 return "%d, #x%0.4X, #x%0.2X" % value
   264             elif colname.startswith("Write to"):
   264             elif colname.startswith("Write to"):
   265                 value = self.data[row].get("WriteTo", "")
   265                 value = self.data[row].get("WriteTo", "")
   266                 if value == "":
   266                 if value == "":
   267                     return value
   267                     return value
   268                 return "%d, #x%0.4x, #x%0.2x" % value
   268                 return "%d, #x%0.4X, #x%0.2X" % value
   269             return self.data[row].get(colname, "")
   269             return self.data[row].get(colname, "")
   270     
   270     
   271     def SetValue(self, row, col, value):
   271     def SetValue(self, row, col, value):
   272         if col < len(self.colnames):
   272         if col < len(self.colnames):
   273             colname = self.GetColLabelValue(col, False)
   273             colname = self.GetColLabelValue(col, False)
   424     def GetValue(self, row, col):
   424     def GetValue(self, row, col):
   425         if row < self.GetNumberRows():
   425         if row < self.GetNumberRows():
   426             colname = self.GetColLabelValue(col, False)
   426             colname = self.GetColLabelValue(col, False)
   427             value = self.data[row].get(colname, "")
   427             value = self.data[row].get(colname, "")
   428             if colname == "Index":
   428             if colname == "Index":
   429                 return "#x%0.4x" % value
   429                 return "#x%0.4X" % value
   430             elif colname == "Subindex":
   430             elif colname == "Subindex":
   431                 return "#x%0.2x" % value
   431                 return "#x%0.2X" % value
   432             return value
   432             return value
   433     
   433     
   434     def SetValue(self, row, col, value):
   434     def SetValue(self, row, col, value):
   435         if col < len(self.colnames):
   435         if col < len(self.colnames):
   436             colname = self.GetColLabelValue(col, False)
   436             colname = self.GetColLabelValue(col, False)
   563         self.StartupCommandsGrid = CustomGrid(self.EthercatMasterEditor, style=wx.VSCROLL)
   563         self.StartupCommandsGrid = CustomGrid(self.EthercatMasterEditor, style=wx.VSCROLL)
   564         self.StartupCommandsGrid.SetDropTarget(StartupCommandDropTarget(self))
   564         self.StartupCommandsGrid.SetDropTarget(StartupCommandDropTarget(self))
   565         self.StartupCommandsGrid.SetMinSize(wx.Size(0, 150))
   565         self.StartupCommandsGrid.SetMinSize(wx.Size(0, 150))
   566         self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, 
   566         self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, 
   567               self.OnStartupCommandsGridCellChange)
   567               self.OnStartupCommandsGridCellChange)
       
   568         self.StartupCommandsGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, 
       
   569               self.OnStartupCommandsGridEditorShow)
   568         
   570         
   569         second_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Nodes variables filter:"))
   571         second_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Nodes variables filter:"))
   570         second_staticbox_sizer = wx.StaticBoxSizer(second_staticbox, wx.VERTICAL)
   572         second_staticbox_sizer = wx.StaticBoxSizer(second_staticbox, wx.VERTICAL)
   571         
   573         
   572         self.NodesVariables = MasterNodesVariablesSizer(self.EthercatMasterEditor, self.Controler)
   574         self.NodesVariables = MasterNodesVariablesSizer(self.EthercatMasterEditor, self.Controler)
   598 
   600 
   599     def __init__(self, parent, controler, window):
   601     def __init__(self, parent, controler, window):
   600         ConfTreeNodeEditor.__init__(self, parent, controler, window)
   602         ConfTreeNodeEditor.__init__(self, parent, controler, window)
   601         
   603         
   602         self.ProcessVariables = []
   604         self.ProcessVariables = []
   603         self.LastCommandInfos = None
   605         self.CellShown = None
   604         
   606         
   605         self.ProcessVariablesDefaultValue = {"Name": "", "ReadFrom": "", "WriteTo": "", "Description": ""}
   607         self.ProcessVariablesDefaultValue = {"Name": "", "ReadFrom": "", "WriteTo": "", "Description": ""}
   606         self.ProcessVariablesTable = ProcessVariablesTable(self, [], GetProcessVariablesTableColnames())
   608         self.ProcessVariablesTable = ProcessVariablesTable(self, [], GetProcessVariablesTableColnames())
   607         self.ProcessVariablesColSizes = [40, 100, 150, 150, 200]
   609         self.ProcessVariablesColSizes = [40, 100, 150, 150, 200]
   608         self.ProcessVariablesColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]
   610         self.ProcessVariablesColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT]
   761             self.ProcessVariablesTable.GetData())
   763             self.ProcessVariablesTable.GetData())
   762         self.RefreshBuffer()
   764         self.RefreshBuffer()
   763     
   765     
   764     def RefreshStartupCommands(self, position=None, command_idx=None):
   766     def RefreshStartupCommands(self, position=None, command_idx=None):
   765         if self.CurrentNodesFilter is not None:
   767         if self.CurrentNodesFilter is not None:
   766             self.StartupCommandsGrid.CloseEditControl()
       
   767             self.StartupCommandsTable.SetData(
   768             self.StartupCommandsTable.SetData(
   768                 self.Controler.GetStartupCommands(**self.CurrentNodesFilter))
   769                 self.Controler.GetStartupCommands(**self.CurrentNodesFilter))
   769             self.StartupCommandsTable.ResetView(self.StartupCommandsGrid)
   770             self.StartupCommandsTable.ResetView(self.StartupCommandsGrid)
   770             if position is not None and command_idx is not None:
   771             if position is not None and command_idx is not None:
   771                 self.SelectStartupCommand(position, command_idx)
   772                 wx.CallAfter(self.SelectStartupCommand, position, command_idx)
   772     
   773     
   773     def SelectStartupCommand(self, position, command_idx):
   774     def SelectStartupCommand(self, position, command_idx):
   774         self.StartupCommandsGrid.SetSelectedRow(
   775         self.StartupCommandsGrid.SetSelectedRow(
   775             self.StartupCommandsTable.GetCommandIndex(position, command_idx))
   776             self.StartupCommandsTable.GetCommandIndex(position, command_idx))
   776     
   777     
   845             self.SaveProcessVariables()
   846             self.SaveProcessVariables()
   846             wx.CallAfter(self.ProcessVariablesTable.ResetView, self.ProcessVariablesGrid)
   847             wx.CallAfter(self.ProcessVariablesTable.ResetView, self.ProcessVariablesGrid)
   847         else:
   848         else:
   848             event.Skip()
   849             event.Skip()
   849     
   850     
       
   851     def OnStartupCommandsGridEditorShow(self, event):
       
   852         self.CellShown = event.GetRow(), event.GetCol()
       
   853         event.Skip()
       
   854     
   850     def OnStartupCommandsGridCellChange(self, event):
   855     def OnStartupCommandsGridCellChange(self, event):
   851         row, col = event.GetRow(), event.GetCol()
   856         row, col = event.GetRow(), event.GetCol()
   852         colname = self.StartupCommandsTable.GetColLabelValue(col, False)
   857         if self.CellShown == (row, col):
   853         value = self.StartupCommandsTable.GetValue(row, col)
   858             self.CellShown = None
   854         message = None
   859             colname = self.StartupCommandsTable.GetColLabelValue(col, False)
   855         veto = False
   860             value = self.StartupCommandsTable.GetValue(row, col)
   856         if colname == "Position":
   861             message = None
   857             if value not in self.Controler.GetSlaves():
   862             if colname == "Position":
   858                 message = _("No slave defined at position %d!") % value
   863                 if value not in self.Controler.GetSlaves():
   859             if message is None:
   864                     message = _("No slave defined at position %d!") % value
   860                 self.Controler.RemoveStartupCommand(
   865                 old_value = self.StartupCommandsTable.GetOldValue()
   861                     self.StartupCommandsTable.GetOldValue(),
       
   862                     self.StartupCommandsTable.GetValueByName(row, "command_idx"))
       
   863                 command = self.StartupCommandsTable.GetRow(row)
   866                 command = self.StartupCommandsTable.GetRow(row)
   864                 command_idx = self.Controler.AppendStartupCommand(command)
   867                 if message is None and old_value != command["Position"]:
   865                 wx.CallAfter(self.RefreshStartupCommands, command["Position"], command_idx)
   868                     self.Controler.RemoveStartupCommand(
   866                 veto = True
   869                         self.StartupCommandsTable.GetOldValue(),
   867         else:
   870                         command["command_idx"], False)
   868             command = self.StartupCommandsTable.GetRow(row)
   871                     command_idx = self.Controler.AppendStartupCommand(command)
   869             if self.LastCommandInfos != command:
   872                     wx.CallAfter(self.RefreshStartupCommands, command["Position"], command_idx)
   870                 self.LastCommandInfos = command.copy()
   873             else:
       
   874                 command = self.StartupCommandsTable.GetRow(row)
   871                 self.Controler.SetStartupCommandInfos(command)
   875                 self.Controler.SetStartupCommandInfos(command)
   872                 if colname in ["Index", "SubIndex"]: 
   876                 if colname in ["Index", "SubIndex"]: 
   873                     wx.CallAfter(self.RefreshStartupCommands, command["Position"], command["command_idx"])
   877                     wx.CallAfter(self.RefreshStartupCommands, command["Position"], command["command_idx"])
   874                     veto = True
   878             if message is None:
   875         if message is None:
   879                 self.RefreshBuffer()
   876             self.RefreshBuffer()
   880                 event.Skip()
   877             if veto:
   881             else:
       
   882                 dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR)
       
   883                 dialog.ShowModal()
       
   884                 dialog.Destroy()
   878                 event.Veto()
   885                 event.Veto()
   879             else:
       
   880                 event.Skip()
       
   881         else:
   886         else:
   882             dialog = wx.MessageDialog(self, message, _("Error"), wx.OK|wx.ICON_ERROR)
       
   883             dialog.ShowModal()
       
   884             dialog.Destroy()
       
   885             event.Veto()
   887             event.Veto()
   886         
   888     
   887     def OnResize(self, event):
   889     def OnResize(self, event):
   888         self.EthercatMasterEditor.GetBestSize()
   890         self.EthercatMasterEditor.GetBestSize()
   889         xstart, ystart = self.EthercatMasterEditor.GetViewStart()
   891         xstart, ystart = self.EthercatMasterEditor.GetViewStart()
   890         window_size = self.EthercatMasterEditor.GetClientSize()
   892         window_size = self.EthercatMasterEditor.GetClientSize()
   891         maxx, maxy = self.EthercatMasterEditor.GetMinSize()
   893         maxx, maxy = self.EthercatMasterEditor.GetMinSize()