]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/tools/XRCed/xxx.py
Use wx.FileHistory for the recent files menu
[wxWidgets.git] / wxPython / wx / tools / XRCed / xxx.py
index e1f213d44da94a7167f3d44cbb700cf8dd4d6739..c0ef04012fc2e010ab7fa11f96e47c74ca4937c1 100644 (file)
@@ -320,9 +320,11 @@ class xxxObject:
         try:
             self.params[param].update(value)
         except KeyError:
-            p = xxxParam(g.tree.dom.createElement(param))
+            elem = g.tree.dom.createElement(param)
+            p = xxxParam(elem)
             p.update(value)
             self.params[param] = p
+            self.node.appendChild(elem)
     # Special processing for growablecols-like parameters
     # represented by several nodes
     def special(self, tag, node):
@@ -856,14 +858,6 @@ class xxxSizerItem(xxxChildContainer):
         if 'pos' in self.child.allParams:
             self.child.allParams = self.child.allParams[:]
             self.child.allParams.remove('pos')
-        # Set defaults for some children types
-        if isinstance(self.child, xxxContainer) and not self.child.isSizer:
-            for param,v in self.defaults_panel.items():
-                print param,v
-                self.set(param, v)
-        elif isinstance(self.child, xxxObject):
-            for param,v in self.defaults_control.items():
-                self.set(param, v)
     def resetChild(self, xxx):
         xxxChildContainer.resetChild(self, xxx)
         # Remove pos parameter - not needed for sizeritems
@@ -1024,14 +1018,29 @@ def custom(klassName, klass='unknown'):
     g.pullDownMenu.addCustom(klassName)
 
 class xxxParamComment(xxxParam):
+    locals = {}                         # namespace for comment directives
+    allow = None                        # undefined initial state for current file
     def __init__(self, node):
         xxxNode.__init__(self, node)
         self.textNode = node
-        # Parse "pragma" comments
-        if node.data and node.data[0] == '%':
+        # Parse "pragma" comments if enabled
+        if node.data and node.data[0] == '%' and g.conf.allowExec != 'no' and \
+               xxxParamComment.allow is not False:
+            # Show warning
+            if g.conf.allowExec == 'ask' and xxxParamComment.allow is None:
+                flags = wx.ICON_EXCLAMATION | wx.YES_NO | wx.CENTRE
+                dlg = wx.MessageDialog(g.frame, '''
+This file contains executable %comment directives. Allow to execute?''',
+                                       'Warning', flags)
+                say = dlg.ShowModal()
+                dlg.Destroy()
+                if say == wx.ID_YES:
+                    xxxParamComment.allow = True
+                else:
+                    xxxParamComment.allow = False
             try:
                 code = node.data[1:]
-                exec code in globals()
+                exec code in globals(), self.locals
             except:
                 wx.LogError('exec error: "%s"' % code)
                 print traceback.print_exc()
@@ -1191,7 +1200,8 @@ def MakeEmptyDOM(className):
 def MakeEmptyXXX(parent, className):
     # Make corresponding DOM object first
     elem = MakeEmptyDOM(className)
-    # If parent is a sizer, we should create sizeritem object, except for spacers
+    # Special handling, e.g. if parent is a sizer, we should create
+    # sizeritem object, except for spacers, etc.
     if parent:
         if parent.isSizer and className != 'spacer':
             sizerItemElem = MakeEmptyDOM(parent.itemTag)
@@ -1210,7 +1220,16 @@ def MakeEmptyXXX(parent, className):
             pageElem.appendChild(elem)
             elem = pageElem
     # Now just make object
-    return MakeXXXFromDOM(parent, elem)
+    xxx = MakeXXXFromDOM(parent, elem)
+    # Special defaults for new panels and controls
+    if isinstance(xxx, xxxSizerItem):
+        if isinstance(xxx.child, xxxContainer) and not xxx.child.isSizer:
+            for param,v in xxxSizerItem.defaults_panel.items():
+                xxx.set(param, v)
+        elif isinstance(xxx.child, xxxObject):
+            for param,v in xxxSizerItem.defaults_control.items():
+                xxx.set(param, v)
+    return xxx            
 
 # Make empty DOM element for reference
 def MakeEmptyRefDOM(ref):