diff -r 000000000000 -r 6474c204b198 widget/qt/nsPrintSettingsQt.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/widget/qt/nsPrintSettingsQt.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,433 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include +#include +#include "nsPrintSettingsQt.h" +#include "nsIFile.h" +#include "nsCRTGlue.h" + +NS_IMPL_ISUPPORTS_INHERITED(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(aPS); + if (!printSettingsQt) + return NS_ERROR_UNEXPECTED; + *this = *printSettingsQt; + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::GetPrintRange(int16_t* 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(int16_t 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(int32_t* aStartPageRange) +{ + NS_ENSURE_ARG_POINTER(aStartPageRange); + int32_t start = mQPrinter->fromPage(); + *aStartPageRange = start; + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::SetStartPageRange(int32_t aStartPageRange) +{ + int32_t endRange = mQPrinter->toPage(); + mQPrinter->setFromTo(aStartPageRange, endRange); + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::GetEndPageRange(int32_t* aEndPageRange) +{ + NS_ENSURE_ARG_POINTER(aEndPageRange); + int32_t end = mQPrinter->toPage(); + *aEndPageRange = end; + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::SetEndPageRange(int32_t aEndPageRange) +{ + int32_t startRange = mQPrinter->fromPage(); + mQPrinter->setFromTo(startRange, aEndPageRange); + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::GetPrintReversed(bool* aPrintReversed) +{ + NS_ENSURE_ARG_POINTER(aPrintReversed); + if (mQPrinter->pageOrder() == QPrinter::LastPageFirst) { + *aPrintReversed = true; + } else { + *aPrintReversed = false; + } + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::SetPrintReversed(bool aPrintReversed) +{ + if (aPrintReversed) { + mQPrinter->setPageOrder(QPrinter::LastPageFirst); + } else { + mQPrinter->setPageOrder(QPrinter::FirstPageFirst); + } + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::GetPrintInColor(bool* aPrintInColor) +{ + NS_ENSURE_ARG_POINTER(aPrintInColor); + if (mQPrinter->colorMode() == QPrinter::Color) { + *aPrintInColor = true; + } else { + *aPrintInColor = false; + } + return NS_OK; +} +NS_IMETHODIMP +nsPrintSettingsQt::SetPrintInColor(bool aPrintInColor) +{ + if (aPrintInColor) { + mQPrinter->setColorMode(QPrinter::Color); + } else { + mQPrinter->setColorMode(QPrinter::GrayScale); + } + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::GetOrientation(int32_t* 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(int32_t aOrientation) +{ + if (aOrientation == kLandscapeOrientation) { + mQPrinter->setOrientation(QPrinter::Landscape); + } else { + mQPrinter->setOrientation(QPrinter::Portrait); + } + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::GetToFileName(char16_t** aToFileName) +{ + NS_ENSURE_ARG_POINTER(aToFileName); + QString filename; + filename = mQPrinter->outputFileName(); + *aToFileName = ToNewUnicode( + nsDependentString((char16_t*)filename.data())); + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::SetToFileName(const char16_t* aToFileName) +{ + nsCOMPtr file; + nsresult rv = NS_NewLocalFile(nsDependentString(aToFileName), 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(char16_t** aPrinter) +{ + NS_ENSURE_ARG_POINTER(aPrinter); + *aPrinter = ToNewUnicode(nsDependentString( + (const char16_t*)mQPrinter->printerName().constData())); + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::SetPrinterName(const char16_t* aPrinter) +{ + QString printername((const QChar*)aPrinter, NS_strlen(aPrinter)); + mQPrinter->setPrinterName(printername); + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::GetNumCopies(int32_t* aNumCopies) +{ + NS_ENSURE_ARG_POINTER(aNumCopies); + *aNumCopies = mQPrinter->numCopies(); + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::SetNumCopies(int32_t aNumCopies) +{ + mQPrinter->setNumCopies(aNumCopies); + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::GetScaling(double* aScaling) +{ + NS_ENSURE_ARG_POINTER(aScaling); + qDebug()<paperSize(); + QString name(indexToPaperName[size]); + *aPaperName = ToNewUnicode(nsDependentString + ((const char16_t*)name.constData())); + return NS_OK; +} + +NS_IMETHODIMP +nsPrintSettingsQt::SetPaperName(const char16_t* aPaperName) +{ + QString ref((QChar*)aPaperName, NS_strlen(aPaperName)); + for (uint32_t 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(int16_t 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(int16_t 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; +} +