зеркало из https://github.com/mozilla/gecko-dev.git
Bug 565013: Implement printing to PDF for qt builds. r=romaxa r=dholbert a=blocking-fennec
--HG-- rename : widget/src/gtk2/nsDeviceContextSpecG.cpp => widget/src/qt/nsDeviceContextSpecQt.cpp rename : widget/src/gtk2/nsDeviceContextSpecG.h => widget/src/qt/nsDeviceContextSpecQt.h rename : widget/src/gtk2/nsPrintDialogGTK.cpp => widget/src/qt/nsPrintDialogQt.cpp rename : widget/src/gtk2/nsPrintDialogGTK.h => widget/src/qt/nsPrintDialogQt.h rename : widget/src/gtk2/nsPrintOptionsGTK.cpp => widget/src/qt/nsPrintOptionsQt.cpp rename : widget/src/gtk2/nsPrintOptionsGTK.h => widget/src/qt/nsPrintOptionsQt.h rename : widget/src/gtk2/nsPrintSettingsGTK.cpp => widget/src/qt/nsPrintSettingsQt.cpp rename : widget/src/gtk2/nsPrintSettingsGTK.h => widget/src/qt/nsPrintSettingsQt.h
This commit is contained in:
Родитель
3d4cae15c8
Коммит
6b981e0e94
|
@ -5196,7 +5196,6 @@ cairo-qt)
|
|||
MOZ_WEBGL=1
|
||||
MOZ_WEBGL_GLX=1
|
||||
USE_ELF_DYNSTR_GC=
|
||||
NS_PRINTING=
|
||||
|
||||
AC_DEFINE(MOZ_X11)
|
||||
MOZ_X11=1
|
||||
|
@ -5846,11 +5845,6 @@ MOZ_ARG_DISABLE_BOOL(printing,
|
|||
NS_PRINTING=,
|
||||
NS_PRINTING=1)
|
||||
|
||||
if test "$MOZ_WIDGET_TOOLKIT" = "qt"; then
|
||||
AC_MSG_WARN([Printing does not work with Qt at this time. Omitting printing support.])
|
||||
NS_PRINTING=
|
||||
fi
|
||||
|
||||
if test "$NS_PRINTING"; then
|
||||
AC_DEFINE(NS_PRINTING)
|
||||
AC_DEFINE(NS_PRINT_PREVIEW)
|
||||
|
|
|
@ -210,7 +210,9 @@ endif
|
|||
|
||||
ifeq ($(MOZ_WIDGET_TOOLKIT),qt)
|
||||
CPPSRCS += cairo-qt-surface.cpp
|
||||
CSRCS += $(PSPDF_BASE_CSRCS) $(PDF_CSRCS)
|
||||
EXPORTS_cairo += cairo-qt.h
|
||||
EXPORTS_cairo += $(PDF_EXPORTS)
|
||||
OS_INCLUDES += $(MOZ_QT_CFLAGS)
|
||||
endif
|
||||
|
||||
|
|
|
@ -87,6 +87,7 @@ static nsSystemFontsBeOS *gSystemFonts = nsnull;
|
|||
static nsSystemFontsMac *gSystemFonts = nsnull;
|
||||
#elif defined(MOZ_WIDGET_QT)
|
||||
#include "nsSystemFontsQt.h"
|
||||
#include "gfxPDFSurface.h"
|
||||
static nsSystemFontsQt *gSystemFonts = nsnull;
|
||||
#elif defined(ANDROID)
|
||||
#include "nsSystemFontsAndroid.h"
|
||||
|
@ -1108,7 +1109,7 @@ nsThebesDeviceContext::CalcPrintingSize()
|
|||
size = reinterpret_cast<gfxImageSurface*>(mPrintingSurface.get())->GetSize();
|
||||
break;
|
||||
|
||||
#if defined(MOZ_ENABLE_GTK2) || defined(XP_WIN) || defined(XP_OS2)
|
||||
#if defined(MOZ_ENABLE_GTK2) || defined(XP_WIN) || defined(XP_OS2) || defined(MOZ_WIDGET_QT)
|
||||
case gfxASurface::SurfaceTypePDF:
|
||||
inPoints = PR_TRUE;
|
||||
size = reinterpret_cast<gfxPDFSurface*>(mPrintingSurface.get())->GetSize();
|
||||
|
|
|
@ -122,6 +122,7 @@ EXPORTS += \
|
|||
gfxQPainterSurface.h \
|
||||
gfxQtNativeRenderer.h \
|
||||
gfxQtPlatform.h \
|
||||
gfxPDFSurface.h \
|
||||
$(NULL)
|
||||
|
||||
ifdef MOZ_X11
|
||||
|
@ -350,6 +351,7 @@ CPPSRCS += gfxFT2FontBase.cpp
|
|||
CPPSRCS += gfxFT2Utils.cpp
|
||||
CPPSRCS += gfxFontconfigUtils.cpp
|
||||
CPPSRCS += nsUnicodeRange.cpp
|
||||
CPPSRCS += gfxPDFSurface.cpp
|
||||
EXTRA_DSO_LDOPTS += $(MOZ_PANGO_LIBS) $(ZLIB_LIBS) $(XLDFLAGS) $(XLIBS) $(CAIRO_FT_LIBS) $(XEXT_LIBS)
|
||||
endif
|
||||
|
||||
|
|
|
@ -75,6 +75,10 @@ CPPSRCS = \
|
|||
mozqwidget.cpp \
|
||||
nsSound.cpp \
|
||||
nsFilePicker.cpp \
|
||||
nsPrintOptionsQt.cpp \
|
||||
nsPrintSettingsQt.cpp \
|
||||
nsPrintDialogQt.cpp \
|
||||
nsDeviceContextSpecQt.cpp \
|
||||
$(NULL)
|
||||
|
||||
SHARED_LIBRARY_LIBS = ../xpwidgets/libxpwidgets_s.a
|
||||
|
|
|
@ -0,0 +1,316 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** 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):
|
||||
* Roland Mainz <roland.mainz@informatik.med.uni-giessen.de>
|
||||
* Ken Herron <kherron+mozilla@fmailbox.com>
|
||||
* Julien Lafon <julien.lafon@gmail.com>
|
||||
* Michael Ventnor <m.ventnor@gmail.com>
|
||||
* Florian Hänel <heeen@gmx.de>
|
||||
*
|
||||
* 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"),
|
||||
* 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 <QTemporaryFile>
|
||||
#include <QPrinterInfo>
|
||||
|
||||
#define SET_PRINTER_FEATURES_VIA_PREFS 1
|
||||
#define PRINTERFEATURES_PREF "print.tmp.printerfeatures"
|
||||
|
||||
#ifdef MOZ_LOGGING
|
||||
#define FORCE_PR_LOG 1 /* Allow logging in the release build */
|
||||
#endif /* MOZ_LOGGING */
|
||||
#include "prlog.h"
|
||||
|
||||
#include "plstr.h"
|
||||
|
||||
#include "nsDeviceContextSpecQt.h"
|
||||
|
||||
#include "nsIPrefService.h"
|
||||
#include "nsIPrefBranch.h"
|
||||
#include "prenv.h" /* for PR_GetEnv */
|
||||
|
||||
#include "nsPrintfCString.h"
|
||||
#include "nsReadableUtils.h"
|
||||
#include "nsStringEnumerator.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsPrintSettingsQt.h"
|
||||
#include "nsIFileStreams.h"
|
||||
#include "nsILocalFile.h"
|
||||
#include "nsTArray.h"
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "gfxPDFSurface.h"
|
||||
|
||||
/* Ensure that the result is always equal to either PR_TRUE or PR_FALSE */
|
||||
#define MAKE_PR_BOOL(val) ((val)?(PR_TRUE):(PR_FALSE))
|
||||
|
||||
#ifdef PR_LOGGING
|
||||
static PRLogModuleInfo* DeviceContextSpecQtLM =
|
||||
PR_NewLogModule("DeviceContextSpecQt");
|
||||
#endif /* PR_LOGGING */
|
||||
/* Macro to make lines shorter */
|
||||
#define DO_PR_DEBUG_LOG(x) PR_LOG(DeviceContextSpecQtLM, PR_LOG_DEBUG, x)
|
||||
|
||||
nsDeviceContextSpecQt::nsDeviceContextSpecQt()
|
||||
{
|
||||
DO_PR_DEBUG_LOG(("nsDeviceContextSpecQt::nsDeviceContextSpecQt()\n"));
|
||||
}
|
||||
|
||||
nsDeviceContextSpecQt::~nsDeviceContextSpecQt()
|
||||
{
|
||||
DO_PR_DEBUG_LOG(("nsDeviceContextSpecQt::~nsDeviceContextSpecQt()\n"));
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS1(nsDeviceContextSpecQt,
|
||||
nsIDeviceContextSpec)
|
||||
|
||||
NS_IMETHODIMP nsDeviceContextSpecQt::GetSurfaceForPrinter(
|
||||
gfxASurface** aSurface)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aSurface);
|
||||
*aSurface = nsnull;
|
||||
|
||||
double width, height;
|
||||
mPrintSettings->GetEffectivePageSize(&width, &height);
|
||||
|
||||
// If we're in landscape mode, we'll be rotating the output --
|
||||
// need to swap width & height.
|
||||
PRInt32 orientation;
|
||||
mPrintSettings->GetOrientation(&orientation);
|
||||
if (nsIPrintSettings::kLandscapeOrientation == orientation) {
|
||||
double tmp = width;
|
||||
width = height;
|
||||
height = tmp;
|
||||
}
|
||||
|
||||
// convert twips to points
|
||||
width /= TWIPS_PER_POINT_FLOAT;
|
||||
height /= TWIPS_PER_POINT_FLOAT;
|
||||
|
||||
DO_PR_DEBUG_LOG(("\"%s\", %f, %f\n", mPath, width, height));
|
||||
|
||||
QTemporaryFile file;
|
||||
if(!file.open()) {
|
||||
return NS_ERROR_GFX_PRINTER_COULD_NOT_OPEN_FILE;
|
||||
}
|
||||
file.setAutoRemove(false);
|
||||
|
||||
nsresult rv = NS_NewNativeLocalFile(
|
||||
nsDependentCString(file.fileName().toAscii().constData()),
|
||||
PR_FALSE,
|
||||
getter_AddRefs(mSpoolFile));
|
||||
if (NS_FAILED(rv)) {
|
||||
file.remove();
|
||||
return NS_ERROR_GFX_PRINTER_COULD_NOT_OPEN_FILE;
|
||||
}
|
||||
|
||||
mSpoolName = file.fileName().toUtf8().constData();
|
||||
|
||||
mSpoolFile->SetPermissions(0600);
|
||||
|
||||
nsCOMPtr<nsIFileOutputStream> stream =
|
||||
do_CreateInstance("@mozilla.org/network/file-output-stream;1");
|
||||
|
||||
rv = stream->Init(mSpoolFile, -1, -1, 0);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
PRInt16 format;
|
||||
mPrintSettings->GetOutputFormat(&format);
|
||||
|
||||
nsRefPtr<gfxASurface> surface;
|
||||
gfxSize surfaceSize(width, height);
|
||||
|
||||
if (format == nsIPrintSettings::kOutputFormatNative) {
|
||||
if (mIsPPreview) {
|
||||
// There is nothing to detect on Print Preview, use PS.
|
||||
// TODO: implement for Qt?
|
||||
//format = nsIPrintSettings::kOutputFormatPS;
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
format = nsIPrintSettings::kOutputFormatPDF;
|
||||
}
|
||||
if (format == nsIPrintSettings::kOutputFormatPDF) {
|
||||
surface = new gfxPDFSurface(stream, surfaceSize);
|
||||
} else {
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
NS_ABORT_IF_FALSE(surface, "valid address expected");
|
||||
|
||||
surface.swap(*aSurface);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsDeviceContextSpecQt::Init(nsIWidget* aWidget,
|
||||
nsIPrintSettings* aPS,
|
||||
PRBool aIsPrintPreview)
|
||||
{
|
||||
DO_PR_DEBUG_LOG(("nsDeviceContextSpecQt::Init(aPS=%p)\n", aPS));
|
||||
|
||||
mPrintSettings = aPS;
|
||||
mIsPPreview = aIsPrintPreview;
|
||||
|
||||
// This is only set by embedders
|
||||
PRBool toFile;
|
||||
aPS->GetPrintToFile(&toFile);
|
||||
|
||||
mToPrinter = !toFile && !aIsPrintPreview;
|
||||
|
||||
nsCOMPtr<nsPrintSettingsQt> printSettingsQt(do_QueryInterface(aPS));
|
||||
if (!printSettingsQt)
|
||||
return NS_ERROR_NO_INTERFACE;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsDeviceContextSpecQt::GetPath(const char** aPath)
|
||||
{
|
||||
*aPath = mPath;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsDeviceContextSpecQt::BeginDocument(
|
||||
PRUnichar* aTitle,
|
||||
PRUnichar* aPrintToFileName,
|
||||
PRInt32 aStartPage,
|
||||
PRInt32 aEndPage)
|
||||
{
|
||||
if (mToPrinter) {
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsDeviceContextSpecQt::EndDocument()
|
||||
{
|
||||
if (mToPrinter) {
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
// Handle print-to-file ourselves for the benefit of embedders
|
||||
nsXPIDLString targetPath;
|
||||
nsCOMPtr<nsILocalFile> destFile;
|
||||
mPrintSettings->GetToFileName(getter_Copies(targetPath));
|
||||
|
||||
nsresult rv = NS_NewNativeLocalFile(NS_ConvertUTF16toUTF8(targetPath),
|
||||
PR_FALSE, getter_AddRefs(destFile));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsAutoString destLeafName;
|
||||
rv = destFile->GetLeafName(destLeafName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIFile> destDir;
|
||||
rv = destFile->GetParent(getter_AddRefs(destDir));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = mSpoolFile->MoveTo(destDir, destLeafName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// This is the standard way to get the UNIX umask. Ugh.
|
||||
mode_t mask = umask(0);
|
||||
umask(mask);
|
||||
// If you're not familiar with umasks, they contain the bits of what NOT
|
||||
// to set in the permissions
|
||||
// (thats because files and directories have different numbers of bits
|
||||
// for their permissions)
|
||||
destFile->SetPermissions(0666 & ~(mask));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Printer Enumerator
|
||||
nsPrinterEnumeratorQt::nsPrinterEnumeratorQt()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS1(nsPrinterEnumeratorQt, nsIPrinterEnumerator)
|
||||
|
||||
NS_IMETHODIMP nsPrinterEnumeratorQt::GetPrinterNameList(
|
||||
nsIStringEnumerator** aPrinterNameList)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aPrinterNameList);
|
||||
*aPrinterNameList = nsnull;
|
||||
|
||||
QList<QPrinterInfo> qprinters = QPrinterInfo::availablePrinters();
|
||||
if (qprinters.size() == 0)
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
|
||||
nsTArray<nsString>* printers =
|
||||
new nsTArray<nsString>(qprinters.size());
|
||||
|
||||
for (PRInt32 i = 0; i < qprinters.size(); ++i) {
|
||||
printers->AppendElement(
|
||||
nsDependentString(
|
||||
(const PRUnichar*)qprinters[i].printerName().constData()));
|
||||
}
|
||||
|
||||
return NS_NewAdoptingStringEnumerator(aPrinterNameList, printers);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsPrinterEnumeratorQt::GetDefaultPrinterName(
|
||||
PRUnichar** aDefaultPrinterName)
|
||||
{
|
||||
DO_PR_DEBUG_LOG(("nsPrinterEnumeratorQt::GetDefaultPrinterName()\n"));
|
||||
NS_ENSURE_ARG_POINTER(aDefaultPrinterName);
|
||||
|
||||
QString defprinter = QPrinterInfo::defaultPrinter().printerName();
|
||||
*aDefaultPrinterName = ToNewUnicode(nsDependentString(
|
||||
(const PRUnichar*)defprinter.constData()));
|
||||
|
||||
DO_PR_DEBUG_LOG(("GetDefaultPrinterName(): default printer='%s'.\n",
|
||||
NS_ConvertUTF16toUTF8(*aDefaultPrinterName).get()));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsPrinterEnumeratorQt::InitPrintSettingsFromPrinter(
|
||||
const PRUnichar* aPrinterName,
|
||||
nsIPrintSettings* aPrintSettings)
|
||||
{
|
||||
DO_PR_DEBUG_LOG(("nsPrinterEnumeratorQt::InitPrintSettingsFromPrinter()"));
|
||||
// XXX Leave NS_OK for now
|
||||
// Probably should use NS_ERROR_NOT_IMPLEMENTED
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsPrinterEnumeratorQt::DisplayPropertiesDlg(
|
||||
const PRUnichar* aPrinter,
|
||||
nsIPrintSettings* aPrintSettings)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** 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):
|
||||
* Roland Mainz <roland.mainz@informatik.med.uni-giessen.de>
|
||||
* Florian Hänel <heeen@gmx.de>
|
||||
*
|
||||
* 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"),
|
||||
* 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 nsDeviceContextSpecQt_h___
|
||||
#define nsDeviceContextSpecQt_h___
|
||||
|
||||
#include "nsIDeviceContextSpec.h"
|
||||
#include "nsIPrintSettings.h"
|
||||
#include "nsIPrintOptions.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
|
||||
#include "nsCRT.h" /* should be <limits.h>? */
|
||||
|
||||
class nsDeviceContextSpecQt : public nsIDeviceContextSpec
|
||||
{
|
||||
public:
|
||||
nsDeviceContextSpecQt();
|
||||
virtual ~nsDeviceContextSpecQt();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_IMETHOD GetSurfaceForPrinter(gfxASurface** surface);
|
||||
|
||||
NS_IMETHOD Init(nsIWidget* aWidget,
|
||||
nsIPrintSettings* aPS,
|
||||
PRBool aIsPrintPreview);
|
||||
NS_IMETHOD BeginDocument(PRUnichar* aTitle,
|
||||
PRUnichar* aPrintToFileName,
|
||||
PRInt32 aStartPage,
|
||||
PRInt32 aEndPage);
|
||||
NS_IMETHOD EndDocument();
|
||||
NS_IMETHOD BeginPage() { return NS_OK; }
|
||||
NS_IMETHOD EndPage() { return NS_OK; }
|
||||
|
||||
NS_IMETHOD GetPath (const char** aPath);
|
||||
|
||||
protected:
|
||||
nsCOMPtr<nsIPrintSettings> mPrintSettings;
|
||||
PRPackedBool mToPrinter : 1; /* If PR_TRUE, print to printer */
|
||||
PRPackedBool mIsPPreview : 1; /* If PR_TRUE, is print preview */
|
||||
char mPath[PATH_MAX]; /* If toPrinter = PR_FALSE, dest file */
|
||||
char mPrinter[256]; /* Printer name */
|
||||
nsCString mSpoolName;
|
||||
nsCOMPtr<nsILocalFile> mSpoolFile;
|
||||
};
|
||||
|
||||
class nsPrinterEnumeratorQt : public nsIPrinterEnumerator
|
||||
{
|
||||
public:
|
||||
nsPrinterEnumeratorQt();
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIPRINTERENUMERATOR
|
||||
};
|
||||
|
||||
#endif /* !nsDeviceContextSpecQt_h___ */
|
|
@ -0,0 +1,77 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** 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 GTK2 print dialog interface.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Kenneth Herron <kherron@fmailbox.com>
|
||||
* Portions created by the Initial Developer are Copyright (C) 2007
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Michael Ventnor <m.ventnor@gmail.com>
|
||||
* Florian Hänel <heeen@gmx.de>
|
||||
*
|
||||
* 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 "nsPrintSettingsQt.h"
|
||||
#include "nsPrintDialogQt.h"
|
||||
|
||||
// For Qt, we only support printing to PDF, and that doesn't need a
|
||||
// print dialog at this point. So, this class's methods are left
|
||||
// un-implemented for now.
|
||||
|
||||
NS_IMPL_ISUPPORTS1(nsPrintDialogServiceQt, nsIPrintDialogService)
|
||||
|
||||
nsPrintDialogServiceQt::nsPrintDialogServiceQt()
|
||||
{
|
||||
}
|
||||
|
||||
nsPrintDialogServiceQt::~nsPrintDialogServiceQt()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintDialogServiceQt::Init()
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintDialogServiceQt::Show(nsIDOMWindow* aParent,
|
||||
nsIPrintSettings* aSettings,
|
||||
nsIWebBrowserPrint* aWebBrowserPrint)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintDialogServiceQt::ShowPageSetup(nsIDOMWindow* aParent,
|
||||
nsIPrintSettings* aNSSettings)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** 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 GTK2 print dialog interface.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Kenneth Herron <kherron@fmailbox.com>
|
||||
* Portions created by the Initial Developer are Copyright (C) 2007
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Florian Hänel <heeen@gmx.de>
|
||||
*
|
||||
* 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 nsPrintDialogQt_h__
|
||||
#define nsPrintDialogQt_h__
|
||||
|
||||
#include "nsIPrintDialogService.h"
|
||||
|
||||
class nsIPrintSettings;
|
||||
|
||||
class nsPrintDialogServiceQt : public nsIPrintDialogService
|
||||
{
|
||||
public:
|
||||
nsPrintDialogServiceQt();
|
||||
virtual ~nsPrintDialogServiceQt();
|
||||
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_IMETHODIMP Init();
|
||||
NS_IMETHODIMP Show(nsIDOMWindow* aParent,
|
||||
nsIPrintSettings* aSettings,
|
||||
nsIWebBrowserPrint* aWebBrowserPrint);
|
||||
NS_IMETHODIMP ShowPageSetup(nsIDOMWindow* aParent,
|
||||
nsIPrintSettings* aSettings);
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,56 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** 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):
|
||||
* Florian Hänel <heeen@gmx.de>
|
||||
*
|
||||
* 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"),
|
||||
* 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 "nsPrintSettingsQt.h"
|
||||
#include "nsPrintOptionsQt.h"
|
||||
|
||||
nsPrintOptionsQt::nsPrintOptionsQt()
|
||||
{
|
||||
}
|
||||
|
||||
nsPrintOptionsQt::~nsPrintOptionsQt()
|
||||
{
|
||||
}
|
||||
|
||||
nsresult nsPrintOptionsQt::_CreatePrintSettings(nsIPrintSettings** _retval)
|
||||
{
|
||||
nsPrintSettingsQt* printSettings =
|
||||
new nsPrintSettingsQt(); // does not initially ref count
|
||||
NS_ADDREF(*_retval = printSettings); // ref count
|
||||
return NS_OK;
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** 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 browser.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications, Inc.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Travis Bogard <travis@netscape.com>
|
||||
* Florian Hänel <heeen@gmx.de>
|
||||
*
|
||||
* 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"),
|
||||
* 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 nsPrintOptionsQt_h__
|
||||
#define nsPrintOptionsQt_h__
|
||||
|
||||
#include "nsPrintOptionsImpl.h"
|
||||
|
||||
class nsPrintOptionsQt : public nsPrintOptions
|
||||
{
|
||||
public:
|
||||
nsPrintOptionsQt();
|
||||
virtual ~nsPrintOptionsQt();
|
||||
virtual nsresult _CreatePrintSettings(nsIPrintSettings** _retval);
|
||||
};
|
||||
|
||||
#endif /* nsPrintOptionsQt_h__ */
|
|
@ -0,0 +1,466 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** 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 Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2008
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Michael Ventnor <m.ventnor@gmail.com>
|
||||
* Florian Hänel <heeen@gmx.de>
|
||||
*
|
||||
* 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"),
|
||||
* 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 <QPrinter>
|
||||
#include <QDebug>
|
||||
#include "nsPrintSettingsQt.h"
|
||||
#include "nsILocalFile.h"
|
||||
#include "nsCRTGlue.h"
|
||||
|
||||
NS_IMPL_ISUPPORTS_INHERITED1(nsPrintSettingsQt,
|
||||
nsPrintSettings,
|
||||
nsPrintSettingsQt)
|
||||
|
||||
nsPrintSettingsQt::nsPrintSettingsQt():
|
||||
mQPrinter(new QPrinter())
|
||||
{
|
||||
}
|
||||
|
||||
nsPrintSettingsQt::~nsPrintSettingsQt()
|
||||
{
|
||||
//smart pointer should take care of cleanup
|
||||
}
|
||||
|
||||
nsPrintSettingsQt::nsPrintSettingsQt(const nsPrintSettingsQt& aPS):
|
||||
mQPrinter(aPS.mQPrinter)
|
||||
{
|
||||
}
|
||||
|
||||
nsPrintSettingsQt&
|
||||
nsPrintSettingsQt::operator=(const nsPrintSettingsQt& rhs)
|
||||
{
|
||||
if (this == &rhs) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
nsPrintSettings::operator=(rhs);
|
||||
mQPrinter = rhs.mQPrinter;
|
||||
return *this;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsPrintSettingsQt::_Clone(nsIPrintSettings** _retval)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(_retval);
|
||||
|
||||
nsPrintSettingsQt* newSettings = new nsPrintSettingsQt(*this);
|
||||
*_retval = newSettings;
|
||||
NS_ADDREF(*_retval);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::_Assign(nsIPrintSettings* aPS)
|
||||
{
|
||||
nsPrintSettingsQt* printSettingsQt = static_cast<nsPrintSettingsQt*>(aPS);
|
||||
if (!printSettingsQt)
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
*this = *printSettingsQt;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetPrintRange(PRInt16* aPrintRange)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aPrintRange);
|
||||
|
||||
QPrinter::PrintRange range = mQPrinter->printRange();
|
||||
if (range == QPrinter::PageRange) {
|
||||
*aPrintRange = kRangeSpecifiedPageRange;
|
||||
} else if (range == QPrinter::Selection) {
|
||||
*aPrintRange = kRangeSelection;
|
||||
} else {
|
||||
*aPrintRange = kRangeAllPages;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetPrintRange(PRInt16 aPrintRange)
|
||||
{
|
||||
if (aPrintRange == kRangeSelection) {
|
||||
mQPrinter->setPrintRange(QPrinter::Selection);
|
||||
} else if (aPrintRange == kRangeSpecifiedPageRange) {
|
||||
mQPrinter->setPrintRange(QPrinter::PageRange);
|
||||
} else {
|
||||
mQPrinter->setPrintRange(QPrinter::AllPages);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetStartPageRange(PRInt32* aStartPageRange)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aStartPageRange);
|
||||
PRInt32 start = mQPrinter->fromPage();
|
||||
*aStartPageRange = start;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetStartPageRange(PRInt32 aStartPageRange)
|
||||
{
|
||||
PRInt32 endRange = mQPrinter->toPage();
|
||||
mQPrinter->setFromTo(aStartPageRange, endRange);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetEndPageRange(PRInt32* aEndPageRange)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aEndPageRange);
|
||||
PRInt32 end = mQPrinter->toPage();
|
||||
*aEndPageRange = end;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetEndPageRange(PRInt32 aEndPageRange)
|
||||
{
|
||||
PRInt32 startRange = mQPrinter->fromPage();
|
||||
mQPrinter->setFromTo(startRange, aEndPageRange);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetPrintReversed(PRBool* aPrintReversed)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aPrintReversed);
|
||||
if (mQPrinter->pageOrder() == QPrinter::LastPageFirst) {
|
||||
*aPrintReversed = PR_TRUE;
|
||||
} else {
|
||||
*aPrintReversed = PR_FALSE;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetPrintReversed(PRBool aPrintReversed)
|
||||
{
|
||||
if (aPrintReversed) {
|
||||
mQPrinter->setPageOrder(QPrinter::LastPageFirst);
|
||||
} else {
|
||||
mQPrinter->setPageOrder(QPrinter::FirstPageFirst);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetPrintInColor(PRBool* aPrintInColor)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aPrintInColor);
|
||||
if (mQPrinter->colorMode() == QPrinter::Color) {
|
||||
*aPrintInColor = PR_TRUE;
|
||||
} else {
|
||||
*aPrintInColor = PR_FALSE;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetPrintInColor(PRBool aPrintInColor)
|
||||
{
|
||||
if (aPrintInColor) {
|
||||
mQPrinter->setColorMode(QPrinter::Color);
|
||||
} else {
|
||||
mQPrinter->setColorMode(QPrinter::GrayScale);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetOrientation(PRInt32* aOrientation)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aOrientation);
|
||||
QPrinter::Orientation orientation = mQPrinter->orientation();
|
||||
if (orientation == QPrinter::Landscape) {
|
||||
*aOrientation = kLandscapeOrientation;
|
||||
} else {
|
||||
*aOrientation = kPortraitOrientation;
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetOrientation(PRInt32 aOrientation)
|
||||
{
|
||||
if (aOrientation == kLandscapeOrientation) {
|
||||
mQPrinter->setOrientation(QPrinter::Landscape);
|
||||
} else {
|
||||
mQPrinter->setOrientation(QPrinter::Portrait);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetToFileName(PRUnichar** aToFileName)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aToFileName);
|
||||
QString filename;
|
||||
filename = mQPrinter->outputFileName();
|
||||
*aToFileName = ToNewUnicode(
|
||||
nsDependentString((PRUnichar*)filename.data()));
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetToFileName(const PRUnichar* aToFileName)
|
||||
{
|
||||
nsCOMPtr<nsILocalFile> file;
|
||||
nsresult rv = NS_NewLocalFile(nsDependentString(aToFileName), PR_TRUE,
|
||||
getter_AddRefs(file));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
QString filename((const QChar*)aToFileName, NS_strlen(aToFileName));
|
||||
mQPrinter->setOutputFileName(filename);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetPrinterName(PRUnichar** aPrinter)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aPrinter);
|
||||
*aPrinter = ToNewUnicode(nsDependentString(
|
||||
(const PRUnichar*)mQPrinter->printerName().constData()));
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetPrinterName(const PRUnichar* aPrinter)
|
||||
{
|
||||
QString printername((const QChar*)aPrinter, NS_strlen(aPrinter));
|
||||
mQPrinter->setPrinterName(printername);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetNumCopies(PRInt32* aNumCopies)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aNumCopies);
|
||||
*aNumCopies = mQPrinter->numCopies();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetNumCopies(PRInt32 aNumCopies)
|
||||
{
|
||||
mQPrinter->setNumCopies(aNumCopies);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetScaling(double* aScaling)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aScaling);
|
||||
qDebug()<<Q_FUNC_INFO;
|
||||
qDebug()<<"Scaling not implemented in Qt port";
|
||||
*aScaling = 1.0; //FIXME
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetScaling(double aScaling)
|
||||
{
|
||||
qDebug()<<Q_FUNC_INFO;
|
||||
qDebug()<<"Scaling not implemented in Qt port"; //FIXME
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
static const char* const indexToPaperName[] =
|
||||
{ "A4", "B5", "Letter", "Legal", "Executive",
|
||||
"A0", "A1", "A2", "A3", "A5", "A6", "A7", "A8", "A9",
|
||||
"B0", "B1", "B10", "B2", "B3", "B4", "B6", "B7", "B8", "B9",
|
||||
"C5E", "Comm10E", "DLE", "Folio", "Ledger", "Tabloid"
|
||||
};
|
||||
|
||||
static const QPrinter::PageSize indexToQtPaperEnum[] =
|
||||
{
|
||||
QPrinter::A4, QPrinter::B5, QPrinter::Letter, QPrinter::Legal,
|
||||
QPrinter::Executive, QPrinter::A0, QPrinter::A1, QPrinter::A2, QPrinter::A3,
|
||||
QPrinter::A5, QPrinter::A6, QPrinter::A7, QPrinter::A8, QPrinter::A9,
|
||||
QPrinter::B0, QPrinter::B1, QPrinter::B10, QPrinter::B2, QPrinter::B3,
|
||||
QPrinter::B4, QPrinter::B6, QPrinter::B7, QPrinter::B8, QPrinter::B9,
|
||||
QPrinter::C5E, QPrinter::Comm10E, QPrinter::DLE, QPrinter::Folio,
|
||||
QPrinter::Ledger, QPrinter::Tabloid
|
||||
};
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetPaperName(PRUnichar** aPaperName)
|
||||
{
|
||||
PR_STATIC_ASSERT(sizeof(indexToPaperName)/
|
||||
sizeof(char*) == QPrinter::NPageSize);
|
||||
PR_STATIC_ASSERT(sizeof(indexToQtPaperEnum)/
|
||||
sizeof(QPrinter::PageSize) == QPrinter::NPageSize);
|
||||
|
||||
QPrinter::PaperSize size = mQPrinter->paperSize();
|
||||
QString name(indexToPaperName[size]);
|
||||
*aPaperName = ToNewUnicode(nsDependentString
|
||||
((const PRUnichar*)name.constData()));
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetPaperName(const PRUnichar* aPaperName)
|
||||
{
|
||||
QString ref((QChar*)aPaperName, NS_strlen(aPaperName));
|
||||
for (PRUint32 i = 0; i < QPrinter::NPageSize; i++)
|
||||
{
|
||||
if (ref == QString(indexToPaperName[i])) {
|
||||
mQPrinter->setPageSize(indexToQtPaperEnum[i]);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
QPrinter::Unit GetQtUnit(PRInt16 aGeckoUnit)
|
||||
{
|
||||
if (aGeckoUnit == nsIPrintSettings::kPaperSizeMillimeters) {
|
||||
return QPrinter::Millimeter;
|
||||
} else {
|
||||
return QPrinter::Inch;
|
||||
}
|
||||
}
|
||||
|
||||
#define SETUNWRITEABLEMARGIN\
|
||||
mQPrinter->setPageMargins(\
|
||||
NS_TWIPS_TO_INCHES(mUnwriteableMargin.left),\
|
||||
NS_TWIPS_TO_INCHES(mUnwriteableMargin.top),\
|
||||
NS_TWIPS_TO_INCHES(mUnwriteableMargin.right),\
|
||||
NS_TWIPS_TO_INCHES(mUnwriteableMargin.bottom),\
|
||||
QPrinter::Inch);
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetUnwriteableMarginInTwips(nsIntMargin& aUnwriteableMargin)
|
||||
{
|
||||
nsPrintSettings::SetUnwriteableMarginInTwips(aUnwriteableMargin);
|
||||
SETUNWRITEABLEMARGIN
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetUnwriteableMarginTop(double aUnwriteableMarginTop)
|
||||
{
|
||||
nsPrintSettings::SetUnwriteableMarginTop(aUnwriteableMarginTop);
|
||||
SETUNWRITEABLEMARGIN
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetUnwriteableMarginLeft(double aUnwriteableMarginLeft)
|
||||
{
|
||||
nsPrintSettings::SetUnwriteableMarginLeft(aUnwriteableMarginLeft);
|
||||
SETUNWRITEABLEMARGIN
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetUnwriteableMarginBottom(double aUnwriteableMarginBottom)
|
||||
{
|
||||
nsPrintSettings::SetUnwriteableMarginBottom(aUnwriteableMarginBottom);
|
||||
SETUNWRITEABLEMARGIN
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetUnwriteableMarginRight(double aUnwriteableMarginRight)
|
||||
{
|
||||
nsPrintSettings::SetUnwriteableMarginRight(aUnwriteableMarginRight);
|
||||
SETUNWRITEABLEMARGIN
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetPaperWidth(double* aPaperWidth)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aPaperWidth);
|
||||
QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit));
|
||||
*aPaperWidth = papersize.width();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetPaperWidth(double aPaperWidth)
|
||||
{
|
||||
QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit));
|
||||
papersize.setWidth(aPaperWidth);
|
||||
mQPrinter->setPaperSize(papersize, GetQtUnit(mPaperSizeUnit));
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetPaperHeight(double* aPaperHeight)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aPaperHeight);
|
||||
QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit));
|
||||
*aPaperHeight = papersize.height();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetPaperHeight(double aPaperHeight)
|
||||
{
|
||||
QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit));
|
||||
papersize.setHeight(aPaperHeight);
|
||||
mQPrinter->setPaperSize(papersize, GetQtUnit(mPaperSizeUnit));
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::SetPaperSizeUnit(PRInt16 aPaperSizeUnit)
|
||||
{
|
||||
mPaperSizeUnit = aPaperSizeUnit;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsPrintSettingsQt::GetEffectivePageSize(double* aWidth, double* aHeight)
|
||||
{
|
||||
QSizeF papersize = mQPrinter->paperSize(QPrinter::Inch);
|
||||
if (mQPrinter->orientation() == QPrinter::Landscape) {
|
||||
*aWidth = NS_INCHES_TO_INT_TWIPS(papersize.height());
|
||||
*aHeight = NS_INCHES_TO_INT_TWIPS(papersize.width());
|
||||
} else {
|
||||
*aWidth = NS_INCHES_TO_INT_TWIPS(papersize.width());
|
||||
*aHeight = NS_INCHES_TO_INT_TWIPS(papersize.height());
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* ***** 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 browser.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2008
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Michael Ventnor <m.ventnor@gmail.com>
|
||||
* Florian Hänel <heeen@gmx.de>
|
||||
*
|
||||
* 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"),
|
||||
* 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 nsPrintSettingsQt_h_
|
||||
#define nsPrintSettingsQt_h_
|
||||
|
||||
#include <QSharedPointer>
|
||||
#include "nsPrintSettingsImpl.h"
|
||||
#define NS_PRINTSETTINGSQT_IID \
|
||||
{0x5bc4c746, 0x8970, 0x43a3, {0xbf, 0xb1, 0x5d, 0xe1, 0x74, 0xaf, 0x7c, 0xea}}
|
||||
|
||||
class QPrinter;
|
||||
class nsPrintSettingsQt : public nsPrintSettings
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECLARE_STATIC_IID_ACCESSOR(NS_PRINTSETTINGSQT_IID)
|
||||
|
||||
nsPrintSettingsQt();
|
||||
virtual ~nsPrintSettingsQt();
|
||||
|
||||
NS_IMETHOD GetPrintRange(PRInt16* aPrintRange);
|
||||
NS_IMETHOD SetPrintRange(PRInt16 aPrintRange);
|
||||
|
||||
NS_IMETHOD GetStartPageRange(PRInt32* aStartPageRange);
|
||||
NS_IMETHOD SetStartPageRange(PRInt32 aStartPageRange);
|
||||
NS_IMETHOD GetEndPageRange(PRInt32* aEndPageRange);
|
||||
NS_IMETHOD SetEndPageRange(PRInt32 aEndPageRange);
|
||||
|
||||
NS_IMETHOD GetPrintReversed(PRBool* aPrintReversed);
|
||||
NS_IMETHOD SetPrintReversed(PRBool aPrintReversed);
|
||||
|
||||
NS_IMETHOD GetPrintInColor(PRBool* aPrintInColor);
|
||||
NS_IMETHOD SetPrintInColor(PRBool aPrintInColor);
|
||||
|
||||
NS_IMETHOD GetOrientation(PRInt32* aOrientation);
|
||||
NS_IMETHOD SetOrientation(PRInt32 aOrientation);
|
||||
|
||||
NS_IMETHOD GetToFileName(PRUnichar** aToFileName);
|
||||
NS_IMETHOD SetToFileName(const PRUnichar* aToFileName);
|
||||
|
||||
NS_IMETHOD GetPrinterName(PRUnichar** aPrinter);
|
||||
NS_IMETHOD SetPrinterName(const PRUnichar* aPrinter);
|
||||
|
||||
NS_IMETHOD GetNumCopies(PRInt32* aNumCopies);
|
||||
NS_IMETHOD SetNumCopies(PRInt32 aNumCopies);
|
||||
|
||||
NS_IMETHOD GetScaling(double* aScaling);
|
||||
NS_IMETHOD SetScaling(double aScaling);
|
||||
|
||||
NS_IMETHOD GetPaperName(PRUnichar** aPaperName);
|
||||
NS_IMETHOD SetPaperName(const PRUnichar* aPaperName);
|
||||
|
||||
NS_IMETHOD SetUnwriteableMarginInTwips(nsIntMargin& aUnwriteableMargin);
|
||||
NS_IMETHOD SetUnwriteableMarginTop(double aUnwriteableMarginTop);
|
||||
NS_IMETHOD SetUnwriteableMarginLeft(double aUnwriteableMarginLeft);
|
||||
NS_IMETHOD SetUnwriteableMarginBottom(double aUnwriteableMarginBottom);
|
||||
NS_IMETHOD SetUnwriteableMarginRight(double aUnwriteableMarginRight);
|
||||
|
||||
NS_IMETHOD GetPaperWidth(double* aPaperWidth);
|
||||
NS_IMETHOD SetPaperWidth(double aPaperWidth);
|
||||
|
||||
NS_IMETHOD GetPaperHeight(double* aPaperHeight);
|
||||
NS_IMETHOD SetPaperHeight(double aPaperHeight);
|
||||
|
||||
NS_IMETHOD SetPaperSizeUnit(PRInt16 aPaperSizeUnit);
|
||||
|
||||
NS_IMETHOD GetEffectivePageSize(double* aWidth, double* aHeight);
|
||||
|
||||
protected:
|
||||
nsPrintSettingsQt(const nsPrintSettingsQt& src);
|
||||
nsPrintSettingsQt& operator=(const nsPrintSettingsQt& rhs);
|
||||
|
||||
virtual nsresult _Clone(nsIPrintSettings** _retval);
|
||||
virtual nsresult _Assign(nsIPrintSettings* aPS);
|
||||
|
||||
QSharedPointer<QPrinter> mQPrinter;
|
||||
};
|
||||
|
||||
NS_DEFINE_STATIC_IID_ACCESSOR(nsPrintSettingsQt, NS_PRINTSETTINGSQT_IID)
|
||||
#endif // nsPrintSettingsQt_h_
|
|
@ -61,7 +61,12 @@
|
|||
#include "nsSound.h"
|
||||
#include "nsBidiKeyboard.h"
|
||||
#include "nsNativeThemeQt.h"
|
||||
|
||||
#ifdef NS_PRINTING
|
||||
#include "nsDeviceContextSpecQt.h"
|
||||
#include "nsPrintSession.h"
|
||||
#include "nsPrintOptionsQt.h"
|
||||
#include "nsPrintDialogQt.h"
|
||||
#endif
|
||||
// from nsWindow.cpp
|
||||
extern PRBool gDisableNativeTheme;
|
||||
|
||||
|
@ -81,6 +86,14 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsIdleServiceQt)
|
|||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSound)
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsFilePicker)
|
||||
|
||||
#ifdef NS_PRINTING
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceContextSpecQt)
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintOptionsQt, Init)
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsPrinterEnumeratorQt)
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintSession, Init)
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPrintDialogServiceQt, Init)
|
||||
#endif
|
||||
|
||||
static nsresult
|
||||
nsNativeThemeQtConstructor(nsISupports *aOuter, REFNSIID aIID,
|
||||
void **aResult)
|
||||
|
@ -123,6 +136,13 @@ NS_DEFINE_NAMED_CID(NS_THEMERENDERER_CID);
|
|||
NS_DEFINE_NAMED_CID(NS_IDLE_SERVICE_CID);
|
||||
NS_DEFINE_NAMED_CID(NS_POPUP_CID);
|
||||
NS_DEFINE_NAMED_CID(NS_TOOLKIT_CID);
|
||||
#ifdef NS_PRINTING
|
||||
NS_DEFINE_NAMED_CID(NS_PRINTSETTINGSSERVICE_CID);
|
||||
NS_DEFINE_NAMED_CID(NS_PRINTER_ENUMERATOR_CID);
|
||||
NS_DEFINE_NAMED_CID(NS_PRINTSESSION_CID);
|
||||
NS_DEFINE_NAMED_CID(NS_DEVICE_CONTEXT_SPEC_CID);
|
||||
NS_DEFINE_NAMED_CID(NS_PRINTDIALOGSERVICE_CID);
|
||||
#endif
|
||||
|
||||
static const mozilla::Module::CIDEntry kWidgetCIDs[] = {
|
||||
{ &kNS_WINDOW_CID, false, NULL, nsWindowConstructor },
|
||||
|
@ -142,6 +162,13 @@ static const mozilla::Module::CIDEntry kWidgetCIDs[] = {
|
|||
{ &kNS_IDLE_SERVICE_CID, false, NULL, nsIdleServiceQtConstructor },
|
||||
{ &kNS_POPUP_CID, false, NULL, nsPopupWindowConstructor },
|
||||
{ &kNS_TOOLKIT_CID, false, NULL, nsToolkitConstructor },
|
||||
#ifdef NS_PRINTING
|
||||
{ &kNS_PRINTSETTINGSSERVICE_CID, false, NULL, nsPrintOptionsQtConstructor },
|
||||
{ &kNS_PRINTER_ENUMERATOR_CID, false, NULL, nsPrinterEnumeratorQtConstructor },
|
||||
{ &kNS_PRINTSESSION_CID, false, NULL, nsPrintSessionConstructor },
|
||||
{ &kNS_DEVICE_CONTEXT_SPEC_CID, false, NULL, nsDeviceContextSpecQtConstructor },
|
||||
{ &kNS_PRINTDIALOGSERVICE_CID, false, NULL, nsPrintDialogServiceQtConstructor },
|
||||
#endif
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
|
@ -163,6 +190,13 @@ static const mozilla::Module::ContractIDEntry kWidgetContracts[] = {
|
|||
{ "@mozilla.org/widget/idleservice;1", &kNS_IDLE_SERVICE_CID },
|
||||
{ "@mozilla.org/widgets/popup_window/qt;1", &kNS_POPUP_CID },
|
||||
{ "@mozilla.org/widget/toolkit/qt;1", &kNS_TOOLKIT_CID },
|
||||
#ifdef NS_PRINTING
|
||||
{ "@mozilla.org/gfx/printsettings-service;1", &kNS_PRINTSETTINGSSERVICE_CID },
|
||||
{ "@mozilla.org/gfx/printerenumerator;1", &kNS_PRINTER_ENUMERATOR_CID },
|
||||
{ "@mozilla.org/gfx/printsession;1", &kNS_PRINTSESSION_CID },
|
||||
{ "@mozilla.org/gfx/devicecontextspec;1", &kNS_DEVICE_CONTEXT_SPEC_CID },
|
||||
{ NS_PRINTDIALOGSERVICE_CONTRACTID, &kNS_PRINTDIALOGSERVICE_CID },
|
||||
#endif
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче