X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5cd0202bdc4495076385fb18b30eec8f83adadce..08670ea85abf4b4946a9ce64971b591d7b1ee30b:/src/common/cmndata.cpp diff --git a/src/common/cmndata.cpp b/src/common/cmndata.cpp index 2efed738be..46c8b1f9d8 100644 --- a/src/common/cmndata.cpp +++ b/src/common/cmndata.cpp @@ -24,6 +24,8 @@ #pragma hdrstop #endif +#if wxUSE_PRINTING_ARCHITECTURE + #include "wx/cmndata.h" #ifndef WX_PRECOMP @@ -40,174 +42,17 @@ #include "wx/prntbase.h" #include "wx/printdlg.h" - -#if wxUSE_FONTDLG - #include "wx/fontdlg.h" -#endif // wxUSE_FONTDLG - -#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(wxFontData, wxObject) -IMPLEMENT_DYNAMIC_CLASS(wxColourData, wxObject) - // ============================================================================ // implementation // ============================================================================ -// ---------------------------------------------------------------------------- -// wxColourData -// ---------------------------------------------------------------------------- - -wxColourData::wxColourData() -{ - m_chooseFull = false; - m_dataColour.Set(0,0,0); - // m_custColours are wxNullColours initially -} - -wxColourData::wxColourData(const wxColourData& data) - : wxObject() -{ - (*this) = data; -} - -wxColourData::~wxColourData() -{ -} - -void wxColourData::SetCustomColour(int i, const wxColour& colour) -{ - wxCHECK_RET( (i >= 0 && i < WXSIZEOF(m_custColours)), _T("custom colour index out of range") ); - - m_custColours[i] = colour; -} - -wxColour wxColourData::GetCustomColour(int i) -{ - wxCHECK_MSG( (i >= 0 && i < WXSIZEOF(m_custColours)), wxColour(0,0,0), - _T("custom colour index out of range") ); - - return m_custColours[i]; -} - -wxColourData& wxColourData::operator=(const wxColourData& data) -{ - for (int i = 0; i < WXSIZEOF(m_custColours); i++) - m_custColours[i] = data.m_custColours[i]; - - 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 < WXSIZEOF(m_custColours); 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; -} - -// ---------------------------------------------------------------------------- -// Font data -// ---------------------------------------------------------------------------- - -wxFontData::wxFontData() -{ - // Intialize colour to black. - m_fontColour = wxNullColour; - - m_showHelp = false; - m_allowSymbols = true; - m_enableEffects = true; - m_minSize = 0; - m_maxSize = 0; - - m_encoding = wxFONTENCODING_SYSTEM; -} - -wxFontData::~wxFontData() -{ -} - -#if wxUSE_FONTDLG - -wxFontDialogBase::~wxFontDialogBase() -{ -} - -#endif // wxUSE_FONTDLG - -#if wxUSE_PRINTING_ARCHITECTURE // ---------------------------------------------------------------------------- // Print data // ---------------------------------------------------------------------------- @@ -249,11 +94,7 @@ wxPrintData::wxPrintData(const wxPrintData& printData) void wxPrintData::SetPrivData( char *privData, int len ) { - if (m_privData) - { - delete [] m_privData; - m_privData = NULL; - } + wxDELETEA(m_privData); m_privDataLen = len; if (m_privDataLen > 0) { @@ -282,8 +123,11 @@ void wxPrintData::ConvertFromNative() m_nativeData->TransferTo( *this ) ; } -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; @@ -310,17 +154,15 @@ void wxPrintData::operator=(const wxPrintData& data) m_nativeData = data.GetNativeData(); m_nativeData->m_ref++; - if (m_privData) - { - delete [] m_privData; - m_privData = NULL; - } + wxDELETEA(m_privData); 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? @@ -328,7 +170,7 @@ bool wxPrintData::IsOk() const { m_nativeData->TransferFrom( *this ); - return m_nativeData->Ok(); + return m_nativeData->IsOk(); } // ---------------------------------------------------------------------------- @@ -368,7 +210,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; @@ -520,7 +367,7 @@ void wxPageSetupDialogData::SetPrintData(const wxPrintData& printData) // paper id void wxPageSetupDialogData::CalculateIdFromPaperSize() { - wxASSERT_MSG( (wxThePrintPaperDatabase != (wxPrintPaperDatabase*) NULL), + wxASSERT_MSG( (wxThePrintPaperDatabase != NULL), wxT("wxThePrintPaperDatabase should not be NULL. Do not create global print dialog data objects.") ); wxSize sz = GetPaperSize(); @@ -535,14 +382,17 @@ void wxPageSetupDialogData::CalculateIdFromPaperSize() // Use paper id in wxPrintData to set this object's paper size void wxPageSetupDialogData::CalculatePaperSizeFromId() { - wxASSERT_MSG( (wxThePrintPaperDatabase != (wxPrintPaperDatabase*) NULL), + wxASSERT_MSG( (wxThePrintPaperDatabase != NULL), wxT("wxThePrintPaperDatabase should not be NULL. Do not create global print dialog data objects.") ); wxSize sz = wxThePrintPaperDatabase->GetSize(m_printData.GetPaperId()); - // 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; + if (sz != wxSize(0, 0)) + { + // 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