]>
git.saurik.com Git - wxWidgets.git/blob - interface/wx/print.h
   1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     interface of wxPreviewControlBar 
   4 // Author:      wxWidgets team 
   6 // Licence:     wxWindows license 
   7 ///////////////////////////////////////////////////////////////////////////// 
  10     @class wxPreviewControlBar 
  12     This is the default implementation of the preview control bar, a panel 
  13     with buttons and a zoom control. 
  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. 
  21     @see wxPreviewFrame, wxPreviewCanvas, wxPrintPreview 
  23 class wxPreviewControlBar 
: public wxPanel
 
  30         The @a buttons parameter may be a combination of the following, using the bitwise 
  34         @flag{wxPREVIEW_PRINT} 
  35             Create a print button. 
  37             Create a next page button. 
  38         @flag{wxPREVIEW_PREVIOUS} 
  39             Create a previous page button. 
  41             Create a zoom control. 
  42         @flag{wxPREVIEW_DEFAULT} 
  43             Equivalent to a combination of @c wxPREVIEW_PREVIOUS, @c wxPREVIEW_NEXT 
  44             and @c wxPREVIEW_ZOOM. 
  47     wxPreviewControlBar(wxPrintPreview
* preview
, 
  50                         const wxPoint
& pos 
= wxDefaultPosition
, 
  51                         const wxSize
& size 
= wxDefaultSize
, 
  53                         const wxString
& name 
= "panel"); 
  58     virtual ~wxPreviewControlBar(); 
  61         Creates buttons, according to value of the button style flags. 
  65     virtual void CreateButtons(); 
  68         Gets the print preview object associated with the control bar. 
  70     virtual wxPrintPreviewBase
* GetPrintPreview() const; 
  73         Gets the current zoom setting in percent. 
  75     virtual int GetZoomControl(); 
  78         Sets the zoom control. 
  80     virtual void SetZoomControl(int percent
); 
  87     @class wxPreviewCanvas 
  89     A preview canvas is the default canvas used by the print preview 
  90     system to display the preview. 
  95     @see wxPreviewFrame, wxPreviewControlBar, wxPrintPreview 
  97 class wxPreviewCanvas 
: public wxScrolledWindow
 
 103     wxPreviewCanvas(wxPrintPreview
* preview
, wxWindow
* parent
, 
 104                     const wxPoint
& pos 
= wxDefaultPosition
, 
 105                     const wxSize
& size 
= wxDefaultSize
, 
 107                     const wxString
& name 
= "canvas"); 
 112     virtual ~wxPreviewCanvas(); 
 115         Calls wxPrintPreview::PaintPage() to refresh the canvas. 
 117     void OnPaint(wxPaintEvent
& event
); 
 123     @class wxPreviewFrame 
 125     This class provides the default method of managing the print preview interface. 
 126     Member functions may be overridden to replace functionality, or the 
 127     class may be used without derivation. 
 132     @see wxPreviewCanvas, wxPreviewControlBar, wxPrintPreview 
 134 class wxPreviewFrame 
