widget/qt/nsPrintSettingsQt.cpp

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

michael@0 1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
michael@0 2 *
michael@0 3 * This Source Code Form is subject to the terms of the Mozilla Public
michael@0 4 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 6
michael@0 7 #include <QPrinter>
michael@0 8 #include <QDebug>
michael@0 9 #include "nsPrintSettingsQt.h"
michael@0 10 #include "nsIFile.h"
michael@0 11 #include "nsCRTGlue.h"
michael@0 12
michael@0 13 NS_IMPL_ISUPPORTS_INHERITED(nsPrintSettingsQt,
michael@0 14 nsPrintSettings,
michael@0 15 nsPrintSettingsQt)
michael@0 16
michael@0 17 nsPrintSettingsQt::nsPrintSettingsQt():
michael@0 18 mQPrinter(new QPrinter())
michael@0 19 {
michael@0 20 }
michael@0 21
michael@0 22 nsPrintSettingsQt::~nsPrintSettingsQt()
michael@0 23 {
michael@0 24 //smart pointer should take care of cleanup
michael@0 25 }
michael@0 26
michael@0 27 nsPrintSettingsQt::nsPrintSettingsQt(const nsPrintSettingsQt& aPS):
michael@0 28 mQPrinter(aPS.mQPrinter)
michael@0 29 {
michael@0 30 }
michael@0 31
michael@0 32 nsPrintSettingsQt&
michael@0 33 nsPrintSettingsQt::operator=(const nsPrintSettingsQt& rhs)
michael@0 34 {
michael@0 35 if (this == &rhs) {
michael@0 36 return *this;
michael@0 37 }
michael@0 38
michael@0 39 nsPrintSettings::operator=(rhs);
michael@0 40 mQPrinter = rhs.mQPrinter;
michael@0 41 return *this;
michael@0 42 }
michael@0 43
michael@0 44 nsresult
michael@0 45 nsPrintSettingsQt::_Clone(nsIPrintSettings** _retval)
michael@0 46 {
michael@0 47 NS_ENSURE_ARG_POINTER(_retval);
michael@0 48
michael@0 49 nsPrintSettingsQt* newSettings = new nsPrintSettingsQt(*this);
michael@0 50 *_retval = newSettings;
michael@0 51 NS_ADDREF(*_retval);
michael@0 52 return NS_OK;
michael@0 53 }
michael@0 54
michael@0 55 NS_IMETHODIMP
michael@0 56 nsPrintSettingsQt::_Assign(nsIPrintSettings* aPS)
michael@0 57 {
michael@0 58 nsPrintSettingsQt* printSettingsQt = static_cast<nsPrintSettingsQt*>(aPS);
michael@0 59 if (!printSettingsQt)
michael@0 60 return NS_ERROR_UNEXPECTED;
michael@0 61 *this = *printSettingsQt;
michael@0 62 return NS_OK;
michael@0 63 }
michael@0 64
michael@0 65 NS_IMETHODIMP
michael@0 66 nsPrintSettingsQt::GetPrintRange(int16_t* aPrintRange)
michael@0 67 {
michael@0 68 NS_ENSURE_ARG_POINTER(aPrintRange);
michael@0 69
michael@0 70 QPrinter::PrintRange range = mQPrinter->printRange();
michael@0 71 if (range == QPrinter::PageRange) {
michael@0 72 *aPrintRange = kRangeSpecifiedPageRange;
michael@0 73 } else if (range == QPrinter::Selection) {
michael@0 74 *aPrintRange = kRangeSelection;
michael@0 75 } else {
michael@0 76 *aPrintRange = kRangeAllPages;
michael@0 77 }
michael@0 78
michael@0 79 return NS_OK;
michael@0 80 }
michael@0 81
michael@0 82 NS_IMETHODIMP
michael@0 83 nsPrintSettingsQt::SetPrintRange(int16_t aPrintRange)
michael@0 84 {
michael@0 85 if (aPrintRange == kRangeSelection) {
michael@0 86 mQPrinter->setPrintRange(QPrinter::Selection);
michael@0 87 } else if (aPrintRange == kRangeSpecifiedPageRange) {
michael@0 88 mQPrinter->setPrintRange(QPrinter::PageRange);
michael@0 89 } else {
michael@0 90 mQPrinter->setPrintRange(QPrinter::AllPages);
michael@0 91 }
michael@0 92 return NS_OK;
michael@0 93 }
michael@0 94
michael@0 95 NS_IMETHODIMP
michael@0 96 nsPrintSettingsQt::GetStartPageRange(int32_t* aStartPageRange)
michael@0 97 {
michael@0 98 NS_ENSURE_ARG_POINTER(aStartPageRange);
michael@0 99 int32_t start = mQPrinter->fromPage();
michael@0 100 *aStartPageRange = start;
michael@0 101 return NS_OK;
michael@0 102 }
michael@0 103
michael@0 104 NS_IMETHODIMP
michael@0 105 nsPrintSettingsQt::SetStartPageRange(int32_t aStartPageRange)
michael@0 106 {
michael@0 107 int32_t endRange = mQPrinter->toPage();
michael@0 108 mQPrinter->setFromTo(aStartPageRange, endRange);
michael@0 109 return NS_OK;
michael@0 110 }
michael@0 111
michael@0 112 NS_IMETHODIMP
michael@0 113 nsPrintSettingsQt::GetEndPageRange(int32_t* aEndPageRange)
michael@0 114 {
michael@0 115 NS_ENSURE_ARG_POINTER(aEndPageRange);
michael@0 116 int32_t end = mQPrinter->toPage();
michael@0 117 *aEndPageRange = end;
michael@0 118 return NS_OK;
michael@0 119 }
michael@0 120
michael@0 121 NS_IMETHODIMP
michael@0 122 nsPrintSettingsQt::SetEndPageRange(int32_t aEndPageRange)
michael@0 123 {
michael@0 124 int32_t startRange = mQPrinter->fromPage();
michael@0 125 mQPrinter->setFromTo(startRange, aEndPageRange);
michael@0 126 return NS_OK;
michael@0 127 }
michael@0 128
michael@0 129 NS_IMETHODIMP
michael@0 130 nsPrintSettingsQt::GetPrintReversed(bool* aPrintReversed)
michael@0 131 {
michael@0 132 NS_ENSURE_ARG_POINTER(aPrintReversed);
michael@0 133 if (mQPrinter->pageOrder() == QPrinter::LastPageFirst) {
michael@0 134 *aPrintReversed = true;
michael@0 135 } else {
michael@0 136 *aPrintReversed = false;
michael@0 137 }
michael@0 138 return NS_OK;
michael@0 139 }
michael@0 140
michael@0 141 NS_IMETHODIMP
michael@0 142 nsPrintSettingsQt::SetPrintReversed(bool aPrintReversed)
michael@0 143 {
michael@0 144 if (aPrintReversed) {
michael@0 145 mQPrinter->setPageOrder(QPrinter::LastPageFirst);
michael@0 146 } else {
michael@0 147 mQPrinter->setPageOrder(QPrinter::FirstPageFirst);
michael@0 148 }
michael@0 149 return NS_OK;
michael@0 150 }
michael@0 151
michael@0 152 NS_IMETHODIMP
michael@0 153 nsPrintSettingsQt::GetPrintInColor(bool* aPrintInColor)
michael@0 154 {
michael@0 155 NS_ENSURE_ARG_POINTER(aPrintInColor);
michael@0 156 if (mQPrinter->colorMode() == QPrinter::Color) {
michael@0 157 *aPrintInColor = true;
michael@0 158 } else {
michael@0 159 *aPrintInColor = false;
michael@0 160 }
michael@0 161 return NS_OK;
michael@0 162 }
michael@0 163 NS_IMETHODIMP
michael@0 164 nsPrintSettingsQt::SetPrintInColor(bool aPrintInColor)
michael@0 165 {
michael@0 166 if (aPrintInColor) {
michael@0 167 mQPrinter->setColorMode(QPrinter::Color);
michael@0 168 } else {
michael@0 169 mQPrinter->setColorMode(QPrinter::GrayScale);
michael@0 170 }
michael@0 171 return NS_OK;
michael@0 172 }
michael@0 173
michael@0 174 NS_IMETHODIMP
michael@0 175 nsPrintSettingsQt::GetOrientation(int32_t* aOrientation)
michael@0 176 {
michael@0 177 NS_ENSURE_ARG_POINTER(aOrientation);
michael@0 178 QPrinter::Orientation orientation = mQPrinter->orientation();
michael@0 179 if (orientation == QPrinter::Landscape) {
michael@0 180 *aOrientation = kLandscapeOrientation;
michael@0 181 } else {
michael@0 182 *aOrientation = kPortraitOrientation;
michael@0 183 }
michael@0 184 return NS_OK;
michael@0 185 }
michael@0 186
michael@0 187 NS_IMETHODIMP
michael@0 188 nsPrintSettingsQt::SetOrientation(int32_t aOrientation)
michael@0 189 {
michael@0 190 if (aOrientation == kLandscapeOrientation) {
michael@0 191 mQPrinter->setOrientation(QPrinter::Landscape);
michael@0 192 } else {
michael@0 193 mQPrinter->setOrientation(QPrinter::Portrait);
michael@0 194 }
michael@0 195 return NS_OK;
michael@0 196 }
michael@0 197
michael@0 198 NS_IMETHODIMP
michael@0 199 nsPrintSettingsQt::GetToFileName(char16_t** aToFileName)
michael@0 200 {
michael@0 201 NS_ENSURE_ARG_POINTER(aToFileName);
michael@0 202 QString filename;
michael@0 203 filename = mQPrinter->outputFileName();
michael@0 204 *aToFileName = ToNewUnicode(
michael@0 205 nsDependentString((char16_t*)filename.data()));
michael@0 206 return NS_OK;
michael@0 207 }
michael@0 208
michael@0 209 NS_IMETHODIMP
michael@0 210 nsPrintSettingsQt::SetToFileName(const char16_t* aToFileName)
michael@0 211 {
michael@0 212 nsCOMPtr<nsIFile> file;
michael@0 213 nsresult rv = NS_NewLocalFile(nsDependentString(aToFileName), true,
michael@0 214 getter_AddRefs(file));
michael@0 215 NS_ENSURE_SUCCESS(rv, rv);
michael@0 216
michael@0 217 QString filename((const QChar*)aToFileName, NS_strlen(aToFileName));
michael@0 218 mQPrinter->setOutputFileName(filename);
michael@0 219
michael@0 220 return NS_OK;
michael@0 221 }
michael@0 222
michael@0 223 NS_IMETHODIMP
michael@0 224 nsPrintSettingsQt::GetPrinterName(char16_t** aPrinter)
michael@0 225 {
michael@0 226 NS_ENSURE_ARG_POINTER(aPrinter);
michael@0 227 *aPrinter = ToNewUnicode(nsDependentString(
michael@0 228 (const char16_t*)mQPrinter->printerName().constData()));
michael@0 229 return NS_OK;
michael@0 230 }
michael@0 231
michael@0 232 NS_IMETHODIMP
michael@0 233 nsPrintSettingsQt::SetPrinterName(const char16_t* aPrinter)
michael@0 234 {
michael@0 235 QString printername((const QChar*)aPrinter, NS_strlen(aPrinter));
michael@0 236 mQPrinter->setPrinterName(printername);
michael@0 237 return NS_OK;
michael@0 238 }
michael@0 239
michael@0 240 NS_IMETHODIMP
michael@0 241 nsPrintSettingsQt::GetNumCopies(int32_t* aNumCopies)
michael@0 242 {
michael@0 243 NS_ENSURE_ARG_POINTER(aNumCopies);
michael@0 244 *aNumCopies = mQPrinter->numCopies();
michael@0 245 return NS_OK;
michael@0 246 }
michael@0 247
michael@0 248 NS_IMETHODIMP
michael@0 249 nsPrintSettingsQt::SetNumCopies(int32_t aNumCopies)
michael@0 250 {
michael@0 251 mQPrinter->setNumCopies(aNumCopies);
michael@0 252 return NS_OK;
michael@0 253 }
michael@0 254
michael@0 255 NS_IMETHODIMP
michael@0 256 nsPrintSettingsQt::GetScaling(double* aScaling)
michael@0 257 {
michael@0 258 NS_ENSURE_ARG_POINTER(aScaling);
michael@0 259 qDebug()<<Q_FUNC_INFO;
michael@0 260 qDebug()<<"Scaling not implemented in Qt port";
michael@0 261 *aScaling = 1.0; //FIXME
michael@0 262 return NS_ERROR_NOT_IMPLEMENTED;
michael@0 263 }
michael@0 264
michael@0 265 NS_IMETHODIMP
michael@0 266 nsPrintSettingsQt::SetScaling(double aScaling)
michael@0 267 {
michael@0 268 qDebug()<<Q_FUNC_INFO;
michael@0 269 qDebug()<<"Scaling not implemented in Qt port"; //FIXME
michael@0 270 return NS_ERROR_NOT_IMPLEMENTED;
michael@0 271 }
michael@0 272
michael@0 273 static const char* const indexToPaperName[] =
michael@0 274 { "A4", "B5", "Letter", "Legal", "Executive",
michael@0 275 "A0", "A1", "A2", "A3", "A5", "A6", "A7", "A8", "A9",
michael@0 276 "B0", "B1", "B10", "B2", "B3", "B4", "B6", "B7", "B8", "B9",
michael@0 277 "C5E", "Comm10E", "DLE", "Folio", "Ledger", "Tabloid"
michael@0 278 };
michael@0 279
michael@0 280 static const QPrinter::PageSize indexToQtPaperEnum[] =
michael@0 281 {
michael@0 282 QPrinter::A4, QPrinter::B5, QPrinter::Letter, QPrinter::Legal,
michael@0 283 QPrinter::Executive, QPrinter::A0, QPrinter::A1, QPrinter::A2, QPrinter::A3,
michael@0 284 QPrinter::A5, QPrinter::A6, QPrinter::A7, QPrinter::A8, QPrinter::A9,
michael@0 285 QPrinter::B0, QPrinter::B1, QPrinter::B10, QPrinter::B2, QPrinter::B3,
michael@0 286 QPrinter::B4, QPrinter::B6, QPrinter::B7, QPrinter::B8, QPrinter::B9,
michael@0 287 QPrinter::C5E, QPrinter::Comm10E, QPrinter::DLE, QPrinter::Folio,
michael@0 288 QPrinter::Ledger, QPrinter::Tabloid
michael@0 289 };
michael@0 290
michael@0 291 NS_IMETHODIMP
michael@0 292 nsPrintSettingsQt::GetPaperName(char16_t** aPaperName)
michael@0 293 {
michael@0 294 PR_STATIC_ASSERT(sizeof(indexToPaperName)/
michael@0 295 sizeof(char*) == QPrinter::NPageSize);
michael@0 296 PR_STATIC_ASSERT(sizeof(indexToQtPaperEnum)/
michael@0 297 sizeof(QPrinter::PageSize) == QPrinter::NPageSize);
michael@0 298
michael@0 299 QPrinter::PaperSize size = mQPrinter->paperSize();
michael@0 300 QString name(indexToPaperName[size]);
michael@0 301 *aPaperName = ToNewUnicode(nsDependentString
michael@0 302 ((const char16_t*)name.constData()));
michael@0 303 return NS_OK;
michael@0 304 }
michael@0 305
michael@0 306 NS_IMETHODIMP
michael@0 307 nsPrintSettingsQt::SetPaperName(const char16_t* aPaperName)
michael@0 308 {
michael@0 309 QString ref((QChar*)aPaperName, NS_strlen(aPaperName));
michael@0 310 for (uint32_t i = 0; i < QPrinter::NPageSize; i++)
michael@0 311 {
michael@0 312 if (ref == QString(indexToPaperName[i])) {
michael@0 313 mQPrinter->setPageSize(indexToQtPaperEnum[i]);
michael@0 314 return NS_OK;
michael@0 315 }
michael@0 316 }
michael@0 317 return NS_ERROR_FAILURE;
michael@0 318 }
michael@0 319
michael@0 320 QPrinter::Unit GetQtUnit(int16_t aGeckoUnit)
michael@0 321 {
michael@0 322 if (aGeckoUnit == nsIPrintSettings::kPaperSizeMillimeters) {
michael@0 323 return QPrinter::Millimeter;
michael@0 324 } else {
michael@0 325 return QPrinter::Inch;
michael@0 326 }
michael@0 327 }
michael@0 328
michael@0 329 #define SETUNWRITEABLEMARGIN\
michael@0 330 mQPrinter->setPageMargins(\
michael@0 331 NS_TWIPS_TO_INCHES(mUnwriteableMargin.left),\
michael@0 332 NS_TWIPS_TO_INCHES(mUnwriteableMargin.top),\
michael@0 333 NS_TWIPS_TO_INCHES(mUnwriteableMargin.right),\
michael@0 334 NS_TWIPS_TO_INCHES(mUnwriteableMargin.bottom),\
michael@0 335 QPrinter::Inch);
michael@0 336
michael@0 337 NS_IMETHODIMP
michael@0 338 nsPrintSettingsQt::SetUnwriteableMarginInTwips(nsIntMargin& aUnwriteableMargin)
michael@0 339 {
michael@0 340 nsPrintSettings::SetUnwriteableMarginInTwips(aUnwriteableMargin);
michael@0 341 SETUNWRITEABLEMARGIN
michael@0 342 return NS_OK;
michael@0 343 }
michael@0 344
michael@0 345 NS_IMETHODIMP
michael@0 346 nsPrintSettingsQt::SetUnwriteableMarginTop(double aUnwriteableMarginTop)
michael@0 347 {
michael@0 348 nsPrintSettings::SetUnwriteableMarginTop(aUnwriteableMarginTop);
michael@0 349 SETUNWRITEABLEMARGIN
michael@0 350 return NS_OK;
michael@0 351 }
michael@0 352
michael@0 353 NS_IMETHODIMP
michael@0 354 nsPrintSettingsQt::SetUnwriteableMarginLeft(double aUnwriteableMarginLeft)
michael@0 355 {
michael@0 356 nsPrintSettings::SetUnwriteableMarginLeft(aUnwriteableMarginLeft);
michael@0 357 SETUNWRITEABLEMARGIN
michael@0 358 return NS_OK;
michael@0 359 }
michael@0 360
michael@0 361 NS_IMETHODIMP
michael@0 362 nsPrintSettingsQt::SetUnwriteableMarginBottom(double aUnwriteableMarginBottom)
michael@0 363 {
michael@0 364 nsPrintSettings::SetUnwriteableMarginBottom(aUnwriteableMarginBottom);
michael@0 365 SETUNWRITEABLEMARGIN
michael@0 366 return NS_OK;
michael@0 367 }
michael@0 368
michael@0 369 NS_IMETHODIMP
michael@0 370 nsPrintSettingsQt::SetUnwriteableMarginRight(double aUnwriteableMarginRight)
michael@0 371 {
michael@0 372 nsPrintSettings::SetUnwriteableMarginRight(aUnwriteableMarginRight);
michael@0 373 SETUNWRITEABLEMARGIN
michael@0 374 return NS_OK;
michael@0 375 }
michael@0 376
michael@0 377 NS_IMETHODIMP
michael@0 378 nsPrintSettingsQt::GetPaperWidth(double* aPaperWidth)
michael@0 379 {
michael@0 380 NS_ENSURE_ARG_POINTER(aPaperWidth);
michael@0 381 QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit));
michael@0 382 *aPaperWidth = papersize.width();
michael@0 383 return NS_OK;
michael@0 384 }
michael@0 385
michael@0 386 NS_IMETHODIMP
michael@0 387 nsPrintSettingsQt::SetPaperWidth(double aPaperWidth)
michael@0 388 {
michael@0 389 QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit));
michael@0 390 papersize.setWidth(aPaperWidth);
michael@0 391 mQPrinter->setPaperSize(papersize, GetQtUnit(mPaperSizeUnit));
michael@0 392 return NS_OK;
michael@0 393 }
michael@0 394
michael@0 395 NS_IMETHODIMP
michael@0 396 nsPrintSettingsQt::GetPaperHeight(double* aPaperHeight)
michael@0 397 {
michael@0 398 NS_ENSURE_ARG_POINTER(aPaperHeight);
michael@0 399 QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit));
michael@0 400 *aPaperHeight = papersize.height();
michael@0 401 return NS_OK;
michael@0 402 }
michael@0 403
michael@0 404 NS_IMETHODIMP
michael@0 405 nsPrintSettingsQt::SetPaperHeight(double aPaperHeight)
michael@0 406 {
michael@0 407 QSizeF papersize = mQPrinter->paperSize(GetQtUnit(mPaperSizeUnit));
michael@0 408 papersize.setHeight(aPaperHeight);
michael@0 409 mQPrinter->setPaperSize(papersize, GetQtUnit(mPaperSizeUnit));
michael@0 410 return NS_OK;
michael@0 411 }
michael@0 412
michael@0 413 NS_IMETHODIMP
michael@0 414 nsPrintSettingsQt::SetPaperSizeUnit(int16_t aPaperSizeUnit)
michael@0 415 {
michael@0 416 mPaperSizeUnit = aPaperSizeUnit;
michael@0 417 return NS_OK;
michael@0 418 }
michael@0 419
michael@0 420 NS_IMETHODIMP
michael@0 421 nsPrintSettingsQt::GetEffectivePageSize(double* aWidth, double* aHeight)
michael@0 422 {
michael@0 423 QSizeF papersize = mQPrinter->paperSize(QPrinter::Inch);
michael@0 424 if (mQPrinter->orientation() == QPrinter::Landscape) {
michael@0 425 *aWidth = NS_INCHES_TO_INT_TWIPS(papersize.height());
michael@0 426 *aHeight = NS_INCHES_TO_INT_TWIPS(papersize.width());
michael@0 427 } else {
michael@0 428 *aWidth = NS_INCHES_TO_INT_TWIPS(papersize.width());
michael@0 429 *aHeight = NS_INCHES_TO_INT_TWIPS(papersize.height());
michael@0 430 }
michael@0 431 return NS_OK;
michael@0 432 }
michael@0 433

mercurial