]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/samples/wxPIA_book/Chapter-05/modelExample.py
Added the sample code from wxPython In Action to the samples dir
[wxWidgets.git] / wxPython / samples / wxPIA_book / Chapter-05 / modelExample.py
diff --git a/wxPython/samples/wxPIA_book/Chapter-05/modelExample.py b/wxPython/samples/wxPIA_book/Chapter-05/modelExample.py
new file mode 100644 (file)
index 0000000..be3c687
--- /dev/null
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+
+import wx
+import abstractmodel
+
+class SimpleName(abstractmodel.AbstractModel):
+    
+    def __init__(self, first="", last=""):
+        abstractmodel.AbstractModel.__init__(self)
+        self.set(first, last)
+        
+    def set(self, first, last):
+        self.first = first
+        self.last = last
+        self.update()                                     
+
+class ModelExample(wx.Frame):
+    
+    def __init__(self, parent, id):
+        wx.Frame.__init__(self, parent, id, 'Flintstones', 
+                size=(340, 200))
+        panel = wx.Panel(self)   
+        panel.SetBackgroundColour("White")
+        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow) 
+        self.textFields = {}
+        self.createTextFields(panel)     
+        self.model = SimpleName()                         
+        self.model.addListener(self.OnUpdate)             
+        self.createButtonBar(panel)
+        
+    def buttonData(self):
+        return (("Fredify", self.OnFred),
+                ("Wilmafy", self.OnWilma),
+                ("Barnify", self.OnBarney),
+                ("Bettify", self.OnBetty))
+        
+    def createButtonBar(self, panel, yPos = 0):
+        xPos = 0
+        for eachLabel, eachHandler in self.buttonData():
+            pos = (xPos, yPos)
+            button = self.buildOneButton(panel, eachLabel, eachHandler, pos)
+            xPos += button.GetSize().width
+        
+    def buildOneButton(self, parent, label, handler, pos=(0,0)):
+        button = wx.Button(parent, -1, label, pos)
+        self.Bind(wx.EVT_BUTTON, handler, button)
+        return button
+       
+    def textFieldData(self):
+        return (("First Name", (10, 50)),
+                ("Last Name", (10, 80)))
+        
+    def createTextFields(self, panel):
+        for eachLabel, eachPos in self.textFieldData():
+            self.createCaptionedText(panel, eachLabel, eachPos)
+                
+    def createCaptionedText(self, panel, label, pos):
+        static = wx.StaticText(panel, wx.NewId(), label, pos)
+        static.SetBackgroundColour("White")
+        textPos = (pos[0] + 75, pos[1])
+        self.textFields[label] = wx.TextCtrl(panel, wx.NewId(), 
+                "", size=(100, -1), pos=textPos,
+                style=wx.TE_READONLY)
+        
+    def OnUpdate(self, model):
+        self.textFields["First Name"].SetValue(model.first)    
+        self.textFields["Last Name"].SetValue(model.last)      
+        
+    def OnFred(self, event):                                   
+        self.model.set("Fred", "Flintstone")                   
+                                                               
+    def OnBarney(self, event):                                 
+        self.model.set("Barney", "Rubble")                     
+                                                               
+    def OnWilma(self, event):                                  
+        self.model.set("Wilma", "Flintstone")                  
+                                                               
+    def OnBetty(self, event):                                  
+        self.model.set("Betty", "Rubble")                      
+        
+    def OnCloseWindow(self, event):
+        self.Destroy()
+            
+if __name__ == '__main__':
+    app = wx.PySimpleApp()
+    frame = ModelExample(parent=None, id=-1)
+    frame.Show()
+    app.MainLoop()
+