1
/////////////////////////////////////////////////////////////////////////////
3
// Purpose: Base classes for printing framework
4
// Author: Julian Smart
7
// RCS-ID: $Id: prntbase.h,v 1.45 2005/07/28 22:20:05 VZ Exp $
8
// Copyright: (c) Julian Smart
9
// Licence: wxWindows licence
10
/////////////////////////////////////////////////////////////////////////////
12
#ifndef _WX_PRNTBASEH__
13
#define _WX_PRNTBASEH__
15
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
16
#pragma interface "prntbase.h"
21
#if wxUSE_PRINTING_ARCHITECTURE
24
#include "wx/cmndata.h"
26
#include "wx/scrolwin.h"
27
#include "wx/dialog.h"
30
class WXDLLEXPORT wxDC;
31
class WXDLLEXPORT wxButton;
32
class WXDLLEXPORT wxChoice;
33
class WXDLLEXPORT wxPrintout;
34
class WXDLLEXPORT wxPrinterBase;
35
class WXDLLEXPORT wxPrintDialogBase;
36
class WXDLLEXPORT wxPrintDialog;
37
class WXDLLEXPORT wxPageSetupDialogBase;
38
class WXDLLEXPORT wxPageSetupDialog;
39
class WXDLLEXPORT wxPrintPreviewBase;
40
class WXDLLEXPORT wxPreviewCanvas;
41
class WXDLLEXPORT wxPreviewControlBar;
42
class WXDLLEXPORT wxPreviewFrame;
43
class WXDLLEXPORT wxPrintFactory;
44
class WXDLLEXPORT wxPrintNativeDataBase;
46
//----------------------------------------------------------------------------
48
//----------------------------------------------------------------------------
52
wxPRINTER_NO_ERROR = 0,
57
//----------------------------------------------------------------------------
59
//----------------------------------------------------------------------------
61
class WXDLLEXPORT wxPrintFactory
65
virtual ~wxPrintFactory() {}
67
virtual wxPrinterBase *CreatePrinter( wxPrintDialogData* data ) = 0;
69
virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview,
70
wxPrintout *printout = NULL,
71
wxPrintDialogData *data = NULL ) = 0;
72
virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview,
74
wxPrintData *data ) = 0;
76
virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent,
77
wxPrintDialogData *data = NULL ) = 0;
78
virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent,
79
wxPrintData *data ) = 0;
81
virtual wxPageSetupDialogBase *CreatePageSetupDialog( wxWindow *parent,
82
wxPageSetupDialogData * data = NULL ) = 0;
84
// What to do and what to show in the wxPrintDialog
85
// a) Use the generic print setup dialog or a native one?
86
virtual bool HasPrintSetupDialog() = 0;
87
virtual wxDialog *CreatePrintSetupDialog( wxWindow *parent, wxPrintData *data ) = 0;
88
// b) Provide the "print to file" option ourselves or via print setup?
89
virtual bool HasOwnPrintToFile() = 0;
90
// c) Show current printer
91
virtual bool HasPrinterLine() = 0;
92
virtual wxString CreatePrinterLine() = 0;
93
// d) Show Status line for current printer?
94
virtual bool HasStatusLine() = 0;
95
virtual wxString CreateStatusLine() = 0;
98
virtual wxPrintNativeDataBase *CreatePrintNativeData() = 0;
100
static void SetPrintFactory( wxPrintFactory *factory );
101
static wxPrintFactory *GetFactory();
102
static wxPrintFactory *m_factory;
105
class WXDLLEXPORT wxNativePrintFactory: public wxPrintFactory
108
virtual wxPrinterBase *CreatePrinter( wxPrintDialogData *data );
110
virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview,
111
wxPrintout *printout = NULL,
112
wxPrintDialogData *data = NULL );
113
virtual wxPrintPreviewBase *CreatePrintPreview( wxPrintout *preview,
114
wxPrintout *printout,
117
virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent,
118
wxPrintDialogData *data = NULL );
119
virtual wxPrintDialogBase *CreatePrintDialog( wxWindow *parent,
122
virtual wxPageSetupDialogBase *CreatePageSetupDialog( wxWindow *parent,
123
wxPageSetupDialogData * data = NULL );
125
virtual bool HasPrintSetupDialog();
126
virtual wxDialog *CreatePrintSetupDialog( wxWindow *parent, wxPrintData *data );
127
virtual bool HasOwnPrintToFile();
128
virtual bool HasPrinterLine();
129
virtual wxString CreatePrinterLine();
130
virtual bool HasStatusLine();
131
virtual wxString CreateStatusLine();
133
virtual wxPrintNativeDataBase *CreatePrintNativeData();
136
//----------------------------------------------------------------------------
137
// wxPrintNativeDataBase
138
//----------------------------------------------------------------------------
140
class WXDLLEXPORT wxPrintNativeDataBase: public wxObject
143
wxPrintNativeDataBase();
144
virtual ~wxPrintNativeDataBase() {}
146
virtual bool TransferTo( wxPrintData &data ) = 0;
147
virtual bool TransferFrom( const wxPrintData &data ) = 0;
149
virtual bool Ok() const = 0;
154
DECLARE_CLASS(wxPrintNativeDataBase)
155
DECLARE_NO_COPY_CLASS(wxPrintNativeDataBase)
158
//----------------------------------------------------------------------------
160
//----------------------------------------------------------------------------
163
* Represents the printer: manages printing a wxPrintout object
166
class WXDLLEXPORT wxPrinterBase: public wxObject
169
wxPrinterBase(wxPrintDialogData *data = (wxPrintDialogData *) NULL);
170
virtual ~wxPrinterBase();
172
virtual wxWindow *CreateAbortWindow(wxWindow *parent, wxPrintout *printout);
173
virtual void ReportError(wxWindow *parent, wxPrintout *printout, const wxString& message);
175
virtual wxPrintDialogData& GetPrintDialogData() const;
176
bool GetAbort() const { return sm_abortIt; }
178
static wxPrinterError GetLastError() { return sm_lastError; }
180
///////////////////////////////////////////////////////////////////////////
183
virtual bool Setup(wxWindow *parent) = 0;
184
virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = true) = 0;
185
virtual wxDC* PrintDialog(wxWindow *parent) = 0;
188
wxPrintDialogData m_printDialogData;
189
wxPrintout* m_currentPrintout;
191
static wxPrinterError sm_lastError;
194
static wxWindow* sm_abortWindow;
195
static bool sm_abortIt;
198
DECLARE_CLASS(wxPrinterBase)
199
DECLARE_NO_COPY_CLASS(wxPrinterBase)
202
//----------------------------------------------------------------------------
204
//----------------------------------------------------------------------------
206
class WXDLLEXPORT wxPrinter: public wxPrinterBase
209
wxPrinter(wxPrintDialogData *data = (wxPrintDialogData *) NULL);
210
virtual ~wxPrinter();
212
virtual wxWindow *CreateAbortWindow(wxWindow *parent, wxPrintout *printout);
213
virtual void ReportError(wxWindow *parent, wxPrintout *printout, const wxString& message);
215
virtual bool Setup(wxWindow *parent);
216
virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = true);
217
virtual wxDC* PrintDialog(wxWindow *parent);
219
virtual wxPrintDialogData& GetPrintDialogData() const;
222
wxPrinterBase *m_pimpl;
225
DECLARE_CLASS(wxPrinter)
226
DECLARE_NO_COPY_CLASS(wxPrinter)
229
//----------------------------------------------------------------------------
231
//----------------------------------------------------------------------------
234
* Represents an object via which a document may be printed.
235
* The programmer derives from this, overrides (at least) OnPrintPage,
236
* and passes it to a wxPrinter object for printing, or a wxPrintPreview
237
* object for previewing.
240
class WXDLLEXPORT wxPrintout: public wxObject
243
wxPrintout(const wxString& title = wxT("Printout"));
244
virtual ~wxPrintout();
246
virtual bool OnBeginDocument(int startPage, int endPage);
247
virtual void OnEndDocument();
248
virtual void OnBeginPrinting();
249
virtual void OnEndPrinting();
251
// Guaranteed to be before any other functions are called
252
virtual void OnPreparePrinting() { }
254
virtual bool HasPage(int page);
255
virtual bool OnPrintPage(int page) = 0;
256
virtual void GetPageInfo(int *minPage, int *maxPage, int *pageFrom, int *pageTo);
258
virtual wxString GetTitle() const { return m_printoutTitle; }
260
wxDC *GetDC() const { return m_printoutDC; }
261
void SetDC(wxDC *dc) { m_printoutDC = dc; }
262
void SetPageSizePixels(int w, int h) { m_pageWidthPixels = w; m_pageHeightPixels = h; }
263
void GetPageSizePixels(int *w, int *h) const { *w = m_pageWidthPixels; *h = m_pageHeightPixels; }
264
void SetPageSizeMM(int w, int h) { m_pageWidthMM = w; m_pageHeightMM = h; }
265
void GetPageSizeMM(int *w, int *h) const { *w = m_pageWidthMM; *h = m_pageHeightMM; }
267
void SetPPIScreen(int x, int y) { m_PPIScreenX = x; m_PPIScreenY = y; }
268
void GetPPIScreen(int *x, int *y) const { *x = m_PPIScreenX; *y = m_PPIScreenY; }
269
void SetPPIPrinter(int x, int y) { m_PPIPrinterX = x; m_PPIPrinterY = y; }
270
void GetPPIPrinter(int *x, int *y) const { *x = m_PPIPrinterX; *y = m_PPIPrinterY; }
272
virtual bool IsPreview() const { return m_isPreview; }
274
virtual void SetIsPreview(bool p) { m_isPreview = p; }
277
wxString m_printoutTitle;
280
int m_pageWidthPixels;
281
int m_pageHeightPixels;
294
DECLARE_ABSTRACT_CLASS(wxPrintout)
295
DECLARE_NO_COPY_CLASS(wxPrintout)
300
* Canvas upon which a preview is drawn.
303
class WXDLLEXPORT wxPreviewCanvas: public wxScrolledWindow
306
wxPreviewCanvas(wxPrintPreviewBase *preview,
308
const wxPoint& pos = wxDefaultPosition,
309
const wxSize& size = wxDefaultSize,
311
const wxString& name = wxT("canvas"));
314
void OnPaint(wxPaintEvent& event);
315
void OnChar(wxKeyEvent &event);
316
// Responds to colour changes
317
void OnSysColourChanged(wxSysColourChangedEvent& event);
321
void OnMouseWheel(wxMouseEvent& event);
322
#endif // wxUSE_MOUSEWHEEL
324
wxPrintPreviewBase* m_printPreview;
326
DECLARE_CLASS(wxPreviewCanvas)
327
DECLARE_EVENT_TABLE()
328
DECLARE_NO_COPY_CLASS(wxPreviewCanvas)
333
* Default frame for showing preview.
336
class WXDLLEXPORT wxPreviewFrame: public wxFrame
339
wxPreviewFrame(wxPrintPreviewBase *preview,
341
const wxString& title = wxT("Print Preview"),
342
const wxPoint& pos = wxDefaultPosition,
343
const wxSize& size = wxDefaultSize,
344
long style = wxDEFAULT_FRAME_STYLE,
345
const wxString& name = wxT("frame"));
348
void OnCloseWindow(wxCloseEvent& event);
349
virtual void Initialize();
350
virtual void CreateCanvas();
351
virtual void CreateControlBar();
353
inline wxPreviewControlBar* GetControlBar() const { return m_controlBar; }
356
wxPreviewCanvas* m_previewCanvas;
357
wxPreviewControlBar* m_controlBar;
358
wxPrintPreviewBase* m_printPreview;
359
wxWindowDisabler* m_windowDisabler;
362
DECLARE_CLASS(wxPreviewFrame)
363
DECLARE_EVENT_TABLE()
364
DECLARE_NO_COPY_CLASS(wxPreviewFrame)
368
* wxPreviewControlBar
369
* A panel with buttons for controlling a print preview.
370
* The programmer may wish to use other means for controlling
374
#define wxPREVIEW_PRINT 1
375
#define wxPREVIEW_PREVIOUS 2
376
#define wxPREVIEW_NEXT 4
377
#define wxPREVIEW_ZOOM 8
378
#define wxPREVIEW_FIRST 16
379
#define wxPREVIEW_LAST 32
380
#define wxPREVIEW_GOTO 64
382
#define wxPREVIEW_DEFAULT (wxPREVIEW_PREVIOUS|wxPREVIEW_NEXT|wxPREVIEW_ZOOM\
383
|wxPREVIEW_FIRST|wxPREVIEW_GOTO|wxPREVIEW_LAST)
386
#define wxID_PREVIEW_CLOSE 1
387
#define wxID_PREVIEW_NEXT 2
388
#define wxID_PREVIEW_PREVIOUS 3
389
#define wxID_PREVIEW_PRINT 4
390
#define wxID_PREVIEW_ZOOM 5
391
#define wxID_PREVIEW_FIRST 6
392
#define wxID_PREVIEW_LAST 7
393
#define wxID_PREVIEW_GOTO 8
395
class WXDLLEXPORT wxPreviewControlBar: public wxPanel
397
DECLARE_CLASS(wxPreviewControlBar)
400
wxPreviewControlBar(wxPrintPreviewBase *preview,
403
const wxPoint& pos = wxDefaultPosition,
404
const wxSize& size = wxDefaultSize,
405
long style = wxTAB_TRAVERSAL,
406
const wxString& name = wxT("panel"));
407
~wxPreviewControlBar();
409
virtual void CreateButtons();
410
virtual void SetZoomControl(int zoom);
411
virtual int GetZoomControl();
412
virtual wxPrintPreviewBase *GetPrintPreview() const
413
{ return m_printPreview; }
415
void OnWindowClose(wxCommandEvent& event);
422
void OnPrintButton(wxCommandEvent& WXUNUSED(event)) { OnPrint(); }
423
void OnNextButton(wxCommandEvent & WXUNUSED(event)) { OnNext(); }
424
void OnPreviousButton(wxCommandEvent & WXUNUSED(event)) { OnPrevious(); }
425
void OnFirstButton(wxCommandEvent & WXUNUSED(event)) { OnFirst(); }
426
void OnLastButton(wxCommandEvent & WXUNUSED(event)) { OnLast(); }
427
void OnGotoButton(wxCommandEvent & WXUNUSED(event)) { OnGoto(); }
428
void OnZoom(wxCommandEvent& event);
429
void OnPaint(wxPaintEvent& event);
432
wxPrintPreviewBase* m_printPreview;
433
wxButton* m_closeButton;
434
wxButton* m_nextPageButton;
435
wxButton* m_previousPageButton;
436
wxButton* m_printButton;
437
wxChoice* m_zoomControl;
438
wxButton* m_firstPageButton;
439
wxButton* m_lastPageButton;
440
wxButton* m_gotoPageButton;
444
DECLARE_EVENT_TABLE()
445
DECLARE_NO_COPY_CLASS(wxPreviewControlBar)
448
//----------------------------------------------------------------------------
449
// wxPrintPreviewBase
450
//----------------------------------------------------------------------------
453
* Programmer creates an object of this class to preview a wxPrintout.
456
class WXDLLEXPORT wxPrintPreviewBase: public wxObject
459
wxPrintPreviewBase(wxPrintout *printout,
460
wxPrintout *printoutForPrinting = (wxPrintout *) NULL,
461
wxPrintDialogData *data = (wxPrintDialogData *) NULL);
462
wxPrintPreviewBase(wxPrintout *printout,
463
wxPrintout *printoutForPrinting,
465
virtual ~wxPrintPreviewBase();
467
virtual bool SetCurrentPage(int pageNum);
468
virtual int GetCurrentPage() const;
470
virtual void SetPrintout(wxPrintout *printout);
471
virtual wxPrintout *GetPrintout() const;
472
virtual wxPrintout *GetPrintoutForPrinting() const;
474
virtual void SetFrame(wxFrame *frame);
475
virtual void SetCanvas(wxPreviewCanvas *canvas);
477
virtual wxFrame *GetFrame() const;
478
virtual wxPreviewCanvas *GetCanvas() const;
480
// The preview canvas should call this from OnPaint
481
virtual bool PaintPage(wxPreviewCanvas *canvas, wxDC& dc);
483
// This draws a blank page onto the preview canvas
484
virtual bool DrawBlankPage(wxPreviewCanvas *canvas, wxDC& dc);
486
// Adjusts the scrollbars for the current scale
487
virtual void AdjustScrollbars(wxPreviewCanvas *canvas);
489
// This is called by wxPrintPreview to render a page into a wxMemoryDC.
490
virtual bool RenderPage(int pageNum);
493
virtual void SetZoom(int percent);
494
virtual int GetZoom() const;
496
virtual wxPrintDialogData& GetPrintDialogData();
498
virtual int GetMaxPage() const;
499
virtual int GetMinPage() const;
501
virtual bool Ok() const;
502
virtual void SetOk(bool ok);
504
///////////////////////////////////////////////////////////////////////////
507
// If we own a wxPrintout that can be used for printing, this
508
// will invoke the actual printing procedure. Called
509
// by the wxPreviewControlBar.
510
virtual bool Print(bool interactive) = 0;
512
// Calculate scaling that needs to be done to get roughly
513
// the right scaling for the screen pretending to be
514
// the currently selected printer.
515
virtual void DetermineScaling() = 0;
518
wxPrintDialogData m_printDialogData;
519
wxPreviewCanvas* m_previewCanvas;
520
wxFrame* m_previewFrame;
521
wxBitmap* m_previewBitmap;
522
wxPrintout* m_previewPrintout;
523
wxPrintout* m_printPrintout;
526
float m_previewScale;
535
bool m_printingPrepared; // Called OnPreparePrinting?
538
void Init(wxPrintout *printout, wxPrintout *printoutForPrinting);
540
DECLARE_NO_COPY_CLASS(wxPrintPreviewBase)
541
DECLARE_CLASS(wxPrintPreviewBase)
544
//----------------------------------------------------------------------------
546
//----------------------------------------------------------------------------
548
class WXDLLEXPORT wxPrintPreview: public wxPrintPreviewBase
551
wxPrintPreview(wxPrintout *printout,
552
wxPrintout *printoutForPrinting = (wxPrintout *) NULL,
553
wxPrintDialogData *data = (wxPrintDialogData *) NULL);
554
wxPrintPreview(wxPrintout *printout,
555
wxPrintout *printoutForPrinting,
557
virtual ~wxPrintPreview();
559
virtual bool SetCurrentPage(int pageNum);
560
virtual int GetCurrentPage() const;
561
virtual void SetPrintout(wxPrintout *printout);
562
virtual wxPrintout *GetPrintout() const;
563
virtual wxPrintout *GetPrintoutForPrinting() const;
564
virtual void SetFrame(wxFrame *frame);
565
virtual void SetCanvas(wxPreviewCanvas *canvas);
567
virtual wxFrame *GetFrame() const;
568
virtual wxPreviewCanvas *GetCanvas() const;
569
virtual bool PaintPage(wxPreviewCanvas *canvas, wxDC& dc);
570
virtual bool DrawBlankPage(wxPreviewCanvas *canvas, wxDC& dc);
571
virtual void AdjustScrollbars(wxPreviewCanvas *canvas);
572
virtual bool RenderPage(int pageNum);
573
virtual void SetZoom(int percent);
575
virtual bool Print(bool interactive);
576
virtual void DetermineScaling();
578
virtual wxPrintDialogData& GetPrintDialogData();
580
virtual int GetMaxPage() const;
581
virtual int GetMinPage() const;
583
virtual bool Ok() const;
584
virtual void SetOk(bool ok);
587
wxPrintPreviewBase *m_pimpl;
590
DECLARE_CLASS(wxPrintPreview)
591
DECLARE_NO_COPY_CLASS(wxPrintPreview)
594
//----------------------------------------------------------------------------
595
// wxPrintAbortDialog
596
//----------------------------------------------------------------------------
598
class WXDLLEXPORT wxPrintAbortDialog: public wxDialog
601
wxPrintAbortDialog(wxWindow *parent,
602
const wxString& title,
603
const wxPoint& pos = wxDefaultPosition,
604
const wxSize& size = wxDefaultSize,
606
const wxString& name = wxT("dialog"))
607
: wxDialog(parent, wxID_ANY, title, pos, size, style, name)
611
void OnCancel(wxCommandEvent& event);
614
DECLARE_EVENT_TABLE()
615
DECLARE_NO_COPY_CLASS(wxPrintAbortDialog)
618
#endif // wxUSE_PRINTING_ARCHITECTURE