]> git.saurik.com Git - wxWidgets.git/commitdiff
moving wxMac to new printing architecture
authorStefan Csomor <csomor@advancedconcepts.ch>
Fri, 1 Apr 2005 16:36:36 +0000 (16:36 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Fri, 1 Apr 2005 16:36:36 +0000 (16:36 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33242 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/cmndata.h
include/wx/mac/carbon/printdlg.h
include/wx/mac/carbon/private/print.h
src/common/cmndata.cpp
src/common/prntbase.cpp
src/mac/carbon/dcprint.cpp
src/mac/carbon/printdlg.cpp
src/mac/carbon/printmac.cpp

index 35cee4ff505baee15427da67ef751d55c84129ae..382f937687f1483450b61bff51b2b9932eb69683 100644 (file)
@@ -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();
index 5ea44000980ec72afbfedc2d0f6359243d6313ca..8250057b598dd89d6ceffc92e2f1a22128f2a915 100644 (file)
 #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
index cf46612db917cb4102bbe88afd13c7e2e4bc1cb4..60d02597c803904dd3663599b08aa224945320ca 100644 (file)
@@ -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__)
 #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
index b0bc37a2fbd747e7de40f61da4f8e96c2810aeb8..3300be5fe472820df4fc0cabc5adaaf6da76a71d 100644 (file)
@@ -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)
index 5a308b49507600914db4a6085d56a9652291e401..b3f2e48a3ddcaca8c5e37815eec22717f3f52b3e 100644 (file)
@@ -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
index 49b5ba7b2f0aa701b5f0865116c59f5a9f4b0be3..ba563f3f48d23c96887af357f411184979100ea5 100644 (file)
@@ -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 ;
index e44d56bb1966d650ee3b48ff02ed1b7e1f97b994..49781be89ecf8a26122f9e5460bc2996fbfa2e24 100644 (file)
@@ -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;
 }
 
index f7238e84ce68a9501149e89bbe747d6905a77083..e2c5e5bcf8ec525eccd041b83443ea655357afac 100644 (file)
 #include <stdlib.h>
 
 #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
 */