X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1e4a197e4c60e461b8068b0619692ea083e30b8b..42f8298f6f42d5d63bb3caf65682b7d9d9f8b702:/wxPython/demo/PrintFramework.py?ds=sidebyside diff --git a/wxPython/demo/PrintFramework.py b/wxPython/demo/PrintFramework.py index 36c3ea5a2b..86dcdd5eca 100644 --- a/wxPython/demo/PrintFramework.py +++ b/wxPython/demo/PrintFramework.py @@ -1,48 +1,52 @@ -from wxPython.wx import * -from wxScrolledWindow import MyCanvas +import wx +import ScrolledWindow #---------------------------------------------------------------------- -class MyPrintout(wxPrintout): +ID_Setup = wx.NewId() +ID_Preview = wx.NewId() +ID_Print = wx.NewId() + +class MyPrintout(wx.Printout): def __init__(self, canvas, log): - wxPrintout.__init__(self) + wx.Printout.__init__(self) self.canvas = canvas self.log = log def OnBeginDocument(self, start, end): - self.log.WriteText("wxPrintout.OnBeginDocument\n") + self.log.WriteText("wx.Printout.OnBeginDocument\n") return self.base_OnBeginDocument(start, end) def OnEndDocument(self): - self.log.WriteText("wxPrintout.OnEndDocument\n") + self.log.WriteText("wx.Printout.OnEndDocument\n") self.base_OnEndDocument() def OnBeginPrinting(self): - self.log.WriteText("wxPrintout.OnBeginPrinting\n") + self.log.WriteText("wx.Printout.OnBeginPrinting\n") self.base_OnBeginPrinting() def OnEndPrinting(self): - self.log.WriteText("wxPrintout.OnEndPrinting\n") + self.log.WriteText("wx.Printout.OnEndPrinting\n") self.base_OnEndPrinting() def OnPreparePrinting(self): - self.log.WriteText("wxPrintout.OnPreparePrinting\n") + self.log.WriteText("wx.Printout.OnPreparePrinting\n") self.base_OnPreparePrinting() def HasPage(self, page): - self.log.WriteText("wxPrintout.HasPage: %d\n" % page) + self.log.WriteText("wx.Printout.HasPage: %d\n" % page) if page <= 2: return True else: return False def GetPageInfo(self): - self.log.WriteText("wxPrintout.GetPageInfo\n") + self.log.WriteText("wx.Printout.GetPageInfo\n") return (1, 2, 1, 2) def OnPrintPage(self, page): - self.log.WriteText("wxPrintout.OnPrintPage: %d\n" % page) + self.log.WriteText("wx.Printout.OnPrintPage: %d\n" % page) dc = self.GetDC() #------------------------------------------- @@ -69,7 +73,7 @@ class MyPrintout(wxPrintout): # Use x or y scaling factor, whichever fits on the DC actualScale = min(scaleX, scaleY) - # Calculate the position on the DC for centring the graphic + # Calculate the position on the DC for centering the graphic posX = (w - (self.canvas.getWidth() * actualScale)) / 2.0 posY = (h - (self.canvas.getHeight() * actualScale)) / 2.0 @@ -79,7 +83,7 @@ class MyPrintout(wxPrintout): #------------------------------------------- - self.canvas.DoDrawing(dc) + self.canvas.DoDrawing(dc, True) dc.DrawText("Page: %d" % page, marginX/2, maxY-marginY) return True @@ -88,58 +92,65 @@ class MyPrintout(wxPrintout): #---------------------------------------------------------------------- -class TestPrintPanel(wxPanel): +class TestPrintPanel(wx.Panel): def __init__(self, parent, frame, log): - wxPanel.__init__(self, parent, -1) + wx.Panel.__init__(self, parent, -1) self.log = log self.frame = frame + self.printData = wx.PrintData() + self.printData.SetPaperId(wx.PAPER_LETTER) + self.printData.SetPrintMode(wx.PRINT_MODE_PRINTER) + + self.box = wx.BoxSizer(wx.VERTICAL) + self.canvas = ScrolledWindow.MyCanvas(self) + self.box.Add(self.canvas, 1, wx.GROW) - self.printData = wxPrintData() - self.printData.SetPaperId(wxPAPER_LETTER) - - self.box = wxBoxSizer(wxVERTICAL) - self.canvas = MyCanvas(self) - self.box.Add(self.canvas, 1, wxGROW) - - subbox = wxBoxSizer(wxHORIZONTAL) - btn = wxButton(self, 1201, "Print Setup") - EVT_BUTTON(self, 1201, self.OnPrintSetup) - subbox.Add(btn, 1, wxGROW | wxALL, 2) + subbox = wx.BoxSizer(wx.HORIZONTAL) + btn = wx.Button(self, ID_Setup, "Print Setup") + self.Bind(wx.EVT_BUTTON, self.OnPrintSetup, btn) + subbox.Add(btn, 1, wx.GROW | wx.ALL, 2) - btn = wxButton(self, 1202, "Print Preview") - EVT_BUTTON(self, 1202, self.OnPrintPreview) - subbox.Add(btn, 1, wxGROW | wxALL, 2) + btn = wx.Button(self, ID_Preview, "Print Preview") + self.Bind(wx.EVT_BUTTON, self.OnPrintPreview, btn) + subbox.Add(btn, 1, wx.GROW | wx.ALL, 2) - btn = wxButton(self, 1203, "Print") - EVT_BUTTON(self, 1203, self.OnDoPrint) - subbox.Add(btn, 1, wxGROW | wxALL, 2) + btn = wx.Button(self, ID_Print, "Print") + self.Bind(wx.EVT_BUTTON, self.OnDoPrint, btn) + subbox.Add(btn, 1, wx.GROW | wx.ALL, 2) - self.box.Add(subbox, 0, wxGROW) + self.box.Add(subbox, 0, wx.GROW) self.SetAutoLayout(True) self.SetSizer(self.box) def OnPrintSetup(self, event): - printerDialog = wxPrintDialog(self) - printerDialog.GetPrintDialogData().SetPrintData(self.printData) + data = wx.PrintDialogData(self.printData) + printerDialog = wx.PrintDialog(self, data) printerDialog.GetPrintDialogData().SetSetupDialog(True) printerDialog.ShowModal(); - self.printData = printerDialog.GetPrintDialogData().GetPrintData() + + # this makes a copy of the wx.PrintData instead of just saving + # a reference to the one inside the PrintDialogData that will + # be destroyed when the dialog is destroyed + self.printData = wx.PrintData( printerDialog.GetPrintDialogData().GetPrintData() ) + printerDialog.Destroy() def OnPrintPreview(self, event): self.log.WriteText("OnPrintPreview\n") + data = wx.PrintDialogData(self.printData) printout = MyPrintout(self.canvas, self.log) printout2 = MyPrintout(self.canvas, self.log) - self.preview = wxPrintPreview(printout, printout2, self.printData) + self.preview = wx.PrintPreview(printout, printout2, data) + if not self.preview.Ok(): self.log.WriteText("Houston, we have a problem...\n") return - frame = wxPreviewFrame(self.preview, self.frame, "This is a print preview") + frame = wx.PreviewFrame(self.preview, self.frame, "This is a print preview") frame.Initialize() frame.SetPosition(self.frame.GetPosition()) @@ -149,14 +160,15 @@ class TestPrintPanel(wxPanel): def OnDoPrint(self, event): - pdd = wxPrintDialogData() - pdd.SetPrintData(self.printData) - printer = wxPrinter(pdd) + pdd = wx.PrintDialogData(self.printData) + pdd.SetToPage(2) + printer = wx.Printer(pdd) printout = MyPrintout(self.canvas, self.log) - if not printer.Print(self.frame, printout): - wxMessageBox("There was a problem printing.\nPerhaps your current printer is not set correctly?", "Printing", wxOK) + + if not printer.Print(self.frame, printout, True): + wx.MessageBox("There was a problem printing.\nPerhaps your current printer is not set correctly?", "Printing", wx.OK) else: - self.printData = printer.GetPrintDialogData().GetPrintData() + self.printData = wx.PrintData( printer.GetPrintDialogData().GetPrintData() ) printout.Destroy() @@ -174,5 +186,50 @@ def runTest(frame, nb, log): overview = """\ + + +

PrintFramework

+ +This is an overview of the classes and methods used to print documents. +It also demonstrates how to do print previews and invoke the printer +setup dialog. + +

Classes demonstrated here:

+

+ +

Other classes are also demonstrated, but this is the gist of the printer interface +framework in wxPython. + + + + """ + +if __name__ == '__main__': + import sys,os + import run + run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) +