X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ec873c943d71f0d5f13e3398557071448cda6c23..a4027e74873007e3430af3bd77019bcab76f6c04:/wxPython/samples/wxPIA_book/Chapter-06/example7.py diff --git a/wxPython/samples/wxPIA_book/Chapter-06/example7.py b/wxPython/samples/wxPIA_book/Chapter-06/example7.py deleted file mode 100644 index 74f91ac4d8..0000000000 --- a/wxPython/samples/wxPIA_book/Chapter-06/example7.py +++ /dev/null @@ -1,331 +0,0 @@ -import wx -import wx.html -import cPickle -import os -from wx.lib import buttons - -from example1 import SketchWindow - -class SketchFrame(wx.Frame): - def __init__(self, parent): - self.title = "Sketch Frame" - wx.Frame.__init__(self, parent, -1, self.title, - size=(800,600)) - self.filename = "" - self.sketch = SketchWindow(self, -1) - wx.EVT_MOTION(self.sketch, self.OnSketchMotion) - self.initStatusBar() - self.createMenuBar() - self.createToolBar() - self.createPanel() - - def createPanel(self): - controlPanel = ControlPanel(self, -1, self.sketch) - box = wx.BoxSizer(wx.HORIZONTAL) - box.Add(controlPanel, 0, wx.EXPAND) - box.Add(self.sketch, 1, wx.EXPAND) - self.SetSizer(box) - - 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), - ("&Other...", "", self.OnOtherColor, wx.ITEM_RADIO))), - ("", "", ""), - ("About...", "Show about window", self.OnAbout), - ("&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 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() - - def SaveFile(self): - if self.filename: - data = self.sketch.GetLinesData() - f = open(self.filename, 'w') - cPickle.dump(data, f) - f.close() - - def ReadFile(self): - if self.filename: - try: - f = open(self.filename, 'r') - data = cPickle.load(f) - f.close() - self.sketch.SetLinesData(data) - except cPickle.UnpicklingError: - wx.MessageBox("%s is not a sketch file." % self.filename, - "oops!", style=wx.OK|wx.ICON_EXCLAMATION) - - wildcard = "Sketch files (*.sketch)|*.sketch|All files (*.*)|*.*" - - def OnOpen(self, event): - dlg = wx.FileDialog(self, "Open sketch file...", os.getcwd(), - style=wx.OPEN, wildcard=self.wildcard) - if dlg.ShowModal() == wx.ID_OK: - self.filename = dlg.GetPath() - self.ReadFile() - self.SetTitle(self.title + ' -- ' + self.filename) - dlg.Destroy() - - def OnSave(self, event): - if not self.filename: - self.OnSaveAs(event) - else: - self.SaveFile() - - def OnSaveAs(self, event): - dlg = wx.FileDialog(self, "Save sketch as...", os.getcwd(), - style=wx.SAVE | wx.OVERWRITE_PROMPT, - wildcard = self.wildcard) - if dlg.ShowModal() == wx.ID_OK: - filename = dlg.GetPath() - if not os.path.splitext(filename)[1]: - filename = filename + '.sketch' - self.filename = filename - self.SaveFile() - self.SetTitle(self.title + ' -- ' + self.filename) - dlg.Destroy() - - def OnOtherColor(self, event): - dlg = wx.ColourDialog(self) - dlg.GetColourData().SetChooseFull(True) - if dlg.ShowModal() == wx.ID_OK: - self.sketch.SetColor(dlg.GetColourData().GetColour()) - dlg.Destroy() - - def OnAbout(self, event): - dlg = SketchAbout(self) - dlg.ShowModal() - dlg.Destroy() - - -class SketchAbout(wx.Dialog): - text = ''' - - -
- - - -

Sketch!

-
-

Sketch is a demonstration program for wxPython In Action -Chapter 7. It is based on the SuperDoodle demo included with wxPython, -available at http://www.wxpython.org/ -

- -

SuperDoodle and wxPython are brought to you by -Robin Dunn and Total Control Software, Copyright -© 1997-2006.

- - -''' - - def __init__(self, parent): - wx.Dialog.__init__(self, parent, -1, 'About Sketch', - size=(440, 400) ) - - html = wx.html.HtmlWindow(self) - html.SetPage(self.text) - button = wx.Button(self, wx.ID_OK, "Okay") - - sizer = wx.BoxSizer(wx.VERTICAL) - sizer.Add(html, 1, wx.EXPAND|wx.ALL, 5) - sizer.Add(button, 0, wx.ALIGN_CENTER|wx.ALL, 5) - - self.SetSizer(sizer) - self.Layout() - - - -class ControlPanel(wx.Panel): - - BMP_SIZE = 16 - BMP_BORDER = 3 - NUM_COLS = 4 - SPACING = 4 - - colorList = ('Black', 'Yellow', 'Red', 'Green', 'Blue', 'Purple', - 'Brown', 'Aquamarine', 'Forest Green', 'Light Blue', - 'Goldenrod', 'Cyan', 'Orange', 'Navy', 'Dark Grey', - 'Light Grey') - maxThickness = 16 - - def __init__(self, parent, ID, sketch): - wx.Panel.__init__(self, parent, ID, style=wx.RAISED_BORDER) - self.sketch = sketch - buttonSize = (self.BMP_SIZE + 2 * self.BMP_BORDER, - self.BMP_SIZE + 2 * self.BMP_BORDER) - colorGrid = self.createColorGrid(parent, buttonSize) - thicknessGrid = self.createThicknessGrid(buttonSize) - self.layout(colorGrid, thicknessGrid) - - def createColorGrid(self, parent, buttonSize): - self.colorMap = {} - self.colorButtons = {} - colorGrid = wx.GridSizer(cols=self.NUM_COLS, hgap=2, vgap=2) - for eachColor in self.colorList: - bmp = parent.MakeBitmap(eachColor) - b = buttons.GenBitmapToggleButton(self, -1, bmp, size=buttonSize) - b.SetBezelWidth(1) - b.SetUseFocusIndicator(False) - self.Bind(wx.EVT_BUTTON, self.OnSetColour, b) - colorGrid.Add(b, 0) - self.colorMap[b.GetId()] = eachColor - self.colorButtons[eachColor] = b - self.colorButtons[self.colorList[0]].SetToggle(True) - return colorGrid - - def createThicknessGrid(self, buttonSize): - self.thicknessIdMap = {} - self.thicknessButtons = {} - thicknessGrid = wx.GridSizer(cols=self.NUM_COLS, hgap=2, vgap=2) - for x in range(1, self.maxThickness + 1): - b = buttons.GenToggleButton(self, -1, str(x), size=buttonSize) - b.SetBezelWidth(1) - b.SetUseFocusIndicator(False) - self.Bind(wx.EVT_BUTTON, self.OnSetThickness, b) - thicknessGrid.Add(b, 0) - self.thicknessIdMap[b.GetId()] = x - self.thicknessButtons[x] = b - self.thicknessButtons[1].SetToggle(True) - return thicknessGrid - - def layout(self, colorGrid, thicknessGrid): - box = wx.BoxSizer(wx.VERTICAL) - box.Add(colorGrid, 0, wx.ALL, self.SPACING) - box.Add(thicknessGrid, 0, wx.ALL, self.SPACING) - self.SetSizer(box) - box.Fit(self) - - def OnSetColour(self, event): - color = self.colorMap[event.GetId()] - if color != self.sketch.color and self.sketch.color in self.colorButtons: - self.colorButtons[self.sketch.color].SetToggle(False) - self.sketch.SetColor(color) - - def OnSetThickness(self, event): - thickness = self.thicknessIdMap[event.GetId()] - if thickness != self.sketch.thickness: - self.thicknessButtons[self.sketch.thickness].SetToggle(False) - self.sketch.SetThickness(thickness) - - -class SketchApp(wx.App): - - def OnInit(self): - bmp = wx.Image("splash.png").ConvertToBitmap() - wx.SplashScreen(bmp, wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT, - 1000, None, -1) - wx.Yield() - - frame = SketchFrame(None) - frame.Show(True) - self.SetTopWindow(frame) - return True - -if __name__ == '__main__': - app = SketchApp(False) - app.MainLoop()