2f90df854e
2. the C++ versions of wxSizer and firends, Python versions are 'depreciated' 3. wxPyEvent and wxPyCommandEvent, event classes that can carry some python objects through the event system and safely come back out again. 4. wxGridSizer and wxFlexGridSizer 5. wxValidator 6. wxPyOnDemandOutputWindow 7. several tweaks, fixes and additions of missing methods, etc. 8. and probably several other things I am forgetting since CVS was down so long... git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3758 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
177 lines
5.2 KiB
Python
177 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\n")
|
|
if page == 1:
|
|
return true
|
|
else:
|
|
return false
|
|
|
|
def GetPageInfo(self):
|
|
self.log.WriteText("wxPrintout.GetPageInfo\n")
|
|
return (1, 1, 1, 1)
|
|
|
|
def OnPrintPage(self, page):
|
|
self.log.WriteText("wxPrintout.OnPrintPage\n")
|
|
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)
|
|
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 = """\
|
|
"""
|
|
|