wxEvtHandler and derived classes. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11962 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			179 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			179 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
 | |
| from wxPython.wx         import *
 | |
| from wxScrolledWindow    import MyCanvas
 | |
| 
 | |
| #----------------------------------------------------------------------
 | |
| 
 | |
| class MyPrintout(wxPrintout):
 | |
|     def __init__(self, canvas, log):
 | |
|         wxPrintout.__init__(self)
 | |
|         self.canvas = canvas
 | |
|         self.log = log
 | |
| 
 | |
|     def OnBeginDocument(self, start, end):
 | |
|         self.log.WriteText("wxPrintout.OnBeginDocument\n")
 | |
|         return self.base_OnBeginDocument(start, end)
 | |
| 
 | |
|     def OnEndDocument(self):
 | |
|         self.log.WriteText("wxPrintout.OnEndDocument\n")
 | |
|         self.base_OnEndDocument()
 | |
| 
 | |
|     def OnBeginPrinting(self):
 | |
|         self.log.WriteText("wxPrintout.OnBeginPrinting\n")
 | |
|         self.base_OnBeginPrinting()
 | |
| 
 | |
|     def OnEndPrinting(self):
 | |
|         self.log.WriteText("wxPrintout.OnEndPrinting\n")
 | |
|         self.base_OnEndPrinting()
 | |
| 
 | |
|     def OnPreparePrinting(self):
 | |
|         self.log.WriteText("wxPrintout.OnPreparePrinting\n")
 | |
|         self.base_OnPreparePrinting()
 | |
| 
 | |
|     def HasPage(self, page):
 | |
|         self.log.WriteText("wxPrintout.HasPage: %d\n" % page)
 | |
|         if page <= 2:
 | |
|             return true
 | |
|         else:
 | |
|             return false
 | |
| 
 | |
|     def GetPageInfo(self):
 | |
|         self.log.WriteText("wxPrintout.GetPageInfo\n")
 | |
|         return (1, 2, 1, 2)
 | |
| 
 | |
|     def OnPrintPage(self, page):
 | |
|         self.log.WriteText("wxPrintout.OnPrintPage: %d\n" % page)
 | |
|         dc = self.GetDC()
 | |
| 
 | |
|         #-------------------------------------------
 | |
|         # One possible method of setting scaling factors...
 | |
| 
 | |
|         maxX = self.canvas.getWidth()
 | |
|         maxY = self.canvas.getHeight()
 | |
| 
 | |
|         # Let's have at least 50 device units margin
 | |
|         marginX = 50
 | |
|         marginY = 50
 | |
| 
 | |
|         # Add the margin to the graphic size
 | |
|         maxX = maxX + (2 * marginX)
 | |
|         maxY = maxY + (2 * marginY)
 | |
| 
 | |
|         # Get the size of the DC in pixels
 | |
|         (w, h) = dc.GetSizeTuple()
 | |
| 
 | |
|         # Calculate a suitable scaling factor
 | |
|         scaleX = float(w) / maxX
 | |
|         scaleY = float(h) / maxY
 | |
| 
 | |
|         # 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
 | |
|         posX = (w - (self.canvas.getWidth() * actualScale)) / 2.0
 | |
|         posY = (h - (self.canvas.getHeight() * actualScale)) / 2.0
 | |
| 
 | |
|         # Set the scale and origin
 | |
|         dc.SetUserScale(actualScale, actualScale)
 | |
|         dc.SetDeviceOrigin(int(posX), int(posY))
 | |
| 
 | |
|         #-------------------------------------------
 | |
| 
 | |
|         self.canvas.DoDrawing(dc)
 | |
|         dc.DrawText("Page: %d" % page, marginX/2, maxY-marginY)
 | |
| 
 | |
|         return true
 | |
| 
 | |
| 
 | |
| #----------------------------------------------------------------------
 | |
| 
 | |
| 
 | |
| class TestPrintPanel(wxPanel):
 | |
|     def __init__(self, parent, frame, log):
 | |
|         wxPanel.__init__(self, parent, -1)
 | |
|         self.log = log
 | |
|         self.frame = frame
 | |
| 
 | |
| 
 | |
|         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)
 | |
| 
 | |
|         btn = wxButton(self, 1202, "Print Preview")
 | |
|         EVT_BUTTON(self, 1202, self.OnPrintPreview)
 | |
|         subbox.Add(btn, 1, wxGROW | wxALL, 2)
 | |
| 
 | |
|         btn = wxButton(self, 1203, "Print")
 | |
|         EVT_BUTTON(self, 1203, self.OnDoPrint)
 | |
|         subbox.Add(btn, 1, wxGROW | wxALL, 2)
 | |
| 
 | |
|         self.box.Add(subbox, 0, wxGROW)
 | |
| 
 | |
|         self.SetAutoLayout(true)
 | |
|         self.SetSizer(self.box)
 | |
| 
 | |
| 
 | |
|     def OnPrintSetup(self, event):
 | |
|         printerDialog = wxPrintDialog(self)
 | |
|         printerDialog.GetPrintDialogData().SetPrintData(self.printData)
 | |
|         printerDialog.GetPrintDialogData().SetSetupDialog(true)
 | |
|         printerDialog.ShowModal();
 | |
|         self.printData = printerDialog.GetPrintDialogData().GetPrintData()
 | |
|         printerDialog.Destroy()
 | |
| 
 | |
| 
 | |
|     def OnPrintPreview(self, event):
 | |
|         self.log.WriteText("OnPrintPreview\n")
 | |
|         printout = MyPrintout(self.canvas, self.log)
 | |
|         printout2 = MyPrintout(self.canvas, self.log)
 | |
|         self.preview = wxPrintPreview(printout, printout2, self.printData)
 | |
|         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.Initialize()
 | |
|         frame.SetPosition(self.frame.GetPosition())
 | |
|         frame.SetSize(self.frame.GetSize())
 | |
|         frame.Show(true)
 | |
| 
 | |
| 
 | |
| 
 | |
|     def OnDoPrint(self, event):
 | |
|         pdd = wxPrintDialogData()
 | |
|         pdd.SetPrintData(self.printData)
 | |
|         printer = wxPrinter(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)
 | |
|         else:
 | |
|             self.printData = printer.GetPrintDialogData().GetPrintData()
 | |
|         printout.Destroy()
 | |
| 
 | |
| 
 | |
| #----------------------------------------------------------------------
 | |
| 
 | |
| def runTest(frame, nb, log):
 | |
|     win = TestPrintPanel(nb, frame, log)
 | |
|     return win
 | |
| 
 | |
| 
 | |
| #----------------------------------------------------------------------
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| overview = """\
 | |
| """
 | |
| 
 |