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.custom = ['custom', 'User-defined controls']
+ self.customMap = {}
+
+ def addCustom(self, klass):
+ n = len(self.custom)-2
+ self.custom.append((ID_NEW.CUSTOM + n, klass))
+ self.customMap[ID_NEW.CUSTOM + n] = klass
################################################################################
l4 = wx.Window(w, -1, wx.Point(pos.x, pos.y + size.height - 2), wx.Size(size.width, 2))
l4.SetBackgroundColour(wx.RED)
self.lines = [l1, l2, l3, l4]
+ self.size = size
# Move highlight to a new position
def Replace(self, pos, size):
if size.width == -1: size.width = 0
self.lines[1].SetDimensions(pos.x, pos.y, 2, size.height)
self.lines[2].SetDimensions(pos.x + size.width - 2, pos.y, 2, size.height)
self.lines[3].SetDimensions(pos.x, pos.y + size.height - 2, size.width, 2)
+ self.size = size
# Remove it
def Remove(self):
map(wx.Window.Destroy, self.lines)
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)
+ pos = self.FindNodePos(item, obj)
size = obj.GetSize()
# Highlight
# Negative positions are not working quite well
- if g.testWin.highLight:
- g.testWin.highLight.Replace(pos, size)
+ hl = g.testWin.highLight
+ # If highlight object has the same size SetDimension does not repaint it
+ # so we must remove the old HL window
+ if hl and hl.size == size:
+ hl.Remove()
+ hl = None
+ if hl:
+ hl.Replace(pos, size)
else:
- g.testWin.highLight = HighLightBox(pos, size)
- g.testWin.highLight.Refresh()
- g.testWin.highLight.item = item
+ g.testWin.highLight = hl = HighLightBox(pos, size)
+ hl.Refresh()
+ hl.item = item
def ShowTestWindow(self, item):
xxx = self.GetPyData(item)
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:
res = xrc.XmlResource('', xmlFlags)
xrc.XmlResource.Set(res) # set as global
# Register handlers
- addHandlers(res)
- # Test Test.py
- #import Test
- #res.InsertHandler(Test.TestXmlHandler())
- # Test test.so
- import ctypes
- test = ctypes.CDLL('test.so')
- addr = int(str(res.this).split('_')[1], 16)
- #test._Z17AddTestXmlHandlerP13wxXmlResource(ctypes.c_void_p(addr))
- #test.AddTestXmlHandler(ctypes.c_void_p(addr))
+ 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 len(pullDownMenu.custom) > 2:
+ 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')