etherlab/ConfigEditor.py
changeset 2360 2a3d022a7dac
parent 2358 8e5a9830867e
child 2363 9c7da6ff6a34
equal deleted inserted replaced
2359:e945fcb54cd4 2360:2a3d022a7dac
    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:
    46 ACCESS_TYPES = {
    48 ACCESS_TYPES = {
    47     'ro': 'R',
    49     'ro': 'R',
    48     'wo': 'W',
    50     'wo': 'W',
    49     'rw': 'R/W'}
    51     'rw': 'R/W'}
    50 
    52 
       
    53 
    51 def GetAccessValue(access, pdo_mapping):
    54 def GetAccessValue(access, pdo_mapping):
    52     value = "SDO: %s" % ACCESS_TYPES.get(access, "")
    55     value = "SDO: %s" % ACCESS_TYPES.get(access, "")
    53     if pdo_mapping != "":
    56     if pdo_mapping != "":
    54         value += ", PDO: %s" % pdo_mapping
    57         value += ", PDO: %s" % pdo_mapping
    55     return value
    58     return value
    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")]