]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/XmlResourceSubclass.py
Added some info panels that show size and colour attributes about the widget
[wxWidgets.git] / wxPython / demo / XmlResourceSubclass.py
CommitLineData
6fa68946 1
8fa876ca
RD
2import wx
3import wx.xrc as xrc
6fa68946
RD
4
5#----------------------------------------------------------------------
6
7resourceText = r'''<?xml version="1.0"?>
8<resource>
9
10<!-- Notice that the class IS a standard wx class, and a custom
d14a1e28
RD
11 subclass is specified as "moduleName.ClassName" Try changing
12 the classname to one that does not exist and see what happens -->
6fa68946 13
5cd7ab8d 14<object class="wxPanel" subclass="XmlResourceSubclass.MyCustomPanel" name="MyPanel">
6fa68946 15 <size>200,100</size>
d14a1e28 16 <object class="wxStaticText" name="label1">
102e2b26 17 <label>This panel is a custom class derived from wx.Panel,\nand is loaded by a custom XmlResourceHandler.</label>
6fa68946
RD
18 <pos>10,10</pos>
19 </object>
20</object>
21</resource>
22'''
23
24#----------------------------------------------------------------------
25
5cd7ab8d 26class MyCustomPanel(wx.Panel):
6fa68946 27 def __init__(self):
8fa876ca 28 p = wx.PrePanel()
299647ac 29 # the Create step is done by XRC.
d14a1e28 30 self.PostCreate(p)
8fa876ca 31 self.Bind(wx.EVT_WINDOW_CREATE, self.OnCreate)
5cd7ab8d
RD
32 self.Bind(wx.EVT_SIZE, self.OnSize)
33
6fa68946
RD
34
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__.
45cf74cc
RD
40 if self is evt.GetEventObject():
41 t = wx.StaticText(self, -1, "MyCustomPanel")
42 f = t.GetFont()
43 f.SetWeight(wx.BOLD)
44 f.SetPointSize(f.GetPointSize()+2)
45 t.SetFont(f)
46 self.t = t
47 # On OSX the EVT_SIZE happens before EVT_WINDOW_CREATE !?!
48 # so give it another kick
49 wx.CallAfter(self.OnSize, None)
102e2b26 50 evt.Skip()
6fa68946 51
5cd7ab8d 52 def OnSize(self, evt):
45cf74cc
RD
53 if hasattr(self, 't'):
54 sz = self.GetSize()
55 w, h = self.t.GetTextExtent(self.t.GetLabel())
56 print w, h
57 self.t.SetPosition(((sz.width-w)/2, (sz.height-h)/2))
5cd7ab8d 58
6fa68946
RD
59#----------------------------------------------------------------------
60
61
8fa876ca 62class TestPanel(wx.Panel):
6fa68946
RD
63 def __init__(self, parent, log):
64 self.log = log
8fa876ca 65 wx.Panel.__init__(self, parent, -1)
6fa68946
RD
66
67 # make the components
8fa876ca
RD
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))
6fa68946 70
8fa876ca
RD
71 text = wx.TextCtrl(self, -1, resourceText,
72 style=wx.TE_READONLY|wx.TE_MULTILINE)
6fa68946
RD
73 text.SetInsertionPoint(0)
74
8fa876ca 75 line = wx.StaticLine(self, -1)
6fa68946
RD
76
77 # Load the resource
8fa876ca 78 res = xrc.EmptyXmlResource()
6fa68946
RD
79 res.LoadFromString(resourceText)
80
81 # Now create a panel from the resource data
102e2b26 82 panel = res.LoadPanel(self, "MyPanel")
6fa68946
RD
83
84 # and do the layout
8fa876ca
RD
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)
6fa68946
RD
90
91 self.SetSizer(sizer)
92 self.SetAutoLayout(True)
93
94
95#----------------------------------------------------------------------
96
97def runTest(frame, nb, log):
98 win = TestPanel(nb, log)
99 return win
100
101#----------------------------------------------------------------------
102
103
104
105overview = """<html><body>
95bfd958 106<h2><center>wx.XmlResourceSubclass</center></h2>
6fa68946
RD
107
108Sometimes it is necessary to use custom classes, but you still want
109them to be created from XRC. The subclass XRC attribute allows you to
110do that.
111
112</body></html>
113"""
114
115
116
117if __name__ == '__main__':
118 import sys,os
119 import run
8eca4fef 120 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
6fa68946 121