]> git.saurik.com Git - wxWidgets.git/blame - wxPython/demo/XmlResourceSubclass.py
Typos
[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">
95bfd958 17 <label>This blue panel is a class derived from wx.Panel
6fa68946
RD
18and is loaded by a using a subclass attribute of the object tag.</label>
19 <pos>10,10</pos>
20 </object>
21</object>
22</resource>
23'''
24
25#----------------------------------------------------------------------
26
5cd7ab8d 27class MyCustomPanel(wx.Panel):
6fa68946 28 def __init__(self):
8fa876ca 29 p = wx.PrePanel()
299647ac 30 # the Create step is done by XRC.
d14a1e28 31 self.PostCreate(p)
8fa876ca 32 self.Bind(wx.EVT_WINDOW_CREATE, self.OnCreate)
5cd7ab8d
RD
33 self.Bind(wx.EVT_SIZE, self.OnSize)
34
6fa68946
RD
35
36 def OnCreate(self, evt):
37 # This is the little bit of customization that we do for this
38 # silly example. It could just as easily have been done in
39 # the resource. We do it in the EVT_WINDOW_CREATE handler
40 # because the window doesn't really exist yet in the __init__.
5cd7ab8d
RD
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
6fa68946 47
5cd7ab8d
RD
48 def OnSize(self, evt):
49 sz = self.GetSize()
50 w, h = self.t.GetTextExtent(self.t.GetLabel())
51 self.t.SetPosition(((sz.width-w)/2, (sz.height-h)/2))
52
6fa68946
RD
53#----------------------------------------------------------------------
54
55
8fa876ca 56class TestPanel(wx.Panel):
6fa68946
RD
57 def __init__(self, parent, log):
58 self.log = log
8fa876ca 59 wx.Panel.__init__(self, parent, -1)
6fa68946
RD
60
61 # make the components
8fa876ca
RD
62 label = wx.StaticText(self, -1, "The lower panel was built from this XML:")
63 label.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.BOLD))
6fa68946 64
8fa876ca
RD
65 text = wx.TextCtrl(self, -1, resourceText,
66 style=wx.TE_READONLY|wx.TE_MULTILINE)
6fa68946
RD
67 text.SetInsertionPoint(0)
68
8fa876ca 69 line = wx.StaticLine(self, -1)
6fa68946
RD
70
71 # Load the resource
8fa876ca 72 res = xrc.EmptyXmlResource()
6fa68946
RD
73 res.LoadFromString(resourceText)
74
75 # Now create a panel from the resource data
76 panel = res.LoadPanel(self, "MyPanel")
77
78 # and do the layout
8fa876ca
RD
79 sizer = wx.BoxSizer(wx.VERTICAL)
80 sizer.Add(label, 0, wx.EXPAND|wx.TOP|wx.LEFT, 5)
81 sizer.Add(text, 1, wx.EXPAND|wx.ALL, 5)
82 sizer.Add(line, 0, wx.EXPAND)
83 sizer.Add(panel, 1, wx.EXPAND|wx.ALL, 5)
6fa68946
RD
84
85 self.SetSizer(sizer)
86 self.SetAutoLayout(True)
87
88
89#----------------------------------------------------------------------
90
91def runTest(frame, nb, log):
92 win = TestPanel(nb, log)
93 return win
94
95#----------------------------------------------------------------------
96
97
98
99overview = """<html><body>
95bfd958 100<h2><center>wx.XmlResourceSubclass</center></h2>
6fa68946
RD
101
102Sometimes it is necessary to use custom classes, but you still want
103them to be created from XRC. The subclass XRC attribute allows you to
104do that.
105
106</body></html>
107"""
108
109
110
111if __name__ == '__main__':
112 import sys,os
113 import run
8eca4fef 114 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
6fa68946 115