]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/XmlResourceSubclass.py
   5 #---------------------------------------------------------------------- 
   7 resourceText 
= r
'''<?xml version="1.0"?> 
  10 <!-- Notice that the class IS a standard wx class, and a custom 
  11      subclass is specified as "moduleName.ClassName"  Try changing 
  12      the classname to one that does not exist and see what happens --> 
  14 <object class="wxPanel" subclass="XmlResourceSubclass.MyCustomPanel" name="MyPanel"> 
  16     <object class="wxStaticText" name="label1"> 
  17         <label>This panel is a custom class derived from wx.Panel,\nand is loaded by a custom XmlResourceHandler.</label> 
  24 #---------------------------------------------------------------------- 
  26 class MyCustomPanel(wx
.Panel
): 
  29         # the Create step is done by XRC. 
  31         self
.Bind(wx
.EVT_WINDOW_CREATE
, self
.OnCreate
) 
  32         self
.Bind(wx
.EVT_SIZE
, self
.OnSize
) 
  35     def OnCreate(self
, evt
): 
  36         # This is the little bit of customization that we do for this 
  37         # silly example.  It could just as easily have been done in 
  38         # the resource.  We do it in the EVT_WINDOW_CREATE handler  
  39         # because the window doesn't really exist yet in the __init__. 
  40         if self 
is evt
.GetEventObject(): 
  41             t 
= wx
.StaticText(self
, -1, "MyCustomPanel") 
  44             f
.SetPointSize(f
.GetPointSize()+2) 
  47             # On OSX the EVT_SIZE happens before EVT_WINDOW_CREATE !?! 
  48             # so give it another kick 
  49             wx
.CallAfter(self
.OnSize
, None) 
  52     def OnSize(self
, evt
): 
  53         if hasattr(self
, 't'): 
  55             w
, h 
= self
.t
.GetTextExtent(self
.t
.GetLabel()) 
  57             self
.t
.SetPosition(((sz
.width
-w
)/2, (sz
.height
-h
)/2)) 
  59 #---------------------------------------------------------------------- 
  62 class TestPanel(wx
.Panel
): 
  63     def __init__(self
, parent
, log
): 
  65         wx
.Panel
.__init
__(self
, parent
, -1) 
  68         label 
= wx
.StaticText(self
, -1, "The lower panel was built from this XML:") 
  69         label
.SetFont(wx
.Font(12, wx
.SWISS
, wx
.NORMAL
, wx
.BOLD
)) 
  71         text 
= wx
.TextCtrl(self
, -1, resourceText
, 
  72                           style
=wx
.TE_READONLY|wx
.TE_MULTILINE
) 
  73         text
.SetInsertionPoint(0) 
  75         line 
= wx
.StaticLine(self
, -1) 
  78         res 
= xrc
.EmptyXmlResource() 
  79         res
.LoadFromString(resourceText
) 
  81         # Now create a panel from the resource data 
  82         panel 
= res
.LoadPanel(self
, "MyPanel") 
  85         sizer 
= wx
.BoxSizer(wx
.VERTICAL
) 
  86         sizer
.Add(label
, 0, wx
.EXPAND|wx
.TOP|wx
.LEFT
, 5) 
  87         sizer
.Add(text
, 1, wx
.EXPAND|wx
.ALL
, 5) 
  88         sizer
.Add(line
, 0, wx
.EXPAND
) 
  89         sizer
.Add(panel
, 1, wx
.EXPAND|wx
.ALL
, 5) 
  92         self
.SetAutoLayout(True) 
  95 #---------------------------------------------------------------------- 
  97 def runTest(frame
, nb
, log
): 
  98     win 
= TestPanel(nb
, log
) 
 101 #---------------------------------------------------------------------- 
 105 overview 
= """<html><body> 
 106 <h2><center>wx.XmlResourceSubclass</center></h2> 
 108 Sometimes it is necessary to use custom classes, but you still want 
 109 them to be created from XRC.  The subclass XRC attribute allows you to 
 117 if __name__ 
== '__main__': 
 120     run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])