]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/print.h
Avoid needless second string conversion when adding files to memory FS.
[wxWidgets.git] / interface / wx / print.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: print.h
e54c96f1 3// Purpose: interface of wxPreviewControlBar
23324ae1
FM
4// Author: wxWidgets team
5// RCS-ID: $Id$
526954c5 6// Licence: wxWindows licence
23324ae1
FM
7/////////////////////////////////////////////////////////////////////////////
8
9/**
10 @class wxPreviewControlBar
7c913512 11
23324ae1 12 This is the default implementation of the preview control bar, a panel
b1b95a65
FM
13 with buttons and a zoom control.
14
15 You can derive a new class from this and override some or all member functions
16 to change the behaviour and appearance; or you can leave it as it is.
7c913512 17
23324ae1
FM
18 @library{wxbase}
19 @category{printing}
7c913512 20
e54c96f1 21 @see wxPreviewFrame, wxPreviewCanvas, wxPrintPreview
23324ae1
FM
22*/
23class wxPreviewControlBar : public wxPanel
24{
25public:
b1b95a65
FM
26
27 /**
28 Constructor.
29
30 The @a buttons parameter may be a combination of the following, using the bitwise
31 'or' operator:
32
09a728e1
FM
33 @beginFlagTable
34 @flag{wxPREVIEW_PRINT}
b1b95a65 35 Create a print button.
09a728e1 36 @flag{wxPREVIEW_NEXT}
b1b95a65 37 Create a next page button.
09a728e1 38 @flag{wxPREVIEW_PREVIOUS}
b1b95a65 39 Create a previous page button.
09a728e1 40 @flag{wxPREVIEW_ZOOM}
b1b95a65 41 Create a zoom control.
09a728e1 42 @flag{wxPREVIEW_DEFAULT}
b1b95a65
FM
43 Equivalent to a combination of @c wxPREVIEW_PREVIOUS, @c wxPREVIEW_NEXT
44 and @c wxPREVIEW_ZOOM.
09a728e1 45 @endFlagTable
b1b95a65
FM
46 */
47 wxPreviewControlBar(wxPrintPreview* preview,
48 long buttons,
49 wxWindow* parent,
50 const wxPoint& pos = wxDefaultPosition,
51 const wxSize& size = wxDefaultSize,
52 long style = 0,
53 const wxString& name = "panel");
54
23324ae1
FM
55 /**
56 Destructor.
57 */
adaaa686 58 virtual ~wxPreviewControlBar();
23324ae1
FM
59
60 /**
61 Creates buttons, according to value of the button style flags.
4a31b0c3
FM
62
63 @todo which flags??
23324ae1 64 */
adaaa686 65 virtual void CreateButtons();
23324ae1
FM
66
67 /**
68 Gets the print preview object associated with the control bar.
69 */
adaaa686 70 virtual wxPrintPreviewBase* GetPrintPreview() const;
23324ae1
FM
71
72 /**
73 Gets the current zoom setting in percent.
74 */
adaaa686 75 virtual int GetZoomControl();
23324ae1
FM
76
77 /**
78 Sets the zoom control.
79 */
adaaa686 80 virtual void SetZoomControl(int percent);
23324ae1 81
23324ae1
FM
82};
83
84
e54c96f1 85
23324ae1
FM
86/**
87 @class wxPreviewCanvas
7c913512 88
23324ae1
FM
89 A preview canvas is the default canvas used by the print preview
90 system to display the preview.
7c913512 91
23324ae1
FM
92 @library{wxbase}
93 @category{printing}
7c913512 94
e54c96f1 95 @see wxPreviewFrame, wxPreviewControlBar, wxPrintPreview
23324ae1
FM
96*/
97class wxPreviewCanvas : public wxScrolledWindow
98{
99public:
100 /**
101 Constructor.
102 */
103 wxPreviewCanvas(wxPrintPreview* preview, wxWindow* parent,
104 const wxPoint& pos = wxDefaultPosition,
105 const wxSize& size = wxDefaultSize,
106 long style = 0,
107 const wxString& name = "canvas");
108
109 /**
110 Destructor.
111 */
adaaa686 112 virtual ~wxPreviewCanvas();
23324ae1
FM
113
114 /**
b1b95a65 115 Calls wxPrintPreview::PaintPage() to refresh the canvas.
23324ae1
FM
116 */
117 void OnPaint(wxPaintEvent& event);
118};
119
6aacfc73
VZ
120/**
121 Preview frame modality kind.
23324ae1 122
6aacfc73
VZ
123 The elements of this enum can be used with wxPreviewFrame::Initialize() to
124 indicate how should the preview frame be shown.
125
126 @since 2.9.2
127*/
128enum wxPreviewFrameModalityKind
129{
130 /**
131 Disable all the other top level windows while the preview frame is shown.
132
133 This is the default behaviour.
134 */
135 wxPreviewFrame_AppModal,
136
137 /**
138 Disable only the parent window while the preview frame is shown.
139 */
140 wxPreviewFrame_WindowModal,
141
142 /**
143 Show the preview frame non-modally and don't disable any other windows.
144 */
145 wxPreviewFrame_NonModal
146};
e54c96f1 147
23324ae1
FM
148/**
149 @class wxPreviewFrame
7c913512 150
23324ae1
FM
151 This class provides the default method of managing the print preview interface.
152 Member functions may be overridden to replace functionality, or the
153 class may be used without derivation.
7c913512 154
23324ae1
FM
155 @library{wxbase}
156 @category{printing}
7c913512 157
e54c96f1 158 @see wxPreviewCanvas, wxPreviewControlBar, wxPrintPreview
23324ae1
FM
159*/
160class wxPreviewFrame : public wxFrame
161{
162public:
163 /**
b1b95a65
FM
164 Constructor.
165
166 Pass a print preview object plus other normal frame arguments.
23324ae1
FM
167 The print preview object will be destroyed by the frame when it closes.
168 */
8067ee11
FM
169 wxPreviewFrame(wxPrintPreviewBase* preview, wxWindow* parent,
170 const wxString& title = "Print Preview",
23324ae1 171 const wxPoint& pos = wxDefaultPosition,
8067ee11 172 const wxSize& size = wxDefaultSize,
23324ae1 173 long style = wxDEFAULT_FRAME_STYLE,
408776d0 174 const wxString& name = wxFrameNameStr);
23324ae1
FM
175
176 /**
177 Destructor.
178 */
adaaa686 179 virtual ~wxPreviewFrame();
23324ae1
FM
180
181 /**
b1b95a65
FM
182 Creates a wxPreviewCanvas.
183
184 Override this function to allow a user-defined preview canvas object
185 to be created.
23324ae1 186 */
adaaa686 187 virtual void CreateCanvas();
23324ae1
FM
188
189 /**
b1b95a65
FM
190 Creates a wxPreviewControlBar.
191
192 Override this function to allow a user-defined preview control bar object
193 to be created.
23324ae1 194 */
adaaa686 195 virtual void CreateControlBar();
23324ae1
FM
196
197 /**
1e5ad6e1 198 Initializes the frame elements and prepares for showing it.
6aacfc73 199
1e5ad6e1
VZ
200 Calling this method is equivalent to calling InitializeWithModality()
201 with wxPreviewFrame_AppModal argument, please see its documentation for
202 more details.
6aacfc73 203
1e5ad6e1
VZ
204 Please notice that this function is virtual mostly for backwards
205 compatibility only, there is no real need to override it as it's never
206 called by wxWidgets itself.
207 */
208 virtual void Initialize();
209
210 /**
211 Initializes the frame elements and prepares for showing it with the
212 given modality kind.
213
214 This method creates the frame elements by calling CreateCanvas() and
215 CreateControlBar() methods (which may be overridden to customize them)
216 and prepares to show the frame according to the value of @a kind
217 parameter:
218 - If it is wxPreviewFrame_AppModal, all the other application
219 windows will be disabled when this frame is shown. This is the same
220 behaviour as that of simple Initialize().
221 - If it is wxPreviewFrame_WindowModal, only the parent window of
222 the preview frame will be disabled when it is shown.
223 - And if it is wxPreviewFrame_NonModal, no windows at all will be
224 disabled while the preview is shown.
225
226 Notice that this function (or Initialize()) must be called by the
227 application prior to showing the frame but you still must call @c
228 Show(true) to actually show it afterwards.
b1b95a65 229
6aacfc73 230 @param kind
1e5ad6e1
VZ
231 The modality kind of preview frame.
232
233 @since 2.9.2
23324ae1 234 */
1e5ad6e1 235 virtual void InitializeWithModality(wxPreviewFrameModalityKind kind);
23324ae1
FM
236
237 /**
6aacfc73 238 Enables any disabled frames in the application, and deletes the print preview
23324ae1
FM
239 object, implicitly deleting any printout objects associated with the print
240 preview object.
241 */
242 void OnCloseWindow(wxCloseEvent& event);
243};
244
245
e54c96f1 246
23324ae1
FM
247/**
248 @class wxPrintPreview
7c913512 249
23324ae1
FM
250 Objects of this class manage the print preview process. The object is passed
251 a wxPrintout object, and the wxPrintPreview object itself is passed to
252 a wxPreviewFrame object. Previewing is started by initializing and showing
b1b95a65
FM
253 the preview frame. Unlike wxPrinter::Print(), flow of control returns to the
254 application immediately after the frame is shown.
7c913512 255
82824b73
VS
256 @note
257 The preview shown is only exact on Windows. On other platforms, the wxDC
258 used for preview is different from what is used for printing and the
259 results may be significantly different, depending on how is the output
260 created. In particular, printing code relying on wxDC::GetTextExtent()
261 heavily (for example, wxHtmlEasyPrinting and other wxHTML classes do) is
262 affected. It is recommended to use native preview functionality on
263 platforms that offer it (OS X, GTK+).
264
23324ae1
FM
265 @library{wxbase}
266 @category{printing}
7c913512 267
4a31b0c3
FM
268 @see @ref overview_printing, wxPrinterDC, wxPrintDialog, wxPrintout, wxPrinter,
269 wxPreviewCanvas, wxPreviewControlBar, wxPreviewFrame
23324ae1
FM
270*/
271class wxPrintPreview : public wxObject
272{
273public:
274 /**
b1b95a65
FM
275 Constructor.
276
277 Pass a printout object, an optional printout object to be used for actual
278 printing, and the address of an optional block of printer data, which will
279 be copied to the print preview object's print data.
280
4a31b0c3 281 If @a printoutForPrinting is non-@NULL, a @b "Print..." button will be placed on
b1b95a65
FM
282 the preview frame so that the user can print directly from the preview interface.
283
284 @remarks
23324ae1
FM
285 Do not explicitly delete the printout objects once this destructor has been
286 called, since they will be deleted in the wxPrintPreview constructor.
4cc4bfaf 287 The same does not apply to the @a data argument.
b1b95a65 288
4a31b0c3 289 Use IsOk() to check whether the wxPrintPreview object was created correctly.
23324ae1
FM
290 */
291 wxPrintPreview(wxPrintout* printout,
11e3af6e
FM
292 wxPrintout* printoutForPrinting = NULL,
293 wxPrintDialogData* data = NULL);
23324ae1
FM
294
295 /**
b1b95a65
FM
296 Destructor.
297
298 Deletes both print preview objects, so do not destroy these objects
23324ae1
FM
299 in your application.
300 */
301 ~wxPrinter();
302
303 /**
304 Gets the preview window used for displaying the print preview image.
305 */
adaaa686 306 virtual wxPreviewCanvas* GetCanvas() const;
23324ae1
FM
307
308 /**
309 Gets the page currently being previewed.
310 */
adaaa686 311 virtual int GetCurrentPage() const;
23324ae1
FM
312
313 /**
314 Gets the frame used for displaying the print preview canvas
315 and control bar.
316 */
adaaa686 317 virtual wxFrame* GetFrame() const;
23324ae1
FM
318
319 /**
320 Returns the maximum page number.
321 */
adaaa686 322 virtual int GetMaxPage() const;
23324ae1
FM
323
324 /**
325 Returns the minimum page number.
326 */
adaaa686 327 virtual int GetMinPage() const;
23324ae1
FM
328
329 /**
330 Gets the preview printout object associated with the wxPrintPreview object.
331 */
adaaa686 332 virtual wxPrintout* GetPrintout() const;
23324ae1
FM
333
334 /**
335 Gets the printout object to be used for printing from within the preview
336 interface,
337 or @NULL if none exists.
338 */
adaaa686 339 virtual wxPrintout* GetPrintoutForPrinting() const;
23324ae1
FM
340
341 /**
b1b95a65
FM
342 Returns @true if the wxPrintPreview is valid, @false otherwise.
343
344 It could return @false if there was a problem initializing the printer
345 device context (current printer not set, for example).
23324ae1 346 */
adaaa686 347 virtual bool IsOk() const;
23324ae1
FM
348
349 /**
350 This refreshes the preview window with the preview image.
351 It must be called from the preview window's OnPaint member.
b1b95a65 352
23324ae1
FM
353 The implementation simply blits the preview bitmap onto
354 the canvas, creating a new preview bitmap if none exists.
355 */
43c48e1e 356 virtual bool PaintPage(wxPreviewCanvas* canvas, wxDC& dc);
23324ae1
FM
357
358 /**
359 Invokes the print process using the second wxPrintout object
360 supplied in the wxPrintPreview constructor.
361 Will normally be called by the @b Print... panel item on the
362 preview frame's control bar.
b1b95a65
FM
363
364 Returns @false in case of error -- call wxPrinter::GetLastError()
365 to get detailed information about the kind of the error.
23324ae1 366 */
adaaa686 367 virtual bool Print(bool prompt);
23324ae1
FM
368
369 /**
370 Renders a page into a wxMemoryDC. Used internally by wxPrintPreview.
371 */
adaaa686 372 virtual bool RenderPage(int pageNum);
23324ae1
FM
373
374 /**
375 Sets the window to be used for displaying the print preview image.
376 */
adaaa686 377 virtual void SetCanvas(wxPreviewCanvas* window);
23324ae1
FM
378
379 /**
380 Sets the current page to be previewed.
381 */
43c48e1e 382 virtual bool SetCurrentPage(int pageNum);
23324ae1
FM
383
384 /**
385 Sets the frame to be used for displaying the print preview canvas
386 and control bar.
387 */
adaaa686 388 virtual void SetFrame(wxFrame* frame);
23324ae1
FM
389
390 /**
391 Associates a printout object with the wxPrintPreview object.
392 */
adaaa686 393 virtual void SetPrintout(wxPrintout* printout);
23324ae1
FM
394
395 /**
4a31b0c3 396 Sets the percentage preview zoom, and refreshes the preview canvas accordingly.
23324ae1 397 */
adaaa686 398 virtual void SetZoom(int percent);
23324ae1
FM
399};
400
401
e54c96f1 402
23324ae1
FM
403/**
404 @class wxPrinter
7c913512 405
23324ae1 406 This class represents the Windows or PostScript printer, and is the vehicle
b1b95a65 407 through which printing may be launched by an application.
4a31b0c3 408
b1b95a65
FM
409 Printing can also be achieved through using of lower functions and classes,
410 but this and associated classes provide a more convenient and general method
411 of printing.
7c913512 412
23324ae1
FM
413 @library{wxbase}
414 @category{printing}
7c913512 415
4a31b0c3 416 @see @ref overview_printing, wxPrinterDC, wxPrintDialog, wxPrintout, wxPrintPreview
23324ae1
FM
417*/
418class wxPrinter : public wxObject
419{
420public:
421 /**
b1b95a65
FM
422 Constructor.
423
424 Pass an optional pointer to a block of print dialog data, which will be
425 copied to the printer object's local data.
3c4f71cc 426
4cc4bfaf 427 @see wxPrintDialogData, wxPrintData
23324ae1 428 */
4cc4bfaf 429 wxPrinter(wxPrintDialogData* data = NULL);
23324ae1
FM
430
431 /**
432 Creates the default printing abort window, with a cancel button.
433 */
43c48e1e 434 virtual wxWindow* CreateAbortWindow(wxWindow* parent, wxPrintout* printout);
23324ae1
FM
435
436 /**
437 Returns @true if the user has aborted the print job.
438 */
adaaa686 439 bool GetAbort() const;
23324ae1
FM
440
441 /**
b1b95a65
FM
442 Return last error. Valid after calling Print(), PrintDialog() or
443 wxPrintPreview::Print().
4a31b0c3
FM
444
445 These functions set last error to @c wxPRINTER_NO_ERROR if no error happened.
3c4f71cc 446
b1b95a65 447 Returned value is one of the following:
3c4f71cc 448
b1b95a65 449 @beginTable
4a31b0c3
FM
450 @row2col{wxPRINTER_NO_ERROR, No error happened.}
451 @row2col{wxPRINTER_CANCELLED, The user cancelled printing.}
452 @row2col{wxPRINTER_ERROR, There was an error during printing.}
b1b95a65 453 @endTable
23324ae1
FM
454 */
455 static wxPrinterError GetLastError();
456
457 /**
b1b95a65
FM
458 Returns the @ref overview_printing_printdata "print data" associated with
459 the printer object.
23324ae1 460 */
adaaa686 461 virtual wxPrintDialogData& GetPrintDialogData() const;
23324ae1
FM
462
463 /**
464 Starts the printing process. Provide a parent window, a user-defined wxPrintout
b1b95a65
FM
465 object which controls the printing of a document, and whether the print dialog
466 should be invoked first.
467
468 Print() could return @false if there was a problem initializing the printer device
469 context (current printer not set, for example) or the user cancelled printing.
470 Call GetLastError() to get detailed information about the kind of the error.
23324ae1 471 */
fadc2df6
FM
472 virtual bool Print(wxWindow* parent, wxPrintout* printout,
473 bool prompt = true);
23324ae1
FM
474
475 /**
b1b95a65
FM
476 Invokes the print dialog.
477
478 If successful (the user did not press Cancel and no error occurred),
4a31b0c3
FM
479 a suitable device context will be returned; otherwise @NULL is returned;
480 call GetLastError() to get detailed information about the kind of the error.
b1b95a65
FM
481
482 @remarks
23324ae1
FM
483 The application must delete this device context to avoid a memory leak.
484 */
adaaa686 485 virtual wxDC* PrintDialog(wxWindow* parent);
23324ae1
FM
486
487 /**
488 Default error-reporting function.
489 */
fadc2df6
FM
490 virtual void ReportError(wxWindow* parent, wxPrintout* printout,
491 const wxString& message);
23324ae1
FM
492
493 /**
b1b95a65
FM
494 Invokes the print setup dialog.
495
496 @remarks
497 The setup dialog is obsolete from Windows 95, though retained
498 for backward compatibility.
23324ae1 499 */
adaaa686 500 virtual bool Setup(wxWindow* parent);
23324ae1
FM
501};
502
503
e54c96f1 504
23324ae1
FM
505/**
506 @class wxPrintout
7c913512 507
b1b95a65
FM
508 This class encapsulates the functionality of printing out an application document.
509
510 A new class must be derived and members overridden to respond to calls such as
511 OnPrintPage() and HasPage() and to render the print image onto an associated wxDC.
512 Instances of this class are passed to wxPrinter::Print() or
23324ae1 513 to a wxPrintPreview object to initiate printing or previewing.
7c913512 514
23324ae1
FM
515 Your derived wxPrintout is responsible for drawing both the preview image and
516 the printed page. If your windows' drawing routines accept an arbitrary DC as an
517 argument, you can re-use those routines within your wxPrintout subclass to draw
518 the printout image. You may also add additional drawing elements within your
519 wxPrintout subclass, like headers, footers, and/or page numbers. However, the
520 image on the printed page will often differ from the image drawn on the screen,
521 as will the print preview image -- not just in the presence of headers and
522 footers, but typically in scale. A high-resolution printer presents a much
523 larger drawing surface (i.e., a higher-resolution DC); a zoomed-out preview
524 image presents a much smaller drawing surface (lower-resolution DC). By using
525 the routines FitThisSizeToXXX() and/or MapScreenSizeToXXX() within your
526 wxPrintout subclass to set the user scale and origin of the associated DC, you
527 can easily use a single drawing routine to draw on your application's windows,
528 to create the print preview image, and to create the printed paper image, and
529 achieve a common appearance to the preview image and the printed page.
7c913512 530
23324ae1
FM
531 @library{wxbase}
532 @category{printing}
7c913512 533
4a31b0c3
FM
534 @see @ref overview_printing, wxPrinterDC, wxPrintDialog, wxPageSetupDialog,
535 wxPrinter, wxPrintPreview
23324ae1
FM
536*/
537class wxPrintout : public wxObject
538{
539public:
540 /**
b1b95a65
FM
541 Constructor.
542
543 Pass an optional title argument - the current filename would be a
544 good idea. This will appear in the printing list (at least in MSW)
23324ae1
FM
545 */
546 wxPrintout(const wxString& title = "Printout");
547
548 /**
549 Destructor.
550 */
adaaa686 551 virtual ~wxPrintout();
23324ae1
FM
552
553 /**
554 Set the user scale and device origin of the wxDC associated with this wxPrintout
555 so that the given image size fits entirely within the page rectangle and the
b1b95a65
FM
556 origin is at the top left corner of the page rectangle.
557
558 On MSW and Mac, the page rectangle is the printable area of the page.
559 On other platforms and PostScript printing, the page rectangle is the entire paper.
560
561 Use this if you want your printed image as large as possible, but with the caveat
562 that on some platforms, portions of the image might be cut off at the edges.
23324ae1
FM
563 */
564 void FitThisSizeToPage(const wxSize& imageSize);
565
566 /**
567 Set the user scale and device origin of the wxDC associated with this wxPrintout
568 so that the given image size fits entirely within the page margins set in the
b1b95a65
FM
569 given wxPageSetupDialogData object.
570
571 This function provides the greatest consistency across all platforms because it
572 does not depend on having access to the printable area of the paper.
573
574 @remarks
575 On Mac, the native wxPageSetupDialog does not let you set the page margins;
576 you'll have to provide your own mechanism, or you can use the Mac-only class
577 wxMacPageMarginsDialog.
23324ae1
FM
578 */
579 void FitThisSizeToPageMargins(const wxSize& imageSize,
580 const wxPageSetupDialogData& pageSetupData);
581
582 /**
583 Set the user scale and device origin of the wxDC associated with this wxPrintout
584 so that the given image size fits entirely within the paper and the origin is at
b1b95a65
FM
585 the top left corner of the paper.
586
587 Use this if you're managing your own page margins.
588
589 @note
590 With most printers, the region around the edges of the paper are not
591 printable so that the edges of the image could be cut off.
592
23324ae1
FM
593 */
594 void FitThisSizeToPaper(const wxSize& imageSize);
595
596 /**
597 Returns the device context associated with the printout (given to the printout
b1b95a65
FM
598 at start of printing or previewing).
599
600 The application can use GetDC() to obtain a device context to draw on.
601
602 This will be a wxPrinterDC if printing under Windows or Mac, a wxPostScriptDC
603 if printing on other platforms, and a wxMemoryDC if previewing.
23324ae1 604 */
adaaa686 605 wxDC* GetDC() const;
23324ae1
FM
606
607 /**
608 Return the rectangle corresponding to the page margins specified by the given
609 wxPageSetupDialogData object in the associated wxDC's logical coordinates for
b1b95a65
FM
610 the current user scale and device origin.
611
612 The page margins are specified with respect to the edges of the paper on all
613 platforms.
23324ae1 614 */
adaaa686 615 wxRect GetLogicalPageMarginsRect(const wxPageSetupDialogData& pageSetupData) const;
23324ae1
FM
616
617 /**
b1b95a65 618 Return the rectangle corresponding to the page in the associated wxDC 's
7c913512 619 logical coordinates for the current user scale and device origin.
b1b95a65
FM
620
621 On MSW and Mac, this will be the printable area of the paper.
622 On other platforms and PostScript printing, this will be the full paper
623 rectangle.
23324ae1 624 */
adaaa686 625 wxRect GetLogicalPageRect() const;
23324ae1
FM
626
627 /**
b1b95a65 628 Return the rectangle corresponding to the paper in the associated wxDC 's
23324ae1
FM
629 logical coordinates for the current user scale and device origin.
630 */
adaaa686 631 wxRect GetLogicalPaperRect() const;
23324ae1
FM
632
633 /**
634 Returns the number of pixels per logical inch of the printer device context.
b1b95a65 635
23324ae1 636 Dividing the printer PPI by the screen PPI can give a suitable scaling factor
b1b95a65
FM
637 for drawing text onto the printer.
638
639 Remember to multiply this by a scaling factor to take the preview DC size into
640 account.
641 Or you can just use the FitThisSizeToXXX() and MapScreenSizeToXXX routines below,
642 which do most of the scaling calculations for you.
643
644 @beginWxPythonOnly
645 This method returns the output-only parameters as a tuple.
646 @endWxPythonOnly
1058f652
MB
647
648 @beginWxPerlOnly
649 In wxPerl this method takes no arguments and returns a
650 2-element list (w, h).
651 @endWxPerlOnly
23324ae1 652 */
adaaa686 653 void GetPPIPrinter(int* w, int* h) const;
23324ae1
FM
654
655 /**
656 Returns the number of pixels per logical inch of the screen device context.
b1b95a65 657
23324ae1 658 Dividing the printer PPI by the screen PPI can give a suitable scaling factor
b1b95a65
FM
659 for drawing text onto the printer.
660
661 If you are doing your own scaling, remember to multiply this by a scaling
662 factor to take the preview DC size into account.
663
664 @beginWxPythonOnly
665 This method returns the output-only parameters as a tuple.
666 @endWxPythonOnly
1058f652
MB
667
668 @beginWxPerlOnly
669 In wxPerl this method takes no arguments and returns a
670 2-element list (w, h).
671 @endWxPerlOnly
23324ae1 672 */
adaaa686 673 void GetPPIScreen(int* w, int* h) const;
23324ae1
FM
674
675 /**
676 Called by the framework to obtain information from the application about minimum
677 and maximum page values that the user can select, and the required page range to
b1b95a65
FM
678 be printed.
679
680 By default this returns (1, 32000) for the page minimum and maximum values, and
681 (1, 1) for the required page range.
682
3877c17e
VZ
683 @a minPage must be greater than zero and @a maxPage must be greater
684 than @a minPage.
b1b95a65
FM
685
686 @beginWxPythonOnly
687 When this method is implemented in a derived Python class, it should be designed
688 to take no parameters (other than the self reference) and to return a tuple of
689 four integers.
690 @endWxPythonOnly
23324ae1 691 */
fadc2df6
FM
692 virtual void GetPageInfo(int* minPage, int* maxPage, int* pageFrom,
693 int* pageTo);
23324ae1
FM
694
695 /**
696 Returns the size of the printer page in millimetres.
b1b95a65
FM
697
698 @beginWxPythonOnly
699 This method returns the output-only parameters as a tuple.
700 @endWxPythonOnly
1058f652
MB
701
702 @beginWxPerlOnly
703 In wxPerl this method takes no arguments and returns a
704 2-element list (w, h).
705 @endWxPerlOnly
23324ae1 706 */
adaaa686 707 void GetPageSizeMM(int* w, int* h) const;
23324ae1
FM
708
709 /**
710 Returns the size of the printer page in pixels, called the page rectangle.
b1b95a65 711
23324ae1
FM
712 The page rectangle has a top left corner at (0,0) and a bottom right corner at
713 (w,h). These values may not be the same as the values returned from
b1b95a65 714 wxDC::GetSize(); if the printout is being used for
23324ae1
FM
715 previewing, a memory device context is used, which uses a bitmap size reflecting
716 the current preview zoom. The application must take this discrepancy into
717 account if previewing is to be supported.
b1b95a65
FM
718
719 @beginWxPythonOnly
720 This method returns the output-only parameters as a tuple.
721 @endWxPythonOnly
1058f652
MB
722
723 @beginWxPerlOnly
724 In wxPerl this method takes no arguments and returns a
725 2-element list (w, h).
726 @endWxPerlOnly
23324ae1 727 */
adaaa686 728 void GetPageSizePixels(int* w, int* h) const;
23324ae1
FM
729
730 /**
731 Returns the rectangle that corresponds to the entire paper in pixels, called the
b1b95a65
FM
732 paper rectangle.
733
734 This distinction between paper rectangle and page rectangle reflects the fact that
735 most printers cannot print all the way to the edge of the paper.
736 The page rectangle is a rectangle whose top left corner is at (0,0) and whose width
737 and height are given by wxDC::GetPageSizePixels().
738
739 On MSW and Mac, the page rectangle gives the printable area of the paper, while the
740 paper rectangle represents the entire paper, including non-printable borders.
741 Thus, the rectangle returned by wxDC::GetPaperRectPixels() will have a top left corner
742 whose coordinates are small negative numbers and the bottom right corner will have
743 values somewhat larger than the width and height given by wxDC::GetPageSizePixels().
744
745 On other platforms and for PostScript printing, the paper is treated as if its entire
23324ae1
FM
746 area were printable, so this function will return the same rectangle as the page
747 rectangle.
748 */
adaaa686 749 wxRect GetPaperRectPixels() const;
23324ae1
FM
750
751 /**
4a31b0c3
FM
752 Returns the title of the printout.
753
754 @todo the python note here was wrong
23324ae1 755 */
adaaa686 756 virtual wxString GetTitle() const;
23324ae1
FM
757
758 /**
759 Should be overridden to return @true if the document has this page, or @false
b1b95a65
FM
760 if not.
761
762 Returning @false signifies the end of the document. By default,
23324ae1
FM
763 HasPage behaves as if the document has only one page.
764 */
adaaa686 765 virtual bool HasPage(int pageNum);
23324ae1
FM
766
767 /**
768 Returns @true if the printout is currently being used for previewing.
1bd122dd
VZ
769
770 @see GetPreview()
23324ae1 771 */
adaaa686 772 virtual bool IsPreview() const;
23324ae1 773
1bd122dd
VZ
774 /**
775 Returns the associated preview object if any.
776
777 If this printout object is used for previewing, returns the associated
778 wxPrintPreview. Otherwise returns @NULL.
779
780 The returned pointer is not owned by the printout and must not be
781 deleted.
782
783 @see IsPreview()
784
785 @since 2.9.1.
786 */
787 wxPrintPreview *GetPreview() const;
788
23324ae1
FM
789 /**
790 Set the user scale and device origin of the wxDC associated with this wxPrintout
b1b95a65
FM
791 so that one screen pixel maps to one device pixel on the DC.
792 That is, the user scale is set to (1,1) and the device origin is set to (0,0).
793
794 Use this if you want to do your own scaling prior to calling wxDC drawing calls,
795 for example, if your underlying model is floating-point and you want to achieve
796 maximum drawing precision on high-resolution printers.
797
798 You can use the GetLogicalXXXRect() routines below to obtain the paper rectangle,
799 page rectangle, or page margins rectangle to perform your own scaling.
800
801 @note
802 While the underlying drawing model of Mac OS X is floating-point,
803 wxWidgets's drawing model scales from integer coordinates.
23324ae1
FM
804 */
805 void MapScreenSizeToDevice();
806
807 /**
d13b34d3 808 This sets the user scale of the wxDC associated with this wxPrintout to the same
b1b95a65
FM
809 scale as MapScreenSizeToPaper() but sets the logical origin to the top left corner
810 of the page rectangle.
23324ae1
FM
811 */
812 void MapScreenSizeToPage();
813
814 /**
d13b34d3 815 This sets the user scale of the wxDC associated with this wxPrintout to the same
b1b95a65
FM
816 scale as MapScreenSizeToPageMargins() but sets the logical origin to the top left
817 corner of the page margins specified by the given wxPageSetupDialogData object.
23324ae1
FM
818 */
819 void MapScreenSizeToPageMargins(const wxPageSetupDialogData& pageSetupData);
820
821 /**
822 Set the user scale and device origin of the wxDC associated with this wxPrintout
823 so that the printed page matches the screen size as closely as possible
824 and the logical origin is in the top left corner of the paper rectangle.
4a31b0c3
FM
825
826 That is, a 100-pixel object on screen should appear at the same size on the
827 printed page.
b1b95a65
FM
828 (It will, of course, be larger or smaller in the preview image, depending on the
829 zoom factor.)
830
4c51a665 831 Use this if you want WYSIWYG behaviour, e.g., in a text editor.
23324ae1
FM
832 */
833 void MapScreenSizeToPaper();
834
835 /**
836 Shift the device origin by an amount specified in logical coordinates.
837 */
838 void OffsetLogicalOrigin(wxCoord xoff, wxCoord yoff);
839
840 /**
841 Called by the framework at the start of document printing. Return @false from
b1b95a65
FM
842 this function cancels the print job.
843
844 OnBeginDocument() is called once for every copy printed.
845
846 @remarks
847 The base OnBeginDocument() must be called (and the return value
848 checked) from within the overridden function, since it calls wxDC::StartDoc().
849
850 @beginWxPythonOnly
851 If this method is overridden in a Python class then the base class version can
852 be called by using the method <tt>base_OnBeginDocument(startPage, endPage)</tt>.
853 @endWxPythonOnly
23324ae1 854 */
adaaa686 855 virtual bool OnBeginDocument(int startPage, int endPage);
23324ae1
FM
856
857 /**
b1b95a65
FM
858 Called by the framework at the start of printing.
859
860 OnBeginPrinting() is called once for every print job
861 (regardless of how many copies are being printed).
23324ae1 862 */
adaaa686 863 virtual void OnBeginPrinting();
23324ae1
FM
864
865 /**
b1b95a65
FM
866 Called by the framework at the end of document printing.
867
868 OnEndDocument() is called once for every copy printed.
869
870 @remarks
871 The base OnEndDocument() must be called from within the overridden function,
872 since it calls wxDC::EndDoc().
23324ae1 873 */
adaaa686 874 virtual void OnEndDocument();
23324ae1
FM
875
876 /**
b1b95a65
FM
877 Called by the framework at the end of printing.
878
879 OnEndPrinting is called once for every print job
880 (regardless of how many copies are being printed).
23324ae1 881 */
adaaa686 882 virtual void OnEndPrinting();
23324ae1
FM
883
884 /**
885 Called once by the framework before any other demands are made of the
b1b95a65
FM
886 wxPrintout object.
887
888 This gives the object an opportunity to calculate the number of pages
889 in the document, for example.
23324ae1 890 */
adaaa686 891 virtual void OnPreparePrinting();
23324ae1
FM
892
893 /**
894 Called by the framework when a page should be printed. Returning @false cancels
b1b95a65 895 the print job.
23324ae1 896 */
da1ed74c 897 virtual bool OnPrintPage(int pageNum) = 0;
23324ae1
FM
898
899 /**
900 Set the device origin of the associated wxDC so that the current logical point
901 becomes the new logical origin.
902 */
903 void SetLogicalOrigin(wxCoord x, wxCoord y);
904};
e54c96f1 905