]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/demo/XmlResourceHandler.py
pop the menu up on mouse down, not up (this is more common behaviour in Windows and...
[wxWidgets.git] / wxPython / demo / XmlResourceHandler.py
index 2098c5da41c40861f78fbce703de56165ae6fa34..1ef824759b0c249d10b2d3e00b13929d26f811d3 100644 (file)
@@ -1,13 +1,3 @@
-# 11/22/2003 - Jeff Grimmett (grimmtooth@softhome.net)
-#
-# o Updated for wx namespace
-# o There are issues using the wx namespace within the xrc code.
-#
-# 11/30/2003 - Jeff Grimmett (grimmtooth@softhome.net)
-#
-# o Error report: "Error: No handler found for XML node 'object', 
-#   class 'wx.StaticText'!"; no text shows on panel.
-#
 
 import  wx
 import  wx.xrc  as  xrc
@@ -19,10 +9,10 @@ resourceText = r'''<?xml version="1.0"?>
 
 <!-- Notice that the class is NOT a standard wx class -->
 
-<object class="MyBluePanel" name="MyPanel">
+<object class="MyCustomPanel" name="MyPanel">
     <size>200,100</size>
-    <object class="wx.StaticText" name="label1">
-        <label>This blue panel is a class derived from wx.Panel,\nand is loaded by a custom XmlResourceHandler.</label>
+    <object class="wxStaticText" name="label1">
+        <label>This panel is a custom class derived from wx.Panel,\nand is loaded by a custom XmlResourceHandler.</label>
         <pos>10,10</pos>
     </object>
 </object>
@@ -31,35 +21,53 @@ resourceText = r'''<?xml version="1.0"?>
 
 #----------------------------------------------------------------------
 
-class MyBluePanel(wx.Panel):
+class MyCustomPanel(wx.Panel):
     def __init__(self, parent, id, pos, size, style, name):
         wx.Panel.__init__(self, parent, id, pos, size, style, name)
 
         # This is the little bit of customization that we do for this
-        # silly example.  It could just as easily have been done in
-        # the resource.
-        self.SetBackgroundColour("BLUE")
-        self.SetForegroundColour("WHITE")
+        # silly example.  
+        self.Bind(wx.EVT_SIZE, self.OnSize)
+        t = wx.StaticText(self, -1, "MyCustomPanel")
+        f = t.GetFont()
+        f.SetWeight(wx.BOLD)
+        f.SetPointSize(f.GetPointSize()+2)
+        t.SetFont(f)
+        self.t = t
+
+    def OnSize(self, evt):
+        sz = self.GetSize()
+        w, h = self.t.GetTextExtent(self.t.GetLabel())
+        self.t.SetPosition(((sz.width-w)/2, (sz.height-h)/2))
 
 
 # To do it the more complex way, (see below) we need to write the
 # class a little differently...  This could obviously be done with a
 # single class, but I wanted to make separate ones to make clear what
 # the different requirements are.
-class PreMyBluePanel(wx.Panel):
+class PreMyCustomPanel(wx.Panel):
     def __init__(self):
         p = wx.PrePanel()
         self.PostCreate(p)
 
     def Create(self, parent, id, pos, size, style, name):
         wx.Panel.Create(self, parent, id, pos, size, style, name)
-        self.SetBackgroundColour("BLUE")
-        self.SetForegroundColour("WHITE")
-
+        self.Bind(wx.EVT_SIZE, self.OnSize)
+        t = wx.StaticText(self, -1, "MyCustomPanel")
+        f = t.GetFont()
+        f.SetWeight(wx.BOLD)
+        f.SetPointSize(f.GetPointSize()+2)
+        t.SetFont(f)
+        self.t = t
+
+    def OnSize(self, evt):
+        sz = self.GetSize()
+        w, h = self.t.GetTextExtent(self.t.GetLabel())
+        self.t.SetPosition(((sz.width-w)/2, (sz.height-h)/2))
 
 #----------------------------------------------------------------------
 
-class MyBluePanelXmlHandler(xrc.XmlResourceHandler):
+class MyCustomPanelXmlHandler(xrc.XmlResourceHandler):
     def __init__(self):
         xrc.XmlResourceHandler.__init__(self)
         # Specify the styles recognized by objects of this type
@@ -71,7 +79,7 @@ class MyBluePanelXmlHandler(xrc.XmlResourceHandler):
 
     # This method and the next one are required for XmlResourceHandlers
     def CanHandle(self, node):
-        return self.IsOfClass(node, "MyBluePanel")
+        return self.IsOfClass(node, "MyCustomPanel")
 
     def DoCreateResource(self):
         # NOTE: wxWindows can be created in either a single-phase or
@@ -96,20 +104,20 @@ class MyBluePanelXmlHandler(xrc.XmlResourceHandler):
             assert self.GetInstance() is None
 
             # Now create the object
-            panel = MyBluePanel(self.GetParentAsWindow(),
-                                self.GetID(),
-                                self.GetPosition(),
-                                self.GetSize(),
-                                self.GetStyle("style", wx.TAB_TRAVERSAL),
-                                self.GetName()
-                                )
+            panel = MyCustomPanel(self.GetParentAsWindow(),
+                                  self.GetID(),
+                                  self.GetPosition(),
+                                  self.GetSize(),
+                                  self.GetStyle("style", wx.TAB_TRAVERSAL),
+                                  self.GetName()
+                                  )
         else:
             # When using the more complex (but more flexible) method
             # the instance may already have been created, check for it
             panel = self.GetInstance()
             if panel is None:
                 # if not, then create the instance (but not the window)
-                panel = PreMyBluePanel()
+                panel = PreMyCustomPanel()
 
             # Now call the panel's Create method to actually create the window
             panel.Create(self.GetParentAsWindow(),
@@ -149,11 +157,11 @@ class TestPanel(wx.Panel):
 
         # Load the resource
         res = xrc.EmptyXmlResource()
-        res.InsertHandler(MyBluePanelXmlHandler())
+        res.InsertHandler(MyCustomPanelXmlHandler())
         res.LoadFromString(resourceText)
 
         # Now create a panel from the resource data
-        panel = res.LoadObject(self, "MyPanel", "MyBluePanel")
+        panel = res.LoadObject(self, "MyPanel", "MyCustomPanel")
 
         # and do the layout
         sizer = wx.BoxSizer(wx.VERTICAL)
@@ -177,9 +185,9 @@ def runTest(frame, nb, log):
 
 
 overview = """<html><body>
-<h2><center>wxXmlResourceHandler</center></h2>
+<h2><center>wx.XmlResourceHandler</center></h2>
 
-Deriving a class from wxXmlResourceHandler allows you to specify your
+Deriving a class from wx.XmlResourceHandler allows you to specify your
 own classes in XRC resources, and your handler class will then be used
 to create instances of that class when the resource is loaded.
 
@@ -191,5 +199,5 @@ to create instances of that class when the resource is loaded.
 if __name__ == '__main__':
     import sys,os
     import run
-    run.main(['', os.path.basename(sys.argv[0])])
+    run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])