]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/tools/XRCed/tree.py
iconize properties frame together with main
[wxWidgets.git] / wxPython / wx / tools / XRCed / tree.py
index 4c6817b53590f0684ecec292f2856a18855dfc6b..f11aa795c8c278a575a5eca51b2dbb7e294b195a 100644 (file)
@@ -365,7 +365,7 @@ def SetMenu(m, list, shift=False):
             apply(m.Append, l)
         elif type(l) == types.ListType:
             subMenu = wxMenu()
-            SetMenu(subMenu, l[2:])
+            SetMenu(subMenu, l[2:], shift)
             m.AppendMenu(wxNewId(), l[0], subMenu, l[1])
         else:                           # separator
             m.AppendSeparator()
@@ -419,6 +419,7 @@ class XML_Tree(wxTreeCtrl):
         EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemExpandedCollapsed)
 
         self.selection = None
+       self.selectionChanging = False
         self.needUpdate = False
         self.pendingHighLight = None
         self.ctrl = self.shift = False
@@ -474,6 +475,8 @@ class XML_Tree(wxTreeCtrl):
 
     # Clear tree
     def Clear(self):
+        self.selection = None
+        self.UnselectAll()
         self.DeleteAllItems()
         # Add minimal structure
         if self.dom: self.dom.unlink()
@@ -486,11 +489,14 @@ class XML_Tree(wxTreeCtrl):
         self.root = self.AddRoot('XML tree', self.rootImage,
                                  data=wxTreeItemData(self.rootObj))
         self.SetItemHasChildren(self.root)
-        self.Unselect()
+        self.testElem = self.dom.createElement('dummy')
+        self.mainNode.appendChild(self.testElem)
         self.Expand(self.root)
 
     # Clear old data and set new
     def SetData(self, dom):
+        self.selection = None
+        self.UnselectAll()
         self.DeleteAllItems()
         # Add minimal structure
         if self.dom: self.dom.unlink()
@@ -509,8 +515,13 @@ class XML_Tree(wxTreeCtrl):
             else:
                 self.mainNode.removeChild(node)
                 node.unlink()
+        if self.mainNode.firstChild:
+            self.testElem = self.dom.createElement('dummy')
+            self.mainNode.insertBefore(self.testElem, self.mainNode.firstChild)
+        else:
+            self.testElem = self.dom.createElement('dummy')
+            self.mainNode.appendChild(self.testElem)
         self.Expand(self.root)
-        self.Unselect()
 
     # Add tree item for given parent item if node is DOM element node with
     # object/object_ref tag. xxxParent is parent xxx object
@@ -619,8 +630,11 @@ class XML_Tree(wxTreeCtrl):
         # Top-level sizer? return window's sizer
         if xxx.isSizer and isinstance(parentWin, wxWindow):
             return parentWin.GetSizer()
+        elif isinstance(xxx, xxxToolBar):
+            # If it's the main toolbar, we can't really select it
+            if xxx.parent.__class__ == xxxFrame:  return None
         elif isinstance(xxx.parent, xxxToolBar):
-            # How to get tool from toolbar?
+            # Select complete toolbar
             return parentWin
         elif isinstance(xxx.parent, xxxStdDialogButtonSizer):
             # This sizer returns non-existing children
@@ -641,7 +655,11 @@ class XML_Tree(wxTreeCtrl):
         return child
 
     def OnSelChanged(self, evt):
-        self.ChangeSelection(evt.GetItem())
+        if self.selectionChanging: return
+       self.selectionChanging = True
+        self.UnselectAll()
+        self.SelectItem(evt.GetItem())
+       self.selectionChanging = False
 
     def ChangeSelection(self, item):
         # Apply changes
@@ -761,7 +779,6 @@ class XML_Tree(wxTreeCtrl):
 #                return
 
         wxBeginBusyCursor()
-        wxYield()
         # Close old window, remember where it was
         highLight = None
         if testWin:
@@ -787,33 +804,30 @@ class XML_Tree(wxTreeCtrl):
         # Save in memory FS
         memFile = MemoryFile('xxx.xrc')
         # Create memory XML file
-        elem = xxx.element
-        # Change window id to _XRCED_T_W. This gives some name for
-        # unnamed windows, and for named gives the possibility to
-        # write sawfish scripts.
+        elem = xxx.element.cloneNode(True)
         if not xxx.name:
             name = 'noname'
         else:
             name = xxx.name
         elem.setAttribute('name', STD_NAME)
+        oldTestNode = self.testElem
+        self.testElem = elem
+        self.mainNode.replaceChild(elem, oldTestNode)
+        oldTestNode.unlink()
         # Replace wizard page class temporarily
         if xxx.__class__ in [xxxWizardPage, xxxWizardPageSimple]:
             oldCl = elem.getAttribute('class')
             elem.setAttribute('class', 'wxPanel')
         parent = elem.parentNode
-        next = elem.nextSibling
         encd = self.rootObj.params['encoding'].value()
         if not encd: encd = None
-        self.dom.writexml(open('ttt.xrc','w'), encoding=encd)
-        self.dom.writexml(memFile, encoding=encd)
-        # Put back in place
-        # Remove temporary name or restore changed
-        if not xxx.name:
-            elem.removeAttribute('name')
-        else:
-            elem.setAttribute('name', xxx.name)
-        if xxx.__class__ in [xxxWizardPage, xxxWizardPageSimple]:
-            elem.setAttribute('class', oldCl)            
+        try:
+            self.dom.writexml(memFile, encoding=encd)
+        except:
+            inf = sys.exc_info()
+            wxLogError(traceback.format_exception(inf[0], inf[1], None)[-1])
+            wxLogError('Error writing temporary file')
+            if debug: raise            
         memFile.close()                 # write to wxMemoryFS
         xmlFlags = wxXRC_NO_SUBCLASSING
         # Use translations if encoding is not specified
@@ -965,6 +979,14 @@ class XML_Tree(wxTreeCtrl):
             return False
         return not (self.IsExpanded(item) and self.GetChildrenCount(item, False))
 
+    # Override to use like single-selection tree
+    def GetSelection(self):
+        return self.selection
+    def SelectItem(self, item):
+        self.UnselectAll()
+        self.ChangeSelection(item)
+        wxTreeCtrl.SelectItem(self, item)
+
     # Pull-down
     def OnRightDown(self, evt):
         pullDownMenu = g.pullDownMenu