56 self.AddGrowableRow(1) |
56 self.AddGrowableRow(1) |
57 |
57 |
58 self.Controler = controler |
58 self.Controler = controler |
59 self.PositionColumn = position_column |
59 self.PositionColumn = position_column |
60 |
60 |
61 self.VariablesFilter = wx.ComboBox(parent) |
61 self.VariablesFilter = wx.ComboBox(parent, style=wx.TE_PROCESS_ENTER) |
62 self.VariablesFilter.Bind(wx.EVT_COMBOBOX, self.OnVariablesFilterChanged) |
62 self.VariablesFilter.Bind(wx.EVT_COMBOBOX, self.OnVariablesFilterChanged) |
|
63 self.VariablesFilter.Bind(wx.EVT_TEXT_ENTER, self.OnVariablesFilterChanged) |
63 self.AddWindow(self.VariablesFilter, flag=wx.GROW) |
64 self.AddWindow(self.VariablesFilter, flag=wx.GROW) |
64 |
65 |
65 self.VariablesGrid = wx.gizmos.TreeListCtrl(parent, |
66 self.VariablesGrid = wx.gizmos.TreeListCtrl(parent, |
66 style=wx.TR_DEFAULT_STYLE | |
67 style=wx.TR_DEFAULT_STYLE | |
67 wx.TR_ROW_LINES | |
68 wx.TR_ROW_LINES | |
152 try: |
153 try: |
153 value = self.VariablesFilter.GetValue() |
154 value = self.VariablesFilter.GetValue() |
154 result = ETHERCAT_INDEX_MODEL.match(value) |
155 result = ETHERCAT_INDEX_MODEL.match(value) |
155 if result is not None: |
156 if result is not None: |
156 value = result.group(1) |
157 value = result.group(1) |
157 index = int(value) |
158 index = int(value, 16) |
158 self.CurrentFilter = (index, index) |
159 self.CurrentFilter = (index, index) |
159 self.RefreshView() |
160 self.RefreshView() |
160 except: |
161 except: |
161 pass |
162 pass |
162 event.Skip() |
163 event.Skip() |
320 message = _("Invalid value \"%s\" for process variable")%data |
321 message = _("Invalid value \"%s\" for process variable")%data |
321 values = None |
322 values = None |
322 if not isinstance(values, TupleType): |
323 if not isinstance(values, TupleType): |
323 message = _("Invalid value \"%s\" for process variable")%data |
324 message = _("Invalid value \"%s\" for process variable")%data |
324 values = None |
325 values = None |
325 if values is not None and 2 <= col <= 3: |
326 if values is not None and col != wx.NOT_FOUND and row != wx.NOT_FOUND and 2 <= col <= 3: |
326 location = None |
327 location = None |
327 if values[1] == "location": |
328 if values[1] == "location": |
328 result = LOCATION_MODEL.match(values[0]) |
329 result = LOCATION_MODEL.match(values[0]) |
329 if result is not None: |
330 if result is not None: |
330 location = map(int, result.group(1).split('.')) |
331 location = map(int, result.group(1).split('.')) |
574 self.NodesVariables = MasterNodesVariablesSizer(self.EthercatMasterEditor, self.Controler) |
575 self.NodesVariables = MasterNodesVariablesSizer(self.EthercatMasterEditor, self.Controler) |
575 second_staticbox_sizer.AddSizer(self.NodesVariables, 1, border=5, flag=wx.GROW|wx.ALL) |
576 second_staticbox_sizer.AddSizer(self.NodesVariables, 1, border=5, flag=wx.GROW|wx.ALL) |
576 |
577 |
577 main_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Node filter:")) |
578 main_staticbox = wx.StaticBox(self.EthercatMasterEditor, label=_("Node filter:")) |
578 staticbox_sizer = wx.StaticBoxSizer(main_staticbox, wx.VERTICAL) |
579 staticbox_sizer = wx.StaticBoxSizer(main_staticbox, wx.VERTICAL) |
579 main_sizer.AddSizer(staticbox_sizer, border=10, flag=wx.GROW|wx.ALL) |
580 main_sizer.AddSizer(staticbox_sizer, 1, border=10, flag=wx.GROW|wx.ALL) |
580 main_staticbox_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=5, vgap=0) |
581 main_staticbox_sizer = wx.FlexGridSizer(cols=1, hgap=0, rows=6, vgap=0) |
581 main_staticbox_sizer.AddGrowableCol(0) |
582 main_staticbox_sizer.AddGrowableCol(0) |
582 main_staticbox_sizer.AddGrowableRow(1) |
583 main_staticbox_sizer.AddGrowableRow(2) |
583 main_staticbox_sizer.AddGrowableRow(3) |
584 main_staticbox_sizer.AddGrowableRow(4) |
|
585 main_staticbox_sizer.AddGrowableRow(5) |
584 staticbox_sizer.AddSizer(main_staticbox_sizer, 1, flag=wx.GROW) |
586 staticbox_sizer.AddSizer(main_staticbox_sizer, 1, flag=wx.GROW) |
585 main_staticbox_sizer.AddWindow(self.NodesFilter, border=5, flag=wx.GROW|wx.ALL) |
587 main_staticbox_sizer.AddWindow(self.NodesFilter, border=5, flag=wx.GROW|wx.ALL) |
586 main_staticbox_sizer.AddSizer(process_variables_header, border=5, |
588 main_staticbox_sizer.AddSizer(process_variables_header, border=5, |
587 flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) |
589 flag=wx.GROW|wx.LEFT|wx.RIGHT|wx.BOTTOM) |
588 main_staticbox_sizer.AddWindow(self.ProcessVariablesGrid, 1, |
590 main_staticbox_sizer.AddWindow(self.ProcessVariablesGrid, 1, |
906 |
908 |
907 def __init__(self, parent, module_library, buttons): |
909 def __init__(self, parent, module_library, buttons): |
908 wx.FlexGridSizer.__init__(self, cols=1, hgap=0, rows=4, vgap=5) |
910 wx.FlexGridSizer.__init__(self, cols=1, hgap=0, rows=4, vgap=5) |
909 |
911 |
910 self.ModuleLibrary = module_library |
912 self.ModuleLibrary = module_library |
911 |
913 self.ParentWindow = parent |
|
914 |
912 self.AddGrowableCol(0) |
915 self.AddGrowableCol(0) |
913 self.AddGrowableRow(1) |
916 self.AddGrowableRow(1) |
914 self.AddGrowableRow(3) |
917 self.AddGrowableRow(3) |
915 |
918 |
916 ESI_files_label = wx.StaticText(parent, |
919 ESI_files_label = wx.StaticText(parent, |
1018 item, root_cookie = self.ModulesGrid.GetNextChild(root, root_cookie) |
1021 item, root_cookie = self.ModulesGrid.GetNextChild(root, root_cookie) |
1019 for item in to_delete: |
1022 for item in to_delete: |
1020 self.ModulesGrid.Delete(item) |
1023 self.ModulesGrid.Delete(item) |
1021 |
1024 |
1022 def OnImportButton(self, event): |
1025 def OnImportButton(self, event): |
1023 dialog = wx.FileDialog(self, |
1026 dialog = wx.FileDialog(self.ParentWindow, |
1024 _("Choose an XML file"), |
1027 _("Choose an XML file"), |
1025 os.getcwd(), "", |
1028 os.getcwd(), "", |
1026 _("XML files (*.xml)|*.xml|All files|*.*"), wx.OPEN) |
1029 _("XML files (*.xml)|*.xml|All files|*.*"), wx.OPEN) |
1027 |
1030 |
1028 if dialog.ShowModal() == wx.ID_OK: |
1031 if dialog.ShowModal() == wx.ID_OK: |
1042 def OnDeleteButton(self, event): |
1045 def OnDeleteButton(self, event): |
1043 filepath = self.GetSelectedFilePath() |
1046 filepath = self.GetSelectedFilePath() |
1044 if os.path.isfile(filepath): |
1047 if os.path.isfile(filepath): |
1045 folder, filename = os.path.split(filepath) |
1048 folder, filename = os.path.split(filepath) |
1046 |
1049 |
1047 dialog = wx.MessageDialog(self, |
1050 dialog = wx.MessageDialog(self.ParentWindow, |
1048 _("Do you really want to delete the file '%s'?") % filename, |
1051 _("Do you really want to delete the file '%s'?") % filename, |
1049 _("Delete File"), wx.YES_NO|wx.ICON_QUESTION) |
1052 _("Delete File"), wx.YES_NO|wx.ICON_QUESTION) |
1050 remove = dialog.ShowModal() == wx.ID_YES |
1053 remove = dialog.ShowModal() == wx.ID_YES |
1051 dialog.Destroy() |
1054 dialog.Destroy() |
1052 |
1055 |
1059 def OnModulesGridLeftDClick(self, event): |
1062 def OnModulesGridLeftDClick(self, event): |
1060 item, flags, col = self.ModulesGrid.HitTest(event.GetPosition()) |
1063 item, flags, col = self.ModulesGrid.HitTest(event.GetPosition()) |
1061 if item.IsOk(): |
1064 if item.IsOk(): |
1062 entry_infos = self.ModulesGrid.GetItemPyData(item) |
1065 entry_infos = self.ModulesGrid.GetItemPyData(item) |
1063 if entry_infos is not None and col == 1: |
1066 if entry_infos is not None and col == 1: |
1064 dialog = wx.TextEntryDialog(self, |
1067 dialog = wx.TextEntryDialog(self.ParentWindow, |
1065 _("Set PDO alignment (bits):"), |
1068 _("Set PDO alignment (bits):"), |
1066 _("%s PDO alignment") % self.ModulesGrid.GetItemText(item), |
1069 _("%s PDO alignment") % self.ModulesGrid.GetItemText(item), |
1067 str(entry_infos["alignment"])) |
1070 str(entry_infos["alignment"])) |
1068 |
1071 |
1069 if dialog.ShowModal() == wx.ID_OK: |
1072 if dialog.ShowModal() == wx.ID_OK: |