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() |