diff --git a/include/wx/msw/printdlg.h b/include/wx/msw/printdlg.h index 655a1ad3d6..69921c0b4a 100644 --- a/include/wx/msw/printdlg.h +++ b/include/wx/msw/printdlg.h @@ -6,7 +6,7 @@ // Created: 01/02/97 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_PRINTDLG_H_ @@ -19,51 +19,53 @@ #include "wx/dialog.h" #include "wx/cmndata.h" -/* - * wxPrinterDialog - * The common dialog for printing. - */ - class WXDLLEXPORT wxDC; -class WXDLLEXPORT wxPrintDialog: public wxDialog + +// --------------------------------------------------------------------------- +// wxPrinterDialog: the common dialog for printing. +// --------------------------------------------------------------------------- + +class WXDLLEXPORT wxPrintDialog : public wxDialog { - DECLARE_DYNAMIC_CLASS(wxPrintDialog) + DECLARE_DYNAMIC_CLASS(wxPrintDialog) public: - wxPrintDialog(void); - wxPrintDialog(wxWindow *parent, wxPrintDialogData* data = NULL); - ~wxPrintDialog(void); + wxPrintDialog(); + wxPrintDialog(wxWindow *parent, wxPrintDialogData* data = NULL); + wxPrintDialog(wxWindow *parent, wxPrintData* data); + virtual ~wxPrintDialog(); - bool Create(wxWindow *parent, wxPrintDialogData* data = NULL); - virtual int ShowModal(void); + bool Create(wxWindow *parent, wxPrintDialogData* data = NULL); + virtual int ShowModal(); - inline wxPrintDialogData& GetPrintDialogData(void) { return m_printDialogData; } - inline wxPrintData& GetPrintData(void) { return m_printDialogData.GetPrintData(); } - virtual wxDC *GetPrintDC(void); + wxPrintDialogData& GetPrintDialogData() { return m_printDialogData; } + wxPrintData& GetPrintData() { return m_printDialogData.GetPrintData(); } + virtual wxDC *GetPrintDC(); private: - wxPrintDialogData m_printDialogData; - wxDC* m_printerDC; - bool m_destroyDC; - wxWindow* m_dialogParent; + wxPrintDialogData m_printDialogData; + wxDC* m_printerDC; + bool m_destroyDC; + wxWindow* m_dialogParent; }; class WXDLLEXPORT wxPageSetupDialog: public wxDialog { - DECLARE_DYNAMIC_CLASS(wxPageSetupDialog) + DECLARE_DYNAMIC_CLASS(wxPageSetupDialog) - private: - wxPageSetupData m_pageSetupData; - wxWindow* m_dialogParent; - public: - wxPageSetupDialog(void); - wxPageSetupDialog(wxWindow *parent, wxPageSetupData *data = NULL); - ~wxPageSetupDialog(void); +public: + wxPageSetupDialog(); + wxPageSetupDialog(wxWindow *parent, wxPageSetupData *data = NULL); + virtual ~wxPageSetupDialog(); - bool Create(wxWindow *parent, wxPageSetupData *data = NULL); - virtual int ShowModal(void); + bool Create(wxWindow *parent, wxPageSetupData *data = NULL); + virtual int ShowModal(); - inline wxPageSetupData& GetPageSetupData(void) { return m_pageSetupData; } + wxPageSetupData& GetPageSetupData() { return m_pageSetupData; } + +private: + wxPageSetupData m_pageSetupData; + wxWindow* m_dialogParent; }; #endif diff --git a/include/wx/msw/printwin.h b/include/wx/msw/printwin.h index 00abaf710d..9f7d368f7a 100644 --- a/include/wx/msw/printwin.h +++ b/include/wx/msw/printwin.h @@ -6,54 +6,61 @@ // Created: 01/02/97 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_PRINTWIN_H_ #define _WX_PRINTWIN_H_ #ifdef __GNUG__ -#pragma interface "printwin.h" + #pragma interface "printwin.h" #endif #include "wx/prntbase.h" -/* - * Represents the printer: manages printing a wxPrintout object - */ - -class WXDLLEXPORT wxWindowsPrinter: public wxPrinterBase +// --------------------------------------------------------------------------- +// Represents the printer: manages printing a wxPrintout object +// --------------------------------------------------------------------------- + +class WXDLLEXPORT wxWindowsPrinter : public wxPrinterBase { - DECLARE_DYNAMIC_CLASS(wxWindowsPrinter) + DECLARE_DYNAMIC_CLASS(wxWindowsPrinter) - public: - wxWindowsPrinter(wxPrintDialogData *data = NULL); - ~wxWindowsPrinter(void); +public: + wxWindowsPrinter(wxPrintDialogData *data = NULL); + virtual ~wxWindowsPrinter(); - virtual bool Print(wxWindow *parent, wxPrintout *printout, bool prompt = TRUE); - virtual wxDC* PrintDialog(wxWindow *parent); - virtual bool Setup(wxWindow *parent); + virtual bool Print(wxWindow *parent, + wxPrintout *printout, + bool prompt = TRUE); + virtual wxDC* PrintDialog(wxWindow *parent); + virtual bool Setup(wxWindow *parent); - private: - WXFARPROC m_lpAbortProc; +private: + WXFARPROC m_lpAbortProc; }; -/* - * wxPrintPreview - * Programmer creates an object of this class to preview a wxPrintout. - */ - -class WXDLLEXPORT wxWindowsPrintPreview: public wxPrintPreviewBase +// --------------------------------------------------------------------------- +// wxPrintPreview: programmer creates an object of this class to preview a +// wxPrintout. +// --------------------------------------------------------------------------- + +class WXDLLEXPORT wxWindowsPrintPreview : public wxPrintPreviewBase { - DECLARE_CLASS(wxWindowsPrintPreview) + DECLARE_CLASS(wxWindowsPrintPreview) - public: - wxWindowsPrintPreview(wxPrintout *printout, wxPrintout *printoutForPrinting = NULL, wxPrintDialogData *data = NULL); - ~wxWindowsPrintPreview(void); +public: + wxWindowsPrintPreview(wxPrintout *printout, + wxPrintout *printoutForPrinting = NULL, + wxPrintDialogData *data = NULL); + wxWindowsPrintPreview(wxPrintout *printout, + wxPrintout *printoutForPrinting, + wxPrintData *data); + virtual ~wxWindowsPrintPreview(); - virtual bool Print(bool interactive); - virtual void DetermineScaling(void); + virtual bool Print(bool interactive); + virtual void DetermineScaling(); }; #endif - // _WX_PRINTWIN_H_ +// _WX_PRINTWIN_H_ diff --git a/src/msw/printdlg.cpp b/src/msw/printdlg.cpp index 2d0eb79e6c..57ae304e13 100644 --- a/src/msw/printdlg.cpp +++ b/src/msw/printdlg.cpp @@ -6,21 +6,26 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// +// =========================================================================== +// declarations +// =========================================================================== + +// --------------------------------------------------------------------------- +// headers +// --------------------------------------------------------------------------- + #ifdef __GNUG__ -#pragma implementation "printdlg.h" + #pragma implementation "printdlg.h" #endif // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop -#endif - -#ifndef WX_PRECOMP + #pragma hdrstop #endif #include "wx/printdlg.h" @@ -28,7 +33,7 @@ // Have to emulate page setup dialog for Win16 #if !defined(__WIN95__) -#include "wx/generic/prntdlgg.h" + #include "wx/generic/prntdlgg.h" #endif #include @@ -36,7 +41,7 @@ #include #ifndef __WIN32__ -#include + #include #endif // Clash with Windows header files @@ -44,25 +49,44 @@ #undef StartDoc #endif +// --------------------------------------------------------------------------- +// wxWin macros +// --------------------------------------------------------------------------- + #if !USE_SHARED_LIBRARY -IMPLEMENT_DYNAMIC_CLASS(wxPrintDialog, wxDialog) -IMPLEMENT_CLASS(wxPageSetupDialog, wxDialog) + IMPLEMENT_DYNAMIC_CLASS(wxPrintDialog, wxDialog) + IMPLEMENT_CLASS(wxPageSetupDialog, wxDialog) #endif -wxPrintDialog::wxPrintDialog(void): -wxDialog() +// =========================================================================== +// implementation +// =========================================================================== + +// --------------------------------------------------------------------------- +// wxPrintDialog +// --------------------------------------------------------------------------- + +wxPrintDialog::wxPrintDialog() { m_dialogParent = NULL; m_printerDC = NULL; m_destroyDC = TRUE; } -wxPrintDialog::wxPrintDialog(wxWindow *p, wxPrintDialogData* data): -wxDialog() +wxPrintDialog::wxPrintDialog(wxWindow *p, wxPrintDialogData* 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) { m_dialogParent = p; @@ -71,22 +95,22 @@ bool wxPrintDialog::Create(wxWindow *p, wxPrintDialogData* data) if ( data ) m_printDialogData = *data; - + m_printDialogData.SetOwnerWindow(p); return TRUE; } -wxPrintDialog::~wxPrintDialog(void) +wxPrintDialog::~wxPrintDialog() { if (m_destroyDC && m_printerDC) delete m_printerDC; } -int wxPrintDialog::ShowModal(void) +int wxPrintDialog::ShowModal() { m_printDialogData.ConvertToNative(); - + bool ret = (PrintDlg( (PRINTDLG *)m_printDialogData.GetNativeData() ) != 0); if ( ret != FALSE && ((PRINTDLG *)m_printDialogData.GetNativeData())->hDC) { @@ -97,17 +121,11 @@ int wxPrintDialog::ShowModal(void) } else { - /* - char buf[256]; - DWORD exError = CommDlgExtendedError(); - sprintf(buf, "ret = %d, ex error = %d", (int) ret, (int) exError); - wxMessageBox(buf); - */ return wxID_CANCEL; } } -wxDC *wxPrintDialog::GetPrintDC(void) +wxDC *wxPrintDialog::GetPrintDC() { if (m_printerDC) { @@ -118,18 +136,16 @@ wxDC *wxPrintDialog::GetPrintDC(void) return (wxDC*) NULL; } -/* -* wxPageSetupDialog -*/ +// --------------------------------------------------------------------------- +// wxPageSetupDialog +// --------------------------------------------------------------------------- -wxPageSetupDialog::wxPageSetupDialog(void): -wxDialog() +wxPageSetupDialog::wxPageSetupDialog() { m_dialogParent = NULL; } -wxPageSetupDialog::wxPageSetupDialog(wxWindow *p, wxPageSetupData *data): -wxDialog() +wxPageSetupDialog::wxPageSetupDialog(wxWindow *p, wxPageSetupData *data) { Create(p, data); } @@ -137,21 +153,21 @@ wxDialog() bool wxPageSetupDialog::Create(wxWindow *p, wxPageSetupData *data) { m_dialogParent = p; - + if (data) m_pageSetupData = (*data); - + #if defined(__WIN95__) m_pageSetupData.SetOwnerWindow(p); #endif return TRUE; } -wxPageSetupDialog::~wxPageSetupDialog(void) +wxPageSetupDialog::~wxPageSetupDialog() { } -int wxPageSetupDialog::ShowModal(void) +int wxPageSetupDialog::ShowModal() { #ifdef __WIN95__ m_pageSetupData.ConvertToNative(); diff --git a/src/msw/printwin.cpp b/src/msw/printwin.cpp index f65d3e7431..cfd271d228 100644 --- a/src/msw/printwin.cpp +++ b/src/msw/printwin.cpp @@ -6,27 +6,35 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// +// =========================================================================== +// declarations +// =========================================================================== + +// --------------------------------------------------------------------------- +// headers +// --------------------------------------------------------------------------- + #ifdef __GNUG__ -#pragma implementation "printwin.h" + #pragma implementation "printwin.h" #endif // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif #include "wx/defs.h" #ifndef WX_PRECOMP -#include "wx/utils.h" -#include "wx/dc.h" -#include "wx/app.h" -#include "wx/msgdlg.h" + #include "wx/utils.h" + #include "wx/dc.h" + #include "wx/app.h" + #include "wx/msgdlg.h" #endif #include "wx/msw/printwin.h" @@ -40,31 +48,43 @@ // Clash with Windows header files #ifdef StartDoc -#undef StartDoc + #undef StartDoc #endif #ifndef __WIN32__ -#include + #include #endif +// --------------------------------------------------------------------------- +// private functions +// --------------------------------------------------------------------------- + LONG APIENTRY _EXPORT wxAbortProc(HDC hPr, int Code); +// --------------------------------------------------------------------------- +// wxWin macros +// --------------------------------------------------------------------------- + #if !USE_SHARED_LIBRARY -IMPLEMENT_DYNAMIC_CLASS(wxWindowsPrinter, wxPrinterBase) -IMPLEMENT_CLASS(wxWindowsPrintPreview, wxPrintPreviewBase) + IMPLEMENT_DYNAMIC_CLASS(wxWindowsPrinter, wxPrinterBase) + IMPLEMENT_CLASS(wxWindowsPrintPreview, wxPrintPreviewBase) #endif -/* -* Printer -*/ +// =========================================================================== +// implementation +// =========================================================================== -wxWindowsPrinter::wxWindowsPrinter(wxPrintDialogData *data): -wxPrinterBase(data) +// --------------------------------------------------------------------------- +// Printer +// --------------------------------------------------------------------------- + +wxWindowsPrinter::wxWindowsPrinter(wxPrintDialogData *data) + : wxPrinterBase(data) { m_lpAbortProc = (WXFARPROC) MakeProcInstance((FARPROC) wxAbortProc, wxGetInstance()); } -wxWindowsPrinter::~wxWindowsPrinter(void) +wxWindowsPrinter::~wxWindowsPrinter() { FreeProcInstance((FARPROC) m_lpAbortProc); } @@ -73,28 +93,28 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt { sm_abortIt = FALSE; sm_abortWindow = NULL; - + if (!printout) return FALSE; - + printout->SetIsPreview(FALSE); printout->OnPreparePrinting(); - + // Get some parameters from the printout, if defined int fromPage, toPage; int minPage, maxPage; printout->GetPageInfo(&minPage, &maxPage, &fromPage, &toPage); - + if (maxPage == 0) return FALSE; - + m_printDialogData.SetMinPage(minPage); m_printDialogData.SetMaxPage(maxPage); if (fromPage != 0) m_printDialogData.SetFromPage(fromPage); if (toPage != 0) m_printDialogData.SetToPage(toPage); - + if (minPage != 0) { m_printDialogData.EnablePageNumbers(TRUE); @@ -110,7 +130,7 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt else m_printDialogData.EnablePageNumbers(FALSE); - // Create a suitable device context + // Create a suitable device context wxDC *dc = NULL; if (prompt) { @@ -123,24 +143,24 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt // dc = new wxPrinterDC("", "", "", FALSE, m_printData.GetOrientation()); dc = new wxPrinterDC(m_printDialogData.GetPrintData()); } - + // May have pressed cancel. if (!dc || !dc->Ok()) { if (dc) delete dc; return FALSE; } - + int logPPIScreenX = 0; int logPPIScreenY = 0; int logPPIPrinterX = 0; int logPPIPrinterY = 0; - + HDC hdc = ::GetDC(NULL); logPPIScreenX = ::GetDeviceCaps(hdc, LOGPIXELSX); logPPIScreenY = ::GetDeviceCaps(hdc, LOGPIXELSY); ::ReleaseDC(NULL, hdc); - + logPPIPrinterX = ::GetDeviceCaps((HDC) dc->GetHDC(), LOGPIXELSX); logPPIPrinterY = ::GetDeviceCaps((HDC) dc->GetHDC(), LOGPIXELSY); if (logPPIPrinterX == 0 || logPPIPrinterY == 0) @@ -148,33 +168,33 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt delete dc; return FALSE; } - + printout->SetPPIScreen(logPPIScreenX, logPPIScreenY); printout->SetPPIPrinter(logPPIPrinterX, logPPIPrinterY); - - // Set printout parameters + + // Set printout parameters printout->SetDC(dc); - + int w, h; dc->GetSize(&w, &h); printout->SetPageSizePixels((int)w, (int)h); dc->GetSizeMM(&w, &h); printout->SetPageSizeMM((int)w, (int)h); - + // Create an abort window wxBeginBusyCursor(); - + wxWindow *win = CreateAbortWindow(parent, printout); wxYield(); - + #if defined(__BORLANDC__) || defined(__GNUWIN32__) || defined(__SALFORDC__) || !defined(__WIN32__) ::SetAbortProc((HDC) dc->GetHDC(), (FARPROC) m_lpAbortProc); #else ::SetAbortProc((HDC) dc->GetHDC(), (int (_stdcall *) // cast it to right type only if required - // @@@ 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 + // 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 #ifdef STRICT (HDC, int) #else @@ -182,33 +202,34 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt #endif )m_lpAbortProc); #endif - + if (!win) { wxEndBusyCursor(); - wxMessageBox("Sorry, could not create an abort dialog.", "Print Error", wxOK, parent); + wxLogDebug("Could not create an abort dialog."); + delete dc; } sm_abortWindow = win; sm_abortWindow->Show(TRUE); - wxYield(); - + wxSafeYield(); + printout->OnBeginPrinting(); - + bool keepGoing = TRUE; - + int copyCount; for (copyCount = 1; copyCount <= m_printDialogData.GetNoCopies(); copyCount ++) { if (!printout->OnBeginDocument(m_printDialogData.GetFromPage(), m_printDialogData.GetToPage())) { wxEndBusyCursor(); - wxMessageBox("Could not start printing.", "Print Error", wxOK, parent); + wxLogError(_("Could not start printing.")); break; } if (sm_abortIt) break; - + int pn; for (pn = m_printDialogData.GetFromPage(); keepGoing && (pn <= m_printDialogData.GetToPage()) && printout->HasPage(pn); pn++) @@ -227,20 +248,20 @@ bool wxWindowsPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt } printout->OnEndDocument(); } - + printout->OnEndPrinting(); - + if (sm_abortWindow) { sm_abortWindow->Show(FALSE); delete sm_abortWindow; sm_abortWindow = NULL; } - + wxEndBusyCursor(); - + delete dc; - + return TRUE; } @@ -279,13 +300,23 @@ bool wxWindowsPrinter::Setup(wxWindow *parent) * Print preview */ -wxWindowsPrintPreview::wxWindowsPrintPreview(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintDialogData *data): -wxPrintPreviewBase(printout, printoutForPrinting, data) +wxWindowsPrintPreview::wxWindowsPrintPreview(wxPrintout *printout, + wxPrintout *printoutForPrinting, + wxPrintDialogData *data) + : wxPrintPreviewBase(printout, printoutForPrinting, data) { 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); } -void wxWindowsPrintPreview::DetermineScaling(void) +void wxWindowsPrintPreview::DetermineScaling() { HDC dc = ::GetDC(NULL); int screenWidth = ::GetDeviceCaps(dc, HORZSIZE); @@ -307,39 +338,39 @@ void wxWindowsPrintPreview::DetermineScaling(void) int logPPIScreenX = ::GetDeviceCaps(dc, LOGPIXELSX); int logPPIScreenY = ::GetDeviceCaps(dc, LOGPIXELSY); m_previewPrintout->SetPPIScreen(logPPIScreenX, logPPIScreenY); - + ::ReleaseDC(NULL, dc); - + // Get a device context for the currently selected printer wxPrinterDC printerDC(m_printDialogData.GetPrintData()); - + int printerWidth = 150; int printerHeight = 250; int printerXRes = 1500; int printerYRes = 2500; - + if (printerDC.GetHDC()) { printerWidth = ::GetDeviceCaps((HDC) printerDC.GetHDC(), HORZSIZE); printerHeight = ::GetDeviceCaps((HDC) printerDC.GetHDC(), VERTSIZE); printerXRes = ::GetDeviceCaps((HDC) printerDC.GetHDC(), HORZRES); printerYRes = ::GetDeviceCaps((HDC) printerDC.GetHDC(), VERTRES); - + int logPPIPrinterX = ::GetDeviceCaps((HDC) printerDC.GetHDC(), LOGPIXELSX); int logPPIPrinterY = ::GetDeviceCaps((HDC) printerDC.GetHDC(), LOGPIXELSY); - + m_previewPrintout->SetPPIPrinter(logPPIPrinterX, logPPIPrinterY); m_previewPrintout->SetPageSizeMM(printerWidth, printerHeight); - + if (logPPIPrinterX == 0 || logPPIPrinterY == 0 || printerWidth == 0 || printerHeight == 0) m_isOk = FALSE; } else m_isOk = FALSE; - + m_pageWidth = printerXRes; m_pageHeight = printerYRes; - + // At 100%, the page should look about page-size on the screen. m_previewScale = (float)((float)screenWidth/(float)printerWidth); m_previewScale = m_previewScale * (float)((float)screenXRes/(float)printerYRes); @@ -348,28 +379,28 @@ void wxWindowsPrintPreview::DetermineScaling(void) /**************************************************************************** FUNCTION: wxAbortProc() - + PURPOSE: Processes messages for the Abort Dialog box - + ****************************************************************************/ LONG APIENTRY _EXPORT wxAbortProc(HDC WXUNUSED(hPr), int WXUNUSED(Code)) { MSG msg; - + if (!wxPrinterBase::sm_abortWindow) /* If the abort dialog isn't up yet */ return(TRUE); - + /* Process messages intended for the abort dialog box */ - + while (!wxPrinterBase::sm_abortIt && PeekMessage(&msg, 0, 0, 0, TRUE)) if (!IsDialogMessage((HWND) wxPrinterBase::sm_abortWindow->GetHWND(), &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } - + /* bAbort is TRUE (return is FALSE) if the user has aborted */ - + return (!wxPrinterBase::sm_abortIt); }