X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/13542f4946e681db5bd765e8bad6402a12adfd1f..1a74f5615bf096911fa26bd19cd879e7ed94e697:/wxPython/wx/tools/XRCed/tree.py diff --git a/wxPython/wx/tools/XRCed/tree.py b/wxPython/wx/tools/XRCed/tree.py index 26e8b91a8a..da78f48859 100644 --- a/wxPython/wx/tools/XRCed/tree.py +++ b/wxPython/wx/tools/XRCed/tree.py @@ -563,6 +563,8 @@ class XML_Tree(wx.TreeCtrl): # Different color for references if treeObj.ref: self.SetItemTextColour(item, 'DarkGreen') + elif treeObj.hasStyle and treeObj.params.get('hidden', False): + self.SetItemTextColour(item, 'Grey') # Try to find children objects if treeObj.hasChildren: nodes = treeObj.element.childNodes[:] @@ -610,6 +612,7 @@ class XML_Tree(wx.TreeCtrl): # Reset selection object self.selection = None return node + # Find position relative to the top-level window def FindNodePos(self, item, obj=None): # Root at (0,0) @@ -629,15 +632,12 @@ class XML_Tree(wx.TreeCtrl): if g.testWin.highLight: g.testWin.highLight.Remove() break - # Find first ancestor which is a wxWindow (not a sizer) + # For sizers and notebooks we must select the first window-like parent winParent = itemParent - while self.GetPyData(winParent).isSizer: + while self.GetPyData(winParent).isSizer or \ + self.GetPyData(winParent).treeObject().__class__ == xxxNotebook: winParent = self.GetItemParent(winParent) - # Notebook children are layed out in a little strange way - if self.GetPyData(itemParent).treeObject().__class__ == xxxNotebook: - parentPos = wx.Point(0,0) - else: - parentPos = self.FindNodePos(winParent) + parentPos = self.FindNodePos(winParent) # Position (-1,-1) is really (0,0) pos = obj.GetPosition() if pos == (-1,-1): pos = (0,0) @@ -698,7 +698,6 @@ class XML_Tree(wx.TreeCtrl): # If some data was modified, apply changes if g.panel.IsModified(): self.Apply(xxx, oldItem) - #if conf.autoRefresh: if g.testWin: if g.testWin.highLight: g.testWin.highLight.Remove() @@ -723,7 +722,8 @@ class XML_Tree(wx.TreeCtrl): if item == g.testWin.item: return False while item != self.root: item = self.GetItemParent(item) - if item == g.testWin.item: return True + if item == g.testWin.item: + return True return False # Highlight selected item @@ -739,7 +739,9 @@ class XML_Tree(wx.TreeCtrl): return # Get window/sizer object obj = self.FindNodeObject(item) - if not obj: + xxx = self.GetPyData(item).treeObject() + # Remove existing HL if item not found or is hidden + if not obj or xxx.hasStyle and xxx.params.get('hidden', False): if g.testWin.highLight: g.testWin.highLight.Remove() return pos = self.FindNodePos(item, obj) @@ -769,6 +771,7 @@ class XML_Tree(wx.TreeCtrl): return # Show item in bold if g.testWin: # Reset old + self.Unselect() self.SetItemBold(g.testWin.item, False) try: wx.BeginBusyCursor() @@ -953,9 +956,11 @@ class XML_Tree(wx.TreeCtrl): testWin.toolBar = res.LoadToolBar(testWin, STD_NAME) testWin.SetToolBar(testWin.toolBar) testWin.Show(True) + # Catch some events, set highlight if testWin: testWin.item = item wx.EVT_CLOSE(testWin, self.OnCloseTestWin) + wx.EVT_SIZE(testWin, self.OnSizeTestWin) testWin.highLight = None if highLight and not self.pendingHighLight: self.HighLight(highLight) @@ -981,6 +986,11 @@ class XML_Tree(wx.TreeCtrl): def OnCloseTestWin(self, evt): self.CloseTestWindow() + def OnSizeTestWin(self, evt): + if g.testWin.highLight: + self.HighLight(g.testWin.highLight.item) + evt.Skip() + # Return index in parent, for real window children def WindowIndex(self, item): n = 0 # index of sibling @@ -1116,7 +1126,7 @@ class XML_Tree(wx.TreeCtrl): (ID_NEW.PANEL, 'Panel', 'Create panel'), (ID_NEW.DIALOG, 'Dialog', 'Create dialog'), (ID_NEW.FRAME, 'Frame', 'Create frame')], shift=True) - elif xxx.isSizer: + elif xxx.isSizer and self.ItemHasChildren(item): SetMenu(m, pullDownMenu.sizers, shift=True) else: SetMenu(m, pullDownMenu.controls, shift=True) @@ -1143,6 +1153,12 @@ class XML_Tree(wx.TreeCtrl): self.PopupMenu(menu, evt.GetPosition()) menu.Destroy() + # Redefine to force the update of font dimentions on wxGTK + if wx.Platform == '__WXGTK__': + def SetItemBold(self, item, state=True): + wx.TreeCtrl.SetItemBold(self, item, state) + self.SetIndent(self.GetIndent()) + # Apply changes def Apply(self, xxx, item): g.panel.Apply()