X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/aac85509bd54338c3543ca565efe08e1d378a603..f842e673f6db8c60b6b417a1c5255e1c5ee480db:/src/common/cmndata.cpp?ds=sidebyside diff --git a/src/common/cmndata.cpp b/src/common/cmndata.cpp index dc13526103..9c34396f4f 100644 --- a/src/common/cmndata.cpp +++ b/src/common/cmndata.cpp @@ -49,7 +49,7 @@ #include "wx/paper.h" #endif // wxUSE_PRINTING_ARCHITECTURE -#if defined(__WXMSW__) && !defined(__PALMOS__) +#if defined(__WXMSW__) #include #include "wx/msw/private.h" @@ -63,11 +63,12 @@ #endif #endif // MSW -#ifdef __WXMAC__ + #if wxUSE_PRINTING_ARCHITECTURE + +#if defined(__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) @@ -177,34 +178,55 @@ wxPrintData::wxPrintData() m_printCollate = false; // New, 24/3/99 - m_printerName = wxT(""); + m_printerName = wxEmptyString; m_colour = true; m_duplexMode = wxDUPLEX_SIMPLEX; m_printQuality = wxPRINT_QUALITY_HIGH; m_paperId = wxPAPER_A4; m_paperSize = wxSize(210, 297); + m_privData = NULL; + m_privDataLen = 0; + m_nativeData = wxPrintFactory::GetFactory()->CreatePrintNativeData(); } wxPrintData::wxPrintData(const wxPrintData& printData) : wxObject() { + m_nativeData = NULL; (*this) = printData; } +void wxPrintData::SetPrivData( char *privData, int len ) +{ + if (m_privData) + { + delete [] m_privData; + m_privData = NULL; + } + m_privDataLen = len; + if (m_privDataLen > 0) + { + m_privData = new char[m_privDataLen]; + memcpy( m_privData, privData, m_privDataLen ); + } +} + wxPrintData::~wxPrintData() { m_nativeData->m_ref--; - if (m_nativeData->m_ref == 0) + if (m_nativeData->m_ref == 0) delete m_nativeData; + if (m_privData) + delete [] m_privData; + #ifdef __WXMAC__ delete m_nativePrintData ; #endif } - void wxPrintData::ConvertToNative() { #ifdef __WXMAC__ @@ -236,16 +258,31 @@ void wxPrintData::operator=(const wxPrintData& data) m_paperSize = data.m_paperSize; m_bin = data.m_bin; m_printMode = data.m_printMode; - m_filename = data.m_filename; + m_filename = data.m_filename; - // UnRef old m_nativeData - m_nativeData->m_ref--; - if (m_nativeData->m_ref == 0) - delete m_nativeData; + // 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++; - + + if (m_privData) + { + delete [] m_privData; + m_privData = NULL; + } + m_privDataLen = data.GetPrivDataLen(); + if (m_privDataLen > 0) + { + m_privData = new char[m_privDataLen]; + memcpy( m_privData, data.GetPrivData(), m_privDataLen ); + } + #ifdef __WXMAC__ m_nativePrintData->CopyFrom( data.m_nativePrintData ) ; #endif @@ -259,6 +296,171 @@ bool wxPrintData::Ok() const return m_nativeData->Ok(); } +// 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) + +#include "wx/generic/prntdlgg.h" + +#if wxUSE_POSTSCRIPT + #define WXUNUSED_WITHOUT_PS(name) name +#else + #define WXUNUSED_WITHOUT_PS(name) WXUNUSED(name) +#endif + +wxString wxPrintData::GetPrinterCommand() const +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPrinterCommand(); +#endif + return wxEmptyString; +} + +wxString wxPrintData::GetPrinterOptions() const +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPrinterOptions(); +#endif + return wxEmptyString; +} + +wxString wxPrintData::GetPreviewCommand() const +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPreviewCommand(); +#endif + return wxEmptyString; +} + +wxString wxPrintData::GetFontMetricPath() const +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetFontMetricPath(); +#endif + return wxEmptyString; +} + +double wxPrintData::GetPrinterScaleX() const +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPrinterScaleX(); +#endif + return 1.0; +} + +double wxPrintData::GetPrinterScaleY() const +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPrinterScaleY(); +#endif + return 1.0; +} + +long wxPrintData::GetPrinterTranslateX() const +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPrinterTranslateX(); +#endif + return 0; +} + +long wxPrintData::GetPrinterTranslateY() const +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + return ((wxPostScriptPrintNativeData*)m_nativeData)->GetPrinterTranslateY(); +#endif + return 0; +} + +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 +} + +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 +} + +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 +} + +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 +} + +void wxPrintData::SetPrinterScaleX(double WXUNUSED_WITHOUT_PS(x)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPrinterScaleX( x ); +#endif +} + +void wxPrintData::SetPrinterScaleY(double WXUNUSED_WITHOUT_PS(y)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPrinterScaleY( y ); +#endif +} + +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 +} + +void wxPrintData::SetPrinterTranslateX(long WXUNUSED_WITHOUT_PS(x)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPrinterTranslateX( x ); +#endif +} + +void wxPrintData::SetPrinterTranslateY(long WXUNUSED_WITHOUT_PS(y)) +{ +#if wxUSE_POSTSCRIPT + if (m_nativeData && wxIsKindOf(m_nativeData,wxPostScriptPrintNativeData)) + ((wxPostScriptPrintNativeData*)m_nativeData)->SetPrinterTranslateY( y ); +#endif +} + +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 + // ---------------------------------------------------------------------------- // Print dialog data // ---------------------------------------------------------------------------- @@ -276,10 +478,10 @@ wxPrintDialogData::wxPrintDialogData() 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; @@ -366,14 +568,14 @@ void wxPrintDialogData::operator=(const wxPrintData& data) wxPageSetupDialogData::wxPageSetupDialogData() { - m_paperSize = wxSize(0, 0); + m_paperSize = wxSize(0,0); CalculatePaperSizeFromId(); - m_minMarginTopLeft = wxPoint(0, 0); - m_minMarginBottomRight = wxPoint(0, 0); - m_marginTopLeft = wxPoint(0, 0); - m_marginBottomRight = wxPoint(0, 0); + m_minMarginTopLeft = + m_minMarginBottomRight = + m_marginTopLeft = + m_marginBottomRight = wxPoint(0,0); // Flags m_defaultMinMargins = false; @@ -393,11 +595,11 @@ wxPageSetupDialogData::wxPageSetupDialogData(const wxPageSetupDialogData& dialog wxPageSetupDialogData::wxPageSetupDialogData(const wxPrintData& printData) { - m_paperSize = wxSize(0, 0); - m_minMarginTopLeft = wxPoint(0, 0); - m_minMarginBottomRight = wxPoint(0, 0); - m_marginTopLeft = wxPoint(0, 0); - m_marginBottomRight = wxPoint(0, 0); + m_paperSize = wxSize(0,0); + m_minMarginTopLeft = + m_minMarginBottomRight = + m_marginTopLeft = + m_marginBottomRight = wxPoint(0,0); // Flags m_defaultMinMargins = false; @@ -442,6 +644,7 @@ wxPageSetupDialogData& wxPageSetupDialogData::operator=(const wxPageSetupDialogD wxPageSetupDialogData& wxPageSetupDialogData::operator=(const wxPrintData& data) { m_printData = data; + CalculatePaperSizeFromId(); return *this; } @@ -493,6 +696,12 @@ 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()