X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/48f7ffbe93ab587c54643e2476b0e3b0c74e1386..53e3cd047cb9d01952af76779e89e444915e86c6:/src/common/cmndata.cpp diff --git a/src/common/cmndata.cpp b/src/common/cmndata.cpp index bfdc4e971b..ba6c494e40 100644 --- a/src/common/cmndata.cpp +++ b/src/common/cmndata.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: cmndata.cpp +// Name: src/common/cmndata.cpp // Purpose: Common GDI data // Author: Julian Smart // Modified by: @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "cmndata.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,16 +24,20 @@ #pragma hdrstop #endif +#include "wx/cmndata.h" + #ifndef WX_PRECOMP + #if defined(__WXMSW__) + #include "wx/msw/wrapcdlg.h" + #endif // MSW #include #include "wx/string.h" #include "wx/utils.h" #include "wx/app.h" + #include "wx/log.h" + #include "wx/gdicmn.h" #endif -#include "wx/gdicmn.h" -#include "wx/cmndata.h" -#include "wx/log.h" #include "wx/prntbase.h" #include "wx/printdlg.h" @@ -46,26 +46,21 @@ #endif // wxUSE_FONTDLG #if wxUSE_PRINTING_ARCHITECTURE - #include "wx/paper.h" -#endif // wxUSE_PRINTING_ARCHITECTURE - -#if defined(__WXMSW__) - #include "wx/msw/wrapcdlg.h" -#endif // MSW - #if wxUSE_PRINTING_ARCHITECTURE +#include "wx/paper.h" #if defined(__WXMAC__) #include "wx/mac/private/print.h" #endif - IMPLEMENT_DYNAMIC_CLASS(wxPrintData, wxObject) - IMPLEMENT_DYNAMIC_CLASS(wxPrintDialogData, wxObject) - IMPLEMENT_DYNAMIC_CLASS(wxPageSetupDialogData, wxObject) - #endif // wxUSE_PRINTING_ARCHITECTURE +IMPLEMENT_DYNAMIC_CLASS(wxPrintData, wxObject) +IMPLEMENT_DYNAMIC_CLASS(wxPrintDialogData, wxObject) +IMPLEMENT_DYNAMIC_CLASS(wxPageSetupDialogData, wxObject) - IMPLEMENT_DYNAMIC_CLASS(wxFontData, wxObject) - IMPLEMENT_DYNAMIC_CLASS(wxColourData, wxObject) +#endif // wxUSE_PRINTING_ARCHITECTURE + +IMPLEMENT_DYNAMIC_CLASS(wxFontData, wxObject) +IMPLEMENT_DYNAMIC_CLASS(wxColourData, wxObject) // ============================================================================ // implementation @@ -83,7 +78,7 @@ wxColourData::wxColourData() } wxColourData::wxColourData(const wxColourData& data) - : wxObject() + : wxObject() { (*this) = data; } @@ -94,27 +89,92 @@ wxColourData::~wxColourData() void wxColourData::SetCustomColour(int i, const wxColour& colour) { - wxCHECK_RET( (i >= 0 && i < 16), _T("custom colour index out of range") ); + wxCHECK_RET( i >= 0 && i < NUM_CUSTOM, _T("custom colour index out of range") ); m_custColours[i] = colour; } wxColour wxColourData::GetCustomColour(int i) { - wxCHECK_MSG( (i >= 0 && i < 16), wxColour(0,0,0), + wxCHECK_MSG( i >= 0 && i < NUM_CUSTOM, wxColour(0,0,0), _T("custom colour index out of range") ); return m_custColours[i]; } -void wxColourData::operator=(const wxColourData& data) +wxColourData& wxColourData::operator=(const wxColourData& data) { - int i; - for (i = 0; i < 16; i++) + for ( int i = 0; i < NUM_CUSTOM; i++) m_custColours[i] = data.m_custColours[i]; - m_dataColour = (wxColour&)data.m_dataColour; + m_dataColour = data.m_dataColour; m_chooseFull = data.m_chooseFull; + + return *this; +} + +// ---------------------------------------------------------------------------- +// [de]serialization +// ---------------------------------------------------------------------------- + +// separator used between different fields +static const char wxCOL_DATA_SEP = ','; + +wxString wxColourData::ToString() const +{ + wxString str(m_chooseFull ? '1' : '0'); + + for ( int i = 0; i < NUM_CUSTOM; i++ ) + { + str += wxCOL_DATA_SEP; + + const wxColour& clr = m_custColours[i]; + if ( clr.IsOk() ) + str += clr.GetAsString(wxC2S_HTML_SYNTAX); + } + + return str; +} + +bool wxColourData::FromString(const wxString& str) +{ + wxString token; + int n = -1; // index of the field, -1 corresponds to m_chooseFull + for ( wxString::const_iterator i = str.begin(); i != str.end(); ++i ) + { + if ( *i == wxCOL_DATA_SEP ) + { + if ( n == -1 ) + { + if ( token == '0' ) + m_chooseFull = false; + else if ( token == '1' ) + m_chooseFull = true; + else // only '0' and '1' are used in ToString() + return false; + } + else // custom colour + { + if ( n == WXSIZEOF(m_custColours) ) + return false; // too many custom colours + + // empty strings are used by ToString() for colours not used + if ( token.empty() ) + m_custColours[n] = wxNullColour; + else if ( !m_custColours[n].Set(token) ) + return false; // invalid colour string + } + + token.clear(); + n++; + } + else // continuation of the current field + { + token += *i; + } + } + + return true; } // ---------------------------------------------------------------------------- @@ -155,8 +215,10 @@ wxFontDialogBase::~wxFontDialogBase() wxPrintData::wxPrintData() { m_bin = wxPRINTBIN_DEFAULT; + m_media = wxPRINTMEDIA_DEFAULT; m_printMode = wxPRINT_MODE_PRINTER; m_printOrientation = wxPORTRAIT; + m_printOrientationReversed = false; m_printNoCopies = 1; m_printCollate = false; @@ -165,8 +227,11 @@ wxPrintData::wxPrintData() m_colour = true; m_duplexMode = wxDUPLEX_SIMPLEX; m_printQuality = wxPRINT_QUALITY_HIGH; - m_paperId = wxPAPER_A4; - m_paperSize = wxSize(210, 297); + + // we intentionally don't initialize paper id and size at all, like this + // the default system settings will be used for them + m_paperId = wxPAPER_NONE; + m_paperSize = wxDefaultSize; m_privData = NULL; m_privDataLen = 0; @@ -222,6 +287,7 @@ void wxPrintData::operator=(const wxPrintData& data) m_printNoCopies = data.m_printNoCopies; m_printCollate = data.m_printCollate; m_printOrientation = data.m_printOrientation; + m_printOrientationReversed = data.m_printOrientationReversed; m_printerName = data.m_printerName; m_colour = data.m_colour; m_duplexMode = data.m_duplexMode; @@ -229,6 +295,7 @@ void wxPrintData::operator=(const wxPrintData& data) m_paperId = data.m_paperId; m_paperSize = data.m_paperSize; m_bin = data.m_bin; + m_media = data.m_media; m_printMode = data.m_printMode; m_filename = data.m_filename; @@ -257,178 +324,13 @@ void wxPrintData::operator=(const wxPrintData& data) } // Is this data OK for showing the print dialog? -bool wxPrintData::Ok() const +bool wxPrintData::IsOk() const { m_nativeData->TransferFrom( *this ); 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 // ---------------------------------------------------------------------------- @@ -451,9 +353,6 @@ wxPrintDialogData::wxPrintDialogData() m_printEnablePrintToFile = ! factory->HasOwnPrintToFile(); m_printEnableHelp = false; -#if WXWIN_COMPATIBILITY_2_4 - m_printSetupDialog = false; -#endif } wxPrintDialogData::wxPrintDialogData(const wxPrintDialogData& dialogData) @@ -477,9 +376,6 @@ wxPrintDialogData::wxPrintDialogData(const wxPrintData& printData) m_printEnablePageNumbers = true; m_printEnablePrintToFile = true; m_printEnableHelp = false; -#if WXWIN_COMPATIBILITY_2_4 - m_printSetupDialog = false; -#endif m_printData = printData; } @@ -502,9 +398,6 @@ void wxPrintDialogData::operator=(const wxPrintDialogData& data) 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; } @@ -584,7 +477,7 @@ wxPageSetupDialogData& wxPageSetupDialogData::operator=(const wxPageSetupDialogD m_enableOrientation = data.m_enableOrientation; m_enablePaper = data.m_enablePaper; m_enablePrinter = data.m_enablePrinter; - m_getDefaultInfo = data.m_getDefaultInfo;; + m_getDefaultInfo = data.m_getDefaultInfo; m_enableHelp = data.m_enableHelp; m_printData = data.m_printData;