michael@0: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- michael@0: * michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include michael@0: #include michael@0: #include "nsPrintSettingsQt.h" michael@0: #include "nsIFile.h" michael@0: #include "nsCRTGlue.h" michael@0: michael@0: NS_IMPL_ISUPPORTS_INHERITED(nsPrintSettingsQt, michael@0: nsPrintSettings, michael@0: nsPrintSettingsQt) michael@0: michael@0: nsPrintSettingsQt::nsPrintSettingsQt(): michael@0: mQPrinter(new QPrinter()) michael@0: { michael@0: } michael@0: michael@0: nsPrintSettingsQt::~nsPrintSettingsQt() michael@0: { michael@0: //smart pointer should take care of cleanup michael@0: } michael@0: michael@0: nsPrintSettingsQt::nsPrintSettingsQt(const nsPrintSettingsQt& aPS): michael@0: mQPrinter(aPS.mQPrinter) michael@0: { michael@0: } michael@0: michael@0: nsPrintSettingsQt& michael@0: nsPrintSettingsQt::operator=(const nsPrintSettingsQt& rhs) michael@0: { michael@0: if (this == &rhs) { michael@0: return *this; michael@0: } michael@0: michael@0: nsPrintSettings::operator=(rhs); michael@0: mQPrinter = rhs.mQPrinter; michael@0: return *this; michael@0: } michael@0: michael@0: nsresult michael@0: nsPrintSettingsQt::_Clone(nsIPrintSettings** _retval) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(_retval); michael@0: michael@0: nsPrintSettingsQt* newSettings = new nsPrintSettingsQt(*this); michael@0: *_retval = newSettings; michael@0: NS_ADDREF(*_retval); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::_Assign(nsIPrintSettings* aPS) michael@0: { michael@0: nsPrintSettingsQt* printSettingsQt = static_cast(aPS); michael@0: if (!printSettingsQt) michael@0: return NS_ERROR_UNEXPECTED; michael@0: *this = *printSettingsQt; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetPrintRange(int16_t* aPrintRange) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(aPrintRange); michael@0: michael@0: QPrinter::PrintRange range = mQPrinter->printRange(); michael@0: if (range == QPrinter::PageRange) { michael@0: *aPrintRange = kRangeSpecifiedPageRange; michael@0: } else if (range == QPrinter::Selection) { michael@0: *aPrintRange = kRangeSelection; michael@0: } else { michael@0: *aPrintRange = kRangeAllPages; michael@0: } michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetPrintRange(int16_t aPrintRange) michael@0: { michael@0: if (aPrintRange == kRangeSelection) { michael@0: mQPrinter->setPrintRange(QPrinter::Selection); michael@0: } else if (aPrintRange == kRangeSpecifiedPageRange) { michael@0: mQPrinter->setPrintRange(QPrinter::PageRange); michael@0: } else { michael@0: mQPrinter->setPrintRange(QPrinter::AllPages); michael@0: } michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetStartPageRange(int32_t* aStartPageRange) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(aStartPageRange); michael@0: int32_t start = mQPrinter->fromPage(); michael@0: *aStartPageRange = start; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetStartPageRange(int32_t aStartPageRange) michael@0: { michael@0: int32_t endRange = mQPrinter->toPage(); michael@0: mQPrinter->setFromTo(aStartPageRange, endRange); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetEndPageRange(int32_t* aEndPageRange) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(aEndPageRange); michael@0: int32_t end = mQPrinter->toPage(); michael@0: *aEndPageRange = end; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetEndPageRange(int32_t aEndPageRange) michael@0: { michael@0: int32_t startRange = mQPrinter->fromPage(); michael@0: mQPrinter->setFromTo(startRange, aEndPageRange); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetPrintReversed(bool* aPrintReversed) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(aPrintReversed); michael@0: if (mQPrinter->pageOrder() == QPrinter::LastPageFirst) { michael@0: *aPrintReversed = true; michael@0: } else { michael@0: *aPrintReversed = false; michael@0: } michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetPrintReversed(bool aPrintReversed) michael@0: { michael@0: if (aPrintReversed) { michael@0: mQPrinter->setPageOrder(QPrinter::LastPageFirst); michael@0: } else { michael@0: mQPrinter->setPageOrder(QPrinter::FirstPageFirst); michael@0: } michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetPrintInColor(bool* aPrintInColor) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(aPrintInColor); michael@0: if (mQPrinter->colorMode() == QPrinter::Color) { michael@0: *aPrintInColor = true; michael@0: } else { michael@0: *aPrintInColor = false; michael@0: } michael@0: return NS_OK; michael@0: } michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetPrintInColor(bool aPrintInColor) michael@0: { michael@0: if (aPrintInColor) { michael@0: mQPrinter->setColorMode(QPrinter::Color); michael@0: } else { michael@0: mQPrinter->setColorMode(QPrinter::GrayScale); michael@0: } michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetOrientation(int32_t* aOrientation) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(aOrientation); michael@0: QPrinter::Orientation orientation = mQPrinter->orientation(); michael@0: if (orientation == QPrinter::Landscape) { michael@0: *aOrientation = kLandscapeOrientation; michael@0: } else { michael@0: *aOrientation = kPortraitOrientation; michael@0: } michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetOrientation(int32_t aOrientation) michael@0: { michael@0: if (aOrientation == kLandscapeOrientation) { michael@0: mQPrinter->setOrientation(QPrinter::Landscape); michael@0: } else { michael@0: mQPrinter->setOrientation(QPrinter::Portrait); michael@0: } michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetToFileName(char16_t** aToFileName) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(aToFileName); michael@0: QString filename; michael@0: filename = mQPrinter->outputFileName(); michael@0: *aToFileName = ToNewUnicode( michael@0: nsDependentString((char16_t*)filename.data())); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetToFileName(const char16_t* aToFileName) michael@0: { michael@0: nsCOMPtr file; michael@0: nsresult rv = NS_NewLocalFile(nsDependentString(aToFileName), true, michael@0: getter_AddRefs(file)); michael@0: NS_ENSURE_SUCCESS(rv, rv); michael@0: michael@0: QString filename((const QChar*)aToFileName, NS_strlen(aToFileName)); michael@0: mQPrinter->setOutputFileName(filename); michael@0: michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetPrinterName(char16_t** aPrinter) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(aPrinter); michael@0: *aPrinter = ToNewUnicode(nsDependentString( michael@0: (const char16_t*)mQPrinter->printerName().constData())); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetPrinterName(const char16_t* aPrinter) michael@0: { michael@0: QString printername((const QChar*)aPrinter, NS_strlen(aPrinter)); michael@0: mQPrinter->setPrinterName(printername); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetNumCopies(int32_t* aNumCopies) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(aNumCopies); michael@0: *aNumCopies = mQPrinter->numCopies(); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetNumCopies(int32_t aNumCopies) michael@0: { michael@0: mQPrinter->setNumCopies(aNumCopies); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetScaling(double* aScaling) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(aScaling); michael@0: qDebug()<paperSize(); michael@0: QString name(indexToPaperName[size]); michael@0: *aPaperName = ToNewUnicode(nsDependentString michael@0: ((const char16_t*)name.constData())); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetPaperName(const char16_t* aPaperName) michael@0: { michael@0: QString ref((QChar*)aPaperName, NS_strlen(aPaperName)); michael@0: for (uint32_t i = 0; i < QPrinter::NPageSize; i++) michael@0: { michael@0: if (ref == QString(indexToPaperName[i])) { michael@0: mQPrinter->setPageSize(indexToQtPaperEnum[i]); michael@0: return NS_OK; michael@0: } michael@0: } michael@0: return NS_ERROR_FAILURE; michael@0: } michael@0: michael@0: QPrinter::Unit GetQtUnit(int16_t aGeckoUnit) michael@0: { michael@0: if (aGeckoUnit == nsIPrintSettings::kPaperSizeMillimeters) { michael@0: return QPrinter::Millimeter; michael@0: } else { michael@0: return QPrinter::Inch; michael@0: } michael@0: } michael@0: michael@0: #define SETUNWRITEABLEMARGIN\ michael@0: mQPrinter->setPageMargins(\ michael@0: NS_TWIPS_TO_INCHES(mUnwriteableMargin.left),\ michael@0: NS_TWIPS_TO_INCHES(mUnwriteableMargin.top),\ michael@0: NS_TWIPS_TO_INCHES(mUnwriteableMargin.right),\ michael@0: NS_TWIPS_TO_INCHES(mUnwriteableMargin.bottom),\ michael@0: QPrinter::Inch); michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetUnwriteableMarginInTwips(nsIntMargin& aUnwriteableMargin) michael@0: { michael@0: nsPrintSettings::SetUnwriteableMarginInTwips(aUnwriteableMargin); michael@0: SETUNWRITEABLEMARGIN michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetUnwriteableMarginTop(double aUnwriteableMarginTop) michael@0: { michael@0: nsPrintSettings::SetUnwriteableMarginTop(aUnwriteableMarginTop); michael@0: SETUNWRITEABLEMARGIN michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetUnwriteableMarginLeft(double aUnwriteableMarginLeft) michael@0: { michael@0: nsPrintSettings::SetUnwriteableMarginLeft(aUnwriteableMarginLeft); michael@0: SETUNWRITEABLEMARGIN michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetUnwriteableMarginBottom(double aUnwriteableMarginBottom) michael@0: { michael@0: nsPrintSettings::SetUnwriteableMarginBottom(aUnwriteableMarginBottom); michael@0: SETUNWRITEABLEMARGIN michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetUnwriteableMarginRight(double aUnwriteableMarginRight) michael@0: { michael@0: nsPrintSettings::SetUnwriteableMarginRight(aUnwriteableMarginRight); michael@0: SETUNWRITEABLEMARGIN michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetPaperWidth(double* aPaperWidth) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(aPaperWidth); michael@0: QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit)); michael@0: *aPaperWidth = papersize.width(); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetPaperWidth(double aPaperWidth) michael@0: { michael@0: QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit)); michael@0: papersize.setWidth(aPaperWidth); michael@0: mQPrinter->setPaperSize(papersize, GetQtUnit(mPaperSizeUnit)); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetPaperHeight(double* aPaperHeight) michael@0: { michael@0: NS_ENSURE_ARG_POINTER(aPaperHeight); michael@0: QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit)); michael@0: *aPaperHeight = papersize.height(); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetPaperHeight(double aPaperHeight) michael@0: { michael@0: QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit)); michael@0: papersize.setHeight(aPaperHeight); michael@0: mQPrinter->setPaperSize(papersize, GetQtUnit(mPaperSizeUnit)); michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::SetPaperSizeUnit(int16_t aPaperSizeUnit) michael@0: { michael@0: mPaperSizeUnit = aPaperSizeUnit; michael@0: return NS_OK; michael@0: } michael@0: michael@0: NS_IMETHODIMP michael@0: nsPrintSettingsQt::GetEffectivePageSize(double* aWidth, double* aHeight) michael@0: { michael@0: QSizeF papersize = mQPrinter->paperSize(QPrinter::Inch); michael@0: if (mQPrinter->orientation() == QPrinter::Landscape) { michael@0: *aWidth = NS_INCHES_TO_INT_TWIPS(papersize.height()); michael@0: *aHeight = NS_INCHES_TO_INT_TWIPS(papersize.width()); michael@0: } else { michael@0: *aWidth = NS_INCHES_TO_INT_TWIPS(papersize.width()); michael@0: *aHeight = NS_INCHES_TO_INT_TWIPS(papersize.height()); michael@0: } michael@0: return NS_OK; michael@0: } michael@0: