28 from EtherCATManagementEditor import EtherCATManagementTreebook, MasterStatePanelClass |
28 from EtherCATManagementEditor import EtherCATManagementTreebook, MasterStatePanelClass |
29 # ----------------------------------------------------------------------- |
29 # ----------------------------------------------------------------------- |
30 |
30 |
31 [ETHERCAT_VENDOR, ETHERCAT_GROUP, ETHERCAT_DEVICE] = range(3) |
31 [ETHERCAT_VENDOR, ETHERCAT_GROUP, ETHERCAT_DEVICE] = range(3) |
32 |
32 |
|
33 |
33 def AppendMenu(parent, help, id, kind, text): |
34 def AppendMenu(parent, help, id, kind, text): |
34 if wx.VERSION >= (2, 6, 0): |
35 if wx.VERSION >= (2, 6, 0): |
35 parent.Append(help=help, id=id, kind=kind, text=text) |
36 parent.Append(help=help, id=id, kind=kind, text=text) |
36 else: |
37 else: |
37 parent.Append(helpString=help, id=id, kind=kind, item=text) |
38 parent.Append(helpString=help, id=id, kind=kind, item=text) |
|
39 |
38 |
40 |
39 def GetVariablesTableColnames(position=False): |
41 def GetVariablesTableColnames(position=False): |
40 _ = lambda x : x |
42 _ = lambda x : x |
41 colname = ["#"] |
43 colname = ["#"] |
42 if position: |
44 if position: |
63 VARIABLE_INDEX_FILTER_FORMAT = _("Variable Index: #x%4.4X") |
66 VARIABLE_INDEX_FILTER_FORMAT = _("Variable Index: #x%4.4X") |
64 |
67 |
65 ETHERCAT_INDEX_MODEL = re.compile("#x([0-9a-fA-F]{0,4})$") |
68 ETHERCAT_INDEX_MODEL = re.compile("#x([0-9a-fA-F]{0,4})$") |
66 ETHERCAT_SUBINDEX_MODEL = re.compile("#x([0-9a-fA-F]{0,2})$") |
69 ETHERCAT_SUBINDEX_MODEL = re.compile("#x([0-9a-fA-F]{0,2})$") |
67 LOCATION_MODEL = re.compile("(?:%[IQM](?:[XBWLD]?([0-9]+(?:\.[0-9]+)*)))$") |
70 LOCATION_MODEL = re.compile("(?:%[IQM](?:[XBWLD]?([0-9]+(?:\.[0-9]+)*)))$") |
|
71 |
68 |
72 |
69 class NodeVariablesSizer(wx.FlexGridSizer): |
73 class NodeVariablesSizer(wx.FlexGridSizer): |
70 |
74 |
71 def __init__(self, parent, controler, position_column=False): |
75 def __init__(self, parent, controler, position_column=False): |
72 wx.FlexGridSizer.__init__(self, cols=1, hgap=0, rows=2, vgap=5) |
76 wx.FlexGridSizer.__init__(self, cols=1, hgap=0, rows=2, vgap=5) |
250 dragSource.DoDragDrop() |
254 dragSource.DoDragDrop() |
251 return |
255 return |
252 |
256 |
253 event.Skip() |
257 event.Skip() |
254 |
258 |
|
259 |
255 class NodeEditor(ConfTreeNodeEditor): |
260 class NodeEditor(ConfTreeNodeEditor): |
256 |
261 |
257 CONFNODEEDITOR_TABS = [ |
262 CONFNODEEDITOR_TABS = [ |
258 (_("Ethercat node"), "_create_EthercatNodeEditor"), |
263 (_("Ethercat node"), "_create_EthercatNodeEditor"), |
259 # Add Notebook Tab for EtherCAT Management Treebook |
264 # Add Notebook Tab for EtherCAT Management Treebook |
330 _ = lambda x : x |
335 _ = lambda x : x |
331 return ["#", _("Name"), |
336 return ["#", _("Name"), |
332 _("Read from (nodeid, index, subindex)"), |
337 _("Read from (nodeid, index, subindex)"), |
333 _("Write to (nodeid, index, subindex)"), |
338 _("Write to (nodeid, index, subindex)"), |
334 _("Description")] |
339 _("Description")] |
|
340 |
335 |
341 |
336 class ProcessVariablesTable(CustomTable): |
342 class ProcessVariablesTable(CustomTable): |
337 |
343 |
338 def GetValue(self, row, col): |
344 def GetValue(self, row, col): |
339 if row < self.GetNumberRows(): |
345 if row < self.GetNumberRows(): |
383 |
389 |
384 grid.SetCellEditor(row, col, editor) |
390 grid.SetCellEditor(row, col, editor) |
385 grid.SetCellRenderer(row, col, renderer) |
391 grid.SetCellRenderer(row, col, renderer) |
386 |
392 |
387 self.ResizeRow(grid, row) |
393 self.ResizeRow(grid, row) |
|
394 |
388 |
395 |
389 class ProcessVariableDropTarget(wx.TextDropTarget): |
396 class ProcessVariableDropTarget(wx.TextDropTarget): |
390 |
397 |
391 def __init__(self, parent): |
398 def __init__(self, parent): |
392 wx.TextDropTarget.__init__(self) |
399 wx.TextDropTarget.__init__(self) |
443 def ShowMessage(self, message): |
450 def ShowMessage(self, message): |
444 message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR) |
451 message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR) |
445 message.ShowModal() |
452 message.ShowModal() |
446 message.Destroy() |
453 message.Destroy() |
447 |
454 |
|
455 |
448 def GetStartupCommandsTableColnames(): |
456 def GetStartupCommandsTableColnames(): |
449 _ = lambda x : x |
457 _ = lambda x : x |
450 return [_("Position"), _("Index"), _("Subindex"), _("Value"), _("Description")] |
458 return [_("Position"), _("Index"), _("Subindex"), _("Value"), _("Description")] |
|
459 |
451 |
460 |
452 class StartupCommandDropTarget(wx.TextDropTarget): |
461 class StartupCommandDropTarget(wx.TextDropTarget): |
453 |
462 |
454 def __init__(self, parent): |
463 def __init__(self, parent): |
455 wx.TextDropTarget.__init__(self) |
464 wx.TextDropTarget.__init__(self) |
493 def ShowMessage(self, message): |
502 def ShowMessage(self, message): |
494 message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR) |
503 message = wx.MessageDialog(self.ParentWindow, message, _("Error"), wx.OK|wx.ICON_ERROR) |
495 message.ShowModal() |
504 message.ShowModal() |
496 message.Destroy() |
505 message.Destroy() |
497 |
506 |
|
507 |
498 class StartupCommandsTable(CustomTable): |
508 class StartupCommandsTable(CustomTable): |
499 |
509 |
500 """ |
510 """ |
501 A custom wx.grid.Grid Table using user supplied data |
511 A custom wx.grid.Grid Table using user supplied data |
502 """ |
512 """ |
565 for row, command in enumerate(self.data): |
575 for row, command in enumerate(self.data): |
566 if command["Position"] == position and command["command_idx"] == command_idx: |
576 if command["Position"] == position and command["command_idx"] == command_idx: |
567 return row |
577 return row |
568 return None |
578 return None |
569 |
579 |
|
580 |
570 class MasterNodesVariablesSizer(NodeVariablesSizer): |
581 class MasterNodesVariablesSizer(NodeVariablesSizer): |
571 |
582 |
572 def __init__(self, parent, controler): |
583 def __init__(self, parent, controler): |
573 NodeVariablesSizer.__init__(self, parent, controler, True) |
584 NodeVariablesSizer.__init__(self, parent, controler, True) |
574 |
585 |
583 args["limits"] = self.CurrentFilter |
594 args["limits"] = self.CurrentFilter |
584 entries = self.Controler.GetNodesVariables(**args) |
595 entries = self.Controler.GetNodesVariables(**args) |
585 self.RefreshVariablesGrid(entries) |
596 self.RefreshVariablesGrid(entries) |
586 |
597 |
587 NODE_POSITION_FILTER_FORMAT = _("Node Position: %d") |
598 NODE_POSITION_FILTER_FORMAT = _("Node Position: %d") |
|
599 |
588 |
600 |
589 class MasterEditor(ConfTreeNodeEditor): |
601 class MasterEditor(ConfTreeNodeEditor): |
590 |
602 |
591 CONFNODEEDITOR_TABS = [ |
603 CONFNODEEDITOR_TABS = [ |
592 (_("Network"), "_create_EthercatMasterEditor"), |
604 (_("Network"), "_create_EthercatMasterEditor"), |
1079 # self.LossRate3.SetValue(self.MasterState["loss3"]) |
1091 # self.LossRate3.SetValue(self.MasterState["loss3"]) |
1080 # self.FrameLoss1.SetValue(self.MasterState["frameloss1"]) |
1092 # self.FrameLoss1.SetValue(self.MasterState["frameloss1"]) |
1081 # self.FrameLoss2.SetValue(self.MasterState["frameloss2"]) |
1093 # self.FrameLoss2.SetValue(self.MasterState["frameloss2"]) |
1082 # self.FrameLoss3.SetValue(self.MasterState["frameloss3"]) |
1094 # self.FrameLoss3.SetValue(self.MasterState["frameloss3"]) |
1083 |
1095 |
|
1096 |
1084 class LibraryEditorSizer(wx.FlexGridSizer): |
1097 class LibraryEditorSizer(wx.FlexGridSizer): |
1085 |
1098 |
1086 def __init__(self, parent, module_library, buttons): |
1099 def __init__(self, parent, module_library, buttons): |
1087 wx.FlexGridSizer.__init__(self, cols=1, hgap=0, rows=4, vgap=5) |
1100 wx.FlexGridSizer.__init__(self, cols=1, hgap=0, rows=4, vgap=5) |
1088 |
1101 |
1314 param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1] |
1327 param, param_infos = self.ModuleLibrary.MODULES_EXTRA_PARAMS[col - 1] |
1315 wx.CallAfter(self.ModulesGrid.GetHeaderWindow().SetToolTipString, |
1328 wx.CallAfter(self.ModulesGrid.GetHeaderWindow().SetToolTipString, |
1316 param_infos["description"]) |
1329 param_infos["description"]) |
1317 event.Skip() |
1330 event.Skip() |
1318 |
1331 |
|
1332 |
1319 class DatabaseManagementDialog(wx.Dialog): |
1333 class DatabaseManagementDialog(wx.Dialog): |
1320 |
1334 |
1321 def __init__(self, parent, database): |
1335 def __init__(self, parent, database): |
1322 wx.Dialog.__init__(self, parent, |
1336 wx.Dialog.__init__(self, parent, |
1323 size=wx.Size(700, 500), title=_('ESI Files Database management'), |
1337 size=wx.Size(700, 500), title=_('ESI Files Database management'), |
1344 |
1358 |
1345 self.DatabaseSizer.RefreshView() |
1359 self.DatabaseSizer.RefreshView() |
1346 |
1360 |
1347 def GetValue(self): |
1361 def GetValue(self): |
1348 return self.DatabaseSizer.GetSelectedFilePath() |
1362 return self.DatabaseSizer.GetSelectedFilePath() |
|
1363 |
1349 |
1364 |
1350 class LibraryEditor(ConfTreeNodeEditor): |
1365 class LibraryEditor(ConfTreeNodeEditor): |
1351 |
1366 |
1352 CONFNODEEDITOR_TABS = [ |
1367 CONFNODEEDITOR_TABS = [ |
1353 (_("Modules Library"), "_create_ModuleLibraryEditor")] |
1368 (_("Modules Library"), "_create_ModuleLibraryEditor")] |