]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/samples/wxPIA_book/Chapter-17/printing.py
move wxPython to new trunk
[wxWidgets.git] / wxPython / samples / wxPIA_book / Chapter-17 / printing.py
diff --git a/wxPython/samples/wxPIA_book/Chapter-17/printing.py b/wxPython/samples/wxPIA_book/Chapter-17/printing.py
deleted file mode 100755 (executable)
index a048149..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-import wx
-import os
-
-FONTSIZE = 10
-
-class TextDocPrintout(wx.Printout):
-    """
-    A printout class that is able to print simple text documents.
-    Does not handle page numbers or titles, and it assumes that no
-    lines are longer than what will fit within the page width.  Those
-    features are left as an exercise for the reader. ;-)
-    """
-    def __init__(self, text, title, margins):
-        wx.Printout.__init__(self, title)
-        self.lines = text.split('\n')
-        self.margins = margins
-
-
-    def HasPage(self, page):
-        return page <= self.numPages
-
-    def GetPageInfo(self):
-        return (1, self.numPages, 1, self.numPages)
-
-
-    def CalculateScale(self, dc):
-        # Scale the DC such that the printout is roughly the same as
-        # the screen scaling.
-        ppiPrinterX, ppiPrinterY = self.GetPPIPrinter()
-        ppiScreenX, ppiScreenY = self.GetPPIScreen()
-        logScale = float(ppiPrinterX)/float(ppiScreenX)
-
-        # Now adjust if the real page size is reduced (such as when
-        # drawing on a scaled wx.MemoryDC in the Print Preview.)  If
-        # page width == DC width then nothing changes, otherwise we
-        # scale down for the DC.
-        pw, ph = self.GetPageSizePixels()
-        dw, dh = dc.GetSize()
-        scale = logScale * float(dw)/float(pw)
-
-        # Set the DC's scale.
-        dc.SetUserScale(scale, scale)
-
-        # Find the logical units per millimeter (for calculating the
-        # margins)
-        self.logUnitsMM = float(ppiPrinterX)/(logScale*25.4)
-
-
-    def CalculateLayout(self, dc):
-        # Determine the position of the margins and the
-        # page/line height
-        topLeft, bottomRight = self.margins
-        dw, dh = dc.GetSize()
-        self.x1 = topLeft.x * self.logUnitsMM
-        self.y1 = topLeft.y * self.logUnitsMM
-        self.x2 = dc.DeviceToLogicalXRel(dw) - bottomRight.x * self.logUnitsMM 
-        self.y2 = dc.DeviceToLogicalYRel(dh) - bottomRight.y * self.logUnitsMM 
-
-        # use a 1mm buffer around the inside of the box, and a few
-        # pixels between each line
-        self.pageHeight = self.y2 - self.y1 - 2*self.logUnitsMM
-        font = wx.Font(FONTSIZE, wx.TELETYPE, wx.NORMAL, wx.NORMAL)
-        dc.SetFont(font)
-        self.lineHeight = dc.GetCharHeight() 
-        self.linesPerPage = int(self.pageHeight/self.lineHeight)
-
-
-    def OnPreparePrinting(self):
-        # calculate the number of pages
-        dc = self.GetDC()
-        self.CalculateScale(dc)
-        self.CalculateLayout(dc)
-        self.numPages = len(self.lines) / self.linesPerPage
-        if len(self.lines) % self.linesPerPage != 0:
-            self.numPages += 1
-
-
-    def OnPrintPage(self, page):
-        dc = self.GetDC()
-        self.CalculateScale(dc)
-        self.CalculateLayout(dc)
-
-        # draw a page outline at the margin points
-        dc.SetPen(wx.Pen("black", 0))
-        dc.SetBrush(wx.TRANSPARENT_BRUSH)
-        r = wx.RectPP((self.x1, self.y1),
-                      (self.x2, self.y2))
-        dc.DrawRectangleRect(r)
-        dc.SetClippingRect(r)
-
-        # Draw the text lines for this page
-        line = (page-1) * self.linesPerPage
-        x = self.x1 + self.logUnitsMM
-        y = self.y1 + self.logUnitsMM
-        while line < (page * self.linesPerPage):
-            dc.DrawText(self.lines[line], x, y)
-            y += self.lineHeight
-            line += 1
-            if line >= len(self.lines):
-                break
-        return True
-
-
-class PrintFrameworkSample(wx.Frame):
-    def __init__(self):
-        wx.Frame.__init__(self, None, size=(640, 480),
-                          title="Print Framework Sample")
-        self.CreateStatusBar()
-
-        # A text widget to display the doc and let it be edited
-        self.tc = wx.TextCtrl(self, -1, "",
-                              style=wx.TE_MULTILINE|wx.TE_DONTWRAP)
-        self.tc.SetFont(wx.Font(FONTSIZE, wx.TELETYPE, wx.NORMAL, wx.NORMAL))
-        filename = os.path.join(os.path.dirname(__file__), "sample-text.txt")
-        self.tc.SetValue(open(filename).read())
-        self.tc.Bind(wx.EVT_SET_FOCUS, self.OnClearSelection)
-        wx.CallAfter(self.tc.SetInsertionPoint, 0)
-
-        # Create the menu and menubar
-        menu = wx.Menu()
-        item = menu.Append(-1, "Page Setup...\tF5",
-                           "Set up page margins and etc.")
-        self.Bind(wx.EVT_MENU, self.OnPageSetup, item)
-        item = menu.Append(-1, "Print Preview...\tF6",
-                           "View the printout on-screen")
-        self.Bind(wx.EVT_MENU, self.OnPrintPreview, item)
-        item = menu.Append(-1, "Print...\tF7", "Print the document")
-        self.Bind(wx.EVT_MENU, self.OnPrint, item)
-        menu.AppendSeparator()
-##         item = menu.Append(-1, "Test other stuff...\tF9", "")
-##         self.Bind(wx.EVT_MENU, self.OnPrintTest, item)
-##         menu.AppendSeparator()
-        item = menu.Append(wx.ID_EXIT, "E&xit\tCtrl-Q", "Close this application")
-        self.Bind(wx.EVT_MENU, self.OnExit, item)
-        
-        menubar = wx.MenuBar()
-        menubar.Append(menu, "&File")
-        self.SetMenuBar(menubar)
-
-        # initialize the print data and set some default values
-        self.pdata = wx.PrintData()
-        self.pdata.SetPaperId(wx.PAPER_LETTER)
-        self.pdata.SetOrientation(wx.PORTRAIT)
-        self.margins = (wx.Point(15,15), wx.Point(15,15))
-
-
-    def OnExit(self, evt):
-        self.Close()
-
-
-    def OnClearSelection(self, evt):
-        evt.Skip()
-        wx.CallAfter(self.tc.SetInsertionPoint,
-                     self.tc.GetInsertionPoint())
-
-
-    def OnPageSetup(self, evt):
-        data = wx.PageSetupDialogData()
-        data.SetPrintData(self.pdata)
-
-        data.SetDefaultMinMargins(True)
-        data.SetMarginTopLeft(self.margins[0])
-        data.SetMarginBottomRight(self.margins[1])
-
-        dlg = wx.PageSetupDialog(self, data)
-        if dlg.ShowModal() == wx.ID_OK:
-            data = dlg.GetPageSetupData()
-            self.pdata = wx.PrintData(data.GetPrintData()) # force a copy
-            self.pdata.SetPaperId(data.GetPaperId())
-            self.margins = (data.GetMarginTopLeft(),
-                            data.GetMarginBottomRight())
-        dlg.Destroy()
-
-
-    def OnPrintPreview(self, evt):
-        data = wx.PrintDialogData(self.pdata)
-        text = self.tc.GetValue() 
-        printout1 = TextDocPrintout(text, "title", self.margins)
-        printout2 = None #TextDocPrintout(text, "title", self.margins)
-        preview = wx.PrintPreview(printout1, printout2, data)
-        if not preview.Ok():
-            wx.MessageBox("Unable to create PrintPreview!", "Error")
-        else:
-            # create the preview frame such that it overlays the app frame
-            frame = wx.PreviewFrame(preview, self, "Print Preview",
-                                    pos=self.GetPosition(),
-                                    size=self.GetSize())
-            frame.Initialize()
-            frame.Show()
-
-
-    def OnPrint(self, evt):
-        data = wx.PrintDialogData(self.pdata)
-        printer = wx.Printer(data)
-        text = self.tc.GetValue() 
-        printout = TextDocPrintout(text, "title", self.margins)
-        useSetupDialog = True
-        if not printer.Print(self, printout, useSetupDialog) \
-           and printer.GetLastError() == wx.PRINTER_ERROR:
-            wx.MessageBox(
-                "There was a problem printing.\n"
-                "Perhaps your current printer is not set correctly?",
-                "Printing Error", wx.OK)
-        else:
-            data = printer.GetPrintDialogData()
-            self.pdata = wx.PrintData(data.GetPrintData()) # force a copy
-        printout.Destroy()
-
-
-    def OnPrintTest(self, evt):
-        data = wx.PrintDialogData(self.pdata)
-        dlg = wx.PrintDialog(self, data)
-        if dlg.ShowModal() == wx.ID_OK:
-            data = dlg.GetPrintDialogData()
-            print
-            print "GetFromPage:", data.GetFromPage()
-            print "GetToPage:", data.GetToPage()
-            print "GetMinPage:", data.GetMinPage()
-            print "GetMaxPage:", data.GetMaxPage()
-            print "GetNoCopies:", data.GetNoCopies()
-            print "GetAllPages:", data.GetAllPages()
-            print "GetSelection:", data.GetSelection()
-            print "GetCollate:", data.GetCollate()
-            print "GetPrintToFile:", data.GetPrintToFile()
-
-            self.pdata = wx.PrintData(data.GetPrintData())
-            print
-            print "GetPrinterName:", self.pdata.GetPrinterName()
-
-        dlg.Destroy()
-        
-    
-app = wx.PySimpleApp()
-frm = PrintFrameworkSample()
-frm.Show()
-app.MainLoop()