From 5506bd72d524c013a0a6ddd25f1c8d87468397c4 Mon Sep 17 00:00:00 2001 From: Markus Stange Date: Thu, 1 Oct 2009 11:15:32 +1300 Subject: [PATCH] Bug 456646 - Replace Carbon printing dialog with Cocoa one. r=josh, r=bsmedberg, sr=jst --HG-- rename : toolkit/locales/en-US/chrome/global/gnomeprintdialog.properties => toolkit/locales/en-US/chrome/global/printdialog.properties extra : rebase_source : 80b46470b496313b6994366cb953abed5bb0849e --- browser/app/Makefile.in | 2 + config/autoconf.mk.in | 1 + configure.in | 28 +- .../en-US/chrome/printdialog.properties | 41 -- dom/locales/jar.mn | 1 - .../components/printingui/src/mac/Makefile.in | 8 +- .../src/mac/nsPrintingPromptService.h | 3 - .../src/mac/nsPrintingPromptServiceX.mm | 92 ++- .../printingui/src/win/nsPrintDialogUtil.cpp | 10 +- .../chrome/global/gnomeprintdialog.properties | 28 - .../chrome/global/printdialog.properties | 59 ++ toolkit/locales/jar.mn | 4 +- widget/public/Makefile.in | 8 + widget/src/cocoa/Makefile.in | 7 +- widget/src/cocoa/nsDeviceContextSpecX.h | 23 +- widget/src/cocoa/nsDeviceContextSpecX.mm | 31 +- widget/src/cocoa/nsPrintDialogX.h | 97 +++ widget/src/cocoa/nsPrintDialogX.mm | 615 ++++++++++++++++++ widget/src/cocoa/nsPrintOptionsX.h | 3 + widget/src/cocoa/nsPrintOptionsX.mm | 25 +- widget/src/cocoa/nsPrintSettingsX.h | 25 +- widget/src/cocoa/nsPrintSettingsX.mm | 110 +++- widget/src/cocoa/nsWidgetFactory.mm | 30 +- widget/src/gtk2/nsPrintDialogGTK.cpp | 10 +- 24 files changed, 1093 insertions(+), 168 deletions(-) delete mode 100644 dom/locales/en-US/chrome/printdialog.properties delete mode 100644 toolkit/locales/en-US/chrome/global/gnomeprintdialog.properties create mode 100644 toolkit/locales/en-US/chrome/global/printdialog.properties create mode 100644 widget/src/cocoa/nsPrintDialogX.h create mode 100644 widget/src/cocoa/nsPrintDialogX.mm diff --git a/browser/app/Makefile.in b/browser/app/Makefile.in index 55b274763d6..aba9b393771 100644 --- a/browser/app/Makefile.in +++ b/browser/app/Makefile.in @@ -343,8 +343,10 @@ else rm -f $(DIST)/$(APP_NAME).app/Contents/MacOS/$(PROGRAM) rsync -aL $(PROGRAM) $(DIST)/$(APP_NAME).app/Contents/MacOS endif +ifndef MOZ_COCOA_PRINTING mkdir -p $(DIST)/$(APP_NAME).app/Contents/Plug-Ins rsync -a --copy-unsafe-links $(LIBXUL_DIST)/package/PrintPDE.plugin $(DIST)/$(APP_NAME).app/Contents/Plug-Ins +endif -cp -L $(DIST)/bin/mangle $(DIST)/bin/shlibsign $(DIST)/$(APP_NAME).app/Contents/$(APPFILES) cp -RL $(DIST)/branding/firefox.icns $(DIST)/$(APP_NAME).app/Contents/Resources/firefox.icns cp -RL $(DIST)/branding/document.icns $(DIST)/$(APP_NAME).app/Contents/Resources/document.icns diff --git a/config/autoconf.mk.in b/config/autoconf.mk.in index a6fb01ad23c..4e1177aeebd 100644 --- a/config/autoconf.mk.in +++ b/config/autoconf.mk.in @@ -89,6 +89,7 @@ MOZ_X11 = @MOZ_X11@ MOZ_PANGO = @MOZ_PANGO@ MOZ_CORETEXT = @MOZ_CORETEXT@ +MOZ_COCOA_PRINTING = @MOZ_COCOA_PRINTING@ MOZ_JS_LIBS = @MOZ_JS_LIBS@ diff --git a/configure.in b/configure.in index df0fa3524ff..fe999225eef 100644 --- a/configure.in +++ b/configure.in @@ -3139,7 +3139,8 @@ case $target in esac dnl ======================================================== -dnl Check whether we can compile code for Core Text +dnl Check whether we can compile code for Core Text and +dnl Cocoa printing dnl (Mac OS X 10.5 or later) dnl ======================================================== case "$target" in @@ -3147,9 +3148,9 @@ case "$target" in AC_MSG_CHECKING([for Core Text]) AC_TRY_COMPILE([#include ], [CTLineRef lineRef;], - ac_cv_have_core_text="yes", - ac_cv_have_core_text="no") - AC_MSG_RESULT([$ac_cv_have_core_text]) + ac_cv_have_leopard="yes", + ac_cv_have_leopard="no") + AC_MSG_RESULT([$ac_cv_have_leopard]) MOZ_CORETEXT=1 @@ -3159,15 +3160,30 @@ case "$target" in MOZ_CORETEXT=1) if test -n "$MOZ_CORETEXT"; then - if test "$ac_cv_have_core_text" = "no"; then + if test "$ac_cv_have_leopard" = "no"; then AC_MSG_ERROR([--enable-coretext requires MacOS SDK 10.5 or newer]) fi AC_DEFINE(MOZ_CORETEXT) fi + + MOZ_COCOA_PRINTING=1 + + MOZ_ARG_DISABLE_BOOL(cocoa-printing, +[ --disable-cocoa-printing + Use a Carbon print dialog instead of a Cocoa one], + MOZ_COCOA_PRINTING=, + MOZ_COCOA_PRINTING=1) + + if test -n "$MOZ_COCOA_PRINTING"; then + if test "$ac_cv_have_leopard" = "no"; then + AC_MSG_ERROR([--enable-cocoa-printing requires MacOS SDK 10.5 or newer]) + fi + AC_DEFINE(MOZ_COCOA_PRINTING) + fi ;; esac -AC_SUBST(MOZ_CORETEXT) +AC_SUBST(MOZ_COCOA_PRINTING) XLDFLAGS="$X_LIBS" XLIBS="$X_EXTRA_LIBS" diff --git a/dom/locales/en-US/chrome/printdialog.properties b/dom/locales/en-US/chrome/printdialog.properties deleted file mode 100644 index 5d612d18e70..00000000000 --- a/dom/locales/en-US/chrome/printdialog.properties +++ /dev/null @@ -1,41 +0,0 @@ -# ***** BEGIN LICENSE BLOCK ***** -# Version: MPL 1.1/GPL 2.0/LGPL 2.1 -# -# The contents of this file are subject to the Mozilla Public License Version -# 1.1 (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# http://www.mozilla.org/MPL/ -# -# Software distributed under the License is distributed on an "AS IS" basis, -# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -# for the specific language governing rights and limitations under the -# License. -# -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# -# Alternatively, the contents of this file may be used under the terms of -# either the GNU General Public License Version 2 or later (the "GPL"), or -# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -# in which case the provisions of the GPL or the LGPL are applicable instead -# of those above. If you wish to allow use of your version of this file only -# under the terms of either the GPL or the LGPL, and not to allow others to -# use your version of this file under the terms of the MPL, indicate your -# decision by deleting the provisions above and replace them with the notice -# and other provisions required by the GPL or the LGPL. If you do not delete -# the provisions above, a recipient may use your version of this file under -# the terms of any one of the MPL, the GPL or the LGPL. -# -# ***** END LICENSE BLOCK ***** - -PrintFrames=Print Frames -Aslaid=As &laid out on the screen -selectedframe=The selected &frame -Eachframe=&Each frame separately -options=Options diff --git a/dom/locales/jar.mn b/dom/locales/jar.mn index ef91666047c..98db15d556e 100644 --- a/dom/locales/jar.mn +++ b/dom/locales/jar.mn @@ -14,7 +14,6 @@ locale/@AB_CD@/global/global-strres.properties (%chrome/global-strres.properties) locale/@AB_CD@/global/plugins.properties (%chrome/plugins.properties) locale/@AB_CD@/global/nsWebBrowserPersist.properties (%chrome/nsWebBrowserPersist.properties) - locale/@AB_CD@/global/printdialog.properties (%chrome/printdialog.properties) locale/@AB_CD@/global/xslt/xslt.properties (%chrome/xslt/xslt.properties) locale/@AB_CD@/global/dom/dom.properties (%chrome/dom/dom.properties) #ifdef MOZ_SVG diff --git a/embedding/components/printingui/src/mac/Makefile.in b/embedding/components/printingui/src/mac/Makefile.in index b08abb3134f..fbb84536f33 100644 --- a/embedding/components/printingui/src/mac/Makefile.in +++ b/embedding/components/printingui/src/mac/Makefile.in @@ -47,7 +47,9 @@ LIBRARY_NAME = printingui_s LIBXUL_LIBRARY = 1 +ifndef MOZ_COCOA_PRINTING DIRS = printpde +endif CMMSRCS = nsPrintingPromptServiceX.mm @@ -56,9 +58,9 @@ CPPSRCS = \ nsPrintProgress.cpp \ $(NULL) -LOCAL_INCLUDES = \ - -I$(srcdir)/printpde/public \ - $(NULL) +ifndef MOZ_COCOA_PRINTING +LOCAL_INCLUDES = -I$(srcdir)/printpde/public +endif # we don't want the shared lib, but we want to force the creation of a # static lib. diff --git a/embedding/components/printingui/src/mac/nsPrintingPromptService.h b/embedding/components/printingui/src/mac/nsPrintingPromptService.h index 880144ebc1c..8f9fb895ade 100644 --- a/embedding/components/printingui/src/mac/nsPrintingPromptService.h +++ b/embedding/components/printingui/src/mac/nsPrintingPromptService.h @@ -51,7 +51,6 @@ // Printing Progress Includes #include "nsPrintProgress.h" -#include "nsPrintProgressParams.h" #include "nsIWebProgressListener.h" @@ -72,9 +71,7 @@ public: NS_DECL_ISUPPORTS private: - nsCOMPtr mWatcher; nsCOMPtr mPrintProgress; - nsCOMPtr mWebProgressListener; }; #endif diff --git a/embedding/components/printingui/src/mac/nsPrintingPromptServiceX.mm b/embedding/components/printingui/src/mac/nsPrintingPromptServiceX.mm index 03d130bd7aa..f3aedf31fb3 100644 --- a/embedding/components/printingui/src/mac/nsPrintingPromptServiceX.mm +++ b/embedding/components/printingui/src/mac/nsPrintingPromptServiceX.mm @@ -44,6 +44,14 @@ #include "nsIPrintingPromptService.h" #include "nsIFactory.h" + +#ifdef MOZ_COCOA_PRINTING + +#include "nsServiceManagerUtils.h" +#include "nsIPrintDialogService.h" + +#else + #include "nsIDOMWindow.h" #include "nsReadableUtils.h" #include "nsIEmbeddingSiteWindow.h" @@ -192,6 +200,7 @@ SetDictionaryBooleanvalue(CFMutableDictionaryRef aDictionary, CFStringRef aKey, NS_OBJC_END_TRY_ABORT_BLOCK; } +#endif //***************************************************************************** // nsPrintingPromptService @@ -199,8 +208,7 @@ SetDictionaryBooleanvalue(CFMutableDictionaryRef aDictionary, CFStringRef aKey, NS_IMPL_ISUPPORTS2(nsPrintingPromptService, nsIPrintingPromptService, nsIWebProgressListener) -nsPrintingPromptService::nsPrintingPromptService() : - mWatcher(do_GetService(NS_WINDOWWATCHER_CONTRACTID)) +nsPrintingPromptService::nsPrintingPromptService() { } @@ -217,6 +225,39 @@ nsresult nsPrintingPromptService::Init() // nsPrintingPromptService::nsIPrintingPromptService //***************************************************************************** +#ifdef MOZ_COCOA_PRINTING + +NS_IMETHODIMP +nsPrintingPromptService::ShowPrintDialog(nsIDOMWindow *parent, nsIWebBrowserPrint *webBrowserPrint, nsIPrintSettings *printSettings) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + + nsCOMPtr dlgPrint(do_GetService( + NS_PRINTDIALOGSERVICE_CONTRACTID)); + if (dlgPrint) + return dlgPrint->Show(parent, printSettings); + + return NS_ERROR_FAILURE; + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} + +NS_IMETHODIMP +nsPrintingPromptService::ShowPageSetup(nsIDOMWindow *parent, nsIPrintSettings *printSettings, nsIObserver *aObs) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + nsCOMPtr dlgPrint(do_GetService( + NS_PRINTDIALOGSERVICE_CONTRACTID)); + if (dlgPrint) + return dlgPrint->ShowPageSetup(parent, printSettings); + + return NS_ERROR_FAILURE; + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} + +#else + NS_IMETHODIMP nsPrintingPromptService::ShowPrintDialog(nsIDOMWindow *parent, nsIWebBrowserPrint *webBrowserPrint, nsIPrintSettings *printSettings) { @@ -443,19 +484,6 @@ nsPrintingPromptService::ShowPrintDialog(nsIDOMWindow *parent, nsIWebBrowserPrin NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } -NS_IMETHODIMP -nsPrintingPromptService::ShowProgress(nsIDOMWindow* parent, - nsIWebBrowserPrint* webBrowserPrint, // ok to be null - nsIPrintSettings* printSettings, // ok to be null - nsIObserver* openDialogObserver, // ok to be null - PRBool isForPrinting, - nsIWebProgressListener** webProgressListener, - nsIPrintProgressParams** printProgressParams, - PRBool* notifyOnOpen) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - NS_IMETHODIMP nsPrintingPromptService::ShowPageSetup(nsIDOMWindow *parent, nsIPrintSettings *printSettings, nsIObserver *aObs) { @@ -502,6 +530,21 @@ nsPrintingPromptService::ShowPageSetup(nsIDOMWindow *parent, nsIPrintSettings *p NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } +#endif + +NS_IMETHODIMP +nsPrintingPromptService::ShowProgress(nsIDOMWindow* parent, + nsIWebBrowserPrint* webBrowserPrint, // ok to be null + nsIPrintSettings* printSettings, // ok to be null + nsIObserver* openDialogObserver, // ok to be null + PRBool isForPrinting, + nsIWebProgressListener** webProgressListener, + nsIPrintProgressParams** printProgressParams, + PRBool* notifyOnOpen) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + NS_IMETHODIMP nsPrintingPromptService::ShowPrinterProperties(nsIDOMWindow *parent, const PRUnichar *printerName, nsIPrintSettings *printSettings) { @@ -516,13 +559,6 @@ nsPrintingPromptService::ShowPrinterProperties(nsIDOMWindow *parent, const PRUni NS_IMETHODIMP nsPrintingPromptService::OnStateChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus) { - if ((aStateFlags & STATE_STOP) && mWebProgressListener) { - mWebProgressListener->OnStateChange(aWebProgress, aRequest, aStateFlags, aStatus); - if (mPrintProgress) - mPrintProgress->CloseProgressDialog(PR_TRUE); - mPrintProgress = nsnull; - mWebProgressListener = nsnull; - } return NS_OK; } @@ -530,9 +566,6 @@ nsPrintingPromptService::OnStateChange(nsIWebProgress *aWebProgress, nsIRequest NS_IMETHODIMP nsPrintingPromptService::OnProgressChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRInt32 aCurSelfProgress, PRInt32 aMaxSelfProgress, PRInt32 aCurTotalProgress, PRInt32 aMaxTotalProgress) { - if (mWebProgressListener) { - return mWebProgressListener->OnProgressChange(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress); - } return NS_OK; } @@ -540,9 +573,6 @@ nsPrintingPromptService::OnProgressChange(nsIWebProgress *aWebProgress, nsIReque NS_IMETHODIMP nsPrintingPromptService::OnLocationChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsIURI *location) { - if (mWebProgressListener) { - return mWebProgressListener->OnLocationChange(aWebProgress, aRequest, location); - } return NS_OK; } @@ -550,9 +580,6 @@ nsPrintingPromptService::OnLocationChange(nsIWebProgress *aWebProgress, nsIReque NS_IMETHODIMP nsPrintingPromptService::OnStatusChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsresult aStatus, const PRUnichar *aMessage) { - if (mWebProgressListener) { - return mWebProgressListener->OnStatusChange(aWebProgress, aRequest, aStatus, aMessage); - } return NS_OK; } @@ -560,8 +587,5 @@ nsPrintingPromptService::OnStatusChange(nsIWebProgress *aWebProgress, nsIRequest NS_IMETHODIMP nsPrintingPromptService::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 state) { - if (mWebProgressListener) { - return mWebProgressListener->OnSecurityChange(aWebProgress, aRequest, state); - } return NS_OK; } diff --git a/embedding/components/printingui/src/win/nsPrintDialogUtil.cpp b/embedding/components/printingui/src/win/nsPrintDialogUtil.cpp index ad35304beaf..40224ccfe1c 100644 --- a/embedding/components/printingui/src/win/nsPrintDialogUtil.cpp +++ b/embedding/components/printingui/src/win/nsPrintDialogUtil.cpp @@ -463,10 +463,10 @@ typedef struct { // These are the control ids used in the dialog and // defined by MS-Windows in commdlg.h static PropKeyInfo gAllPropKeys[] = { - {"PrintFrames", grp3}, - {"Aslaid", rad4}, - {"selectedframe", rad5}, - {"Eachframe", rad6}, + {"printFramesTitleWindows", grp3}, + {"asLaidOutWindows", rad4}, + {"selectedFrameWindows", rad5}, + {"separateFramesWindows", rad6}, {NULL, NULL}}; //-------------------------------------------------------- @@ -1280,7 +1280,7 @@ ShowNativePrintDialogEx(HWND aHWnd, // lLcalize the Property Sheet (Tab) title nsCAutoString title; nsString optionsStr; - if (NS_SUCCEEDED(GetLocalizedString(strBundle, "options", optionsStr))) { + if (NS_SUCCEEDED(GetLocalizedString(strBundle, "optionsTitleWindows", optionsStr))) { // Failure here just means a blank string NS_CopyUnicodeToNative(optionsStr, title); } diff --git a/toolkit/locales/en-US/chrome/global/gnomeprintdialog.properties b/toolkit/locales/en-US/chrome/global/gnomeprintdialog.properties deleted file mode 100644 index 96a8c55e290..00000000000 --- a/toolkit/locales/en-US/chrome/global/gnomeprintdialog.properties +++ /dev/null @@ -1,28 +0,0 @@ -printTitle=Print -optionsTabLabel=Options -printFramesTitle=Print Frames - -# TRANSLATOR NOTE: For radio button labels and check button labels, an underscore _ -# before a character will turn that character into an accesskey. -# e.g. "_As laid out" will make A the accesskey. - -asLaidOut=_As Laid Out on the Screen -selectedFrame=The _Selected Frame -separateFrames=Each Frame on Separate _Pages -shrinkToFit=Ignore Scaling and S_hrink To Fit Page Width -selectionOnly=Print Selection _Only -printBGOptions=Print Backgrounds -printBGColors=Print Background _Colors -printBGImages=Print Background I_mages -headerFooter=Header and Footer -left=Left -center=Center -right=Right -headerFooterBlank=--blank-- -headerFooterTitle=Title -headerFooterURL=URL -headerFooterDate=Date/Time -headerFooterPage=Page # -headerFooterPageTotal=Page # of # -headerFooterCustom=Custom... -customHeaderFooterPrompt=Please enter your custom header/footer text diff --git a/toolkit/locales/en-US/chrome/global/printdialog.properties b/toolkit/locales/en-US/chrome/global/printdialog.properties new file mode 100644 index 00000000000..32ea9fdae25 --- /dev/null +++ b/toolkit/locales/en-US/chrome/global/printdialog.properties @@ -0,0 +1,59 @@ +# These strings are used in the native GTK, Mac and Windows print dialogs. + +# GTK titles: +printTitleGTK=Print +optionsTabLabelGTK=Options +printFramesTitleGTK=Print Frames + +# Mac titles: +optionsTitleMac=Options: +appearanceTitleMac=Appearance: +framesTitleMac=Frames: +pageHeadersTitleMac=Page Headers: +pageFootersTitleMac=Page Footers: + +# Windows titles: +optionsTitleWindows=Options +printFramesTitleWindows=Print Frames + +# TRANSLATOR NOTE: For radio button labels and check button labels, an underscore _ +# before a character will turn that character into an accesskey in the GTK dialog. +# e.g. "_As laid out" will make A the accesskey. +# In the Windows labels, use an ampersand (&). +# On Mac, underscores will be stripped. + +asLaidOut=_As Laid Out on the Screen +asLaidOutWindows=As &laid out on the screen +selectedFrame=The _Selected Frame +selectedFrameWindows=The selected &frame +separateFrames=Each Frame on Separate _Pages +separateFramesWindows=&Each frame separately +shrinkToFit=Ignore Scaling and S_hrink To Fit Page Width +selectionOnly=Print Selection _Only +printBGOptions=Print Backgrounds +printBGColors=Print Background _Colors +printBGImages=Print Background I_mages +headerFooter=Header and Footer +left=Left +center=Center +right=Right +headerFooterBlank=--blank-- +headerFooterTitle=Title +headerFooterURL=URL +headerFooterDate=Date/Time +headerFooterPage=Page # +headerFooterPageTotal=Page # of # +headerFooterCustom=Custom... +customHeaderFooterPrompt=Please enter your custom header/footer text + +# These are for the summary view in the Mac dialog: +summaryFramesTitle=Print Frames +summarySelectionOnlyTitle=Print Selection +summaryShrinkToFitTitle=Shrink To Fit +summaryPrintBGColorsTitle=Print BG Colors +summaryPrintBGImagesTitle=Print BG Images +summaryHeaderTitle=Page Headers +summaryFooterTitle=Page Footers +summaryNAValue=N/A +summaryOnValue=On +summaryOffValue=Off diff --git a/toolkit/locales/jar.mn b/toolkit/locales/jar.mn index 5914ba6d9d6..6859375bda8 100644 --- a/toolkit/locales/jar.mn +++ b/toolkit/locales/jar.mn @@ -40,12 +40,12 @@ locale/@AB_CD@/global/mozilla.dtd (%chrome/global/mozilla.dtd) locale/@AB_CD@/global/notification.dtd (%chrome/global/notification.dtd) locale/@AB_CD@/global/preferences.dtd (%chrome/global/preferences.dtd) -+ locale/@AB_CD@/global/printdialog.dtd (%chrome/global/printdialog.dtd) + locale/@AB_CD@/global/printdialog.dtd (%chrome/global/printdialog.dtd) + locale/@AB_CD@/global/printjoboptions.dtd (%chrome/global/printjoboptions.dtd) + locale/@AB_CD@/global/printPageSetup.dtd (%chrome/global/printPageSetup.dtd) + locale/@AB_CD@/global/printPreview.dtd (%chrome/global/printPreview.dtd) + locale/@AB_CD@/global/printPreviewProgress.dtd (%chrome/global/printPreviewProgress.dtd) - locale/@AB_CD@/global/gnomeprintdialog.properties (%chrome/global/gnomeprintdialog.properties) ++ locale/@AB_CD@/global/printdialog.properties (%chrome/global/printdialog.properties) + locale/@AB_CD@/global/printProgress.dtd (%chrome/global/printProgress.dtd) + locale/@AB_CD@/global/regionNames.properties (%chrome/global/regionNames.properties) + locale/@AB_CD@/global/dialog.properties (%chrome/global/dialog.properties) diff --git a/widget/public/Makefile.in b/widget/public/Makefile.in index 8e3c8f4b77a..f2a03c91c1c 100644 --- a/widget/public/Makefile.in +++ b/widget/public/Makefile.in @@ -64,6 +64,12 @@ ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa) EXPORTS += nsINativeMenuService.h endif +ifdef MOZ_COCOA_PRINTING +EXPORTS += \ + nsIPrintDialogService.h \ + $(NULL) +endif + ifeq ($(MOZ_WIDGET_TOOLKIT),os2) EXPORTS += nsIDragSessionOS2.h endif @@ -111,9 +117,11 @@ XPIDLSRCS += nsIPrintSettingsWin.idl endif ifeq ($(MOZ_WIDGET_TOOLKIT),cocoa) +ifndef MOZ_COCOA_PRINTING XPIDLSRCS += nsIPrintSettingsX.idl \ nsIPrintSessionX.idl endif +endif ifeq ($(MOZ_WIDGET_TOOLKIT),os2) XPIDLSRCS += nsIRwsService.idl diff --git a/widget/src/cocoa/Makefile.in b/widget/src/cocoa/Makefile.in index d3ed2842dae..a8be8fbca4d 100644 --- a/widget/src/cocoa/Makefile.in +++ b/widget/src/cocoa/Makefile.in @@ -85,11 +85,16 @@ CMMSRCS = \ nsDeviceContextSpecX.mm \ nsPrintOptionsX.mm \ nsPrintSettingsX.mm \ - nsPrintSessionX.mm \ nsIdleServiceX.mm \ nsAccelerometerX.mm \ $(NULL) +ifdef MOZ_COCOA_PRINTING +CMMSRCS += nsPrintDialogX.mm +else +CMMSRCS += nsPrintSessionX.mm +endif + XPIDLSRCS += \ nsPIWidgetCocoa.idl \ $(NULL) diff --git a/widget/src/cocoa/nsDeviceContextSpecX.h b/widget/src/cocoa/nsDeviceContextSpecX.h index fc9f4123f62..e986e1de1bd 100644 --- a/widget/src/cocoa/nsDeviceContextSpecX.h +++ b/widget/src/cocoa/nsDeviceContextSpecX.h @@ -41,14 +41,19 @@ #include "nsIDeviceContextSpec.h" -#include +#include +#ifdef MOZ_COCOA_PRINTING +#include +#endif class nsDeviceContextSpecX : public nsIDeviceContextSpec { public: + NS_DECL_ISUPPORTS + nsDeviceContextSpecX(); - NS_DECL_ISUPPORTS + NS_IMETHOD Init(nsIWidget *aWidget, nsIPrintSettings* aPS, PRBool aIsPrintPreview); NS_IMETHOD GetSurfaceForPrinter(gfxASurface **surface); NS_IMETHOD BeginDocument(PRUnichar* aTitle, PRUnichar* aPrintToFileName, @@ -58,24 +63,18 @@ public: NS_IMETHOD BeginPage(); NS_IMETHOD EndPage(); - /** - * Initialize the nsDeviceContextSpecX for use. This will allocate a printrecord for use - * @param aWidget Unused - * @param aPS Settings for this print job - * @param aIsPrintPreview TRUE if doing print preview, FALSE if normal printing. - * @return error status - */ - NS_IMETHOD Init(nsIWidget *aWidget, nsIPrintSettings* aPS, PRBool aIsPrintPreview); - void GetPaperRect(double* aTop, double* aLeft, double* aBottom, double* aRight); protected: - virtual ~nsDeviceContextSpecX(); + virtual ~nsDeviceContextSpecX(); protected: PMPrintSession mPrintSession; // printing context. PMPageFormat mPageFormat; // page format. PMPrintSettings mPrintSettings; // print settings. +#ifdef MOZ_COCOA_PRINTING + NSPrintInfo* mPrintInfo; // Cocoa print info. +#endif }; #endif //nsDeviceContextSpecX_h_ diff --git a/widget/src/cocoa/nsDeviceContextSpecX.mm b/widget/src/cocoa/nsDeviceContextSpecX.mm index 8c374126921..d5a9b011aa5 100644 --- a/widget/src/cocoa/nsDeviceContextSpecX.mm +++ b/widget/src/cocoa/nsDeviceContextSpecX.mm @@ -48,15 +48,23 @@ #include "nsIServiceManager.h" #include "nsIPrintOptions.h" -#include "nsIPrintSettingsX.h" #include "gfxQuartzSurface.h" #include "gfxImageSurface.h" +#ifdef MOZ_COCOA_PRINTING +#include "nsPrintSettingsX.h" +#else +#include "nsIPrintSettingsX.h" +#endif + nsDeviceContextSpecX::nsDeviceContextSpecX() : mPrintSession(NULL) , mPageFormat(kPMNoPageFormat) , mPrintSettings(kPMNoPrintSettings) +#ifdef MOZ_COCOA_PRINTING +, mPrintInfo(nil) +#endif { } @@ -78,6 +86,17 @@ NS_IMETHODIMP nsDeviceContextSpecX::Init(nsIWidget *aWidget, { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; +#ifdef MOZ_COCOA_PRINTING + nsCOMPtr settings(do_QueryInterface(aPS)); + if (!settings) + return NS_ERROR_NO_INTERFACE; + + mPrintInfo = settings->GetCocoaPrintInfo(); + mPrintSession = static_cast([mPrintInfo PMPrintSession]); + ::PMRetain(mPrintSession); + mPageFormat = static_cast([mPrintInfo PMPageFormat]); + mPrintSettings = static_cast([mPrintInfo PMPrintSettings]); +#else nsresult rv; nsCOMPtr printSettingsX(do_QueryInterface(aPS)); @@ -86,7 +105,7 @@ NS_IMETHODIMP nsDeviceContextSpecX::Init(nsIWidget *aWidget, rv = printSettingsX->GetNativePrintSession(&mPrintSession); if (NS_FAILED(rv)) - return rv; + return rv; ::PMRetain(mPrintSession); rv = printSettingsX->GetPMPageFormat(&mPageFormat); @@ -96,6 +115,7 @@ NS_IMETHODIMP nsDeviceContextSpecX::Init(nsIWidget *aWidget, rv = printSettingsX->GetPMPrintSettings(&mPrintSettings); if (NS_FAILED(rv)) return rv; +#endif return NS_OK; @@ -142,13 +162,6 @@ NS_IMETHODIMP nsDeviceContextSpecX::EndDocument() NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } -/* -NS_IMETHODIMP nsDeviceContextSpecX::AbortDocument() -{ - return EndDocument(); -} -*/ - NS_IMETHODIMP nsDeviceContextSpecX::BeginPage() { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; diff --git a/widget/src/cocoa/nsPrintDialogX.h b/widget/src/cocoa/nsPrintDialogX.h new file mode 100644 index 00000000000..ef4b091e65e --- /dev/null +++ b/widget/src/cocoa/nsPrintDialogX.h @@ -0,0 +1,97 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is the Mozilla OS X print dialog interface. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation + * Portions created by the Initial Developer are Copyright (C) 2007 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Markus Stange + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef nsPrintDialogX_h__ +#define nsPrintDialogX_h__ + +#include "nsIPrintDialogService.h" +#include "nsCOMPtr.h" + +#import + +class nsIPrintSettings; +class nsIStringBundle; + +class nsPrintDialogServiceX : public nsIPrintDialogService +{ +public: + nsPrintDialogServiceX(); + virtual ~nsPrintDialogServiceX(); + + NS_DECL_ISUPPORTS + + NS_IMETHODIMP Init(); + NS_IMETHODIMP Show(nsIDOMWindow *aParent, nsIPrintSettings *aSettings); + NS_IMETHODIMP ShowPageSetup(nsIDOMWindow *aParent, + nsIPrintSettings *aSettings); +}; + +@interface PrintPanelAccessoryView : NSView +{ + nsIPrintSettings* mSettings; + nsIStringBundle* mPrintBundle; + NSButton* mPrintSelectionOnlyCheckbox; + NSButton* mShrinkToFitCheckbox; + NSButton* mPrintBGColorsCheckbox; + NSButton* mPrintBGImagesCheckbox; + NSButtonCell* mAsLaidOutRadio; + NSButtonCell* mSelectedFrameRadio; + NSButtonCell* mSeparateFramesRadio; + NSPopUpButton* mHeaderLeftList; + NSPopUpButton* mHeaderCenterList; + NSPopUpButton* mHeaderRightList; + NSPopUpButton* mFooterLeftList; + NSPopUpButton* mFooterCenterList; + NSPopUpButton* mFooterRightList; +} + +- (id)initWithSettings:(nsIPrintSettings*)aSettings; + +- (void)exportSettings; + +@end + +@interface PrintPanelAccessoryController : NSViewController + +- (id)initWithSettings:(nsIPrintSettings*)aSettings; + +- (void)exportSettings; + +@end + +#endif diff --git a/widget/src/cocoa/nsPrintDialogX.mm b/widget/src/cocoa/nsPrintDialogX.mm new file mode 100644 index 00000000000..11b3bde7208 --- /dev/null +++ b/widget/src/cocoa/nsPrintDialogX.mm @@ -0,0 +1,615 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is the Mozilla OS X print dialog interface. + * + * The Initial Developer of the Original Code is + * Mozilla Corporation. + * Portions created by the Initial Developer are Copyright (C) 2007 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Markus Stange + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsPrintDialogX.h" +#include "nsIPrintSettings.h" +#include "nsPrintSettingsX.h" +#include "nsCOMPtr.h" +#include "nsServiceManagerUtils.h" +#include "nsIWebProgressListener.h" +#include "nsIStringBundle.h" +#include "nsCocoaUtils.h" + +#import +#include "nsObjCExceptions.h" + +NS_IMPL_ISUPPORTS1(nsPrintDialogServiceX, nsIPrintDialogService) + +nsPrintDialogServiceX::nsPrintDialogServiceX() +{ +} + +nsPrintDialogServiceX::~nsPrintDialogServiceX() +{ +} + +NS_IMETHODIMP +nsPrintDialogServiceX::Init() +{ + return NS_OK; +} + +NS_IMETHODIMP +nsPrintDialogServiceX::Show(nsIDOMWindow *aParent, nsIPrintSettings *aSettings) +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + + NS_PRECONDITION(aSettings, "aSettings must not be null"); + + nsCOMPtr settingsX(do_QueryInterface(aSettings)); + if (!settingsX) + return NS_ERROR_FAILURE; + + NSPrintInfo* printInfo = settingsX->GetCocoaPrintInfo(); + + NSPrintPanel* panel = [NSPrintPanel printPanel]; + PrintPanelAccessoryController* viewController = + [[PrintPanelAccessoryController alloc] initWithSettings:aSettings]; + [panel addAccessoryController:viewController]; + [viewController release]; + + // Show the dialog. + nsCocoaUtils::PrepareForNativeAppModalDialog(); + int button = [panel runModalWithPrintInfo:printInfo]; + nsCocoaUtils::CleanUpAfterNativeAppModalDialog(); + + if (button != NSOKButton) + return NS_ERROR_ABORT; + + // Export settings. + [viewController exportSettings]; + + PRInt16 pageRange; + aSettings->GetPrintRange(&pageRange); + if (pageRange != nsIPrintSettings::kRangeSelection) { + PMPrintSettings nativePrintSettings = (PMPrintSettings)[printInfo PMPrintSettings]; + UInt32 firstPage, lastPage; + OSStatus status = ::PMGetFirstPage(nativePrintSettings, &firstPage); + if (status == noErr) { + status = ::PMGetLastPage(nativePrintSettings, &lastPage); + if (status == noErr && lastPage != LONG_MAX) { + aSettings->SetPrintRange(nsIPrintSettings::kRangeSpecifiedPageRange); + aSettings->SetStartPageRange(firstPage); + aSettings->SetEndPageRange(lastPage); + } + } + } + + return NS_OK; + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} + +NS_IMETHODIMP +nsPrintDialogServiceX::ShowPageSetup(nsIDOMWindow *aParent, + nsIPrintSettings *aNSSettings) +{ + NS_PRECONDITION(aParent, "aParent must not be null"); + NS_PRECONDITION(aNSSettings, "aSettings must not be null"); + NS_ENSURE_TRUE(aNSSettings, NS_ERROR_FAILURE); + + nsCOMPtr settingsX(do_QueryInterface(aNSSettings)); + if (!settingsX) + return NS_ERROR_FAILURE; + + NSPrintInfo* printInfo = settingsX->GetCocoaPrintInfo(); + NSPageLayout *pageLayout = [NSPageLayout pageLayout]; + nsCocoaUtils::PrepareForNativeAppModalDialog(); + int button = [pageLayout runModalWithPrintInfo:printInfo]; + nsCocoaUtils::CleanUpAfterNativeAppModalDialog(); + + return button == NSOKButton ? NS_OK : NS_ERROR_ABORT; +} + +// Accessory view + +@interface PrintPanelAccessoryView (Private) + +- (NSString*)localizedString:(const char*)aKey; + +- (PRInt16)chosenFrameSetting; + +- (const char*)headerFooterStringForList:(NSPopUpButton*)aList; + +- (void)exportHeaderFooterSettings; + +- (void)initBundle; + +- (NSTextField*)label:(const char*)aLabel + withFrame:(NSRect)aRect + alignment:(NSTextAlignment)aAlignment; + +- (void)addLabel:(const char*)aLabel + withFrame:(NSRect)aRect + alignment:(NSTextAlignment)aAlignment; + +- (void)addLabel:(const char*)aLabel withFrame:(NSRect)aRect; + +- (void)addCenteredLabel:(const char*)aLabel withFrame:(NSRect)aRect; + +- (NSButton*)checkboxWithLabel:(const char*)aLabel andFrame:(NSRect)aRect; + +- (NSPopUpButton*)headerFooterItemListWithFrame:(NSRect)aRect + selectedItem:(const PRUnichar*)aCurrentString; + +- (void)addOptionsSection; + +- (void)addAppearanceSection; + +- (void)addFramesSection; + +- (void)addHeaderFooterSection; + +- (NSString*)summaryValueForCheckbox:(NSButton*)aCheckbox; + +- (NSString*)framesSummaryValue; + +- (NSString*)headerSummaryValue; + +- (NSString*)footerSummaryValue; + +@end + +static const char sHeaderFooterTags[][4] = {"", "&T", "&U", "&D", "&P", "&PT"}; + +@implementation PrintPanelAccessoryView + +// Public methods + +- (id)initWithSettings:(nsIPrintSettings*)aSettings +{ + [super initWithFrame:NSMakeRect(0, 0, 540, 270)]; + + mSettings = aSettings; + [self initBundle]; + [self addOptionsSection]; + [self addAppearanceSection]; + [self addFramesSection]; + [self addHeaderFooterSection]; + + return self; +} + +- (void)exportSettings +{ + mSettings->SetPrintRange([mPrintSelectionOnlyCheckbox state] == NSOnState ? + (PRInt16)nsIPrintSettings::kRangeSelection : + (PRInt16)nsIPrintSettings::kRangeAllPages); + mSettings->SetShrinkToFit([mShrinkToFitCheckbox state] == NSOnState); + mSettings->SetPrintBGColors([mPrintBGColorsCheckbox state] == NSOnState); + mSettings->SetPrintBGImages([mPrintBGImagesCheckbox state] == NSOnState); + mSettings->SetPrintFrameType([self chosenFrameSetting]); + + [self exportHeaderFooterSettings]; +} + +- (void)dealloc +{ + NS_IF_RELEASE(mPrintBundle); + [super dealloc]; +} + +// Localization + +- (void)initBundle +{ + nsCOMPtr bundleSvc = do_GetService(NS_STRINGBUNDLE_CONTRACTID); + bundleSvc->CreateBundle("chrome://global/locale/printdialog.properties", &mPrintBundle); +} + +- (NSString*)localizedString:(const char*)aKey +{ + if (!mPrintBundle) + return @""; + + nsXPIDLString intlString; + mPrintBundle->GetStringFromName(NS_ConvertUTF8toUTF16(aKey).get(), getter_Copies(intlString)); + NSString* s = [NSString stringWithUTF8String:NS_ConvertUTF16toUTF8(intlString).get()]; + + // Remove all underscores (they're used in the GTK dialog for accesskeys). + return [s stringByReplacingOccurrencesOfString:@"_" withString:@""]; +} + +// Widget helpers + +- (NSTextField*)label:(const char*)aLabel + withFrame:(NSRect)aRect + alignment:(NSTextAlignment)aAlignment +{ + NSTextField* label = [[[NSTextField alloc] initWithFrame:aRect] autorelease]; + [label setStringValue:[self localizedString:aLabel]]; + [label setEditable:NO]; + [label setSelectable:NO]; + [label setBezeled:NO]; + [label setBordered:NO]; + [label setDrawsBackground:NO]; + [label setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]]; + [label setAlignment:aAlignment]; + return label; +} + +- (void)addLabel:(const char*)aLabel + withFrame:(NSRect)aRect + alignment:(NSTextAlignment)aAlignment +{ + NSTextField* label = [self label:aLabel withFrame:aRect alignment:aAlignment]; + [self addSubview:label]; +} + +- (void)addLabel:(const char*)aLabel withFrame:(NSRect)aRect +{ + [self addLabel:aLabel withFrame:aRect alignment:NSRightTextAlignment]; +} + +- (void)addCenteredLabel:(const char*)aLabel withFrame:(NSRect)aRect +{ + [self addLabel:aLabel withFrame:aRect alignment:NSCenterTextAlignment]; +} + +- (NSButton*)checkboxWithLabel:(const char*)aLabel andFrame:(NSRect)aRect +{ + aRect.origin.y += 4.0f; + NSButton* checkbox = [[[NSButton alloc] initWithFrame:aRect] autorelease]; + [checkbox setButtonType:NSSwitchButton]; + [checkbox setTitle:[self localizedString:aLabel]]; + [checkbox setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]]; + [checkbox sizeToFit]; + return checkbox; +} + +- (NSPopUpButton*)headerFooterItemListWithFrame:(NSRect)aRect + selectedItem:(const PRUnichar*)aCurrentString +{ + NSPopUpButton* list = [[[NSPopUpButton alloc] initWithFrame:aRect pullsDown:NO] autorelease]; + [list setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]]; + [[list cell] setControlSize:NSSmallControlSize]; + NSArray* items = + [NSArray arrayWithObjects:[self localizedString:"headerFooterBlank"], + [self localizedString:"headerFooterTitle"], + [self localizedString:"headerFooterURL"], + [self localizedString:"headerFooterDate"], + [self localizedString:"headerFooterPage"], + [self localizedString:"headerFooterPageTotal"], + nil]; + [list addItemsWithTitles:items]; + + NS_ConvertUTF16toUTF8 currentStringUTF8(aCurrentString); + for (unsigned int i = 0; i < NS_ARRAY_LENGTH(sHeaderFooterTags); i++) { + if (!strcmp(currentStringUTF8.get(), sHeaderFooterTags[i])) { + [list selectItemAtIndex:i]; + break; + } + } + + return list; +} + +// Build sections + +- (void)addOptionsSection +{ + // Title + [self addLabel:"optionsTitleMac" withFrame:NSMakeRect(0, 240, 151, 22)]; + + // "Print Selection Only" + mPrintSelectionOnlyCheckbox = [self checkboxWithLabel:"selectionOnly" + andFrame:NSMakeRect(156, 240, 0, 0)]; + + PRBool canPrintSelection; + mSettings->GetPrintOptions(nsIPrintSettings::kEnableSelectionRB, + &canPrintSelection); + [mPrintSelectionOnlyCheckbox setEnabled:canPrintSelection]; + + PRInt16 printRange; + mSettings->GetPrintRange(&printRange); + if (printRange == nsIPrintSettings::kRangeSelection) { + [mPrintSelectionOnlyCheckbox setState:NSOnState]; + } + + [self addSubview:mPrintSelectionOnlyCheckbox]; + + // "Shrink To Fit" + mShrinkToFitCheckbox = [self checkboxWithLabel:"shrinkToFit" + andFrame:NSMakeRect(156, 218, 0, 0)]; + + PRBool shrinkToFit; + mSettings->GetShrinkToFit(&shrinkToFit); + [mShrinkToFitCheckbox setState:(shrinkToFit ? NSOnState : NSOffState)]; + + [self addSubview:mShrinkToFitCheckbox]; +} + +- (void)addAppearanceSection +{ + // Title + [self addLabel:"appearanceTitleMac" withFrame:NSMakeRect(0, 188, 151, 22)]; + + // "Print Background Colors" + mPrintBGColorsCheckbox = [self checkboxWithLabel:"printBGColors" + andFrame:NSMakeRect(156, 188, 0, 0)]; + + PRBool geckoBool; + mSettings->GetPrintBGColors(&geckoBool); + [mPrintBGColorsCheckbox setState:(geckoBool ? NSOnState : NSOffState)]; + + [self addSubview:mPrintBGColorsCheckbox]; + + // "Print Background Images" + mPrintBGImagesCheckbox = [self checkboxWithLabel:"printBGImages" + andFrame:NSMakeRect(156, 166, 0, 0)]; + + mSettings->GetPrintBGImages(&geckoBool); + [mPrintBGImagesCheckbox setState:(geckoBool ? NSOnState : NSOffState)]; + + [self addSubview:mPrintBGImagesCheckbox]; +} + +- (void)addFramesSection +{ + // Title + [self addLabel:"framesTitleMac" withFrame:NSMakeRect(0, 124, 151, 22)]; + + // Radio matrix + NSButtonCell *radio = [[NSButtonCell alloc] init]; + [radio setButtonType:NSRadioButton]; + [radio setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]]; + NSMatrix *matrix = [[NSMatrix alloc] initWithFrame:NSMakeRect(156, 81, 400, 66) + mode:NSRadioModeMatrix + prototype:(NSCell*)radio + numberOfRows:3 + numberOfColumns:1]; + [radio release]; + [matrix setCellSize:NSMakeSize(400, 21)]; + [self addSubview:matrix]; + [matrix release]; + NSArray *cellArray = [matrix cells]; + mAsLaidOutRadio = [cellArray objectAtIndex:0]; + mSelectedFrameRadio = [cellArray objectAtIndex:1]; + mSeparateFramesRadio = [cellArray objectAtIndex:2]; + [mAsLaidOutRadio setTitle:[self localizedString:"asLaidOut"]]; + [mSelectedFrameRadio setTitle:[self localizedString:"selectedFrame"]]; + [mSeparateFramesRadio setTitle:[self localizedString:"separateFrames"]]; + + // Radio enabled state + PRInt16 frameUIFlag; + mSettings->GetHowToEnableFrameUI(&frameUIFlag); + if (frameUIFlag == nsIPrintSettings::kFrameEnableNone) { + [mAsLaidOutRadio setEnabled:NO]; + [mSelectedFrameRadio setEnabled:NO]; + [mSeparateFramesRadio setEnabled:NO]; + } else if (frameUIFlag == nsIPrintSettings::kFrameEnableAsIsAndEach) { + [mSelectedFrameRadio setEnabled:NO]; + } + + // Radio values + PRInt16 printFrameType; + mSettings->GetPrintFrameType(&printFrameType); + switch (printFrameType) { + case nsIPrintSettings::kFramesAsIs: + [mAsLaidOutRadio setState:NSOnState]; + break; + case nsIPrintSettings::kSelectedFrame: + [mSelectedFrameRadio setState:NSOnState]; + break; + case nsIPrintSettings::kEachFrameSep: + [mSeparateFramesRadio setState:NSOnState]; + break; + } +} + +- (void)addHeaderFooterSection +{ + // Labels + [self addLabel:"pageHeadersTitleMac" withFrame:NSMakeRect(0, 44, 151, 22)]; + [self addLabel:"pageFootersTitleMac" withFrame:NSMakeRect(0, 0, 151, 22)]; + [self addCenteredLabel:"left" withFrame:NSMakeRect(156, 22, 100, 22)]; + [self addCenteredLabel:"center" withFrame:NSMakeRect(256, 22, 100, 22)]; + [self addCenteredLabel:"right" withFrame:NSMakeRect(356, 22, 100, 22)]; + + // Lists + nsXPIDLString sel; + + mSettings->GetHeaderStrLeft(getter_Copies(sel)); + mHeaderLeftList = [self headerFooterItemListWithFrame:NSMakeRect(156, 44, 100, 22) + selectedItem:sel]; + [self addSubview:mHeaderLeftList]; + + mSettings->GetHeaderStrCenter(getter_Copies(sel)); + mHeaderCenterList = [self headerFooterItemListWithFrame:NSMakeRect(256, 44, 100, 22) + selectedItem:sel]; + [self addSubview:mHeaderCenterList]; + + mSettings->GetHeaderStrRight(getter_Copies(sel)); + mHeaderRightList = [self headerFooterItemListWithFrame:NSMakeRect(356, 44, 100, 22) + selectedItem:sel]; + [self addSubview:mHeaderRightList]; + + mSettings->GetFooterStrLeft(getter_Copies(sel)); + mFooterLeftList = [self headerFooterItemListWithFrame:NSMakeRect(156, 0, 100, 22) + selectedItem:sel]; + [self addSubview:mFooterLeftList]; + + mSettings->GetFooterStrCenter(getter_Copies(sel)); + mFooterCenterList = [self headerFooterItemListWithFrame:NSMakeRect(256, 0, 100, 22) + selectedItem:sel]; + [self addSubview:mFooterCenterList]; + + mSettings->GetFooterStrRight(getter_Copies(sel)); + mFooterRightList = [self headerFooterItemListWithFrame:NSMakeRect(356, 0, 100, 22) + selectedItem:sel]; + [self addSubview:mFooterRightList]; +} + +// Export settings + +- (PRInt16)chosenFrameSetting +{ + if ([mAsLaidOutRadio state] == NSOnState) + return nsIPrintSettings::kFramesAsIs; + if ([mSelectedFrameRadio state] == NSOnState) + return nsIPrintSettings::kSelectedFrame; + if ([mSeparateFramesRadio state] == NSOnState) + return nsIPrintSettings::kEachFrameSep; + return nsIPrintSettings::kNoFrames; +} + +- (const char*)headerFooterStringForList:(NSPopUpButton*)aList +{ + NSInteger index = [aList indexOfSelectedItem]; + NS_ASSERTION(index < NSInteger(NS_ARRAY_LENGTH(sHeaderFooterTags)), "Index of dropdown is higher than expected!"); + return sHeaderFooterTags[index]; +} + +- (void)exportHeaderFooterSettings +{ + const char* headerFooterStr; + headerFooterStr = [self headerFooterStringForList:mHeaderLeftList]; + mSettings->SetHeaderStrLeft(NS_ConvertUTF8toUTF16(headerFooterStr).get()); + + headerFooterStr = [self headerFooterStringForList:mHeaderCenterList]; + mSettings->SetHeaderStrCenter(NS_ConvertUTF8toUTF16(headerFooterStr).get()); + + headerFooterStr = [self headerFooterStringForList:mHeaderRightList]; + mSettings->SetHeaderStrRight(NS_ConvertUTF8toUTF16(headerFooterStr).get()); + + headerFooterStr = [self headerFooterStringForList:mFooterLeftList]; + mSettings->SetFooterStrLeft(NS_ConvertUTF8toUTF16(headerFooterStr).get()); + + headerFooterStr = [self headerFooterStringForList:mFooterCenterList]; + mSettings->SetFooterStrCenter(NS_ConvertUTF8toUTF16(headerFooterStr).get()); + + headerFooterStr = [self headerFooterStringForList:mFooterRightList]; + mSettings->SetFooterStrRight(NS_ConvertUTF8toUTF16(headerFooterStr).get()); +} + +// Summary + +- (NSString*)summaryValueForCheckbox:(NSButton*)aCheckbox +{ + if (![aCheckbox isEnabled]) + return [self localizedString:"summaryNAValue"]; + + return [aCheckbox state] == NSOnState ? + [self localizedString:"summaryOnValue"] : + [self localizedString:"summaryOffValue"]; +} + +- (NSString*)framesSummaryValue +{ + switch([self chosenFrameSetting]) { + case nsIPrintSettings::kFramesAsIs: + return [self localizedString:"asLaidOut"]; + case nsIPrintSettings::kSelectedFrame: + return [self localizedString:"selectedFrame"]; + case nsIPrintSettings::kEachFrameSep: + return [self localizedString:"separateFrames"]; + } + return [self localizedString:"summaryNAValue"]; +} + +- (NSString*)headerSummaryValue +{ + return [[mHeaderLeftList titleOfSelectedItem] stringByAppendingString: + [@", " stringByAppendingString: + [[mHeaderCenterList titleOfSelectedItem] stringByAppendingString: + [@", " stringByAppendingString: + [mHeaderRightList titleOfSelectedItem]]]]]; +} + +- (NSString*)footerSummaryValue +{ + return [[mFooterLeftList titleOfSelectedItem] stringByAppendingString: + [@", " stringByAppendingString: + [[mFooterCenterList titleOfSelectedItem] stringByAppendingString: + [@", " stringByAppendingString: + [mFooterRightList titleOfSelectedItem]]]]]; +} + +- (NSArray*)localizedSummaryItems +{ + return [NSArray arrayWithObjects: + [NSDictionary dictionaryWithObjectsAndKeys: + [self localizedString:"summaryFramesTitle"], NSPrintPanelAccessorySummaryItemNameKey, + [self framesSummaryValue], NSPrintPanelAccessorySummaryItemDescriptionKey, nil], + [NSDictionary dictionaryWithObjectsAndKeys: + [self localizedString:"summarySelectionOnlyTitle"], NSPrintPanelAccessorySummaryItemNameKey, + [self summaryValueForCheckbox:mPrintSelectionOnlyCheckbox], NSPrintPanelAccessorySummaryItemDescriptionKey, nil], + [NSDictionary dictionaryWithObjectsAndKeys: + [self localizedString:"summaryShrinkToFitTitle"], NSPrintPanelAccessorySummaryItemNameKey, + [self summaryValueForCheckbox:mShrinkToFitCheckbox], NSPrintPanelAccessorySummaryItemDescriptionKey, nil], + [NSDictionary dictionaryWithObjectsAndKeys: + [self localizedString:"summaryPrintBGColorsTitle"], NSPrintPanelAccessorySummaryItemNameKey, + [self summaryValueForCheckbox:mPrintBGColorsCheckbox], NSPrintPanelAccessorySummaryItemDescriptionKey, nil], + [NSDictionary dictionaryWithObjectsAndKeys: + [self localizedString:"summaryPrintBGImagesTitle"], NSPrintPanelAccessorySummaryItemNameKey, + [self summaryValueForCheckbox:mPrintBGImagesCheckbox], NSPrintPanelAccessorySummaryItemDescriptionKey, nil], + [NSDictionary dictionaryWithObjectsAndKeys: + [self localizedString:"summaryHeaderTitle"], NSPrintPanelAccessorySummaryItemNameKey, + [self headerSummaryValue], NSPrintPanelAccessorySummaryItemDescriptionKey, nil], + [NSDictionary dictionaryWithObjectsAndKeys: + [self localizedString:"summaryFooterTitle"], NSPrintPanelAccessorySummaryItemNameKey, + [self footerSummaryValue], NSPrintPanelAccessorySummaryItemDescriptionKey, nil], + nil]; +} + +@end + +// Accessory controller + +@implementation PrintPanelAccessoryController + +- (id)initWithSettings:(nsIPrintSettings*)aSettings +{ + [super initWithNibName:nil bundle:nil]; + NSView* accView = [[PrintPanelAccessoryView alloc] initWithSettings:aSettings]; + [self setView:accView]; + [accView release]; + return self; +} + +- (void)exportSettings +{ + return [(PrintPanelAccessoryView*)[self view] exportSettings]; +} + +- (NSArray *)localizedSummaryItems +{ + return [(PrintPanelAccessoryView*)[self view] localizedSummaryItems]; +} + +@end diff --git a/widget/src/cocoa/nsPrintOptionsX.h b/widget/src/cocoa/nsPrintOptionsX.h index 820f491fbb5..b35aa1afd85 100644 --- a/widget/src/cocoa/nsPrintOptionsX.h +++ b/widget/src/cocoa/nsPrintOptionsX.h @@ -46,8 +46,11 @@ class nsPrintOptionsX : public nsPrintOptions public: nsPrintOptionsX(); virtual ~nsPrintOptionsX(); + +#ifndef MOZ_COCOA_PRINTING NS_IMETHOD ShowPrintSetupDialog(nsIPrintSettings *aThePrintSettings); NS_IMETHOD GetNativeData(PRInt16 aDataType, void * *_retval); +#endif protected: nsresult _CreatePrintSettings(nsIPrintSettings **_retval); diff --git a/widget/src/cocoa/nsPrintOptionsX.mm b/widget/src/cocoa/nsPrintOptionsX.mm index 8375ac9d7f9..63b3ccd6597 100644 --- a/widget/src/cocoa/nsPrintOptionsX.mm +++ b/widget/src/cocoa/nsPrintOptionsX.mm @@ -41,9 +41,11 @@ #include "nsPrintOptionsX.h" #include "nsPrintSettingsX.h" +#ifndef MOZ_COCOA_PRINTING #include "nsCRT.h" #include "plbase64.h" #include "prmem.h" +#endif nsPrintOptionsX::nsPrintOptionsX() { @@ -53,6 +55,7 @@ nsPrintOptionsX::~nsPrintOptionsX() { } +#ifndef MOZ_COCOA_PRINTING NS_IMETHODIMP nsPrintOptionsX::ShowPrintSetupDialog(nsIPrintSettings *aThePrintSettings) { @@ -67,6 +70,7 @@ nsPrintOptionsX::GetNativeData(PRInt16 aDataType, void **_retval) return NS_ERROR_NOT_IMPLEMENTED; } +#endif nsresult nsPrintOptionsX::ReadPrefs(nsIPrintSettings* aPS, const nsAString& aPrinterName, PRUint32 aFlags) @@ -75,14 +79,19 @@ nsPrintOptionsX::ReadPrefs(nsIPrintSettings* aPS, const nsAString& aPrinterName, rv = nsPrintOptions::ReadPrefs(aPS, aPrinterName, aFlags); NS_ASSERTION(NS_SUCCEEDED(rv), "nsPrintOptions::ReadPrefs() failed"); - + +#ifdef MOZ_COCOA_PRINTING + nsCOMPtr printSettingsX(do_QueryInterface(aPS)); +#else nsCOMPtr printSettingsX(do_QueryInterface(aPS)); +#endif + if (!printSettingsX) return NS_ERROR_NO_INTERFACE; rv = printSettingsX->ReadPageFormatFromPrefs(); - NS_ASSERTION(NS_SUCCEEDED(rv), "nsIPrintSettingsX::ReadPageFormatFromPrefs() failed"); - - return NS_OK; + NS_ASSERTION(NS_SUCCEEDED(rv), "nsPrintSettingsX::ReadPageFormatFromPrefs() failed"); + + return rv; } nsresult nsPrintOptionsX::_CreatePrintSettings(nsIPrintSettings **_retval) @@ -112,11 +121,15 @@ nsPrintOptionsX::WritePrefs(nsIPrintSettings* aPS, const nsAString& aPrinterName rv = nsPrintOptions::WritePrefs(aPS, aPrinterName, aFlags); NS_ASSERTION(NS_SUCCEEDED(rv), "nsPrintOptions::WritePrefs() failed"); +#ifdef MOZ_COCOA_PRINTING + nsCOMPtr printSettingsX(do_QueryInterface(aPS)); +#else nsCOMPtr printSettingsX(do_QueryInterface(aPS)); +#endif if (!printSettingsX) return NS_ERROR_NO_INTERFACE; rv = printSettingsX->WritePageFormatToPrefs(); - NS_ASSERTION(NS_SUCCEEDED(rv), "nsIPrintSettingsX::WritePageFormatToPrefs() failed"); + NS_ASSERTION(NS_SUCCEEDED(rv), "nsPrintSettingsX::WritePageFormatToPrefs() failed"); - return NS_OK; + return rv; } diff --git a/widget/src/cocoa/nsPrintSettingsX.h b/widget/src/cocoa/nsPrintSettingsX.h index 4d607de0405..9175111baab 100644 --- a/widget/src/cocoa/nsPrintSettingsX.h +++ b/widget/src/cocoa/nsPrintSettingsX.h @@ -39,20 +39,34 @@ #define nsPrintSettingsX_h_ #include "nsPrintSettingsImpl.h" -#include "nsIPrintSettingsX.h" -class nsPrintSettingsX : public nsPrintSettings, - public nsIPrintSettingsX +#ifdef MOZ_COCOA_PRINTING +#import +#else +#include "nsIPrintSettingsX.h" +#endif + +class nsPrintSettingsX : public nsPrintSettings +#ifndef MOZ_COCOA_PRINTING + , public nsIPrintSettingsX +#endif { public: NS_DECL_ISUPPORTS_INHERITED +#ifndef MOZ_COCOA_PRINTING NS_DECL_NSIPRINTSETTINGSX +#endif nsPrintSettingsX(); virtual ~nsPrintSettingsX(); - nsresult Init(); +#ifdef MOZ_COCOA_PRINTING + NSPrintInfo* GetCocoaPrintInfo() { return mPrintInfo; } + virtual nsresult ReadPageFormatFromPrefs(); + virtual nsresult WritePageFormatToPrefs(); +#endif + protected: nsPrintSettingsX(const nsPrintSettingsX& src); nsPrintSettingsX& operator=(const nsPrintSettingsX& rhs); @@ -70,6 +84,9 @@ protected: PMPageFormat mPageFormat; PMPrintSettings mPrintSettings; +#ifdef MOZ_COCOA_PRINTING + NSPrintInfo* mPrintInfo; +#endif }; #endif // nsPrintSettingsX_h_ diff --git a/widget/src/cocoa/nsPrintSettingsX.mm b/widget/src/cocoa/nsPrintSettingsX.mm index f5403151b71..c83cdf4020f 100644 --- a/widget/src/cocoa/nsPrintSettingsX.mm +++ b/widget/src/cocoa/nsPrintSettingsX.mm @@ -21,6 +21,7 @@ * * Contributor(s): * Conrad Carlen + * Markus Stange * * Alternatively, the contents of this file may be used under the terms of * either of the GNU General Public License Version 2 or later (the "GPL"), @@ -38,7 +39,6 @@ #include "nsPrintSettingsX.h" #include "nsObjCExceptions.h" -#include "nsIPrintSessionX.h" #include "nsIPrefService.h" #include "nsIPrefBranch.h" @@ -52,6 +52,28 @@ #include "nsMenuBarX.h" #include "nsMenuUtilsX.h" +#define PRINTING_PREF_BRANCH "print." +#define MAC_OS_X_PAGE_SETUP_PREFNAME "macosx.pagesetup-2" + +#ifdef MOZ_COCOA_PRINTING + +NS_IMPL_ISUPPORTS_INHERITED1(nsPrintSettingsX, nsPrintSettings, nsPrintSettingsX) + +nsPrintSettingsX::nsPrintSettingsX() +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK; + + mPrintInfo = [[NSPrintInfo sharedPrintInfo] copy]; + mPageFormat = (PMPageFormat)[mPrintInfo PMPageFormat]; + mPrintSettings = (PMPrintSettings)[mPrintInfo PMPrintSettings]; + + NS_OBJC_END_TRY_ABORT_BLOCK; +} + +#else + +#include "nsIPrintSessionX.h" + // This struct should be represented identically on all architectures, and // there shouldn't be any padding before the data field. struct FrozenHandle { @@ -59,9 +81,6 @@ struct FrozenHandle { char data[0]; }; -#define PRINTING_PREF_BRANCH "print." -#define MAC_OS_X_PAGE_SETUP_PREFNAME "macosx.pagesetup-2" - // Utility class stack-based handle ownership class StHandleOwner { @@ -140,6 +159,8 @@ nsPrintSettingsX::nsPrintSettingsX() : { } +#endif + nsPrintSettingsX::nsPrintSettingsX(const nsPrintSettingsX& src) : mPageFormat(kPMNoPageFormat), mPrintSettings(kPMNoPrintSettings) @@ -173,6 +194,10 @@ nsPrintSettingsX& nsPrintSettingsX::operator=(const nsPrintSettingsX& rhs) nsPrintSettings::operator=(rhs); +#ifdef MOZ_COCOA_PRINTING + [mPrintInfo release]; + mPrintInfo = [rhs.mPrintInfo copy]; +#else OSStatus status; if (mPageFormat != kPMNoPageFormat) { @@ -210,6 +235,7 @@ nsPrintSettingsX& nsPrintSettingsX::operator=(const nsPrintSettingsX& rhs) ::PMRelease(printSettings); } } +#endif return *this; @@ -220,6 +246,9 @@ nsresult nsPrintSettingsX::Init() { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; +#ifdef MOZ_COCOA_PRINTING + return InitUnwriteableMargin(); +#else OSStatus status; PMPrintSession printSession = NULL; @@ -239,6 +268,7 @@ nsresult nsPrintSettingsX::Init() status = tempStatus; } return (status == noErr) ? NS_OK : NS_ERROR_FAILURE; +#endif NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } @@ -265,6 +295,75 @@ NS_IMETHODIMP nsPrintSettingsX::InitUnwriteableMargin() NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } +#ifdef MOZ_COCOA_PRINTING +NS_IMETHODIMP nsPrintSettingsX::ReadPageFormatFromPrefs() +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + + nsresult rv; + nsCOMPtr prefService(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv)); + if (NS_FAILED(rv)) + return rv; + nsCOMPtr prefBranch; + rv = prefService->GetBranch(PRINTING_PREF_BRANCH, getter_AddRefs(prefBranch)); + if (NS_FAILED(rv)) + return rv; + + nsXPIDLCString encodedData; + rv = prefBranch->GetCharPref(MAC_OS_X_PAGE_SETUP_PREFNAME, getter_Copies(encodedData)); + if (NS_FAILED(rv)) + return rv; + + // decode the base64 + char* decodedData = PL_Base64Decode(encodedData.get(), encodedData.Length(), nsnull); + NSData* data = [NSData dataWithBytes:decodedData length:PL_strlen(decodedData)]; + if (!data) + return NS_ERROR_FAILURE; + + PMPageFormat newPageFormat; + OSStatus status = ::PMPageFormatCreateWithDataRepresentation((CFDataRef)data, &newPageFormat); + if (status == noErr) { + ::PMCopyPageFormat(newPageFormat, mPageFormat); + [mPrintInfo updateFromPMPageFormat]; + } + InitUnwriteableMargin(); + + return NS_OK; + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} + +NS_IMETHODIMP nsPrintSettingsX::WritePageFormatToPrefs() +{ + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NSRESULT; + + if (mPageFormat == kPMNoPageFormat) + return NS_ERROR_NOT_INITIALIZED; + + nsresult rv; + nsCOMPtr prefService(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv)); + if (NS_FAILED(rv)) + return rv; + nsCOMPtr prefBranch; + rv = prefService->GetBranch(PRINTING_PREF_BRANCH, getter_AddRefs(prefBranch)); + if (NS_FAILED(rv)) + return rv; + + NSData* data = nil; + OSStatus err = ::PMPageFormatCreateDataRepresentation(mPageFormat, (CFDataRef*)&data, kPMDataFormatXMLDefault); + if (err != noErr) + return NS_ERROR_FAILURE; + + nsXPIDLCString encodedData; + encodedData.Adopt(PL_Base64Encode((char*)[data bytes], [data length], nsnull)); + if (!encodedData.get()) + return NS_ERROR_OUT_OF_MEMORY; + + return prefBranch->SetCharPref(MAC_OS_X_PAGE_SETUP_PREFNAME, encodedData); + + NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; +} +#else NS_IMETHODIMP nsPrintSettingsX::GetNativePrintSession(PMPrintSession *aNativePrintSession) { NS_ENSURE_ARG_POINTER(aNativePrintSession); @@ -451,6 +550,7 @@ NS_IMETHODIMP nsPrintSettingsX::WritePageFormatToPrefs() NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } +#endif nsresult nsPrintSettingsX::_Clone(nsIPrintSettings **_retval) { @@ -474,6 +574,7 @@ NS_IMETHODIMP nsPrintSettingsX::_Assign(nsIPrintSettings *aPS) return NS_OK; } +#ifndef MOZ_COCOA_PRINTING OSStatus nsPrintSettingsX::CreateDefaultPageFormat(PMPrintSession aSession, PMPageFormat& outFormat) { NS_OBJC_BEGIN_TRY_ABORT_BLOCK_RETURN; @@ -531,3 +632,4 @@ NS_IMETHODIMP nsPrintSettingsX::CleanUpAfterCarbonDialog() NS_OBJC_END_TRY_ABORT_BLOCK_NSRESULT; } +#endif diff --git a/widget/src/cocoa/nsWidgetFactory.mm b/widget/src/cocoa/nsWidgetFactory.mm index 9863996bf55..86731c8bc02 100644 --- a/widget/src/cocoa/nsWidgetFactory.mm +++ b/widget/src/cocoa/nsWidgetFactory.mm @@ -64,7 +64,13 @@ #include "nsScreenManagerCocoa.h" #include "nsDeviceContextSpecX.h" #include "nsPrintOptionsX.h" + +#ifdef MOZ_COCOA_PRINTING +#include "nsPrintDialogX.h" +#include "nsPrintSession.h" +#else #include "nsPrintSessionX.h" +#endif NS_GENERIC_FACTORY_CONSTRUCTOR(nsCocoaWindow) NS_GENERIC_FACTORY_CONSTRUCTOR(nsChildView) @@ -81,7 +87,12 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsDragService) NS_GENERIC_FACTORY_CONSTRUCTOR(nsScreenManagerCocoa) NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceContextSpecX) NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintOptionsX, Init) +#ifdef MOZ_COCOA_PRINTING +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintDialogServiceX, Init) +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSession, Init) +#else NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSessionX, Init) +#endif NS_GENERIC_FACTORY_CONSTRUCTOR(nsIdleServiceX) #include "nsMenuBarX.h" @@ -167,14 +178,25 @@ static const nsModuleComponentInfo gComponents[] = NS_DEVICE_CONTEXT_SPEC_CID, "@mozilla.org/gfx/devicecontextspec;1", nsDeviceContextSpecXConstructor }, - { "PrintSettings Service", - NS_PRINTSETTINGSSERVICE_CID, - "@mozilla.org/gfx/printsettings-service;1", - nsPrintOptionsXConstructor }, +#ifdef MOZ_COCOA_PRINTING + { "Native Print Dialog", + NS_PRINTDIALOGSERVICE_CID, + NS_PRINTDIALOGSERVICE_CONTRACTID, + nsPrintDialogServiceXConstructor }, + { "Print Session", + NS_PRINTSESSION_CID, + "@mozilla.org/gfx/printsession;1", + nsPrintSessionConstructor }, +#else { "Print Session", NS_PRINTSESSION_CID, "@mozilla.org/gfx/printsession;1", nsPrintSessionXConstructor }, +#endif + { "PrintSettings Service", + NS_PRINTSETTINGSSERVICE_CID, + "@mozilla.org/gfx/printsettings-service;1", + nsPrintOptionsXConstructor }, { "User Idle Service", NS_IDLE_SERVICE_CID, "@mozilla.org/widget/idleservice;1", diff --git a/widget/src/gtk2/nsPrintDialogGTK.cpp b/widget/src/gtk2/nsPrintDialogGTK.cpp index cc3ec064440..9abfdb59e7c 100644 --- a/widget/src/gtk2/nsPrintDialogGTK.cpp +++ b/widget/src/gtk2/nsPrintDialogGTK.cpp @@ -135,7 +135,7 @@ ShowCustomDialog(GtkComboBox *changed_box, gpointer user_data) do_GetService(NS_STRINGBUNDLE_CONTRACTID); nsCOMPtr printBundle; - bundleSvc->CreateBundle("chrome://global/locale/gnomeprintdialog.properties", getter_AddRefs(printBundle)); + bundleSvc->CreateBundle("chrome://global/locale/printdialog.properties", getter_AddRefs(printBundle)); nsXPIDLString intlString; printBundle->GetStringFromName(NS_LITERAL_STRING("headerFooterCustom").get(), getter_Copies(intlString)); @@ -230,9 +230,9 @@ nsPrintDialogWidgetGTK::nsPrintDialogWidgetGTK(nsIDOMWindow *aParent, nsIPrintSe NS_ASSERTION(gtkParent, "Need a GTK window for dialog to be modal."); nsCOMPtr bundleSvc = do_GetService(NS_STRINGBUNDLE_CONTRACTID); - bundleSvc->CreateBundle("chrome://global/locale/gnomeprintdialog.properties", getter_AddRefs(printBundle)); + bundleSvc->CreateBundle("chrome://global/locale/printdialog.properties", getter_AddRefs(printBundle)); - dialog = gtk_print_unix_dialog_new(GetUTF8FromBundle("printTitle").get(), gtkParent); + dialog = gtk_print_unix_dialog_new(GetUTF8FromBundle("printTitleGTK").get(), gtkParent); gtk_print_unix_dialog_set_manual_capabilities(GTK_PRINT_UNIX_DIALOG(dialog), GtkPrintCapabilities( @@ -248,7 +248,7 @@ nsPrintDialogWidgetGTK::nsPrintDialogWidgetGTK(nsIDOMWindow *aParent, nsIPrintSe // the set_border_width below, 12px matches that of just about every other window. GtkWidget* custom_options_tab = gtk_vbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(custom_options_tab), 12); - GtkWidget* tab_label = gtk_label_new(GetUTF8FromBundle("optionsTabLabel").get()); + GtkWidget* tab_label = gtk_label_new(GetUTF8FromBundle("optionsTabLabelGTK").get()); PRInt16 frameUIFlag; aSettings->GetHowToEnableFrameUI(&frameUIFlag); @@ -269,7 +269,7 @@ nsPrintDialogWidgetGTK::nsPrintDialogWidgetGTK(nsIDOMWindow *aParent, nsIPrintSe // "Print Frames" options label, bold and center-aligned GtkWidget* print_frames_label = gtk_label_new(NULL); - char* pangoMarkup = g_markup_printf_escaped("%s", GetUTF8FromBundle("printFramesTitle").get()); + char* pangoMarkup = g_markup_printf_escaped("%s", GetUTF8FromBundle("printFramesTitleGTK").get()); gtk_label_set_markup(GTK_LABEL(print_frames_label), pangoMarkup); g_free(pangoMarkup); gtk_misc_set_alignment(GTK_MISC(print_frames_label), 0, 0);