1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import wx
20
21
23 """
24 This class has the functionality of printing out a Timeline document.
25 Responds to calls such as OnPrintPage and HasPage.
26 Instances of this class are passed to wx.Printer.Print() or a
27 wx.PrintPreview object to initiate printing or previewing.
28 """
29
30 - def __init__(self, drawing_area, preview=False):
34
37
40
43
46
49
50 - def HasPage(self, page):
51 if page <= 1:
52 return True
53 else:
54 return False
55
56 - def GetPageInfo(self):
57 minPage = 1
58 maxPage = 1
59 pageFrom = 1
60 pageTo = 1
61 return (minPage, maxPage, pageFrom, pageTo)
62
63 - def OnPrintPage(self, page):
64 def SetScaleAndDeviceOrigin(dc):
65 (panel_width, panel_height) = self.drawing_area.GetSize()
66
67 x_margin = 50
68 y_margin = 50
69
70 x_max = panel_width + (2 * x_margin)
71 y_max = panel_height + (2 * y_margin)
72
73 (dc_width, dc_heighth) = dc.GetSizeTuple()
74
75 x_scale = float(dc_width) / x_max
76 y_scale = float(dc_heighth) / y_max
77
78 scale = min(x_scale, y_scale)
79
80 x_pos = (dc_width - (panel_width * scale)) / 2.0
81 y_pos = (dc_heighth - (panel_height * scale)) / 2.0
82 dc.SetUserScale(scale, scale)
83 dc.SetDeviceOrigin(int(x_pos), int(y_pos))
84 dc = self.GetDC()
85 SetScaleAndDeviceOrigin(dc)
86 dc.BeginDrawing()
87 dc.DrawBitmap(self.drawing_area.get_current_image(), 0, 0, True)
88 dc.EndDrawing()
89 return True
90
91
93 pdd = wx.PrintDialogData(main_frame.printData)
94 pdd.SetToPage(1)
95 printer = wx.Printer(pdd)
96 printout = TimelinePrintout(main_frame.main_panel.drawing_area, False)
97 frame = wx.GetApp().GetTopWindow()
98 if not printer.Print(frame, printout, True):
99 if printer.GetLastError() == wx.PRINTER_ERROR:
100 wx.MessageBox(_("There was a problem printing.\nPerhaps your current printer is not set correctly?"), _("Printing"), wx.OK)
101 else:
102 main_frame.printData = wx.PrintData(printer.GetPrintDialogData().GetPrintData())
103 printout.Destroy()
104
105
107 data = wx.PrintDialogData(main_frame.printData)
108 printout_preview = TimelinePrintout(main_frame.main_panel.drawing_area, True)
109 printout = TimelinePrintout(main_frame.main_panel.drawing_area, False)
110 preview = wx.PrintPreview(printout_preview, printout, data)
111 if not preview.Ok():
112 return
113 frame = wx.GetApp().GetTopWindow()
114 pfrm = wx.PreviewFrame(preview, frame, _("Print preview"))
115 pfrm.Initialize()
116 pfrm.SetPosition(frame.GetPosition())
117 pfrm.SetSize(frame.GetSize())
118 pfrm.Show(True)
119
120
122 psdd = wx.PageSetupDialogData(main_frame.printData)
123 psdd.CalculatePaperSizeFromId()
124 dlg = wx.PageSetupDialog(main_frame.main_panel.drawing_area, psdd)
125 dlg.ShowModal()
126
127
128
129 main_frame.printData = wx.PrintData(dlg.GetPageSetupData().GetPrintData())
130 dlg.Destroy()
131