X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/aac85509bd54338c3543ca565efe08e1d378a603..2190f6aa153416d1c225532bb026df98b3e273ad:/src/common/cmndata.cpp diff --git a/src/common/cmndata.cpp b/src/common/cmndata.cpp index dc13526103..4a02c49298 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,21 @@ #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/tokenzr.h" #include "wx/prntbase.h" #include "wx/printdlg.h" @@ -46,39 +47,18 @@ #endif // wxUSE_FONTDLG #if wxUSE_PRINTING_ARCHITECTURE - #include "wx/paper.h" -#endif // wxUSE_PRINTING_ARCHITECTURE - -#if defined(__WXMSW__) && !defined(__PALMOS__) - #include - #include "wx/msw/private.h" - #ifndef __SMARTPHONE__ /* of WinCE */ - #include - #endif +#include "wx/paper.h" - #if defined(__WATCOMC__) || defined(__SYMANTEC__) || defined(__SALFORDC__) - #include - #include - #endif -#endif // MSW -#ifdef __WXMAC__ - #include "wx/mac/private/print.h" -#endif +IMPLEMENT_DYNAMIC_CLASS(wxPrintData, wxObject) +IMPLEMENT_DYNAMIC_CLASS(wxPrintDialogData, wxObject) +IMPLEMENT_DYNAMIC_CLASS(wxPageSetupDialogData, wxObject) - #if wxUSE_PRINTING_ARCHITECTURE - IMPLEMENT_DYNAMIC_CLASS(wxPrintData, wxObject) - IMPLEMENT_DYNAMIC_CLASS(wxPrintDialogData, wxObject) - IMPLEMENT_DYNAMIC_CLASS(wxPageSetupDialogData, wxObject) - #endif // wxUSE_PRINTING_ARCHITECTURE +#endif // wxUSE_PRINTING_ARCHITECTURE - IMPLEMENT_DYNAMIC_CLASS(wxFontData, wxObject) - IMPLEMENT_DYNAMIC_CLASS(wxColourData, wxObject) - -#ifndef DMPAPER_USER - #define DMPAPER_USER 256 -#endif +IMPLEMENT_DYNAMIC_CLASS(wxFontData, wxObject) +IMPLEMENT_DYNAMIC_CLASS(wxColourData, wxObject) // ============================================================================ // implementation @@ -96,7 +76,7 @@ wxColourData::wxColourData() } wxColourData::wxColourData(const wxColourData& data) - : wxObject() + : wxObject() { (*this) = data; } @@ -107,27 +87,68 @@ 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) +wxColour wxColourData::GetCustomColour(int i) const { - 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) +{ + wxStringTokenizer tokenizer(str, wxCOL_DATA_SEP); + wxString token = tokenizer.GetNextToken(); + m_chooseFull = token == '1'; + bool success = m_chooseFull || token == '0'; + for (int i = 0; success && i < NUM_CUSTOM; i++) + { + token = tokenizer.GetNextToken(); + if (token.empty()) + m_custColours[i] = wxNullColour; + else + success = m_custColours[i].Set(token); + } + return success; } // ---------------------------------------------------------------------------- @@ -167,22 +188,27 @@ wxFontDialogBase::~wxFontDialogBase() wxPrintData::wxPrintData() { -#ifdef __WXMAC__ - m_nativePrintData = wxNativePrintData::Create() ; -#endif 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; // 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); + + // 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; m_nativeData = wxPrintFactory::GetFactory()->CreatePrintNativeData(); } @@ -190,44 +216,55 @@ wxPrintData::wxPrintData() wxPrintData::wxPrintData(const wxPrintData& printData) : wxObject() { + m_nativeData = NULL; + m_privData = 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; - -#ifdef __WXMAC__ - delete m_nativePrintData ; -#endif -} + if (m_privData) + delete [] m_privData; +} void wxPrintData::ConvertToNative() { -#ifdef __WXMAC__ - m_nativePrintData->TransferFrom( this ) ; -#else m_nativeData->TransferFrom( *this ) ; -#endif } void wxPrintData::ConvertFromNative() { -#ifdef __WXMAC__ - m_nativePrintData->TransferTo( this ) ; -#else m_nativeData->TransferTo( *this ) ; -#endif } -void wxPrintData::operator=(const wxPrintData& data) +wxPrintData& wxPrintData::operator=(const wxPrintData& data) { + if ( &data == this ) + return *this; + 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; @@ -235,24 +272,38 @@ 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; + 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++; - -#ifdef __WXMAC__ - m_nativePrintData->CopyFrom( data.m_nativePrintData ) ; -#endif + + 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 ); + } + + return *this; } // Is this data OK for showing the print dialog? -bool wxPrintData::Ok() const +bool wxPrintData::IsOk() const { m_nativeData->TransferFrom( *this ); @@ -276,14 +327,11 @@ 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; -#endif } wxPrintDialogData::wxPrintDialogData(const wxPrintDialogData& dialogData) @@ -299,7 +347,12 @@ wxPrintDialogData::wxPrintDialogData(const wxPrintData& printData) m_printMinPage = 1; m_printMaxPage = 9999; m_printNoCopies = 1; + // On Mac the Print dialog always defaults to "All Pages" +#ifdef __WXMAC__ + m_printAllPages = true; +#else m_printAllPages = false; +#endif m_printCollate = false; m_printToFile = false; m_printSelection = false; @@ -307,9 +360,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; } @@ -317,23 +367,6 @@ wxPrintDialogData::~wxPrintDialogData() { } -#ifdef __WXMAC__ - -void wxPrintDialogData::ConvertToNative() -{ - m_printData.ConvertToNative(); - m_printData.m_nativePrintData->TransferFrom( this ) ; -} - -void wxPrintDialogData::ConvertFromNative() -{ - m_printData.ConvertFromNative(); - m_printData.m_nativePrintData->TransferTo( this ) ; -} - -#endif - - void wxPrintDialogData::operator=(const wxPrintDialogData& data) { m_printFromPage = data.m_printFromPage; @@ -349,9 +382,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; } @@ -366,14 +396,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 +423,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; @@ -431,7 +461,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; @@ -442,40 +472,11 @@ wxPageSetupDialogData& wxPageSetupDialogData::operator=(const wxPageSetupDialogD wxPageSetupDialogData& wxPageSetupDialogData::operator=(const wxPrintData& data) { m_printData = data; + CalculatePaperSizeFromId(); return *this; } -#ifdef __WXMAC__ -void wxPageSetupDialogData::ConvertToNative() -{ - m_printData.ConvertToNative(); - m_printData.m_nativePrintData->TransferFrom( this ) ; -} - -void wxPageSetupDialogData::ConvertFromNative() -{ - m_printData.ConvertFromNative (); - m_paperSize = m_printData.GetPaperSize() ; - CalculateIdFromPaperSize(); - m_printData.m_nativePrintData->TransferTo( this ) ; - // adjust minimal values - - if ( m_marginTopLeft.x < m_minMarginTopLeft.x ) - m_marginTopLeft.x = m_minMarginTopLeft.x; - - if ( m_marginBottomRight.x < m_minMarginBottomRight.x ) - m_marginBottomRight.x = m_minMarginBottomRight.x; - - if ( m_marginTopLeft.y < m_minMarginTopLeft.y ) - m_marginTopLeft.y = m_minMarginTopLeft.y; - - if ( m_marginBottomRight.y < m_minMarginBottomRight.y ) - m_marginBottomRight.y = m_minMarginBottomRight.y; -} -#endif - - // If a corresponding paper type is found in the paper database, will set the m_printData // paper size id member as well. void wxPageSetupDialogData::SetPaperSize(const wxSize& sz) @@ -493,6 +494,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()