REF = wx.NewId()
COMMENT = wx.NewId()
+ CUSTOM = wx.NewId()
+ for i in range(99): wx.NewId() # reserve IDs for custom controls
+
LAST = wx.NewId()
ID_NEW.HELP_BUTTON: ('wxID_HELP', '&Help'),
ID_NEW.CONTEXT_HELP_BUTTON: ('wxID_CONTEXT_HELP', '&Help'),
}
-
+ self.clearCustom()
+
+ def clearCustom(self):
+ # Custom controls
+ self.custom = [['custom', 'User-defined controls']]
+ self.customMap = {}
+
+ def addCustom(self, klass):
+ n = len(self.custom[0])-2
+ self.custom[0].append((ID_NEW.CUSTOM + n, klass))
+ self.customMap[ID_NEW.CUSTOM + n] = klass
################################################################################
class XML_Tree(wx.TreeCtrl):
def __init__(self, parent, id):
- wx.TreeCtrl.__init__(self, parent, id, style = wx.TR_HAS_BUTTONS | wx.TR_MULTIPLE)
+ wx.TreeCtrl.__init__(self, parent, id,
+ style = wx.TR_HAS_BUTTONS | wx.TR_MULTIPLE | wx.TR_EDIT_LABELS)
self.SetBackgroundColour(wx.Colour(224, 248, 224))
- self.fontComment = wx.Font(g.sysFont().GetPointSize(), wx.DEFAULT,
- wx.FONTSTYLE_ITALIC, wx.NORMAL)
+ self.fontComment = wx.FFont(self.GetFont().GetPointSize(),
+ self.GetFont().GetFamily(),
+ wx.FONTFLAG_ITALIC)
# Register events
wx.EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
# One works on Linux, another on Windows
wx.EVT_RIGHT_DOWN(self, self.OnRightDown)
wx.EVT_TREE_ITEM_EXPANDED(self, self.GetId(), self.OnItemExpandedCollapsed)
wx.EVT_TREE_ITEM_COLLAPSED(self, self.GetId(), self.OnItemExpandedCollapsed)
+ self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnBeginLabelEdit)
+ self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnEndLabelEdit)
self.selection = None
self.selectionChanging = False
# Different color for references and comments
if xxx.className == 'comment':
self.SetItemTextColour(newItem, 'Blue')
+ self.SetItemFont(newItem, self.fontComment)
elif treeObj.ref:
self.SetItemTextColour(newItem, 'DarkGreen')
elif treeObj.hasStyle and treeObj.params.get('hidden', False):
testWin = g.testWin
# Create a window with this resource
xxx = self.GetPyData(item).treeObject()
-
- # If frame
-# if xxx.__class__ == xxxFrame:
- # Frame can't have many children,
- # but it's first child possibly can...
-# child = self.GetFirstChild(item)[0]
-# if child.IsOk() and self.GetPyData(child).__class__ == xxxPanel:
-# # Clean-up before recursive call or error
-# wx.MemoryFSHandler.RemoveFile('xxx.xrc')
-# wx.EndBusyCursor()
-# self.CreateTestWin(child)
-# return
-
# Close old window, remember where it was
highLight = None
if testWin:
if not g.currentEncoding:
xmlFlags != xrc.XRC_USE_LOCALE
res = xrc.XmlResource('', xmlFlags)
+ xrc.XmlResource.Set(res) # set as global
+ # Register handlers
+ addHandlers()
+ # Same module list
res.Load('memory:xxx.xrc')
try:
if xxx.__class__ == xxxFrame:
inf = sys.exc_info()
wx.LogError(traceback.format_exception(inf[0], inf[1], None)[-1])
wx.LogError('Error loading resource')
+ # Cleanup
+ res.Unload('xxx.xrc')
+ xrc.XmlResource.Set(None)
wx.MemoryFSHandler.RemoveFile('xxx.xrc')
def CloseTestWindow(self):
m.Enable(ID_NEW.SPACER, False)
if xxx.__class__ is not xxxFrame:
m.Enable(ID_NEW.MENU_BAR, False)
+ # Add custom controls menu
+ if pullDownMenu.customMap:
+ SetMenu(m, pullDownMenu.custom)
m.AppendSeparator()
m.Append(ID_NEW.REF, 'reference...', 'Create object_ref node')
m.Append(ID_NEW.COMMENT, 'comment', 'Create comment node')
# Set global modified state
g.frame.SetModified()
+ def OnBeginLabelEdit(self, evt):
+ xxx = self.GetPyData(evt.GetItem())
+ if xxx.isElement:
+ evt.Veto()
+ else:
+ evt.Skip()
+
+ def OnEndLabelEdit(self, evt):
+ xxx = self.GetPyData(evt.GetItem())
+ node = xxx.node
+ if not xxx.isElement:
+ node.data = evt.GetLabel()
+ g.panel.SetData(xxx)
+ evt.Skip()