: public wxFrame
 
 140         Pass a print preview object plus other normal frame arguments. 
 141         The print preview object will be destroyed by the frame when it closes. 
 143     wxPreviewFrame(wxPrintPreviewBase
* preview
, wxWindow
* parent
, 
 144                    const wxString
& title 
= "Print Preview", 
 145                    const wxPoint
& pos 
= wxDefaultPosition
, 
 146                    const wxSize
& size 
= wxDefaultSize
, 
 147                    long style 
= wxDEFAULT_FRAME_STYLE
, 
 148                    const wxString
& name 
= wxFrameNameStr
); 
 153     virtual ~wxPreviewFrame(); 
 156         Creates a wxPreviewCanvas. 
 158         Override this function to allow a user-defined preview canvas object 
 161     virtual void CreateCanvas(); 
 164         Creates a wxPreviewControlBar. 
 166         Override this function to allow a user-defined preview control bar object 
 169     virtual void CreateControlBar(); 
 172         Creates the preview canvas and control bar, and calls wxWindow::MakeModal(@true) 
 173         to disable other top-level windows in the application. 
 175         This function should be called by the application prior to showing the frame. 
 177     virtual void Initialize(); 
 180         Enables the other frames in the application, and deletes the print preview 
 181         object, implicitly deleting any printout objects associated with the print 
 184     void OnCloseWindow(wxCloseEvent
& event
); 
 190     @class wxPrintPreview 
 192     Objects of this class manage the print preview process. The object is passed 
 193     a wxPrintout object, and the wxPrintPreview object itself is passed to 
 194     a wxPreviewFrame object. Previewing is started by initializing and showing 
 195     the preview frame. Unlike wxPrinter::Print(), flow of control returns to the 
 196     application immediately after the frame is shown. 
 199     The preview shown is only exact on Windows. On other platforms, the wxDC 
 200     used for preview is different from what is used for printing and the 
 201     results may be significantly different, depending on how is the output 
 202     created. In particular, printing code relying on wxDC::GetTextExtent() 
 203     heavily (for example, wxHtmlEasyPrinting and other wxHTML classes do) is 
 204     affected. It is recommended to use native preview functionality on 
 205     platforms that offer it (OS X, GTK+). 
 210     @see @ref overview_printing, wxPrinterDC, wxPrintDialog, wxPrintout, wxPrinter, 
 211          wxPreviewCanvas, wxPreviewControlBar, wxPreviewFrame 
 213 class wxPrintPreview 
: public wxObject
 
 219         Pass a printout object, an optional printout object to be used for actual 
 220         printing, and the address of an optional block of printer data, which will 
 221         be copied to the print preview object's print data. 
 223         If @a printoutForPrinting is non-@NULL, a @b "Print..." button will be placed on 
 224         the preview frame so that the user can print directly from the preview interface. 
 227         Do not explicitly delete the printout objects once this destructor has been 
 228         called, since they will be deleted in the wxPrintPreview constructor. 
 229         The same does not apply to the @a data argument. 
 231         Use IsOk() to check whether the wxPrintPreview object was created correctly. 
 233     wxPrintPreview(wxPrintout
* printout
, 
 234                    wxPrintout
* printoutForPrinting 
= NULL
, 
 235                    wxPrintDialogData
* data 
= NULL
); 
 240         Deletes both print preview objects, so do not destroy these objects 
 246         Gets the preview window used for displaying the print preview image. 
 248     virtual wxPreviewCanvas
* GetCanvas() const; 
 251         Gets the page currently being previewed. 
 253     virtual int GetCurrentPage() const; 
 256         Gets the frame used for displaying the print preview canvas 
 259     virtual wxFrame
* GetFrame() const; 
 262         Returns the maximum page number. 
 264     virtual int GetMaxPage() const; 
 267         Returns the minimum page number. 
 269     virtual int GetMinPage() const; 
 272         Gets the preview printout object associated with the wxPrintPreview object. 
 274     virtual wxPrintout
* GetPrintout() const; 
 277         Gets the printout object to be used for printing from within the preview 
 279         or @NULL if none exists. 
 281     virtual wxPrintout
