350 self.SetMenuBar(self.menuBar1) |
347 self.SetMenuBar(self.menuBar1) |
351 self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=ID_PLCOPENEDITOR) |
348 self.Bind(wx.EVT_CLOSE, self.OnCloseFrame, id=ID_PLCOPENEDITOR) |
352 |
349 |
353 self.splitterWindow1 = wx.SplitterWindow(id=ID_PLCOPENEDITORSPLITTERWINDOW1, |
350 self.splitterWindow1 = wx.SplitterWindow(id=ID_PLCOPENEDITORSPLITTERWINDOW1, |
354 name='splitterWindow1', parent=self, point=wx.Point(0, 0), |
351 name='splitterWindow1', parent=self, point=wx.Point(0, 0), |
355 size=wx.Size(-1, -1), style=wx.SP_3D) |
352 size=wx.Size(0, 0), style=wx.SP_3D) |
356 self.splitterWindow1.SetNeedUpdating(True) |
353 self.splitterWindow1.SetNeedUpdating(True) |
357 self.splitterWindow1.SetMinimumPaneSize(1) |
354 self.splitterWindow1.SetMinimumPaneSize(1) |
358 |
355 |
359 self.EditorPanel = wx.Panel(id=ID_PLCOPENEDITOREDITORPANEL, |
356 self.EditorPanel = wx.Panel(id=ID_PLCOPENEDITOREDITORPANEL, |
360 name='TabPanel', parent=self.splitterWindow1, pos=wx.Point(0, 0), |
357 name='TabPanel', parent=self.splitterWindow1, pos=wx.Point(0, 0), |
361 size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL) |
358 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
362 |
359 |
363 self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED, |
360 self.TabsOpened = wx.Notebook(id=ID_PLCOPENEDITORTABSOPENED, |
364 name='TabsOpened', parent=self.EditorPanel, pos=wx.Point(0, |
361 name='TabsOpened', parent=self.EditorPanel, pos=wx.Point(0, |
365 0), size=wx.Size(-1, -1), style=0) |
362 0), size=wx.Size(0, 0), style=0) |
366 self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, |
363 self.TabsOpened.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, |
367 self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED) |
364 self.OnPouSelectedChanged, id=ID_PLCOPENEDITORTABSOPENED) |
368 |
365 |
369 self.ToolBar = wx.ToolBar(id=ID_PLCOPENEDITORTOOLBAR, name='ToolBar', |
366 self.ToolBar = wx.ToolBar(id=ID_PLCOPENEDITORTOOLBAR, name='ToolBar', |
370 parent=self.EditorPanel, pos=wx.Point(0, 0), size=wx.Size(0, 40), |
367 parent=self.EditorPanel, pos=wx.Point(0, 0), size=wx.Size(0, 40), |
498 self.RefreshProjectTree() |
495 self.RefreshProjectTree() |
499 dialog.Destroy() |
496 dialog.Destroy() |
500 |
497 |
501 def OnCloseFrame(self, event): |
498 def OnCloseFrame(self, event): |
502 if not self.Controler.ProjectIsSaved(): |
499 if not self.Controler.ProjectIsSaved(): |
503 dialog = wx.MessageDialog(self, "There are changes, do you want to save?", "Close Application", wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION) |
500 dialog = wx.MessageDialog(self, "There are changes, do you want to save?", "Close Application", wx.YES_NO|wx.CANCEL|wx.ICON_QUESTION) |
504 answer = dialog.ShowModal() |
501 answer = dialog.ShowModal() |
505 dialog.Destroy() |
502 dialog.Destroy() |
506 if answer == wx.ID_YES: |
503 if answer == wx.ID_YES: |
507 self.SaveProject() |
504 self.SaveProject() |
508 event.Skip() |
505 event.Skip() |
509 elif answer == wx.ID_NO: |
506 elif answer == wx.ID_NO: |
|
507 self.Controler.Reset() |
|
508 wx.CallAfter(self.Close) |
510 event.Skip() |
509 event.Skip() |
|
510 else: |
|
511 event.Veto() |
511 else: |
512 else: |
512 event.Skip() |
513 event.Skip() |
513 |
514 |
514 def OnNewProjectMenu(self, event): |
515 def OnNewProjectMenu(self, event): |
515 dialog = ProjectDialog(self) |
516 dialog = ProjectDialog(self) |
893 name = self.ProjectTree.GetItemText(selected) |
892 name = self.ProjectTree.GetItemText(selected) |
894 data = self.ProjectTree.GetPyData(selected) |
893 data = self.ProjectTree.GetPyData(selected) |
895 if name == "Properties": |
894 if name == "Properties": |
896 self.ShowProperties() |
895 self.ShowProperties() |
897 elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE, ITEM_CONFIGURATION]: |
896 elif data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE, ITEM_CONFIGURATION]: |
|
897 idx = None |
898 if data == ITEM_CONFIGURATION: |
898 if data == ITEM_CONFIGURATION: |
899 idx = self.Controler.OpenConfigurationEditing(name) |
899 idx = self.Controler.OpenConfigurationEditing(name) |
900 if idx != None: |
900 if idx != None: |
901 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "config", config_name = name) |
901 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "config", config_name = name) |
902 self.TabsOpened.AddPage(new_window, "") |
902 self.TabsOpened.AddPage(new_window, "") |
914 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "resource", config_name = config_name, resource_name = name) |
914 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "resource", config_name = config_name, resource_name = name) |
915 self.TabsOpened.AddPage(new_window, "") |
915 self.TabsOpened.AddPage(new_window, "") |
916 else: |
916 else: |
917 idx = self.Controler.ChangeConfigurationResourceEditing(config_name, name) |
917 idx = self.Controler.ChangeConfigurationResourceEditing(config_name, name) |
918 elif data == ITEM_POU: |
918 elif data == ITEM_POU: |
919 idx = self.Controler.OpenElementEditing(name) |
919 idx = self.Controler.OpenPouEditing(name) |
920 if idx != None: |
920 if idx != None: |
921 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, self.Controler.GetPouType(name), pou_name = name) |
921 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, self.Controler.GetPouType(name), pou_name = name) |
922 self.TabsOpened.AddPage(new_window, "") |
922 self.TabsOpened.AddPage(new_window, "") |
923 else: |
923 else: |
924 idx = self.Controler.ChangeElementEditing(name) |
924 idx = self.Controler.ChangePouEditing(name) |
925 else: |
925 else: |
926 parent = self.ProjectTree.GetItemParent(selected) |
926 item = self.ProjectTree.GetItemParent(selected) |
927 parent_name = self.ProjectTree.GetItemText(parent) |
927 item_type = self.ProjectTree.GetPyData(item) |
928 grandparent = self.ProjectTree.GetItemParent(parent) |
928 while item_type != ITEM_POU: |
929 grandparent_name = self.ProjectTree.GetItemText(grandparent) |
929 item = self.ProjectTree.GetItemParent(item) |
|
930 item_type = self.ProjectTree.GetPyData(item) |
|
931 pou_name = self.ProjectTree.GetItemText(item) |
930 if data == ITEM_TRANSITION: |
932 if data == ITEM_TRANSITION: |
931 idx = self.Controler.OpenPouTransitionEditing(grandparent_name, name) |
933 idx = self.Controler.OpenPouTransitionEditing(pou_name, name) |
932 if idx != None: |
934 if idx != None: |
933 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "transition", pou_name = grandparent_name, transition_name = name) |
935 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "transition", pou_name = pou_name, transition_name = name) |
934 self.TabsOpened.AddPage(new_window, "") |
936 self.TabsOpened.AddPage(new_window, "") |
935 else: |
937 else: |
936 idx = self.Controler.ChangePouTransitionEditing(grandparent_name, name) |
938 idx = self.Controler.ChangePouTransitionEditing(pou_name, name) |
937 elif data == ITEM_ACTION: |
939 elif data == ITEM_ACTION: |
938 idx = self.Controler.OpenPouActionEditing(grandparent_name, name) |
940 idx = self.Controler.OpenPouActionEditing(pou_name, name) |
939 if idx != None: |
941 if idx != None: |
940 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "action", pou_name = grandparent_name, action_name = name) |
942 new_window = PouEditorPanel(self.TabsOpened, self, self.Controler, "action", pou_name = pou_name, action_name = name) |
941 self.TabsOpened.AddPage(new_window, "") |
943 self.TabsOpened.AddPage(new_window, "") |
942 else: |
944 else: |
943 idx = self.Controler.ChangePouActionEditing(grandparent_name, name) |
945 idx = self.Controler.ChangePouActionEditing(pou_name, name) |
944 if idx != None: |
946 if idx != None: |
945 old_selected = self.TabsOpened.GetSelection() |
947 old_selected = self.TabsOpened.GetSelection() |
946 if old_selected >= 0: |
948 if old_selected >= 0: |
947 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
949 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
948 self.TabsOpened.SetSelection(idx) |
950 self.TabsOpened.SetSelection(idx) |
964 event.Skip() |
966 event.Skip() |
965 |
967 |
966 def OnProjectTreeItemSelected(self, event): |
968 def OnProjectTreeItemSelected(self, event): |
967 selected = event.GetItem() |
969 selected = event.GetItem() |
968 name = self.ProjectTree.GetItemText(selected) |
970 name = self.ProjectTree.GetItemText(selected) |
969 if self.ProjectTree.GetItemParent(selected) == self.ProjectTree.GetRootItem() and name != "Properties": |
971 data = self.ProjectTree.GetPyData(selected) |
970 if self.Controler.IsElementEditing(name): |
972 if data in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION, ITEM_RESOURCE, ITEM_CONFIGURATION]: |
971 idx = self.Controler.ChangeElementEditing(name) |
973 idx = None |
972 if idx != None: |
974 if data == ITEM_CONFIGURATION: |
973 self.TabsOpened.SetSelection(idx) |
975 if self.Controler.IsConfigurationEditing(name): |
974 self.RefreshFileMenu() |
976 idx = self.Controler.ChangeConfigurationEditing(name) |
975 self.RefreshEditMenu() |
977 elif data == ITEM_RESOURCE: |
976 self.RefreshToolBar() |
978 item = self.ProjectTree.GetItemParent(selected) |
977 else: |
979 item_type = self.ProjectTree.GetPyData(item) |
978 name = self.ProjectTree.GetItemText(selected) |
980 while item_type != ITEM_CONFIGURATION: |
979 parent = self.ProjectTree.GetItemParent(selected) |
981 item = self.ProjectTree.GetItemParent(item) |
980 parent_name = self.ProjectTree.GetItemText(parent) |
982 item_type = self.ProjectTree.GetPyData(item) |
981 grandparent = self.ProjectTree.GetItemParent(parent) |
983 config_name = self.ProjectTree.GetItemText(item) |
982 grandparent_name = self.ProjectTree.GetItemText(grandparent) |
984 if self.Controler.IsConfigurationResourceEditing(config_name, name): |
983 if parent_name == "Transitions": |
985 idx = self.Controler.ChangeConfigurationResourceEditing(config_name, name) |
984 idx = self.Controler.ChangePouTransitionEditing(grandparent_name, name) |
986 elif data == ITEM_POU: |
985 if idx != None: |
987 if self.Controler.IsPouEditing(name): |
986 self.TabsOpened.SetSelection(idx) |
988 idx = self.Controler.ChangePouEditing(name) |
987 self.RefreshFileMenu() |
989 else: |
988 self.RefreshEditMenu() |
990 item = self.ProjectTree.GetItemParent(selected) |
989 self.RefreshToolBar() |
991 item_type = self.ProjectTree.GetPyData(item) |
990 elif parent_name == "Action": |
992 while item_type != ITEM_POU: |
991 idx = self.Controler.ChangePouActionEditing(grandparent_name, name) |
993 item = self.ProjectTree.GetItemParent(item) |
992 if idx != None: |
994 item_type = self.ProjectTree.GetPyData(item) |
993 self.TabsOpened.SetSelection(idx) |
995 pou_name = self.ProjectTree.GetItemText(item) |
994 self.RefreshFileMenu() |
996 if data == ITEM_TRANSITION: |
995 self.RefreshEditMenu() |
997 if self.Controler.IsPouTransitionEditing(pou_name, name): |
996 self.RefreshToolBar() |
998 idx = self.Controler.ChangePouTransitionEditing(pou_name, name) |
|
999 elif data == ITEM_ACTION: |
|
1000 if self.Controler.IsPouActionEditing(pou_name, name): |
|
1001 idx = self.Controler.ChangePouActionEditing(pou_name, name) |
|
1002 if idx != None: |
|
1003 old_selected = self.TabsOpened.GetSelection() |
|
1004 if old_selected >= 0: |
|
1005 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
|
1006 self.TabsOpened.SetSelection(idx) |
|
1007 window = self.TabsOpened.GetPage(idx) |
|
1008 window.RefreshView() |
|
1009 self.RefreshTabsOpenedTitles() |
|
1010 self.RefreshFileMenu() |
|
1011 self.RefreshEditMenu() |
|
1012 self.RefreshToolBar() |
997 event.Skip() |
1013 event.Skip() |
998 |
1014 |
999 def RefreshProjectTree(self): |
1015 def RefreshProjectTree(self): |
1000 infos = self.Controler.GetProjectInfos() |
1016 infos = self.Controler.GetProjectInfos() |
1001 root = self.ProjectTree.GetRootItem() |
1017 root = self.ProjectTree.GetRootItem() |
1064 if selected != -1: |
1080 if selected != -1: |
1065 self.TabsOpened.GetPage(selected).RefreshView() |
1081 self.TabsOpened.GetPage(selected).RefreshView() |
1066 self.TabsOpened.GetPage(selected).Refresh() |
1082 self.TabsOpened.GetPage(selected).Refresh() |
1067 self.RefreshTitle() |
1083 self.RefreshTitle() |
1068 self.RefreshEditMenu() |
1084 self.RefreshEditMenu() |
|
1085 self.RefreshProjectTree() |
1069 event.Skip() |
1086 event.Skip() |
1070 |
1087 |
1071 def OnRedoMenu(self, event): |
1088 def OnRedoMenu(self, event): |
1072 self.Controler.LoadNext() |
1089 self.Controler.LoadNext() |
1073 selected = self.TabsOpened.GetSelection() |
1090 selected = self.TabsOpened.GetSelection() |
1074 if selected != -1: |
1091 if selected != -1: |
1075 self.TabsOpened.GetPage(selected).RefreshView() |
1092 self.TabsOpened.GetPage(selected).RefreshView() |
1076 self.TabsOpened.GetPage(selected).Refresh() |
1093 self.TabsOpened.GetPage(selected).Refresh() |
1077 self.RefreshTitle() |
1094 self.RefreshTitle() |
1078 self.RefreshEditMenu() |
1095 self.RefreshEditMenu() |
|
1096 self.RefreshProjectTree() |
1079 event.Skip() |
1097 event.Skip() |
1080 |
1098 |
1081 def OnCutMenu(self, event): |
1099 def OnCutMenu(self, event): |
1082 selected = self.TabsOpened.GetSelection() |
1100 selected = self.TabsOpened.GetSelection() |
1083 if selected != -1: |
1101 if selected != -1: |
1127 for i in xrange(self.TabsOpened.GetPageCount()): |
1147 for i in xrange(self.TabsOpened.GetPageCount()): |
1128 if self.TabsOpened.GetPageText(i) == selected: |
1148 if self.TabsOpened.GetPageText(i) == selected: |
1129 deleted = i |
1149 deleted = i |
1130 if deleted != None: |
1150 if deleted != None: |
1131 self.TabsOpened.DeletePage(i) |
1151 self.TabsOpened.DeletePage(i) |
|
1152 self.RefreshTitle() |
|
1153 self.RefreshEditMenu() |
1132 self.RefreshProjectTree() |
1154 self.RefreshProjectTree() |
1133 self.RefreshToolBar() |
1155 self.RefreshToolBar() |
1134 else: |
1156 else: |
1135 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
1157 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
1136 message.ShowModal() |
1158 message.ShowModal() |
1137 message.Destroy() |
1159 message.Destroy() |
1138 event.Skip() |
1160 event.Skip() |
1139 |
1161 |
1140 def OnAddConfigurationMenu(self, event): |
1162 def OnAddConfigurationMenu(self, event): |
1141 dialog = wx.TextEntryDialog(self, "Enter configuration name:", "Create new configuration", "", wx.OK|wx.CANCEL) |
1163 dialog = ConfigurationNameDialog(self, "Please enter configuration name", "Add new configuration") |
|
1164 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
|
1165 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables()) |
1142 if dialog.ShowModal() == wx.ID_OK: |
1166 if dialog.ShowModal() == wx.ID_OK: |
1143 value = dialog.GetValue() |
1167 value = dialog.GetValue() |
1144 self.Controler.ProjectAddConfiguration(value) |
1168 self.Controler.ProjectAddConfiguration(value) |
|
1169 self.RefreshTitle() |
|
1170 self.RefreshEditMenu() |
1145 self.RefreshProjectTree() |
1171 self.RefreshProjectTree() |
1146 dialog.Destroy() |
1172 dialog.Destroy() |
1147 event.Skip() |
1173 event.Skip() |
1148 |
1174 |
1149 def OnRemoveConfigurationMenu(self, event): |
1175 def OnRemoveConfigurationMenu(self, event): |
1150 configs = self.Controler.GetProjectConfigNames() |
1176 configs = self.Controler.GetProjectConfigNames() |
1151 dialog = wx.SingleChoiceDialog(self, "Select Configuration to remove:", "Remove configuration", configs, wx.OK|wx.CANCEL) |
1177 dialog = wx.SingleChoiceDialog(self, "Please select a configuration", "Remove configuration", configs, wx.OK|wx.CANCEL) |
1152 if dialog.ShowModal() == wx.ID_OK: |
1178 if dialog.ShowModal() == wx.ID_OK: |
1153 selected = dialog.GetStringSelection() |
1179 selected = dialog.GetStringSelection() |
1154 self.Controler.ProjectRemoveConfiguration(selected) |
1180 self.Controler.ProjectRemoveConfiguration(selected) |
|
1181 self.RefreshTitle() |
|
1182 self.RefreshEditMenu() |
1155 self.RefreshProjectTree() |
1183 self.RefreshProjectTree() |
1156 event.Skip() |
1184 event.Skip() |
1157 |
1185 |
1158 def OnAddPouTransitionMenu(self, event): |
1186 def OnAddPouTransitionMenu(self, event): |
1159 selected = self.ProjectTree.GetSelection() |
1187 selected = self.ProjectTree.GetSelection() |
1207 actions = self.Controler.GetPouActions(pouname) |
1241 actions = self.Controler.GetPouActions(pouname) |
1208 dialog = wx.SingleChoiceDialog(self, "Select Action to remove:", "Remove action", actions, wx.OK|wx.CANCEL) |
1242 dialog = wx.SingleChoiceDialog(self, "Select Action to remove:", "Remove action", actions, wx.OK|wx.CANCEL) |
1209 if dialog.ShowModal() == wx.ID_OK: |
1243 if dialog.ShowModal() == wx.ID_OK: |
1210 selected = dialog.GetStringSelection() |
1244 selected = dialog.GetStringSelection() |
1211 self.Controler.ProjectRemovePouAction(pouname, selected) |
1245 self.Controler.ProjectRemovePouAction(pouname, selected) |
|
1246 self.RefreshTitle() |
|
1247 self.RefreshEditMenu() |
1212 self.RefreshProjectTree() |
1248 self.RefreshProjectTree() |
1213 dialog.Destroy() |
1249 dialog.Destroy() |
1214 event.Skip() |
1250 event.Skip() |
1215 |
1251 |
1216 def OnAddResourceMenu(self, event): |
1252 def OnAddResourceMenu(self, event): |
1217 selected = self.ProjectTree.GetSelection() |
1253 selected = self.ProjectTree.GetSelection() |
1218 if self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION: |
1254 if self.ProjectTree.GetPyData(selected) == ITEM_CONFIGURATION: |
1219 config_name = self.ProjectTree.GetItemText(selected) |
1255 config_name = self.ProjectTree.GetItemText(selected) |
1220 dialog = wx.TextEntryDialog(self, "Enter Resource name:", "Create new Resource", "", wx.OK|wx.CANCEL) |
1256 dialog = ResourceNameDialog(self, "Please enter resource name", "Add new resource") |
|
1257 dialog.SetPouNames(self.Controler.GetProjectPouNames()) |
|
1258 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables()) |
1221 if dialog.ShowModal() == wx.ID_OK: |
1259 if dialog.ShowModal() == wx.ID_OK: |
1222 value = dialog.GetValue() |
1260 value = dialog.GetValue() |
1223 self.Controler.ProjectAddConfigurationResource(config_name, value) |
1261 self.Controler.ProjectAddConfigurationResource(config_name, value) |
|
1262 self.RefreshTitle() |
|
1263 self.RefreshEditMenu() |
1224 self.RefreshProjectTree() |
1264 self.RefreshProjectTree() |
1225 dialog.Destroy() |
1265 dialog.Destroy() |
1226 event.Skip() |
1266 event.Skip() |
1227 |
1267 |
1228 def OnRemoveResourceMenu(self, event): |
1268 def OnRemoveResourceMenu(self, event): |
1865 values["actionName"] = self.ActionName.GetValue() |
1907 values["actionName"] = self.ActionName.GetValue() |
1866 values["language"] = self.Language.GetStringSelection() |
1908 values["language"] = self.Language.GetStringSelection() |
1867 return values |
1909 return values |
1868 |
1910 |
1869 #------------------------------------------------------------------------------- |
1911 #------------------------------------------------------------------------------- |
|
1912 # Configuration Name Dialog |
|
1913 #------------------------------------------------------------------------------- |
|
1914 |
|
1915 class ConfigurationNameDialog(wx.TextEntryDialog): |
|
1916 |
|
1917 def __init__(self, parent, message, caption = "Please enter configuration name", defaultValue = "", |
|
1918 style = wx.OK|wx.CANCEL|wx.CENTRE, pos = wx.DefaultPosition): |
|
1919 wx.TextEntryDialog.__init__(self, parent, message, caption, defaultValue, style, pos) |
|
1920 |
|
1921 self.PouNames = [] |
|
1922 self.PouElementNames = [] |
|
1923 |
|
1924 self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetSizer().GetItem(3).GetSizer().GetAffirmativeButton().GetId()) |
|
1925 |
|
1926 def OnOK(self, event): |
|
1927 config_name = self.GetSizer().GetItem(1).GetWindow().GetValue() |
|
1928 if config_name == "": |
|
1929 message = wx.MessageDialog(self, "You must type a name!", "Error", wx.OK|wx.ICON_ERROR) |
|
1930 message.ShowModal() |
|
1931 message.Destroy() |
|
1932 elif not TestIdentifier(config_name): |
|
1933 message = wx.MessageDialog(self, "\"%s\" is not a valid identifier!"%config_name, "Error", wx.OK|wx.ICON_ERROR) |
|
1934 message.ShowModal() |
|
1935 message.Destroy() |
|
1936 elif config_name.upper() in IEC_KEYWORDS: |
|
1937 message = wx.MessageDialog(self, "\"%s\" is a keyword. It can't be used!"%config_name, "Error", wx.OK|wx.ICON_ERROR) |
|
1938 message.ShowModal() |
|
1939 message.Destroy() |
|
1940 elif config_name.upper() in self.PouNames: |
|
1941 message = wx.MessageDialog(self, "A pou with \"%s\" as name exists!"%config_name, "Error", wx.OK|wx.ICON_ERROR) |
|
1942 message.ShowModal() |
|
1943 message.Destroy() |
|
1944 elif config_name.upper() in self.PouElementNames: |
|
1945 message = wx.MessageDialog(self, "A pou has an element with \"%s\" for name. It can generate a conflict. Do you wish to continue?"%config_name, "Warning", wx.YES_NO|wx.ICON_EXCLAMATION) |
|
1946 result = message.ShowModal() |
|
1947 message.Destroy() |
|
1948 if result == wx.ID_YES: |
|
1949 self.EndModal(wx.ID_OK) |
|
1950 else: |
|
1951 self.EndModal(wx.ID_OK) |
|
1952 |
|
1953 def SetPouNames(self, pou_names): |
|
1954 self.PouNames = [pou_name.upper() for pou_name in pou_names] |
|
1955 |
|
1956 def SetPouElementNames(self, pou_names): |
|
1957 self.PouElementNames = [pou_name.upper() for pou_name in pou_names] |
|
1958 |
|
1959 def GetValue(self): |
|
1960 return self.GetSizer().GetItem(1).GetWindow().GetValue() |
|
1961 |
|
1962 #------------------------------------------------------------------------------- |
|
1963 # Resource Name Dialog |
|
1964 #------------------------------------------------------------------------------- |
|
1965 |
|
1966 class ResourceNameDialog(wx.TextEntryDialog): |
|
1967 |
|
1968 def __init__(self, parent, message, caption = "Please enter resource name", defaultValue = "", |
|
1969 style = wx.OK|wx.CANCEL|wx.CENTRE, pos = wx.DefaultPosition): |
|
1970 wx.TextEntryDialog.__init__(self, parent, message, caption, defaultValue, style, pos) |
|
1971 |
|
1972 self.PouNames = [] |
|
1973 self.PouElementNames = [] |
|
1974 |
|
1975 self.Bind(wx.EVT_BUTTON, self.OnOK, id=self.GetSizer().GetItem(3).GetSizer().GetAffirmativeButton().GetId()) |
|
1976 |
|
1977 def OnOK(self, event): |
|
1978 resource_name = self.GetSizer().GetItem(1).GetWindow().GetValue() |
|
1979 if resource_name == "": |
|
1980 message = wx.MessageDialog(self, "You must type a name!", "Error", wx.OK|wx.ICON_ERROR) |
|
1981 message.ShowModal() |
|
1982 message.Destroy() |
|
1983 elif not TestIdentifier(resource_name): |
|
1984 message = wx.MessageDialog(self, "\"%s\" is not a valid identifier!"%resource_name, "Error", wx.OK|wx.ICON_ERROR) |
|
1985 message.ShowModal() |
|
1986 message.Destroy() |
|
1987 elif resource_name.upper() in IEC_KEYWORDS: |
|
1988 message = wx.MessageDialog(self, "\"%s\" is a keyword. It can't be used!"%resource_name, "Error", wx.OK|wx.ICON_ERROR) |
|
1989 message.ShowModal() |
|
1990 message.Destroy() |
|
1991 elif resource_name.upper() in self.PouNames: |
|
1992 message = wx.MessageDialog(self, "A pou with \"%s\" as name exists!"%resource_name, "Error", wx.OK|wx.ICON_ERROR) |
|
1993 message.ShowModal() |
|
1994 message.Destroy() |
|
1995 elif resource_name.upper() in self.PouElementNames: |
|
1996 message = wx.MessageDialog(self, "A pou has an element with \"%s\" for name. It can generate a conflict. Do you wish to continue?"%resource_name, "Warning", wx.YES_NO|wx.ICON_EXCLAMATION) |
|
1997 result = message.ShowModal() |
|
1998 message.Destroy() |
|
1999 if result == wx.ID_YES: |
|
2000 self.EndModal(wx.ID_OK) |
|
2001 else: |
|
2002 self.EndModal(wx.ID_OK) |
|
2003 |
|
2004 def SetPouNames(self, pou_names): |
|
2005 self.PouNames = [pou_name.upper() for pou_name in pou_names] |
|
2006 |
|
2007 def SetPouElementNames(self, pou_names): |
|
2008 self.PouElementNames = [pou_name.upper() for pou_name in pou_names] |
|
2009 |
|
2010 def GetValue(self): |
|
2011 return self.GetSizer().GetItem(1).GetWindow().GetValue() |
|
2012 |
|
2013 #------------------------------------------------------------------------------- |
1870 # Pou Editor Panel |
2014 # Pou Editor Panel |
1871 #------------------------------------------------------------------------------- |
2015 #------------------------------------------------------------------------------- |
1872 |
2016 |
1873 class VariableTable(wx.grid.PyGridTableBase): |
2017 class VariableTable(wx.grid.PyGridTableBase): |
1874 |
2018 |
2132 self.VariablePanel.SetSizer(self.VariablePanelSizer) |
2276 self.VariablePanel.SetSizer(self.VariablePanelSizer) |
2133 |
2277 |
2134 def _init_ctrls(self, prnt, element_type): |
2278 def _init_ctrls(self, prnt, element_type): |
2135 wx.SplitterWindow.__init__(self, id=ID_POUEDITORPANEL, |
2279 wx.SplitterWindow.__init__(self, id=ID_POUEDITORPANEL, |
2136 name='EditVariablePanel', parent=prnt, pos=wx.Point(0, 0), |
2280 name='EditVariablePanel', parent=prnt, pos=wx.Point(0, 0), |
2137 size=wx.Size(-1, -1), style=wx.SP_3D) |
2281 size=wx.Size(0, 0), style=wx.SP_3D) |
2138 self.SetNeedUpdating(True) |
2282 self.SetNeedUpdating(True) |
2139 self.SetMinimumPaneSize(1) |
2283 self.SetMinimumPaneSize(1) |
2140 |
2284 |
2141 if element_type == "config": |
2285 if element_type == "config": |
2142 self.Viewer = wx.Panel(id=ID_POUEDITORPANELVIEWER, |
2286 self.Viewer = wx.Panel(id=ID_POUEDITORPANELVIEWER, |
2143 name='ConfigPanel', parent=self, pos=wx.Point(0, 0), |
2287 name='ConfigPanel', parent=self, pos=wx.Point(0, 0), |
2144 size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL) |
2288 size=wx.Size(0, 0), style=0) |
|
2289 self.Viewer.SetSizer(wx.BoxSizer(wx.VERTICAL)) |
2145 self.Viewer.ResetBuffer = lambda: None |
2290 self.Viewer.ResetBuffer = lambda: None |
2146 self.Viewer.RefreshView = lambda: None |
2291 self.Viewer.RefreshView = lambda: None |
2147 elif element_type == "resource": |
2292 elif element_type == "resource": |
2148 self.Viewer = ResourceEditor(self, self.Parent, self.Controler) |
2293 self.Viewer = ResourceEditor(self, self.Parent, self.Controler) |
2149 elif element_type == "FBD": |
2294 elif element_type == "FBD": |
2160 else: |
2305 else: |
2161 self.Viewer.SetKeywords(ST_KEYWORDS) |
2306 self.Viewer.SetKeywords(ST_KEYWORDS) |
2162 |
2307 |
2163 self.VariablePanel = wx.Panel(id=ID_POUEDITORPANELVIEWER, |
2308 self.VariablePanel = wx.Panel(id=ID_POUEDITORPANELVIEWER, |
2164 name='VariablePanel', parent=self, pos=wx.Point(0, 0), |
2309 name='VariablePanel', parent=self, pos=wx.Point(0, 0), |
2165 size=wx.Size(-1, -1), style=wx.TAB_TRAVERSAL) |
2310 size=wx.Size(0, 0), style=wx.TAB_TRAVERSAL) |
2166 |
2311 |
2167 self.staticText1 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT1, |
2312 self.staticText1 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT1, |
2168 label='Return Type:', name='staticText1', parent=self.VariablePanel, |
2313 label='Return Type:', name='staticText1', parent=self.VariablePanel, |
2169 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
2314 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
2170 |
2315 |
2171 self.ReturnType = wx.Choice(id=ID_POUEDITORPANELRETURNTYPE, |
2316 self.ReturnType = wx.Choice(id=ID_POUEDITORPANELRETURNTYPE, |
2172 name='ReturnType', parent=self.VariablePanel, pos=wx.Point(0, 0), |
2317 name='ReturnType', parent=self.VariablePanel, pos=wx.Point(0, 0), |
2173 size=wx.Size(145, 24), style=0) |
2318 size=wx.Size(145, 24), style=0) |
|
2319 self.Bind(wx.EVT_CHOICE, self.OnReturnTypeChanged, id=ID_POUEDITORPANELRETURNTYPE) |
2174 |
2320 |
2175 self.staticText2 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT2, |
2321 self.staticText2 = wx.StaticText(id=ID_POUEDITORPANELSTATICTEXT2, |
2176 label='Class Filter:', name='staticText2', parent=self.VariablePanel, |
2322 label='Class Filter:', name='staticText2', parent=self.VariablePanel, |
2177 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
2323 pos=wx.Point(0, 0), size=wx.Size(95, 17), style=0) |
2178 |
2324 |
2250 " External" : "External", "Variables" : "Variables", " Local" : "Local", |
2396 " External" : "External", "Variables" : "Variables", " Local" : "Local", |
2251 " Temp" : "Temp", "Global" : "Global", "Access" : "Access"} |
2397 " Temp" : "Temp", "Global" : "Global", "Access" : "Access"} |
2252 |
2398 |
2253 if pou_type in ["config", "resource"]: |
2399 if pou_type in ["config", "resource"]: |
2254 self.DefaultTypes = {"All" : "Global"} |
2400 self.DefaultTypes = {"All" : "Global"} |
2255 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No", "Edit" : "True"} |
2401 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No", "Edit" : True} |
2256 else: |
2402 else: |
2257 self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"} |
2403 self.DefaultTypes = {"All" : "Local", "Interface" : "Input", "Variables" : "Local"} |
2258 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No", "Edit" : "True"} |
2404 self.DefaultValue = {"Name" : "", "Class" : "", "Type" : "INT", "Location" : "", "Initial Value" : "", "Retain" : "No", "Constant" : "No", "Edit" : True} |
2259 if pou_type in ["config", "resource"] or pou_type == "program": |
2405 if pou_type in ["config", "resource"] or pou_type == "program": |
2260 self.Table = VariableTable(self, [], ["#", "Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"]) |
2406 self.Table = VariableTable(self, [], ["#", "Name", "Class", "Type", "Location", "Initial Value", "Retain", "Constant"]) |
2261 if pou_type not in ["config", "resource"]: |
2407 if pou_type not in ["config", "resource"]: |
2262 self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp","Global","Access"] |
2408 self.FilterChoices = ["All","Interface"," Input"," Output"," InOut"," External","Variables"," Local"," Temp","Global","Access"] |
2263 else: |
2409 else: |
2344 language = self.Controler.GetPouBodyType(self.PouName) |
2490 language = self.Controler.GetPouBodyType(self.PouName) |
2345 varlist.append(self.PouName) |
2491 varlist.append(self.PouName) |
2346 if language in ["IL", "ST"]: |
2492 if language in ["IL", "ST"]: |
2347 self.Viewer.SetVariables(varlist) |
2493 self.Viewer.SetVariables(varlist) |
2348 self.Viewer.SetFunctions(self.Controler.GetBlockTypes()) |
2494 self.Viewer.SetFunctions(self.Controler.GetBlockTypes()) |
|
2495 |
|
2496 def OnReturnTypeChanged(self, event): |
|
2497 self.Controler.SetPouInterfaceReturnType(self.PouName, self.ReturnType.GetStringSelection()) |
|
2498 self.Controler.BufferProject() |
|
2499 self.Parent.RefreshTitle() |
|
2500 self.Parent.RefreshEditMenu() |
|
2501 event.Skip() |
2349 |
2502 |
2350 def OnClassFilter(self, event): |
2503 def OnClassFilter(self, event): |
2351 self.Filter = self.FilterChoiceTransfer[self.ClassFilter.GetStringSelection()] |
2504 self.Filter = self.FilterChoiceTransfer[self.ClassFilter.GetStringSelection()] |
2352 self.RefreshTypeList() |
2505 self.RefreshTypeList() |
2353 self.RefreshValues() |
2506 self.RefreshValues() |