From dc7ccb9c5dcc8d68157dcc2c7cd2da230d45916d Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Fri, 1 Apr 2005 16:36:36 +0000 Subject: [PATCH] moving wxMac to new printing architecture git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33242 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/cmndata.h | 21 -- include/wx/mac/carbon/printdlg.h | 16 -- include/wx/mac/carbon/private/print.h | 42 +--- src/common/cmndata.cpp | 66 ------ src/common/prntbase.cpp | 3 +- src/mac/carbon/dcprint.cpp | 132 +---------- src/mac/carbon/printdlg.cpp | 76 ++++++- src/mac/carbon/printmac.cpp | 301 +++----------------------- 8 files changed, 116 insertions(+), 541 deletions(-) diff --git a/include/wx/cmndata.h b/include/wx/cmndata.h index 35cee4ff50..382f937687 100644 --- a/include/wx/cmndata.h +++ b/include/wx/cmndata.h @@ -147,12 +147,6 @@ private: * Encapsulates printer information (not printer dialog information) */ -#ifdef __WXMAC__ - -class wxNativePrintData ; - -#endif - enum wxPrintBin { wxPRINTBIN_DEFAULT, @@ -251,11 +245,6 @@ public: // Holds the native print data wxPrintNativeDataBase *GetNativeData() const { return m_nativeData; } -public: -#if defined(__WXMAC__) - wxNativePrintData* m_nativePrintData ; -#endif - private: wxPrintBin m_bin; wxPrintMode m_printMode; @@ -340,11 +329,6 @@ public: void operator=(const wxPrintDialogData& data); void operator=(const wxPrintData& data); // Sets internal m_printData member -#if defined(__WXMAC__) - void ConvertToNative(); - void ConvertFromNative(); -#endif - private: int m_printFromPage; int m_printToPage; @@ -423,11 +407,6 @@ public: void EnablePrinter(bool flag) { m_enablePrinter = flag; }; void EnableHelp(bool flag) { m_enableHelp = flag; }; -#if defined(__WXMAC__) - void ConvertToNative(); - void ConvertFromNative(); -#endif - // Use paper size defined in this object to set the wxPrintData // paper id void CalculateIdFromPaperSize(); diff --git a/include/wx/mac/carbon/printdlg.h b/include/wx/mac/carbon/printdlg.h index 5ea4400098..8250057b59 100644 --- a/include/wx/mac/carbon/printdlg.h +++ b/include/wx/mac/carbon/printdlg.h @@ -22,22 +22,6 @@ #include "wx/cmndata.h" #include "wx/printdlg.h" #include "wx/prntbase.h" - -//---------------------------------------------------------------------------- -// wxMacPrintNativeData -//---------------------------------------------------------------------------- - -class WXDLLEXPORT wxMacPrintNativeData: public wxPrintNativeDataBase -{ -public: - wxMacPrintNativeData() {}; - virtual ~wxMacPrintNativeData() {}; - - virtual bool TransferTo( wxPrintData &data ) { return true; } - virtual bool TransferFrom( const wxPrintData &data ) { return true; } - - virtual bool Ok() const { return true; } -}; /* * wxMacPrintDialog diff --git a/include/wx/mac/carbon/private/print.h b/include/wx/mac/carbon/private/print.h index cf46612db9..60d02597c8 100644 --- a/include/wx/mac/carbon/private/print.h +++ b/include/wx/mac/carbon/private/print.h @@ -13,6 +13,7 @@ #define _WX_MAC_PRIVATE_PRINT_H_ #include "wx/cmndata.h" +#include "wx/print.h" #include "wx/mac/private.h" #if TARGET_CARBON && !defined(__DARWIN__) @@ -27,53 +28,30 @@ #error "only Carbon Printing Session API is supported" #endif -class wxNativePrintData -{ -public : - wxNativePrintData() {} - virtual ~wxNativePrintData() {} - - virtual void TransferFrom( wxPrintData * ) = 0 ; - virtual void TransferTo( wxPrintData * ) = 0 ; - - virtual void TransferFrom( wxPageSetupDialogData * ) = 0 ; - virtual void TransferTo( wxPageSetupDialogData * ) = 0 ; - - virtual void TransferFrom( wxPrintDialogData * ) = 0 ; - virtual void TransferTo( wxPrintDialogData * ) = 0 ; - - virtual void CopyFrom( wxNativePrintData * ) = 0; - - virtual int ShowPrintDialog() = 0 ; - virtual int ShowPageSetupDialog() = 0 ; - - static wxNativePrintData* Create() ; -} ; - -class wxMacCarbonPrintData : public wxNativePrintData +class WXDLLEXPORT wxMacCarbonPrintData : public wxPrintNativeDataBase { public : wxMacCarbonPrintData() ; - ~wxMacCarbonPrintData() ; - - virtual void TransferFrom( wxPrintData * ) ; - virtual void TransferTo( wxPrintData * ) ; + virtual ~wxMacCarbonPrintData() ; + + virtual bool TransferTo( wxPrintData &data ); + virtual bool TransferFrom( const wxPrintData &data ); + + virtual bool Ok() const ; virtual void TransferFrom( wxPageSetupDialogData * ) ; virtual void TransferTo( wxPageSetupDialogData * ) ; virtual void TransferFrom( wxPrintDialogData * ) ; virtual void TransferTo( wxPrintDialogData * ) ; - - virtual void CopyFrom( wxNativePrintData * ) ; - virtual int ShowPrintDialog() ; - virtual int ShowPageSetupDialog() ; private : virtual void ValidateOrCreate() ; public : PMPrintSession m_macPrintSession ; PMPageFormat m_macPageFormat ; PMPrintSettings m_macPrintSettings ; +private: + DECLARE_DYNAMIC_CLASS(wxMacCarbonPrintData) } ; #endif diff --git a/src/common/cmndata.cpp b/src/common/cmndata.cpp index b0bc37a2fb..3300be5fe4 100644 --- a/src/common/cmndata.cpp +++ b/src/common/cmndata.cpp @@ -158,9 +158,6 @@ wxFontDialogBase::~wxFontDialogBase() wxPrintData::wxPrintData() { -#ifdef __WXMAC__ - m_nativePrintData = wxNativePrintData::Create() ; -#endif m_bin = wxPRINTBIN_DEFAULT; m_printMode = wxPRINT_MODE_PRINTER; m_printOrientation = wxPORTRAIT; @@ -212,28 +209,16 @@ wxPrintData::~wxPrintData() if (m_privData) delete [] m_privData; - -#ifdef __WXMAC__ - delete m_nativePrintData ; -#endif } 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) @@ -273,10 +258,6 @@ void wxPrintData::operator=(const wxPrintData& data) m_privData = new char[m_privDataLen]; memcpy( m_privData, data.GetPrivData(), m_privDataLen ); } - -#ifdef __WXMAC__ - m_nativePrintData->CopyFrom( data.m_nativePrintData ) ; -#endif } // Is this data OK for showing the print dialog? @@ -510,23 +491,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; @@ -640,36 +604,6 @@ wxPageSetupDialogData& wxPageSetupDialogData::operator=(const wxPrintData& data) 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) diff --git a/src/common/prntbase.cpp b/src/common/prntbase.cpp index 5a308b4950..b3f2e48a3d 100644 --- a/src/common/prntbase.cpp +++ b/src/common/prntbase.cpp @@ -54,6 +54,7 @@ #include "wx/msw/printdlg.h" #elif defined(__WXMAC__) #include "wx/mac/printdlg.h" +#include "wx/mac/private/print.h" #else #include "wx/generic/prntdlgg.h" #endif @@ -246,7 +247,7 @@ wxPrintNativeDataBase *wxNativePrintFactory::CreatePrintNativeData() #if defined(__WXMSW__) && !defined(__WXUNIVERSAL__) return new wxWindowsPrintNativeData; #elif defined(__WXMAC__) - return new wxMacPrintNativeData; + return new wxMacCarbonPrintData; #else return new wxPostScriptPrintNativeData; #endif diff --git a/src/mac/carbon/dcprint.cpp b/src/mac/carbon/dcprint.cpp index 49b5ba7b2f..ba563f3f48 100644 --- a/src/mac/carbon/dcprint.cpp +++ b/src/mac/carbon/dcprint.cpp @@ -53,8 +53,6 @@ public : static wxNativePrinterDC* Create(wxPrintData* data) ; } ; -#if TARGET_CARBON - class wxMacCarbonPrinterDC : public wxNativePrinterDC { public : @@ -79,7 +77,7 @@ wxMacCarbonPrinterDC::wxMacCarbonPrinterDC( wxPrintData* data ) ::GetPort( & m_macPrintFormerPort ) ; m_err = noErr ; - wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) data->m_nativePrintData ; + wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) data->GetNativeData() ; PMRect rPage; m_err = PMGetAdjustedPageRect(native->m_macPageFormat, &rPage); @@ -106,7 +104,7 @@ bool wxMacCarbonPrinterDC::StartDoc( wxPrinterDC* dc , const wxString& WXUNUSED if ( m_err ) return false ; - wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().m_nativePrintData ; + wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().GetNativeData() ; #if wxMAC_USE_CORE_GRAPHICS { @@ -138,7 +136,7 @@ void wxMacCarbonPrinterDC::EndDoc( wxPrinterDC* dc ) if ( m_err ) return ; - wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().m_nativePrintData ; + wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().GetNativeData() ; m_err = PMSessionEndDocument(native->m_macPrintSession); } @@ -148,7 +146,7 @@ void wxMacCarbonPrinterDC::StartPage( wxPrinterDC* dc ) if ( m_err ) return ; - wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().m_nativePrintData ; + wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().GetNativeData() ; m_err = PMSessionBeginPage(native->m_macPrintSession, native->m_macPageFormat, @@ -201,7 +199,7 @@ void wxMacCarbonPrinterDC::EndPage( wxPrinterDC* dc ) if ( m_err ) return ; - wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().m_nativePrintData ; + wxMacCarbonPrintData *native = (wxMacCarbonPrintData*) dc->GetPrintData().GetNativeData() ; m_err = PMSessionEndPage(native->m_macPrintSession); if ( m_err != noErr ) @@ -210,126 +208,6 @@ void wxMacCarbonPrinterDC::EndPage( wxPrinterDC* dc ) } } -#else - -class wxMacClassicPrinterDC : public wxNativePrinterDC -{ -public : - wxMacClassicPrinterDC( wxPrintData* data ) ; - ~wxMacClassicPrinterDC() ; - virtual bool StartDoc( wxPrinterDC* dc , const wxString& message ) ; - virtual void EndDoc( wxPrinterDC* dc ) ; - virtual void StartPage( wxPrinterDC* dc ) ; - virtual void EndPage( wxPrinterDC* dc ) ; - virtual wxCoord GetMaxX() const { return m_maxX ; } - virtual wxCoord GetMaxY() const { return m_maxY ; } - virtual wxUint32 GetStatus() const { return m_err ; } -private : - GrafPtr m_macPrintFormerPort ; - TPPrPort m_macPrintingPort ; - OSErr m_err ; - long m_maxX ; - long m_maxY ; -} ; - -wxNativePrinterDC* wxNativePrinterDC::Create(wxPrintData* data) -{ - return new wxMacClassicPrinterDC(data) ; -} - -wxMacClassicPrinterDC::wxMacClassicPrinterDC(wxPrintData* data) -{ - ::GetPort( &m_macPrintFormerPort ) ; - m_err = noErr ; - ::UMAPrOpen() ; - m_err = PrError() ; - if ( m_err != noErr ) - return; - - wxMacClassicPrintData *native = (wxMacClassicPrintData*) data->m_nativePrintData ; - - if ( ::PrValidate( native->m_macPrintSettings ) ) - { - // the driver has changed in the mean time, should we pop up a page setup dialog ? - if ( !::PrStlDialog( native->m_macPrintSettings ) ) - { - m_err = -1 ; - return; - } - } - m_err = PrError() ; - - if ( m_err == noErr ) - { - m_maxX = (**native->m_macPrintSettings).prInfo.rPage.right - (**native->m_macPrintSettings).prInfo.rPage.left ; - m_maxY = (**native->m_macPrintSettings).prInfo.rPage.bottom - (**native->m_macPrintSettings).prInfo.rPage.top ; - } -} - -wxMacClassicPrinterDC::~wxMacClassicPrinterDC() -{ - ::UMAPrClose() ; - ::SetPort( LMGetWMgrPort() ) ; -} - -bool wxMacClassicPrinterDC::StartDoc( wxPrinterDC* dc , const wxString& WXUNUSED(message) ) -{ - if ( m_err ) - return false ; - - wxMacClassicPrintData *native = (wxMacClassicPrintData*) dc->GetPrintData().m_nativePrintData ; - m_macPrintingPort = ::PrOpenDoc( native->m_macPrintSettings , NULL , NULL ) ; - m_err = PrError() ; - if ( m_err ) - return false ; - - // sets current port - dc->m_macPort = (GrafPtr ) m_macPrintingPort ; - m_maxX = (**native->m_macPrintSettings).prInfo.rPage.right - (**native->m_macPrintSettings).prInfo.rPage.left ; - m_maxY = (**native->m_macPrintSettings).prInfo.rPage.bottom - (**native->m_macPrintSettings).prInfo.rPage.top ; - return true ; -} - -void wxMacClassicPrinterDC::EndDoc( wxPrinterDC* dc ) -{ - if ( m_err ) - return ; - - PrCloseDoc( m_macPrintingPort ) ; - m_err = PrError() ; -} - -void wxMacClassicPrinterDC::StartPage( wxPrinterDC* dc ) -{ - if ( m_err ) - return ; - - wxMacClassicPrintData *native = (wxMacClassicPrintData*) dc->GetPrintData().m_nativePrintData ; - - PrOpenPage( m_macPrintingPort , NULL ) ; - dc->m_macLocalOrigin.x = (**native->m_macPrintSettings).rPaper.left ; - dc->m_macLocalOrigin.y = (**native->m_macPrintSettings).rPaper.top ; - // m_macPrintingPort is now the current port - Rect clip = { -32000 , -32000 , 32000 , 32000 } ; - ::ClipRect( &clip ) ; - m_err = PrError() ; - if ( m_err != noErr ) - ::PrCloseDoc( m_macPrintingPort ) ; -} - -void wxMacClassicPrinterDC::EndPage( wxPrinterDC* dc ) -{ - if ( m_err ) - return ; - - PrClosePage( m_macPrintingPort ) ; - m_err = PrError() ; - if ( m_err != noErr ) - ::PrCloseDoc( m_macPrintingPort ) ; -} - -#endif - wxPrinterDC::wxPrinterDC(const wxPrintData& printdata) { m_ok = FALSE ; diff --git a/src/mac/carbon/printdlg.cpp b/src/mac/carbon/printdlg.cpp index e44d56bb19..49781be89e 100644 --- a/src/mac/carbon/printdlg.cpp +++ b/src/mac/carbon/printdlg.cpp @@ -71,10 +71,41 @@ wxMacPrintDialog::~wxMacPrintDialog() int wxMacPrintDialog::ShowModal() { - m_printDialogData.ConvertToNative() ; - int result = m_printDialogData.GetPrintData().m_nativePrintData->ShowPrintDialog() ; + m_printDialogData.GetPrintData().ConvertToNative(); + ((wxMacCarbonPrintData*)m_printDialogData.GetPrintData().GetNativeData())->TransferFrom( &m_printDialogData ) ; + + int result = wxID_CANCEL ; + OSErr err = noErr ; + wxString message ; + + Boolean accepted; + + err = PMSessionPrintDialog( ((wxMacCarbonPrintData*)m_printDialogData.GetPrintData().GetNativeData())->m_macPrintSession, + ((wxMacCarbonPrintData*)m_printDialogData.GetPrintData().GetNativeData())->m_macPrintSettings, + ((wxMacCarbonPrintData*)m_printDialogData.GetPrintData().GetNativeData())->m_macPageFormat, + &accepted); + if ((err == noErr) && !accepted) + { + err = kPMCancel; // user clicked Cancel button + } + + if ( err == noErr ) + { + result = wxID_OK ; + } + + if ((err != noErr) && (err != kPMCancel)) + { + message.Printf( wxT("Print Error %d"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; + dialog.ShowModal(); + } + if ( result == wxID_OK ) - m_printDialogData.ConvertFromNative() ; + { + m_printDialogData.GetPrintData().ConvertFromNative(); + ((wxMacCarbonPrintData*)m_printDialogData.GetPrintData().GetNativeData())->TransferTo( &m_printDialogData ) ; + } return result ; } @@ -117,13 +148,42 @@ wxPageSetupData& wxMacPageSetupDialog::GetPageSetupDialogData() int wxMacPageSetupDialog::ShowModal() { - m_pageSetupData.ConvertToNative(); - - int result = m_pageSetupData.GetPrintData().m_nativePrintData->ShowPageSetupDialog(); + m_pageSetupData.GetPrintData().ConvertToNative(); + ((wxMacCarbonPrintData*)m_pageSetupData.GetPrintData().GetNativeData())->TransferFrom( &m_pageSetupData ) ; + + int result = wxID_CANCEL ; + OSErr err = noErr ; + wxString message ; + Boolean accepted; + + err = PMSessionPageSetupDialog( ((wxMacCarbonPrintData*)m_pageSetupData.GetPrintData().GetNativeData())->m_macPrintSession, + ((wxMacCarbonPrintData*)m_pageSetupData.GetPrintData().GetNativeData())->m_macPageFormat, + &accepted); + if ((err == noErr) && !accepted) + { + err = kPMCancel; // user clicked Cancel button + } + + // If the user did not cancel, flatten and save the PageFormat object + // with our document. + if (err == noErr) + { + result = wxID_OK ; + } + if ((err != noErr) && (err != kPMCancel)) + { + message.Printf( wxT("Print Error %d"), err ) ; + wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; + dialog.ShowModal(); + } + if (result == wxID_OK ) - m_pageSetupData.ConvertFromNative(); - + { + m_pageSetupData.GetPrintData().ConvertFromNative(); + m_pageSetupData.SetPaperSize( m_pageSetupData.GetPrintData().GetPaperSize() ) ; + ((wxMacCarbonPrintData*)m_pageSetupData.GetPrintData().GetNativeData())->TransferTo( &m_pageSetupData ) ; + } return result; } diff --git a/src/mac/carbon/printmac.cpp b/src/mac/carbon/printmac.cpp index f7238e84ce..e2c5e5bcf8 100644 --- a/src/mac/carbon/printmac.cpp +++ b/src/mac/carbon/printmac.cpp @@ -42,17 +42,15 @@ #include #if !USE_SHARED_LIBRARY +IMPLEMENT_DYNAMIC_CLASS(wxMacCarbonPrintData, wxPrintNativeDataBase) IMPLEMENT_DYNAMIC_CLASS(wxMacPrinter, wxPrinterBase) IMPLEMENT_CLASS(wxMacPrintPreview, wxPrintPreviewBase) #endif -#if TARGET_CARBON - -wxNativePrintData* wxNativePrintData::Create() +bool wxMacCarbonPrintData::Ok() const { - return new wxMacCarbonPrintData() ; + return (m_macPageFormat != kPMNoPageFormat) && (m_macPrintSettings != kPMNoPrintSettings) && (m_macPrintSession != kPMNoReference); } - wxMacCarbonPrintData::wxMacCarbonPrintData() { m_macPageFormat = kPMNoPageFormat; @@ -134,11 +132,11 @@ void wxMacCarbonPrintData::ValidateOrCreate() } } -void wxMacCarbonPrintData::TransferFrom( wxPrintData* data ) +bool wxMacCarbonPrintData::TransferFrom( const wxPrintData &data ) { ValidateOrCreate() ; - PMSetCopies( (PMPrintSettings) m_macPrintSettings , data->GetNoCopies() , false ) ; - PMSetOrientation( (PMPageFormat) m_macPageFormat , ( data->GetOrientation() == wxLANDSCAPE ) ? + PMSetCopies( (PMPrintSettings) m_macPrintSettings , data.GetNoCopies() , false ) ; + PMSetOrientation( (PMPageFormat) m_macPageFormat , ( data.GetOrientation() == wxLANDSCAPE ) ? kPMLandscape : kPMPortrait , false ) ; // collate cannot be set #if 0 // not yet tested @@ -147,7 +145,7 @@ void wxMacCarbonPrintData::TransferFrom( wxPrintData* data ) #endif PMColorMode color ; PMGetColorMode( (PMPrintSettings) m_macPrintSettings, &color ) ; - if ( data->GetColour() ) + if ( data.GetColour() ) { if ( color == kPMBlackAndWhite ) PMSetColorMode( (PMPrintSettings) m_macPrintSettings, kPMColor ) ; @@ -158,25 +156,26 @@ void wxMacCarbonPrintData::TransferFrom( wxPrintData* data ) // PMDuplexMode not yet accessible via API // PMQualityMode not yet accessible via API // todo paperSize + return true ; } -void wxMacCarbonPrintData::TransferTo( wxPrintData* data ) +bool wxMacCarbonPrintData::TransferTo( wxPrintData &data ) { OSStatus err = noErr ; UInt32 copies ; err = PMGetCopies( m_macPrintSettings , &copies ) ; if ( err == noErr ) - data->SetNoCopies( copies ) ; + data.SetNoCopies( copies ) ; PMOrientation orientation ; err = PMGetOrientation( m_macPageFormat , &orientation ) ; if ( err == noErr ) { if ( orientation == kPMPortrait || orientation == kPMReversePortrait ) - data->SetOrientation( wxPORTRAIT ); + data.SetOrientation( wxPORTRAIT ); else - data->SetOrientation( wxLANDSCAPE ); + data.SetOrientation( wxLANDSCAPE ); } // collate cannot be set @@ -193,7 +192,7 @@ void wxMacCarbonPrintData::TransferTo( wxPrintData* data ) PMColorMode color ; err = PMGetColorMode( m_macPrintSettings, &color ) ; if ( err == noErr ) - data->SetColour( !(color == kPMBlackAndWhite) ) ; + data.SetColour( !(color == kPMBlackAndWhite) ) ; // PMDuplexMode not yet accessible via API // PMQualityMode not yet accessible via API @@ -202,10 +201,11 @@ void wxMacCarbonPrintData::TransferTo( wxPrintData* data ) err = PMGetUnadjustedPaperRect( m_macPageFormat, &rPaper); if ( err == noErr ) { - data->SetPaperSize( wxSize ( + data.SetPaperSize( wxSize ( (int)(( rPaper.right - rPaper.left ) * pt2mm + 0.5 ) , (int)(( rPaper.bottom - rPaper.top ) * pt2mm + 0.5 ) ) ); } + return true ; } void wxMacCarbonPrintData::TransferFrom( wxPageSetupData *data ) @@ -213,9 +213,6 @@ void wxMacCarbonPrintData::TransferFrom( wxPageSetupData *data ) // should we setup the page rect here ? // since MacOS sometimes has two same paper rects with different // page rects we could make it roundtrip safe perhaps -#if TARGET_CARBON -#else -#endif } void wxMacCarbonPrintData::TransferTo( wxPageSetupData* data ) @@ -235,6 +232,22 @@ void wxMacCarbonPrintData::TransferTo( wxPageSetupData* data ) data->SetMinMarginBottomRight( wxPoint ( (wxCoord)(((double) rPaper.right - rPage.right ) * pt2mm), (wxCoord)(((double) rPaper.bottom - rPage.bottom ) * pt2mm)) ) ; + + if ( data->GetMarginTopLeft().x < data->GetMinMarginTopLeft().x ) + data->SetMarginTopLeft( wxPoint( data->GetMinMarginTopLeft().x , + data->GetMarginTopLeft().y ) ) ; + + if ( data->GetMarginBottomRight().x < data->GetMinMarginBottomRight().x ) + data->SetMarginBottomRight( wxPoint( data->GetMinMarginBottomRight().x , + data->GetMarginBottomRight().y ) ); + + if ( data->GetMarginTopLeft().y < data->GetMinMarginTopLeft().y ) + data->SetMarginTopLeft( wxPoint( data->GetMarginTopLeft().x , data->GetMinMarginTopLeft().y ) ); + + if ( data->GetMarginBottomRight().y < data->GetMinMarginBottomRight().y ) + data->SetMarginBottomRight( wxPoint( data->GetMarginBottomRight().x , + data->GetMinMarginBottomRight().y) ); + } } } @@ -267,258 +280,6 @@ void wxMacCarbonPrintData::TransferFrom( wxPrintDialogData* data ) PMSetLastPage( m_macPrintSettings , toPage , false ) ; } -void wxMacCarbonPrintData::CopyFrom( wxNativePrintData* d ) -{ - wxMacCarbonPrintData *data = (wxMacCarbonPrintData*) d ; - if ( data->m_macPrintSession != kPMNoReference ) - PMRetain( data->m_macPrintSession ) ; - if ( m_macPrintSession != kPMNoReference ) - { - PMRelease( m_macPrintSession ) ; - m_macPrintSession = kPMNoReference ; - } - if ( data->m_macPrintSession != kPMNoReference ) - m_macPrintSession = data->m_macPrintSession ; - - if ( data->m_macPrintSettings != kPMNoPrintSettings ) - PMRetain( data->m_macPrintSettings ) ; - if ( m_macPrintSettings != kPMNoPrintSettings ) - { - PMRelease( m_macPrintSettings ) ; - m_macPrintSettings = kPMNoPrintSettings ; - } - if ( data->m_macPrintSettings != kPMNoPrintSettings ) - m_macPrintSettings = data->m_macPrintSettings ; - - if ( data->m_macPageFormat != kPMNoPageFormat ) - PMRetain( data->m_macPageFormat ) ; - if ( m_macPageFormat != kPMNoPageFormat ) - { - PMRelease( m_macPageFormat ) ; - m_macPageFormat = kPMNoPageFormat ; - } - if ( data->m_macPageFormat != kPMNoPageFormat ) - m_macPageFormat = data->m_macPageFormat ; -} - -int wxMacCarbonPrintData::ShowPrintDialog() -{ - int result = wxID_CANCEL ; - OSErr err = noErr ; - wxString message ; - - Boolean accepted; - - { - // Display the Print dialog. - if (err == noErr) - { - err = PMSessionPrintDialog( m_macPrintSession, - m_macPrintSettings, - m_macPageFormat, - &accepted); - if ((err == noErr) && !accepted) - { - err = kPMCancel; // user clicked Cancel button - } - } - if ( err == noErr ) - { - result = wxID_OK ; - } - } - if ((err != noErr) && (err != kPMCancel)) - { - message.Printf( wxT("Print Error %d"), err ) ; - wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; - dialog.ShowModal(); - } - - return result ; -} - -int wxMacCarbonPrintData::ShowPageSetupDialog() -{ - int result = wxID_CANCEL ; - OSErr err = noErr ; - wxString message ; - - Boolean accepted; - { - // Display the Page Setup dialog. - if (err == noErr) - { - err = PMSessionPageSetupDialog( m_macPrintSession, - m_macPageFormat, - &accepted); - if ((err == noErr) && !accepted) - { - err = kPMCancel; // user clicked Cancel button - } - } - - // If the user did not cancel, flatten and save the PageFormat object - // with our document. - if (err == noErr) { - result = wxID_OK ; - } - } - if ((err != noErr) && (err != kPMCancel)) - { - message.Printf( wxT("Print Error %d"), err ) ; - wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ; - dialog.ShowModal(); - } - - return result ; -} - -#else - -wxNativePrintData* wxNativePrintData::Create() -{ - return new wxMacClassicPrintData() ; -} - -wxMacClassicPrintData::wxMacClassicPrintData() -{ - m_macPrintSettings = NULL ; - ValidateOrCreate() ; -} - -wxMacClassicPrintData::~wxMacClassicPrintData() -{ - wxASSERT( m_macPrintSettings ); - DisposeHandle( (Handle) m_macPrintSettings ) ; -} - -void wxMacClassicPrintData::ValidateOrCreate() -{ - if ( m_macPrintSettings == NULL ) - { - m_macPrintSettings = (THPrint) NewHandleClear( sizeof( TPrint ) ); - (**m_macPrintSettings).iPrVersion = 0; // something invalid - - (**m_macPrintSettings).prInfo.iHRes = 72; - (**m_macPrintSettings).prInfo.iVRes = 72; - Rect r1 = { 0, 0, 8*72 - 2 * 18, 11*72 - 2 * 36 }; - (**m_macPrintSettings).prInfo.rPage = r1;// must have its top left & (0,0) - - Rect r2 = { -18, -36, 8*72 - 18, 11*72 - 36 }; - (**m_macPrintSettings).rPaper = r2; - (**m_macPrintSettings).prStl.iPageV = 11 * 120 ; // 11 inches in 120th of an inch - (**m_macPrintSettings).prStl.iPageH = 8 * 120 ; // 8 inches in 120th of an inch - } - else - { - } -} - -void wxMacClassicPrintData::TransferFrom( wxPrintData* data ) -{ - ValidateOrCreate() ; - (**m_macPrintSettings).prJob.iCopies = data->GetNoCopies() ; - // on mac the paper rect has a negative top left corner, because the page rect (printable area) is at 0,0 - // if all printing data is consolidated in on structure we will be able to set additional infos about pages -} - -void wxMacClassicPrintData::TransferTo( wxPrintData* data ) -{ - data->SetNoCopies( (**m_macPrintSettings).prJob.iCopies ); - data->SetPaperSize( wxSize( - ((double) (**m_macPrintSettings).rPaper.right - (**m_macPrintSettings).rPaper.left ) * pt2mm , - ((double) (**m_macPrintSettings).rPaper.bottom - (**m_macPrintSettings).rPaper.top ) * pt2mm ) ) ; -} - -void wxMacClassicPrintData::TransferFrom( wxPageSetupData *data ) -{ -} - -void wxMacClassicPrintData::TransferTo( wxPageSetupData* data ) -{ - data->SetMinMarginTopLeft( wxPoint( - ((double) (**m_macPrintSettings).prInfo.rPage.left -(**m_macPrintSettings).rPaper.left ) * pt2mm , - ((double) (**m_macPrintSettings).prInfo.rPage.top -(**m_macPrintSettings).rPaper.top ) * pt2mm ) ) ; - data->SetMinMarginBottomRight( wxPoint( - ((double) (**m_macPrintSettings).rPaper.right - (**m_macPrintSettings).prInfo.rPage.right ) * pt2mm , - ((double)(**m_macPrintSettings).rPaper.bottom - (**m_macPrintSettings).prInfo.rPage.bottom ) * pt2mm ) ) ; -} - -void wxMacClassicPrintData::TransferFrom( wxPrintDialogData* data ) -{ - int toPage = data->GetToPage(); - if (toPage < 1) - toPage = data->GetFromPage(); - (**m_macPrintSettings).prJob.iFstPage = data->GetFromPage() ; - (**m_macPrintSettings).prJob.iLstPage = toPage; -} - -void wxMacClassicPrintData::TransferTo( wxPrintDialogData* data ) -{ - data->SetFromPage( (**m_macPrintSettings).prJob.iFstPage ) ; - data->SetToPage( (**m_macPrintSettings).prJob.iLstPage ) ; -} - -void wxMacClassicPrintData::CopyFrom( wxNativePrintData* data ) -{ - DisposeHandle( (Handle) m_macPrintSettings ) ; - m_macPrintSettings = ((wxMacClassicPrintData*)data)->m_macPrintSettings; - HandToHand( (Handle*) &m_macPrintSettings ); -} - -int wxMacClassicPrintData::ShowPrintDialog() -{ - int result = wxID_CANCEL ; - OSErr err = noErr ; - wxString message ; - - err = ::UMAPrOpen() ; - if ( err == noErr ) - { - if ( ::PrJobDialog( m_macPrintSettings ) ) - { - result = wxID_OK ; - } - - } - else - { - message.Printf( wxT("Print Error %d"), err ) ; - wxMessageDialog dialog( NULL , message , wxT(""), wxICON_HAND | wxOK) ; - dialog.ShowModal(); - } - ::UMAPrClose() ; - - return result ; -} - -int wxMacClassicPrintData::ShowPageSetupDialog() -{ - int result = wxID_CANCEL ; - OSErr err = noErr ; - wxString message ; - - err = ::UMAPrOpen() ; - if ( err == noErr ) - { - if ( ::PrStlDialog( m_macPrintSettings ) ) - { - result = wxID_OK ; - } - - } - else - { - message.Printf( wxT("Print Error %d"), err ) ; - wxMessageDialog dialog( NULL , message , wxEmptyString , wxICON_HAND | wxOK) ; - dialog.ShowModal(); - } - ::UMAPrClose() ; - return result ; -} - -#endif - /* * Printer */ -- 2.45.2