* GetPrintoutForPrinting() const; 
 284         Returns @true if the wxPrintPreview is valid, @false otherwise. 
 286         It could return @false if there was a problem initializing the printer 
 287         device context (current printer not set, for example). 
 289     virtual bool IsOk() const; 
 292         This refreshes the preview window with the preview image. 
 293         It must be called from the preview window's OnPaint member. 
 295         The implementation simply blits the preview bitmap onto 
 296         the canvas, creating a new preview bitmap if none exists. 
 298     virtual bool PaintPage(wxPreviewCanvas
* canvas
, wxDC
& dc
); 
 301         Invokes the print process using the second wxPrintout object 
 302         supplied in the wxPrintPreview constructor. 
 303         Will normally be called by the @b Print... panel item on the 
 304         preview frame's control bar. 
 306         Returns @false in case of error -- call wxPrinter::GetLastError() 
 307         to get detailed information about the kind of the error. 
 309     virtual bool Print(bool prompt
); 
 312         Renders a page into a wxMemoryDC. Used internally by wxPrintPreview. 
 314     virtual bool RenderPage(int pageNum
); 
 317         Sets the window to be used for displaying the print preview image. 
 319     virtual void SetCanvas(wxPreviewCanvas
* window
); 
 322         Sets the current page to be previewed. 
 324     virtual bool SetCurrentPage(int pageNum
); 
 327         Sets the frame to be used for displaying the print preview canvas 
 330     virtual void SetFrame(wxFrame
* frame
); 
 333         Associates a printout object with the wxPrintPreview object. 
 335     virtual void SetPrintout(wxPrintout
* printout
); 
 338         Sets the percentage preview zoom, and refreshes the preview canvas accordingly. 
 340     virtual void SetZoom(int percent
); 
 348     This class represents the Windows or PostScript printer, and is the vehicle 
 349     through which printing may be launched by an application. 
 351     Printing can also be achieved through using of lower functions and classes, 
 352     but this and associated classes provide a more convenient and general method 
 358     @see @ref overview_printing, wxPrinterDC, wxPrintDialog, wxPrintout, wxPrintPreview 
 360 class wxPrinter 
: public wxObject
 
 366         Pass an optional pointer to a block of print dialog data, which will be 
 367         copied to the printer object's local data. 
 369         @see wxPrintDialogData, wxPrintData 
 371     wxPrinter(wxPrintDialogData
* data 
= NULL
); 
 374         Creates the default printing abort window, with a cancel button. 
 376     virtual wxWindow
* CreateAbortWindow(wxWindow
* parent
, wxPrintout
* printout
); 
 379         Returns @true if the user has aborted the print job. 
 381     bool GetAbort() const; 
 384         Return last error. Valid after calling Print(), PrintDialog() or 
 385         wxPrintPreview::Print(). 
 387         These functions set last error to @c wxPRINTER_NO_ERROR if no error happened. 
 389         Returned value is one of the following: 
 392         @row2col{wxPRINTER_NO_ERROR, No error happened.} 
 393         @row2col{wxPRINTER_CANCELLED, The user cancelled printing.} 
 394         @row2col{wxPRINTER_ERROR, There was an error during printing.} 
 397     static wxPrinterError 
GetLastError(); 
 400         Returns the @ref overview_printing_printdata "print data" associated with 
 403     virtual wxPrintDialogData
