910 self.ProjectTree.Expand(selected) |
906 self.ProjectTree.Expand(selected) |
911 name = self.ProjectTree.GetItemText(selected) |
907 name = self.ProjectTree.GetItemText(selected) |
912 data = self.ProjectTree.GetPyData(selected) |
908 data = self.ProjectTree.GetPyData(selected) |
913 if name == "Properties": |
909 if name == "Properties": |
914 self.ShowProperties() |
910 self.ShowProperties() |
915 ## elif data == ITEM_CLASS: |
|
916 ## item = self.ProjectTree.GetItemParent(selected) |
|
917 ## item_type = self.ProjectTree.GetPyData(item) |
|
918 ## while item_type not in [ITEM_POU, ITEM_RESOURCE, ITEM_CONFIGURATION] and item.IsOk(): |
|
919 ## item = self.ProjectTree.GetItemParent(item) |
|
920 ## item_type = self.ProjectTree.GetPyData(item) |
|
921 ## item_name = self.ProjectTree.GetItemText(item) |
|
922 ## if item_type == ITEM_POU: |
|
923 ## dialog = EditVariableDialog(self, item_name, self.Controler.GetPouType(item_name), self.Controler.PouIsUsed(item_name), name) |
|
924 ## dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
|
925 ## values = {} |
|
926 ## values["returnType"] = self.Controler.GetPouInterfaceReturnTypeByName(item_name) |
|
927 ## values["data"] = self.Controler.GetPouInterfaceVarsByName(item_name) |
|
928 ## dialog.SetValues(values) |
|
929 ## if dialog.ShowModal() == wx.ID_OK: |
|
930 ## new_values = dialog.GetValues() |
|
931 ## if "returnType" in new_values: |
|
932 ## self.Controler.SetPouInterfaceReturnType(item_name, new_values["returnType"]) |
|
933 ## self.Controler.SetPouInterfaceVars(item_name, new_values["data"]) |
|
934 ## pou_names = self.Controler.GetElementsOpenedNames() |
|
935 ## if item_name in pou_names: |
|
936 ## window = self.TabsOpened.GetPage(pou_names.index(item_name)) |
|
937 ## if isinstance(window, TextViewer): |
|
938 ## varlist = [] |
|
939 ## if "returnType" in new_values: |
|
940 ## varlist.append(name) |
|
941 ## for var in new_values["data"]: |
|
942 ## varlist.append(var["Name"]) |
|
943 ## window.SetVariables(varlist) |
|
944 ## dialog.Destroy() |
|
945 ## self.RefreshProjectTree() |
|
946 ## elif item_type == ITEM_CONFIGURATION: |
|
947 ## dialog = EditVariableDialog(self, item_name, None, False, name) |
|
948 ## dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
|
949 ## values = {"data" : self.Controler.GetConfigurationGlobalVars(item_name)} |
|
950 ## dialog.SetValues(values) |
|
951 ## if dialog.ShowModal() == wx.ID_OK: |
|
952 ## new_values = dialog.GetValues() |
|
953 ## self.Controler.SetConfigurationGlobalVars(item_name, new_values["data"]) |
|
954 ## dialog.Destroy() |
|
955 ## self.RefreshProjectTree() |
|
956 ## elif item_type == ITEM_RESOURCE: |
|
957 ## config = self.ProjectTree.GetItemParent(item) |
|
958 ## config_type = self.ProjectTree.GetPyData(config) |
|
959 ## while config_type != ITEM_CONFIGURATION and config.IsOk(): |
|
960 ## config = self.ProjectTree.GetItemParent(config) |
|
961 ## config_type = self.ProjectTree.GetPyData(config) |
|
962 ## if config.IsOk(): |
|
963 ## config_name = self.ProjectTree.GetItemText(config) |
|
964 ## dialog = EditVariableDialog(self, item_name, None, False, name) |
|
965 ## values = {"data" : self.Controler.GetConfigurationResourceGlobalVars(config_name, item_name)} |
|
966 ## dialog.SetValues(values) |
|
967 ## if dialog.ShowModal() == wx.ID_OK: |
|
968 ## new_values = dialog.GetValues() |
|
969 ## self.Controler.SetConfigurationResourceGlobalVars(config_name, item_name, new_values["data"]) |
|
970 ## dialog.Destroy() |
|
971 ## self.RefreshProjectTree() |
|
972 ## elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]: |
|
973 ## if data == ITEM_POU: |
|
974 ## idx = self.Controler.OpenElementEditing(name) |
|
975 ## language = self.Controler.GetPouBodyType(name) |
|
976 ## varlist = [] |
|
977 ## returnType = self.Controler.GetPouInterfaceReturnTypeByName(name) |
|
978 ## if returnType: |
|
979 ## varlist.append(name) |
|
980 ## vars = self.Controler.GetPouInterfaceVarsByName(name) |
|
981 ## if vars: |
|
982 ## for var in vars: |
|
983 ## varlist.append(var["Name"]) |
|
984 ## self.EditVariable.SetPou(self.Controler.GetPouType(name), self.Controler.PouIsUsed(name)) |
|
985 ## self.EditVariable.SetValues({"returnType":returnType,"data":vars}) |
|
986 ## else: |
|
987 ## parent = self.ProjectTree.GetItemParent(selected) |
|
988 ## parent_name = self.ProjectTree.GetItemText(parent) |
|
989 ## grandparent = self.ProjectTree.GetItemParent(parent) |
|
990 ## grandparent_name = self.ProjectTree.GetItemText(grandparent) |
|
991 ## if data == ITEM_TRANSITION: |
|
992 ## idx = self.Controler.OpenPouTransitionEditing(grandparent_name, name) |
|
993 ## language = self.Controler.GetTransitionBodyType(grandparent_name, name) |
|
994 ## elif data == ITEM_ACTION: |
|
995 ## idx = self.Controler.OpenPouActionEditing(grandparent_name, name) |
|
996 ## language = self.Controler.GetActionBodyType(grandparent_name, name) |
|
997 ## varlist = [name] |
|
998 ## vars = self.Controler.GetPouInterfaceVarsByName(grandparent_name) |
|
999 ## if vars: |
|
1000 ## for var in vars: |
|
1001 ## varlist.append(var["Name"]) |
|
1002 ## self.EditVariable.SetPou(self.Controler.GetPouType(grandparent_name), self.Controler.PouIsUsed(grandparent_name)) |
|
1003 ## self.EditVariable.SetValues({"returnType":returnType,"data":vars}) |
|
1004 ## if idx != None: |
|
1005 ## if language == "FBD": |
|
1006 ## new_window = Viewer(self.TabsOpened, self, self.Controler) |
|
1007 ## elif language == "LD": |
|
1008 ## new_window = LD_Viewer(self.TabsOpened, self, self.Controler) |
|
1009 ## elif language == "SFC": |
|
1010 ## new_window = SFC_Viewer(self.TabsOpened, self, self.Controler) |
|
1011 ## elif language in ["IL", "ST"]: |
|
1012 ## new_window = TextViewer(self.TabsOpened, self, self.Controler) |
|
1013 ## new_window.SetTextSyntax(language) |
|
1014 ## if language == "IL": |
|
1015 ## new_window.SetKeywords(IL_KEYWORDS) |
|
1016 ## else: |
|
1017 ## new_window.SetKeywords(ST_KEYWORDS) |
|
1018 ## new_window.SetVariables(varlist) |
|
1019 ## new_window.SetFunctions(self.Controler.GetBlockTypes()) |
|
1020 ## else: |
|
1021 ## return |
|
1022 ## new_window.RefreshView() |
|
1023 ## self.TabsOpened.AddPage(new_window, "") |
|
1024 ## self.TabsOpened.SetSelection(idx) |
|
1025 ## self.RefreshTabsOpenedTitles() |
|
1026 ## self.RefreshFileMenu() |
|
1027 ## self.RefreshEditMenu() |
|
1028 ## self.RefreshToolBar() |
|
1029 ## else: |
|
1030 ## if data == ITEM_POU: |
|
1031 ## idx = self.Controler.ChangeElementEditing(name) |
|
1032 ## elif data == ITEM_TRANSITION: |
|
1033 ## idx = self.Controler.ChangePouTransitionEditing(grandparent_name, name) |
|
1034 ## elif data == ITEM_ACTION: |
|
1035 ## idx = self.Controler.ChangePouActionEditing(grandparent_name, name) |
|
1036 ## if idx != None: |
|
1037 ## self.TabsOpened.SetSelection(idx) |
|
1038 ## self.RefreshFileMenu() |
|
1039 ## self.RefreshEditMenu() |
|
1040 ## self.RefreshToolBar() |
|
1041 ## elif data == ITEM_RESOURCE: |
|
1042 ## item = self.ProjectTree.GetItemParent(selected) |
|
1043 ## item_type = self.ProjectTree.GetPyData(item) |
|
1044 ## while item_type != ITEM_CONFIGURATION: |
|
1045 ## item = self.ProjectTree.GetItemParent(item) |
|
1046 ## item_type = self.ProjectTree.GetPyData(item) |
|
1047 ## config_name = self.ProjectTree.GetItemText(item) |
|
1048 ## idx = self.Controler.OpenConfigurationResourceEditing(config_name, name) |
|
1049 ## if idx != None: |
|
1050 ## new_window = ResourceEditor(self.TabsOpened, self, self.Controler) |
|
1051 ## new_window.RefreshView() |
|
1052 ## self.TabsOpened.AddPage(new_window, "") |
|
1053 ## self.TabsOpened.SetSelection(idx) |
|
1054 ## self.RefreshTabsOpenedTitles() |
|
1055 ## self.RefreshFileMenu() |
|
1056 ## self.RefreshEditMenu() |
|
1057 ## self.RefreshToolBar() |
|
1058 ## else: |
|
1059 ## idx = self.Controler.ChangeConfigurationResourceEditing(parent_name, name) |
|
1060 ## if idx != None: |
|
1061 ## self.TabsOpened.SetSelection(idx) |
|
1062 ## self.RefreshFileMenu() |
|
1063 ## self.RefreshEditMenu() |
|
1064 ## self.RefreshToolBar() |
|
1065 elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE, ITEM_CONFIGURATION]: |
911 elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE, ITEM_CONFIGURATION]: |
1066 if data == ITEM_CONFIGURATION: |
912 if data == ITEM_CONFIGURATION: |
1067 idx = self.Controler.OpenConfigurationEditing(name) |
913 idx = self.Controler.OpenConfigurationEditing(name) |
1068 if idx != None: |
914 if idx != None: |
1069 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "config", config_name = name) |
915 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "config", config_name = name) |
2075 for row in range(self.GetNumberRows()): |
1926 for row in range(self.GetNumberRows()): |
2076 for col in range(self.GetNumberCols()): |
1927 for col in range(self.GetNumberCols()): |
2077 editor = None |
1928 editor = None |
2078 renderer = None |
1929 renderer = None |
2079 colname = self.GetColLabelValue(col) |
1930 colname = self.GetColLabelValue(col) |
2080 grid.SetReadOnly(row, col, False) |
1931 if col != 0 and self.GetValueByName(row, "Edit"): |
2081 if col == 0: |
1932 grid.SetReadOnly(row, col, False) |
2082 grid.SetReadOnly(row, col, True) |
1933 if colname == "Name": |
2083 elif colname == "Name": |
1934 if self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]: |
2084 if self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]: |
1935 grid.SetReadOnly(row, col, True) |
2085 grid.SetReadOnly(row, col, True) |
1936 else: |
2086 else: |
1937 editor = wx.grid.GridCellTextEditor() |
|
1938 renderer = wx.grid.GridCellStringRenderer() |
|
1939 elif colname in ["Initial Value","Location"]: |
2087 editor = wx.grid.GridCellTextEditor() |
1940 editor = wx.grid.GridCellTextEditor() |
2088 renderer = wx.grid.GridCellStringRenderer() |
1941 renderer = wx.grid.GridCellStringRenderer() |
2089 elif colname in ["Initial Value","Location"]: |
1942 elif colname == "Class": |
2090 editor = wx.grid.GridCellTextEditor() |
1943 if len(self.Parent.ClassList) == 1 or self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]: |
2091 renderer = wx.grid.GridCellStringRenderer() |
1944 grid.SetReadOnly(row, col, True) |
2092 elif colname == "Class": |
1945 else: |
2093 if len(self.Parent.ClassList) == 1 or self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]: |
1946 editor = wx.grid.GridCellChoiceEditor() |
2094 grid.SetReadOnly(row, col, True) |
1947 excluded = [] |
2095 else: |
1948 if self.Parent.PouIsUsed: |
|
1949 excluded.extend(["Input","Output","InOut"]) |
|
1950 editor.SetParameters(",".join([choice for choice in self.Parent.ClassList if choice not in excluded])) |
|
1951 elif colname in ["Retain", "Constant"]: |
2096 editor = wx.grid.GridCellChoiceEditor() |
1952 editor = wx.grid.GridCellChoiceEditor() |
2097 excluded = [] |
1953 editor.SetParameters(self.Parent.OptionList) |
2098 if self.Parent.PouIsUsed: |
1954 elif colname == "Type": |
2099 excluded.extend(["Input","Output","InOut"]) |
1955 editor = wx.grid.GridCellTextEditor() |
2100 editor.SetParameters(",".join([choice for choice in self.Parent.ClassList if choice not in excluded])) |
1956 else: |
2101 elif colname == "Type": |
1957 grid.SetReadOnly(row, col, True) |
2102 if self.Parent.PouIsUsed and self.GetValueByName(row, "Class") in ["Input", "Output", "InOut"]: |
1958 |
2103 grid.SetReadOnly(row, col, True) |
|
2104 else: |
|
2105 editor = wx.grid.GridCellChoiceEditor() |
|
2106 editor.SetParameters(self.Parent.TypeList) |
|
2107 elif colname in ["Retain", "Constant"]: |
|
2108 editor = wx.grid.GridCellChoiceEditor() |
|
2109 editor.SetParameters(self.Parent.OptionList) |
|
2110 |
|
2111 grid.SetCellEditor(row, col, editor) |
1959 grid.SetCellEditor(row, col, editor) |
2112 grid.SetCellRenderer(row, col, renderer) |
1960 grid.SetCellRenderer(row, col, renderer) |
2113 |
1961 |
2114 grid.SetCellBackgroundColour(row, col, wx.WHITE) |
1962 grid.SetCellBackgroundColour(row, col, wx.WHITE) |
2115 |
1963 |
2221 parent.AddGrowableCol(2) |
2061 parent.AddGrowableCol(2) |
2222 parent.AddGrowableCol(3) |
2062 parent.AddGrowableCol(3) |
2223 parent.AddGrowableRow(0) |
2063 parent.AddGrowableRow(0) |
2224 |
2064 |
2225 def _init_sizers(self): |
2065 def _init_sizers(self): |
2226 self.MainPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) |
|
2227 self.VariablePanelSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=0) |
2066 self.VariablePanelSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=0) |
2228 self.ControlPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10) |
2067 self.ControlPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=10) |
2229 self.ChoicePanelSizer = wx.GridSizer(cols=1, hgap=5, rows=4, vgap=5) |
2068 self.ChoicePanelSizer = wx.GridSizer(cols=1, hgap=5, rows=4, vgap=5) |
2230 self.ButtonPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0) |
2069 self.ButtonPanelSizer = wx.FlexGridSizer(cols=2, hgap=5, rows=2, vgap=0) |
2231 |
2070 |
2232 self._init_coll_MainPanelSizer_Items(self.MainPanelSizer) |
|
2233 self._init_coll_MainPanelSizer_Growables(self.MainPanelSizer) |
|
2234 self._init_coll_VariablePanelSizer_Items(self.VariablePanelSizer) |
2071 self._init_coll_VariablePanelSizer_Items(self.VariablePanelSizer) |
2235 self._init_coll_VariablePanelSizer_Growables(self.VariablePanelSizer) |
2072 self._init_coll_VariablePanelSizer_Growables(self.VariablePanelSizer) |
2236 self._init_coll_ControlPanelSizer_Items(self.ControlPanelSizer) |
2073 self._init_coll_ControlPanelSizer_Items(self.ControlPanelSizer) |
2237 self._init_coll_ControlPanelSizer_Growables(self.ControlPanelSizer) |
2074 self._init_coll_ControlPanelSizer_Growables(self.ControlPanelSizer) |
2238 self._init_coll_ChoicePanelSizer_Items(self.ChoicePanelSizer) |
2075 self._init_coll_ChoicePanelSizer_Items(self.ChoicePanelSizer) |
2239 self._init_coll_ButtonPanelSizer_Items(self.ButtonPanelSizer) |
2076 self._init_coll_ButtonPanelSizer_Items(self.ButtonPanelSizer) |
2240 self._init_coll_ButtonPanelSizer_Growables(self.ButtonPanelSizer) |
2077 self._init_coll_ButtonPanelSizer_Growables(self.ButtonPanelSizer) |
2241 |
2078 |
2242 self.SetSizer(self.MainPanelSizer) |
2079 self.VariablePanel.SetSizer(self.VariablePanelSizer) |
2243 |
2080 |
2244 def _init_ctrls(self, prnt, element_type): |
2081 def _init_ctrls(self, prnt, element_type): |
2245 wx.Panel.__init__(self, id=ID_POUEDITORPANEL, |
2082 wx.SplitterWindow.__init__(self, id=ID_POUEDITORPANEL, |
2246 name='EditVariablePanel', parent=prnt, pos=wx.Point(0, 0), |
2083 name='EditVariablePanel', parent=prnt, pos=wx.Point(0, 0), |
2247 size=wx.Size(-1, -1), style=0) |
2084 size=wx.Size(-1, -1), style=wx.SP_3D) |
|
2085 self.SetNeedUpdating(True) |
|
2086 self.SetMinimumPaneSize(1) |
2248 |
2087 |
2249 if element_type == "config": |
2088 if element_type == "config": |
2250 self.Viewer = wx.Panel(id=ID_POUEDITORPANELVIEWER, |
2089 self.Viewer = wx.Panel(id=ID_POUEDITORPANELVIEWER, |
2251 name='ConfigPanel', parent=self, pos=wx.Point(0, 0), |
2090 name='ConfigPanel', parent=self.splitterWindow1, pos=wx.Point(0, 0), |
2252 size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL) |
2091 size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL) |
2253 self.Viewer.ResetBuffer = lambda: None |
2092 self.Viewer.ResetBuffer = lambda: None |
2254 self.Viewer.RefreshView = lambda: None |
2093 self.Viewer.RefreshView = lambda: None |
2255 elif element_type == "resource": |
2094 elif element_type == "resource": |
2256 self.Viewer = ResourceEditor(self, self.Parent, self.Controler) |
2095 self.Viewer = ResourceEditor(self, self.Parent, self.Controler) |
2266 if element_type == "IL": |
2105 if element_type == "IL": |
2267 self.Viewer.SetKeywords(IL_KEYWORDS) |
2106 self.Viewer.SetKeywords(IL_KEYWORDS) |
2268 else: |
2107 else: |
2269 self.Viewer.SetKeywords(ST_KEYWORDS) |
2108 self.Viewer.SetKeywords(ST_KEYWORDS) |
2270 |
2109 |
|
2110 self.VariablePanel = wx.Panel(id=ID_POUEDITORPANELVIEWER, |
|
2111 name='VariablePanel', parent=self, pos=wx.Point(0, 0), |
|
2112 size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL) |
|
2113 |
2271 self.staticText1 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT1, |
2114 self.staticText1 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT1, |
2272 label='Return Type:', name='staticText1', parent=self, |
2115 label='Return Type:', name='staticText1', parent=self.VariablePanel, |
2273 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
2116 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
2274 |
2117 |
2275 self.ReturnType = wx.Choice(id=ID_POUEDITORPANELRETURNTYPE, |
2118 self.ReturnType = wx.Choice(id=ID_POUEDITORPANELRETURNTYPE, |
2276 name='ReturnType', parent=self, pos=wx.Point(0, 0), |
2119 name='ReturnType', parent=self.VariablePanel, pos=wx.Point(0, 0), |
2277 size=wx.Size(145, 24), style=0) |
2120 size=wx.Size(145, 24), style=0) |
2278 |
2121 |
2279 self.staticText2 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT2, |
2122 self.staticText2 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT2, |
2280 label='Class Filter:', name='staticText2', parent=self, |
2123 label='Class Filter:', name='staticText2', parent=self.VariablePanel, |
2281 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
2124 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
2282 |
2125 |
2283 self.ClassFilter = wx.Choice(id=ID_POUEDITORPANELCLASSFILTER, |
2126 self.ClassFilter = wx.Choice(id=ID_POUEDITORPANELCLASSFILTER, |
2284 name='ClassFilter', parent=self, pos=wx.Point(0, 0), |
2127 name='ClassFilter', parent=self.VariablePanel, pos=wx.Point(0, 0), |
2285 size=wx.Size(145, 24), style=0) |
2128 size=wx.Size(145, 24), style=0) |
2286 self.Bind(wx.EVT_CHOICE, self.OnClassFilter, id=ID_POUEDITORPANELCLASSFILTER) |
2129 self.Bind(wx.EVT_CHOICE, self.OnClassFilter, id=ID_POUEDITORPANELCLASSFILTER) |
2287 |
2130 |
2288 self.VariablesGrid = wx.grid.Grid(id=ID_POUEDITORPANELVARIABLESGRID, |
2131 self.VariablesGrid = wx.grid.Grid(id=ID_POUEDITORPANELVARIABLESGRID, |
2289 name='VariablesGrid', parent=self, pos=wx.Point(0, 0), |
2132 name='VariablesGrid', parent=self.VariablePanel, pos=wx.Point(0, 0), |
2290 size=wx.Size(0, 150), style=wx.VSCROLL) |
2133 size=wx.Size(0, 150), style=wx.VSCROLL) |
2291 self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
2134 self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
2292 'Sans')) |
2135 'Sans')) |
2293 self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
2136 self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
2294 False, 'Sans')) |
2137 False, 'Sans')) |
2295 self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange) |
2138 self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange) |
2296 self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell) |
2139 self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell) |
2297 self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnVariablesGridCellLeftClick) |
2140 self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnVariablesGridCellLeftClick) |
2298 |
2141 self.VariablesGrid.Bind(wx.grid.EVT_GRID_EDITOR_SHOWN, self.OnVariablesGridEditorShown) |
2299 self.VariablesGrid.SetDropTarget(VariableDropTarget(self)) |
2142 self.VariablesGrid.SetDropTarget(VariableDropTarget(self)) |
2300 |
2143 |
2301 self.AddButton = wx.Button(id=ID_POUEDITORPANELADDBUTTON, label='Add', |
2144 self.AddButton = wx.Button(id=ID_POUEDITORPANELADDBUTTON, label='Add', |
2302 name='AddButton', parent=self, pos=wx.Point(345, 340), |
2145 name='AddButton', parent=self.VariablePanel, pos=wx.Point(345, 340), |
2303 size=wx.Size(72, 32), style=0) |
2146 size=wx.Size(72, 32), style=0) |
2304 self.Bind(wx.EVT_BUTTON, self.OnAddButton, id=ID_POUEDITORPANELADDBUTTON) |
2147 self.Bind(wx.EVT_BUTTON, self.OnAddButton, id=ID_POUEDITORPANELADDBUTTON) |
2305 |
2148 |
2306 self.DeleteButton = wx.Button(id=ID_POUEDITORPANELDELETEBUTTON, label='Delete', |
2149 self.DeleteButton = wx.Button(id=ID_POUEDITORPANELDELETEBUTTON, label='Delete', |
2307 name='DeleteButton', parent=self, pos=wx.Point(425, 340), |
2150 name='DeleteButton', parent=self.VariablePanel, pos=wx.Point(425, 340), |
2308 size=wx.Size(72, 32), style=0) |
2151 size=wx.Size(72, 32), style=0) |
2309 self.Bind(wx.EVT_BUTTON, self.OnDeleteButton, id=ID_POUEDITORPANELDELETEBUTTON) |
2152 self.Bind(wx.EVT_BUTTON, self.OnDeleteButton, id=ID_POUEDITORPANELDELETEBUTTON) |
2310 |
2153 |
2311 self.UpButton = wx.Button(id=ID_POUEDITORPANELUPBUTTON, label='^', |
2154 self.UpButton = wx.Button(id=ID_POUEDITORPANELUPBUTTON, label='^', |
2312 name='UpButton', parent=self, pos=wx.Point(505, 340), |
2155 name='UpButton', parent=self.VariablePanel, pos=wx.Point(505, 340), |
2313 size=wx.Size(32, 32), style=0) |
2156 size=wx.Size(32, 32), style=0) |
2314 self.Bind(wx.EVT_BUTTON, self.OnUpButton, id=ID_POUEDITORPANELUPBUTTON) |
2157 self.Bind(wx.EVT_BUTTON, self.OnUpButton, id=ID_POUEDITORPANELUPBUTTON) |
2315 |
2158 |
2316 self.DownButton = wx.Button(id=ID_POUEDITORPANELDOWNBUTTON, label='v', |
2159 self.DownButton = wx.Button(id=ID_POUEDITORPANELDOWNBUTTON, label='v', |
2317 name='DownButton', parent=self, pos=wx.Point(545, 340), |
2160 name='DownButton', parent=self.VariablePanel, pos=wx.Point(545, 340), |
2318 size=wx.Size(32, 32), style=0) |
2161 size=wx.Size(32, 32), style=0) |
2319 self.Bind(wx.EVT_BUTTON, self.OnDownButton, id=ID_POUEDITORPANELDOWNBUTTON) |
2162 self.Bind(wx.EVT_BUTTON, self.OnDownButton, id=ID_POUEDITORPANELDOWNBUTTON) |
|
2163 |
|
2164 self.SplitHorizontally(self.Viewer, self.VariablePanel, -200) |
2320 |
2165 |
2321 self._init_sizers() |
2166 self._init_sizers() |
2322 |
2167 |
2323 def __init__(self, parent, window, controler, element_type, pou_name = None, transition_name = None, action_name = None, config_name = None, resource_name = None): |
2168 def __init__(self, parent, window, controler, element_type, pou_name = None, transition_name = None, action_name = None, config_name = None, resource_name = None): |
2324 self.Parent = window |
2169 self.Parent = window |
2352 " External" : "External", "Variables" : "Variables", " Local" : "Local", |
2197 " External" : "External", "Variables" : "Variables", " Local" : "Local", |
2353 " Temp" : "Temp", "Global" : "Global", "Access" : "Access"} |
2198 " Temp" : "Temp", "Global" : "Global", "Access" : "Access"} |
2354 |
2199 |
2355 if pou_type in ["config", "resource"]: |
2200 if pou_type in ["config", "resource"]: |
2356 self.DefaultTypes = {"All" : "Global"} |
2201 self.DefaultTypes = {"All" : "Global"} |
2357 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"} |
2202 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No", "Edit" : "True"} |
2358 else: |
2203 else: |
2359 self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"} |
2204 self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"} |
2360 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"} |
2205 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No", "Edit" : "True"} |
2361 if pou_type in ["config", "resource"] or pou_type == "program": |
2206 if pou_type in ["config", "resource"] or pou_type == "program": |
2362 self.Table = VariableTable(self, [], ["#", "Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"]) |
2207 self.Table = VariableTable(self, [], ["#", "Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant", "Edit"]) |
2363 if pou_type not in ["config", "resource"]: |
2208 if pou_type not in ["config", "resource"]: |
2364 self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp","Global","Access"] |
2209 self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp","Global","Access"] |
2365 else: |
2210 else: |
2366 self.FilterChoices = ["All","Global","Access"] |
2211 self.FilterChoices = ["All","Global","Access"] |
2367 self.ColSizes = [40, 80, 70, 80, 80, 80, 60, 70] |
2212 self.ColSizes = [40, 80, 70, 80, 80, 80, 60, 70, 50] |
2368 self.ColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_CENTER, wx.ALIGN_CENTER] |
2213 self.ColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_CENTER, wx.ALIGN_CENTER, wx.ALIGN_LEFT] |
2369 else: |
2214 else: |
2370 self.Table = VariableTable(self, [], ["#", "Name", "Class", "Type", "Initial Value", "Retain", "Constant"]) |
2215 self.Table = VariableTable(self, [], ["#", "Name", "Class", "Type", "Initial Value", "Retain", "Constant", "Edit"]) |
2371 self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp"] |
2216 self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp"] |
2372 self.ColSizes = [40, 120, 70, 80, 120, 60, 70] |
2217 self.ColSizes = [40, 120, 70, 80, 120, 60, 70, 50] |
2373 self.ColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_CENTER, wx.ALIGN_CENTER] |
2218 self.ColAlignements = [wx.ALIGN_CENTER, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_CENTER, wx.ALIGN_CENTER, wx.ALIGN_LEFT] |
2374 for choice in self.FilterChoices: |
2219 for choice in self.FilterChoices: |
2375 self.ClassFilter.Append(choice) |
2220 self.ClassFilter.Append(choice) |
2376 reverse_transfer = {} |
2221 reverse_transfer = {} |
2377 for filter, choice in self.FilterChoiceTransfer.items(): |
2222 for filter, choice in self.FilterChoiceTransfer.items(): |
2378 reverse_transfer[choice] = filter |
2223 reverse_transfer[choice] = filter |
2379 self.ClassFilter.SetStringSelection(reverse_transfer[self.Filter]) |
2224 self.ClassFilter.SetStringSelection(reverse_transfer[self.Filter]) |
2380 self.RefreshTypeList() |
2225 self.RefreshTypeList() |
2381 |
2226 |
2382 self.OptionList = "Yes,No" |
2227 self.OptionList = "Yes,No" |
2383 self.TypeList = ",".join([value for value, parent in TypeHierarchy_list if not value.startswith("ANY")]) |
2228 self.TypeList = [value for value, parent in TypeHierarchy_list if not value.startswith("ANY")] |
2384 |
2229 |
2385 if pou_type == "function": |
2230 if pou_type == "function": |
2386 for value, parent in TypeHierarchy_list: |
2231 for value, parent in TypeHierarchy_list: |
2387 if not value.startswith("ANY"): |
2232 if not value.startswith("ANY"): |
2388 self.ReturnType.Append(value) |
2233 self.ReturnType.Append(value) |
2587 self.Controler.SetPouInterfaceVars(self.PouName, self.Values) |
2483 self.Controler.SetPouInterfaceVars(self.PouName, self.Values) |
2588 if buffer: |
2484 if buffer: |
2589 self.Controler.BufferProject() |
2485 self.Controler.BufferProject() |
2590 self.Parent.RefreshTitle() |
2486 self.Parent.RefreshTitle() |
2591 self.Parent.RefreshEditMenu() |
2487 self.Parent.RefreshEditMenu() |
2592 |
|
2593 ##[ID_EDITVARIABLEDIALOG, ID_EDITVARIABLEDIALOGMAINPANEL, |
|
2594 ## ID_EDITVARIABLEDIALOGVARIABLESGRID, ID_EDITVARIABLEDIALOGRETURNTYPE, |
|
2595 ## ID_EDITVARIABLEDIALOGCLASSFILTER, ID_EDITVARIABLEDIALOGADDBUTTON, |
|
2596 ## ID_EDITVARIABLEDIALOGDELETEBUTTON, ID_EDITVARIABLEDIALOGUPBUTTON, |
|
2597 ## ID_EDITVARIABLEDIALOGDOWNBUTTON, ID_EDITVARIABLEDIALOGSTATICTEXT1, |
|
2598 ## ID_EDITVARIABLEDIALOGSTATICTEXT2, ID_EDITVARIABLEDIALOGSTATICTEXT3, |
|
2599 ##] = [wx.NewId() for _init_ctrls in range(12)] |
|
2600 ## |
|
2601 ##class EditVariableDialog(wx.Dialog): |
|
2602 ## def _init_coll_flexGridSizer1_Items(self, parent): |
|
2603 ## parent.AddWindow(self.MainPanel, 0, border=0, flag=0) |
|
2604 ## parent.AddWindow(self.ButtonSizer, 0, border=0, flag=wx.ALIGN_RIGHT) |
|
2605 ## |
|
2606 ## def _init_sizers(self): |
|
2607 ## self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) |
|
2608 ## |
|
2609 ## self._init_coll_flexGridSizer1_Items(self.flexGridSizer1) |
|
2610 ## |
|
2611 ## self.SetSizer(self.flexGridSizer1) |
|
2612 ## |
|
2613 ## def _init_ctrls(self, prnt, name): |
|
2614 ## wx.Dialog.__init__(self, id=ID_EDITVARIABLEDIALOG, |
|
2615 ## name='EditVariableDialog', parent=prnt, pos=wx.Point(376, 223), |
|
2616 ## size=wx.Size(600, 440), style=wx.DEFAULT_DIALOG_STYLE, |
|
2617 ## title='Edit variables of %s'%name) |
|
2618 ## self.SetClientSize(wx.Size(600, 440)) |
|
2619 ## |
|
2620 ## self.MainPanel = wx.Panel(id=ID_EDITVARIABLEDIALOGMAINPANEL, |
|
2621 ## name='MainPanel', parent=self, pos=wx.Point(0, 0), |
|
2622 ## size=wx.Size(600, 440), style=wx.TAB_TRAVERSAL) |
|
2623 ## self.MainPanel.SetAutoLayout(True) |
|
2624 ## |
|
2625 ## self.staticText1 = wx.StaticText(id=ID_EDITVARIABLEDIALOGSTATICTEXT1, |
|
2626 ## label='Return Type:', name='staticText1', parent=self.MainPanel, |
|
2627 ## pos=wx.Point(24, 29), size=wx.Size(95, 17), style=0) |
|
2628 ## |
|
2629 ## self.ReturnType = wx.Choice(id=ID_EDITVARIABLEDIALOGRETURNTYPE, |
|
2630 ## name='ReturnType', parent=self.MainPanel, pos=wx.Point(124, 24), |
|
2631 ## size=wx.Size(145, 24), style=0) |
|
2632 ## |
|
2633 ## self.staticText2 = wx.StaticText(id=ID_EDITVARIABLEDIALOGSTATICTEXT2, |
|
2634 ## label='Class Filter:', name='staticText2', parent=self.MainPanel, |
|
2635 ## pos=wx.Point(324, 29), size=wx.Size(95, 17), style=0) |
|
2636 ## |
|
2637 ## self.ClassFilter = wx.Choice(id=ID_EDITVARIABLEDIALOGCLASSFILTER, |
|
2638 ## name='ClassFilter', parent=self.MainPanel, pos=wx.Point(424, 24), |
|
2639 ## size=wx.Size(145, 24), style=0) |
|
2640 ## self.Bind(wx.EVT_CHOICE, self.OnClassFilter, id=ID_EDITVARIABLEDIALOGCLASSFILTER) |
|
2641 ## |
|
2642 ## self.staticText3 = wx.StaticText(id=ID_EDITVARIABLEDIALOGSTATICTEXT3, |
|
2643 ## label='Variables:', name='staticText3', parent=self.MainPanel, |
|
2644 ## pos=wx.Point(24, 60), size=wx.Size(95, 17), style=0) |
|
2645 ## |
|
2646 ## self.VariablesGrid = wx.grid.Grid(id=ID_EDITVARIABLEDIALOGVARIABLESGRID, |
|
2647 ## name='VariablesGrid', parent=self.MainPanel, pos=wx.Point(24, 80), |
|
2648 ## size=wx.Size(550, 250), style=wx.VSCROLL) |
|
2649 ## self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
|
2650 ## 'Sans')) |
|
2651 ## self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
|
2652 ## False, 'Sans')) |
|
2653 ## self.VariablesGrid.DisableDragGridSize() |
|
2654 ## self.VariablesGrid.EnableScrolling(False, True) |
|
2655 ## self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange) |
|
2656 ## self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell) |
|
2657 ## |
|
2658 ## self.AddButton = wx.Button(id=ID_EDITVARIABLEDIALOGADDBUTTON, label='Add', |
|
2659 ## name='AddButton', parent=self.MainPanel, pos=wx.Point(345, 340), |
|
2660 ## size=wx.Size(72, 32), style=0) |
|
2661 ## self.Bind(wx.EVT_BUTTON, self.OnAddButton, id=ID_EDITVARIABLEDIALOGADDBUTTON) |
|
2662 ## |
|
2663 ## self.DeleteButton = wx.Button(id=ID_EDITVARIABLEDIALOGDELETEBUTTON, label='Delete', |
|
2664 ## name='DeleteButton', parent=self.MainPanel, pos=wx.Point(425, 340), |
|
2665 ## size=wx.Size(72, 32), style=0) |
|
2666 ## self.Bind(wx.EVT_BUTTON, self.OnDeleteButton, id=ID_EDITVARIABLEDIALOGDELETEBUTTON) |
|
2667 ## |
|
2668 ## self.UpButton = wx.Button(id=ID_EDITVARIABLEDIALOGUPBUTTON, label='^', |
|
2669 ## name='UpButton', parent=self.MainPanel, pos=wx.Point(505, 340), |
|
2670 ## size=wx.Size(32, 32), style=0) |
|
2671 ## self.Bind(wx.EVT_BUTTON, self.OnUpButton, id=ID_EDITVARIABLEDIALOGUPBUTTON) |
|
2672 ## |
|
2673 ## self.DownButton = wx.Button(id=ID_EDITVARIABLEDIALOGDOWNBUTTON, label='v', |
|
2674 ## name='DownButton', parent=self.MainPanel, pos=wx.Point(545, 340), |
|
2675 ## size=wx.Size(32, 32), style=0) |
|
2676 ## self.Bind(wx.EVT_BUTTON, self.OnDownButton, id=ID_EDITVARIABLEDIALOGDOWNBUTTON) |
|
2677 ## |
|
2678 ## self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL|wx.CENTRE) |
|
2679 ## self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.ButtonSizer.GetAffirmativeButton().GetId()) |
|
2680 ## |
|
2681 ## self._init_sizers() |
|
2682 ## |
|
2683 ## def __init__(self, parent, name, pou_type, pou_is_used, filter = "All"): |
|
2684 ## self._init_ctrls(parent, name) |
|
2685 ## |
|
2686 ## self.Filter = filter |
|
2687 ## self.PouIsUsed = pou_is_used |
|
2688 ## self.FilterChoices = [] |
|
2689 ## self.FilterChoiceTransfer = {"All" : "All", "Interface" : "Interface", |
|
2690 ## " Input" : "Input", " Output" : "Output", " InOut" : "InOut", |
|
2691 ## " External" : "External", "Variables" : "Variables", " Local" : "Local", |
|
2692 ## " Temp" : "Temp", "Global" : "Global", "Access" : "Access"} |
|
2693 ## |
|
2694 ## if pou_type: |
|
2695 ## self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"} |
|
2696 ## self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"} |
|
2697 ## else: |
|
2698 ## self.DefaultTypes = {"All" : "Global"} |
|
2699 ## self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"} |
|
2700 ## if not pou_type or pou_type == "program": |
|
2701 ## self.Table = VariableTable(self, [], ["Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"]) |
|
2702 ## if pou_type: |
|
2703 ## self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp","Global","Access"] |
|
2704 ## else: |
|
2705 ## self.FilterChoices = ["All","Global","Access"] |
|
2706 ## self.ColSizes = [80, 70, 80, 80, 80, 60, 70] |
|
2707 ## self.ColAlignements = [wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_CENTER, wx.ALIGN_CENTER] |
|
2708 ## else: |
|
2709 ## self.Table = VariableTable(self, [], ["Name", "Class", "Type", "Initial Value", "Retain", "Constant"]) |
|
2710 ## self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp"] |
|
2711 ## self.ColSizes = [120, 70, 80, 120, 60, 70] |
|
2712 ## self.ColAlignements = [wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_LEFT, wx.ALIGN_CENTER, wx.ALIGN_CENTER] |
|
2713 ## for choice in self.FilterChoices: |
|
2714 ## self.ClassFilter.Append(choice) |
|
2715 ## reverse_transfer = {} |
|
2716 ## for filter, choice in self.FilterChoiceTransfer.items(): |
|
2717 ## reverse_transfer[choice] = filter |
|
2718 ## self.ClassFilter.SetStringSelection(reverse_transfer[self.Filter]) |
|
2719 ## self.RefreshTypeList() |
|
2720 ## self.RefreshButtons() |
|
2721 ## |
|
2722 ## self.OptionList = "Yes,No" |
|
2723 ## self.TypeList = ",".join([value for value, parent in TypeHierarchy_list if not value.startswith("ANY")]) |
|
2724 ## |
|
2725 ## if pou_type == "function": |
|
2726 ## for value, parent in TypeHierarchy_list: |
|
2727 ## if not value.startswith("ANY"): |
|
2728 ## self.ReturnType.Append(value) |
|
2729 ## self.ReturnType.Enable(True) |
|
2730 ## else: |
|
2731 ## self.ReturnType.Enable(False) |
|
2732 ## self.staticText2.Hide() |
|
2733 ## self.ReturnType.Hide() |
|
2734 ## |
|
2735 ## self.VariablesGrid.SetTable(self.Table) |
|
2736 ## self.VariablesGrid.SetRowLabelSize(0) |
|
2737 ## |
|
2738 ## self.Table.ResetView(self.VariablesGrid) |
|
2739 ## |
|
2740 ## self.PouNames = [] |
|
2741 ## |
|
2742 ## if self.PouIsUsed: |
|
2743 ## wx.CallAfter(self.WarningMessage, name) |
|
2744 ## |
|
2745 ## def WarningMessage(self, name): |
|
2746 ## message = wx.MessageDialog(self, "\"%s\" is used by one or more POUs. Its interface can't be changed!"%name, "WARNING", wx.OK|wx.ICON_EXCLAMATION) |
|
2747 ## message.ShowModal() |
|
2748 ## message.Destroy() |
|
2749 ## |
|
2750 ## def OnOK(self, event): |
|
2751 ## self.VariablesGrid.SetGridCursor(0, 0) |
|
2752 ## error = [] |
|
2753 ## if self.ReturnType.IsEnabled() and self.ReturnType.GetStringSelection() == "": |
|
2754 ## error.append("Return Type") |
|
2755 ## if len(error) > 0: |
|
2756 ## text = "" |
|
2757 ## for i, item in enumerate(error): |
|
2758 ## if i == 0: |
|
2759 ## text += item |
|
2760 ## elif i == len(error) - 1: |
|
2761 ## text += " and %s"%item |
|
2762 ## else: |
|
2763 ## text += ", %s"%item |
|
2764 ## message = wx.MessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wx.OK|wx.ICON_ERROR) |
|
2765 ## message.ShowModal() |
|
2766 ## message.Destroy() |
|
2767 ## else: |
|
2768 ## self.EndModal(wx.ID_OK) |
|
2769 ## |
|
2770 ## def OnClassFilter(self, event): |
|
2771 ## self.Filter = self.FilterChoiceTransfer[self.ClassFilter.GetStringSelection()] |
|
2772 ## self.RefreshTypeList() |
|
2773 ## self.RefreshValues() |
|
2774 ## self.RefreshButtons() |
|
2775 ## event.Skip() |
|
2776 ## |
|
2777 ## def RefreshTypeList(self): |
|
2778 ## if self.Filter == "All": |
|
2779 ## self.ClassList = [self.FilterChoiceTransfer[choice] for choice in self.FilterChoices if self.FilterChoiceTransfer[choice] not in ["All","Interface","Variables"]] |
|
2780 ## elif self.Filter == "Interface": |
|
2781 ## self.ClassList = ["Input","Output","InOut","External"] |
|
2782 ## elif self.Filter == "Variables": |
|
2783 ## self.ClassList = ["Local","Temp"] |
|
2784 ## else: |
|
2785 ## self.ClassList = [self.Filter] |
|
2786 ## |
|
2787 ## def RefreshButtons(self): |
|
2788 ## table_length = len(self.Table.data) |
|
2789 ## row_class = None |
|
2790 ## if table_length and self.PouIsUsed: |
|
2791 ## row = self.VariablesGrid.GetGridCursorRow() |
|
2792 ## row_class = self.Table.GetValueByName(row, "Class") |
|
2793 ## self.AddButton.Enable(not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"]) |
|
2794 ## self.DeleteButton.Enable(table_length > 0 and row_class not in ["Input", "Output", "InOut"]) |
|
2795 ## self.UpButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"]) |
|
2796 ## self.DownButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"]) |
|
2797 ## |
|
2798 ## def OnAddButton(self, event): |
|
2799 ## new_row = self.DefaultValue.copy() |
|
2800 ## if self.Filter in self.DefaultTypes: |
|
2801 ## new_row["Class"] = self.DefaultTypes[self.Filter] |
|
2802 ## else: |
|
2803 ## new_row["Class"] = self.Filter |
|
2804 ## self.Values.append(new_row) |
|
2805 ## self.RefreshValues() |
|
2806 ## self.RefreshButtons() |
|
2807 ## event.Skip() |
|
2808 ## |
|
2809 ## def OnDeleteButton(self, event): |
|
2810 ## row = self.Table.GetRow(self.VariablesGrid.GetGridCursorRow()) |
|
2811 ## self.Values.remove(row) |
|
2812 ## self.RefreshValues() |
|
2813 ## self.RefreshButtons() |
|
2814 ## event.Skip() |
|
2815 ## |
|
2816 ## def OnUpButton(self, event): |
|
2817 ## self.MoveValue(self.VariablesGrid.GetGridCursorRow(), -1) |
|
2818 ## self.RefreshButtons() |
|
2819 ## event.Skip() |
|
2820 ## |
|
2821 ## def OnDownButton(self, event): |
|
2822 ## self.MoveValue(self.VariablesGrid.GetGridCursorRow(), 1) |
|
2823 ## self.RefreshButtons() |
|
2824 ## event.Skip() |
|
2825 ## |
|
2826 ## def OnVariablesGridCellChange(self, event): |
|
2827 ## row, col = event.GetRow(), event.GetCol() |
|
2828 ## colname = self.Table.GetColLabelValue(col) |
|
2829 ## value = self.Table.GetValue(row, col) |
|
2830 ## if colname == "Name": |
|
2831 ## if not TestIdentifier(value): |
|
2832 ## message = wx.MessageDialog(self, "\"%s\" is not a valid identifier!"%value, "Error", wx.OK|wx.ICON_ERROR) |
|
2833 ## message.ShowModal() |
|
2834 ## message.Destroy() |
|
2835 ## event.Veto() |
|
2836 ## elif value.upper() in IEC_KEYWORDS: |
|
2837 ## message = wx.MessageDialog(self, "\"%s\" is a keyword. It can't be used!"%value, "Error", wx.OK|wx.ICON_ERROR) |
|
2838 ## message.ShowModal() |
|
2839 ## message.Destroy() |
|
2840 ## event.Veto() |
|
2841 ## elif value.upper() in self.PouNames: |
|
2842 ## message = wx.MessageDialog(self, "A pou with \"%s\" as name exists!"%value, "Error", wx.OK|wx.ICON_ERROR) |
|
2843 ## message.ShowModal() |
|
2844 ## message.Destroy() |
|
2845 ## event.Veto() |
|
2846 ## elif value.upper() in [var["Name"].upper() for var in self.Values if var != self.Table.data[row]]: |
|
2847 ## message = wx.MessageDialog(self, "A variable with \"%s\" as name exists in this pou!"%value, "Error", wx.OK|wx.ICON_ERROR) |
|
2848 ## message.ShowModal() |
|
2849 ## message.Destroy() |
|
2850 ## event.Veto() |
|
2851 ## else: |
|
2852 ## event.Skip() |
|
2853 ## else: |
|
2854 ## event.Skip() |
|
2855 ## |
|
2856 ## def OnVariablesGridSelectCell(self, event): |
|
2857 ## wx.CallAfter(self.RefreshButtons) |
|
2858 ## event.Skip() |
|
2859 ## |
|
2860 ## def SetPouNames(self, pou_names): |
|
2861 ## self.PouNames = [pou_name.upper() for pou_name in pou_names] |
|
2862 ## |
|
2863 ## def SetValues(self, values): |
|
2864 ## for item, value in values.items(): |
|
2865 ## if item == "returnType" and value and self.ReturnType.IsEnabled(): |
|
2866 ## self.ReturnType.SetStringSelection(value) |
|
2867 ## if item == "data": |
|
2868 ## self.Values = value |
|
2869 ## self.RefreshValues() |
|
2870 ## |
|
2871 ## def MoveValue(self, value_index, move): |
|
2872 ## new_index = max(0, min(value_index + move, len(self.Values) - 1)) |
|
2873 ## if new_index != value_index: |
|
2874 ## self.Values.insert(new_index, self.Values.pop(value_index)) |
|
2875 ## self.RefreshValues() |
|
2876 ## self.VariablesGrid.SetGridCursor(new_index, self.VariablesGrid.GetGridCursorCol()) |
|
2877 ## else: |
|
2878 ## self.RefreshValues() |
|
2879 ## |
|
2880 ## def RefreshValues(self): |
|
2881 ## if len(self.Table.data) > 0: |
|
2882 ## self.VariablesGrid.SetGridCursor(0, 0) |
|
2883 ## data = [] |
|
2884 ## for variable in self.Values: |
|
2885 ## if variable["Class"] in self.ClassList: |
|
2886 ## data.append(variable) |
|
2887 ## self.Table.SetData(data) |
|
2888 ## self.Table.ResetView(self.VariablesGrid) |
|
2889 ## |
|
2890 ## def GetValues(self): |
|
2891 ## values = {} |
|
2892 ## if self.ReturnType.IsEnabled(): |
|
2893 ## values["returnType"] = self.ReturnType.GetStringSelection() |
|
2894 ## values["data"] = self.Values |
|
2895 ## return values |
|
2896 |
2488 |
2897 #------------------------------------------------------------------------------- |
2489 #------------------------------------------------------------------------------- |
2898 # Exception Handler |
2490 # Exception Handler |
2899 #------------------------------------------------------------------------------- |
2491 #------------------------------------------------------------------------------- |
2900 |
2492 |