--- /dev/null
+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()
+ self.createToolBar()
+
+ 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 createToolBar(self):
+ toolbar = self.CreateToolBar()
+ for each in self.toolbarData():
+ self.createSimpleTool(toolbar, *each)
+ toolbar.AddSeparator()
+ for each in self.toolbarColorData():
+ self.createColorTool(toolbar, each)
+ toolbar.Realize()
+
+ def createSimpleTool(self, toolbar, label, filename, help, handler):
+ if not label:
+ toolbar.AddSeparator()
+ return
+ bmp = wx.Image(filename, wx.BITMAP_TYPE_BMP).ConvertToBitmap()
+ tool = toolbar.AddSimpleTool(-1, bmp, label, help)
+ self.Bind(wx.EVT_MENU, handler, tool)
+
+ def toolbarData(self):
+ return (("New", "new.bmp", "Create new sketch", self.OnNew),
+ ("", "", "", ""),
+ ("Open", "open.bmp", "Open existing sketch", self.OnOpen),
+ ("Save", "save.bmp", "Save existing sketch", self.OnSave))
+
+ def createColorTool(self, toolbar, color):
+ bmp = self.MakeBitmap(color)
+ tool = toolbar.AddRadioTool(-1, bmp, shortHelp=color)
+ self.Bind(wx.EVT_MENU, self.OnColor, tool)
+
+ def MakeBitmap(self, color):
+ bmp = wx.EmptyBitmap(16, 15)
+ dc = wx.MemoryDC()
+ dc.SelectObject(bmp)
+ dc.SetBackground(wx.Brush(color))
+ dc.Clear()
+ dc.SelectObject(wx.NullBitmap)
+ return bmp
+
+ def toolbarColorData(self):
+ return ("Black", "Red", "Green", "Blue")
+
+ 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)
+ if not item:
+ toolbar = self.GetToolBar()
+ item = toolbar.FindById(itemId)
+ color = item.GetShortHelp()
+ else:
+ 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()