& GetPrintDialogData() const; 
 406         Starts the printing process. Provide a parent window, a user-defined wxPrintout 
 407         object which controls the printing of a document, and whether the print dialog 
 408         should be invoked first. 
 410         Print() could return @false if there was a problem initializing the printer device 
 411         context (current printer not set, for example) or the user cancelled printing. 
 412         Call GetLastError() to get detailed information about the kind of the error. 
 414     virtual bool Print(wxWindow
* parent
, wxPrintout
* printout
, 
 418         Invokes the print dialog. 
 420         If successful (the user did not press Cancel and no error occurred), 
 421         a suitable device context will be returned; otherwise @NULL is returned; 
 422         call GetLastError() to get detailed information about the kind of the error. 
 425         The application must delete this device context to avoid a memory leak. 
 427     virtual wxDC
* PrintDialog(wxWindow
* parent
); 
 430         Default error-reporting function. 
 432     virtual void ReportError(wxWindow
* parent
, wxPrintout
* printout
, 
 433                              const wxString
& message
); 
 436         Invokes the print setup dialog. 
 439         The setup dialog is obsolete from Windows 95, though retained 
 440         for backward compatibility. 
 442     virtual bool Setup(wxWindow
* parent
); 
 450     This class encapsulates the functionality of printing out an application document. 
 452     A new class must be derived and members overridden to respond to calls such as 
 453     OnPrintPage() and HasPage() and to render the print image onto an associated wxDC. 
 454     Instances of this class are passed to wxPrinter::Print() or 
 455     to a wxPrintPreview object to initiate printing or previewing. 
 457     Your derived wxPrintout is responsible for drawing both the preview image and 
 458     the printed page. If your windows' drawing routines accept an arbitrary DC as an 
 459     argument, you can re-use those routines within your wxPrintout subclass to draw 
 460     the printout image. You may also add additional drawing elements within your 
 461     wxPrintout subclass, like headers, footers, and/or page numbers. However, the 
 462     image on the printed page will often differ from the image drawn on the screen, 
 463     as will the print preview image -- not just in the presence of headers and 
 464     footers, but typically in scale. A high-resolution printer presents a much 
 465     larger drawing surface (i.e., a higher-resolution DC); a zoomed-out preview 
 466     image presents a much smaller drawing surface (lower-resolution DC). By using 
 467     the routines FitThisSizeToXXX() and/or MapScreenSizeToXXX() within your 
 468     wxPrintout subclass to set the user scale and origin of the associated DC, you 
 469     can easily use a single drawing routine to draw on your application's windows, 
 470     to create the print preview image, and to create the printed paper image, and 
 471     achieve a common appearance to the preview image and the printed page. 
 476     @see @ref overview_printing, wxPrinterDC, wxPrintDialog, wxPageSetupDialog, 
 477          wxPrinter, wxPrintPreview 
 479 class wxPrintout 
: public wxObject
 
 485         Pass an optional title argument - the current filename would be a 
 486         good idea. This will appear in the printing list (at least in MSW) 
 488     wxPrintout(const wxString
& title 
= "Printout"); 
 493     virtual ~wxPrintout(); 
 496         Set the user scale and device origin of the wxDC associated with this wxPrintout 
 497         so that the given image size fits entirely within the page rectangle and the 
 498         origin is at the top left corner of the page rectangle. 
 500         On MSW and Mac, the page rectangle is the printable area of the page. 
 501         On other platforms and PostScript printing, the page rectangle is the entire paper. 
 503         Use this if you want your printed image as large as possible, but with the caveat 
 504         that on some platforms, portions of the image might be cut off at the edges. 
 506     void FitThisSizeToPage(const wxSize
& imageSize
); 
 509         Set the user scale and device origin of the wxDC associated with this wxPrintout 
 510         so that the given image size fits entirely within the page margins set in the 
 511         given wxPageSetupDialogData object. 
 513         This function provides the greatest consistency across all platforms because it 
 514         does not depend on having access to the printable area of the paper. 
 517         On Mac, the native wxPageSetupDialog does not let you set the page margins; 
 518         you'll have to provide your own mechanism, or you can use the Mac-only class 
 519         wxMacPageMarginsDialog. 
 521     void FitThisSizeToPageMargins(const wxSize
& imageSize
, 
 522                                   const wxPageSetupDialogData
& pageSetupData
); 
 525         Set the user scale and device origin of the wxDC associated with this wxPrintout 
 526         so that the given image size fits entirely within the paper and the origin is at 
 527         the top left corner of the paper. 
 529         Use this if you're managing your own page margins. 
 532         With most printers, the region around the edges of the paper are not 
 533         printable so that the edges of the image could be cut off. 
 536     void FitThisSizeToPaper(const wxSize
& imageSize
); 
 539         Returns the device context associated with the printout (given to the printout 
 540         at start of printing or previewing). 
 542         The application can use GetDC() to obtain a device context to draw on. 
 544         This will be a wxPrinterDC if printing under Windows or Mac, a wxPostScriptDC 
 545         if printing on other platforms, and a wxMemoryDC if previewing. 
 550         Return the rectangle corresponding to the page margins specified by the given 
 551         wxPageSetupDialogData object in the associated wxDC's logical coordinates for 
 552         the current user scale and device origin. 
 554         The page margins are specified with respect to the edges of the paper on all 
 557     wxRect 
GetLogicalPageMarginsRect(const wxPageSetupDialogData
& pageSetupData
) const; 
 560         Return the rectangle corresponding to the page in the associated wxDC 's 
 561         logical coordinates for the current user scale and device origin. 
 563         On MSW and Mac, this will be the printable area of the paper. 
 564         On other platforms and PostScript printing, this will be the full paper 
 567     wxRect 
GetLogicalPageRect() const; 
 570         Return the rectangle corresponding to the paper in the associated wxDC 's 
 571         logical coordinates for the current user scale and device origin. 
 573     wxRect 
GetLogicalPaperRect() const; 
 576         Returns the number of pixels per logical inch of the printer device context. 
 578         Dividing the printer PPI by the screen PPI can give a suitable scaling factor 
 579         for drawing text onto the printer. 
 581         Remember to multiply this by a scaling factor to take the preview DC size into 
 583         Or you can just use the FitThisSizeToXXX() and MapScreenSizeToXXX routines below, 
 584         which do most of the scaling calculations for you. 
 587         This method returns the output-only parameters as a tuple. 
 590     void GetPPIPrinter(int* w
, int* h
) const; 
 593         Returns the number of pixels per logical inch of the screen device context. 
 595         Dividing the printer PPI by the screen PPI can give a suitable scaling factor 
 596         for drawing text onto the printer. 
 598         If you are doing your own scaling, remember to multiply this by a scaling 
 599         factor to take the preview DC size into account. 
 602         This method returns the output-only parameters as a tuple. 
 605     void GetPPIScreen(int* w
, int* h
) const; 
 608         Called by the framework to obtain information from the application about minimum 
 609         and maximum page values that the user can select, and the required page range to 
 612         By default this returns (1, 32000) for the page minimum and maximum values, and 
 613         (1, 1) for the required page range. 
 615         @a minPage must be greater than zero and @a maxPage must be greater 
 619         When this method is implemented in a derived Python class, it should be designed 
 620         to take no parameters (other than the self reference) and to return a tuple of 
 624     virtual void GetPageInfo(int* minPage
, int* maxPage
, int* pageFrom
, 
 628         Returns the size of the printer page in millimetres. 
 631         This method returns the output-only parameters as a tuple. 
 634     void GetPageSizeMM(int* w
, int* h
) const; 
 637         Returns the size of the printer page in pixels, called the page rectangle. 
 639         The page rectangle has a top left corner at (0,0) and a bottom right corner at 
 640         (w,h). These values may not be the same as the values returned from 
 641         wxDC::GetSize(); if the printout is being used for 
 642         previewing, a memory device context is used, which uses a bitmap size reflecting 
 643         the current preview zoom. The application must take this discrepancy into 
 644         account if previewing is to be supported. 
 647         This method returns the output-only parameters as a tuple. 
 650     void GetPageSizePixels(int* w
, int* h
) const; 
 653         Returns the rectangle that corresponds to the entire paper in pixels, called the 
 656         This distinction between paper rectangle and page rectangle reflects the fact that 
 657         most printers cannot print all the way to the edge of the paper. 
 658         The page rectangle is a rectangle whose top left corner is at (0,0) and whose width 
 659         and height are given by wxDC::GetPageSizePixels(). 
 661         On MSW and Mac, the page rectangle gives the printable area of the paper, while the 
 662         paper rectangle represents the entire paper, including non-printable borders. 
 663         Thus, the rectangle returned by wxDC::GetPaperRectPixels() will have a top left corner 
 664         whose coordinates are small negative numbers and the bottom right corner will have 
 665         values somewhat larger than the width and height given by wxDC::GetPageSizePixels(). 
 667         On other platforms and for PostScript printing, the paper is treated as if its entire 
 668         area were printable, so this function will return the same rectangle as the page 
 671     wxRect 
GetPaperRectPixels() const; 
 674         Returns the title of the printout. 
 676         @todo the python note here was wrong 
 678     virtual wxString 
GetTitle() const; 
 681         Should be overridden to return @true if the document has this page, or @false 
 684         Returning @false signifies the end of the document. By default, 
 685         HasPage behaves as if the document has only one page. 
 687     virtual bool HasPage(int pageNum
); 
 690         Returns @true if the printout is currently being used for previewing. 
 692     virtual bool IsPreview() const; 
 695         Set the user scale and device origin of the wxDC associated with this wxPrintout 
 696         so that one screen pixel maps to one device pixel on the DC. 
 697         That is, the user scale is set to (1,1) and the device origin is set to (0,0). 
 699         Use this if you want to do your own scaling prior to calling wxDC drawing calls, 
 700         for example, if your underlying model is floating-point and you want to achieve 
 701         maximum drawing precision on high-resolution printers. 
 703         You can use the GetLogicalXXXRect() routines below to obtain the paper rectangle, 
 704         page rectangle, or page margins rectangle to perform your own scaling. 
 707         While the underlying drawing model of Mac OS X is floating-point, 
 708         wxWidgets's drawing model scales from integer coordinates. 
 710     void MapScreenSizeToDevice(); 
 713         This sets the user scale of the wxDC assocated with this wxPrintout to the same 
 714         scale as MapScreenSizeToPaper() but sets the logical origin to the top left corner 
 715         of the page rectangle. 
 717     void MapScreenSizeToPage(); 
 720         This sets the user scale of the wxDC assocated with this wxPrintout to the same 
 721         scale as MapScreenSizeToPageMargins() but sets the logical origin to the top left 
 722         corner of the page margins specified by the given wxPageSetupDialogData object. 
 724     void MapScreenSizeToPageMargins(const wxPageSetupDialogData
& pageSetupData
); 
 727         Set the user scale and device origin of the wxDC associated with this wxPrintout 
 728         so that the printed page matches the screen size as closely as possible 
 729         and the logical origin is in the top left corner of the paper rectangle. 
 731         That is, a 100-pixel object on screen should appear at the same size on the 
 733         (It will, of course, be larger or smaller in the preview image, depending on the 
 736         Use this if you want WYSIWYG behavior, e.g., in a text editor. 
 738     void MapScreenSizeToPaper(); 
 741         Shift the device origin by an amount specified in logical coordinates. 
 743     void OffsetLogicalOrigin(wxCoord xoff
, wxCoord yoff
); 
 746         Called by the framework at the start of document printing. Return @false from 
 747         this function cancels the print job. 
 749         OnBeginDocument() is called once for every copy printed. 
 752         The base OnBeginDocument() must be called (and the return value 
 753         checked) from within the overridden function, since it calls wxDC::StartDoc(). 
 756          If this method is overridden in a Python class then the base class version can 
 757          be called by using the method <tt>base_OnBeginDocument(startPage, endPage)</tt>. 
 760     virtual bool OnBeginDocument(int startPage
, int endPage
); 
 763         Called by the framework at the start of printing. 
 765         OnBeginPrinting() is called once for every print job 
 766         (regardless of how many copies are being printed). 
 768     virtual void OnBeginPrinting(); 
 771         Called by the framework at the end of document printing. 
 773         OnEndDocument() is called once for every copy printed. 
 776         The base OnEndDocument() must be called from within the overridden function, 
 777         since it calls wxDC::EndDoc(). 
 779     virtual void OnEndDocument(); 
 782         Called by the framework at the end of printing. 
 784         OnEndPrinting is called once for every print job 
 785         (regardless of how many copies are being printed). 
 787     virtual void OnEndPrinting(); 
 790         Called once by the framework before any other demands are made of the 
 793         This gives the object an opportunity to calculate the number of pages 
 794         in the document, for example. 
 796     virtual void OnPreparePrinting(); 
 799         Called by the framework when a page should be printed. Returning @false cancels 
 802     virtual bool OnPrintPage(int pageNum
) = 0; 
 805         Set the device origin of the associated wxDC so that the current logical point 
 806         becomes the new logical origin. 
 808     void SetLogicalOrigin(wxCoord x
, wxCoord y
);