]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/samples/wxPIA_book/Chapter-06/example4.py
Added the sample code from wxPython In Action to the samples dir
[wxWidgets.git] / wxPython / samples / wxPIA_book / Chapter-06 / example4.py
diff --git a/wxPython/samples/wxPIA_book/Chapter-06/example4.py b/wxPython/samples/wxPIA_book/Chapter-06/example4.py
new file mode 100644 (file)
index 0000000..05bc7d7
--- /dev/null
@@ -0,0 +1,92 @@
+import wx
+from example1 import SketchWindow
+
+
+class SketchFrame(wx.Frame):
+    def __init__(self, parent):
+        wx.Frame.__init__(self, parent, -1, "Sketch Frame",
+                size=(800,600))
+        self.sketch = SketchWindow(self, -1)
+        self.sketch.Bind(wx.EVT_MOTION, self.OnSketchMotion)
+        self.initStatusBar()
+        self.createMenuBar()
+
+    def initStatusBar(self):
+        self.statusbar = self.CreateStatusBar()
+        self.statusbar.SetFieldsCount(3)
+        self.statusbar.SetStatusWidths([-1, -2, -3])
+
+    def OnSketchMotion(self, event):
+        self.statusbar.SetStatusText("Pos: %s" %
+                str(event.GetPositionTuple()), 0)
+        self.statusbar.SetStatusText("Current Pts: %s" %
+                len(self.sketch.curLine), 1)
+        self.statusbar.SetStatusText("Line Count: %s" %
+                len(self.sketch.lines), 2)
+        event.Skip()
+
+    def menuData(self):
+        return [("&File", (
+                    ("&New", "New Sketch file", self.OnNew),
+                    ("&Open", "Open sketch file", self.OnOpen),
+                    ("&Save", "Save sketch file", self.OnSave),
+                    ("", "", ""),
+                    ("&Color", (
+                        ("&Black", "", self.OnColor,
+                           wx.ITEM_RADIO),
+                        ("&Red", "", self.OnColor,
+                           wx.ITEM_RADIO),
+                        ("&Green", "", self.OnColor,
+                           wx.ITEM_RADIO),
+                        ("&Blue", "", self.OnColor,
+                           wx.ITEM_RADIO))),
+                    ("", "", ""),
+                    ("&Quit", "Quit", self.OnCloseWindow)))]
+
+    def createMenuBar(self):
+        menuBar = wx.MenuBar()
+        for eachMenuData in self.menuData():
+            menuLabel = eachMenuData[0]
+            menuItems = eachMenuData[1]
+            menuBar.Append(self.createMenu(menuItems), menuLabel)
+        self.SetMenuBar(menuBar)
+
+    def createMenu(self, menuData):
+        menu = wx.Menu()
+        for eachItem in menuData:
+            if len(eachItem) == 2:
+                label = eachItem[0]
+                subMenu = self.createMenu(eachItem[1])
+                menu.AppendMenu(wx.NewId(), label, subMenu)
+            else:
+                self.createMenuItem(menu, *eachItem)
+        return menu
+
+    def createMenuItem(self, menu, label, status, handler,
+                       kind=wx.ITEM_NORMAL):
+        if not label:
+            menu.AppendSeparator()
+            return
+        menuItem = menu.Append(-1, label, status, kind)
+        self.Bind(wx.EVT_MENU, handler, menuItem)
+
+    def OnNew(self, event): pass
+    def OnOpen(self, event): pass
+    def OnSave(self, event): pass
+
+    def OnColor(self, event):
+        menubar = self.GetMenuBar()
+        itemId = event.GetId()
+        item = menubar.FindItemById(itemId)
+        color = item.GetLabel()
+        self.sketch.SetColor(color)
+
+    def OnCloseWindow(self, event):
+        self.Destroy()
+
+
+if __name__ == '__main__':
+    app = wx.PySimpleApp()
+    frame = SketchFrame(None)
+    frame.Show(True)
+    app.MainLoop()