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):
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
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()
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)
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):