265 parent.Append(help=help, id=id, kind=kind, text=text) |
265 parent.Append(help=help, id=id, kind=kind, text=text) |
266 else: |
266 else: |
267 parent.Append(helpString=help, id=id, kind=kind, item=text) |
267 parent.Append(helpString=help, id=id, kind=kind, item=text) |
268 |
268 |
269 [TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, TYPESTREE, |
269 [TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU, TYPESTREE, |
270 INSTANCESTREE, LIBRARYTREE, SCALING |
270 INSTANCESTREE, LIBRARYTREE, SCALING, PAGETITLES |
271 ] = range(9) |
271 ] = range(10) |
272 |
272 |
273 def GetShortcutKeyCallbackFunction(viewer_function): |
273 def GetShortcutKeyCallbackFunction(viewer_function): |
274 def ShortcutKeyFunction(self, event): |
274 def ShortcutKeyFunction(self, event): |
275 control = self.FindFocus() |
275 control = self.FindFocus() |
276 if isinstance(control, (Viewer, TextViewer)): |
276 if control.GetName() in ["Viewer", "TextViewer"]: |
277 getattr(control, viewer_function)() |
277 getattr(control.Parent, viewer_function)() |
278 elif isinstance(control, wx.TextCtrl): |
278 elif isinstance(control, wx.TextCtrl): |
279 control.ProcessEvent(event) |
279 control.ProcessEvent(event) |
280 return ShortcutKeyFunction |
280 return ShortcutKeyFunction |
281 |
281 |
282 def GetParentName(tree, item, parent_type): |
282 def GetParentName(tree, item, parent_type): |
606 self.ToolBar.Realize() |
606 self.ToolBar.Realize() |
607 |
607 |
608 self.Bind(wx.EVT_TOOL, self.OnSelectionTool, |
608 self.Bind(wx.EVT_TOOL, self.OnSelectionTool, |
609 id=ID_PLCOPENEDITORTOOLBARSELECTION) |
609 id=ID_PLCOPENEDITORTOOLBARSELECTION) |
610 |
610 |
611 self.VariablePanelIndexer = VariablePanelIndexer(self.BottomNoteBook, self) |
|
612 self.BottomNoteBook.AddPage(self.VariablePanelIndexer, _("Variables")) |
|
613 |
|
614 self.SearchResultPanel = SearchResultPanel(self.BottomNoteBook, self) |
611 self.SearchResultPanel = SearchResultPanel(self.BottomNoteBook, self) |
615 self.BottomNoteBook.AddPage(self.SearchResultPanel, _("Search")) |
612 self.BottomNoteBook.AddPage(self.SearchResultPanel, _("Search")) |
616 |
613 |
617 self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL, |
614 self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL, |
618 name='LibraryPanel', parent=self.RightNoteBook, pos=wx.Point(0, |
615 name='LibraryPanel', parent=self.RightNoteBook, pos=wx.Point(0, |
752 EDITMENU : self.RefreshEditMenu, |
749 EDITMENU : self.RefreshEditMenu, |
753 DISPLAYMENU : self.RefreshDisplayMenu, |
750 DISPLAYMENU : self.RefreshDisplayMenu, |
754 TYPESTREE : self.RefreshTypesTree, |
751 TYPESTREE : self.RefreshTypesTree, |
755 INSTANCESTREE : self.RefreshInstancesTree, |
752 INSTANCESTREE : self.RefreshInstancesTree, |
756 LIBRARYTREE : self.RefreshLibraryTree, |
753 LIBRARYTREE : self.RefreshLibraryTree, |
757 SCALING : self.RefreshScaling} |
754 SCALING : self.RefreshScaling, |
|
755 PAGETITLES: self.RefreshPageTitles} |
758 |
756 |
759 ## Call PLCOpenEditor refresh functions. |
757 ## Call PLCOpenEditor refresh functions. |
760 # @param elements List of elements to refresh. |
758 # @param elements List of elements to refresh. |
761 def _Refresh(self, *elements): |
759 def _Refresh(self, *elements): |
762 for element in elements: |
760 for element in elements: |
763 self.RefreshFunctions[element]() |
761 self.RefreshFunctions[element]() |
764 |
762 |
765 ## Callback function when AUINotebook Page closed with CloseButton |
763 ## Callback function when AUINotebook Page closed with CloseButton |
766 # @param event AUINotebook Event. |
764 # @param event AUINotebook Event. |
767 def OnPageClose(self, event): |
765 def OnPageClose(self, event): |
768 # Get Selected Tab |
|
769 selected = event.GetSelection() |
|
770 if selected >= 0: |
|
771 # Remove corresponding VariablePanel |
|
772 window = self.TabsOpened.GetPage(selected) |
|
773 if not window.IsDebugging(): |
|
774 self.VariablePanelIndexer.RemoveVariablePanel(window.GetTagName()) |
|
775 |
|
776 wx.CallAfter(self.RefreshTabCtrlEvent) |
766 wx.CallAfter(self.RefreshTabCtrlEvent) |
777 event.Skip() |
767 event.Skip() |
778 |
768 |
779 def GetCopyBuffer(self): |
769 def GetCopyBuffer(self): |
780 data = None |
770 data = None |
923 def RefreshFileMenu(self): |
913 def RefreshFileMenu(self): |
924 pass |
914 pass |
925 |
915 |
926 def ResetView(self): |
916 def ResetView(self): |
927 self.DeleteAllPages() |
917 self.DeleteAllPages() |
928 self.VariablePanelIndexer.RemoveAllPanels() |
|
929 self.TypesTree.DeleteAllItems() |
918 self.TypesTree.DeleteAllItems() |
930 self.InstancesTree.DeleteAllItems() |
919 self.InstancesTree.DeleteAllItems() |
931 self.LibraryTree.DeleteAllItems() |
920 self.LibraryTree.DeleteAllItems() |
932 self.Controler = None |
921 self.Controler = None |
933 |
922 |
934 def OnCloseTabMenu(self, event): |
923 def OnCloseTabMenu(self, event): |
935 selected = self.TabsOpened.GetSelection() |
924 selected = self.TabsOpened.GetSelection() |
936 if selected >= 0: |
925 if selected >= 0: |
937 window = self.TabsOpened.GetPage(selected) |
|
938 if not window.IsDebugging(): |
|
939 self.VariablePanelIndexer.RemoveVariablePanel(window.GetTagName()) |
|
940 self.TabsOpened.DeletePage(selected) |
926 self.TabsOpened.DeletePage(selected) |
941 if self.TabsOpened.GetPageCount() > 0: |
927 if self.TabsOpened.GetPageCount() > 0: |
942 new_index = min(selected, self.TabsOpened.GetPageCount() - 1) |
928 new_index = min(selected, self.TabsOpened.GetPageCount() - 1) |
943 self.TabsOpened.SetSelection(new_index) |
929 self.TabsOpened.SetSelection(new_index) |
944 window = self.TabsOpened.GetPage(new_index) |
|
945 if not window.IsDebugging(): |
|
946 self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName()) |
|
947 # Refresh all window elements that have changed |
930 # Refresh all window elements that have changed |
948 self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU) |
931 self._Refresh(TITLE, TOOLBAR, FILEMENU, EDITMENU, DISPLAYMENU) |
949 self.RefreshTabCtrlEvent() |
932 self.RefreshTabCtrlEvent() |
950 |
933 |
951 def OnPageSetupMenu(self, event): |
934 def OnPageSetupMenu(self, event): |
1004 # Edit Menu Functions |
987 # Edit Menu Functions |
1005 #------------------------------------------------------------------------------- |
988 #------------------------------------------------------------------------------- |
1006 |
989 |
1007 def RefreshEditMenu(self): |
990 def RefreshEditMenu(self): |
1008 if self.Controler is not None: |
991 if self.Controler is not None: |
1009 undo, redo = self.Controler.GetBufferState() |
992 selected = self.TabsOpened.GetSelection() |
|
993 if selected > -1: |
|
994 window = self.TabsOpened.GetPage(selected) |
|
995 undo, redo = window.GetBufferState() |
|
996 else: |
|
997 undo, redo = False, False |
1010 self.EditMenu.Enable(wx.ID_UNDO, undo) |
998 self.EditMenu.Enable(wx.ID_UNDO, undo) |
1011 self.EditMenu.Enable(wx.ID_REDO, redo) |
999 self.EditMenu.Enable(wx.ID_REDO, redo) |
1012 #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True) |
1000 #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True) |
1013 #self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, |
1001 #self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, |
1014 # self.Controler.IsProjectBufferEnabled()) |
1002 # self.Controler.IsProjectBufferEnabled()) |
1043 def CloseTabsWithoutModel(self): |
1031 def CloseTabsWithoutModel(self): |
1044 idxs = range(self.TabsOpened.GetPageCount()) |
1032 idxs = range(self.TabsOpened.GetPageCount()) |
1045 idxs.reverse() |
1033 idxs.reverse() |
1046 for idx in idxs: |
1034 for idx in idxs: |
1047 window = self.TabsOpened.GetPage(idx) |
1035 window = self.TabsOpened.GetPage(idx) |
1048 if not window.IsDebugging(): |
1036 if window.HasNoModel(): |
1049 tagname = window.GetTagName() |
1037 self.TabsOpened.DeletePage(idx) |
1050 if self.Controler.GetEditedElement(tagname) is None: |
|
1051 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
|
1052 self.TabsOpened.DeletePage(idx) |
|
1053 |
1038 |
1054 def OnUndoMenu(self, event): |
1039 def OnUndoMenu(self, event): |
1055 self.Controler.LoadPrevious() |
1040 selected = self.TabsOpened.GetSelection() |
1056 self.CloseTabsWithoutModel() |
1041 if selected != -1: |
1057 self.RefreshEditor() |
1042 window = self.TabsOpened.GetPage(selected) |
1058 self._Refresh(TITLE, FILEMENU, EDITMENU, TYPESTREE, INSTANCESTREE, LIBRARYTREE, |
1043 window.Undo() |
1059 SCALING) |
1044 self._Refresh(TITLE, FILEMENU, EDITMENU, TYPESTREE, INSTANCESTREE, LIBRARYTREE, |
|
1045 SCALING, PAGETITLES) |
1060 |
1046 |
1061 def OnRedoMenu(self, event): |
1047 def OnRedoMenu(self, event): |
1062 self.Controler.LoadNext() |
1048 selected = self.TabsOpened.GetSelection() |
1063 self.CloseTabsWithoutModel() |
1049 if selected != -1: |
1064 self.RefreshEditor() |
1050 window = self.TabsOpened.GetPage(selected) |
1065 self._Refresh(TITLE, FILEMENU, EDITMENU, TYPESTREE, INSTANCESTREE, LIBRARYTREE, |
1051 window.Redo() |
1066 SCALING) |
1052 self._Refresh(TITLE, FILEMENU, EDITMENU, TYPESTREE, INSTANCESTREE, LIBRARYTREE, |
|
1053 SCALING, PAGETITLES) |
1067 |
1054 |
1068 def OnEnableUndoRedoMenu(self, event): |
1055 def OnEnableUndoRedoMenu(self, event): |
1069 self.Controler.EnableProjectBuffer(event.IsChecked()) |
1056 self.Controler.EnableProjectBuffer(event.IsChecked()) |
1070 self.RefreshEditMenu() |
1057 self.RefreshEditMenu() |
1071 |
1058 |
1073 OnCopyMenu = GetShortcutKeyCallbackFunction("Copy") |
1060 OnCopyMenu = GetShortcutKeyCallbackFunction("Copy") |
1074 OnPasteMenu = GetShortcutKeyCallbackFunction("Paste") |
1061 OnPasteMenu = GetShortcutKeyCallbackFunction("Paste") |
1075 |
1062 |
1076 def OnSelectAllMenu(self, event): |
1063 def OnSelectAllMenu(self, event): |
1077 control = self.FindFocus() |
1064 control = self.FindFocus() |
1078 if isinstance(control, (Viewer, TextViewer)): |
1065 if control.GetName() in ["Viewer", "TextViewer"]: |
1079 control.SelectAll() |
1066 control.Parent.SelectAll() |
1080 elif isinstance(control, wx.TextCtrl): |
1067 elif isinstance(control, wx.TextCtrl): |
1081 control.SetSelection(0, control.GetLastPosition()) |
1068 control.SetSelection(0, control.GetLastPosition()) |
1082 elif isinstance(control, wx.ComboBox): |
1069 elif isinstance(control, wx.ComboBox): |
1083 control.SetMark(0, control.GetLastPosition() + 1) |
1070 control.SetMark(0, control.GetLastPosition() + 1) |
1084 |
1071 |
1201 if not window.IsDebugging(): |
1188 if not window.IsDebugging(): |
1202 wx.CallAfter(self.SelectTypesTreeItem, window.GetTagName()) |
1189 wx.CallAfter(self.SelectTypesTreeItem, window.GetTagName()) |
1203 else: |
1190 else: |
1204 wx.CallAfter(self.SelectInstancesTreeItem, self.InstancesTree.GetRootItem(), window.GetInstancePath()) |
1191 wx.CallAfter(self.SelectInstancesTreeItem, self.InstancesTree.GetRootItem(), window.GetInstancePath()) |
1205 window.RefreshView() |
1192 window.RefreshView() |
1206 if not window.IsDebugging(): |
|
1207 self.VariablePanelIndexer.ChangeVariablePanel(window.GetTagName()) |
|
1208 self._Refresh(FILEMENU, EDITMENU, DISPLAYMENU, TOOLBAR) |
1193 self._Refresh(FILEMENU, EDITMENU, DISPLAYMENU, TOOLBAR) |
1209 event.Skip() |
1194 event.Skip() |
1210 |
1195 |
1211 def RefreshEditor(self, variablepanel = True): |
1196 def RefreshEditor(self): |
1212 selected = self.TabsOpened.GetSelection() |
1197 selected = self.TabsOpened.GetSelection() |
1213 if USE_AUI: |
1198 if USE_AUI: |
1214 for child in self.TabsOpened.GetChildren(): |
1199 for child in self.TabsOpened.GetChildren(): |
1215 if isinstance(child, wx.aui.AuiTabCtrl): |
1200 if isinstance(child, wx.aui.AuiTabCtrl): |
1216 active_page = child.GetActivePage() |
1201 active_page = child.GetActivePage() |
1217 if active_page >= 0: |
1202 if active_page >= 0: |
1218 window = child.GetWindowFromIdx(child.GetActivePage()) |
1203 window = child.GetWindowFromIdx(active_page) |
1219 window.RefreshView() |
1204 window.RefreshView() |
1220 if not window.IsDebugging() and self.TabsOpened.GetPageIndex(window) == selected and variablepanel: |
|
1221 self.RefreshVariablePanel(window.GetTagName()) |
|
1222 elif selected >= 0: |
1205 elif selected >= 0: |
1223 window = self.TabsOpened.GetPage(idx) |
1206 window = self.TabsOpened.GetPage(idx) |
1224 window.RefreshView() |
1207 window.RefreshView() |
1225 if not window.IsDebugging() and variablepanel: |
1208 |
1226 self.RefreshVariablePanel(window.GetTagName()) |
|
1227 |
|
1228 def RefreshVariablePanel(self, tagname): |
|
1229 self.VariablePanelIndexer.RefreshVariablePanel(tagname) |
|
1230 |
|
1231 def RefreshEditorNames(self, old_tagname, new_tagname): |
1209 def RefreshEditorNames(self, old_tagname, new_tagname): |
1232 for i in xrange(self.TabsOpened.GetPageCount()): |
1210 for i in xrange(self.TabsOpened.GetPageCount()): |
1233 editor = self.TabsOpened.GetPage(i) |
1211 editor = self.TabsOpened.GetPage(i) |
1234 if editor.GetTagName() == old_tagname: |
1212 if editor.GetTagName() == old_tagname: |
1235 editor.SetTagName(new_tagname) |
1213 editor.SetTagName(new_tagname) |
1236 self.VariablePanelIndexer.UpdateVariablePanelTagName(old_tagname, new_tagname) |
1214 |
1237 |
|
1238 def IsOpened(self, tagname): |
1215 def IsOpened(self, tagname): |
1239 for idx in xrange(self.TabsOpened.GetPageCount()): |
1216 for idx in xrange(self.TabsOpened.GetPageCount()): |
1240 if self.TabsOpened.GetPage(idx).IsViewing(tagname): |
1217 if self.TabsOpened.GetPage(idx).IsViewing(tagname): |
1241 return idx |
1218 return idx |
1242 return None |
1219 return None |
1243 |
1220 |
1244 def RefreshPageTitles(self): |
1221 def RefreshPageTitles(self): |
1245 for idx in xrange(self.TabsOpened.GetPageCount()): |
1222 for idx in xrange(self.TabsOpened.GetPageCount()): |
1246 window = self.TabsOpened.GetPage(idx) |
1223 window = self.TabsOpened.GetPage(idx) |
1247 debug = window.IsDebugging() |
1224 icon = window.GetIcon() |
1248 words = window.GetTagName().split("::") |
1225 if icon is not None: |
1249 if words[0] == "P": |
1226 self.SetPageBitmap(idx, icon) |
1250 pou_type = self.Controler.GetEditedElementType(window.GetTagName(), debug)[1].upper() |
1227 self.TabsOpened.SetPageText(idx, window.GetTitle()) |
1251 pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName(), debug) |
|
1252 self.SetPageBitmap(idx, self.GenerateBitmap(pou_type, pou_body_type)) |
|
1253 elif words[0] == "T": |
|
1254 pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName(), debug) |
|
1255 self.SetPageBitmap(idx, self.GenerateBitmap("TRANSITION", pou_body_type)) |
|
1256 elif words[0] == "A": |
|
1257 pou_body_type = self.Controler.GetEditedElementBodyType(window.GetTagName(), debug) |
|
1258 self.SetPageBitmap(idx, self.GenerateBitmap("ACTION", pou_body_type)) |
|
1259 elif words[0] == "C": |
|
1260 self.SetPageBitmap(idx, self.GenerateBitmap("CONFIGURATION")) |
|
1261 elif words[0] == "R": |
|
1262 self.SetPageBitmap(idx, self.GenerateBitmap("RESOURCE")) |
|
1263 elif words[0] == "D": |
|
1264 self.SetPageBitmap(idx, self.GenerateBitmap("DATATYPE")) |
|
1265 if debug: |
|
1266 text = window.GetInstancePath() |
|
1267 if len(text) > 15: |
|
1268 text = "..." + text[-12:] |
|
1269 self.TabsOpened.SetPageText(idx, text) |
|
1270 else: |
|
1271 self.TabsOpened.SetPageText(idx, "-".join(words[1:])) |
|
1272 |
1228 |
1273 def GetTabsOpenedDClickFunction(self, tabctrl): |
1229 def GetTabsOpenedDClickFunction(self, tabctrl): |
1274 def OnTabsOpenedDClick(event): |
1230 def OnTabsOpenedDClick(event): |
1275 pos = event.GetPosition() |
1231 pos = event.GetPosition() |
1276 if tabctrl.TabHitTest(pos.x, pos.y, None): |
1232 if tabctrl.TabHitTest(pos.x, pos.y, None): |
1561 self.SelectedItem = event.GetItem() |
1517 self.SelectedItem = event.GetItem() |
1562 event.Veto() |
1518 event.Veto() |
1563 else: |
1519 else: |
1564 event.Skip() |
1520 event.Skip() |
1565 |
1521 |
1566 def EditProjectElement(self, elementtype, tagname, onlyopened = False): |
1522 def EditProjectElement(self, element, tagname, onlyopened = False): |
1567 openedidx = self.IsOpened(tagname) |
1523 openedidx = self.IsOpened(tagname) |
1568 if openedidx is not None: |
1524 if openedidx is not None: |
1569 old_selected = self.TabsOpened.GetSelection() |
1525 old_selected = self.TabsOpened.GetSelection() |
1570 if old_selected != openedidx: |
1526 if old_selected != openedidx: |
1571 if old_selected >= 0: |
1527 if old_selected >= 0: |
1572 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
1528 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
1573 self.TabsOpened.SetSelection(openedidx) |
1529 self.TabsOpened.SetSelection(openedidx) |
1574 self.VariablePanelIndexer.ChangeVariablePanel(tagname) |
1530 self._Refresh(FILEMENU, EDITMENU, TOOLBAR, PAGETITLES) |
1575 self.RefreshPageTitles() |
|
1576 self._Refresh(FILEMENU, EDITMENU, TOOLBAR) |
|
1577 elif not onlyopened: |
1531 elif not onlyopened: |
1578 if elementtype == ITEM_CONFIGURATION: |
1532 new_window = None |
|
1533 if element == ITEM_CONFIGURATION: |
1579 new_window = ConfigurationEditor(self.TabsOpened, tagname, self, self.Controler) |
1534 new_window = ConfigurationEditor(self.TabsOpened, tagname, self, self.Controler) |
|
1535 new_window.SetIcon(self.GenerateBitmap("CONFIGURATION")) |
1580 self.AddPage(new_window, "") |
1536 self.AddPage(new_window, "") |
1581 self.VariablePanelIndexer.AddVariablePanel(tagname, "config") |
1537 elif element == ITEM_RESOURCE: |
1582 elif elementtype == ITEM_RESOURCE: |
|
1583 new_window = ResourceEditor(self.TabsOpened, tagname, self, self.Controler) |
1538 new_window = ResourceEditor(self.TabsOpened, tagname, self, self.Controler) |
|
1539 new_window.SetIcon(self.GenerateBitmap("RESOURCE")) |
1584 self.AddPage(new_window, "") |
1540 self.AddPage(new_window, "") |
1585 self.VariablePanelIndexer.AddVariablePanel(tagname, "resource") |
1541 elif element in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]: |
1586 elif elementtype in [ITEM_POU, ITEM_TRANSITION, ITEM_ACTION]: |
|
1587 bodytype = self.Controler.GetEditedElementBodyType(tagname) |
1542 bodytype = self.Controler.GetEditedElementBodyType(tagname) |
1588 if bodytype == "FBD": |
1543 if bodytype == "FBD": |
1589 new_window = Viewer(self.TabsOpened, tagname, self, self.Controler) |
1544 new_window = Viewer(self.TabsOpened, tagname, self, self.Controler) |
1590 new_window.RefreshScaling(False) |
1545 new_window.RefreshScaling(False) |
1591 elif bodytype == "LD": |
1546 elif bodytype == "LD": |
1599 new_window.SetTextSyntax(bodytype) |
1554 new_window.SetTextSyntax(bodytype) |
1600 if bodytype == "IL": |
1555 if bodytype == "IL": |
1601 new_window.SetKeywords(IL_KEYWORDS) |
1556 new_window.SetKeywords(IL_KEYWORDS) |
1602 else: |
1557 else: |
1603 new_window.SetKeywords(ST_KEYWORDS) |
1558 new_window.SetKeywords(ST_KEYWORDS) |
|
1559 if element == ITEM_POU: |
|
1560 pou_type = self.Controler.GetEditedElementType(tagname)[1].upper() |
|
1561 icon = self.GenerateBitmap(pou_type, bodytype) |
|
1562 elif element == ITEM_TRANSITION: |
|
1563 icon = self.GenerateBitmap("TRANSITION", bodytype) |
|
1564 elif element == ITEM_ACTION: |
|
1565 icon = self.GenerateBitmap("ACTION", bodytype) |
|
1566 new_window.SetIcon(icon) |
1604 self.AddPage(new_window, "") |
1567 self.AddPage(new_window, "") |
1605 words = tagname.split("::") |
1568 words = tagname.split("::") |
1606 self.VariablePanelIndexer.AddVariablePanel(tagname, self.Controler.GetPouType(words[1])) |
1569 elif element == ITEM_DATATYPE: |
1607 elif elementtype == ITEM_DATATYPE: |
|
1608 new_window = DataTypeEditor(self.TabsOpened, tagname, self, self.Controler) |
1570 new_window = DataTypeEditor(self.TabsOpened, tagname, self, self.Controler) |
|
1571 new_window.SetIcon(self.GenerateBitmap("DATATYPE")) |
1609 self.AddPage(new_window, "") |
1572 self.AddPage(new_window, "") |
1610 self.VariablePanelIndexer.ChangeVariablePanel(tagname) |
1573 elif isinstance(element, EditorPanel): |
1611 openedidx = self.IsOpened(tagname) |
1574 new_window = element |
1612 old_selected = self.TabsOpened.GetSelection() |
1575 self.AddPage(element, "") |
1613 if old_selected != openedidx: |
1576 if new_window is not None: |
1614 if old_selected >= 0: |
1577 openedidx = self.IsOpened(tagname) |
1615 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
1578 old_selected = self.TabsOpened.GetSelection() |
1616 for i in xrange(self.TabsOpened.GetPageCount()): |
1579 if old_selected != openedidx: |
1617 window = self.TabsOpened.GetPage(i) |
1580 if old_selected >= 0: |
1618 if window.GetTagName() == tagname: |
1581 self.TabsOpened.GetPage(old_selected).ResetBuffer() |
1619 self.TabsOpened.SetSelection(i) |
1582 for i in xrange(self.TabsOpened.GetPageCount()): |
1620 window.SetFocus() |
1583 window = self.TabsOpened.GetPage(i) |
1621 self.RefreshPageTitles() |
1584 if window == new_window: |
|
1585 self.TabsOpened.SetSelection(i) |
|
1586 window.SetFocus() |
|
1587 self.RefreshPageTitles() |
1622 |
1588 |
1623 def OnTypesTreeRightUp(self, event): |
1589 def OnTypesTreeRightUp(self, event): |
1624 if wx.Platform == '__WXMSW__': |
1590 if wx.Platform == '__WXMSW__': |
1625 item = event.GetItem() |
1591 item = event.GetItem() |
1626 else: |
1592 else: |
1834 new_window.SetTextSyntax(bodytype) |
1800 new_window.SetTextSyntax(bodytype) |
1835 if bodytype == "IL": |
1801 if bodytype == "IL": |
1836 new_window.SetKeywords(IL_KEYWORDS) |
1802 new_window.SetKeywords(IL_KEYWORDS) |
1837 else: |
1803 else: |
1838 new_window.SetKeywords(ST_KEYWORDS) |
1804 new_window.SetKeywords(ST_KEYWORDS) |
|
1805 if selected_infos[0] in [ITEM_FUNCTIONBLOCK, ITEM_PROGRAM]: |
|
1806 pou_type = self.Controler.GetEditedElementType(selected_infos[1], True)[1].upper() |
|
1807 icon = self.GenerateBitmap(pou_type, bodytype) |
|
1808 elif selected_infos[0] == ITEM_TRANSITION: |
|
1809 icon = self.GenerateBitmap("TRANSITION", bodytype) |
|
1810 elif selected_infos[0] == ITEM_ACTION: |
|
1811 icon = self.GenerateBitmap("ACTION", bodytype) |
|
1812 new_window.SetIcon(icon) |
1839 self.AddPage(new_window, "") |
1813 self.AddPage(new_window, "") |
1840 new_window.SetFocus() |
1814 new_window.SetFocus() |
1841 self.RefreshPageTitles() |
1815 self.RefreshPageTitles() |
1842 if selected_item is not None and selected_infos[0] in ITEMS_VARIABLE: |
1816 if selected_item is not None and selected_infos[0] in ITEMS_VARIABLE: |
1843 var_path, var_type = self.InstancesTree.GetItemText(selected_item).split(" (") |
1817 var_path, var_type = self.InstancesTree.GetItemText(selected_item).split(" (") |
2425 config_name = self.TypesTree.GetItemText(item) |
2395 config_name = self.TypesTree.GetItemText(item) |
2426 self.Controler.ProjectRemoveConfigurationResource(config_name, resource) |
2396 self.Controler.ProjectRemoveConfigurationResource(config_name, resource) |
2427 tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected) |
2397 tagname = self.Controler.ComputeConfigurationResourceName(config_name, selected) |
2428 idx = self.IsOpened(tagname) |
2398 idx = self.IsOpened(tagname) |
2429 if idx is not None: |
2399 if idx is not None: |
2430 self.VariablePanelIndexer.RemoveVariablePanel(tagname) |
|
2431 self.TabsOpened.DeletePage(idx) |
2400 self.TabsOpened.DeletePage(idx) |
2432 self._Refresh(TITLE, FILEMENU, EDITMENU, TYPESTREE, INSTANCESTREE) |
2401 self._Refresh(TITLE, FILEMENU, EDITMENU, TYPESTREE, INSTANCESTREE) |
2433 |
2402 |
2434 def OnPLCOpenEditorMenu(self, event): |
2403 def OnPLCOpenEditorMenu(self, event): |
2435 wx.MessageBox(_("No documentation available.\nComing soon.")) |
2404 wx.MessageBox(_("No documentation available.\nComing soon.")) |
2451 self.Highlights[infos[0]] = highlight_type |
2420 self.Highlights[infos[0]] = highlight_type |
2452 self.RefreshTypesTree() |
2421 self.RefreshTypesTree() |
2453 self.TypesTree.Unselect() |
2422 self.TypesTree.Unselect() |
2454 else: |
2423 else: |
2455 self.EditProjectElement(self.Controler.GetElementType(infos[0]), infos[0]) |
2424 self.EditProjectElement(self.Controler.GetElementType(infos[0]), infos[0]) |
2456 if infos[1] in plcopen.searchResultVarTypes.values() + ["var_local"]: |
2425 selected = self.TabsOpened.GetSelection() |
2457 self.VariablePanelIndexer.AddVariableHighlight(infos, highlight_type) |
2426 if selected != -1: |
2458 else: |
2427 viewer = self.TabsOpened.GetPage(selected) |
2459 selected = self.TabsOpened.GetSelection() |
2428 viewer.AddHighlight(infos[1:], start, end, highlight_type) |
2460 if selected != -1: |
|
2461 viewer = self.TabsOpened.GetPage(selected) |
|
2462 viewer.AddHighlight(infos[1:], start, end, highlight_type) |
|
2463 |
2429 |
2464 def ShowError(self, infos, start, end): |
2430 def ShowError(self, infos, start, end): |
2465 self.ShowHighlight(infos, start, end, ERROR_HIGHLIGHT) |
2431 self.ShowHighlight(infos, start, end, ERROR_HIGHLIGHT) |
2466 |
2432 |
2467 def ShowSearchResult(self, infos, start, end): |
2433 def ShowSearchResult(self, infos, start, end): |
3844 |
3807 |
3845 def GetValue(self): |
3808 def GetValue(self): |
3846 return self.GetSizer().GetItem(1).GetWindow().GetValue() |
3809 return self.GetSizer().GetItem(1).GetWindow().GetValue() |
3847 |
3810 |
3848 #------------------------------------------------------------------------------- |
3811 #------------------------------------------------------------------------------- |
3849 # Variables Editor Panel |
|
3850 #------------------------------------------------------------------------------- |
|
3851 |
|
3852 def PouTagname(tagname): |
|
3853 words = tagname.split("::") |
|
3854 if words[0] in ["T", "A"]: |
|
3855 return "P::%s" % words[1] |
|
3856 return tagname |
|
3857 |
|
3858 class VariablePanelIndexer(wx.Panel): |
|
3859 |
|
3860 def _init_sizers(self): |
|
3861 self.MainSizer = wx.BoxSizer(wx.HORIZONTAL) |
|
3862 |
|
3863 self.SetSizer(self.MainSizer) |
|
3864 |
|
3865 def _init_ctrls(self, prnt): |
|
3866 wx.Panel.__init__(self, id=wx.NewId(), |
|
3867 name='VariablePanelIndexer', parent=prnt, pos=wx.Point(0, 0), |
|
3868 size=wx.Size(0, 300), style=wx.TAB_TRAVERSAL) |
|
3869 |
|
3870 self._init_sizers() |
|
3871 |
|
3872 def __init__(self, parent, window): |
|
3873 self._init_ctrls(parent) |
|
3874 |
|
3875 self.ParentWindow = window |
|
3876 |
|
3877 self.VariablePanelList = {} |
|
3878 self.CurrentPanel = None |
|
3879 |
|
3880 def AddVariablePanel(self, tagname, element_type): |
|
3881 tagname = PouTagname(tagname) |
|
3882 panel, users = self.VariablePanelList.get(tagname, (None, 0)) |
|
3883 if panel is None: |
|
3884 panel = VariablePanel(self, self.ParentWindow, self.ParentWindow.Controler, element_type) |
|
3885 panel.SetTagName(tagname) |
|
3886 panel.Hide() |
|
3887 panel.RefreshView() |
|
3888 self.MainSizer.AddWindow(panel, 1, border=0, flag=wx.GROW) |
|
3889 self.VariablePanelList[tagname] = (panel, users + 1) |
|
3890 |
|
3891 def RemoveVariablePanel(self, tagname): |
|
3892 tagname = PouTagname(tagname) |
|
3893 panel, users = self.VariablePanelList.pop(tagname, (None, 0)) |
|
3894 if panel is not None: |
|
3895 if users > 1: |
|
3896 self.VariablePanelList[tagname] = (panel, users - 1) |
|
3897 else: |
|
3898 self.MainSizer.Remove(panel) |
|
3899 panel.Destroy() |
|
3900 if self.CurrentPanel == tagname: |
|
3901 self.CurrentPanel = None |
|
3902 |
|
3903 def RemoveAllPanels(self): |
|
3904 for panel, users in self.VariablePanelList.itervalues(): |
|
3905 self.MainSizer.Remove(panel) |
|
3906 panel.Destroy() |
|
3907 self.VariablePanelList = {} |
|
3908 self.CurrentPanel = None |
|
3909 |
|
3910 def UpdateVariablePanelTagName(self, old_tagname, new_tagname): |
|
3911 old_tagname = PouTagname(old_tagname) |
|
3912 new_tagname = PouTagname(new_tagname) |
|
3913 if old_tagname in self.VariablePanelList and old_tagname != new_tagname: |
|
3914 self.VariablePanelList[new_tagname] = self.VariablePanelList.pop(old_tagname) |
|
3915 if self.CurrentPanel == old_tagname: |
|
3916 self.CurrentPanel = new_tagname |
|
3917 |
|
3918 def ChangeVariablePanel(self, tagname): |
|
3919 tagname = PouTagname(tagname) |
|
3920 panel, users = self.VariablePanelList.get(tagname, (None, 0)) |
|
3921 if panel is None: |
|
3922 if self.CurrentPanel is not None: |
|
3923 self.VariablePanelList[self.CurrentPanel][0].Hide() |
|
3924 self.CurrentPanel = None |
|
3925 self.MainSizer.Layout() |
|
3926 elif tagname != self.CurrentPanel: |
|
3927 if self.CurrentPanel is not None: |
|
3928 self.VariablePanelList[self.CurrentPanel][0].Hide() |
|
3929 self.CurrentPanel = tagname |
|
3930 panel.RefreshView() |
|
3931 panel.Show() |
|
3932 self.MainSizer.Layout() |
|
3933 |
|
3934 def RefreshVariablePanel(self, tagname): |
|
3935 panel, users = self.VariablePanelList.get(PouTagname(tagname), (None, 0)) |
|
3936 if panel is not None: |
|
3937 panel.RefreshView() |
|
3938 |
|
3939 def AddVariableHighlight(self, infos, highlight_type): |
|
3940 self.ChangeVariablePanel(infos[0]) |
|
3941 if self.CurrentPanel is not None: |
|
3942 self.VariablePanelList[self.CurrentPanel][0].AddVariableHighlight(infos[2:], highlight_type) |
|
3943 |
|
3944 def ClearHighlights(self, highlight_type=None): |
|
3945 for panel, users in self.VariablePanelList.values(): |
|
3946 panel.ClearHighlights(highlight_type) |
|
3947 |
|
3948 #------------------------------------------------------------------------------- |
|
3949 # Debug Variables Panel |
3812 # Debug Variables Panel |
3950 #------------------------------------------------------------------------------- |
3813 #------------------------------------------------------------------------------- |
3951 |
3814 |
3952 def GetDebugVariablesTableColnames(): |
3815 def GetDebugVariablesTableColnames(): |
3953 _ = lambda x : x |
3816 _ = lambda x : x |