1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/widget/qt/nsPrintSettingsQt.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,433 @@ 1.4 +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- 1.5 + * 1.6 + * This Source Code Form is subject to the terms of the Mozilla Public 1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.9 + 1.10 +#include <QPrinter> 1.11 +#include <QDebug> 1.12 +#include "nsPrintSettingsQt.h" 1.13 +#include "nsIFile.h" 1.14 +#include "nsCRTGlue.h" 1.15 + 1.16 +NS_IMPL_ISUPPORTS_INHERITED(nsPrintSettingsQt, 1.17 + nsPrintSettings, 1.18 + nsPrintSettingsQt) 1.19 + 1.20 +nsPrintSettingsQt::nsPrintSettingsQt(): 1.21 + mQPrinter(new QPrinter()) 1.22 +{ 1.23 +} 1.24 + 1.25 +nsPrintSettingsQt::~nsPrintSettingsQt() 1.26 +{ 1.27 + //smart pointer should take care of cleanup 1.28 +} 1.29 + 1.30 +nsPrintSettingsQt::nsPrintSettingsQt(const nsPrintSettingsQt& aPS): 1.31 + mQPrinter(aPS.mQPrinter) 1.32 +{ 1.33 +} 1.34 + 1.35 +nsPrintSettingsQt& 1.36 +nsPrintSettingsQt::operator=(const nsPrintSettingsQt& rhs) 1.37 +{ 1.38 + if (this == &rhs) { 1.39 + return *this; 1.40 + } 1.41 + 1.42 + nsPrintSettings::operator=(rhs); 1.43 + mQPrinter = rhs.mQPrinter; 1.44 + return *this; 1.45 +} 1.46 + 1.47 +nsresult 1.48 +nsPrintSettingsQt::_Clone(nsIPrintSettings** _retval) 1.49 +{ 1.50 + NS_ENSURE_ARG_POINTER(_retval); 1.51 + 1.52 + nsPrintSettingsQt* newSettings = new nsPrintSettingsQt(*this); 1.53 + *_retval = newSettings; 1.54 + NS_ADDREF(*_retval); 1.55 + return NS_OK; 1.56 +} 1.57 + 1.58 +NS_IMETHODIMP 1.59 +nsPrintSettingsQt::_Assign(nsIPrintSettings* aPS) 1.60 +{ 1.61 + nsPrintSettingsQt* printSettingsQt = static_cast<nsPrintSettingsQt*>(aPS); 1.62 + if (!printSettingsQt) 1.63 + return NS_ERROR_UNEXPECTED; 1.64 + *this = *printSettingsQt; 1.65 + return NS_OK; 1.66 +} 1.67 + 1.68 +NS_IMETHODIMP 1.69 +nsPrintSettingsQt::GetPrintRange(int16_t* aPrintRange) 1.70 +{ 1.71 + NS_ENSURE_ARG_POINTER(aPrintRange); 1.72 + 1.73 + QPrinter::PrintRange range = mQPrinter->printRange(); 1.74 + if (range == QPrinter::PageRange) { 1.75 + *aPrintRange = kRangeSpecifiedPageRange; 1.76 + } else if (range == QPrinter::Selection) { 1.77 + *aPrintRange = kRangeSelection; 1.78 + } else { 1.79 + *aPrintRange = kRangeAllPages; 1.80 + } 1.81 + 1.82 + return NS_OK; 1.83 +} 1.84 + 1.85 +NS_IMETHODIMP 1.86 +nsPrintSettingsQt::SetPrintRange(int16_t aPrintRange) 1.87 +{ 1.88 + if (aPrintRange == kRangeSelection) { 1.89 + mQPrinter->setPrintRange(QPrinter::Selection); 1.90 + } else if (aPrintRange == kRangeSpecifiedPageRange) { 1.91 + mQPrinter->setPrintRange(QPrinter::PageRange); 1.92 + } else { 1.93 + mQPrinter->setPrintRange(QPrinter::AllPages); 1.94 + } 1.95 + return NS_OK; 1.96 +} 1.97 + 1.98 +NS_IMETHODIMP 1.99 +nsPrintSettingsQt::GetStartPageRange(int32_t* aStartPageRange) 1.100 +{ 1.101 + NS_ENSURE_ARG_POINTER(aStartPageRange); 1.102 + int32_t start = mQPrinter->fromPage(); 1.103 + *aStartPageRange = start; 1.104 + return NS_OK; 1.105 +} 1.106 + 1.107 +NS_IMETHODIMP 1.108 +nsPrintSettingsQt::SetStartPageRange(int32_t aStartPageRange) 1.109 +{ 1.110 + int32_t endRange = mQPrinter->toPage(); 1.111 + mQPrinter->setFromTo(aStartPageRange, endRange); 1.112 + return NS_OK; 1.113 +} 1.114 + 1.115 +NS_IMETHODIMP 1.116 +nsPrintSettingsQt::GetEndPageRange(int32_t* aEndPageRange) 1.117 +{ 1.118 + NS_ENSURE_ARG_POINTER(aEndPageRange); 1.119 + int32_t end = mQPrinter->toPage(); 1.120 + *aEndPageRange = end; 1.121 + return NS_OK; 1.122 +} 1.123 + 1.124 +NS_IMETHODIMP 1.125 +nsPrintSettingsQt::SetEndPageRange(int32_t aEndPageRange) 1.126 +{ 1.127 + int32_t startRange = mQPrinter->fromPage(); 1.128 + mQPrinter->setFromTo(startRange, aEndPageRange); 1.129 + return NS_OK; 1.130 +} 1.131 + 1.132 +NS_IMETHODIMP 1.133 +nsPrintSettingsQt::GetPrintReversed(bool* aPrintReversed) 1.134 +{ 1.135 + NS_ENSURE_ARG_POINTER(aPrintReversed); 1.136 + if (mQPrinter->pageOrder() == QPrinter::LastPageFirst) { 1.137 + *aPrintReversed = true; 1.138 + } else { 1.139 + *aPrintReversed = false; 1.140 + } 1.141 + return NS_OK; 1.142 +} 1.143 + 1.144 +NS_IMETHODIMP 1.145 +nsPrintSettingsQt::SetPrintReversed(bool aPrintReversed) 1.146 +{ 1.147 + if (aPrintReversed) { 1.148 + mQPrinter->setPageOrder(QPrinter::LastPageFirst); 1.149 + } else { 1.150 + mQPrinter->setPageOrder(QPrinter::FirstPageFirst); 1.151 + } 1.152 + return NS_OK; 1.153 +} 1.154 + 1.155 +NS_IMETHODIMP 1.156 +nsPrintSettingsQt::GetPrintInColor(bool* aPrintInColor) 1.157 +{ 1.158 + NS_ENSURE_ARG_POINTER(aPrintInColor); 1.159 + if (mQPrinter->colorMode() == QPrinter::Color) { 1.160 + *aPrintInColor = true; 1.161 + } else { 1.162 + *aPrintInColor = false; 1.163 + } 1.164 + return NS_OK; 1.165 +} 1.166 +NS_IMETHODIMP 1.167 +nsPrintSettingsQt::SetPrintInColor(bool aPrintInColor) 1.168 +{ 1.169 + if (aPrintInColor) { 1.170 + mQPrinter->setColorMode(QPrinter::Color); 1.171 + } else { 1.172 + mQPrinter->setColorMode(QPrinter::GrayScale); 1.173 + } 1.174 + return NS_OK; 1.175 +} 1.176 + 1.177 +NS_IMETHODIMP 1.178 +nsPrintSettingsQt::GetOrientation(int32_t* aOrientation) 1.179 +{ 1.180 + NS_ENSURE_ARG_POINTER(aOrientation); 1.181 + QPrinter::Orientation orientation = mQPrinter->orientation(); 1.182 + if (orientation == QPrinter::Landscape) { 1.183 + *aOrientation = kLandscapeOrientation; 1.184 + } else { 1.185 + *aOrientation = kPortraitOrientation; 1.186 + } 1.187 + return NS_OK; 1.188 +} 1.189 + 1.190 +NS_IMETHODIMP 1.191 +nsPrintSettingsQt::SetOrientation(int32_t aOrientation) 1.192 +{ 1.193 + if (aOrientation == kLandscapeOrientation) { 1.194 + mQPrinter->setOrientation(QPrinter::Landscape); 1.195 + } else { 1.196 + mQPrinter->setOrientation(QPrinter::Portrait); 1.197 + } 1.198 + return NS_OK; 1.199 +} 1.200 + 1.201 +NS_IMETHODIMP 1.202 +nsPrintSettingsQt::GetToFileName(char16_t** aToFileName) 1.203 +{ 1.204 + NS_ENSURE_ARG_POINTER(aToFileName); 1.205 + QString filename; 1.206 + filename = mQPrinter->outputFileName(); 1.207 + *aToFileName = ToNewUnicode( 1.208 + nsDependentString((char16_t*)filename.data())); 1.209 + return NS_OK; 1.210 +} 1.211 + 1.212 +NS_IMETHODIMP 1.213 +nsPrintSettingsQt::SetToFileName(const char16_t* aToFileName) 1.214 +{ 1.215 + nsCOMPtr<nsIFile> file; 1.216 + nsresult rv = NS_NewLocalFile(nsDependentString(aToFileName), true, 1.217 + getter_AddRefs(file)); 1.218 + NS_ENSURE_SUCCESS(rv, rv); 1.219 + 1.220 + QString filename((const QChar*)aToFileName, NS_strlen(aToFileName)); 1.221 + mQPrinter->setOutputFileName(filename); 1.222 + 1.223 + return NS_OK; 1.224 +} 1.225 + 1.226 +NS_IMETHODIMP 1.227 +nsPrintSettingsQt::GetPrinterName(char16_t** aPrinter) 1.228 +{ 1.229 + NS_ENSURE_ARG_POINTER(aPrinter); 1.230 + *aPrinter = ToNewUnicode(nsDependentString( 1.231 + (const char16_t*)mQPrinter->printerName().constData())); 1.232 + return NS_OK; 1.233 +} 1.234 + 1.235 +NS_IMETHODIMP 1.236 +nsPrintSettingsQt::SetPrinterName(const char16_t* aPrinter) 1.237 +{ 1.238 + QString printername((const QChar*)aPrinter, NS_strlen(aPrinter)); 1.239 + mQPrinter->setPrinterName(printername); 1.240 + return NS_OK; 1.241 +} 1.242 + 1.243 +NS_IMETHODIMP 1.244 +nsPrintSettingsQt::GetNumCopies(int32_t* aNumCopies) 1.245 +{ 1.246 + NS_ENSURE_ARG_POINTER(aNumCopies); 1.247 + *aNumCopies = mQPrinter->numCopies(); 1.248 + return NS_OK; 1.249 +} 1.250 + 1.251 +NS_IMETHODIMP 1.252 +nsPrintSettingsQt::SetNumCopies(int32_t aNumCopies) 1.253 +{ 1.254 + mQPrinter->setNumCopies(aNumCopies); 1.255 + return NS_OK; 1.256 +} 1.257 + 1.258 +NS_IMETHODIMP 1.259 +nsPrintSettingsQt::GetScaling(double* aScaling) 1.260 +{ 1.261 + NS_ENSURE_ARG_POINTER(aScaling); 1.262 + qDebug()<<Q_FUNC_INFO; 1.263 + qDebug()<<"Scaling not implemented in Qt port"; 1.264 + *aScaling = 1.0; //FIXME 1.265 + return NS_ERROR_NOT_IMPLEMENTED; 1.266 +} 1.267 + 1.268 +NS_IMETHODIMP 1.269 +nsPrintSettingsQt::SetScaling(double aScaling) 1.270 +{ 1.271 + qDebug()<<Q_FUNC_INFO; 1.272 + qDebug()<<"Scaling not implemented in Qt port"; //FIXME 1.273 + return NS_ERROR_NOT_IMPLEMENTED; 1.274 +} 1.275 + 1.276 +static const char* const indexToPaperName[] = 1.277 +{ "A4", "B5", "Letter", "Legal", "Executive", 1.278 + "A0", "A1", "A2", "A3", "A5", "A6", "A7", "A8", "A9", 1.279 + "B0", "B1", "B10", "B2", "B3", "B4", "B6", "B7", "B8", "B9", 1.280 + "C5E", "Comm10E", "DLE", "Folio", "Ledger", "Tabloid" 1.281 +}; 1.282 + 1.283 +static const QPrinter::PageSize indexToQtPaperEnum[] = 1.284 +{ 1.285 + QPrinter::A4, QPrinter::B5, QPrinter::Letter, QPrinter::Legal, 1.286 + QPrinter::Executive, QPrinter::A0, QPrinter::A1, QPrinter::A2, QPrinter::A3, 1.287 + QPrinter::A5, QPrinter::A6, QPrinter::A7, QPrinter::A8, QPrinter::A9, 1.288 + QPrinter::B0, QPrinter::B1, QPrinter::B10, QPrinter::B2, QPrinter::B3, 1.289 + QPrinter::B4, QPrinter::B6, QPrinter::B7, QPrinter::B8, QPrinter::B9, 1.290 + QPrinter::C5E, QPrinter::Comm10E, QPrinter::DLE, QPrinter::Folio, 1.291 + QPrinter::Ledger, QPrinter::Tabloid 1.292 +}; 1.293 + 1.294 +NS_IMETHODIMP 1.295 +nsPrintSettingsQt::GetPaperName(char16_t** aPaperName) 1.296 +{ 1.297 + PR_STATIC_ASSERT(sizeof(indexToPaperName)/ 1.298 + sizeof(char*) == QPrinter::NPageSize); 1.299 + PR_STATIC_ASSERT(sizeof(indexToQtPaperEnum)/ 1.300 + sizeof(QPrinter::PageSize) == QPrinter::NPageSize); 1.301 + 1.302 + QPrinter::PaperSize size = mQPrinter->paperSize(); 1.303 + QString name(indexToPaperName[size]); 1.304 + *aPaperName = ToNewUnicode(nsDependentString 1.305 + ((const char16_t*)name.constData())); 1.306 + return NS_OK; 1.307 +} 1.308 + 1.309 +NS_IMETHODIMP 1.310 +nsPrintSettingsQt::SetPaperName(const char16_t* aPaperName) 1.311 +{ 1.312 + QString ref((QChar*)aPaperName, NS_strlen(aPaperName)); 1.313 + for (uint32_t i = 0; i < QPrinter::NPageSize; i++) 1.314 + { 1.315 + if (ref == QString(indexToPaperName[i])) { 1.316 + mQPrinter->setPageSize(indexToQtPaperEnum[i]); 1.317 + return NS_OK; 1.318 + } 1.319 + } 1.320 + return NS_ERROR_FAILURE; 1.321 +} 1.322 + 1.323 +QPrinter::Unit GetQtUnit(int16_t aGeckoUnit) 1.324 +{ 1.325 + if (aGeckoUnit == nsIPrintSettings::kPaperSizeMillimeters) { 1.326 + return QPrinter::Millimeter; 1.327 + } else { 1.328 + return QPrinter::Inch; 1.329 + } 1.330 +} 1.331 + 1.332 +#define SETUNWRITEABLEMARGIN\ 1.333 + mQPrinter->setPageMargins(\ 1.334 + NS_TWIPS_TO_INCHES(mUnwriteableMargin.left),\ 1.335 + NS_TWIPS_TO_INCHES(mUnwriteableMargin.top),\ 1.336 + NS_TWIPS_TO_INCHES(mUnwriteableMargin.right),\ 1.337 + NS_TWIPS_TO_INCHES(mUnwriteableMargin.bottom),\ 1.338 + QPrinter::Inch); 1.339 + 1.340 +NS_IMETHODIMP 1.341 +nsPrintSettingsQt::SetUnwriteableMarginInTwips(nsIntMargin& aUnwriteableMargin) 1.342 +{ 1.343 + nsPrintSettings::SetUnwriteableMarginInTwips(aUnwriteableMargin); 1.344 + SETUNWRITEABLEMARGIN 1.345 + return NS_OK; 1.346 +} 1.347 + 1.348 +NS_IMETHODIMP 1.349 +nsPrintSettingsQt::SetUnwriteableMarginTop(double aUnwriteableMarginTop) 1.350 +{ 1.351 + nsPrintSettings::SetUnwriteableMarginTop(aUnwriteableMarginTop); 1.352 + SETUNWRITEABLEMARGIN 1.353 + return NS_OK; 1.354 +} 1.355 + 1.356 +NS_IMETHODIMP 1.357 +nsPrintSettingsQt::SetUnwriteableMarginLeft(double aUnwriteableMarginLeft) 1.358 +{ 1.359 + nsPrintSettings::SetUnwriteableMarginLeft(aUnwriteableMarginLeft); 1.360 + SETUNWRITEABLEMARGIN 1.361 + return NS_OK; 1.362 +} 1.363 + 1.364 +NS_IMETHODIMP 1.365 +nsPrintSettingsQt::SetUnwriteableMarginBottom(double aUnwriteableMarginBottom) 1.366 +{ 1.367 + nsPrintSettings::SetUnwriteableMarginBottom(aUnwriteableMarginBottom); 1.368 + SETUNWRITEABLEMARGIN 1.369 + return NS_OK; 1.370 +} 1.371 + 1.372 +NS_IMETHODIMP 1.373 +nsPrintSettingsQt::SetUnwriteableMarginRight(double aUnwriteableMarginRight) 1.374 +{ 1.375 + nsPrintSettings::SetUnwriteableMarginRight(aUnwriteableMarginRight); 1.376 + SETUNWRITEABLEMARGIN 1.377 + return NS_OK; 1.378 +} 1.379 + 1.380 +NS_IMETHODIMP 1.381 +nsPrintSettingsQt::GetPaperWidth(double* aPaperWidth) 1.382 +{ 1.383 + NS_ENSURE_ARG_POINTER(aPaperWidth); 1.384 + QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit)); 1.385 + *aPaperWidth = papersize.width(); 1.386 + return NS_OK; 1.387 +} 1.388 + 1.389 +NS_IMETHODIMP 1.390 +nsPrintSettingsQt::SetPaperWidth(double aPaperWidth) 1.391 +{ 1.392 + QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit)); 1.393 + papersize.setWidth(aPaperWidth); 1.394 + mQPrinter->setPaperSize(papersize, GetQtUnit(mPaperSizeUnit)); 1.395 + return NS_OK; 1.396 +} 1.397 + 1.398 +NS_IMETHODIMP 1.399 +nsPrintSettingsQt::GetPaperHeight(double* aPaperHeight) 1.400 +{ 1.401 + NS_ENSURE_ARG_POINTER(aPaperHeight); 1.402 + QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit)); 1.403 + *aPaperHeight = papersize.height(); 1.404 + return NS_OK; 1.405 +} 1.406 + 1.407 +NS_IMETHODIMP 1.408 +nsPrintSettingsQt::SetPaperHeight(double aPaperHeight) 1.409 +{ 1.410 + QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit)); 1.411 + papersize.setHeight(aPaperHeight); 1.412 + mQPrinter->setPaperSize(papersize, GetQtUnit(mPaperSizeUnit)); 1.413 + return NS_OK; 1.414 +} 1.415 + 1.416 +NS_IMETHODIMP 1.417 +nsPrintSettingsQt::SetPaperSizeUnit(int16_t aPaperSizeUnit) 1.418 +{ 1.419 + mPaperSizeUnit = aPaperSizeUnit; 1.420 + return NS_OK; 1.421 +} 1.422 + 1.423 +NS_IMETHODIMP 1.424 +nsPrintSettingsQt::GetEffectivePageSize(double* aWidth, double* aHeight) 1.425 +{ 1.426 + QSizeF papersize = mQPrinter->paperSize(QPrinter::Inch); 1.427 + if (mQPrinter->orientation() == QPrinter::Landscape) { 1.428 + *aWidth = NS_INCHES_TO_INT_TWIPS(papersize.height()); 1.429 + *aHeight = NS_INCHES_TO_INT_TWIPS(papersize.width()); 1.430 + } else { 1.431 + *aWidth = NS_INCHES_TO_INT_TWIPS(papersize.width()); 1.432 + *aHeight = NS_INCHES_TO_INT_TWIPS(papersize.height()); 1.433 + } 1.434 + return NS_OK; 1.435 +} 1.436 +