873 self.ProjectTree.Expand(selected) |
887 self.ProjectTree.Expand(selected) |
874 name = self.ProjectTree.GetItemText(selected) |
888 name = self.ProjectTree.GetItemText(selected) |
875 data = self.ProjectTree.GetPyData(selected) |
889 data = self.ProjectTree.GetPyData(selected) |
876 if name == "Properties": |
890 if name == "Properties": |
877 self.ShowProperties() |
891 self.ShowProperties() |
878 elif data == ITEM_CLASS: |
892 ## elif data == ITEM_CLASS: |
879 item = self.ProjectTree.GetItemParent(selected) |
893 ## item = self.ProjectTree.GetItemParent(selected) |
880 item_type = self.ProjectTree.GetPyData(item) |
894 ## item_type = self.ProjectTree.GetPyData(item) |
881 while item_type not in [ITEM_POU, ITEM_RESOURCE, ITEM_CONFIGURATION] and item.IsOk(): |
895 ## while item_type not in [ITEM_POU, ITEM_RESOURCE, ITEM_CONFIGURATION] and item.IsOk(): |
882 item = self.ProjectTree.GetItemParent(item) |
896 ## item = self.ProjectTree.GetItemParent(item) |
|
897 ## item_type = self.ProjectTree.GetPyData(item) |
|
898 ## item_name = self.ProjectTree.GetItemText(item) |
|
899 ## if item_type == ITEM_POU: |
|
900 ## dialog = EditVariableDialog(self, item_name, self.Controler.GetPouType(item_name), self.Controler.PouIsUsed(item_name), name) |
|
901 ## dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
|
902 ## values = {} |
|
903 ## values["returnType"] = self.Controler.GetPouInterfaceReturnTypeByName(item_name) |
|
904 ## values["data"] = self.Controler.GetPouInterfaceVarsByName(item_name) |
|
905 ## dialog.SetValues(values) |
|
906 ## if dialog.ShowModal() == wxID_OK: |
|
907 ## new_values = dialog.GetValues() |
|
908 ## if "returnType" in new_values: |
|
909 ## self.Controler.SetPouInterfaceReturnType(item_name, new_values["returnType"]) |
|
910 ## self.Controler.SetPouInterfaceVars(item_name, new_values["data"]) |
|
911 ## pou_names = self.Controler.GetElementsOpenedNames() |
|
912 ## if item_name in pou_names: |
|
913 ## window = self.TabsOpened.GetPage(pou_names.index(item_name)) |
|
914 ## if isinstance(window, TextViewer): |
|
915 ## varlist = [] |
|
916 ## if "returnType" in new_values: |
|
917 ## varlist.append(name) |
|
918 ## for var in new_values["data"]: |
|
919 ## varlist.append(var["Name"]) |
|
920 ## window.SetVariables(varlist) |
|
921 ## dialog.Destroy() |
|
922 ## self.RefreshProjectTree() |
|
923 ## elif item_type == ITEM_CONFIGURATION: |
|
924 ## dialog = EditVariableDialog(self, item_name, None, False, name) |
|
925 ## dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
|
926 ## values = {"data" : self.Controler.GetConfigurationGlobalVars(item_name)} |
|
927 ## dialog.SetValues(values) |
|
928 ## if dialog.ShowModal() == wxID_OK: |
|
929 ## new_values = dialog.GetValues() |
|
930 ## self.Controler.SetConfigurationGlobalVars(item_name, new_values["data"]) |
|
931 ## dialog.Destroy() |
|
932 ## self.RefreshProjectTree() |
|
933 ## elif item_type == ITEM_RESOURCE: |
|
934 ## config = self.ProjectTree.GetItemParent(item) |
|
935 ## config_type = self.ProjectTree.GetPyData(config) |
|
936 ## while config_type != ITEM_CONFIGURATION and config.IsOk(): |
|
937 ## config = self.ProjectTree.GetItemParent(config) |
|
938 ## config_type = self.ProjectTree.GetPyData(config) |
|
939 ## if config.IsOk(): |
|
940 ## config_name = self.ProjectTree.GetItemText(config) |
|
941 ## dialog = EditVariableDialog(self, item_name, None, False, name) |
|
942 ## values = {"data" : self.Controler.GetConfigurationResourceGlobalVars(config_name, item_name)} |
|
943 ## dialog.SetValues(values) |
|
944 ## if dialog.ShowModal() == wxID_OK: |
|
945 ## new_values = dialog.GetValues() |
|
946 ## self.Controler.SetConfigurationResourceGlobalVars(config_name, item_name, new_values["data"]) |
|
947 ## dialog.Destroy() |
|
948 ## self.RefreshProjectTree() |
|
949 ## elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]: |
|
950 ## if data == ITEM_POU: |
|
951 ## idx = self.Controler.OpenElementEditing(name) |
|
952 ## language = self.Controler.GetPouBodyType(name) |
|
953 ## varlist = [] |
|
954 ## returnType = self.Controler.GetPouInterfaceReturnTypeByName(name) |
|
955 ## if returnType: |
|
956 ## varlist.append(name) |
|
957 ## vars = self.Controler.GetPouInterfaceVarsByName(name) |
|
958 ## if vars: |
|
959 ## for var in vars: |
|
960 ## varlist.append(var["Name"]) |
|
961 ## self.EditVariable.SetPou(self.Controler.GetPouType(name), self.Controler.PouIsUsed(name)) |
|
962 ## self.EditVariable.SetValues({"returnType":returnType,"data":vars}) |
|
963 ## else: |
|
964 ## parent = self.ProjectTree.GetItemParent(selected) |
|
965 ## parent_name = self.ProjectTree.GetItemText(parent) |
|
966 ## grandparent = self.ProjectTree.GetItemParent(parent) |
|
967 ## grandparent_name = self.ProjectTree.GetItemText(grandparent) |
|
968 ## if data == ITEM_TRANSITION: |
|
969 ## idx = self.Controler.OpenPouTransitionEditing(grandparent_name, name) |
|
970 ## language = self.Controler.GetTransitionBodyType(grandparent_name, name) |
|
971 ## elif data == ITEM_ACTION: |
|
972 ## idx = self.Controler.OpenPouActionEditing(grandparent_name, name) |
|
973 ## language = self.Controler.GetActionBodyType(grandparent_name, name) |
|
974 ## varlist = [name] |
|
975 ## vars = self.Controler.GetPouInterfaceVarsByName(grandparent_name) |
|
976 ## if vars: |
|
977 ## for var in vars: |
|
978 ## varlist.append(var["Name"]) |
|
979 ## self.EditVariable.SetPou(self.Controler.GetPouType(grandparent_name), self.Controler.PouIsUsed(grandparent_name)) |
|
980 ## self.EditVariable.SetValues({"returnType":returnType,"data":vars}) |
|
981 ## if idx != None: |
|
982 ## if language == "FBD": |
|
983 ## new_window = Viewer(self.TabsOpened, self, self.Controler) |
|
984 ## elif language == "LD": |
|
985 ## new_window = LD_Viewer(self.TabsOpened, self, self.Controler) |
|
986 ## elif language == "SFC": |
|
987 ## new_window = SFC_Viewer(self.TabsOpened, self, self.Controler) |
|
988 ## elif language in ["IL", "ST"]: |
|
989 ## new_window = TextViewer(self.TabsOpened, self, self.Controler) |
|
990 ## new_window.SetTextSyntax(language) |
|
991 ## if language == "IL": |
|
992 ## new_window.SetKeywords(IL_KEYWORDS) |
|
993 ## else: |
|
994 ## new_window.SetKeywords(ST_KEYWORDS) |
|
995 ## new_window.SetVariables(varlist) |
|
996 ## new_window.SetFunctions(self.Controler.GetBlockTypes()) |
|
997 ## else: |
|
998 ## return |
|
999 ## new_window.RefreshView() |
|
1000 ## self.TabsOpened.AddPage(new_window, "") |
|
1001 ## self.TabsOpened.SetSelection(idx) |
|
1002 ## self.RefreshTabsOpenedTitles() |
|
1003 ## self.RefreshFileMenu() |
|
1004 ## self.RefreshEditMenu() |
|
1005 ## self.RefreshToolBar() |
|
1006 ## else: |
|
1007 ## if data == ITEM_POU: |
|
1008 ## idx = self.Controler.ChangeElementEditing(name) |
|
1009 ## elif data == ITEM_TRANSITION: |
|
1010 ## idx = self.Controler.ChangePouTransitionEditing(grandparent_name, name) |
|
1011 ## elif data == ITEM_ACTION: |
|
1012 ## idx = self.Controler.ChangePouActionEditing(grandparent_name, name) |
|
1013 ## if idx != None: |
|
1014 ## self.TabsOpened.SetSelection(idx) |
|
1015 ## self.RefreshFileMenu() |
|
1016 ## self.RefreshEditMenu() |
|
1017 ## self.RefreshToolBar() |
|
1018 ## elif data == ITEM_RESOURCE: |
|
1019 ## item = self.ProjectTree.GetItemParent(selected) |
|
1020 ## item_type = self.ProjectTree.GetPyData(item) |
|
1021 ## while item_type != ITEM_CONFIGURATION: |
|
1022 ## item = self.ProjectTree.GetItemParent(item) |
|
1023 ## item_type = self.ProjectTree.GetPyData(item) |
|
1024 ## config_name = self.ProjectTree.GetItemText(item) |
|
1025 ## idx = self.Controler.OpenConfigurationResourceEditing(config_name, name) |
|
1026 ## if idx != None: |
|
1027 ## new_window = ResourceEditor(self.TabsOpened, self, self.Controler) |
|
1028 ## new_window.RefreshView() |
|
1029 ## self.TabsOpened.AddPage(new_window, "") |
|
1030 ## self.TabsOpened.SetSelection(idx) |
|
1031 ## self.RefreshTabsOpenedTitles() |
|
1032 ## self.RefreshFileMenu() |
|
1033 ## self.RefreshEditMenu() |
|
1034 ## self.RefreshToolBar() |
|
1035 ## else: |
|
1036 ## idx = self.Controler.ChangeConfigurationResourceEditing(parent_name, name) |
|
1037 ## if idx != None: |
|
1038 ## self.TabsOpened.SetSelection(idx) |
|
1039 ## self.RefreshFileMenu() |
|
1040 ## self.RefreshEditMenu() |
|
1041 ## self.RefreshToolBar() |
|
1042 elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE, ITEM_CONFIGURATION]: |
|
1043 if data == ITEM_CONFIGURATION: |
|
1044 idx = self.Controler.OpenConfigurationEditing(name) |
|
1045 if idx != None: |
|
1046 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "config", config_name = name) |
|
1047 self.TabsOpened.AddPage(new_window, "") |
|
1048 else: |
|
1049 idx = self.Controler.ChangeConfigurationEditing(name) |
|
1050 elif data == ITEM_RESOURCE: |
|
1051 item = self.ProjectTree.GetItemParent(selected) |
883 item_type = self.ProjectTree.GetPyData(item) |
1052 item_type = self.ProjectTree.GetPyData(item) |
884 item_name = self.ProjectTree.GetItemText(item) |
1053 while item_type != ITEM_CONFIGURATION: |
885 if item_type == ITEM_POU: |
1054 item = self.ProjectTree.GetItemParent(item) |
886 dialog = EditVariableDialog(self, item_name, self.Controler.GetPouType(item_name), self.Controler.PouIsUsed(item_name), name) |
1055 item_type = self.ProjectTree.GetPyData(item) |
887 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
1056 config_name = self.ProjectTree.GetItemText(item) |
888 values = {} |
1057 idx = self.Controler.OpenConfigurationResourceEditing(config_name, name) |
889 values["returnType"] = self.Controler.GetPouInterfaceReturnTypeByName(item_name) |
1058 if idx != None: |
890 values["data"] = self.Controler.GetPouInterfaceVarsByName(item_name) |
1059 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "resource", config_name = config_name, resource_name = name) |
891 dialog.SetValues(values) |
1060 self.TabsOpened.AddPage(new_window, "") |
892 if dialog.ShowModal() == wxID_OK: |
1061 else: |
893 new_values = dialog.GetValues() |
1062 idx = self.Controler.ChangeConfigurationResourceEditing(config_name, name) |
894 if "returnType" in new_values: |
1063 elif data == ITEM_POU: |
895 self.Controler.SetPouInterfaceReturnType(item_name, new_values["returnType"]) |
|
896 self.Controler.SetPouInterfaceVars(item_name, new_values["data"]) |
|
897 pou_names = self.Controler.GetElementsOpenedNames() |
|
898 if item_name in pou_names: |
|
899 window = self.TabsOpened.GetPage(pou_names.index(item_name)) |
|
900 if isinstance(window, TextViewer): |
|
901 varlist = [] |
|
902 if "returnType" in new_values: |
|
903 varlist.append(name) |
|
904 for var in new_values["data"]: |
|
905 varlist.append(var["Name"]) |
|
906 window.SetVariables(varlist) |
|
907 dialog.Destroy() |
|
908 self.RefreshProjectTree() |
|
909 elif item_type == ITEM_CONFIGURATION: |
|
910 dialog = EditVariableDialog(self, item_name, None, False, name) |
|
911 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
|
912 values = {"data" : self.Controler.GetConfigurationGlobalVars(item_name)} |
|
913 dialog.SetValues(values) |
|
914 if dialog.ShowModal() == wxID_OK: |
|
915 new_values = dialog.GetValues() |
|
916 self.Controler.SetConfigurationGlobalVars(item_name, new_values["data"]) |
|
917 dialog.Destroy() |
|
918 self.RefreshProjectTree() |
|
919 elif item_type == ITEM_RESOURCE: |
|
920 config = self.ProjectTree.GetItemParent(item) |
|
921 config_type = self.ProjectTree.GetPyData(config) |
|
922 while config_type != ITEM_CONFIGURATION and config.IsOk(): |
|
923 config = self.ProjectTree.GetItemParent(config) |
|
924 config_type = self.ProjectTree.GetPyData(config) |
|
925 if config.IsOk(): |
|
926 config_name = self.ProjectTree.GetItemText(config) |
|
927 dialog = EditVariableDialog(self, item_name, None, False, name) |
|
928 values = {"data" : self.Controler.GetConfigurationResourceGlobalVars(config_name, item_name)} |
|
929 dialog.SetValues(values) |
|
930 if dialog.ShowModal() == wxID_OK: |
|
931 new_values = dialog.GetValues() |
|
932 self.Controler.SetConfigurationResourceGlobalVars(config_name, item_name, new_values["data"]) |
|
933 dialog.Destroy() |
|
934 self.RefreshProjectTree() |
|
935 elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]: |
|
936 if data == ITEM_POU: |
|
937 idx = self.Controler.OpenElementEditing(name) |
1064 idx = self.Controler.OpenElementEditing(name) |
938 language = self.Controler.GetPouBodyType(name) |
1065 if idx != None: |
939 varlist = [] |
1066 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, self.Controler.GetPouType(name), pou_name = name) |
940 returnType = self.Controler.GetPouInterfaceReturnTypeByName(name) |
1067 self.TabsOpened.AddPage(new_window, "") |
941 if returnType: |
1068 else: |
942 varlist.append(name) |
1069 idx = self.Controler.ChangeElementEditing(name) |
943 vars = self.Controler.GetPouInterfaceVarsByName(name) |
|
944 if vars: |
|
945 for var in vars: |
|
946 varlist.append(var["Name"]) |
|
947 else: |
1070 else: |
948 parent = self.ProjectTree.GetItemParent(selected) |
1071 parent = self.ProjectTree.GetItemParent(selected) |
949 parent_name = self.ProjectTree.GetItemText(parent) |
1072 parent_name = self.ProjectTree.GetItemText(parent) |
950 grandparent = self.ProjectTree.GetItemParent(parent) |
1073 grandparent = self.ProjectTree.GetItemParent(parent) |
951 grandparent_name = self.ProjectTree.GetItemText(grandparent) |
1074 grandparent_name = self.ProjectTree.GetItemText(grandparent) |
952 if data == ITEM_TRANSITION: |
1075 if data == ITEM_TRANSITION: |
953 idx = self.Controler.OpenPouTransitionEditing(grandparent_name, name) |
1076 idx = self.Controler.OpenPouTransitionEditing(grandparent_name, name) |
954 language = self.Controler.GetTransitionBodyType(grandparent_name, name) |
1077 if idx != None: |
|
1078 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "transition", pou_name = grandparent_name, transition_name = name) |
|
1079 self.TabsOpened.AddPage(new_window, "") |
|
1080 else: |
|
1081 idx = self.Controler.ChangePouTransitionEditing(grandparent_name, name) |
955 elif data == ITEM_ACTION: |
1082 elif data == ITEM_ACTION: |
956 idx = self.Controler.OpenPouActionEditing(grandparent_name, name) |
1083 idx = self.Controler.OpenPouActionEditing(grandparent_name, name) |
957 language = self.Controler.GetActionBodyType(grandparent_name, name) |
1084 if idx != None: |
958 varlist = [name] |
1085 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "action", pou_name = grandparent_name, action_name = name) |
959 vars = self.Controler.GetPouInterfaceVarsByName(grandparent_name) |
1086 self.TabsOpened.AddPage(new_window, "") |
960 if vars: |
1087 else: |
961 for var in vars: |
1088 idx = self.Controler.ChangePouActionEditing(grandparent_name, name) |
962 varlist.append(var["Name"]) |
|
963 if idx != None: |
1089 if idx != None: |
964 if language == "FBD": |
|
965 new_window = Viewer(self.TabsOpened, self, self.Controler) |
|
966 elif language == "LD": |
|
967 new_window = LD_Viewer(self.TabsOpened, self, self.Controler) |
|
968 elif language == "SFC": |
|
969 new_window = SFC_Viewer(self.TabsOpened, self, self.Controler) |
|
970 elif language in ["IL", "ST"]: |
|
971 new_window = TextViewer(self.TabsOpened, self, self.Controler) |
|
972 new_window.SetTextSyntax(language) |
|
973 if language == "IL": |
|
974 new_window.SetKeywords(IL_KEYWORDS) |
|
975 else: |
|
976 new_window.SetKeywords(ST_KEYWORDS) |
|
977 new_window.SetVariables(varlist) |
|
978 new_window.SetFunctions(self.Controler.GetBlockTypes()) |
|
979 else: |
|
980 return |
|
981 new_window.RefreshView() |
|
982 self.TabsOpened.AddPage(new_window, "") |
|
983 self.TabsOpened.SetSelection(idx) |
1090 self.TabsOpened.SetSelection(idx) |
|
1091 window = self.TabsOpened.GetPage(idx) |
|
1092 window.RefreshView() |
984 self.RefreshTabsOpenedTitles() |
1093 self.RefreshTabsOpenedTitles() |
985 self.RefreshFileMenu() |
1094 self.RefreshFileMenu() |
986 self.RefreshEditMenu() |
1095 self.RefreshEditMenu() |
987 self.RefreshToolBar() |
1096 self.RefreshToolBar() |
988 else: |
|
989 if data == ITEM_POU: |
|
990 idx = self.Controler.ChangeElementEditing(name) |
|
991 elif data == ITEM_TRANSITION: |
|
992 idx = self.Controler.ChangePouTransitionEditing(grandparent_name, name) |
|
993 elif data == ITEM_ACTION: |
|
994 idx = self.Controler.ChangePouActionEditing(grandparent_name, name) |
|
995 if idx != None: |
|
996 self.TabsOpened.SetSelection(idx) |
|
997 self.RefreshFileMenu() |
|
998 self.RefreshEditMenu() |
|
999 self.RefreshToolBar() |
|
1000 elif data == ITEM_RESOURCE: |
|
1001 item = self.ProjectTree.GetItemParent(selected) |
|
1002 item_type = self.ProjectTree.GetPyData(item) |
|
1003 while item_type != ITEM_CONFIGURATION: |
|
1004 item = self.ProjectTree.GetItemParent(item) |
|
1005 item_type = self.ProjectTree.GetPyData(item) |
|
1006 config_name = self.ProjectTree.GetItemText(item) |
|
1007 idx = self.Controler.OpenConfigurationResourceEditing(config_name, name) |
|
1008 if idx != None: |
|
1009 new_window = ResourceEditor(self.TabsOpened, self, self.Controler) |
|
1010 new_window.RefreshView() |
|
1011 self.TabsOpened.AddPage(new_window, "") |
|
1012 self.TabsOpened.SetSelection(idx) |
|
1013 self.RefreshTabsOpenedTitles() |
|
1014 self.RefreshFileMenu() |
|
1015 self.RefreshEditMenu() |
|
1016 self.RefreshToolBar() |
|
1017 else: |
|
1018 idx = self.Controler.ChangeConfigurationResourceEditing(parent_name, name) |
|
1019 if idx != None: |
|
1020 self.TabsOpened.SetSelection(idx) |
|
1021 self.RefreshFileMenu() |
|
1022 self.RefreshEditMenu() |
|
1023 self.RefreshToolBar() |
|
1024 |
1097 |
1025 def OnProjectTreeRightUp(self, event): |
1098 def OnProjectTreeRightUp(self, event): |
1026 selected = self.ProjectTree.GetSelection() |
1099 selected = self.ProjectTree.GetSelection() |
1027 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
1100 if self.ProjectTree.GetPyData(selected) == ITEM_POU: |
1028 name = self.ProjectTree.GetItemText(selected) |
1101 name = self.ProjectTree.GetItemText(selected) |
1948 |
2025 |
1949 def Empty(self): |
2026 def Empty(self): |
1950 self.data = [] |
2027 self.data = [] |
1951 self.editors = [] |
2028 self.editors = [] |
1952 |
2029 |
1953 [wxID_EDITVARIABLEDIALOG, wxID_EDITVARIABLEDIALOGMAINPANEL, |
2030 [wxID_POUEDITORPANEL, wxID_POUEDITORPANELVIEWER, |
1954 wxID_EDITVARIABLEDIALOGVARIABLESGRID, wxID_EDITVARIABLEDIALOGRETURNTYPE, |
2031 wxID_POUEDITORPANELVARIABLESGRID, wxID_POUEDITORPANELRETURNTYPE, |
1955 wxID_EDITVARIABLEDIALOGCLASSFILTER, wxID_EDITVARIABLEDIALOGADDBUTTON, |
2032 wxID_POUEDITORPANELCLASSFILTER, wxID_POUEDITORPANELADDBUTTON, |
1956 wxID_EDITVARIABLEDIALOGDELETEBUTTON, wxID_EDITVARIABLEDIALOGUPBUTTON, |
2033 wxID_POUEDITORPANELDELETEBUTTON, wxID_POUEDITORPANELUPBUTTON, |
1957 wxID_EDITVARIABLEDIALOGDOWNBUTTON, wxID_EDITVARIABLEDIALOGSTATICTEXT1, |
2034 wxID_POUEDITORPANELDOWNBUTTON, wxID_POUEDITORPANELSTATICTEXT1, |
1958 wxID_EDITVARIABLEDIALOGSTATICTEXT2, wxID_EDITVARIABLEDIALOGSTATICTEXT3, |
2035 wxID_POUEDITORPANELSTATICTEXT2, wxID_POUEDITORPANELSTATICTEXT3, |
1959 ] = [wx.NewId() for _init_ctrls in range(12)] |
2036 ] = [wx.NewId() for _init_ctrls in range(12)] |
1960 |
2037 |
1961 class EditVariableDialog(wx.Dialog): |
2038 class PouEditorPanel(wx.Panel): |
1962 def _init_coll_flexGridSizer1_Items(self, parent): |
2039 def _init_coll_MainPanelSizer_Items(self, parent): |
1963 # generated method, don't edit |
2040 # generated method, don't edit |
1964 |
2041 |
1965 parent.AddWindow(self.MainPanel, 0, border=0, flag=0) |
2042 parent.AddWindow(self.Viewer, 0, border=0, flag=wxGROW) |
|
2043 parent.AddSizer(self.VariablePanelSizer, 0, border=0, flag=wxGROW) |
|
2044 |
|
2045 def _init_coll_MainPanelSizer_Growables(self, parent): |
|
2046 # generated method, don't edit |
|
2047 |
|
2048 parent.AddGrowableCol(0) |
|
2049 parent.AddGrowableRow(0) |
|
2050 |
|
2051 def _init_coll_VariablePanelSizer_Items(self, parent): |
|
2052 # generated method, don't edit |
|
2053 |
|
2054 parent.AddWindow(self.VariablesGrid, 0, border=0, flag=wxGROW) |
|
2055 parent.AddSizer(self.ControlPanelSizer, 0, border=0, flag=wxGROW) |
|
2056 |
|
2057 def _init_coll_VariablePanelSizer_Growables(self, parent): |
|
2058 # generated method, don't edit |
|
2059 |
|
2060 parent.AddGrowableCol(0) |
|
2061 parent.AddGrowableRow(0) |
|
2062 |
|
2063 def _init_coll_ControlPanelSizer_Items(self, parent): |
|
2064 # generated method, don't edit |
|
2065 |
|
2066 parent.AddSizer(self.ChoicePanelSizer, 0, border=0, flag=wxGROW) |
|
2067 parent.AddSizer(self.ButtonPanelSizer, 0, border=0, flag=wxALIGN_CENTER) |
|
2068 |
|
2069 def _init_coll_ControlPanelSizer_Growables(self, parent): |
|
2070 # generated method, don't edit |
|
2071 |
|
2072 parent.AddGrowableCol(0) |
|
2073 parent.AddGrowableRow(0) |
|
2074 parent.AddGrowableRow(1) |
|
2075 |
|
2076 def _init_coll_ChoicePanelSizer_Items(self, parent): |
|
2077 # generated method, don't edit |
|
2078 |
|
2079 parent.AddWindow(self.staticText1, 0, border=0, flag=wxALIGN_BOTTOM) |
|
2080 parent.AddWindow(self.staticText2, 0, border=0, flag=wxALIGN_BOTTOM) |
|
2081 parent.AddWindow(self.ReturnType, 0, border=0, flag=0) |
|
2082 parent.AddWindow(self.ClassFilter, 0, border=0, flag=0) |
|
2083 |
|
2084 def _init_coll_ButtonPanelSizer_Items(self, parent): |
|
2085 # generated method, don't edit |
|
2086 |
|
2087 parent.AddWindow(self.AddButton, 0, border=0, flag=0) |
|
2088 parent.AddWindow(self.DeleteButton, 0, border=0, flag=0) |
|
2089 parent.AddWindow(self.UpButton, 0, border=0, flag=0) |
|
2090 parent.AddWindow(self.DownButton, 0, border=0, flag=0) |
|
2091 |
|
2092 def _init_coll_ButtonPanelSizer_Growables(self, parent): |
|
2093 # generated method, don't edit |
|
2094 |
|
2095 parent.AddGrowableCol(0) |
|
2096 parent.AddGrowableCol(1) |
|
2097 parent.AddGrowableCol(2) |
|
2098 parent.AddGrowableCol(3) |
|
2099 parent.AddGrowableRow(0) |
1966 |
2100 |
1967 def _init_sizers(self): |
2101 def _init_sizers(self): |
1968 # generated method, don't edit |
2102 # generated method, don't edit |
1969 self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) |
2103 self.MainPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) |
1970 |
2104 |
1971 self._init_coll_flexGridSizer1_Items(self.flexGridSizer1) |
2105 self.VariablePanelSizer = wx.FlexGridSizer(cols=2, hgap=10, rows=1, vgap=0) |
1972 |
2106 |
1973 self.SetSizer(self.flexGridSizer1) |
2107 self.ControlPanelSizer = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) |
1974 |
2108 |
1975 def _init_ctrls(self, prnt, name): |
2109 self.ChoicePanelSizer = wx.GridSizer(cols=2, hgap=5, rows=2, vgap=5) |
1976 # generated method, don't edit |
2110 |
1977 wx.Dialog.__init__(self, id=wxID_EDITVARIABLEDIALOG, |
2111 self.ButtonPanelSizer = wx.FlexGridSizer(cols=4, hgap=5, rows=1, vgap=0) |
1978 name='EditVariableDialog', parent=prnt, pos=wx.Point(376, 223), |
2112 |
1979 size=wx.Size(600, 440), style=wx.DEFAULT_DIALOG_STYLE, |
2113 self._init_coll_MainPanelSizer_Items(self.MainPanelSizer) |
1980 title='Edit variables of %s'%name) |
2114 self._init_coll_MainPanelSizer_Growables(self.MainPanelSizer) |
1981 self.SetClientSize(wx.Size(600, 440)) |
2115 self._init_coll_VariablePanelSizer_Items(self.VariablePanelSizer) |
1982 |
2116 self._init_coll_VariablePanelSizer_Growables(self.VariablePanelSizer) |
1983 self.MainPanel = wx.Panel(id=wxID_EDITVARIABLEDIALOGMAINPANEL, |
2117 self._init_coll_ControlPanelSizer_Items(self.ControlPanelSizer) |
1984 name='MainPanel', parent=self, pos=wx.Point(0, 0), |
2118 self._init_coll_ControlPanelSizer_Growables(self.ControlPanelSizer) |
1985 size=wx.Size(600, 440), style=wx.TAB_TRAVERSAL) |
2119 self._init_coll_ChoicePanelSizer_Items(self.ChoicePanelSizer) |
1986 self.MainPanel.SetAutoLayout(True) |
2120 self._init_coll_ButtonPanelSizer_Items(self.ButtonPanelSizer) |
1987 |
2121 self._init_coll_ButtonPanelSizer_Growables(self.ButtonPanelSizer) |
1988 self.staticText1 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT1, |
2122 |
1989 label='Return Type:', name='staticText1', parent=self.MainPanel, |
2123 self.SetSizer(self.MainPanelSizer) |
1990 pos=wx.Point(24, 29), size=wx.Size(95, 17), style=0) |
2124 |
1991 |
2125 def _init_ctrls(self, prnt, element_type): |
1992 self.ReturnType = wx.Choice(id=wxID_EDITVARIABLEDIALOGRETURNTYPE, |
2126 # generated method, don't edit |
1993 name='ReturnType', parent=self.MainPanel, pos=wx.Point(124, 24), |
2127 wx.Panel.__init__(self, id=wxID_POUEDITORPANEL, |
|
2128 name='EditVariablePanel', parent=prnt, pos=wx.Point(0, 0), |
|
2129 size=wx.Size(-1, -1), style=0) |
|
2130 |
|
2131 if element_type == "config": |
|
2132 self.Viewer = wx.Panel(id=wxID_POUEDITORPANELVIEWER, |
|
2133 name='ConfigPanel', parent=self, pos=wx.Point(0, 0), |
|
2134 size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL) |
|
2135 elif element_type == "resource": |
|
2136 self.Viewer = ResourceEditor(self, self.Parent, self.Controler) |
|
2137 elif element_type == "FBD": |
|
2138 self.Viewer = Viewer(self, self.Parent, self.Controler) |
|
2139 elif element_type == "LD": |
|
2140 self.Viewer = LD_Viewer(self, self.Parent, self.Controler) |
|
2141 elif element_type == "SFC": |
|
2142 self.Viewer = SFC_Viewer(self, self.Parent, self.Controler) |
|
2143 else: |
|
2144 self.Viewer = TextViewer(self, self.Parent, self.Controler) |
|
2145 self.Viewer.SetTextSyntax(element_type) |
|
2146 if element_type == "IL": |
|
2147 self.Viewer.SetKeywords(IL_KEYWORDS) |
|
2148 else: |
|
2149 self.Viewer.SetKeywords(ST_KEYWORDS) |
|
2150 |
|
2151 self.staticText1 = wx.StaticText(id=wxID_POUEDITORPANELSTATICTEXT1, |
|
2152 label='Return Type:', name='staticText1', parent=self, |
|
2153 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
|
2154 |
|
2155 self.ReturnType = wx.Choice(id=wxID_POUEDITORPANELRETURNTYPE, |
|
2156 name='ReturnType', parent=self, pos=wx.Point(0, 0), |
1994 size=wx.Size(145, 24), style=0) |
2157 size=wx.Size(145, 24), style=0) |
1995 |
2158 |
1996 self.staticText2 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT2, |
2159 self.staticText2 = wx.StaticText(id=wxID_POUEDITORPANELSTATICTEXT2, |
1997 label='Class Filter:', name='staticText2', parent=self.MainPanel, |
2160 label='Class Filter:', name='staticText2', parent=self, |
1998 pos=wx.Point(324, 29), size=wx.Size(95, 17), style=0) |
2161 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
1999 |
2162 |
2000 self.ClassFilter = wx.Choice(id=wxID_EDITVARIABLEDIALOGCLASSFILTER, |
2163 self.ClassFilter = wx.Choice(id=wxID_POUEDITORPANELCLASSFILTER, |
2001 name='ClassFilter', parent=self.MainPanel, pos=wx.Point(424, 24), |
2164 name='ClassFilter', parent=self, pos=wx.Point(0, 0), |
2002 size=wx.Size(145, 24), style=0) |
2165 size=wx.Size(145, 24), style=0) |
2003 EVT_CHOICE(self, wxID_EDITVARIABLEDIALOGCLASSFILTER, self.OnClassFilter) |
2166 EVT_CHOICE(self, wxID_POUEDITORPANELCLASSFILTER, self.OnClassFilter) |
2004 |
2167 |
2005 self.staticText3 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT3, |
2168 self.VariablesGrid = wx.grid.Grid(id=wxID_POUEDITORPANELVARIABLESGRID, |
2006 label='Variables:', name='staticText3', parent=self.MainPanel, |
2169 name='VariablesGrid', parent=self, pos=wx.Point(0, 0), |
2007 pos=wx.Point(24, 60), size=wx.Size(95, 17), style=0) |
2170 size=wx.Size(-1, 150), style=wxVSCROLL) |
2008 |
|
2009 self.VariablesGrid = wx.grid.Grid(id=wxID_EDITVARIABLEDIALOGVARIABLESGRID, |
|
2010 name='VariablesGrid', parent=self.MainPanel, pos=wx.Point(24, 80), |
|
2011 size=wx.Size(550, 250), style=wxVSCROLL) |
|
2012 self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
2171 self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
2013 'Sans')) |
2172 'Sans')) |
2014 self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
2173 self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
2015 False, 'Sans')) |
2174 False, 'Sans')) |
2016 self.VariablesGrid.DisableDragGridSize() |
|
2017 self.VariablesGrid.EnableScrolling(False, True) |
|
2018 self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange) |
2175 self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange) |
2019 self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell) |
2176 self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell) |
2020 |
2177 self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.OnVariablesGridCellLeftClick) |
2021 self.AddButton = wx.Button(id=wxID_EDITVARIABLEDIALOGADDBUTTON, label='Add', |
2178 |
2022 name='AddButton', parent=self.MainPanel, pos=wx.Point(345, 340), |
2179 self.AddButton = wx.Button(id=wxID_POUEDITORPANELADDBUTTON, label='Add', |
|
2180 name='AddButton', parent=self, pos=wx.Point(345, 340), |
2023 size=wx.Size(72, 32), style=0) |
2181 size=wx.Size(72, 32), style=0) |
2024 EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGADDBUTTON, self.OnAddButton) |
2182 EVT_BUTTON(self, wxID_POUEDITORPANELADDBUTTON, self.OnAddButton) |
2025 |
2183 |
2026 self.DeleteButton = wx.Button(id=wxID_EDITVARIABLEDIALOGDELETEBUTTON, label='Delete', |
2184 self.DeleteButton = wx.Button(id=wxID_POUEDITORPANELDELETEBUTTON, label='Delete', |
2027 name='DeleteButton', parent=self.MainPanel, pos=wx.Point(425, 340), |
2185 name='DeleteButton', parent=self, pos=wx.Point(425, 340), |
2028 size=wx.Size(72, 32), style=0) |
2186 size=wx.Size(72, 32), style=0) |
2029 EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGDELETEBUTTON, self.OnDeleteButton) |
2187 EVT_BUTTON(self, wxID_POUEDITORPANELDELETEBUTTON, self.OnDeleteButton) |
2030 |
2188 |
2031 self.UpButton = wx.Button(id=wxID_EDITVARIABLEDIALOGUPBUTTON, label='^', |
2189 self.UpButton = wx.Button(id=wxID_POUEDITORPANELUPBUTTON, label='^', |
2032 name='UpButton', parent=self.MainPanel, pos=wx.Point(505, 340), |
2190 name='UpButton', parent=self, pos=wx.Point(505, 340), |
2033 size=wx.Size(32, 32), style=0) |
2191 size=wx.Size(32, 32), style=0) |
2034 EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGUPBUTTON, self.OnUpButton) |
2192 EVT_BUTTON(self, wxID_POUEDITORPANELUPBUTTON, self.OnUpButton) |
2035 |
2193 |
2036 self.DownButton = wx.Button(id=wxID_EDITVARIABLEDIALOGDOWNBUTTON, label='v', |
2194 self.DownButton = wx.Button(id=wxID_POUEDITORPANELDOWNBUTTON, label='v', |
2037 name='DownButton', parent=self.MainPanel, pos=wx.Point(545, 340), |
2195 name='DownButton', parent=self, pos=wx.Point(545, 340), |
2038 size=wx.Size(32, 32), style=0) |
2196 size=wx.Size(32, 32), style=0) |
2039 EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGDOWNBUTTON, self.OnDownButton) |
2197 EVT_BUTTON(self, wxID_POUEDITORPANELDOWNBUTTON, self.OnDownButton) |
2040 |
2198 |
2041 self._init_sizers() |
2199 self._init_sizers() |
2042 |
2200 |
2043 def __init__(self, parent, name, pou_type, pou_is_used, filter = "All"): |
2201 def __init__(self, parent, window, controler, element_type, pou_name = None, transition_name = None, action_name = None, config_name = None, resource_name = None): |
2044 self._init_ctrls(parent, name) |
2202 self.Parent = window |
2045 self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE) |
2203 self.Controler = controler |
2046 self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT) |
2204 self.ElementType = element_type |
2047 self.Filter = filter |
2205 self.PouName = pou_name |
2048 self.PouIsUsed = pou_is_used |
2206 self.TransitionName = transition_name |
|
2207 self.ActionName = action_name |
|
2208 self.ConfigName = config_name |
|
2209 self.ResourceName = resource_name |
|
2210 |
|
2211 if element_type == "config": |
|
2212 self._init_ctrls(parent, "config") |
|
2213 pou_type = "config" |
|
2214 elif element_type == "resource": |
|
2215 self._init_ctrls(parent, "resource") |
|
2216 pou_type = "resource" |
|
2217 else: |
|
2218 if element_type == "transition": |
|
2219 self._init_ctrls(parent, self.Controler.GetTransitionBodyType(pou_name, transition_name)) |
|
2220 elif element_type == "action": |
|
2221 self._init_ctrls(parent, self.Controler.GetActionBodyType(pou_name, action_name)) |
|
2222 else: |
|
2223 self._init_ctrls(parent, self.Controler.GetPouBodyType(pou_name)) |
|
2224 pou_type = self.Controler.GetPouType(pou_name) |
|
2225 |
|
2226 self.Filter = "All" |
2049 self.FilterChoices = [] |
2227 self.FilterChoices = [] |
2050 self.FilterChoiceTransfer = {"All" : "All", "Interface" : "Interface", |
2228 self.FilterChoiceTransfer = {"All" : "All", "Interface" : "Interface", |
2051 " Input" : "Input", " Output" : "Output", " InOut" : "InOut", |
2229 " Input" : "Input", " Output" : "Output", " InOut" : "InOut", |
2052 " External" : "External", "Variables" : "Variables", " Local" : "Local", |
2230 " External" : "External", "Variables" : "Variables", " Local" : "Local", |
2053 " Temp" : "Temp", "Global" : "Global", "Access" : "Access"} |
2231 " Temp" : "Temp", "Global" : "Global", "Access" : "Access"} |
2054 |
2232 |
2055 if pou_type: |
2233 if pou_type in ["config", "resource"]: |
|
2234 self.DefaultTypes = {"All" : "Global"} |
|
2235 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"} |
|
2236 else: |
2056 self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"} |
2237 self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"} |
2057 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"} |
2238 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"} |
2058 else: |
2239 if pou_type in ["config", "resource"] or pou_type == "program": |
2059 self.DefaultTypes = {"All" : "Global"} |
2240 self.Table = VariableTable(self, [], ["Drag", "Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"]) |
2060 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"} |
2241 if pou_type not in ["config", "resource"]: |
2061 if not pou_type or pou_type == "program": |
|
2062 self.Table = VariableTable(self, [], ["Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"]) |
|
2063 if pou_type: |
|
2064 self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp","Global","Access"] |
2242 self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp","Global","Access"] |
2065 else: |
2243 else: |
2066 self.FilterChoices = ["All","Global","Access"] |
2244 self.FilterChoices = ["All","Global","Access"] |
2067 self.ColSizes = [80, 70, 80, 80, 80, 60, 70] |
2245 self.ColSizes = [40, 80, 70, 80, 80, 80, 60, 70] |
2068 self.ColAlignements = [wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER] |
2246 self.ColAlignements = [wxALIGN_CENTER, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER] |
2069 else: |
2247 else: |
2070 self.Table = VariableTable(self, [], ["Name", "Class", "Type", "Initial Value", "Retain", "Constant"]) |
2248 self.Table = VariableTable(self, [], ["Drag", "Name", "Class", "Type", "Initial Value", "Retain", "Constant"]) |
2071 self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp"] |
2249 self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp"] |
2072 self.ColSizes = [120, 70, 80, 120, 60, 70] |
2250 self.ColSizes = [40, 120, 70, 80, 120, 60, 70] |
2073 self.ColAlignements = [wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER] |
2251 self.ColAlignements = [wxALIGN_CENTER, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER] |
2074 for choice in self.FilterChoices: |
2252 for choice in self.FilterChoices: |
2075 self.ClassFilter.Append(choice) |
2253 self.ClassFilter.Append(choice) |
2076 reverse_transfer = {} |
2254 reverse_transfer = {} |
2077 for filter, choice in self.FilterChoiceTransfer.items(): |
2255 for filter, choice in self.FilterChoiceTransfer.items(): |
2078 reverse_transfer[choice] = filter |
2256 reverse_transfer[choice] = filter |
2079 self.ClassFilter.SetStringSelection(reverse_transfer[self.Filter]) |
2257 self.ClassFilter.SetStringSelection(reverse_transfer[self.Filter]) |
2080 self.RefreshTypeList() |
2258 self.RefreshTypeList() |
2081 self.RefreshButtons() |
|
2082 |
2259 |
2083 self.OptionList = "Yes,No" |
2260 self.OptionList = "Yes,No" |
2084 self.TypeList = ",".join([value for value, parent in TypeHierarchy_list if not value.startswith("ANY")]) |
2261 self.TypeList = ",".join([value for value, parent in TypeHierarchy_list if not value.startswith("ANY")]) |
2085 |
2262 |
2086 if pou_type == "function": |
2263 if pou_type == "function": |
2210 message = wxMessageDialog(self, "A variable with \"%s\" as name exists in this pou!"%value, "Error", wxOK|wxICON_ERROR) |
2403 message = wxMessageDialog(self, "A variable with \"%s\" as name exists in this pou!"%value, "Error", wxOK|wxICON_ERROR) |
2211 message.ShowModal() |
2404 message.ShowModal() |
2212 message.Destroy() |
2405 message.Destroy() |
2213 event.Veto() |
2406 event.Veto() |
2214 else: |
2407 else: |
|
2408 self.SaveValues() |
2215 event.Skip() |
2409 event.Skip() |
2216 else: |
2410 else: |
|
2411 self.SaveValues() |
2217 event.Skip() |
2412 event.Skip() |
2218 |
2413 |
|
2414 def OnVariablesGridCellLeftClick(self, event): |
|
2415 if event.GetCol() == 0: |
|
2416 row = event.GetRow() |
|
2417 var_name = self.Table.GetValueByName(row, "Name") |
|
2418 var_class = self.Table.GetValueByName(row, "Class") |
|
2419 var_type = self.Table.GetValueByName(row, "Type") |
|
2420 data = wxTextDataObject(str((var_name, var_class, var_type))) |
|
2421 dragSource = wxDropSource(self.VariablesGrid) |
|
2422 dragSource.SetData(data) |
|
2423 dragSource.DoDragDrop() |
|
2424 event.Skip() |
|
2425 |
2219 def OnVariablesGridSelectCell(self, event): |
2426 def OnVariablesGridSelectCell(self, event): |
2220 wxCallAfter(self.RefreshButtons) |
2427 wxCallAfter(self.RefreshButtons) |
2221 event.Skip() |
2428 event.Skip() |
2222 |
|
2223 def SetPouNames(self, pou_names): |
|
2224 self.PouNames = [pou_name.upper() for pou_name in pou_names] |
|
2225 |
|
2226 def SetValues(self, values): |
|
2227 for item, value in values.items(): |
|
2228 if item == "returnType" and value and self.ReturnType.IsEnabled(): |
|
2229 self.ReturnType.SetStringSelection(value) |
|
2230 if item == "data": |
|
2231 self.Values = value |
|
2232 self.RefreshValues() |
|
2233 |
2429 |
2234 def MoveValue(self, value_index, move): |
2430 def MoveValue(self, value_index, move): |
2235 new_index = max(0, min(value_index + move, len(self.Values) - 1)) |
2431 new_index = max(0, min(value_index + move, len(self.Values) - 1)) |
2236 if new_index != value_index: |
2432 if new_index != value_index: |
2237 self.Values.insert(new_index, self.Values.pop(value_index)) |
2433 self.Values.insert(new_index, self.Values.pop(value_index)) |
2238 self.RefreshValues() |
2434 self.RefreshValues() |
2239 self.VariablesGrid.SetGridCursor(new_index, self.VariablesGrid.GetGridCursorCol()) |
2435 self.VariablesGrid.SetGridCursor(new_index, self.VariablesGrid.GetGridCursorCol()) |
2240 else: |
2436 else: |
2241 self.RefreshValues() |
2437 self.RefreshValues() |
2242 |
2438 self.SaveValues() |
|
2439 |
2243 def RefreshValues(self): |
2440 def RefreshValues(self): |
2244 if len(self.Table.data) > 0: |
2441 if len(self.Table.data) > 0: |
2245 self.VariablesGrid.SetGridCursor(0, 0) |
2442 self.VariablesGrid.SetGridCursor(0, 1) |
2246 data = [] |
2443 data = [] |
2247 for variable in self.Values: |
2444 for variable in self.Values: |
2248 if variable["Class"] in self.ClassList: |
2445 if variable["Class"] in self.ClassList: |
2249 data.append(variable) |
2446 data.append(variable) |
2250 self.Table.SetData(data) |
2447 self.Table.SetData(data) |
2251 self.Table.ResetView(self.VariablesGrid) |
2448 self.Table.ResetView(self.VariablesGrid) |
2252 |
2449 |
2253 def GetValues(self): |
2450 def SaveValues(self): |
2254 values = {} |
2451 if self.ElementType == "config": |
2255 if self.ReturnType.IsEnabled(): |
2452 self.Controler.SetConfigurationGlobalVars(self.ConfigName, self.Values) |
2256 values["returnType"] = self.ReturnType.GetStringSelection() |
2453 elif self.ElementType == "resource": |
2257 values["data"] = self.Values |
2454 self.Controler.SetConfigurationResourceGlobalVars(self.ConfigName, self.ResourceName, self.Values) |
2258 return values |
2455 else: |
|
2456 if self.ReturnType.IsEnabled(): |
|
2457 self.Controler.SetPouInterfaceReturnType(self.PouName, self.ReturnType.GetStringSelection()) |
|
2458 self.Controler.SetPouInterfaceVars(self.PouName, self.Values) |
|
2459 |
|
2460 ##[wxID_EDITVARIABLEDIALOG, wxID_EDITVARIABLEDIALOGMAINPANEL, |
|
2461 ## wxID_EDITVARIABLEDIALOGVARIABLESGRID, wxID_EDITVARIABLEDIALOGRETURNTYPE, |
|
2462 ## wxID_EDITVARIABLEDIALOGCLASSFILTER, wxID_EDITVARIABLEDIALOGADDBUTTON, |
|
2463 ## wxID_EDITVARIABLEDIALOGDELETEBUTTON, wxID_EDITVARIABLEDIALOGUPBUTTON, |
|
2464 ## wxID_EDITVARIABLEDIALOGDOWNBUTTON, wxID_EDITVARIABLEDIALOGSTATICTEXT1, |
|
2465 ## wxID_EDITVARIABLEDIALOGSTATICTEXT2, wxID_EDITVARIABLEDIALOGSTATICTEXT3, |
|
2466 ##] = [wx.NewId() for _init_ctrls in range(12)] |
|
2467 ## |
|
2468 ##class EditVariableDialog(wx.Dialog): |
|
2469 ## def _init_coll_flexGridSizer1_Items(self, parent): |
|
2470 ## # generated method, don't edit |
|
2471 ## |
|
2472 ## parent.AddWindow(self.MainPanel, 0, border=0, flag=0) |
|
2473 ## |
|
2474 ## def _init_sizers(self): |
|
2475 ## # generated method, don't edit |
|
2476 ## self.flexGridSizer1 = wx.FlexGridSizer(cols=1, hgap=0, rows=2, vgap=0) |
|
2477 ## |
|
2478 ## self._init_coll_flexGridSizer1_Items(self.flexGridSizer1) |
|
2479 ## |
|
2480 ## self.SetSizer(self.flexGridSizer1) |
|
2481 ## |
|
2482 ## def _init_ctrls(self, prnt, name): |
|
2483 ## # generated method, don't edit |
|
2484 ## wx.Dialog.__init__(self, id=wxID_EDITVARIABLEDIALOG, |
|
2485 ## name='EditVariableDialog', parent=prnt, pos=wx.Point(376, 223), |
|
2486 ## size=wx.Size(600, 440), style=wx.DEFAULT_DIALOG_STYLE, |
|
2487 ## title='Edit variables of %s'%name) |
|
2488 ## self.SetClientSize(wx.Size(600, 440)) |
|
2489 ## |
|
2490 ## self.MainPanel = wx.Panel(id=wxID_EDITVARIABLEDIALOGMAINPANEL, |
|
2491 ## name='MainPanel', parent=self, pos=wx.Point(0, 0), |
|
2492 ## size=wx.Size(600, 440), style=wx.TAB_TRAVERSAL) |
|
2493 ## self.MainPanel.SetAutoLayout(True) |
|
2494 ## |
|
2495 ## self.staticText1 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT1, |
|
2496 ## label='Return Type:', name='staticText1', parent=self.MainPanel, |
|
2497 ## pos=wx.Point(24, 29), size=wx.Size(95, 17), style=0) |
|
2498 ## |
|
2499 ## self.ReturnType = wx.Choice(id=wxID_EDITVARIABLEDIALOGRETURNTYPE, |
|
2500 ## name='ReturnType', parent=self.MainPanel, pos=wx.Point(124, 24), |
|
2501 ## size=wx.Size(145, 24), style=0) |
|
2502 ## |
|
2503 ## self.staticText2 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT2, |
|
2504 ## label='Class Filter:', name='staticText2', parent=self.MainPanel, |
|
2505 ## pos=wx.Point(324, 29), size=wx.Size(95, 17), style=0) |
|
2506 ## |
|
2507 ## self.ClassFilter = wx.Choice(id=wxID_EDITVARIABLEDIALOGCLASSFILTER, |
|
2508 ## name='ClassFilter', parent=self.MainPanel, pos=wx.Point(424, 24), |
|
2509 ## size=wx.Size(145, 24), style=0) |
|
2510 ## EVT_CHOICE(self, wxID_EDITVARIABLEDIALOGCLASSFILTER, self.OnClassFilter) |
|
2511 ## |
|
2512 ## self.staticText3 = wx.StaticText(id=wxID_EDITVARIABLEDIALOGSTATICTEXT3, |
|
2513 ## label='Variables:', name='staticText3', parent=self.MainPanel, |
|
2514 ## pos=wx.Point(24, 60), size=wx.Size(95, 17), style=0) |
|
2515 ## |
|
2516 ## self.VariablesGrid = wx.grid.Grid(id=wxID_EDITVARIABLEDIALOGVARIABLESGRID, |
|
2517 ## name='VariablesGrid', parent=self.MainPanel, pos=wx.Point(24, 80), |
|
2518 ## size=wx.Size(550, 250), style=wxVSCROLL) |
|
2519 ## self.VariablesGrid.SetFont(wx.Font(12, 77, wx.NORMAL, wx.NORMAL, False, |
|
2520 ## 'Sans')) |
|
2521 ## self.VariablesGrid.SetLabelFont(wx.Font(10, 77, wx.NORMAL, wx.NORMAL, |
|
2522 ## False, 'Sans')) |
|
2523 ## self.VariablesGrid.DisableDragGridSize() |
|
2524 ## self.VariablesGrid.EnableScrolling(False, True) |
|
2525 ## self.VariablesGrid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnVariablesGridCellChange) |
|
2526 ## self.VariablesGrid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.OnVariablesGridSelectCell) |
|
2527 ## |
|
2528 ## self.AddButton = wx.Button(id=wxID_EDITVARIABLEDIALOGADDBUTTON, label='Add', |
|
2529 ## name='AddButton', parent=self.MainPanel, pos=wx.Point(345, 340), |
|
2530 ## size=wx.Size(72, 32), style=0) |
|
2531 ## EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGADDBUTTON, self.OnAddButton) |
|
2532 ## |
|
2533 ## self.DeleteButton = wx.Button(id=wxID_EDITVARIABLEDIALOGDELETEBUTTON, label='Delete', |
|
2534 ## name='DeleteButton', parent=self.MainPanel, pos=wx.Point(425, 340), |
|
2535 ## size=wx.Size(72, 32), style=0) |
|
2536 ## EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGDELETEBUTTON, self.OnDeleteButton) |
|
2537 ## |
|
2538 ## self.UpButton = wx.Button(id=wxID_EDITVARIABLEDIALOGUPBUTTON, label='^', |
|
2539 ## name='UpButton', parent=self.MainPanel, pos=wx.Point(505, 340), |
|
2540 ## size=wx.Size(32, 32), style=0) |
|
2541 ## EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGUPBUTTON, self.OnUpButton) |
|
2542 ## |
|
2543 ## self.DownButton = wx.Button(id=wxID_EDITVARIABLEDIALOGDOWNBUTTON, label='v', |
|
2544 ## name='DownButton', parent=self.MainPanel, pos=wx.Point(545, 340), |
|
2545 ## size=wx.Size(32, 32), style=0) |
|
2546 ## EVT_BUTTON(self, wxID_EDITVARIABLEDIALOGDOWNBUTTON, self.OnDownButton) |
|
2547 ## |
|
2548 ## self._init_sizers() |
|
2549 ## |
|
2550 ## def __init__(self, parent, name, pou_type, pou_is_used, filter = "All"): |
|
2551 ## self._init_ctrls(parent, name) |
|
2552 ## self.ButtonSizer = self.CreateButtonSizer(wxOK|wxCANCEL|wxCENTRE) |
|
2553 ## self.flexGridSizer1.Add(self.ButtonSizer, 1, wxALIGN_RIGHT) |
|
2554 ## self.Filter = filter |
|
2555 ## self.PouIsUsed = pou_is_used |
|
2556 ## self.FilterChoices = [] |
|
2557 ## self.FilterChoiceTransfer = {"All" : "All", "Interface" : "Interface", |
|
2558 ## " Input" : "Input", " Output" : "Output", " InOut" : "InOut", |
|
2559 ## " External" : "External", "Variables" : "Variables", " Local" : "Local", |
|
2560 ## " Temp" : "Temp", "Global" : "Global", "Access" : "Access"} |
|
2561 ## |
|
2562 ## if pou_type: |
|
2563 ## self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"} |
|
2564 ## self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"} |
|
2565 ## else: |
|
2566 ## self.DefaultTypes = {"All" : "Global"} |
|
2567 ## self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No"} |
|
2568 ## if not pou_type or pou_type == "program": |
|
2569 ## self.Table = VariableTable(self, [], ["Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"]) |
|
2570 ## if pou_type: |
|
2571 ## self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp","Global","Access"] |
|
2572 ## else: |
|
2573 ## self.FilterChoices = ["All","Global","Access"] |
|
2574 ## self.ColSizes = [80, 70, 80, 80, 80, 60, 70] |
|
2575 ## self.ColAlignements = [wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER] |
|
2576 ## else: |
|
2577 ## self.Table = VariableTable(self, [], ["Name", "Class", "Type", "Initial Value", "Retain", "Constant"]) |
|
2578 ## self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp"] |
|
2579 ## self.ColSizes = [120, 70, 80, 120, 60, 70] |
|
2580 ## self.ColAlignements = [wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_LEFT, wxALIGN_CENTER, wxALIGN_CENTER] |
|
2581 ## for choice in self.FilterChoices: |
|
2582 ## self.ClassFilter.Append(choice) |
|
2583 ## reverse_transfer = {} |
|
2584 ## for filter, choice in self.FilterChoiceTransfer.items(): |
|
2585 ## reverse_transfer[choice] = filter |
|
2586 ## self.ClassFilter.SetStringSelection(reverse_transfer[self.Filter]) |
|
2587 ## self.RefreshTypeList() |
|
2588 ## self.RefreshButtons() |
|
2589 ## |
|
2590 ## self.OptionList = "Yes,No" |
|
2591 ## self.TypeList = ",".join([value for value, parent in TypeHierarchy_list if not value.startswith("ANY")]) |
|
2592 ## |
|
2593 ## if pou_type == "function": |
|
2594 ## for value, parent in TypeHierarchy_list: |
|
2595 ## if not value.startswith("ANY"): |
|
2596 ## self.ReturnType.Append(value) |
|
2597 ## self.ReturnType.Enable(True) |
|
2598 ## else: |
|
2599 ## self.ReturnType.Enable(False) |
|
2600 ## self.staticText2.Hide() |
|
2601 ## self.ReturnType.Hide() |
|
2602 ## |
|
2603 ## self.VariablesGrid.SetTable(self.Table) |
|
2604 ## self.VariablesGrid.SetRowLabelSize(0) |
|
2605 ## |
|
2606 ## self.Table.ResetView(self.VariablesGrid) |
|
2607 ## |
|
2608 ## self.PouNames = [] |
|
2609 ## |
|
2610 ## if self.PouIsUsed: |
|
2611 ## wxCallAfter(self.WarningMessage, name) |
|
2612 ## |
|
2613 ## EVT_BUTTON(self, self.ButtonSizer.GetAffirmativeButton().GetId(), self.OnOK) |
|
2614 ## |
|
2615 ## def WarningMessage(self, name): |
|
2616 ## message = wxMessageDialog(self, "\"%s\" is used by one or more POUs. Its interface can't be changed!"%name, "WARNING", wxOK|wxICON_EXCLAMATION) |
|
2617 ## message.ShowModal() |
|
2618 ## message.Destroy() |
|
2619 ## |
|
2620 ## def OnOK(self, event): |
|
2621 ## self.VariablesGrid.SetGridCursor(0, 0) |
|
2622 ## error = [] |
|
2623 ## if self.ReturnType.IsEnabled() and self.ReturnType.GetStringSelection() == "": |
|
2624 ## error.append("Return Type") |
|
2625 ## if len(error) > 0: |
|
2626 ## text = "" |
|
2627 ## for i, item in enumerate(error): |
|
2628 ## if i == 0: |
|
2629 ## text += item |
|
2630 ## elif i == len(error) - 1: |
|
2631 ## text += " and %s"%item |
|
2632 ## else: |
|
2633 ## text += ", %s"%item |
|
2634 ## message = wxMessageDialog(self, "Form isn't complete. %s must be filled!"%text, "Error", wxOK|wxICON_ERROR) |
|
2635 ## message.ShowModal() |
|
2636 ## message.Destroy() |
|
2637 ## else: |
|
2638 ## self.EndModal(wxID_OK) |
|
2639 ## |
|
2640 ## def OnClassFilter(self, event): |
|
2641 ## self.Filter = self.FilterChoiceTransfer[self.ClassFilter.GetStringSelection()] |
|
2642 ## self.RefreshTypeList() |
|
2643 ## self.RefreshValues() |
|
2644 ## self.RefreshButtons() |
|
2645 ## event.Skip() |
|
2646 ## |
|
2647 ## def RefreshTypeList(self): |
|
2648 ## if self.Filter == "All": |
|
2649 ## self.ClassList = [self.FilterChoiceTransfer[choice] for choice in self.FilterChoices if self.FilterChoiceTransfer[choice] not in ["All","Interface","Variables"]] |
|
2650 ## elif self.Filter == "Interface": |
|
2651 ## self.ClassList = ["Input","Output","InOut","External"] |
|
2652 ## elif self.Filter == "Variables": |
|
2653 ## self.ClassList = ["Local","Temp"] |
|
2654 ## else: |
|
2655 ## self.ClassList = [self.Filter] |
|
2656 ## |
|
2657 ## def RefreshButtons(self): |
|
2658 ## table_length = len(self.Table.data) |
|
2659 ## row_class = None |
|
2660 ## if table_length and self.PouIsUsed: |
|
2661 ## row = self.VariablesGrid.GetGridCursorRow() |
|
2662 ## row_class = self.Table.GetValueByName(row, "Class") |
|
2663 ## self.AddButton.Enable(not self.PouIsUsed or self.Filter not in ["Interface", "Input", "Output", "InOut"]) |
|
2664 ## self.DeleteButton.Enable(table_length > 0 and row_class not in ["Input", "Output", "InOut"]) |
|
2665 ## self.UpButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"]) |
|
2666 ## self.DownButton.Enable(table_length > 0 and self.Filter == "All" and row_class not in ["Input", "Output", "InOut"]) |
|
2667 ## |
|
2668 ## def OnAddButton(self, event): |
|
2669 ## new_row = self.DefaultValue.copy() |
|
2670 ## if self.Filter in self.DefaultTypes: |
|
2671 ## new_row["Class"] = self.DefaultTypes[self.Filter] |
|
2672 ## else: |
|
2673 ## new_row["Class"] = self.Filter |
|
2674 ## self.Values.append(new_row) |
|
2675 ## self.RefreshValues() |
|
2676 ## self.RefreshButtons() |
|
2677 ## event.Skip() |
|
2678 ## |
|
2679 ## def OnDeleteButton(self, event): |
|
2680 ## row = self.Table.GetRow(self.VariablesGrid.GetGridCursorRow()) |
|
2681 ## self.Values.remove(row) |
|
2682 ## self.RefreshValues() |
|
2683 ## self.RefreshButtons() |
|
2684 ## event.Skip() |
|
2685 ## |
|
2686 ## def OnUpButton(self, event): |
|
2687 ## self.MoveValue(self.VariablesGrid.GetGridCursorRow(), -1) |
|
2688 ## self.RefreshButtons() |
|
2689 ## event.Skip() |
|
2690 ## |
|
2691 ## def OnDownButton(self, event): |
|
2692 ## self.MoveValue(self.VariablesGrid.GetGridCursorRow(), 1) |
|
2693 ## self.RefreshButtons() |
|
2694 ## event.Skip() |
|
2695 ## |
|
2696 ## def OnVariablesGridCellChange(self, event): |
|
2697 ## row, col = event.GetRow(), event.GetCol() |
|
2698 ## colname = self.Table.GetColLabelValue(col) |
|
2699 ## value = self.Table.GetValue(row, col) |
|
2700 ## if colname == "Name": |
|
2701 ## if not TestIdentifier(value): |
|
2702 ## message = wxMessageDialog(self, "\"%s\" is not a valid identifier!"%value, "Error", wxOK|wxICON_ERROR) |
|
2703 ## message.ShowModal() |
|
2704 ## message.Destroy() |
|
2705 ## event.Veto() |
|
2706 ## elif value.upper() in IEC_KEYWORDS: |
|
2707 ## message = wxMessageDialog(self, "\"%s\" is a keyword. It can't be used!"%value, "Error", wxOK|wxICON_ERROR) |
|
2708 ## message.ShowModal() |
|
2709 ## message.Destroy() |
|
2710 ## event.Veto() |
|
2711 ## elif value.upper() in self.PouNames: |
|
2712 ## message = wxMessageDialog(self, "A pou with \"%s\" as name exists!"%value, "Error", wxOK|wxICON_ERROR) |
|
2713 ## message.ShowModal() |
|
2714 ## message.Destroy() |
|
2715 ## event.Veto() |
|
2716 ## elif value.upper() in [var["Name"].upper() for var in self.Values if var != self.Table.data[row]]: |
|
2717 ## message = wxMessageDialog(self, "A variable with \"%s\" as name exists in this pou!"%value, "Error", wxOK|wxICON_ERROR) |
|
2718 ## message.ShowModal() |
|
2719 ## message.Destroy() |
|
2720 ## event.Veto() |
|
2721 ## else: |
|
2722 ## event.Skip() |
|
2723 ## else: |
|
2724 ## event.Skip() |
|
2725 ## |
|
2726 ## def OnVariablesGridSelectCell(self, event): |
|
2727 ## wxCallAfter(self.RefreshButtons) |
|
2728 ## event.Skip() |
|
2729 ## |
|
2730 ## def SetPouNames(self, pou_names): |
|
2731 ## self.PouNames = [pou_name.upper() for pou_name in pou_names] |
|
2732 ## |
|
2733 ## def SetValues(self, values): |
|
2734 ## for item, value in values.items(): |
|
2735 ## if item == "returnType" and value and self.ReturnType.IsEnabled(): |
|
2736 ## self.ReturnType.SetStringSelection(value) |
|
2737 ## if item == "data": |
|
2738 ## self.Values = value |
|
2739 ## self.RefreshValues() |
|
2740 ## |
|
2741 ## def MoveValue(self, value_index, move): |
|
2742 ## new_index = max(0, min(value_index + move, len(self.Values) - 1)) |
|
2743 ## if new_index != value_index: |
|
2744 ## self.Values.insert(new_index, self.Values.pop(value_index)) |
|
2745 ## self.RefreshValues() |
|
2746 ## self.VariablesGrid.SetGridCursor(new_index, self.VariablesGrid.GetGridCursorCol()) |
|
2747 ## else: |
|
2748 ## self.RefreshValues() |
|
2749 ## |
|
2750 ## def RefreshValues(self): |
|
2751 ## if len(self.Table.data) > 0: |
|
2752 ## self.VariablesGrid.SetGridCursor(0, 0) |
|
2753 ## data = [] |
|
2754 ## for variable in self.Values: |
|
2755 ## if variable["Class"] in self.ClassList: |
|
2756 ## data.append(variable) |
|
2757 ## self.Table.SetData(data) |
|
2758 ## self.Table.ResetView(self.VariablesGrid) |
|
2759 ## |
|
2760 ## def GetValues(self): |
|
2761 ## values = {} |
|
2762 ## if self.ReturnType.IsEnabled(): |
|
2763 ## values["returnType"] = self.ReturnType.GetStringSelection() |
|
2764 ## values["data"] = self.Values |
|
2765 ## return values |
2259 |
2766 |
2260 #------------------------------------------------------------------------------- |
2767 #------------------------------------------------------------------------------- |
2261 # Exception Handler |
2768 # Exception Handler |
2262 #------------------------------------------------------------------------------- |
2769 #------------------------------------------------------------------------------- |
2263 |
2770 |