X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad81651f00edc6f489d9b6a0839d316a964fd521..92b0a2a13ccaaa23a97964ff35cdaf39dd44a104:/src/mac/printdlg.cpp

diff --git a/src/mac/printdlg.cpp b/src/mac/printdlg.cpp
index a1f8f6b196..adb620e76f 100644
--- a/src/mac/printdlg.cpp
+++ b/src/mac/printdlg.cpp
@@ -16,11 +16,25 @@
 #include "wx/object.h"
 #include "wx/printdlg.h"
 #include "wx/dcprint.h"
+#include "wx/msgdlg.h"
+#include "wx/mac/uma.h"
+#ifndef __DARWIN__
+    #include "Printing.h"
+#endif
+
+#if defined(TARGET_CARBON) && !defined(__DARWIN__)
+#  if PM_USE_SESSION_APIS
+#    include <PMCore.h>
+#  endif
+#  include <PMApplication.h>
+#endif
 
 // Use generic page setup dialog: use your own native one if one exists.
 
+#if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxPrintDialog, wxDialog)
 IMPLEMENT_CLASS(wxPageSetupDialog, wxDialog)
+#endif
 
 wxPrintDialog::wxPrintDialog()
 {
@@ -66,13 +80,13 @@ int wxPrintDialog::ShowModal()
 	int result = wxID_CANCEL ;
 	OSErr err ;
 	wxString message ;
-	::PrOpen() ;
-	err = PrError() ;
-	
-	if ( !err )
+
+#if !TARGET_CARBON	
+	err = ::UMAPrOpen(NULL) ;
+	if ( err == noErr )
 	{
 		m_printDialogData.ConvertToNative() ;
-		if  ( m_printDialogData.m_macPrintInfo && ::PrJobDialog( m_printDialogData.m_macPrintInfo ) )
+		if  ( ::PrJobDialog( (THPrint) m_printDialogData.GetPrintData().m_macPrintSettings ) )
 		{
 			m_printDialogData.ConvertFromNative() ;
 			result = wxID_OK ;
@@ -83,9 +97,98 @@ int wxPrintDialog::ShowModal()
 	{
 		message.Printf( "Print Error %d", err ) ;
 		wxMessageDialog dialog( NULL , message  , "", wxICON_HAND | wxOK) ;
+		dialog.ShowModal();
 	}
-	::PrClose() ;
-
+	::UMAPrClose(NULL) ;
+#else
+  #if PM_USE_SESSION_APIS
+    PMPrintSession macPrintSession = kPMNoReference;
+    Boolean        accepted;
+    
+    err = ::UMAPrOpen(&macPrintSession) ;
+    if ( err == noErr )
+    {
+        m_printDialogData.ConvertToNative() ;
+        
+        //  Set up a valid PageFormat object.
+        if (m_printDialogData.GetPrintData().m_macPageFormat == kPMNoPageFormat)
+        {
+            err = PMCreatePageFormat((PMPageFormat *)&m_printDialogData.GetPrintData().m_macPageFormat);
+            
+            //  Note that PMPageFormat is not session-specific, but calling
+            //  PMSessionDefaultPageFormat assigns values specific to the printer
+            //  associated with the current printing session.
+            if ((err == noErr) &&
+                (m_printDialogData.GetPrintData().m_macPageFormat != kPMNoPageFormat))
+            {
+                err = PMSessionDefaultPageFormat((PMPrintSession)macPrintSession,
+                                                 (PMPageFormat)m_printDialogData.GetPrintData().m_macPageFormat);
+            }
+        }
+        else
+        {
+            err = PMSessionValidatePageFormat((PMPrintSession)macPrintSession,
+                                              (PMPageFormat)m_printDialogData.GetPrintData().m_macPageFormat,
+                                              kPMDontWantBoolean);
+        }
+	
+        //  Set up a valid PrintSettings object.
+        if (m_printDialogData.GetPrintData().m_macPrintSettings == kPMNoPrintSettings)
+        {
+            err = PMCreatePrintSettings((PMPrintSettings *)&m_printDialogData.GetPrintData().m_macPrintSettings);
+            
+            //  Note that PMPrintSettings is not session-specific, but calling
+            //  PMSessionDefaultPrintSettings assigns values specific to the printer
+            //  associated with the current printing session.
+            if ((err == noErr) &&
+                (m_printDialogData.GetPrintData().m_macPrintSettings != kPMNoPrintSettings))
+            {
+                err = PMSessionDefaultPrintSettings((PMPrintSession)macPrintSession,
+                                                    (PMPrintSettings)m_printDialogData.GetPrintData().m_macPrintSettings);
+            }
+        }
+        else
+        {
+            err = PMSessionValidatePrintSettings((PMPrintSession)macPrintSession,
+                                                 (PMPrintSettings)m_printDialogData.GetPrintData().m_macPrintSettings,
+                                                 kPMDontWantBoolean);
+        }
+        //  Set a valid page range before displaying the Print dialog
+        if (err == noErr)
+        {
+            //    err = PMSetPageRange(m_printDialogData.GetPrintData().m_macPrintSettings,
+            //              minPage, maxPage);
+        }
+        
+        //  Display the Print dialog.
+        if (err == noErr)
+        {
+            err = PMSessionPrintDialog((PMPrintSession)macPrintSession,
+                                       (PMPrintSettings)m_printDialogData.GetPrintData().m_macPrintSettings,
+                                       (PMPageFormat)m_printDialogData.GetPrintData().m_macPageFormat,
+                                       &accepted);
+            if ((err == noErr) && !accepted)
+            {
+                err = kPMCancel; // user clicked Cancel button
+            }
+        }
+        if  ( err == noErr )
+        {
+            m_printDialogData.ConvertFromNative() ;
+            result = wxID_OK ;
+        }
+    }
+    if ((err != noErr) && (err != kPMCancel))
+    {
+        message.Printf( "Print Error %d", err ) ;
+        wxMessageDialog dialog( NULL , message  , "", wxICON_HAND | wxOK) ;
+        dialog.ShowModal();
+    }
+    ::UMAPrClose(&macPrintSession) ;
+  #else
+    #pragma warning "TODO: Printing for carbon without session apis"
+  #endif
+#endif
 	return result ;
 }
 
@@ -126,16 +229,16 @@ wxPageSetupDialog::~wxPageSetupDialog()
 
 int wxPageSetupDialog::ShowModal()
 {
-	int result = wxID_CANCEL ;
-	OSErr err ;
+	int      result = wxID_CANCEL ;
+	OSErr    err ;
 	wxString message ;
-	::PrOpen() ;
-	err = PrError() ;
-	
-	if ( !err )
+
+#if !TARGET_CARBON
+	err = ::UMAPrOpen(NULL) ;
+	if ( err == noErr )
 	{
 		m_pageSetupData.ConvertToNative() ;
-		if  ( m_pageSetupData.m_macPageSetupInfo && ::PrStlDialog( m_pageSetupData.m_macPageSetupInfo ) )
+		if  ( ::PrStlDialog(  (THPrint) m_pageSetupData.GetPrintData().m_macPrintSettings ) )
 		{
 			m_pageSetupData.ConvertFromNative() ;
 			result = wxID_OK ;
@@ -146,9 +249,72 @@ int wxPageSetupDialog::ShowModal()
 	{
 		message.Printf( "Print Error %d", err ) ;
 		wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+		dialog.ShowModal();
 	}
-	::PrClose() ;
-
+	::UMAPrClose(NULL) ;
+#else
+  #if PM_USE_SESSION_APIS
+    PMPrintSession macPrintSession = kPMNoReference;
+    Boolean        accepted;
+    
+    err = ::UMAPrOpen(&macPrintSession) ;
+    if ( err == noErr )
+    {
+        m_pageSetupData.ConvertToNative() ;
+        
+        //  Set up a valid PageFormat object.
+        if (m_pageSetupData.GetPrintData().m_macPageFormat == kPMNoPageFormat)
+        {
+            err = PMCreatePageFormat((PMPageFormat *)&m_pageSetupData.GetPrintData().m_macPageFormat);
+            
+            //  Note that PMPageFormat is not session-specific, but calling
+            //  PMSessionDefaultPageFormat assigns values specific to the printer
+            //  associated with the current printing session.
+            if ((err == noErr) &&
+                (m_pageSetupData.GetPrintData().m_macPageFormat != kPMNoPageFormat))
+            {
+                err = PMSessionDefaultPageFormat((PMPrintSession)macPrintSession,
+                                                 (PMPageFormat)m_pageSetupData.GetPrintData().m_macPageFormat);
+            }
+        }
+        else
+        {
+            err = PMSessionValidatePageFormat((PMPrintSession)macPrintSession,
+                                              (PMPageFormat)m_pageSetupData.GetPrintData().m_macPageFormat,
+                                              kPMDontWantBoolean);
+        }
+        
+        //  Display the Page Setup dialog.
+        if (err == noErr)
+        {
+            err = PMSessionPageSetupDialog((PMPrintSession)macPrintSession,
+                                           (PMPageFormat)m_pageSetupData.GetPrintData().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) {
+            //    err = FlattenAndSavePageFormat(m_pageSetupData.GetPrintData().m_macPageFormat);
+            m_pageSetupData.ConvertFromNative() ;
+            result = wxID_OK ;
+        }
+    }
+    if ((err != noErr) && (err != kPMCancel))
+    {
+        message.Printf( "Print Error %d", err ) ;
+        wxMessageDialog dialog( NULL , message , "", wxICON_HAND | wxOK) ;
+        dialog.ShowModal();
+    }
+    ::UMAPrClose(&macPrintSession) ;
+  #else
+    #pragma warning "TODO: Printing for carbon without session apis"
+  #endif
+#endif
 	return result ;
 }