]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/dcprint.cpp
X11-specific code doesn't work so well on wxCocoa
[wxWidgets.git] / src / mac / dcprint.cpp
index 2e822438347f4484c863e7f5118996373ee34cbe..b4dce6d72bba83252cc0e85de540b396f1685cd7 100644 (file)
@@ -5,7 +5,7 @@
 // Modified by:
 // Created:     01/02/97
 // RCS-ID:      $Id$
-// Copyright:   (c) Julian Smart and Markus Holzem
+// Copyright:   (c) Julian Smart
 // Licence:       wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
@@ -46,25 +46,27 @@ GrafPtr macPrintFormerPort = NULL ;
 
 wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
 {
-    OSStatus err ;
+    OSStatus err = noErr ;
     wxString message ;
     
     m_printData = printdata ;
     m_printData.ConvertToNative() ;
 
 #if TARGET_CARBON && PM_USE_SESSION_APIS
-    err = UMAPrOpen(&m_macPrintSessionPort) ;
+    m_macPrintSessionPort = printdata.m_macPrintSession ;
+    PMRetain( m_macPrintSessionPort ) ;
+
     if ( err != noErr || m_macPrintSessionPort == kPMNoData )
 #else
     err = UMAPrOpen(NULL) ;
     if ( err != noErr )
 #endif
     {
-        message.Printf( "Print Error %ld", err ) ;
-        wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+        message.Printf( wxT("Print Error %ld"), err ) ;
+        wxMessageDialog dialog( NULL , message , wxEmptyString , wxICON_HAND | wxOK) ;
         dialog.ShowModal();
 #if TARGET_CARBON && PM_USE_SESSION_APIS
-        UMAPrClose(&m_macPrintSessionPort) ;
+        PMRelease( m_macPrintSessionPort ) ;
 #else
         UMAPrClose(NULL) ;
 #endif
@@ -75,20 +77,26 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
 #if !TARGET_CARBON
     if ( ::PrValidate( (THPrint) m_printData.m_macPrintSettings ) )
     {
-        ::PrStlDialog( (THPrint) m_printData.m_macPrintSettings ) ;
         // the driver has changed in the mean time, should we pop up a page setup dialog ?
+        if ( !::PrStlDialog( (THPrint) m_printData.m_macPrintSettings ) )
+        {
+            UMAPrClose(NULL) ;
+            m_ok = FALSE;
+            return;
+        }
     }
     err = PrError() ;
     if ( err != noErr )
     {
-        message.Printf( "Print Error %ld", err ) ;
-        wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+        message.Printf( wxT("Print Error %ld"), err ) ;
+        wxMessageDialog dialog( NULL , message , wxEmptyString , wxICON_HAND | wxOK) ;
         dialog.ShowModal();
         UMAPrClose(NULL) ;
         m_ok = FALSE;
         return;
     }
     ::GetPort( &macPrintFormerPort ) ;
+    /*
     m_macPrintSessionPort = ::PrOpenDoc( (THPrint) m_printData.m_macPrintSettings , NULL , NULL ) ;
     err = PrError() ;
     if ( err )
@@ -102,7 +110,9 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
     }
     // sets current port
     m_macPort = (GrafPtr ) m_macPrintSessionPort ;
+    */
 #else
+    /*
   #if PM_USE_SESSION_APIS
     err = PMSessionBeginDocument((PMPrintSession)m_macPrintSessionPort,
               (PMPrintSettings)m_printData.m_macPrintSettings, 
@@ -121,7 +131,7 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
         wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
         dialog.ShowModal();
   #if TARGET_CARBON && PM_USE_SESSION_APIS
-        UMAPrClose(&m_macPrintSessionPort) ;
+        PMRelease(&m_macPrintSessionPort) ;
   #else
         UMAPrClose(NULL) ;
   #endif
@@ -130,31 +140,32 @@ wxPrinterDC::wxPrinterDC(const wxPrintData& printdata)
     }
     // sets current port
     ::GetPort( (GrafPtr *)&m_macPort ) ;
+    */
 #endif
     m_ok = TRUE ;
     m_minY = m_minX = 0 ;
 #if TARGET_CARBON
-    PMRect rPaper;
+    PMRect rPage;
     
-    err = PMGetAdjustedPaperRect((PMPageFormat)m_printData.m_macPageFormat, &rPaper);
+    err = PMGetAdjustedPageRect((PMPageFormat)m_printData.m_macPageFormat, &rPage);
     if ( err != noErr )
     {
-        message.Printf( "Print Error %ld", err ) ;
-        wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+        message.Printf( wxT("Print Error %ld"), err ) ;
+        wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ;
         dialog.ShowModal();
   #if TARGET_CARBON && PM_USE_SESSION_APIS
-        UMAPrClose(&m_macPrintSessionPort) ;
+        PMRelease(&m_macPrintSessionPort) ;
   #else
         UMAPrClose(NULL) ;
   #endif
         m_ok = FALSE;
         return;
     }
-    m_maxX = wxCoord(rPaper.right - rPaper.left) ;
-    m_maxY = wxCoord(rPaper.bottom - rPaper.top);
+    m_maxX = wxCoord(rPage.right - rPage.left) ;
+    m_maxY = wxCoord(rPage.bottom - rPage.top);
 #else
-    m_maxX = (**(THPrint)m_printData.m_macPrintSettings).rPaper.right - (**(THPrint)m_printData.m_macPrintSettings).rPaper.left ;
-    m_maxY = (**(THPrint)m_printData.m_macPrintSettings).rPaper.bottom - (**(THPrint)m_printData.m_macPrintSettings).rPaper.top ;
+    m_maxX = (**(THPrint)m_printData.m_macPrintSettings).rPage.right - (**(THPrint)m_printData.m_macPrintSettings).rPage.left ;
+    m_maxY = (**(THPrint)m_printData.m_macPrintSettings).rPage.bottom - (**(THPrint)m_printData.m_macPrintSettings).rPage.top ;
 #endif
 }
 
@@ -165,6 +176,7 @@ wxPrinterDC::~wxPrinterDC(void)
 #if !TARGET_CARBON
     if ( m_ok )
     {
+        /*
         ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort  ) ;
         err = PrError() ;
         
@@ -182,6 +194,7 @@ wxPrinterDC::~wxPrinterDC(void)
             wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
             dialog.ShowModal();
         }
+        */
         ::UMAPrClose(NULL) ;
 //      ::SetPort( macPrintFormerPort ) ;
         ::SetPort( LMGetWMgrPort() ) ;
@@ -189,6 +202,7 @@ wxPrinterDC::~wxPrinterDC(void)
 #else
     if ( m_ok ) 
     {
+/*
   #if PM_USE_SESSION_APIS
         err = PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort);
   #else
@@ -200,8 +214,9 @@ wxPrinterDC::~wxPrinterDC(void)
             wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
             dialog.ShowModal();
          }
+         */
   #if TARGET_CARBON && PM_USE_SESSION_APIS
-        UMAPrClose(&m_macPrintSessionPort) ;
+        PMRelease(&m_macPrintSessionPort) ;
   #else
         UMAPrClose(NULL) ;
   #endif
@@ -211,11 +226,107 @@ wxPrinterDC::~wxPrinterDC(void)
 
 bool wxPrinterDC::StartDoc( const wxString& WXUNUSED(message) ) 
 {
+    OSStatus err = noErr ;
+    wxString message ;
+        
+#if !TARGET_CARBON
+    m_macPrintSessionPort = ::PrOpenDoc( (THPrint) m_printData.m_macPrintSettings , NULL , NULL ) ;
+    err = PrError() ;
+    if ( err )
+    {
+        message.Printf( wxT("Print Error %d"), err ) ;
+        wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ;
+        dialog.ShowModal();
+        UMAPrClose(NULL) ;
+        m_ok = FALSE;
+        return false ;
+    }
+    // sets current port
+    m_macPort = (GrafPtr ) m_macPrintSessionPort ;
+#else
+  #if PM_USE_SESSION_APIS
+    err = PMSessionBeginDocument((PMPrintSession)m_macPrintSessionPort,
+              (PMPrintSettings)m_printData.m_macPrintSettings, 
+              (PMPageFormat)m_printData.m_macPageFormat);
+    if ( err != noErr )
+  #else
+        m_macPrintSessionPort = kPMNoReference ;
+        err = PMBeginDocument(
+              m_printData.m_macPrintSettings, 
+              m_printData.m_macPageFormat, 
+              &m_macPrintSessionPort);
+    if ( err != noErr || m_macPrintSessionPort == kPMNoReference )
+  #endif
+    {
+        message.Printf( wxT("Print Error %d"), err ) ;
+        wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ;
+        dialog.ShowModal();
+  #if TARGET_CARBON && PM_USE_SESSION_APIS
+        PMRelease(&m_macPrintSessionPort) ;
+  #else
+        UMAPrClose(NULL) ;
+  #endif
+        m_ok = FALSE;
+        return m_ok;
+    }
+    // sets current port
+    ::GetPort( (GrafPtr *)&m_macPort ) ;
+#endif
+    m_ok = TRUE ;
+    m_minY = m_minX = 0 ;
+#if TARGET_CARBON
+    PMRect rPage;
+    
+    err = PMGetAdjustedPageRect((PMPageFormat)m_printData.m_macPageFormat, &rPage);
+    if ( err != noErr )
+    {
+        message.Printf( wxT("Print Error %d"), err ) ;
+        wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ;
+        dialog.ShowModal();
+  #if TARGET_CARBON && PM_USE_SESSION_APIS
+        PMRelease(&m_macPrintSessionPort) ;
+  #else
+        UMAPrClose(NULL) ;
+  #endif
+        m_ok = FALSE;
+        return m_ok;
+    }
+    m_maxX = rPage.right - rPage.left ;
+    m_maxY = rPage.bottom - rPage.top ;
+#else
+    m_maxX = (**(THPrint)m_printData.m_macPrintSettings).rPage.right - (**(THPrint)m_printData.m_macPrintSettings).rPage.left ;
+    m_maxY = (**(THPrint)m_printData.m_macPrintSettings).rPage.bottom - (**(THPrint)m_printData.m_macPrintSettings).rPage.top ;
+#endif
     return m_ok ;
 }
 
 void wxPrinterDC::EndDoc(void) 
 {
+    OSStatus err ;
+    wxString message ;
+#if !TARGET_CARBON
+    if ( m_ok )
+    {
+        ::UMAPrClose(NULL) ;
+//      ::SetPort( macPrintFormerPort ) ;
+        ::SetPort( LMGetWMgrPort() ) ;
+    }
+#else
+    if ( m_ok ) 
+    {
+  #if PM_USE_SESSION_APIS
+        err = PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort);
+  #else
+        err = PMEndDocument(m_macPrintSessionPort);
+  #endif
+         if ( err != noErr )
+         {
+            message.Printf( wxT("Print Error %d"), err ) ;
+            wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ;
+            dialog.ShowModal();
+         }
+    }
+#endif
 }
 
 void wxPrinterDC::StartPage(void) 
@@ -252,8 +363,8 @@ void wxPrinterDC::StartPage(void)
     err = PrError() ;
     if ( err != noErr )
     {
-        message.Printf( "Print Error %ld", err ) ;
-        wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+        message.Printf( wxT("Print Error %ld"), err ) ;
+        wxMessageDialog dialog( NULL , message , wxEmptyString , wxICON_HAND | wxOK) ;
         dialog.ShowModal();
            ::PrClosePage( (TPPrPort) m_macPrintSessionPort ) ;
         ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort ) ;
@@ -271,8 +382,8 @@ void wxPrinterDC::StartPage(void)
   #endif
     if ( err != noErr )
     {
-        message.Printf( "Print Error %ld", err ) ;
-        wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+        message.Printf( wxT("Print Error %ld"), err ) ;
+        wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ;
         dialog.ShowModal();
   #if PM_USE_SESSION_APIS
            PMSessionEndPage((PMPrintSession)m_macPrintSessionPort);
@@ -286,6 +397,14 @@ void wxPrinterDC::StartPage(void)
            ::SetPort( macPrintFormerPort ) ;
            m_ok = FALSE ;
     }
+    PMRect rPage;
+    
+    err = PMGetAdjustedPageRect((PMPageFormat)m_printData.m_macPageFormat, &rPage);
+    if ( !err )
+    {
+        m_macLocalOrigin.x = rPage.left ;
+        m_macLocalOrigin.y = rPage.top ;
+    }
 #endif
 }
 
@@ -298,12 +417,12 @@ void wxPrinterDC::EndPage(void)
     wxString message ;
 
 #if !TARGET_CARBON
-       PrClosePage(  (TPPrPort) m_macPort ) ;
+    PrClosePage(  (TPPrPort) m_macPort ) ;
     err = PrError() ;
     if ( err != noErr )
     {
-        message.Printf( "Print Error %ld", err ) ;
-        wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+        message.Printf( wxT("Print Error %ld") , err ) ;
+        wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ;
         dialog.ShowModal();
         ::PrCloseDoc( (TPPrPort) m_macPrintSessionPort  ) ;
         ::UMAPrClose(NULL) ;
@@ -318,8 +437,8 @@ void wxPrinterDC::EndPage(void)
   #endif
     if ( err != noErr )
     {
-        message.Printf( "Print Error %ld", err ) ;
-        wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+        message.Printf( wxT("Print Error %ld"), err ) ;
+        wxMessageDialog dialog( NULL , message , wxEmptyString, wxICON_HAND | wxOK) ;
         dialog.ShowModal();
   #if PM_USE_SESSION_APIS
         PMSessionEndDocument((PMPrintSession)m_macPrintSessionPort);