diff -r 97bed1acd860 -r 2d53c653d8d2 PLCOpenEditor.py --- a/PLCOpenEditor.py Wed Feb 15 00:30:02 2012 +0100 +++ b/PLCOpenEditor.py Thu Feb 16 22:55:50 2012 +0100 @@ -1221,9 +1221,9 @@ window = self.TabsOpened.GetPage(selected) if not window.IsDebugging(): wx.CallAfter(self.SelectTypesTreeItem, window.GetTagName()) + window.RefreshView() else: wx.CallAfter(self.SelectInstancesTreeItem, window.GetInstancePath()) - window.RefreshView() wx.CallAfter(self._Refresh, FILEMENU, EDITMENU, DISPLAYMENU, TOOLBAR) event.Skip() @@ -1845,6 +1845,7 @@ icon = self.GenerateBitmap("ACTION", bodytype) new_window.SetIcon(icon) self.AddPage(new_window, "") + new_window.RefreshView() new_window.SetFocus() self.RefreshPageTitles() if selected_item is not None and selected_infos[0] in ITEMS_VARIABLE: @@ -1902,29 +1903,30 @@ event.Skip() return AddVariableGraphic - def RecursiveInstancesTreeItemSelection(self, root, instancepath): - found = False + def GetInstancesTreeItem(self, root, instancepath): paths = instancepath.split(".", 1) if wx.VERSION >= (2, 6, 0): item, root_cookie = self.InstancesTree.GetFirstChild(root) else: item, root_cookie = self.InstancesTree.GetFirstChild(root, 0) - while item.IsOk() and not found: + while item.IsOk(): name = self.InstancesTree.GetItemText(item).split(" (")[0] if name == paths[0]: if len(paths) == 1: - self.InstancesTree.SelectItem(item) - return True + return item else: - found = self.RecursiveInstancesTreeItemSelection(item, paths[1]) + return self.GetInstancesTreeItem(item, paths[1]) item, root_cookie = self.InstancesTree.GetNextChild(root, root_cookie) - return found + return None def SelectInstancesTreeItem(self, instancepath): if self.InstancesTree is not None: root = self.InstancesTree.GetRootItem() if root.IsOk(): - return self.RecursiveInstancesTreeItemSelection(root, instancepath) + item = self.GetInstancesTreeItem(root, instancepath) + if item is not None: + self.InstancesTree.SelectItem(item) + return True return False def ResetGraphicViewers(self): @@ -1933,15 +1935,28 @@ if isinstance(editor, GraphicViewer): editor.ResetView() - def CloseDebugTabs(self): + def CloseObsoleteDebugTabs(self): if self.EnableDebug: idxs = range(self.TabsOpened.GetPageCount()) idxs.reverse() + root = None + if self.InstancesTree is not None: + root = self.InstancesTree.GetRootItem() + if not root.IsOk(): + root = None for idx in idxs: - window = self.TabsOpened.GetPage(idx) - if window.IsDebugging(): - self.TabsOpened.DeletePage(idx) - self.DebugVariablePanel.ResetGrid() + editor = self.TabsOpened.GetPage(idx) + item = None + if root is not None: + item = self.GetInstancesTreeItem(root, editor.GetInstancePath()) + if editor.IsDebugging(): + if item is None: + self.TabsOpened.DeletePage(idx) + elif isinstance(editor, GraphicViewer): + editor.ResetView() + else: + editor.RefreshView() + self.DebugVariablePanel.UnregisterObsoleteData() def AddDebugVariable(self, iec_path): if self.EnableDebug: @@ -4109,6 +4124,16 @@ self.VariablesGrid.RefreshButtons() self.Thaw() + def UnregisterObsoleteData(self): + for idx, item in enumerate(self.Table.GetData()): + if self.GetDataType(item.GetVariable()) is None: + self.RemoveDataConsumer(item) + self.Table.RemoveItem(idx) + self.Freeze() + self.Table.ResetView(self.VariablesGrid) + self.VariablesGrid.RefreshButtons() + self.Thaw() + def ResetGrid(self): self.DeleteDataConsumers() self.Table.Empty()