more backwards compatibility for printing

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2030 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
1999-04-02 22:30:56 +00:00
parent 391364946e
commit 103aec296a
4 changed files with 222 additions and 166 deletions

View File

@@ -19,27 +19,28 @@
#include "wx/dialog.h" #include "wx/dialog.h"
#include "wx/cmndata.h" #include "wx/cmndata.h"
/*
* wxPrinterDialog
* The common dialog for printing.
*/
class WXDLLEXPORT wxDC; class WXDLLEXPORT wxDC;
// ---------------------------------------------------------------------------
// wxPrinterDialog: the common dialog for printing.
// ---------------------------------------------------------------------------
class WXDLLEXPORT wxPrintDialog : public wxDialog class WXDLLEXPORT wxPrintDialog : public wxDialog
{ {
DECLARE_DYNAMIC_CLASS(wxPrintDialog) DECLARE_DYNAMIC_CLASS(wxPrintDialog)
public: public:
wxPrintDialog(void); wxPrintDialog();
wxPrintDialog(wxWindow *parent, wxPrintDialogData* data = NULL); wxPrintDialog(wxWindow *parent, wxPrintDialogData* data = NULL);
~wxPrintDialog(void); wxPrintDialog(wxWindow *parent, wxPrintData* data);
virtual ~wxPrintDialog();
bool Create(wxWindow *parent, wxPrintDialogData* data = NULL); bool Create(wxWindow *parent, wxPrintDialogData* data = NULL);
virtual int ShowModal(void); virtual int ShowModal();
inline wxPrintDialogData& GetPrintDialogData(void) { return m_printDialogData; } wxPrintDialogData& GetPrintDialogData() { return m_printDialogData; }
inline wxPrintData& GetPrintData(void) { return m_printDialogData.GetPrintData(); } wxPrintData& GetPrintData() { return m_printDialogData.GetPrintData(); }
virtual wxDC *GetPrintDC(void); virtual wxDC *GetPrintDC();
private: private:
wxPrintDialogData m_printDialogData; wxPrintDialogData m_printDialogData;
@@ -52,18 +53,19 @@ class WXDLLEXPORT wxPageSetupDialog: public wxDialog
{ {
DECLARE_DYNAMIC_CLASS(wxPageSetupDialog) DECLARE_DYNAMIC_CLASS(wxPageSetupDialog)
public:
wxPageSetupDialog();
wxPageSetupDialog(wxWindow *parent, wxPageSetupData *data = NULL);
virtual ~wxPageSetupDialog();
bool Create(wxWindow *parent, wxPageSetupData *data = NULL);
virtual int ShowModal();
wxPageSetupData& GetPageSetupData() { return m_pageSetupData; }
private: private:
wxPageSetupData m_pageSetupData; wxPageSetupData m_pageSetupData;
wxWindow* m_dialogParent; wxWindow* m_dialogParent;
public:
wxPageSetupDialog(void);
wxPageSetupDialog(wxWindow *parent, wxPageSetupData *data = NULL);
~wxPageSetupDialog(void);
bool Create(wxWindow *parent, wxPageSetupData *data = NULL);
virtual int ShowModal(void);
inline wxPageSetupData& GetPageSetupData(void) { return m_pageSetupData; }
}; };
#endif #endif

View File

@@ -18,9 +18,9 @@
#include "wx/prntbase.h" #include "wx/prntbase.h"
/* // ---------------------------------------------------------------------------
* Represents the printer: manages printing a wxPrintout object // Represents the printer: manages printing a wxPrintout object
*/ // ---------------------------------------------------------------------------
class WXDLLEXPORT wxWindowsPrinter : public wxPrinterBase class WXDLLEXPORT wxWindowsPrinter : public wxPrinterBase
{ {
@@ -28,9 +28,11 @@ class WXDLLEXPORT wxWindowsPrinter: public wxPrinterBase
public: public:
wxWindowsPrinter(wxPrintDialogData *data = NULL); wxWindowsPrinter(wxPrintDialogData *data = NULL);
~wxWindowsPrinter(void); virtual ~wxWindowsPrinter();
virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = TRUE); virtual bool Print(wxWindow *parent,
wxPrintout *printout,
bool prompt = TRUE);
virtual wxDC* PrintDialog(wxWindow *parent); virtual wxDC* PrintDialog(wxWindow *parent);
virtual bool Setup(wxWindow *parent); virtual bool Setup(wxWindow *parent);
@@ -38,21 +40,26 @@ class WXDLLEXPORT wxWindowsPrinter: public wxPrinterBase
WXFARPROC m_lpAbortProc; WXFARPROC m_lpAbortProc;
}; };
/* // ---------------------------------------------------------------------------
* wxPrintPreview // wxPrintPreview: programmer creates an object of this class to preview a
* Programmer creates an object of this class to preview a wxPrintout. // wxPrintout.
*/ // ---------------------------------------------------------------------------
class WXDLLEXPORT wxWindowsPrintPreview : public wxPrintPreviewBase class WXDLLEXPORT wxWindowsPrintPreview : public wxPrintPreviewBase
{ {
DECLARE_CLASS(wxWindowsPrintPreview) DECLARE_CLASS(wxWindowsPrintPreview)
public: public:
wxWindowsPrintPreview(wxPrintout *printout, wxPrintout *printoutForPrinting = NULL, wxPrintDialogData *data = NULL); wxWindowsPrintPreview(wxPrintout *printout,
~wxWindowsPrintPreview(void); wxPrintout *printoutForPrinting = NULL,
wxPrintDialogData *data = NULL);
wxWindowsPrintPreview(wxPrintout *printout,
wxPrintout *printoutForPrinting,
wxPrintData *data);
virtual ~wxWindowsPrintPreview();
virtual bool Print(bool interactive); virtual bool Print(bool interactive);
virtual void DetermineScaling(void); virtual void DetermineScaling();
}; };
#endif #endif

View File

@@ -9,6 +9,14 @@
// Licence: wxWindows license // Licence: wxWindows license
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// ===========================================================================
// declarations
// ===========================================================================
// ---------------------------------------------------------------------------
// headers
// ---------------------------------------------------------------------------
#ifdef __GNUG__ #ifdef __GNUG__
#pragma implementation "printdlg.h" #pragma implementation "printdlg.h"
#endif #endif
@@ -20,9 +28,6 @@
#pragma hdrstop #pragma hdrstop
#endif #endif
#ifndef WX_PRECOMP
#endif
#include "wx/printdlg.h" #include "wx/printdlg.h"
#include "wx/dcprint.h" #include "wx/dcprint.h"
@@ -44,25 +49,44 @@
#undef StartDoc #undef StartDoc
#endif #endif
// ---------------------------------------------------------------------------
// wxWin macros
// ---------------------------------------------------------------------------
#if !USE_SHARED_LIBRARY #if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxPrintDialog, wxDialog) IMPLEMENT_DYNAMIC_CLASS(wxPrintDialog, wxDialog)
IMPLEMENT_CLASS(wxPageSetupDialog, wxDialog) IMPLEMENT_CLASS(wxPageSetupDialog, wxDialog)
#endif #endif
wxPrintDialog::wxPrintDialog(void): // ===========================================================================
wxDialog() // implementation
// ===========================================================================
// ---------------------------------------------------------------------------
// wxPrintDialog
// ---------------------------------------------------------------------------
wxPrintDialog::wxPrintDialog()
{ {
m_dialogParent = NULL; m_dialogParent = NULL;
m_printerDC = NULL; m_printerDC = NULL;
m_destroyDC = TRUE; m_destroyDC = TRUE;
} }
wxPrintDialog::wxPrintDialog(wxWindow *p, wxPrintDialogData* data): wxPrintDialog::wxPrintDialog(wxWindow *p, wxPrintDialogData* data)
wxDialog()
{ {
Create(p, data); Create(p, data);
} }
wxPrintDialog::wxPrintDialog(wxWindow *p, wxPrintData* data)
{
wxPrintDialogData data2;
if ( data )
data2 = *data;
Create(p, &data2);
}
bool wxPrintDialog::Create(wxWindow *p, wxPrintDialogData* data) bool wxPrintDialog::Create(wxWindow *p, wxPrintDialogData* data)
{ {
m_dialogParent = p; m_dialogParent = p;
@@ -77,13 +101,13 @@ bool wxPrintDialog::Create(wxWindow *p, wxPrintDialogData* data)
return TRUE; return TRUE;
} }
wxPrintDialog::~wxPrintDialog(void) wxPrintDialog::~wxPrintDialog()
{ {
if (m_destroyDC && m_printerDC) if (m_destroyDC && m_printerDC)
delete m_printerDC; delete m_printerDC;
} }
int wxPrintDialog::ShowModal(void) int wxPrintDialog::ShowModal()
{ {
m_printDialogData.ConvertToNative(); m_printDialogData.ConvertToNative();
@@ -97,17 +121,11 @@ int wxPrintDialog::ShowModal(void)
} }
else else
{ {
/*
char buf[256];
DWORD exError = CommDlgExtendedError();
sprintf(buf, "ret = %d, ex error = %d", (int) ret, (int) exError);
wxMessageBox(buf);
*/
return wxID_CANCEL; return wxID_CANCEL;
} }
} }
wxDC *wxPrintDialog::GetPrintDC(void) wxDC *wxPrintDialog::GetPrintDC()
{ {
if (m_printerDC) if (m_printerDC)
{ {
@@ -118,18 +136,16 @@ wxDC *wxPrintDialog::GetPrintDC(void)
return (wxDC*) NULL; return (wxDC*) NULL;
} }
/* // ---------------------------------------------------------------------------
* wxPageSetupDialog // wxPageSetupDialog
*/ // ---------------------------------------------------------------------------
wxPageSetupDialog::wxPageSetupDialog(void): wxPageSetupDialog::wxPageSetupDialog()
wxDialog()
{ {
m_dialogParent = NULL; m_dialogParent = NULL;
} }
wxPageSetupDialog::wxPageSetupDialog(wxWindow *p, wxPageSetupData *data): wxPageSetupDialog::wxPageSetupDialog(wxWindow *p, wxPageSetupData *data)
wxDialog()
{ {
Create(p, data); Create(p, data);
} }
@@ -147,11 +163,11 @@ bool wxPageSetupDialog::Create(wxWindow *p, wxPageSetupData *data)
return TRUE; return TRUE;
} }
wxPageSetupDialog::~wxPageSetupDialog(void) wxPageSetupDialog::~wxPageSetupDialog()
{ {
} }
int wxPageSetupDialog::ShowModal(void) int wxPageSetupDialog::ShowModal()
{ {
#ifdef __WIN95__ #ifdef __WIN95__
m_pageSetupData.ConvertToNative(); m_pageSetupData.ConvertToNative();

View File

@@ -9,6 +9,14 @@
// Licence: wxWindows license // Licence: wxWindows license
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// ===========================================================================
// declarations
// ===========================================================================
// ---------------------------------------------------------------------------
// headers
// ---------------------------------------------------------------------------
#ifdef __GNUG__ #ifdef __GNUG__
#pragma implementation "printwin.h" #pragma implementation "printwin.h"
#endif #endif
@@ -47,24 +55,36 @@
#include <print.h> #include <print.h>
#endif #endif
// ---------------------------------------------------------------------------
// private functions
// ---------------------------------------------------------------------------
LONG APIENTRY _EXPORT wxAbortProc(HDC hPr, int Code); LONG APIENTRY _EXPORT wxAbortProc(HDC hPr, int Code);
// ---------------------------------------------------------------------------
// wxWin macros
// ---------------------------------------------------------------------------
#if !USE_SHARED_LIBRARY #if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxWindowsPrinter, wxPrinterBase) IMPLEMENT_DYNAMIC_CLASS(wxWindowsPrinter, wxPrinterBase)
IMPLEMENT_CLASS(wxWindowsPrintPreview, wxPrintPreviewBase) IMPLEMENT_CLASS(wxWindowsPrintPreview, wxPrintPreviewBase)
#endif #endif
/* // ===========================================================================
* Printer // implementation
*/ // ===========================================================================
wxWindowsPrinter::wxWindowsPrinter(wxPrintDialogData *data): // ---------------------------------------------------------------------------
wxPrinterBase(data) // Printer
// ---------------------------------------------------------------------------
wxWindowsPrinter::wxWindowsPrinter(wxPrintDialogData *data)
: wxPrinterBase(data)
{ {
m_lpAbortProc = (WXFARPROC) MakeProcInstance((FARPROC) wxAbortProc, wxGetInstance()); m_lpAbortProc = (WXFARPROC) MakeProcInstance((FARPROC) wxAbortProc, wxGetInstance());
} }
wxWindowsPrinter::~wxWindowsPrinter(void) wxWindowsPrinter::~wxWindowsPrinter()
{ {
FreeProcInstance((FARPROC) m_lpAbortProc); FreeProcInstance((FARPROC) m_lpAbortProc);
} }
@@ -173,7 +193,7 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
#else #else
::SetAbortProc((HDC) dc->GetHDC(), (int (_stdcall *) ::SetAbortProc((HDC) dc->GetHDC(), (int (_stdcall *)
// cast it to right type only if required // cast it to right type only if required
// @@@ it's really cdecl and we're casting it to stdcall - either there is // FIXME it's really cdecl and we're casting it to stdcall - either there is
// something I don't understand or it will crash at first usage // something I don't understand or it will crash at first usage
#ifdef STRICT #ifdef STRICT
(HDC, int) (HDC, int)
@@ -186,12 +206,13 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
if (!win) if (!win)
{ {
wxEndBusyCursor(); wxEndBusyCursor();
wxMessageBox("Sorry, could not create an abort dialog.", "Print Error", wxOK, parent); wxLogDebug("Could not create an abort dialog.");
delete dc; delete dc;
} }
sm_abortWindow = win; sm_abortWindow = win;
sm_abortWindow->Show(TRUE); sm_abortWindow->Show(TRUE);
wxYield(); wxSafeYield();
printout->OnBeginPrinting(); printout->OnBeginPrinting();
@@ -203,7 +224,7 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt
if (!printout->OnBeginDocument(m_printDialogData.GetFromPage(), m_printDialogData.GetToPage())) if (!printout->OnBeginDocument(m_printDialogData.GetFromPage(), m_printDialogData.GetToPage()))
{ {
wxEndBusyCursor(); wxEndBusyCursor();
wxMessageBox("Could not start printing.", "Print Error", wxOK, parent); wxLogError(_("Could not start printing."));
break; break;
} }
if (sm_abortIt) if (sm_abortIt)
@@ -279,13 +300,23 @@ bool wxWindowsPrinter::Setup(wxWindow *parent)
* Print preview * Print preview
*/ */
wxWindowsPrintPreview::wxWindowsPrintPreview(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintDialogData *data): wxWindowsPrintPreview::wxWindowsPrintPreview(wxPrintout *printout,
wxPrintPreviewBase(printout, printoutForPrinting, data) wxPrintout *printoutForPrinting,
wxPrintDialogData *data)
: wxPrintPreviewBase(printout, printoutForPrinting, data)
{ {
DetermineScaling(); DetermineScaling();
} }
wxWindowsPrintPreview::~wxWindowsPrintPreview(void) wxWindowsPrintPreview::wxWindowsPrintPreview(wxPrintout *printout,
wxPrintout *printoutForPrinting,
wxPrintData *data)
: wxPrintPreviewBase(printout, printoutForPrinting, data)
{
DetermineScaling();
}
wxWindowsPrintPreview::~wxWindowsPrintPreview()
{ {
} }
@@ -297,7 +328,7 @@ bool wxWindowsPrintPreview::Print(bool interactive)
return printer.Print(m_previewFrame, m_printPrintout, interactive); return printer.Print(m_previewFrame, m_printPrintout, interactive);
} }
void wxWindowsPrintPreview::DetermineScaling(void) void wxWindowsPrintPreview::DetermineScaling()
{ {
HDC dc = ::GetDC(NULL); HDC dc = ::GetDC(NULL);
int screenWidth = ::GetDeviceCaps(dc, HORZSIZE); int screenWidth = ::GetDeviceCaps(dc, HORZSIZE);