X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8826f46f0d755eba7996920da2aee45946bc6144..ecd20d4a916884895dcd8873a9f1156e34f4ac89:/src/common/cmndata.cpp diff --git a/src/common/cmndata.cpp b/src/common/cmndata.cpp index 14f157d3fe..e49c5e1d9d 100644 --- a/src/common/cmndata.cpp +++ b/src/common/cmndata.cpp @@ -5,7 +5,7 @@ // Modified by: // Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem +// Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "cmndata.h" #endif @@ -37,38 +37,47 @@ #include "wx/gdicmn.h" #include "wx/cmndata.h" +#include "wx/log.h" +#include "wx/prntbase.h" +#include "wx/printdlg.h" -#include "wx/paper.h" +#if wxUSE_FONTDLG + #include "wx/fontdlg.h" +#endif // wxUSE_FONTDLG -// For compatibility -#if (defined(__WXMOTIF__) || defined(__WXGTK__)) && wxUSE_POSTSCRIPT - #define wxCOMPATIBILITY_WITH_PRINTSETUPDATA 1 -#endif - -#if wxCOMPATIBILITY_WITH_PRINTSETUPDATA - #include "wx/generic/dcpsg.h" -#endif +#if wxUSE_PRINTING_ARCHITECTURE + #include "wx/paper.h" +#endif // wxUSE_PRINTING_ARCHITECTURE -#ifdef __WXMSW__ - #include +#if defined(__WXMSW__) + #include + #include "wx/msw/private.h" - #if !defined(__WIN32__) - #include + #ifndef __SMARTPHONE__ /* of WinCE */ #include - #endif // Win16 + #endif - #if defined(__WATCOMC__) || defined(__SC__) || defined(__SALFORDC__) + #if defined(__WATCOMC__) || defined(__SYMANTEC__) || defined(__SALFORDC__) #include #include #endif #endif // MSW -#if !USE_SHARED_LIBRARY - IMPLEMENT_DYNAMIC_CLASS(wxPrintData, wxObject) - IMPLEMENT_DYNAMIC_CLASS(wxPrintDialogData, wxObject) - IMPLEMENT_DYNAMIC_CLASS(wxPageSetupDialogData, wxObject) +#ifdef __WXMAC__ + #include "wx/mac/private/print.h" +#endif + + #if wxUSE_PRINTING_ARCHITECTURE + IMPLEMENT_DYNAMIC_CLASS(wxPrintData, wxObject) + IMPLEMENT_DYNAMIC_CLASS(wxPrintDialogData, wxObject) + IMPLEMENT_DYNAMIC_CLASS(wxPageSetupDialogData, wxObject) + #endif // wxUSE_PRINTING_ARCHITECTURE + IMPLEMENT_DYNAMIC_CLASS(wxFontData, wxObject) IMPLEMENT_DYNAMIC_CLASS(wxColourData, wxObject) + +#ifndef DMPAPER_USER + #define DMPAPER_USER 256 #endif // ============================================================================ @@ -81,15 +90,13 @@ wxColourData::wxColourData() { - int i; - for (i = 0; i < 16; i++) - custColours[i].Set(255, 255, 255); - - chooseFull = FALSE; - dataColour.Set(0,0,0); + m_chooseFull = false; + m_dataColour.Set(0,0,0); + // m_custColours are wxNullColours initially } wxColourData::wxColourData(const wxColourData& data) + : wxObject() { (*this) = data; } @@ -98,30 +105,29 @@ wxColourData::~wxColourData() { } -void wxColourData::SetCustomColour(int i, wxColour& colour) +void wxColourData::SetCustomColour(int i, const wxColour& colour) { - if (i > 15 || i < 0) - return; + wxCHECK_RET( (i >= 0 && i < 16), _T("custom colour index out of range") ); - custColours[i] = colour; + m_custColours[i] = colour; } wxColour wxColourData::GetCustomColour(int i) { - if (i > 15 || i < 0) - return wxColour(0,0,0); + wxCHECK_MSG( (i >= 0 && i < 16), wxColour(0,0,0), + _T("custom colour index out of range") ); - return custColours[i]; + return m_custColours[i]; } void wxColourData::operator=(const wxColourData& data) { int i; for (i = 0; i < 16; i++) - custColours[i] = data.custColours[i]; + m_custColours[i] = data.m_custColours[i]; - dataColour = (wxColour&)data.dataColour; - chooseFull = data.chooseFull; + m_dataColour = (wxColour&)data.m_dataColour; + m_chooseFull = data.m_chooseFull; } // ---------------------------------------------------------------------------- @@ -131,420 +137,91 @@ void wxColourData::operator=(const wxColourData& data) wxFontData::wxFontData() { // Intialize colour to black. - fontColour.Set(0, 0, 0); + m_fontColour = wxNullColour; - showHelp = FALSE; - allowSymbols = TRUE; - enableEffects = TRUE; - minSize = 0; - maxSize = 0; -} + m_showHelp = false; + m_allowSymbols = true; + m_enableEffects = true; + m_minSize = 0; + m_maxSize = 0; -wxFontData::wxFontData(const wxFontData& data) -{ - (*this) = data; + m_encoding = wxFONTENCODING_SYSTEM; } wxFontData::~wxFontData() { } -void wxFontData::operator=(const wxFontData& data) +#if wxUSE_FONTDLG + +wxFontDialogBase::~wxFontDialogBase() { - fontColour = data.fontColour; - showHelp = data.showHelp; - allowSymbols = data.allowSymbols; - enableEffects = data.enableEffects; - initialFont = data.initialFont; - chosenFont = data.chosenFont; - minSize = data.minSize; - maxSize = data.maxSize; } +#endif // wxUSE_FONTDLG + +#if wxUSE_PRINTING_ARCHITECTURE // ---------------------------------------------------------------------------- // Print data // ---------------------------------------------------------------------------- wxPrintData::wxPrintData() { -#ifdef __WXMSW__ - m_devMode = NULL; +#ifdef __WXMAC__ + m_nativePrintData = wxNativePrintData::Create() ; #endif + m_bin = wxPRINTBIN_DEFAULT; + m_printMode = wxPRINT_MODE_PRINTER; m_printOrientation = wxPORTRAIT; m_printNoCopies = 1; - m_printCollate = FALSE; + m_printCollate = false; // New, 24/3/99 - m_printerName = ""; - m_colour = TRUE; + m_printerName = wxEmptyString; + m_colour = true; m_duplexMode = wxDUPLEX_SIMPLEX; m_printQuality = wxPRINT_QUALITY_HIGH; m_paperId = wxPAPER_A4; m_paperSize = wxSize(210, 297); - // PostScript-specific data - m_printerCommand = ""; - m_previewCommand = ""; - m_printerOptions = ""; - m_filename = ""; - m_afmPath = ""; - m_printerScaleX = 1.0; - m_printerScaleY = 1.0; - m_printerTranslateX = 0; - m_printerTranslateY = 0; - m_printMode = wxPRINT_MODE_FILE; + m_nativeData = wxPrintFactory::GetFactory()->CreatePrintNativeData(); } wxPrintData::wxPrintData(const wxPrintData& printData) + : wxObject() { + m_nativeData = NULL; (*this) = printData; } wxPrintData::~wxPrintData() { -#ifdef __WXMSW__ - HGLOBAL hDevMode = (HGLOBAL) hDevMode; - if (hDevMode ) - GlobalFree(hDevMode); - /* - PRINTDLG *pd = (PRINTDLG *) m_printData; - if ( pd && pd->hDevMode ) - GlobalFree(pd->hDevMode); - if ( pd ) - delete pd; - */ + m_nativeData->m_ref--; + if (m_nativeData->m_ref == 0) + delete m_nativeData; + +#ifdef __WXMAC__ + delete m_nativePrintData ; #endif } -#ifdef __WXMSW__ - void wxPrintData::ConvertToNative() { - HGLOBAL hDevMode = (HGLOBAL) m_devMode; - if (!hDevMode) - { - // Use PRINTDLG as a way of creating a DEVMODE object - PRINTDLG *pd = new PRINTDLG; - - // GNU-WIN32 has the wrong size PRINTDLG - can't work out why. -#ifdef __GNUWIN32__ - pd->lStructSize = 66 ; - memset(pd, 0, sizeof(PRINTDLG)); +#ifdef __WXMAC__ + m_nativePrintData->TransferFrom( this ) ; #else - pd->lStructSize = sizeof(PRINTDLG); - memset(pd, 0, sizeof(PRINTDLG)); + m_nativeData->TransferFrom( *this ) ; #endif - - pd->hwndOwner = (HWND)NULL; - pd->hDevMode = NULL; // Will be created by PrintDlg - pd->hDevNames = NULL; // Ditto - - pd->Flags = PD_RETURNDEFAULT; - pd->nCopies = 1; - - // Fill out the DEVMODE structure - // so we can use it as input in the 'real' PrintDlg - if (!PrintDlg(pd)) - { - if ( pd->hDevMode ) - GlobalFree(pd->hDevMode); - if ( pd->hDevNames ) - GlobalFree(pd->hDevNames); - pd->hDevMode = NULL; - pd->hDevNames = NULL; - } - else - { - if ( pd->hDevNames ) - GlobalFree(pd->hDevNames); - pd->hDevNames = NULL; - - hDevMode = pd->hDevMode; - m_devMode = (void*) hDevMode; - pd->hDevMode = NULL; - } - - delete pd; - } - - if ( hDevMode ) - { - DEVMODE *devMode = (DEVMODE*) GlobalLock(hDevMode); - - //// Orientation - - devMode->dmOrientation = m_printOrientation; - devMode->dmFields = DM_ORIENTATION; - - //// Collation - - devMode->dmCollate = (m_printCollate ? DMCOLLATE_TRUE : DMCOLLATE_FALSE); - devMode->dmFields |= DM_COLLATE; - - //// Number of copies - - devMode->dmCopies = m_printNoCopies; - devMode->dmFields |= DM_COPIES; - - //// Printer name - - if (m_printerName != "") - { - // TODO: make this Unicode compatible - int len = wxMin(31, m_printerName.Len()); - int i; - for (i = 0; i < len; i++) - devMode->dmDeviceName[i] = m_printerName.GetChar(i); - devMode->dmDeviceName[i] = 0; - } - - //// Colour - - if (m_colour) - devMode->dmColor = DMCOLOR_COLOR; - else - devMode->dmColor = DMCOLOR_MONOCHROME; - - devMode->dmFields |= DM_COLOR; - - //// Paper size - - if (m_paperId == wxPAPER_NONE) - { - devMode->dmPaperWidth = m_paperSize.x * 10; - devMode->dmPaperLength = m_paperSize.y * 10; - devMode->dmFields |= DM_PAPERWIDTH; - devMode->dmFields |= DM_PAPERLENGTH; - } - else - { - if (wxThePrintPaperDatabase) - { - wxPrintPaperType* paper = wxThePrintPaperDatabase->FindPaperType(m_paperId); - if (paper) - { - devMode->dmPaperSize = paper->GetPlatformId(); - devMode->dmFields |= DM_PAPERSIZE; - } - } - } - - //// Duplex - - int duplex; - switch (m_duplexMode) - { - case wxDUPLEX_HORIZONTAL: { - duplex = DMDUP_HORIZONTAL; break; - } - case wxDUPLEX_VERTICAL: { - duplex = DMDUP_VERTICAL; break; - } - default: - case wxDUPLEX_SIMPLEX: { - duplex = DMDUP_SIMPLEX; break; - } - } - devMode->dmDuplex = duplex; - devMode->dmFields |= DM_DUPLEX; - - //// Quality - - int quality; - switch (m_printQuality) - { - case wxPRINT_QUALITY_MEDIUM: { - quality = DMRES_MEDIUM; break; - } - case wxPRINT_QUALITY_LOW: { - quality = DMRES_LOW; break; - } - case wxPRINT_QUALITY_DRAFT: { - quality = DMRES_DRAFT; break; - } - case wxPRINT_QUALITY_HIGH: { - quality = DMRES_HIGH; break; - } - default: { - quality = m_printQuality; break; - } - } - devMode->dmPrintQuality = quality; - devMode->dmFields |= DM_PRINTQUALITY; - - GlobalUnlock(hDevMode); - } } void wxPrintData::ConvertFromNative() { - HGLOBAL hDevMode = (HGLOBAL) m_devMode; - - if (!hDevMode) - return; - - if ( hDevMode ) - { - DEVMODE *devMode = (DEVMODE*) GlobalLock(hDevMode); - - //// Orientation - - if (devMode->dmFields & DM_ORIENTATION) - m_printOrientation = devMode->dmOrientation; - - //// Collation - - if (devMode->dmFields & DM_COLLATE) - { - if (devMode->dmCollate == DMCOLLATE_TRUE) - m_printCollate = TRUE; - else - m_printCollate = FALSE; - } - - //// Number of copies - - if (devMode->dmFields & DM_COPIES) - { - m_printNoCopies = devMode->dmCopies; - } - - //// Printer name - - if (devMode->dmDeviceName[0] != 0) - { - // TODO: make this Unicode compatible - char buf[32]; - int i = 0; - while (devMode->dmDeviceName[i] != 0) - { - buf[i] = devMode->dmDeviceName[i]; - i ++; - } - buf[i] = 0; - - m_printerName = buf; - } - - //// Colour - - if (devMode->dmFields & DM_COLOR) - { - if (devMode->dmColor == DMCOLOR_COLOR) - m_colour = TRUE; - else - m_colour = FALSE; - } - else - m_colour = TRUE; - - //// Paper size - - if (devMode->dmFields & DM_PAPERSIZE) - { - if (wxThePrintPaperDatabase) - { - wxPrintPaperType* paper = wxThePrintPaperDatabase->FindPaperTypeByPlatformId(devMode->dmPaperSize); - if (paper) - { - m_paperId = paper->GetId(); - m_paperSize.x = paper->GetWidth() / 10 ; - m_paperSize.y = paper->GetHeight() / 10 ; - } - else - { - // Shouldn't really get here - wxFAIL_MSG("Couldn't find paper size in paper database."); - - m_paperId = wxPAPER_NONE; - m_paperSize.x = 0; - m_paperSize.y = 0; - } - } - else - { - // Shouldn't really get here - wxFAIL_MSG("Paper database wasn't initialized in wxPrintData::ConvertFromNative."); - - m_paperId = wxPAPER_NONE; - m_paperSize.x = 0; - m_paperSize.y = 0; - } - } - else if ((devMode->dmFields & DM_PAPERWIDTH) && (devMode->dmFields & DM_PAPERLENGTH)) - { - m_paperSize.x = devMode->dmPaperWidth / 10; - m_paperSize.y = devMode->dmPaperLength / 10; - m_paperId = wxPAPER_NONE; - } - else - { - // Shouldn't really get here - wxFAIL_MSG("Couldn't find paper size from DEVMODE."); - - m_paperSize.x = 0; - m_paperSize.y = 0; - m_paperId = wxPAPER_NONE; - } - - - //// Duplex - - if (devMode->dmFields & DM_DUPLEX) - { - switch (devMode->dmDuplex) - { - case DMDUP_HORIZONTAL: { - m_duplexMode = wxDUPLEX_HORIZONTAL; break; - } - case DMDUP_VERTICAL: { - m_duplexMode = wxDUPLEX_VERTICAL; break; - } - default: - case DMDUP_SIMPLEX: { - m_duplexMode = wxDUPLEX_SIMPLEX; break; - } - } - } - else - m_duplexMode = wxDUPLEX_SIMPLEX; - - //// Quality - - if (devMode->dmFields & DM_PRINTQUALITY) - { - switch (devMode->dmPrintQuality) - { - case DMRES_MEDIUM: { - m_printQuality = wxPRINT_QUALITY_MEDIUM; break; - } - case DMRES_LOW: { - m_printQuality = wxPRINT_QUALITY_LOW; break; - } - case DMRES_DRAFT: { - m_printQuality = wxPRINT_QUALITY_DRAFT; break; - } - case DMRES_HIGH: { - m_printQuality = wxPRINT_QUALITY_HIGH; break; - } - default: - { - // TODO: if the printer fills in the resolution in DPI, how - // will the application know if it's high, low, draft etc.?? - // wxFAIL_MSG("Warning: DM_PRINTQUALITY was not one of the standard values."); - m_printQuality = devMode->dmPrintQuality; break; - - } - } - } - else - m_printQuality = wxPRINT_QUALITY_HIGH; - - GlobalUnlock(hDevMode); - } -} - +#ifdef __WXMAC__ + m_nativePrintData->TransferTo( this ) ; +#else + m_nativeData->TransferTo( *this ) ; #endif +} void wxPrintData::operator=(const wxPrintData& data) { @@ -557,257 +234,273 @@ void wxPrintData::operator=(const wxPrintData& data) m_printQuality = data.m_printQuality; m_paperId = data.m_paperId; m_paperSize = data.m_paperSize; - - // PostScript-specific data - m_printerCommand = data.m_printerCommand; - m_previewCommand = data.m_previewCommand; - m_printerOptions = data.m_printerOptions; - m_filename = data.m_filename; - m_afmPath = data.m_afmPath; - m_printerScaleX = data.m_printerScaleX; - m_printerScaleY = data.m_printerScaleY; - m_printerTranslateX = data.m_printerTranslateX; - m_printerTranslateY = data.m_printerTranslateY; + m_bin = data.m_bin; m_printMode = data.m_printMode; + m_filename = data.m_filename; + + // UnRef old m_nativeData + if (m_nativeData) + { + m_nativeData->m_ref--; + if (m_nativeData->m_ref == 0) + delete m_nativeData; + } + // Set Ref new one + m_nativeData = data.GetNativeData(); + m_nativeData->m_ref++; + +#ifdef __WXMAC__ + m_nativePrintData->CopyFrom( data.m_nativePrintData ) ; +#endif } -// For compatibility -#if wxCOMPATIBILITY_WITH_PRINTSETUPDATA -void wxPrintData::operator=(const wxPrintSetupData& setupData) +// Is this data OK for showing the print dialog? +bool wxPrintData::Ok() const { - SetPrinterCommand(setupData.GetPrinterCommand()); - SetPreviewCommand(setupData.GetPrintPreviewCommand()); - SetPrinterOptions(setupData.GetPrinterOptions()); - - long xt, yt; - setupData.GetPrinterTranslation(& xt, & yt); - SetPrinterTranslation(xt, yt); - - double xs, ys; - setupData.GetPrinterScaling(& xs, & ys); - SetPrinterScaling(xs, ys); - - SetOrientation(setupData.GetPrinterOrientation()); - SetPrintMode((wxPrintMode) setupData.GetPrinterMode()); - SetFontMetricPath(setupData.GetAFMPath()); - if (setupData.GetPaperName() != "") - SetPaperId(wxThePrintPaperDatabase->ConvertNameToId(setupData.GetPaperName())); - SetColour(setupData.GetColour()); - SetFilename(setupData.GetPrinterFile()); + m_nativeData->TransferFrom( *this ); + + return m_nativeData->Ok(); } -#endif // wxCOMPATIBILITY_WITH_PRINTSETUPDATA +// What should happen here? wxPostScriptPrintNativeData is not +// defined unless all this is true on MSW. +#if WXWIN_COMPATIBILITY_2_4 && wxUSE_PRINTING_ARCHITECTURE && (!defined(__WXMSW__) || wxUSE_POSTSCRIPT_ARCHITECTURE_IN_MSW) -// ---------------------------------------------------------------------------- -// Print dialog data -// ---------------------------------------------------------------------------- +#include "wx/generic/prntdlgg.h" -wxPrintDialogData::wxPrintDialogData() +#if wxUSE_POSTSCRIPT + #define WXUNUSED_WITHOUT_PS(name) name +#else + #define WXUNUSED_WITHOUT_PS(name) WXUNUSED(name) +#endif + +wxString wxPrintData::GetPrinterCommand() const { -#ifdef __WXMSW__ - m_printDlgData = NULL; +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPrinterCommand(); #endif - m_printFromPage = 0; - m_printToPage = 0; - m_printMinPage = 0; - m_printMaxPage = 0; - m_printNoCopies = 1; - m_printAllPages = FALSE; - m_printCollate = FALSE; - m_printToFile = FALSE; - m_printEnableSelection = FALSE; - m_printEnablePageNumbers = TRUE; - m_printEnablePrintToFile = TRUE; - m_printEnableHelp = FALSE; - m_printSetupDialog = FALSE; + return wxEmptyString; } -wxPrintDialogData::wxPrintDialogData(const wxPrintDialogData& dialogData) +wxString wxPrintData::GetPrinterOptions() const { - (*this) = dialogData; +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPrinterOptions(); +#endif + return wxEmptyString; } -wxPrintDialogData::wxPrintDialogData(const wxPrintData& printData) +wxString wxPrintData::GetPreviewCommand() const { -#ifdef __WXMSW__ - m_printDlgData = NULL; +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPreviewCommand(); #endif - m_printFromPage = 0; - m_printToPage = 0; - m_printMinPage = 0; - m_printMaxPage = 0; - m_printNoCopies = 1; - m_printAllPages = FALSE; - m_printCollate = FALSE; - m_printToFile = FALSE; - m_printEnableSelection = FALSE; - m_printEnablePageNumbers = TRUE; - m_printEnablePrintToFile = TRUE; - m_printEnableHelp = FALSE; - m_printSetupDialog = FALSE; + return wxEmptyString; +} - m_printData = printData; +wxString wxPrintData::GetFontMetricPath() const +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetFontMetricPath(); +#endif + return wxEmptyString; } -wxPrintDialogData::~wxPrintDialogData() +double wxPrintData::GetPrinterScaleX() const { -#ifdef __WXMSW__ - PRINTDLG *pd = (PRINTDLG *) m_printDlgData; - if ( pd && pd->hDevMode ) - GlobalFree(pd->hDevMode); - if ( pd ) - delete pd; +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPrinterScaleX(); #endif + return 1.0; } -#ifdef __WXMSW__ -void wxPrintDialogData::ConvertToNative() +double wxPrintData::GetPrinterScaleY() const { - m_printData.ConvertToNative(); +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPrinterScaleY(); +#endif + return 1.0; +} - PRINTDLG *pd = (PRINTDLG*) m_printDlgData; +long wxPrintData::GetPrinterTranslateX() const +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPrinterTranslateX(); +#endif + return 0; +} - if (!pd) - { - pd = new PRINTDLG; - m_printDlgData = (void*) pd; +long wxPrintData::GetPrinterTranslateY() const +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPrinterTranslateY(); +#endif + return 0; +} - // GNU-WIN32 has the wrong size PRINTDLG - can't work out why. -#ifdef __GNUWIN32__ - pd->lStructSize = 66 ; -#else +void wxPrintData::SetPrinterCommand(const wxString& WXUNUSED_WITHOUT_PS(command)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPrinterCommand( command ); #endif - pd->lStructSize = sizeof(PRINTDLG); - pd->hwndOwner = (HWND)NULL; - pd->hDevMode = NULL; // Will be created by PrintDlg - pd->hDevNames = NULL; // Ditto +} - pd->Flags = PD_RETURNDEFAULT; - pd->nCopies = 1; - } +void wxPrintData::SetPrinterOptions(const wxString& WXUNUSED_WITHOUT_PS(options)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPrinterOptions( options ); +#endif +} - // Pass the devmode data to the PRINTDLG structure, since it'll - // be needed when PrintDlg is called. - if (pd->hDevMode) - { - GlobalFree(pd->hDevMode); - } +void wxPrintData::SetPreviewCommand(const wxString& WXUNUSED_WITHOUT_PS(command)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPreviewCommand( command ); +#endif +} - pd->hDevMode = (HGLOBAL) m_printData.GetNativeData(); +void wxPrintData::SetFontMetricPath(const wxString& WXUNUSED_WITHOUT_PS(path)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetFontMetricPath( path ); +#endif +} - m_printData.SetNativeData((void*) NULL); +void wxPrintData::SetPrinterScaleX(double WXUNUSED_WITHOUT_PS(x)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPrinterScaleX( x ); +#endif +} - wxASSERT_MSG( (pd->hDevMode), "hDevMode must be non-NULL in ConvertToNative!"); +void wxPrintData::SetPrinterScaleY(double WXUNUSED_WITHOUT_PS(y)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPrinterScaleY( y ); +#endif +} - pd->hDC = (HDC) NULL; - pd->nFromPage = (UINT)m_printFromPage; - pd->nToPage = (UINT)m_printToPage; - pd->nMinPage = (UINT)m_printMinPage; - pd->nMaxPage = (UINT)m_printMaxPage; - pd->nCopies = (UINT)m_printNoCopies; +void wxPrintData::SetPrinterScaling(double WXUNUSED_WITHOUT_PS(x), double WXUNUSED_WITHOUT_PS(y)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPrinterScaling( x, y ); +#endif +} - pd->Flags = PD_RETURNDC ; +void wxPrintData::SetPrinterTranslateX(long WXUNUSED_WITHOUT_PS(x)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPrinterTranslateX( x ); +#endif +} -#ifdef __GNUWIN32__ - pd->lStructSize = 66 ; -#else - pd->lStructSize = sizeof( PRINTDLG ); +void wxPrintData::SetPrinterTranslateY(long WXUNUSED_WITHOUT_PS(y)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPrinterTranslateY( y ); #endif +} - pd->hwndOwner=(HWND)NULL; - pd->hDevNames=(HANDLE)NULL; - pd->hInstance=(HINSTANCE)NULL; - pd->lCustData = (LPARAM) NULL; - pd->lpfnPrintHook = NULL; - pd->lpfnSetupHook = NULL; - pd->lpPrintTemplateName = NULL; - pd->lpSetupTemplateName = NULL; - pd->hPrintTemplate = (HGLOBAL) NULL; - pd->hSetupTemplate = (HGLOBAL) NULL; - - if ( m_printAllPages ) - pd->Flags |= PD_ALLPAGES; - if ( m_printCollate ) - pd->Flags |= PD_COLLATE; - if ( m_printToFile ) - pd->Flags |= PD_PRINTTOFILE; - if ( !m_printEnablePrintToFile ) - pd->Flags |= PD_DISABLEPRINTTOFILE; - if ( !m_printEnableSelection ) - pd->Flags |= PD_NOSELECTION; - if ( !m_printEnablePageNumbers ) - pd->Flags |= PD_NOPAGENUMS; - if ( m_printEnableHelp ) - pd->Flags |= PD_SHOWHELP; - if ( m_printSetupDialog ) - pd->Flags |= PD_PRINTSETUP; +void wxPrintData::SetPrinterTranslation(long WXUNUSED_WITHOUT_PS(x), long WXUNUSED_WITHOUT_PS(y)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPrinterTranslation( x, y ); +#endif } +#endif -void wxPrintDialogData::ConvertFromNative() +// ---------------------------------------------------------------------------- +// Print dialog data +// ---------------------------------------------------------------------------- + +wxPrintDialogData::wxPrintDialogData() { - PRINTDLG *pd = (PRINTDLG*) m_printDlgData; - if ( pd == NULL ) - return; + m_printFromPage = 0; + m_printToPage = 0; + m_printMinPage = 0; + m_printMaxPage = 0; + m_printNoCopies = 1; + m_printAllPages = false; + m_printCollate = false; + m_printToFile = false; + m_printSelection = false; + m_printEnableSelection = false; + m_printEnablePageNumbers = true; + + wxPrintFactory* factory = wxPrintFactory::GetFactory(); + m_printEnablePrintToFile = ! factory->HasOwnPrintToFile(); + + m_printEnableHelp = false; +#if WXWIN_COMPATIBILITY_2_4 + m_printSetupDialog = false; +#endif +} - // Pass the devmode data back to the wxPrintData structure where it really belongs. - if (pd->hDevMode) - { - if (m_printData.GetNativeData()) - { - // Make sure we don't leak memory - GlobalFree((HGLOBAL) m_printData.GetNativeData()); - } - m_printData.SetNativeData((void*) pd->hDevMode); - pd->hDevMode = NULL; - } +wxPrintDialogData::wxPrintDialogData(const wxPrintDialogData& dialogData) + : wxObject() +{ + (*this) = dialogData; +} - // Now convert the DEVMODE object, passed down from the PRINTDLG object, - // into wxWindows form. - m_printData.ConvertFromNative(); +wxPrintDialogData::wxPrintDialogData(const wxPrintData& printData) +{ + m_printFromPage = 1; + m_printToPage = 0; + m_printMinPage = 1; + m_printMaxPage = 9999; + m_printNoCopies = 1; + m_printAllPages = false; + m_printCollate = false; + m_printToFile = false; + m_printSelection = false; + m_printEnableSelection = false; + m_printEnablePageNumbers = true; + m_printEnablePrintToFile = true; + m_printEnableHelp = false; +#if WXWIN_COMPATIBILITY_2_4 + m_printSetupDialog = false; +#endif + m_printData = printData; +} - m_printFromPage = pd->nFromPage ; - m_printToPage = pd->nToPage ; - m_printMinPage = pd->nMinPage ; - m_printMaxPage = pd->nMaxPage ; - m_printNoCopies = pd->nCopies ; - - m_printAllPages = ((pd->Flags & PD_ALLPAGES) == PD_ALLPAGES); - m_printCollate = ((pd->Flags & PD_COLLATE) == PD_COLLATE); - m_printToFile = ((pd->Flags & PD_PRINTTOFILE) == PD_PRINTTOFILE); - m_printEnablePrintToFile = ((pd->Flags & PD_DISABLEPRINTTOFILE) != PD_DISABLEPRINTTOFILE); - m_printEnableSelection = ((pd->Flags & PD_NOSELECTION) != PD_NOSELECTION); - m_printEnablePageNumbers = ((pd->Flags & PD_NOPAGENUMS) != PD_NOPAGENUMS); - m_printEnableHelp = ((pd->Flags & PD_SHOWHELP) == PD_SHOWHELP); - m_printSetupDialog = ((pd->Flags & PD_PRINTSETUP) == PD_PRINTSETUP); - -/* port is obsolete in WIN32 - // Get the port name - if (pd->hDevNames) - { - LPDEVNAMES lpDevNames = (LPDEVNAMES)GlobalLock(pd->hDevNames); - if (lpDevNames) { - m_printData.SetPortName((LPSTR)lpDevNames + lpDevNames->wDriverOffset); - wxString devName = (LPSTR)lpDevNames + lpDevNames->wDeviceOffset; - GlobalUnlock(pd->hDevNames); - -// wxASSERT_MSG( (m_printerName == "" || (devName == m_printerName)), "Printer name obtained from DEVMODE and DEVNAMES were different!"); - } - } -*/ +wxPrintDialogData::~wxPrintDialogData() +{ } -void wxPrintDialogData::SetOwnerWindow(wxWindow* win) +#ifdef __WXMAC__ + +void wxPrintDialogData::ConvertToNative() { - if ( m_printDlgData == NULL ) - ConvertToNative(); + m_printData.ConvertToNative(); + m_printData.m_nativePrintData->TransferFrom( this ) ; +} - if ( m_printDlgData != NULL && win != NULL) - { - PRINTDLG *pd = (PRINTDLG *) m_printDlgData ; - pd->hwndOwner=(HWND) win->GetHWND(); - } +void wxPrintDialogData::ConvertFromNative() +{ + m_printData.ConvertFromNative(); + m_printData.m_nativePrintData->TransferTo( this ) ; } -#endif // MSW + +#endif + void wxPrintDialogData::operator=(const wxPrintDialogData& data) { @@ -819,12 +512,14 @@ void wxPrintDialogData::operator=(const wxPrintDialogData& data) m_printAllPages = data.m_printAllPages; m_printCollate = data.m_printCollate; m_printToFile = data.m_printToFile; + m_printSelection = data.m_printSelection; m_printEnableSelection = data.m_printEnableSelection; m_printEnablePageNumbers = data.m_printEnablePageNumbers; m_printEnableHelp = data.m_printEnableHelp; m_printEnablePrintToFile = data.m_printEnablePrintToFile; +#if WXWIN_COMPATIBILITY_2_4 m_printSetupDialog = data.m_printSetupDialog; - +#endif m_printData = data.m_printData; } @@ -839,9 +534,6 @@ void wxPrintDialogData::operator=(const wxPrintData& data) wxPageSetupDialogData::wxPageSetupDialogData() { -#if defined(__WIN95__) - m_pageSetupData = NULL; -#endif m_paperSize = wxSize(0, 0); CalculatePaperSizeFromId(); @@ -852,25 +544,23 @@ wxPageSetupDialogData::wxPageSetupDialogData() m_marginBottomRight = wxPoint(0, 0); // Flags - m_defaultMinMargins = FALSE; - m_enableMargins = TRUE; - m_enableOrientation = TRUE; - m_enablePaper = TRUE; - m_enablePrinter = TRUE; - m_enableHelp = FALSE; - m_getDefaultInfo = FALSE; + m_defaultMinMargins = false; + m_enableMargins = true; + m_enableOrientation = true; + m_enablePaper = true; + m_enablePrinter = true; + m_enableHelp = false; + m_getDefaultInfo = false; } wxPageSetupDialogData::wxPageSetupDialogData(const wxPageSetupDialogData& dialogData) + : wxObject() { (*this) = dialogData; } wxPageSetupDialogData::wxPageSetupDialogData(const wxPrintData& printData) { -#if defined(__WIN95__) - m_pageSetupData = NULL; -#endif m_paperSize = wxSize(0, 0); m_minMarginTopLeft = wxPoint(0, 0); m_minMarginBottomRight = wxPoint(0, 0); @@ -878,13 +568,13 @@ wxPageSetupDialogData::wxPageSetupDialogData(const wxPrintData& printData) m_marginBottomRight = wxPoint(0, 0); // Flags - m_defaultMinMargins = FALSE; - m_enableMargins = TRUE; - m_enableOrientation = TRUE; - m_enablePaper = TRUE; - m_enablePrinter = TRUE; - m_enableHelp = FALSE; - m_getDefaultInfo = FALSE; + m_defaultMinMargins = false; + m_enableMargins = true; + m_enableOrientation = true; + m_enablePaper = true; + m_enablePrinter = true; + m_enableHelp = false; + m_getDefaultInfo = false; m_printData = printData; @@ -895,16 +585,9 @@ wxPageSetupDialogData::wxPageSetupDialogData(const wxPrintData& printData) wxPageSetupDialogData::~wxPageSetupDialogData() { -#if defined(__WIN95__) && defined(__WXMSW__) - PAGESETUPDLG *pd = (PAGESETUPDLG *)m_pageSetupData; - if ( pd && pd->hDevMode ) - GlobalFree(pd->hDevMode); - if ( pd ) - delete pd; -#endif } -void wxPageSetupDialogData::operator=(const wxPageSetupDialogData& data) +wxPageSetupDialogData& wxPageSetupDialogData::operator=(const wxPageSetupDialogData& data) { m_paperSize = data.m_paperSize; m_minMarginTopLeft = data.m_minMarginTopLeft; @@ -920,159 +603,47 @@ void wxPageSetupDialogData::operator=(const wxPageSetupDialogData& data) m_enableHelp = data.m_enableHelp; m_printData = data.m_printData; + + return *this; } -void wxPageSetupDialogData::operator=(const wxPrintData& data) +wxPageSetupDialogData& wxPageSetupDialogData::operator=(const wxPrintData& data) { m_printData = data; + CalculatePaperSizeFromId(); + + return *this; } -#if defined(__WIN95__) +#ifdef __WXMAC__ void wxPageSetupDialogData::ConvertToNative() { m_printData.ConvertToNative(); - - PAGESETUPDLG *pd = (PAGESETUPDLG*) m_pageSetupData; - - if ( m_pageSetupData == NULL ) - { - pd = new PAGESETUPDLG; - pd->hDevMode = NULL; - m_pageSetupData = (void *)pd; - } - - // Pass the devmode data (created in m_printData.ConvertToNative) - // to the PRINTDLG structure, since it'll - // be needed when PrintDlg is called. - - if (pd->hDevMode) - { - GlobalFree(pd->hDevMode); - pd->hDevMode = NULL; - } - - - pd->hDevMode = (HGLOBAL) m_printData.GetNativeData(); - - m_printData.SetNativeData((void*) NULL); - - wxASSERT_MSG( (pd->hDevMode), "hDevMode must be non-NULL in ConvertToNative!"); - -// pd->hDevMode = GlobalAlloc(GMEM_MOVEABLE, sizeof(DEVMODE)); - - pd->Flags = PSD_MARGINS|PSD_MINMARGINS; - - if ( m_defaultMinMargins ) - pd->Flags |= PSD_DEFAULTMINMARGINS; - if ( !m_enableMargins ) - pd->Flags |= PSD_DISABLEMARGINS; - if ( !m_enableOrientation ) - pd->Flags |= PSD_DISABLEORIENTATION; - if ( !m_enablePaper ) - pd->Flags |= PSD_DISABLEPAPER; - if ( !m_enablePrinter ) - pd->Flags |= PSD_DISABLEPRINTER; - if ( m_getDefaultInfo ) - pd->Flags |= PSD_RETURNDEFAULT; - if ( m_enableHelp ) - pd->Flags |= PSD_SHOWHELP; - - // We want the units to be in hundredths of a millimetre - pd->Flags |= PSD_INHUNDREDTHSOFMILLIMETERS; - - pd->lStructSize = sizeof( PAGESETUPDLG ); - pd->hwndOwner=(HWND)NULL; - pd->hDevNames=(HWND)NULL; - pd->hInstance=(HINSTANCE)NULL; - - pd->ptPaperSize.x = m_paperSize.x * 100; - pd->ptPaperSize.y = m_paperSize.y * 100; - - pd->rtMinMargin.left = m_minMarginTopLeft.x * 100; - pd->rtMinMargin.top = m_minMarginTopLeft.y * 100; - pd->rtMinMargin.right = m_minMarginBottomRight.x * 100; - pd->rtMinMargin.bottom = m_minMarginBottomRight.y * 100; - - pd->rtMargin.left = m_marginTopLeft.x * 100; - pd->rtMargin.top = m_marginTopLeft.y * 100; - pd->rtMargin.right = m_marginBottomRight.x * 100; - pd->rtMargin.bottom = m_marginBottomRight.y * 100; - - pd->lCustData = 0; - pd->lpfnPageSetupHook = NULL; - pd->lpfnPagePaintHook = NULL; - pd->hPageSetupTemplate = NULL; - pd->lpPageSetupTemplateName = NULL; - -/* - if ( pd->hDevMode ) - { - DEVMODE *devMode = (DEVMODE*) GlobalLock(pd->hDevMode); - memset(devMode, 0, sizeof(DEVMODE)); - devMode->dmSize = sizeof(DEVMODE); - devMode->dmOrientation = m_orientation; - devMode->dmFields = DM_ORIENTATION; - GlobalUnlock(pd->hDevMode); - } -*/ + m_printData.m_nativePrintData->TransferFrom( this ) ; } void wxPageSetupDialogData::ConvertFromNative() { - PAGESETUPDLG *pd = (PAGESETUPDLG *) m_pageSetupData ; - if ( !pd ) - return; - - // Pass the devmode data back to the wxPrintData structure where it really belongs. - if (pd->hDevMode) - { - if (m_printData.GetNativeData()) - { - // Make sure we don't leak memory - GlobalFree((HGLOBAL) m_printData.GetNativeData()); - } - m_printData.SetNativeData((void*) pd->hDevMode); - pd->hDevMode = NULL; - } - - m_printData.ConvertFromNative(); - - pd->Flags = PSD_MARGINS|PSD_MINMARGINS; + m_printData.ConvertFromNative (); + m_paperSize = m_printData.GetPaperSize() ; + CalculateIdFromPaperSize(); + m_printData.m_nativePrintData->TransferTo( this ) ; + // adjust minimal values - m_defaultMinMargins = ((pd->Flags & PSD_DEFAULTMINMARGINS) == PSD_DEFAULTMINMARGINS); - m_enableMargins = ((pd->Flags & PSD_DISABLEMARGINS) != PSD_DISABLEMARGINS); - m_enableOrientation = ((pd->Flags & PSD_DISABLEORIENTATION) != PSD_DISABLEORIENTATION); - m_enablePaper = ((pd->Flags & PSD_DISABLEPAPER) != PSD_DISABLEPAPER); - m_enablePrinter = ((pd->Flags & PSD_DISABLEPRINTER) != PSD_DISABLEPRINTER); - m_getDefaultInfo = ((pd->Flags & PSD_RETURNDEFAULT) == PSD_RETURNDEFAULT); - m_enableHelp = ((pd->Flags & PSD_SHOWHELP) == PSD_SHOWHELP); + if ( m_marginTopLeft.x < m_minMarginTopLeft.x ) + m_marginTopLeft.x = m_minMarginTopLeft.x; - m_paperSize.x = pd->ptPaperSize.x / 100; - m_paperSize.y = pd->ptPaperSize.y / 100; + if ( m_marginBottomRight.x < m_minMarginBottomRight.x ) + m_marginBottomRight.x = m_minMarginBottomRight.x; - m_minMarginTopLeft.x = pd->rtMinMargin.left / 100; - m_minMarginTopLeft.y = pd->rtMinMargin.top / 100; - m_minMarginBottomRight.x = pd->rtMinMargin.right / 100; - m_minMarginBottomRight.y = pd->rtMinMargin.bottom / 100; + if ( m_marginTopLeft.y < m_minMarginTopLeft.y ) + m_marginTopLeft.y = m_minMarginTopLeft.y; - m_marginTopLeft.x = pd->rtMargin.left / 100 ; - m_marginTopLeft.y = pd->rtMargin.top / 100 ; - m_marginBottomRight.x = pd->rtMargin.right / 100 ; - m_marginBottomRight.y = pd->rtMargin.bottom / 100 ; + if ( m_marginBottomRight.y < m_minMarginBottomRight.y ) + m_marginBottomRight.y = m_minMarginBottomRight.y; } +#endif -void wxPageSetupDialogData::SetOwnerWindow(wxWindow* win) -{ - if ( m_pageSetupData == NULL ) - ConvertToNative(); - - if ( m_pageSetupData != NULL && win != NULL) - { - PAGESETUPDLG *pd = (PAGESETUPDLG *) m_pageSetupData ; - pd->hwndOwner=(HWND) win->GetHWND(); - } -} -#endif // Win95 // If a corresponding paper type is found in the paper database, will set the m_printData // paper size id member as well. @@ -1091,13 +662,18 @@ void wxPageSetupDialogData::SetPaperSize(wxPaperSize id) CalculatePaperSizeFromId(); } +void wxPageSetupDialogData::SetPrintData(const wxPrintData& printData) +{ + m_printData = printData; + CalculatePaperSizeFromId(); +} + // Use paper size defined in this object to set the wxPrintData // paper id void wxPageSetupDialogData::CalculateIdFromPaperSize() { wxASSERT_MSG( (wxThePrintPaperDatabase != (wxPrintPaperDatabase*) NULL), - "wxThePrintPaperDatabase should not be NULL. " - "Do not create global print dialog data objects." ); + wxT("wxThePrintPaperDatabase should not be NULL. Do not create global print dialog data objects.") ); wxSize sz = GetPaperSize(); @@ -1112,16 +688,13 @@ void wxPageSetupDialogData::CalculateIdFromPaperSize() void wxPageSetupDialogData::CalculatePaperSizeFromId() { wxASSERT_MSG( (wxThePrintPaperDatabase != (wxPrintPaperDatabase*) NULL), - "wxThePrintPaperDatabase should not be NULL. " - "Do not create global print dialog data objects." ); + wxT("wxThePrintPaperDatabase should not be NULL. Do not create global print dialog data objects.") ); wxSize sz = wxThePrintPaperDatabase->GetSize(m_printData.GetPaperId()); - if (sz.x != 0) - { - // sz is in 10ths of a mm, so multiply by 10. - m_paperSize.x = sz.x * 10; - m_paperSize.y = sz.y * 10; - } + // sz is in 10ths of a mm, while paper size is in mm + m_paperSize.x = sz.x / 10; + m_paperSize.y = sz.y / 10; } +#endif // wxUSE_PRINTING_ARCHITECTURE