112 from GraphicViewer import * |
112 from GraphicViewer import * |
113 from RessourceEditor import * |
113 from RessourceEditor import * |
114 from DataTypeEditor import * |
114 from DataTypeEditor import * |
115 from PLCControler import * |
115 from PLCControler import * |
116 from VariablePanel import VariablePanel |
116 from VariablePanel import VariablePanel |
|
117 from SearchResultPanel import SearchResultPanel |
117 |
118 |
118 # Define PLCOpenEditor controls id |
119 # Define PLCOpenEditor controls id |
119 [ID_PLCOPENEDITOR, ID_PLCOPENEDITORLEFTNOTEBOOK, |
120 [ID_PLCOPENEDITOR, ID_PLCOPENEDITORLEFTNOTEBOOK, |
120 ID_PLCOPENEDITORBOTTOMNOTEBOOK, ID_PLCOPENEDITORRIGHTNOTEBOOK, |
121 ID_PLCOPENEDITORBOTTOMNOTEBOOK, ID_PLCOPENEDITORRIGHTNOTEBOOK, |
121 ID_PLCOPENEDITORTYPESTREE, ID_PLCOPENEDITORINSTANCESTREE, |
122 ID_PLCOPENEDITORTYPESTREE, ID_PLCOPENEDITORINSTANCESTREE, |
133 ] = [wx.NewId() for _init_coll_FileMenu_Items in range(1)] |
134 ] = [wx.NewId() for _init_coll_FileMenu_Items in range(1)] |
134 |
135 |
135 # Define PLCOpenEditor EditMenu extra items id |
136 # Define PLCOpenEditor EditMenu extra items id |
136 [ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
137 [ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
137 ID_PLCOPENEDITOREDITMENUADDFUNCTION, ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, |
138 ID_PLCOPENEDITOREDITMENUADDFUNCTION, ID_PLCOPENEDITOREDITMENUADDFUNCTIONBLOCK, |
138 ID_PLCOPENEDITOREDITMENUADDPROGRAM, ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, |
139 ID_PLCOPENEDITOREDITMENUADDPROGRAM, ID_PLCOPENEDITOREDITMENUADDCONFIGURATION, |
139 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(6)] |
140 ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, |
|
141 ] = [wx.NewId() for _init_coll_EditMenu_Items in range(7)] |
140 |
142 |
141 |
143 |
142 #------------------------------------------------------------------------------- |
144 #------------------------------------------------------------------------------- |
143 # ToolBars definitions |
145 # ToolBars definitions |
144 #------------------------------------------------------------------------------- |
146 #------------------------------------------------------------------------------- |
328 AppendMenu(parent, help='', id=wx.ID_COPY, |
330 AppendMenu(parent, help='', id=wx.ID_COPY, |
329 kind=wx.ITEM_NORMAL, text=_(u'Copy\tCTRL+C')) |
331 kind=wx.ITEM_NORMAL, text=_(u'Copy\tCTRL+C')) |
330 AppendMenu(parent, help='', id=wx.ID_PASTE, |
332 AppendMenu(parent, help='', id=wx.ID_PASTE, |
331 kind=wx.ITEM_NORMAL, text=_(u'Paste\tCTRL+V')) |
333 kind=wx.ITEM_NORMAL, text=_(u'Paste\tCTRL+V')) |
332 parent.AppendSeparator() |
334 parent.AppendSeparator() |
|
335 AppendMenu(parent, help='', id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, |
|
336 kind=wx.ITEM_NORMAL, text=_(u'Search in Project')) |
|
337 parent.AppendSeparator() |
333 addmenu = wx.Menu(title='') |
338 addmenu = wx.Menu(title='') |
334 parent.AppendMenu(wx.ID_ADD, _("Add Element"), addmenu) |
339 parent.AppendMenu(wx.ID_ADD, _("Add Element"), addmenu) |
335 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
340 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDDATATYPE, |
336 kind=wx.ITEM_NORMAL, text=_(u'Data Type')) |
341 kind=wx.ITEM_NORMAL, text=_(u'Data Type')) |
337 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION, |
342 AppendMenu(addmenu, help='', id=ID_PLCOPENEDITOREDITMENUADDFUNCTION, |
350 self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO) |
355 self.Bind(wx.EVT_MENU, self.OnRedoMenu, id=wx.ID_REDO) |
351 #self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO) |
356 #self.Bind(wx.EVT_MENU, self.OnEnableUndoRedoMenu, id=ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO) |
352 self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT) |
357 self.Bind(wx.EVT_MENU, self.OnCutMenu, id=wx.ID_CUT) |
353 self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY) |
358 self.Bind(wx.EVT_MENU, self.OnCopyMenu, id=wx.ID_COPY) |
354 self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE) |
359 self.Bind(wx.EVT_MENU, self.OnPasteMenu, id=wx.ID_PASTE) |
|
360 self.Bind(wx.EVT_MENU, self.OnSearchInProjectMenu, |
|
361 id=ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT) |
355 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, |
362 self.Bind(wx.EVT_MENU, self.OnAddDataTypeMenu, |
356 id=ID_PLCOPENEDITOREDITMENUADDDATATYPE) |
363 id=ID_PLCOPENEDITOREDITMENUADDDATATYPE) |
357 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"), |
364 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("function"), |
358 id=ID_PLCOPENEDITOREDITMENUADDFUNCTION) |
365 id=ID_PLCOPENEDITOREDITMENUADDFUNCTION) |
359 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"), |
366 self.Bind(wx.EVT_MENU, self.GenerateAddPouFunction("functionBlock"), |
592 id=ID_PLCOPENEDITORTOOLBARSELECTION) |
599 id=ID_PLCOPENEDITORTOOLBARSELECTION) |
593 |
600 |
594 self.VariablePanelIndexer = VariablePanelIndexer(self.BottomNoteBook, self) |
601 self.VariablePanelIndexer = VariablePanelIndexer(self.BottomNoteBook, self) |
595 self.BottomNoteBook.AddPage(self.VariablePanelIndexer, _("Variables")) |
602 self.BottomNoteBook.AddPage(self.VariablePanelIndexer, _("Variables")) |
596 |
603 |
|
604 self.SearchResultPanel = SearchResultPanel(self.BottomNoteBook, self) |
|
605 self.BottomNoteBook.AddPage(self.SearchResultPanel, _("Search")) |
|
606 |
597 self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL, |
607 self.LibraryPanel = wx.Panel(id=ID_PLCOPENEDITORLIBRARYPANEL, |
598 name='LibraryPanel', parent=self.RightNoteBook, pos=wx.Point(0, |
608 name='LibraryPanel', parent=self.RightNoteBook, pos=wx.Point(0, |
599 0), size=wx.Size(0, 0), style=0) |
609 0), size=wx.Size(0, 0), style=0) |
600 self.RightNoteBook.AddPage(self.LibraryPanel, _("Library")) |
610 self.RightNoteBook.AddPage(self.LibraryPanel, _("Library")) |
601 |
611 |
611 id=ID_PLCOPENEDITORLIBRARYTREE) |
621 id=ID_PLCOPENEDITORLIBRARYTREE) |
612 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnLibraryTreeBeginDrag, |
622 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.OnLibraryTreeBeginDrag, |
613 id=ID_PLCOPENEDITORLIBRARYTREE) |
623 id=ID_PLCOPENEDITORLIBRARYTREE) |
614 |
624 |
615 self.LibraryComment = wx.TextCtrl(id=ID_PLCOPENEDITORLIBRARYCOMMENT, |
625 self.LibraryComment = wx.TextCtrl(id=ID_PLCOPENEDITORLIBRARYCOMMENT, |
616 name='LibraryComment', parent=self.LibraryPanel, |
626 name='LibraryComment', parent=self.LibraryPanel, |
617 pos=wx.Point(0, 0), size=wx.Size(0, 160), |
627 pos=wx.Point(0, 0), size=wx.Size(0, 160), |
618 style=wx.TE_READONLY|wx.TE_MULTILINE) |
628 style=wx.TE_READONLY|wx.TE_MULTILINE) |
619 |
629 |
620 self._init_sizers() |
630 self._init_sizers() |
621 |
631 |
622 if self.EnableDebug: |
632 if self.EnableDebug: |
623 self.DebugVariablePanel = DebugVariablePanel(self.RightNoteBook, self.Controler) |
633 self.DebugVariablePanel = DebugVariablePanel(self.RightNoteBook, self.Controler) |
990 self.EditMenu.Enable(wx.ID_UNDO, undo) |
1000 self.EditMenu.Enable(wx.ID_UNDO, undo) |
991 self.EditMenu.Enable(wx.ID_REDO, redo) |
1001 self.EditMenu.Enable(wx.ID_REDO, redo) |
992 #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True) |
1002 #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, True) |
993 #self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, |
1003 #self.EditMenu.Check(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, |
994 # self.Controler.IsProjectBufferEnabled()) |
1004 # self.Controler.IsProjectBufferEnabled()) |
|
1005 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, True) |
995 self.EditMenu.Enable(wx.ID_ADD, True) |
1006 self.EditMenu.Enable(wx.ID_ADD, True) |
996 self.EditMenu.Enable(wx.ID_DELETE, True) |
1007 self.EditMenu.Enable(wx.ID_DELETE, True) |
997 if self.TabsOpened.GetPageCount() > 0: |
1008 if self.TabsOpened.GetPageCount() > 0: |
998 self.EditMenu.Enable(wx.ID_CUT, True) |
1009 self.EditMenu.Enable(wx.ID_CUT, True) |
999 self.EditMenu.Enable(wx.ID_COPY, True) |
1010 self.EditMenu.Enable(wx.ID_COPY, True) |
1013 #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, False) |
1024 #self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUENABLEUNDOREDO, False) |
1014 self.EditMenu.Enable(wx.ID_CUT, False) |
1025 self.EditMenu.Enable(wx.ID_CUT, False) |
1015 self.EditMenu.Enable(wx.ID_COPY, False) |
1026 self.EditMenu.Enable(wx.ID_COPY, False) |
1016 self.EditMenu.Enable(wx.ID_PASTE, False) |
1027 self.EditMenu.Enable(wx.ID_PASTE, False) |
1017 self.EditMenu.Enable(wx.ID_SELECTALL, False) |
1028 self.EditMenu.Enable(wx.ID_SELECTALL, False) |
|
1029 self.EditMenu.Enable(ID_PLCOPENEDITOREDITMENUSEARCHINPROJECT, False) |
1018 self.EditMenu.Enable(wx.ID_ADD, False) |
1030 self.EditMenu.Enable(wx.ID_ADD, False) |
1019 self.EditMenu.Enable(wx.ID_DELETE, False) |
1031 self.EditMenu.Enable(wx.ID_DELETE, False) |
1020 |
1032 |
1021 def CloseTabsWithoutModel(self): |
1033 def CloseTabsWithoutModel(self): |
1022 idxs = range(self.TabsOpened.GetPageCount()) |
1034 idxs = range(self.TabsOpened.GetPageCount()) |
1084 elif isinstance(window, (Viewer, TextViewer)): |
1096 elif isinstance(window, (Viewer, TextViewer)): |
1085 event = wx.KeyEvent(wx.EVT_CHAR._getEvtType()) |
1097 event = wx.KeyEvent(wx.EVT_CHAR._getEvtType()) |
1086 event.m_keyCode = wx.WXK_DELETE |
1098 event.m_keyCode = wx.WXK_DELETE |
1087 window.ProcessEvent(event) |
1099 window.ProcessEvent(event) |
1088 |
1100 |
1089 |
1101 def OnSearchInProjectMenu(self, event): |
|
1102 dialog = SearchInProjectDialog(self) |
|
1103 if dialog.ShowModal() == wx.ID_OK: |
|
1104 criteria = dialog.GetCriteria() |
|
1105 result = self.Controler.SearchInProject(criteria) |
|
1106 self.ClearSearchResults() |
|
1107 self.SearchResultPanel.SetSearchResults(criteria, result) |
|
1108 self.BottomNoteBook.SetSelection(self.BottomNoteBook.GetPageIndex(self.SearchResultPanel)) |
|
1109 |
1090 #------------------------------------------------------------------------------- |
1110 #------------------------------------------------------------------------------- |
1091 # Display Menu Functions |
1111 # Display Menu Functions |
1092 #------------------------------------------------------------------------------- |
1112 #------------------------------------------------------------------------------- |
1093 |
1113 |
1094 def RefreshDisplayMenu(self): |
1114 def RefreshDisplayMenu(self): |
1181 def RefreshEditor(self, variablepanel = True): |
1201 def RefreshEditor(self, variablepanel = True): |
1182 selected = self.TabsOpened.GetSelection() |
1202 selected = self.TabsOpened.GetSelection() |
1183 if USE_AUI: |
1203 if USE_AUI: |
1184 for child in self.TabsOpened.GetChildren(): |
1204 for child in self.TabsOpened.GetChildren(): |
1185 if isinstance(child, wx.aui.AuiTabCtrl): |
1205 if isinstance(child, wx.aui.AuiTabCtrl): |
1186 window = child.GetWindowFromIdx(child.GetActivePage()) |
1206 active_page = child.GetActivePage() |
1187 window.RefreshView() |
1207 if active_page >= 0: |
1188 if not window.IsDebugging() and self.TabsOpened.GetPageIndex(window) == selected and variablepanel: |
1208 window = child.GetWindowFromIdx(child.GetActivePage()) |
1189 self.RefreshVariablePanel(window.GetTagName()) |
1209 window.RefreshView() |
|
1210 if not window.IsDebugging() and self.TabsOpened.GetPageIndex(window) == selected and variablepanel: |
|
1211 self.RefreshVariablePanel(window.GetTagName()) |
1190 elif selected >= 0: |
1212 elif selected >= 0: |
1191 window = self.TabsOpened.GetPage(idx) |
1213 window = self.TabsOpened.GetPage(idx) |
1192 window.RefreshView() |
1214 window.RefreshView() |
1193 if not window.IsDebugging() and variablepanel: |
1215 if not window.IsDebugging() and variablepanel: |
1194 self.RefreshVariablePanel(window.GetTagName()) |
1216 self.RefreshVariablePanel(window.GetTagName()) |
1271 item_name = infos["name"] |
1293 item_name = infos["name"] |
1272 if infos["type"] in ITEMS_UNEDITABLE: |
1294 if infos["type"] in ITEMS_UNEDITABLE: |
1273 item_name = _(item_name) |
1295 item_name = _(item_name) |
1274 self.TypesTree.SetItemText(root, item_name) |
1296 self.TypesTree.SetItemText(root, item_name) |
1275 self.TypesTree.SetPyData(root, infos["type"]) |
1297 self.TypesTree.SetPyData(root, infos["type"]) |
1276 if infos.get("tagname", None) in self.Errors: |
1298 highlight_colours = self.Highlights.get(infos.get("tagname", None), (wx.WHITE, wx.BLACK)) |
1277 self.TypesTree.SetItemBackgroundColour(root, wx.Colour(255, 255, 0)) |
1299 self.TypesTree.SetItemBackgroundColour(root, highlight_colours[0]) |
1278 self.TypesTree.SetItemTextColour(root, wx.RED) |
1300 self.TypesTree.SetItemTextColour(root, highlight_colours[1]) |
1279 else: |
|
1280 self.TypesTree.SetItemBackgroundColour(root, wx.WHITE) |
|
1281 self.TypesTree.SetItemTextColour(root, wx.BLACK) |
|
1282 if infos["type"] == ITEM_POU: |
1301 if infos["type"] == ITEM_POU: |
1283 self.TypesTree.SetItemImage(root, self.TreeImageDict[self.Controler.GetPouBodyType(infos["name"])]) |
1302 self.TypesTree.SetItemImage(root, self.TreeImageDict[self.Controler.GetPouBodyType(infos["name"])]) |
1284 else: |
1303 else: |
1285 self.TypesTree.SetItemImage(root, self.TreeImageDict[infos["type"]]) |
1304 self.TypesTree.SetItemImage(root, self.TreeImageDict[infos["type"]]) |
1286 |
1305 |
2420 def OnAboutMenu(self, event): |
2439 def OnAboutMenu(self, event): |
2421 OpenHtmlFrame(self,_("About PLCOpenEditor"), os.path.join(CWD, "doc","about.html"), wx.Size(350, 350)) |
2440 OpenHtmlFrame(self,_("About PLCOpenEditor"), os.path.join(CWD, "doc","about.html"), wx.Size(350, 350)) |
2422 |
2441 |
2423 |
2442 |
2424 #------------------------------------------------------------------------------- |
2443 #------------------------------------------------------------------------------- |
2425 # Errors showing functions |
2444 # Highlights showing functions |
2426 #------------------------------------------------------------------------------- |
2445 #------------------------------------------------------------------------------- |
2427 |
2446 |
2428 def ShowError(self, infos, start, end): |
2447 def ShowHighlight(self, infos, start, end, highlight_type): |
2429 self.EditProjectElement(self.Controler.GetElementType(infos[0]), infos[0]) |
2448 print infos, start, end, highlight_type |
2430 self.SelectTypesTreeItem(infos[0]) |
2449 self.SelectTypesTreeItem(infos[0]) |
2431 if infos[1] == "name": |
2450 if infos[1] == "name": |
2432 self.Errors.append(infos[0]) |
2451 self.Highlights[infos[0]] = highlight_type |
2433 self.RefreshTypesTree() |
2452 self.RefreshTypesTree() |
2434 self.TypesTree.Unselect() |
2453 self.TypesTree.Unselect() |
2435 elif infos[1] == "variable": |
|
2436 self.VariablePanelIndexer.AddVariableError(infos) |
|
2437 else: |
2454 else: |
2438 selected = self.TabsOpened.GetSelection() |
2455 self.EditProjectElement(self.Controler.GetElementType(infos[0]), infos[0]) |
2439 if selected != -1: |
2456 if infos[1] in plcopen.searchResultVarTypes.values() + ["var_local"]: |
2440 viewer = self.TabsOpened.GetPage(selected) |
2457 self.VariablePanelIndexer.AddVariableHighlight(infos, highlight_type) |
2441 viewer.AddShownError(infos[1:], start, end) |
2458 else: |
2442 viewer.RefreshView() |
2459 selected = self.TabsOpened.GetSelection() |
2443 |
2460 if selected != -1: |
2444 def ClearErrors(self): |
2461 viewer = self.TabsOpened.GetPage(selected) |
2445 self.Errors = [] |
2462 viewer.AddHighlight(infos[1:], start, end, highlight_type) |
|
2463 |
|
2464 def ShowError(self, infos, start, end): |
|
2465 self.ShowHighlight(infos, start, end, ERROR_HIGHLIGHT) |
|
2466 |
|
2467 def ShowSearchResult(self, infos, start, end): |
|
2468 self.ShowHighlight(infos, start, end, SEARCH_RESULT_HIGHLIGHT) |
|
2469 |
|
2470 def ClearHighlights(self, highlight_type=None): |
|
2471 if highlight_type is None: |
|
2472 self.Highlights = {} |
|
2473 else: |
|
2474 self.Highlights = dict([(name, highlight) for name, highlight in self.Highlights.iteritems() if highlight != highlight_type]) |
2446 self.RefreshTypesTree() |
2475 self.RefreshTypesTree() |
2447 self.VariablePanelIndexer.ClearErrors() |
2476 self.VariablePanelIndexer.ClearHighlights(highlight_type) |
2448 for i in xrange(self.TabsOpened.GetPageCount()): |
2477 for i in xrange(self.TabsOpened.GetPageCount()): |
2449 viewer = self.TabsOpened.GetPage(i) |
2478 viewer = self.TabsOpened.GetPage(i) |
2450 viewer.ClearErrors() |
2479 viewer.ClearHighlights(highlight_type) |
|
2480 |
|
2481 def ClearErrors(self): |
|
2482 self.ClearHighlights(ERROR_HIGHLIGHT) |
|
2483 |
|
2484 def ClearSearchResults(self): |
|
2485 self.ClearHighlights(SEARCH_RESULT_HIGHLIGHT) |
2451 |
2486 |
2452 #------------------------------------------------------------------------------- |
2487 #------------------------------------------------------------------------------- |
2453 # PLCOpenEditor Main Class |
2488 # PLCOpenEditor Main Class |
2454 #------------------------------------------------------------------------------- |
2489 #------------------------------------------------------------------------------- |
2455 |
2490 |
3835 |
3876 |
3836 self.VariablePanelList = {} |
3877 self.VariablePanelList = {} |
3837 self.CurrentPanel = None |
3878 self.CurrentPanel = None |
3838 |
3879 |
3839 def AddVariablePanel(self, tagname, element_type): |
3880 def AddVariablePanel(self, tagname, element_type): |
3840 new_panel = VariablePanel(self, self.ParentWindow, self.ParentWindow.Controler, element_type) |
3881 tagname = PouTagname(tagname) |
3841 new_panel.SetTagName(tagname) |
3882 panel, users = self.VariablePanelList.get(tagname, (None, 0)) |
3842 new_panel.Hide() |
3883 if panel is None: |
3843 new_panel.RefreshView() |
3884 panel = VariablePanel(self, self.ParentWindow, self.ParentWindow.Controler, element_type) |
3844 self.MainSizer.AddWindow(new_panel, 1, border=0, flag=wx.GROW) |
3885 panel.SetTagName(tagname) |
3845 self.VariablePanelList[tagname] = new_panel |
3886 panel.Hide() |
|
3887 panel.RefreshView() |
|
3888 self.MainSizer.AddWindow(panel, 1, border=0, flag=wx.GROW) |
|
3889 self.VariablePanelList[tagname] = (panel, users + 1) |
3846 |
3890 |
3847 def RemoveVariablePanel(self, tagname): |
3891 def RemoveVariablePanel(self, tagname): |
3848 if tagname in self.VariablePanelList: |
3892 tagname = PouTagname(tagname) |
3849 panel = self.VariablePanelList.pop(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(): |
3850 self.MainSizer.Remove(panel) |
3905 self.MainSizer.Remove(panel) |
3851 panel.Destroy() |
3906 panel.Destroy() |
3852 if self.CurrentPanel == tagname: |
3907 self.VariablePanelList = {} |
3853 self.CurrentPanel = None |
3908 self.CurrentPanel = None |
3854 |
|
3855 def RemoveAllPanels(self): |
|
3856 for tagname in self.VariablePanelList.keys(): |
|
3857 self.RemoveVariablePanel(tagname) |
|
3858 |
3909 |
3859 def UpdateVariablePanelTagName(self, old_tagname, new_tagname): |
3910 def UpdateVariablePanelTagName(self, old_tagname, new_tagname): |
3860 if old_tagname in self.VariablePanelList: |
3911 old_tagname = PouTagname(old_tagname) |
|
3912 new_tagname = PouTagname(new_tagname) |
|
3913 if old_tagname in self.VariablePanelList and old_tagname != new_tagname: |
3861 self.VariablePanelList[new_tagname] = self.VariablePanelList.pop(old_tagname) |
3914 self.VariablePanelList[new_tagname] = self.VariablePanelList.pop(old_tagname) |
3862 if self.CurrentPanel == old_tagname: |
3915 if self.CurrentPanel == old_tagname: |
3863 self.CurrentPanel = new_tagname |
3916 self.CurrentPanel = new_tagname |
3864 |
3917 |
3865 def ChangeVariablePanel(self, tagname): |
3918 def ChangeVariablePanel(self, tagname): |
3866 if tagname in self.VariablePanelList: |
3919 tagname = PouTagname(tagname) |
3867 if tagname != self.CurrentPanel: |
3920 panel, users = self.VariablePanelList.get(tagname, (None, 0)) |
3868 if self.CurrentPanel is not None: |
3921 if panel is None: |
3869 self.VariablePanelList[self.CurrentPanel].Hide() |
|
3870 self.CurrentPanel = tagname |
|
3871 self.VariablePanelList[self.CurrentPanel].RefreshView() |
|
3872 self.VariablePanelList[self.CurrentPanel].Show() |
|
3873 self.MainSizer.Layout() |
|
3874 else: |
|
3875 if self.CurrentPanel is not None: |
3922 if self.CurrentPanel is not None: |
3876 self.VariablePanelList[self.CurrentPanel].Hide() |
3923 self.VariablePanelList[self.CurrentPanel][0].Hide() |
3877 self.CurrentPanel = None |
3924 self.CurrentPanel = None |
3878 self.MainSizer.Layout() |
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() |
3879 |
3933 |
3880 def RefreshVariablePanel(self, tagname): |
3934 def RefreshVariablePanel(self, tagname): |
3881 if tagname in self.VariablePanelList: |
3935 panel, users = self.VariablePanelList.get(PouTagname(tagname), (None, 0)) |
3882 self.VariablePanelList[self.CurrentPanel].RefreshView() |
3936 if panel is not None: |
3883 |
3937 panel.RefreshView() |
3884 def AddVariableError(self, infos): |
3938 |
|
3939 def AddVariableHighlight(self, infos, highlight_type): |
3885 self.ChangeVariablePanel(infos[0]) |
3940 self.ChangeVariablePanel(infos[0]) |
3886 if self.CurrentPanel is not None: |
3941 if self.CurrentPanel is not None: |
3887 self.VariablePanelList[self.CurrentPanel].AddVariableError(infos[2:]) |
3942 self.VariablePanelList[self.CurrentPanel][0].AddVariableHighlight(infos[2:], highlight_type) |
3888 |
3943 |
3889 def ClearErrors(self): |
3944 def ClearHighlights(self, highlight_type=None): |
3890 for panel in self.VariablePanelList.values(): |
3945 for panel, users in self.VariablePanelList.values(): |
3891 panel.ClearErrors() |
3946 panel.ClearHighlights(highlight_type) |
3892 |
3947 |
3893 #------------------------------------------------------------------------------- |
3948 #------------------------------------------------------------------------------- |
3894 # Debug Variables Panel |
3949 # Debug Variables Panel |
3895 #------------------------------------------------------------------------------- |
3950 #------------------------------------------------------------------------------- |
3896 |
3951 |