65 ] = [wx.NewId() for _init_ctrls in range(17)] |
65 ] = [wx.NewId() for _init_ctrls in range(17)] |
66 |
66 |
67 [ID_PLCOPENEDITORFILEMENUGENERATE, |
67 [ID_PLCOPENEDITORFILEMENUGENERATE, |
68 ] = [wx.NewId() for _init_coll_FileMenu_Items in range(1)] |
68 ] = [wx.NewId() for _init_coll_FileMenu_Items in range(1)] |
69 |
69 |
70 [ID_PLCOPENEDITOREDITMENUADDDATATYPE, ID_PLCOPENEDITOREDITMENUADDFUNCTION, |
70 [ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
71 ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, ID_PLCOPENEDITOREDITMENUADDPROGRAM, |
71 ID_PLCOPENEDITOREDITMENUADDFUNCTION, ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, |
72 ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, |
72 ID_PLCOPENEDITOREDITMENUADDPROGRAM, ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, |
73 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(5)] |
73 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(6)] |
74 |
74 |
75 |
75 |
76 #------------------------------------------------------------------------------- |
76 #------------------------------------------------------------------------------- |
77 # ToolBars definitions |
77 # ToolBars definitions |
78 #------------------------------------------------------------------------------- |
78 #------------------------------------------------------------------------------- |
257 def _init_coll_EditMenu_Items(self, parent): |
257 def _init_coll_EditMenu_Items(self, parent): |
258 AppendMenu(parent, help='', id=wx.ID_UNDO, |
258 AppendMenu(parent, help='', id=wx.ID_UNDO, |
259 kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z') |
259 kind=wx.ITEM_NORMAL, text=u'Undo\tCTRL+Z') |
260 AppendMenu(parent, help='', id=wx.ID_REDO, |
260 AppendMenu(parent, help='', id=wx.ID_REDO, |
261 kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y') |
261 kind=wx.ITEM_NORMAL, text=u'Redo\tCTRL+Y') |
|
262 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, |
|
263 kind=wx.ITEM_CHECK, text=u'Enable Undo/Redo') |
262 parent.AppendSeparator() |
264 parent.AppendSeparator() |
263 AppendMenu(parent, help='', id=wx.ID_CUT, |
265 AppendMenu(parent, help='', id=wx.ID_CUT, |
264 kind=wx.ITEM_NORMAL, text=u'Cut\tCTRL+X') |
266 kind=wx.ITEM_NORMAL, text=u'Cut\tCTRL+X') |
265 AppendMenu(parent, help='', id=wx.ID_COPY, |
267 AppendMenu(parent, help='', id=wx.ID_COPY, |
266 kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C') |
268 kind=wx.ITEM_NORMAL, text=u'Copy\tCTRL+C') |
283 kind=wx.ITEM_NORMAL, text=u'Select All\tCTRL+A') |
285 kind=wx.ITEM_NORMAL, text=u'Select All\tCTRL+A') |
284 AppendMenu(parent, help='', id=wx.ID_DELETE, |
286 AppendMenu(parent, help='', id=wx.ID_DELETE, |
285 kind=wx.ITEM_NORMAL, text=u'Delete') |
287 kind=wx.ITEM_NORMAL, text=u'Delete') |
286 self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO) |
288 self.Bind(wx.EVT_MENU, self.OnUndoMenu, id=wx.ID_UNDO) |
287 self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO) |
289 self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO) |
|
290 self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO) |
288 self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT) |
291 self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT) |
289 self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY) |
292 self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY) |
290 self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE) |
293 self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE) |
291 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, |
294 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, |
292 id=ID_PLCOPENEDITOREDITMENUADDDATATYPE) |
295 id=ID_PLCOPENEDITOREDITMENUADDDATATYPE) |
1055 # Edit Menu Functions |
1058 # Edit Menu Functions |
1056 #------------------------------------------------------------------------------- |
1059 #------------------------------------------------------------------------------- |
1057 |
1060 |
1058 def RefreshEditMenu(self): |
1061 def RefreshEditMenu(self): |
1059 if not self.Debug: |
1062 if not self.Debug: |
|
1063 self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, |
|
1064 self.Controler.IsProjectBufferEnabled()) |
1060 if self.Controler.HasOpenedProject(): |
1065 if self.Controler.HasOpenedProject(): |
1061 undo, redo = self.Controler.GetBufferState() |
1066 undo, redo = self.Controler.GetBufferState() |
1062 self.EditMenu.Enable(wx.ID_UNDO, undo) |
1067 self.EditMenu.Enable(wx.ID_UNDO, undo) |
1063 self.EditMenu.Enable(wx.ID_REDO, redo) |
1068 self.EditMenu.Enable(wx.ID_REDO, redo) |
1064 self.EditMenu.Enable(wx.ID_ADD, True) |
1069 self.EditMenu.Enable(wx.ID_ADD, True) |
1093 for idx in idxs: |
1098 for idx in idxs: |
1094 tagname = self.TabsOpened.GetPage(idx).GetTagName() |
1099 tagname = self.TabsOpened.GetPage(idx).GetTagName() |
1095 if self.Controler.GetEditedElement(tagname, self.Debug) is None: |
1100 if self.Controler.GetEditedElement(tagname, self.Debug) is None: |
1096 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
1101 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
1097 self.TabsOpened.DeletePage(idx) |
1102 self.TabsOpened.DeletePage(idx) |
1098 selected = self.TabsOpened.GetSelection() |
1103 selected = self.TabsOpened.GetSelection() |
1099 if selected != -1: |
1104 if selected != -1: |
1100 window = self.TabsOpened.GetPage(selected) |
1105 window = self.TabsOpened.GetPage(selected) |
1101 window.RefreshView() |
1106 window.RefreshView() |
1102 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
1107 self.VariablePanelIndexer.RefreshVariablePanel(window.GetTagName()) |
1103 self.RefreshTitle() |
1108 self.RefreshTitle() |
1128 self.RefreshInstancesTree() |
1133 self.RefreshInstancesTree() |
1129 self.RefreshLibraryTree() |
1134 self.RefreshLibraryTree() |
1130 self.RefreshScaling() |
1135 self.RefreshScaling() |
1131 event.Skip() |
1136 event.Skip() |
1132 |
1137 |
|
1138 def OnEnableUndoRedoMenu(self, event): |
|
1139 self.Controler.EnableProjectBuffer(event.IsChecked()) |
|
1140 self.RefreshEditMenu() |
|
1141 event.Skip() |
|
1142 |
1133 def OnCutMenu(self, event): |
1143 def OnCutMenu(self, event): |
1134 control = self.FindFocus() |
1144 control = self.FindFocus() |
1135 if isinstance(control, (Viewer, TextViewer)): |
1145 if isinstance(control, (Viewer, TextViewer)): |
1136 control.Cut() |
1146 control.Cut() |
1137 elif isinstance(control, wx.TextCtrl): |
1147 elif isinstance(control, wx.TextCtrl): |
1175 name = self.TypesTree.GetItemText(selected) |
1185 name = self.TypesTree.GetItemText(selected) |
1176 if not self.Controler.DataTypeIsUsed(name, self.Debug): |
1186 if not self.Controler.DataTypeIsUsed(name, self.Debug): |
1177 self.Controler.ProjectRemoveDataType(name) |
1187 self.Controler.ProjectRemoveDataType(name) |
1178 tagname = self.Controler.ComputeDataTypeName(name) |
1188 tagname = self.Controler.ComputeDataTypeName(name) |
1179 else: |
1189 else: |
1180 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
1190 message = wx.MessageDialog(self, "\"%s\" is used by one or more POUs. It can't be removed!"%name, "Error", wx.OK|wx.ICON_ERROR) |
1181 message.ShowModal() |
1191 message.ShowModal() |
1182 message.Destroy() |
1192 message.Destroy() |
1183 elif type == ITEM_POU: |
1193 elif type == ITEM_POU: |
1184 name = self.TypesTree.GetItemText(selected) |
1194 name = self.TypesTree.GetItemText(selected) |
1185 if not self.Controler.PouIsUsed(name, self.Debug): |
1195 if not self.Controler.PouIsUsed(name, self.Debug): |
1186 self.Controler.ProjectRemovePou(name) |
1196 self.Controler.ProjectRemovePou(name) |
1187 tagname = self.Controler.ComputePouName(name) |
1197 tagname = self.Controler.ComputePouName(name) |
1188 else: |
1198 else: |
1189 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
1199 message = wx.MessageDialog(self, "\"%s\" is used by one or more POUs. It can't be removed!"%name, "Error", wx.OK|wx.ICON_ERROR) |
1190 message.ShowModal() |
1200 message.ShowModal() |
1191 message.Destroy() |
1201 message.Destroy() |
1192 elif type in [ITEM_TRANSITION, ITEM_ACTION]: |
1202 elif type in [ITEM_TRANSITION, ITEM_ACTION]: |
1193 item = self.TypesTree.GetItemParent(selected) |
1203 item = self.TypesTree.GetItemParent(selected) |
1194 item_type = self.TypesTree.GetPyData(item) |
1204 item_type = self.TypesTree.GetPyData(item) |
1601 item = event.GetItem() |
1611 item = event.GetItem() |
1602 wx.CallAfter(self.TypesTree.EditLabel, item) |
1612 wx.CallAfter(self.TypesTree.EditLabel, item) |
1603 event.Veto() |
1613 event.Veto() |
1604 else: |
1614 else: |
1605 wx.CallAfter(self.RefreshTypesTree) |
1615 wx.CallAfter(self.RefreshTypesTree) |
1606 selected = self.TabsOpened.GetSelection() |
1616 self.RefreshEditor() |
1607 if selected != -1: |
1617 self.RefreshFileMenu() |
1608 self.TabsOpened.GetPage(selected).RefreshView() |
1618 self.RefreshEditMenu() |
|
1619 self.RefreshTitle() |
1609 event.Skip() |
1620 event.Skip() |
1610 |
1621 |
1611 def OnTypesTreeItemActivated(self, event): |
1622 def OnTypesTreeItemActivated(self, event): |
1612 selected = event.GetItem() |
1623 selected = event.GetItem() |
1613 name = self.TypesTree.GetItemText(selected) |
1624 name = self.TypesTree.GetItemText(selected) |
1745 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
1756 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
1746 for i in xrange(self.TabsOpened.GetPageCount()): |
1757 for i in xrange(self.TabsOpened.GetPageCount()): |
1747 window = self.TabsOpened.GetPage(i) |
1758 window = self.TabsOpened.GetPage(i) |
1748 if window.GetTagName() == tagname: |
1759 if window.GetTagName() == tagname: |
1749 self.TabsOpened.SetSelection(i) |
1760 self.TabsOpened.SetSelection(i) |
1750 window.RefreshView() |
|
1751 window.SetFocus() |
1761 window.SetFocus() |
1752 self.RefreshPageTitles() |
1762 self.RefreshPageTitles() |
1753 self.RefreshFileMenu() |
1763 self.RefreshFileMenu() |
1754 self.RefreshEditMenu() |
1764 self.RefreshEditMenu() |
1755 self.RefreshToolBar() |
1765 self.RefreshToolBar() |
1938 old_selected = self.TabsOpened.GetSelection() |
1948 old_selected = self.TabsOpened.GetSelection() |
1939 if old_selected != openedidx: |
1949 if old_selected != openedidx: |
1940 if old_selected >= 0: |
1950 if old_selected >= 0: |
1941 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
1951 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
1942 self.TabsOpened.SetSelection(openedidx) |
1952 self.TabsOpened.SetSelection(openedidx) |
1943 self.TabsOpened.GetPage(openedidx).RefreshView() |
|
1944 elif selected_infos[1] is not None: |
1953 elif selected_infos[1] is not None: |
1945 bodytype = self.Controler.GetEditedElementBodyType(selected_infos[1], self.Debug) |
1954 bodytype = self.Controler.GetEditedElementBodyType(selected_infos[1], self.Debug) |
1946 if bodytype == "FBD": |
1955 if bodytype == "FBD": |
1947 new_window = Viewer(self.TabsOpened, selected_infos[1], self, self.Controler, True, instance_path) |
1956 new_window = Viewer(self.TabsOpened, selected_infos[1], self, self.Controler, True, instance_path) |
1948 new_window.RefreshScaling(False) |
1957 new_window.RefreshScaling(False) |
1958 if bodytype == "IL": |
1967 if bodytype == "IL": |
1959 new_window.SetKeywords(IL_KEYWORDS) |
1968 new_window.SetKeywords(IL_KEYWORDS) |
1960 else: |
1969 else: |
1961 new_window.SetKeywords(ST_KEYWORDS) |
1970 new_window.SetKeywords(ST_KEYWORDS) |
1962 self.AddPage(new_window, "") |
1971 self.AddPage(new_window, "") |
1963 new_window.RefreshView() |
|
1964 new_window.SetFocus() |
1972 new_window.SetFocus() |
1965 self.RefreshPageTitles() |
1973 self.RefreshPageTitles() |
1966 if selected_item is not None and selected_infos[0] in ITEMS_VARIABLE: |
1974 if selected_item is not None and selected_infos[0] in ITEMS_VARIABLE: |
1967 var_path, var_type = self.InstancesTree.GetItemText(selected_item).split(" (") |
1975 var_path, var_type = self.InstancesTree.GetItemText(selected_item).split(" (") |
1968 var_type = var_type.split(")")[0] |
1976 var_type = var_type.split(")")[0] |
2349 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
2357 dialog.SetPouNames(self.Controler.GetProjectPouNames(self.Debug)) |
2350 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(debug = self.Debug)) |
2358 dialog.SetPouElementNames(self.Controler.GetProjectPouVariables(debug = self.Debug)) |
2351 if dialog.ShowModal() == wx.ID_OK: |
2359 if dialog.ShowModal() == wx.ID_OK: |
2352 values = dialog.GetValues() |
2360 values = dialog.GetValues() |
2353 self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"]) |
2361 self.Controler.ProjectAddPou(values["pouName"], values["pouType"], values["language"]) |
2354 selected = self.TabsOpened.GetSelection() |
|
2355 if selected != -1: |
|
2356 self.TabsOpened.GetPage(selected).RefreshView() |
|
2357 self.RefreshTitle() |
2362 self.RefreshTitle() |
2358 self.RefreshEditMenu() |
2363 self.RefreshEditMenu() |
2359 self.RefreshTypesTree() |
2364 self.RefreshTypesTree() |
2360 self.RefreshLibraryTree() |
2365 self.RefreshLibraryTree() |
2361 dialog.Destroy() |
2366 dialog.Destroy() |
2466 self.RefreshTitle() |
2471 self.RefreshTitle() |
2467 self.RefreshEditMenu() |
2472 self.RefreshEditMenu() |
2468 self.RefreshTypesTree() |
2473 self.RefreshTypesTree() |
2469 self.RefreshToolBar() |
2474 self.RefreshToolBar() |
2470 else: |
2475 else: |
2471 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
2476 message = wx.MessageDialog(self, "\"%s\" is used by one or more POUs. It can't be removed!"%name, "Error", wx.OK|wx.ICON_ERROR) |
2472 message.ShowModal() |
2477 message.ShowModal() |
2473 message.Destroy() |
2478 message.Destroy() |
2474 event.Skip() |
2479 event.Skip() |
2475 |
2480 |
2476 def OnRenamePouMenu(self, event): |
2481 def OnRenamePouMenu(self, event): |
2495 self.RefreshTypesTree() |
2500 self.RefreshTypesTree() |
2496 self.RefreshInstancesTree() |
2501 self.RefreshInstancesTree() |
2497 self.RefreshLibraryTree() |
2502 self.RefreshLibraryTree() |
2498 self.RefreshToolBar() |
2503 self.RefreshToolBar() |
2499 else: |
2504 else: |
2500 message = wx.MessageDialog(self, "%s is used by one or more POUs. It can't be removed!"%selected, "Error", wx.OK|wx.ICON_ERROR) |
2505 message = wx.MessageDialog(self, "\"%s\" is used by one or more POUs. It can't be removed!"%name, "Error", wx.OK|wx.ICON_ERROR) |
2501 message.ShowModal() |
2506 message.ShowModal() |
2502 message.Destroy() |
2507 message.Destroy() |
2503 event.Skip() |
2508 event.Skip() |
2504 |
2509 |
2505 def OnRemoveTransitionMenu(self, event): |
2510 def OnRemoveTransitionMenu(self, event): |