1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "nsPrintOptionsImpl.h"
7 #include "nsReadableUtils.h"
8 #include "nsPrintSettingsImpl.h"
10 #include "nsIDOMWindow.h"
11 #include "nsIServiceManager.h"
12 #include "nsIDialogParamBlock.h"
14 #include "nsISupportsPrimitives.h"
15 #include "nsIWindowWatcher.h"
16 #include "nsISupportsArray.h"
19 #include "nsIStringEnumerator.h"
20 #include "nsISupportsPrimitives.h"
22 #include "nsAutoPtr.h"
23 #include "mozilla/Preferences.h"
24 #include "nsPrintfCString.h"
26 using namespace mozilla
;
28 NS_IMPL_ISUPPORTS(nsPrintOptions
, nsIPrintOptions
, nsIPrintSettingsService
)
31 static const char kMarginTop
[] = "print_margin_top";
32 static const char kMarginLeft
[] = "print_margin_left";
33 static const char kMarginBottom
[] = "print_margin_bottom";
34 static const char kMarginRight
[] = "print_margin_right";
35 static const char kEdgeTop
[] = "print_edge_top";
36 static const char kEdgeLeft
[] = "print_edge_left";
37 static const char kEdgeBottom
[] = "print_edge_bottom";
38 static const char kEdgeRight
[] = "print_edge_right";
39 static const char kUnwriteableMarginTop
[] = "print_unwriteable_margin_top";
40 static const char kUnwriteableMarginLeft
[] = "print_unwriteable_margin_left";
41 static const char kUnwriteableMarginBottom
[] = "print_unwriteable_margin_bottom";
42 static const char kUnwriteableMarginRight
[] = "print_unwriteable_margin_right";
44 // Prefs for Print Options
45 static const char kPrintEvenPages
[] = "print_evenpages";
46 static const char kPrintOddPages
[] = "print_oddpages";
47 static const char kPrintHeaderStrLeft
[] = "print_headerleft";
48 static const char kPrintHeaderStrCenter
[] = "print_headercenter";
49 static const char kPrintHeaderStrRight
[] = "print_headerright";
50 static const char kPrintFooterStrLeft
[] = "print_footerleft";
51 static const char kPrintFooterStrCenter
[] = "print_footercenter";
52 static const char kPrintFooterStrRight
[] = "print_footerright";
55 static const char kPrintReversed
[] = "print_reversed";
56 static const char kPrintInColor
[] = "print_in_color";
57 static const char kPrintPaperName
[] = "print_paper_name";
58 static const char kPrintPlexName
[] = "print_plex_name";
59 static const char kPrintPaperSizeType
[] = "print_paper_size_type";
60 static const char kPrintPaperData
[] = "print_paper_data";
61 static const char kPrintPaperSizeUnit
[] = "print_paper_size_unit";
62 static const char kPrintPaperWidth
[] = "print_paper_width";
63 static const char kPrintPaperHeight
[] = "print_paper_height";
64 static const char kPrintColorspace
[] = "print_colorspace";
65 static const char kPrintResolutionName
[]= "print_resolution_name";
66 static const char kPrintDownloadFonts
[] = "print_downloadfonts";
67 static const char kPrintOrientation
[] = "print_orientation";
68 static const char kPrintCommand
[] = "print_command";
69 static const char kPrinterName
[] = "print_printer";
70 static const char kPrintToFile
[] = "print_to_file";
71 static const char kPrintToFileName
[] = "print_to_filename";
72 static const char kPrintPageDelay
[] = "print_page_delay";
73 static const char kPrintBGColors
[] = "print_bgcolor";
74 static const char kPrintBGImages
[] = "print_bgimages";
75 static const char kPrintShrinkToFit
[] = "print_shrink_to_fit";
76 static const char kPrintScaling
[] = "print_scaling";
77 static const char kPrintResolution
[] = "print_resolution";
78 static const char kPrintDuplex
[] = "print_duplex";
80 static const char kJustLeft
[] = "left";
81 static const char kJustCenter
[] = "center";
82 static const char kJustRight
[] = "right";
84 #define NS_PRINTER_ENUMERATOR_CONTRACTID "@mozilla.org/gfx/printerenumerator;1"
86 nsPrintOptions::nsPrintOptions()
90 nsPrintOptions::~nsPrintOptions()
95 nsPrintOptions::Init()
101 nsPrintOptions::ShowPrintSetupDialog(nsIPrintSettings
*aPS
)
103 NS_ENSURE_ARG_POINTER(aPS
);
106 // create a nsISupportsArray of the parameters
107 // being passed to the window
108 nsCOMPtr
<nsISupportsArray
> array
;
109 rv
= NS_NewISupportsArray(getter_AddRefs(array
));
110 NS_ENSURE_SUCCESS(rv
, rv
);
112 nsCOMPtr
<nsISupports
> psSupports
= do_QueryInterface(aPS
);
113 NS_ASSERTION(psSupports
, "PrintSettings must be a supports");
114 array
->AppendElement(psSupports
);
116 nsCOMPtr
<nsIDialogParamBlock
> ioParamBlock
=
117 do_CreateInstance(NS_DIALOGPARAMBLOCK_CONTRACTID
, &rv
);
118 NS_ENSURE_SUCCESS(rv
, rv
);
120 ioParamBlock
->SetInt(0, 0);
122 nsCOMPtr
<nsISupports
> blkSupps
= do_QueryInterface(ioParamBlock
);
123 NS_ASSERTION(blkSupps
, "IOBlk must be a supports");
124 array
->AppendElement(blkSupps
);
126 nsCOMPtr
<nsIWindowWatcher
> wwatch
=
127 do_GetService(NS_WINDOWWATCHER_CONTRACTID
, &rv
);
128 NS_ENSURE_SUCCESS(rv
, rv
);
130 nsCOMPtr
<nsIDOMWindow
> parent
;
131 wwatch
->GetActiveWindow(getter_AddRefs(parent
));
132 // null |parent| is non-fatal
134 nsCOMPtr
<nsIDOMWindow
> newWindow
;
136 return wwatch
->OpenWindow(parent
,
137 "chrome://global/content/printPageSetup.xul",
138 "_blank","chrome,modal,centerscreen", array
,
139 getter_AddRefs(newWindow
));
142 /** ---------------------------------------------------
143 * Helper function - Creates the "prefix" for the pref
144 * It is either "print."
145 * or "print.printer_<print name>."
148 nsPrintOptions::GetPrefName(const char * aPrefName
,
149 const nsAString
& aPrinterName
)
151 if (!aPrefName
|| !*aPrefName
) {
152 NS_ERROR("Must have a valid pref name!");
156 mPrefName
.AssignLiteral("print.");
158 if (aPrinterName
.Length()) {
159 mPrefName
.AppendLiteral("printer_");
160 AppendUTF16toUTF8(aPrinterName
, mPrefName
);
161 mPrefName
.Append('.');
163 mPrefName
+= aPrefName
;
165 return mPrefName
.get();
168 //----------------------------------------------------------------------
169 // Testing of read/write prefs
170 // This define controls debug output
172 static void WriteDebugStr(const char* aArg1
, const char* aArg2
,
173 const char16_t
* aStr
)
178 str
.ReplaceChar(s
, r
);
180 printf("%s %s = %s \n", aArg1
, aArg2
, ToNewUTF8String(str
));
182 const char* kWriteStr
= "Write Pref:";
183 const char* kReadStr
= "Read Pref:";
184 #define DUMP_STR(_a1, _a2, _a3) WriteDebugStr((_a1), GetPrefName((_a2), \
186 #define DUMP_BOOL(_a1, _a2, _a3) printf("%s %s = %s \n", (_a1), \
187 GetPrefName((_a2), aPrefName), (_a3)?"T":"F");
188 #define DUMP_INT(_a1, _a2, _a3) printf("%s %s = %d \n", (_a1), \
189 GetPrefName((_a2), aPrefName), (_a3));
190 #define DUMP_DBL(_a1, _a2, _a3) printf("%s %s = %10.5f \n", (_a1), \
191 GetPrefName((_a2), aPrefName), (_a3));
193 #define DUMP_STR(_a1, _a2, _a3)
194 #define DUMP_BOOL(_a1, _a2, _a3)
195 #define DUMP_INT(_a1, _a2, _a3)
196 #define DUMP_DBL(_a1, _a2, _a3)
197 #endif /* DEBUG_rods_X */
198 //----------------------------------------------------------------------
201 * This will either read in the generic prefs (not specific to a printer)
202 * or read the prefs in using the printer name to qualify.
203 * It is either "print.attr_name" or "print.printer_HPLasr5.attr_name"
206 nsPrintOptions::ReadPrefs(nsIPrintSettings
* aPS
, const nsAString
& aPrinterName
,
209 NS_ENSURE_ARG_POINTER(aPS
);
211 if (aFlags
& nsIPrintSettings::kInitSaveMargins
) {
212 int32_t halfInch
= NS_INCHES_TO_INT_TWIPS(0.5);
213 nsIntMargin
margin(halfInch
, halfInch
, halfInch
, halfInch
);
214 ReadInchesToTwipsPref(GetPrefName(kMarginTop
, aPrinterName
), margin
.top
,
216 DUMP_INT(kReadStr
, kMarginTop
, margin
.top
);
217 ReadInchesToTwipsPref(GetPrefName(kMarginLeft
, aPrinterName
), margin
.left
,
219 DUMP_INT(kReadStr
, kMarginLeft
, margin
.left
);
220 ReadInchesToTwipsPref(GetPrefName(kMarginBottom
, aPrinterName
),
221 margin
.bottom
, kMarginBottom
);
222 DUMP_INT(kReadStr
, kMarginBottom
, margin
.bottom
);
223 ReadInchesToTwipsPref(GetPrefName(kMarginRight
, aPrinterName
), margin
.right
,
225 DUMP_INT(kReadStr
, kMarginRight
, margin
.right
);
226 aPS
->SetMarginInTwips(margin
);
229 if (aFlags
& nsIPrintSettings::kInitSaveEdges
) {
230 nsIntMargin
margin(0,0,0,0);
231 ReadInchesIntToTwipsPref(GetPrefName(kEdgeTop
, aPrinterName
), margin
.top
,
233 DUMP_INT(kReadStr
, kEdgeTop
, margin
.top
);
234 ReadInchesIntToTwipsPref(GetPrefName(kEdgeLeft
, aPrinterName
), margin
.left
,
236 DUMP_INT(kReadStr
, kEdgeLeft
, margin
.left
);
237 ReadInchesIntToTwipsPref(GetPrefName(kEdgeBottom
, aPrinterName
),
238 margin
.bottom
, kEdgeBottom
);
239 DUMP_INT(kReadStr
, kEdgeBottom
, margin
.bottom
);
240 ReadInchesIntToTwipsPref(GetPrefName(kEdgeRight
, aPrinterName
), margin
.right
,
242 DUMP_INT(kReadStr
, kEdgeRight
, margin
.right
);
243 aPS
->SetEdgeInTwips(margin
);
246 if (aFlags
& nsIPrintSettings::kInitSaveUnwriteableMargins
) {
248 ReadInchesIntToTwipsPref(GetPrefName(kUnwriteableMarginTop
, aPrinterName
), margin
.top
,
249 kUnwriteableMarginTop
);
250 DUMP_INT(kReadStr
, kUnwriteableMarginTop
, margin
.top
);
251 ReadInchesIntToTwipsPref(GetPrefName(kUnwriteableMarginLeft
, aPrinterName
), margin
.left
,
252 kUnwriteableMarginLeft
);
253 DUMP_INT(kReadStr
, kUnwriteableMarginLeft
, margin
.left
);
254 ReadInchesIntToTwipsPref(GetPrefName(kUnwriteableMarginBottom
, aPrinterName
),
255 margin
.bottom
, kUnwriteableMarginBottom
);
256 DUMP_INT(kReadStr
, kUnwriteableMarginBottom
, margin
.bottom
);
257 ReadInchesIntToTwipsPref(GetPrefName(kUnwriteableMarginRight
, aPrinterName
), margin
.right
,
258 kUnwriteableMarginRight
);
259 DUMP_INT(kReadStr
, kUnwriteableMarginRight
, margin
.right
);
260 aPS
->SetUnwriteableMarginInTwips(margin
);
268 #define GETBOOLPREF(_prefname, _retval) \
270 Preferences::GetBool( \
271 GetPrefName(_prefname, aPrinterName), _retval \
275 #define GETSTRPREF(_prefname, _retval) \
277 Preferences::GetString( \
278 GetPrefName(_prefname, aPrinterName), _retval \
282 #define GETINTPREF(_prefname, _retval) \
284 Preferences::GetInt( \
285 GetPrefName(_prefname, aPrinterName), _retval \
289 #define GETDBLPREF(_prefname, _retval) \
292 GetPrefName(_prefname, aPrinterName), _retval \
296 // Paper size prefs are read as a group
297 if (aFlags
& nsIPrintSettings::kInitSavePaperSize
) {
298 int32_t sizeUnit
, sizeType
;
299 double width
, height
;
301 bool success
= GETINTPREF(kPrintPaperSizeUnit
, &sizeUnit
)
302 && GETINTPREF(kPrintPaperSizeType
, &sizeType
)
303 && GETDBLPREF(kPrintPaperWidth
, width
)
304 && GETDBLPREF(kPrintPaperHeight
, height
)
305 && GETSTRPREF(kPrintPaperName
, &str
);
307 // Bug 315687: Sanity check paper size to avoid paper size values in
308 // mm when the size unit flag is inches. The value 100 is arbitrary
309 // and can be changed.
311 success
= (sizeUnit
!= nsIPrintSettings::kPaperSizeInches
)
317 aPS
->SetPaperSizeUnit(sizeUnit
);
318 DUMP_INT(kReadStr
, kPrintPaperSizeUnit
, sizeUnit
);
319 aPS
->SetPaperSizeType(sizeType
);
320 DUMP_INT(kReadStr
, kPrintPaperSizeType
, sizeType
);
321 aPS
->SetPaperWidth(width
);
322 DUMP_DBL(kReadStr
, kPrintPaperWidth
, width
);
323 aPS
->SetPaperHeight(height
);
324 DUMP_DBL(kReadStr
, kPrintPaperHeight
, height
);
325 aPS
->SetPaperName(str
.get());
326 DUMP_STR(kReadStr
, kPrintPaperName
, str
.get());
330 if (aFlags
& nsIPrintSettings::kInitSaveOddEvenPages
) {
331 if (GETBOOLPREF(kPrintEvenPages
, &b
)) {
332 aPS
->SetPrintOptions(nsIPrintSettings::kPrintEvenPages
, b
);
333 DUMP_BOOL(kReadStr
, kPrintEvenPages
, b
);
337 if (aFlags
& nsIPrintSettings::kInitSaveOddEvenPages
) {
338 if (GETBOOLPREF(kPrintOddPages
, &b
)) {
339 aPS
->SetPrintOptions(nsIPrintSettings::kPrintOddPages
, b
);
340 DUMP_BOOL(kReadStr
, kPrintOddPages
, b
);
344 if (aFlags
& nsIPrintSettings::kInitSaveHeaderLeft
) {
345 if (GETSTRPREF(kPrintHeaderStrLeft
, &str
)) {
346 aPS
->SetHeaderStrLeft(str
.get());
347 DUMP_STR(kReadStr
, kPrintHeaderStrLeft
, str
.get());
351 if (aFlags
& nsIPrintSettings::kInitSaveHeaderCenter
) {
352 if (GETSTRPREF(kPrintHeaderStrCenter
, &str
)) {
353 aPS
->SetHeaderStrCenter(str
.get());
354 DUMP_STR(kReadStr
, kPrintHeaderStrCenter
, str
.get());
358 if (aFlags
& nsIPrintSettings::kInitSaveHeaderRight
) {
359 if (GETSTRPREF(kPrintHeaderStrRight
, &str
)) {
360 aPS
->SetHeaderStrRight(str
.get());
361 DUMP_STR(kReadStr
, kPrintHeaderStrRight
, str
.get());
365 if (aFlags
& nsIPrintSettings::kInitSaveFooterLeft
) {
366 if (GETSTRPREF(kPrintFooterStrLeft
, &str
)) {
367 aPS
->SetFooterStrLeft(str
.get());
368 DUMP_STR(kReadStr
, kPrintFooterStrLeft
, str
.get());
372 if (aFlags
& nsIPrintSettings::kInitSaveFooterCenter
) {
373 if (GETSTRPREF(kPrintFooterStrCenter
, &str
)) {
374 aPS
->SetFooterStrCenter(str
.get());
375 DUMP_STR(kReadStr
, kPrintFooterStrCenter
, str
.get());
379 if (aFlags
& nsIPrintSettings::kInitSaveFooterRight
) {
380 if (GETSTRPREF(kPrintFooterStrRight
, &str
)) {
381 aPS
->SetFooterStrRight(str
.get());
382 DUMP_STR(kReadStr
, kPrintFooterStrRight
, str
.get());
386 if (aFlags
& nsIPrintSettings::kInitSaveBGColors
) {
387 if (GETBOOLPREF(kPrintBGColors
, &b
)) {
388 aPS
->SetPrintBGColors(b
);
389 DUMP_BOOL(kReadStr
, kPrintBGColors
, b
);
393 if (aFlags
& nsIPrintSettings::kInitSaveBGImages
) {
394 if (GETBOOLPREF(kPrintBGImages
, &b
)) {
395 aPS
->SetPrintBGImages(b
);
396 DUMP_BOOL(kReadStr
, kPrintBGImages
, b
);
400 if (aFlags
& nsIPrintSettings::kInitSaveReversed
) {
401 if (GETBOOLPREF(kPrintReversed
, &b
)) {
402 aPS
->SetPrintReversed(b
);
403 DUMP_BOOL(kReadStr
, kPrintReversed
, b
);
407 if (aFlags
& nsIPrintSettings::kInitSaveInColor
) {
408 if (GETBOOLPREF(kPrintInColor
, &b
)) {
409 aPS
->SetPrintInColor(b
);
410 DUMP_BOOL(kReadStr
, kPrintInColor
, b
);
414 if (aFlags
& nsIPrintSettings::kInitSavePlexName
) {
415 if (GETSTRPREF(kPrintPlexName
, &str
)) {
416 aPS
->SetPlexName(str
.get());
417 DUMP_STR(kReadStr
, kPrintPlexName
, str
.get());
421 if (aFlags
& nsIPrintSettings::kInitSavePaperData
) {
422 if (GETINTPREF(kPrintPaperData
, &iVal
)) {
423 aPS
->SetPaperData(iVal
);
424 DUMP_INT(kReadStr
, kPrintPaperData
, iVal
);
428 if (aFlags
& nsIPrintSettings::kInitSaveColorspace
) {
429 if (GETSTRPREF(kPrintColorspace
, &str
)) {
430 aPS
->SetColorspace(str
.get());
431 DUMP_STR(kReadStr
, kPrintColorspace
, str
.get());
435 if (aFlags
& nsIPrintSettings::kInitSaveResolutionName
) {
436 if (GETSTRPREF(kPrintResolutionName
, &str
)) {
437 aPS
->SetResolutionName(str
.get());
438 DUMP_STR(kReadStr
, kPrintResolutionName
, str
.get());
442 if (aFlags
& nsIPrintSettings::kInitSaveDownloadFonts
) {
443 if (GETBOOLPREF(kPrintDownloadFonts
, &b
)) {
444 aPS
->SetDownloadFonts(b
);
445 DUMP_BOOL(kReadStr
, kPrintDownloadFonts
, b
);
449 if (aFlags
& nsIPrintSettings::kInitSaveOrientation
) {
450 if (GETINTPREF(kPrintOrientation
, &iVal
)) {
451 aPS
->SetOrientation(iVal
);
452 DUMP_INT(kReadStr
, kPrintOrientation
, iVal
);
456 if (aFlags
& nsIPrintSettings::kInitSavePrintCommand
) {
457 if (GETSTRPREF(kPrintCommand
, &str
)) {
458 aPS
->SetPrintCommand(str
.get());
459 DUMP_STR(kReadStr
, kPrintCommand
, str
.get());
463 if (aFlags
& nsIPrintSettings::kInitSavePrintToFile
) {
464 if (GETBOOLPREF(kPrintToFile
, &b
)) {
465 aPS
->SetPrintToFile(b
);
466 DUMP_BOOL(kReadStr
, kPrintToFile
, b
);
470 if (aFlags
& nsIPrintSettings::kInitSaveToFileName
) {
471 if (GETSTRPREF(kPrintToFileName
, &str
)) {
472 aPS
->SetToFileName(str
.get());
473 DUMP_STR(kReadStr
, kPrintToFileName
, str
.get());
477 if (aFlags
& nsIPrintSettings::kInitSavePageDelay
) {
478 if (GETINTPREF(kPrintPageDelay
, &iVal
)) {
479 aPS
->SetPrintPageDelay(iVal
);
480 DUMP_INT(kReadStr
, kPrintPageDelay
, iVal
);
484 if (aFlags
& nsIPrintSettings::kInitSaveShrinkToFit
) {
485 if (GETBOOLPREF(kPrintShrinkToFit
, &b
)) {
486 aPS
->SetShrinkToFit(b
);
487 DUMP_BOOL(kReadStr
, kPrintShrinkToFit
, b
);
491 if (aFlags
& nsIPrintSettings::kInitSaveScaling
) {
492 if (GETDBLPREF(kPrintScaling
, dbl
)) {
493 aPS
->SetScaling(dbl
);
494 DUMP_DBL(kReadStr
, kPrintScaling
, dbl
);
498 if (aFlags
& nsIPrintSettings::kInitSaveResolution
) {
499 if (GETINTPREF(kPrintResolution
, &iVal
)) {
500 aPS
->SetResolution(iVal
);
501 DUMP_INT(kReadStr
, kPrintResolution
, iVal
);
505 if (aFlags
& nsIPrintSettings::kInitSaveDuplex
) {
506 if (GETINTPREF(kPrintDuplex
, &iVal
)) {
507 aPS
->SetDuplex(iVal
);
508 DUMP_INT(kReadStr
, kPrintDuplex
, iVal
);
518 /** ---------------------------------------------------
519 * See documentation in nsPrintOptionsImpl.h
520 * @update 1/12/01 rods
523 nsPrintOptions::WritePrefs(nsIPrintSettings
*aPS
, const nsAString
& aPrinterName
,
526 NS_ENSURE_ARG_POINTER(aPS
);
528 bool persistMarginBoxSettings
;
529 aPS
->GetPersistMarginBoxSettings(&persistMarginBoxSettings
);
532 if (aFlags
& nsIPrintSettings::kInitSaveMargins
) {
533 if (NS_SUCCEEDED(aPS
->GetMarginInTwips(margin
))) {
534 WriteInchesFromTwipsPref(GetPrefName(kMarginTop
, aPrinterName
),
536 DUMP_INT(kWriteStr
, kMarginTop
, margin
.top
);
537 WriteInchesFromTwipsPref(GetPrefName(kMarginLeft
, aPrinterName
),
539 DUMP_INT(kWriteStr
, kMarginLeft
, margin
.top
);
540 WriteInchesFromTwipsPref(GetPrefName(kMarginBottom
, aPrinterName
),
542 DUMP_INT(kWriteStr
, kMarginBottom
, margin
.top
);
543 WriteInchesFromTwipsPref(GetPrefName(kMarginRight
, aPrinterName
),
545 DUMP_INT(kWriteStr
, kMarginRight
, margin
.top
);
550 if (aFlags
& nsIPrintSettings::kInitSaveEdges
) {
551 if (NS_SUCCEEDED(aPS
->GetEdgeInTwips(edge
))) {
552 WriteInchesIntFromTwipsPref(GetPrefName(kEdgeTop
, aPrinterName
),
554 DUMP_INT(kWriteStr
, kEdgeTop
, edge
.top
);
555 WriteInchesIntFromTwipsPref(GetPrefName(kEdgeLeft
, aPrinterName
),
557 DUMP_INT(kWriteStr
, kEdgeLeft
, edge
.top
);
558 WriteInchesIntFromTwipsPref(GetPrefName(kEdgeBottom
, aPrinterName
),
560 DUMP_INT(kWriteStr
, kEdgeBottom
, edge
.top
);
561 WriteInchesIntFromTwipsPref(GetPrefName(kEdgeRight
, aPrinterName
),
563 DUMP_INT(kWriteStr
, kEdgeRight
, edge
.top
);
567 nsIntMargin unwriteableMargin
;
568 if (aFlags
& nsIPrintSettings::kInitSaveUnwriteableMargins
) {
569 if (NS_SUCCEEDED(aPS
->GetUnwriteableMarginInTwips(unwriteableMargin
))) {
570 WriteInchesIntFromTwipsPref(GetPrefName(kUnwriteableMarginTop
, aPrinterName
),
571 unwriteableMargin
.top
);
572 DUMP_INT(kWriteStr
, kUnwriteableMarginTop
, unwriteableMargin
.top
);
573 WriteInchesIntFromTwipsPref(GetPrefName(kUnwriteableMarginLeft
, aPrinterName
),
574 unwriteableMargin
.left
);
575 DUMP_INT(kWriteStr
, kUnwriteableMarginLeft
, unwriteableMargin
.top
);
576 WriteInchesIntFromTwipsPref(GetPrefName(kUnwriteableMarginBottom
, aPrinterName
),
577 unwriteableMargin
.bottom
);
578 DUMP_INT(kWriteStr
, kUnwriteableMarginBottom
, unwriteableMargin
.top
);
579 WriteInchesIntFromTwipsPref(GetPrefName(kUnwriteableMarginRight
, aPrinterName
),
580 unwriteableMargin
.right
);
581 DUMP_INT(kWriteStr
, kUnwriteableMarginRight
, unwriteableMargin
.top
);
585 // Paper size prefs are saved as a group
586 if (aFlags
& nsIPrintSettings::kInitSavePaperSize
) {
587 int16_t sizeUnit
, sizeType
;
588 double width
, height
;
592 NS_SUCCEEDED(aPS
->GetPaperSizeUnit(&sizeUnit
)) &&
593 NS_SUCCEEDED(aPS
->GetPaperSizeType(&sizeType
)) &&
594 NS_SUCCEEDED(aPS
->GetPaperWidth(&width
)) &&
595 NS_SUCCEEDED(aPS
->GetPaperHeight(&height
)) &&
596 NS_SUCCEEDED(aPS
->GetPaperName(&name
))
598 DUMP_INT(kWriteStr
, kPrintPaperSizeUnit
, sizeUnit
);
599 Preferences::SetInt(GetPrefName(kPrintPaperSizeUnit
, aPrinterName
),
601 DUMP_INT(kWriteStr
, kPrintPaperSizeType
, sizeType
);
602 Preferences::SetInt(GetPrefName(kPrintPaperSizeType
, aPrinterName
),
604 DUMP_DBL(kWriteStr
, kPrintPaperWidth
, width
);
605 WritePrefDouble(GetPrefName(kPrintPaperWidth
, aPrinterName
), width
);
606 DUMP_DBL(kWriteStr
, kPrintPaperHeight
, height
);
607 WritePrefDouble(GetPrefName(kPrintPaperHeight
, aPrinterName
), height
);
608 DUMP_STR(kWriteStr
, kPrintPaperName
, name
);
609 Preferences::SetString(GetPrefName(kPrintPaperName
, aPrinterName
), name
);
619 if (aFlags
& nsIPrintSettings::kInitSaveOddEvenPages
) {
620 if (NS_SUCCEEDED(aPS
->GetPrintOptions(nsIPrintSettings::kPrintEvenPages
,
622 DUMP_BOOL(kWriteStr
, kPrintEvenPages
, b
);
623 Preferences::SetBool(GetPrefName(kPrintEvenPages
, aPrinterName
), b
);
627 if (aFlags
& nsIPrintSettings::kInitSaveOddEvenPages
) {
628 if (NS_SUCCEEDED(aPS
->GetPrintOptions(nsIPrintSettings::kPrintOddPages
,
630 DUMP_BOOL(kWriteStr
, kPrintOddPages
, b
);
631 Preferences::SetBool(GetPrefName(kPrintOddPages
, aPrinterName
), b
);
635 if (persistMarginBoxSettings
) {
636 if (aFlags
& nsIPrintSettings::kInitSaveHeaderLeft
) {
637 if (NS_SUCCEEDED(aPS
->GetHeaderStrLeft(&uStr
))) {
638 DUMP_STR(kWriteStr
, kPrintHeaderStrLeft
, uStr
);
639 Preferences::SetString(GetPrefName(kPrintHeaderStrLeft
, aPrinterName
),
644 if (aFlags
& nsIPrintSettings::kInitSaveHeaderCenter
) {
645 if (NS_SUCCEEDED(aPS
->GetHeaderStrCenter(&uStr
))) {
646 DUMP_STR(kWriteStr
, kPrintHeaderStrCenter
, uStr
);
647 Preferences::SetString(GetPrefName(kPrintHeaderStrCenter
, aPrinterName
),
652 if (aFlags
& nsIPrintSettings::kInitSaveHeaderRight
) {
653 if (NS_SUCCEEDED(aPS
->GetHeaderStrRight(&uStr
))) {
654 DUMP_STR(kWriteStr
, kPrintHeaderStrRight
, uStr
);
655 Preferences::SetString(GetPrefName(kPrintHeaderStrRight
, aPrinterName
),
660 if (aFlags
& nsIPrintSettings::kInitSaveFooterLeft
) {
661 if (NS_SUCCEEDED(aPS
->GetFooterStrLeft(&uStr
))) {
662 DUMP_STR(kWriteStr
, kPrintFooterStrLeft
, uStr
);
663 Preferences::SetString(GetPrefName(kPrintFooterStrLeft
, aPrinterName
),
668 if (aFlags
& nsIPrintSettings::kInitSaveFooterCenter
) {
669 if (NS_SUCCEEDED(aPS
->GetFooterStrCenter(&uStr
))) {
670 DUMP_STR(kWriteStr
, kPrintFooterStrCenter
, uStr
);
671 Preferences::SetString(GetPrefName(kPrintFooterStrCenter
, aPrinterName
),
676 if (aFlags
& nsIPrintSettings::kInitSaveFooterRight
) {
677 if (NS_SUCCEEDED(aPS
->GetFooterStrRight(&uStr
))) {
678 DUMP_STR(kWriteStr
, kPrintFooterStrRight
, uStr
);
679 Preferences::SetString(GetPrefName(kPrintFooterStrRight
, aPrinterName
),
685 if (aFlags
& nsIPrintSettings::kInitSaveBGColors
) {
686 if (NS_SUCCEEDED(aPS
->GetPrintBGColors(&b
))) {
687 DUMP_BOOL(kWriteStr
, kPrintBGColors
, b
);
688 Preferences::SetBool(GetPrefName(kPrintBGColors
, aPrinterName
), b
);
692 if (aFlags
& nsIPrintSettings::kInitSaveBGImages
) {
693 if (NS_SUCCEEDED(aPS
->GetPrintBGImages(&b
))) {
694 DUMP_BOOL(kWriteStr
, kPrintBGImages
, b
);
695 Preferences::SetBool(GetPrefName(kPrintBGImages
, aPrinterName
), b
);
699 if (aFlags
& nsIPrintSettings::kInitSaveReversed
) {
700 if (NS_SUCCEEDED(aPS
->GetPrintReversed(&b
))) {
701 DUMP_BOOL(kWriteStr
, kPrintReversed
, b
);
702 Preferences::SetBool(GetPrefName(kPrintReversed
, aPrinterName
), b
);
706 if (aFlags
& nsIPrintSettings::kInitSaveInColor
) {
707 if (NS_SUCCEEDED(aPS
->GetPrintInColor(&b
))) {
708 DUMP_BOOL(kWriteStr
, kPrintInColor
, b
);
709 Preferences::SetBool(GetPrefName(kPrintInColor
, aPrinterName
), b
);
713 if (aFlags
& nsIPrintSettings::kInitSavePlexName
) {
714 if (NS_SUCCEEDED(aPS
->GetPlexName(&uStr
))) {
715 DUMP_STR(kWriteStr
, kPrintPlexName
, uStr
);
716 Preferences::SetString(GetPrefName(kPrintPlexName
, aPrinterName
), uStr
);
720 if (aFlags
& nsIPrintSettings::kInitSavePaperData
) {
721 if (NS_SUCCEEDED(aPS
->GetPaperData(&iVal16
))) {
722 DUMP_INT(kWriteStr
, kPrintPaperData
, iVal16
);
723 Preferences::SetInt(GetPrefName(kPrintPaperData
, aPrinterName
),
728 if (aFlags
& nsIPrintSettings::kInitSaveColorspace
) {
729 if (NS_SUCCEEDED(aPS
->GetColorspace(&uStr
))) {
730 DUMP_STR(kWriteStr
, kPrintColorspace
, uStr
);
731 Preferences::SetString(GetPrefName(kPrintColorspace
, aPrinterName
), uStr
);
735 if (aFlags
& nsIPrintSettings::kInitSaveResolutionName
) {
736 if (NS_SUCCEEDED(aPS
->GetResolutionName(&uStr
))) {
737 DUMP_STR(kWriteStr
, kPrintResolutionName
, uStr
);
738 Preferences::SetString(GetPrefName(kPrintResolutionName
, aPrinterName
),
743 if (aFlags
& nsIPrintSettings::kInitSaveDownloadFonts
) {
744 if (NS_SUCCEEDED(aPS
->GetDownloadFonts(&b
))) {
745 DUMP_BOOL(kWriteStr
, kPrintDownloadFonts
, b
);
746 Preferences::SetBool(GetPrefName(kPrintDownloadFonts
, aPrinterName
), b
);
750 if (aFlags
& nsIPrintSettings::kInitSaveOrientation
) {
751 if (NS_SUCCEEDED(aPS
->GetOrientation(&iVal
))) {
752 DUMP_INT(kWriteStr
, kPrintOrientation
, iVal
);
753 Preferences::SetInt(GetPrefName(kPrintOrientation
, aPrinterName
), iVal
);
757 if (aFlags
& nsIPrintSettings::kInitSavePrintCommand
) {
758 if (NS_SUCCEEDED(aPS
->GetPrintCommand(&uStr
))) {
759 DUMP_STR(kWriteStr
, kPrintCommand
, uStr
);
760 Preferences::SetString(GetPrefName(kPrintCommand
, aPrinterName
), uStr
);
764 // Only the general version of this pref is saved
765 if ((aFlags
& nsIPrintSettings::kInitSavePrinterName
)
766 && aPrinterName
.IsEmpty()) {
767 if (NS_SUCCEEDED(aPS
->GetPrinterName(&uStr
))) {
768 DUMP_STR(kWriteStr
, kPrinterName
, uStr
);
769 Preferences::SetString(kPrinterName
, uStr
);
773 if (aFlags
& nsIPrintSettings::kInitSavePrintToFile
) {
774 if (NS_SUCCEEDED(aPS
->GetPrintToFile(&b
))) {
775 DUMP_BOOL(kWriteStr
, kPrintToFile
, b
);
776 Preferences::SetBool(GetPrefName(kPrintToFile
, aPrinterName
), b
);
780 if (aFlags
& nsIPrintSettings::kInitSaveToFileName
) {
781 if (NS_SUCCEEDED(aPS
->GetToFileName(&uStr
))) {
782 DUMP_STR(kWriteStr
, kPrintToFileName
, uStr
);
783 Preferences::SetString(GetPrefName(kPrintToFileName
, aPrinterName
), uStr
);
787 if (aFlags
& nsIPrintSettings::kInitSavePageDelay
) {
788 if (NS_SUCCEEDED(aPS
->GetPrintPageDelay(&iVal
))) {
789 DUMP_INT(kWriteStr
, kPrintPageDelay
, iVal
);
790 Preferences::SetInt(GetPrefName(kPrintPageDelay
, aPrinterName
), iVal
);
794 if (aFlags
& nsIPrintSettings::kInitSaveShrinkToFit
) {
795 if (NS_SUCCEEDED(aPS
->GetShrinkToFit(&b
))) {
796 DUMP_BOOL(kWriteStr
, kPrintShrinkToFit
, b
);
797 Preferences::SetBool(GetPrefName(kPrintShrinkToFit
, aPrinterName
), b
);
801 if (aFlags
& nsIPrintSettings::kInitSaveScaling
) {
802 if (NS_SUCCEEDED(aPS
->GetScaling(&dbl
))) {
803 DUMP_DBL(kWriteStr
, kPrintScaling
, dbl
);
804 WritePrefDouble(GetPrefName(kPrintScaling
, aPrinterName
), dbl
);
808 if (aFlags
& nsIPrintSettings::kInitSaveResolution
) {
809 if (NS_SUCCEEDED(aPS
->GetResolution(&iVal
))) {
810 DUMP_INT(kWriteStr
, kPrintResolution
, iVal
);
811 Preferences::SetInt(GetPrefName(kPrintResolution
, aPrinterName
), iVal
);
815 if (aFlags
& nsIPrintSettings::kInitSaveDuplex
) {
816 if (NS_SUCCEEDED(aPS
->GetDuplex(&iVal
))) {
817 DUMP_INT(kWriteStr
, kPrintDuplex
, iVal
);
818 Preferences::SetInt(GetPrefName(kPrintDuplex
, aPrinterName
), iVal
);
829 nsPrintOptions::DisplayJobProperties(const char16_t
*aPrinter
,
830 nsIPrintSettings
* aPrintSettings
,
833 NS_ENSURE_ARG_POINTER(aPrinter
);
837 nsCOMPtr
<nsIPrinterEnumerator
> propDlg
=
838 do_CreateInstance(NS_PRINTER_ENUMERATOR_CONTRACTID
, &rv
);
839 NS_ENSURE_SUCCESS(rv
, rv
);
841 NS_ENSURE_ARG_POINTER(aPrintSettings
);
842 rv
= propDlg
->DisplayPropertiesDlg(aPrinter
, aPrintSettings
);
843 NS_ENSURE_SUCCESS(rv
, rv
);
850 NS_IMETHODIMP
nsPrintOptions::GetNativeData(int16_t aDataType
, void * *_retval
)
852 return NS_ERROR_NOT_IMPLEMENTED
;
855 nsresult
nsPrintOptions::_CreatePrintSettings(nsIPrintSettings
**_retval
)
857 // does not initially ref count
858 nsPrintSettings
* printSettings
= new nsPrintSettings();
859 NS_ENSURE_TRUE(printSettings
, NS_ERROR_OUT_OF_MEMORY
);
861 NS_ADDREF(*_retval
= printSettings
); // ref count
863 nsXPIDLString printerName
;
864 nsresult rv
= GetDefaultPrinterName(getter_Copies(printerName
));
865 NS_ENSURE_SUCCESS(rv
, rv
);
866 (*_retval
)->SetPrinterName(printerName
.get());
868 (void)InitPrintSettingsFromPrefs(*_retval
, false,
869 nsIPrintSettings::kInitSaveAll
);
874 NS_IMETHODIMP
nsPrintOptions::CreatePrintSettings(nsIPrintSettings
**_retval
)
876 return _CreatePrintSettings(_retval
);
880 nsPrintOptions::GetGlobalPrintSettings(nsIPrintSettings
**aGlobalPrintSettings
)
884 rv
= CreatePrintSettings(getter_AddRefs(mGlobalPrintSettings
));
885 NS_ENSURE_SUCCESS(rv
, rv
);
887 NS_ADDREF(*aGlobalPrintSettings
= mGlobalPrintSettings
.get());
893 nsPrintOptions::GetNewPrintSettings(nsIPrintSettings
* *aNewPrintSettings
)
895 return CreatePrintSettings(aNewPrintSettings
);
899 nsPrintOptions::GetDefaultPrinterName(char16_t
* *aDefaultPrinterName
)
902 nsCOMPtr
<nsIPrinterEnumerator
> prtEnum
=
903 do_GetService(NS_PRINTER_ENUMERATOR_CONTRACTID
, &rv
);
904 NS_ENSURE_SUCCESS(rv
, rv
);
906 // Look up the printer from the last print job
907 nsAutoString lastPrinterName
;
908 Preferences::GetString(kPrinterName
, &lastPrinterName
);
909 if (!lastPrinterName
.IsEmpty()) {
910 // Verify it's still a valid printer
911 nsCOMPtr
<nsIStringEnumerator
> printers
;
912 rv
= prtEnum
->GetPrinterNameList(getter_AddRefs(printers
));
913 if (NS_SUCCEEDED(rv
)) {
914 bool isValid
= false;
916 while (NS_SUCCEEDED(printers
->HasMore(&hasMore
)) && hasMore
) {
917 nsAutoString printer
;
918 if (NS_SUCCEEDED(printers
->GetNext(printer
)) && lastPrinterName
.Equals(printer
)) {
924 *aDefaultPrinterName
= ToNewUnicode(lastPrinterName
);
930 // There is no last printer preference, or it doesn't name a valid printer.
931 // Return the default from the printer enumeration.
932 return prtEnum
->GetDefaultPrinterName(aDefaultPrinterName
);
936 nsPrintOptions::InitPrintSettingsFromPrinter(const char16_t
*aPrinterName
,
937 nsIPrintSettings
*aPrintSettings
)
939 NS_ENSURE_ARG_POINTER(aPrintSettings
);
940 NS_ENSURE_ARG_POINTER(aPrinterName
);
943 nsXPIDLString printerName
;
944 aPrintSettings
->GetPrinterName(getter_Copies(printerName
));
945 if (!printerName
.Equals(aPrinterName
)) {
946 NS_WARNING("Printer names should match!");
951 aPrintSettings
->GetIsInitializedFromPrinter(&isInitialized
);
956 nsCOMPtr
<nsIPrinterEnumerator
> prtEnum
=
957 do_GetService(NS_PRINTER_ENUMERATOR_CONTRACTID
, &rv
);
958 NS_ENSURE_SUCCESS(rv
, rv
);
960 rv
= prtEnum
->InitPrintSettingsFromPrinter(aPrinterName
, aPrintSettings
);
961 NS_ENSURE_SUCCESS(rv
, rv
);
963 aPrintSettings
->SetIsInitializedFromPrinter(true);
967 /** ---------------------------------------------------
968 * Helper function - Returns either the name or sets the length to zero
971 GetAdjustedPrinterName(nsIPrintSettings
* aPS
, bool aUsePNP
,
972 nsAString
& aPrinterName
)
974 NS_ENSURE_ARG_POINTER(aPS
);
976 aPrinterName
.Truncate();
980 // Get the Printer Name from the PrintSettings
981 // to use as a prefix for Pref Names
982 char16_t
* prtName
= nullptr;
984 nsresult rv
= aPS
->GetPrinterName(&prtName
);
985 NS_ENSURE_SUCCESS(rv
, rv
);
987 aPrinterName
= nsDependentString(prtName
);
989 // Convert any whitespaces, carriage returns or newlines to _
990 // The below algorithm is supposedly faster than using iterators
991 NS_NAMED_LITERAL_STRING(replSubstr
, "_");
992 const char* replaceStr
= " \n\r";
995 for (x
=0; x
< (int32_t)strlen(replaceStr
); x
++) {
996 char16_t uChar
= replaceStr
[x
];
999 while ((i
= aPrinterName
.FindChar(uChar
, i
)) != kNotFound
) {
1000 aPrinterName
.Replace(i
, 1, replSubstr
);
1008 nsPrintOptions::GetPrinterPrefInt(nsIPrintSettings
*aPrintSettings
,
1009 const char16_t
*aPrefName
, int32_t *_retval
)
1011 NS_ENSURE_ARG_POINTER(aPrintSettings
);
1012 NS_ENSURE_ARG_POINTER(aPrefName
);
1014 nsAutoString prtName
;
1015 // Get the Printer Name from the PrintSettings
1016 // to use as a prefix for Pref Names
1017 GetAdjustedPrinterName(aPrintSettings
, true, prtName
);
1019 const char* prefName
=
1020 GetPrefName(NS_LossyConvertUTF16toASCII(aPrefName
).get(), prtName
);
1022 NS_ENSURE_TRUE(prefName
, NS_ERROR_FAILURE
);
1025 nsresult rv
= Preferences::GetInt(prefName
, &iVal
);
1026 NS_ENSURE_SUCCESS(rv
, rv
);
1033 nsPrintOptions::InitPrintSettingsFromPrefs(nsIPrintSettings
* aPS
,
1034 bool aUsePNP
, uint32_t aFlags
)
1036 NS_ENSURE_ARG_POINTER(aPS
);
1039 aPS
->GetIsInitializedFromPrefs(&isInitialized
);
1044 nsAutoString prtName
;
1045 // read any non printer specific prefs
1046 // with empty printer name
1047 nsresult rv
= ReadPrefs(aPS
, prtName
, aFlags
);
1048 NS_ENSURE_SUCCESS(rv
, rv
);
1050 // Do not use printer name in Linux because GTK backend does not support
1051 // per printer settings.
1053 // Get the Printer Name from the PrintSettings
1054 // to use as a prefix for Pref Names
1055 rv
= GetAdjustedPrinterName(aPS
, aUsePNP
, prtName
);
1056 NS_ENSURE_SUCCESS(rv
, rv
);
1058 if (prtName
.IsEmpty()) {
1059 NS_WARNING("Caller should supply a printer name.");
1063 // Now read any printer specific prefs
1064 rv
= ReadPrefs(aPS
, prtName
, aFlags
);
1065 if (NS_SUCCEEDED(rv
))
1066 aPS
->SetIsInitializedFromPrefs(true);
1073 * Save all of the printer settings; if we can find a printer name, save
1074 * printer-specific preferences. Otherwise, save generic ones.
1077 nsPrintOptions::SavePrintSettingsToPrefs(nsIPrintSettings
*aPS
,
1078 bool aUsePrinterNamePrefix
,
1081 NS_ENSURE_ARG_POINTER(aPS
);
1082 nsAutoString prtName
;
1084 // Do not use printer name in Linux because GTK backend does not support
1085 // per printer settings.
1087 // Get the printer name from the PrinterSettings for an optional prefix.
1088 nsresult rv
= GetAdjustedPrinterName(aPS
, aUsePrinterNamePrefix
, prtName
);
1089 NS_ENSURE_SUCCESS(rv
, rv
);
1092 // Write the prefs, with or without a printer name prefix.
1093 return WritePrefs(aPS
, prtName
, aFlags
);
1097 //-----------------------------------------------------
1098 //-- Protected Methods --------------------------------
1099 //-----------------------------------------------------
1101 nsPrintOptions::ReadPrefDouble(const char * aPrefId
, double& aVal
)
1103 NS_ENSURE_ARG_POINTER(aPrefId
);
1106 nsresult rv
= Preferences::GetCString(aPrefId
, &str
);
1107 if (NS_SUCCEEDED(rv
) && !str
.IsEmpty()) {
1108 aVal
= atof(str
.get());
1114 nsPrintOptions::WritePrefDouble(const char * aPrefId
, double aVal
)
1116 NS_ENSURE_ARG_POINTER(aPrefId
);
1118 nsPrintfCString
str("%6.2f", aVal
);
1119 NS_ENSURE_TRUE(!str
.IsEmpty(), NS_ERROR_FAILURE
);
1121 return Preferences::SetCString(aPrefId
, str
);
1125 nsPrintOptions::ReadInchesToTwipsPref(const char * aPrefId
, int32_t& aTwips
,
1126 const char * aMarginPref
)
1129 nsresult rv
= Preferences::GetString(aPrefId
, &str
);
1130 if (NS_FAILED(rv
) || str
.IsEmpty()) {
1131 rv
= Preferences::GetString(aMarginPref
, &str
);
1133 if (NS_SUCCEEDED(rv
) && !str
.IsEmpty()) {
1135 float inches
= str
.ToFloat(&errCode
);
1136 if (NS_SUCCEEDED(errCode
)) {
1137 aTwips
= NS_INCHES_TO_INT_TWIPS(inches
);
1145 nsPrintOptions::WriteInchesFromTwipsPref(const char * aPrefId
, int32_t aTwips
)
1147 double inches
= NS_TWIPS_TO_INCHES(aTwips
);
1148 nsAutoCString inchesStr
;
1149 inchesStr
.AppendFloat(inches
);
1151 Preferences::SetCString(aPrefId
, inchesStr
);
1155 nsPrintOptions::ReadInchesIntToTwipsPref(const char * aPrefId
, int32_t& aTwips
,
1156 const char * aMarginPref
)
1159 nsresult rv
= Preferences::GetInt(aPrefId
, &value
);
1160 if (NS_FAILED(rv
)) {
1161 rv
= Preferences::GetInt(aMarginPref
, &value
);
1163 if (NS_SUCCEEDED(rv
)) {
1164 aTwips
= NS_INCHES_TO_INT_TWIPS(float(value
)/100.0f
);
1171 nsPrintOptions::WriteInchesIntFromTwipsPref(const char * aPrefId
, int32_t aTwips
)
1173 Preferences::SetInt(aPrefId
,
1174 int32_t(NS_TWIPS_TO_INCHES(aTwips
) * 100.0f
+ 0.5f
));
1178 nsPrintOptions::ReadJustification(const char * aPrefId
, int16_t& aJust
,
1182 nsAutoString justStr
;
1183 if (NS_SUCCEEDED(Preferences::GetString(aPrefId
, &justStr
))) {
1184 if (justStr
.EqualsASCII(kJustRight
)) {
1185 aJust
= nsIPrintSettings::kJustRight
;
1186 } else if (justStr
.EqualsASCII(kJustCenter
)) {
1187 aJust
= nsIPrintSettings::kJustCenter
;
1189 aJust
= nsIPrintSettings::kJustLeft
;
1194 //---------------------------------------------------
1196 nsPrintOptions::WriteJustification(const char * aPrefId
, int16_t aJust
)
1199 case nsIPrintSettings::kJustLeft
:
1200 Preferences::SetCString(aPrefId
, kJustLeft
);
1203 case nsIPrintSettings::kJustCenter
:
1204 Preferences::SetCString(aPrefId
, kJustCenter
);
1207 case nsIPrintSettings::kJustRight
:
1208 Preferences::SetCString(aPrefId
, kJustRight
);
1213 //----------------------------------------------------------------------
1214 // Testing of read/write prefs
1215 // This define turns on the testing module below
1216 // so at start up it writes and reads the prefs.
1224 nsCOMPtr
<nsIPrintSettings
> ps
;
1226 nsCOMPtr
<nsIPrintOptions
> printService
=
1227 do_GetService("@mozilla.org/gfx/printsettings-service;1", &rv
);
1228 if (NS_SUCCEEDED(rv
)) {
1229 rv
= printService
->CreatePrintSettings(getter_AddRefs(ps
));
1233 ps
->SetPrintOptions(nsIPrintSettings::kPrintOddPages
, true);
1234 ps
->SetPrintOptions(nsIPrintSettings::kPrintEvenPages
, false);
1235 ps
->SetMarginTop(1.0);
1236 ps
->SetMarginLeft(1.0);
1237 ps
->SetMarginBottom(1.0);
1238 ps
->SetMarginRight(1.0);
1239 ps
->SetScaling(0.5);
1240 ps
->SetPrintBGColors(true);
1241 ps
->SetPrintBGImages(true);
1242 ps
->SetPrintRange(15);
1243 ps
->SetHeaderStrLeft(NS_ConvertUTF8toUTF16("Left").get());
1244 ps
->SetHeaderStrCenter(NS_ConvertUTF8toUTF16("Center").get());
1245 ps
->SetHeaderStrRight(NS_ConvertUTF8toUTF16("Right").get());
1246 ps
->SetFooterStrLeft(NS_ConvertUTF8toUTF16("Left").get());
1247 ps
->SetFooterStrCenter(NS_ConvertUTF8toUTF16("Center").get());
1248 ps
->SetFooterStrRight(NS_ConvertUTF8toUTF16("Right").get());
1249 ps
->SetPaperName(NS_ConvertUTF8toUTF16("Paper Name").get());
1250 ps
->SetPlexName(NS_ConvertUTF8toUTF16("Plex Name").get());
1251 ps
->SetPaperSizeType(10);
1252 ps
->SetPaperData(1);
1253 ps
->SetPaperWidth(100.0);
1254 ps
->SetPaperHeight(50.0);
1255 ps
->SetPaperSizeUnit(nsIPrintSettings::kPaperSizeMillimeters
);
1256 ps
->SetPrintReversed(true);
1257 ps
->SetPrintInColor(true);
1258 ps
->SetOrientation(nsIPrintSettings::kLandscapeOrientation
);
1259 ps
->SetPrintCommand(NS_ConvertUTF8toUTF16("Command").get());
1260 ps
->SetNumCopies(2);
1261 ps
->SetPrinterName(NS_ConvertUTF8toUTF16("Printer Name").get());
1262 ps
->SetPrintToFile(true);
1263 ps
->SetToFileName(NS_ConvertUTF8toUTF16("File Name").get());
1264 ps
->SetPrintPageDelay(1000);
1265 ps
->SetShrinkToFit(true);
1267 struct SettingsType
{
1271 SettingsType gSettings
[] = {
1272 {"OddEven", nsIPrintSettings::kInitSaveOddEvenPages
},
1273 {kPrintHeaderStrLeft
, nsIPrintSettings::kInitSaveHeaderLeft
},
1274 {kPrintHeaderStrCenter
, nsIPrintSettings::kInitSaveHeaderCenter
},
1275 {kPrintHeaderStrRight
, nsIPrintSettings::kInitSaveHeaderRight
},
1276 {kPrintFooterStrLeft
, nsIPrintSettings::kInitSaveFooterLeft
},
1277 {kPrintFooterStrCenter
, nsIPrintSettings::kInitSaveFooterCenter
},
1278 {kPrintFooterStrRight
, nsIPrintSettings::kInitSaveFooterRight
},
1279 {kPrintBGColors
, nsIPrintSettings::kInitSaveBGColors
},
1280 {kPrintBGImages
, nsIPrintSettings::kInitSaveBGImages
},
1281 {kPrintShrinkToFit
, nsIPrintSettings::kInitSaveShrinkToFit
},
1282 {kPrintPaperSize
, nsIPrintSettings::kInitSavePaperSize
},
1283 {kPrintPlexName
, nsIPrintSettings::kInitSavePlexName
},
1284 {kPrintPaperData
, nsIPrintSettings::kInitSavePaperData
},
1285 {kPrintReversed
, nsIPrintSettings::kInitSaveReversed
},
1286 {kPrintInColor
, nsIPrintSettings::kInitSaveInColor
},
1287 {kPrintColorspace
, nsIPrintSettings::kInitSaveColorspace
},
1288 {kPrintResolutionName
, nsIPrintSettings::kInitSaveResolutionName
},
1289 {kPrintDownloadFonts
, nsIPrintSettings::kInitSaveDownloadFonts
},
1290 {kPrintOrientation
, nsIPrintSettings::kInitSaveOrientation
},
1291 {kPrintCommand
, nsIPrintSettings::kInitSavePrintCommand
},
1292 {kPrinterName
, nsIPrintSettings::kInitSavePrinterName
},
1293 {kPrintToFile
, nsIPrintSettings::kInitSavePrintToFile
},
1294 {kPrintToFileName
, nsIPrintSettings::kInitSaveToFileName
},
1295 {kPrintPageDelay
, nsIPrintSettings::kInitSavePageDelay
},
1296 {"Margins", nsIPrintSettings::kInitSaveMargins
},
1297 {"All", nsIPrintSettings::kInitSaveAll
},
1300 nsString prefix
; prefix
.AssignLiteral("Printer Name");
1302 while (gSettings
[i
].mName
!= nullptr) {
1303 printf("------------------------------------------------\n");
1304 printf("%d) %s -> 0x%X\n", i
, gSettings
[i
].mName
, gSettings
[i
].mFlag
);
1305 printService
->SavePrintSettingsToPrefs(ps
, true, gSettings
[i
].mFlag
);
1306 printService
->InitPrintSettingsFromPrefs(ps
, true,
1307 gSettings
[i
].mFlag
);