Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 // -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 var dialog;
8 var printService = null;
9 var gOriginalNumCopies = 1;
11 var paramBlock;
12 var gPrefs = null;
13 var gPrintSettings = null;
14 var gWebBrowserPrint = null;
15 var gPrintSetInterface = Components.interfaces.nsIPrintSettings;
16 var doDebug = false;
18 //---------------------------------------------------
19 function initDialog()
20 {
21 dialog = new Object;
23 dialog.propertiesButton = document.getElementById("properties");
24 dialog.descText = document.getElementById("descText");
26 dialog.printrangeGroup = document.getElementById("printrangeGroup");
27 dialog.allpagesRadio = document.getElementById("allpagesRadio");
28 dialog.rangeRadio = document.getElementById("rangeRadio");
29 dialog.selectionRadio = document.getElementById("selectionRadio");
30 dialog.frompageInput = document.getElementById("frompageInput");
31 dialog.frompageLabel = document.getElementById("frompageLabel");
32 dialog.topageInput = document.getElementById("topageInput");
33 dialog.topageLabel = document.getElementById("topageLabel");
35 dialog.numCopiesInput = document.getElementById("numCopiesInput");
37 dialog.printframeGroup = document.getElementById("printframeGroup");
38 dialog.aslaidoutRadio = document.getElementById("aslaidoutRadio");
39 dialog.selectedframeRadio = document.getElementById("selectedframeRadio");
40 dialog.eachframesepRadio = document.getElementById("eachframesepRadio");
41 dialog.printframeGroupLabel = document.getElementById("printframeGroupLabel");
43 dialog.fileCheck = document.getElementById("fileCheck");
44 dialog.printerLabel = document.getElementById("printerLabel");
45 dialog.printerList = document.getElementById("printerList");
47 dialog.printButton = document.documentElement.getButton("accept");
49 // <data> elements
50 dialog.printName = document.getElementById("printButton");
51 dialog.fpDialog = document.getElementById("fpDialog");
53 dialog.enabled = false;
54 }
56 //---------------------------------------------------
57 function checkInteger(element)
58 {
59 var value = element.value;
60 if (value && value.length > 0) {
61 value = value.replace(/[^0-9]/g,"");
62 if (!value) value = "";
63 element.value = value;
64 }
65 if (!value || value < 1 || value > 999)
66 dialog.printButton.setAttribute("disabled","true");
67 else
68 dialog.printButton.removeAttribute("disabled");
69 }
71 //---------------------------------------------------
72 function stripTrailingWhitespace(element)
73 {
74 var value = element.value;
75 value = value.replace(/\s+$/,"");
76 element.value = value;
77 }
79 //---------------------------------------------------
80 function getPrinterDescription(printerName)
81 {
82 var s = "";
84 try {
85 /* This may not work with non-ASCII test (see bug 235763 comment #16) */
86 s = gPrefs.getCharPref("print.printer_" + printerName + ".printer_description")
87 } catch(e) {
88 }
90 return s;
91 }
93 //---------------------------------------------------
94 function listElement(aListElement)
95 {
96 this.listElement = aListElement;
97 }
99 listElement.prototype =
100 {
101 clearList:
102 function ()
103 {
104 // remove the menupopup node child of the menulist.
105 var popup = this.listElement.firstChild;
106 if (popup) {
107 this.listElement.removeChild(popup);
108 }
109 },
111 appendPrinterNames:
112 function (aDataObject)
113 {
114 if ((null == aDataObject) || !aDataObject.hasMore()) {
115 // disable dialog
116 this.listElement.setAttribute("value", "");
117 this.listElement.setAttribute("label",
118 document.getElementById("printingBundle")
119 .getString("noprinter"));
121 this.listElement.setAttribute("disabled", "true");
122 dialog.printerLabel.setAttribute("disabled","true");
123 dialog.propertiesButton.setAttribute("disabled","true");
124 dialog.fileCheck.setAttribute("disabled","true");
125 dialog.printButton.setAttribute("disabled","true");
126 }
127 else {
128 // build popup menu from printer names
129 var list = document.getElementById("printerList");
130 do {
131 printerNameStr = aDataObject.getNext();
132 list.appendItem(printerNameStr, printerNameStr, getPrinterDescription(printerNameStr));
133 } while (aDataObject.hasMore());
134 this.listElement.removeAttribute("disabled");
135 }
136 }
137 };
139 //---------------------------------------------------
140 function getPrinters()
141 {
142 var selectElement = new listElement(dialog.printerList);
143 selectElement.clearList();
145 var printerEnumerator;
146 try {
147 printerEnumerator =
148 Components.classes["@mozilla.org/gfx/printerenumerator;1"]
149 .getService(Components.interfaces.nsIPrinterEnumerator)
150 .printerNameList;
151 } catch(e) { printerEnumerator = null; }
153 selectElement.appendPrinterNames(printerEnumerator);
154 selectElement.listElement.value = printService.defaultPrinterName;
156 // make sure we load the prefs for the initially selected printer
157 setPrinterDefaultsForSelectedPrinter();
158 }
161 //---------------------------------------------------
162 // update gPrintSettings with the defaults for the selected printer
163 function setPrinterDefaultsForSelectedPrinter()
164 {
165 gPrintSettings.printerName = dialog.printerList.value;
167 dialog.descText.value = getPrinterDescription(gPrintSettings.printerName);
169 // First get any defaults from the printer
170 printService.initPrintSettingsFromPrinter(gPrintSettings.printerName, gPrintSettings);
172 // now augment them with any values from last time
173 printService.initPrintSettingsFromPrefs(gPrintSettings, true, gPrintSetInterface.kInitSaveAll);
175 if (doDebug) {
176 dump("setPrinterDefaultsForSelectedPrinter: printerName='"+gPrintSettings.printerName+"', paperName='"+gPrintSettings.paperName+"'\n");
177 }
178 }
180 //---------------------------------------------------
181 function displayPropertiesDialog()
182 {
183 gPrintSettings.numCopies = dialog.numCopiesInput.value;
184 try {
185 var printingPromptService = Components.classes["@mozilla.org/embedcomp/printingprompt-service;1"]
186 .getService(Components.interfaces.nsIPrintingPromptService);
187 if (printingPromptService) {
188 printingPromptService.showPrinterProperties(null, dialog.printerList.value, gPrintSettings);
189 dialog.numCopiesInput.value = gPrintSettings.numCopies;
190 }
191 } catch(e) {
192 dump("problems getting printingPromptService\n");
193 }
194 }
196 //---------------------------------------------------
197 function doPrintRange(inx)
198 {
199 if (inx == 1) {
200 dialog.frompageInput.removeAttribute("disabled");
201 dialog.frompageLabel.removeAttribute("disabled");
202 dialog.topageInput.removeAttribute("disabled");
203 dialog.topageLabel.removeAttribute("disabled");
204 } else {
205 dialog.frompageInput.setAttribute("disabled","true");
206 dialog.frompageLabel.setAttribute("disabled","true");
207 dialog.topageInput.setAttribute("disabled","true");
208 dialog.topageLabel.setAttribute("disabled","true");
209 }
210 }
212 //---------------------------------------------------
213 function loadDialog()
214 {
215 var print_copies = 1;
216 var print_selection_radio_enabled = false;
217 var print_frametype = gPrintSetInterface.kSelectedFrame;
218 var print_howToEnableUI = gPrintSetInterface.kFrameEnableNone;
219 var print_tofile = "";
221 try {
222 gPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
224 printService = Components.classes["@mozilla.org/gfx/printsettings-service;1"];
225 if (printService) {
226 printService = printService.getService();
227 if (printService) {
228 printService = printService.QueryInterface(Components.interfaces.nsIPrintSettingsService);
229 }
230 }
231 } catch(e) {}
233 // Note: getPrinters sets up the PrintToFile control
234 getPrinters();
236 if (gPrintSettings) {
237 print_tofile = gPrintSettings.printToFile;
238 gOriginalNumCopies = gPrintSettings.numCopies;
240 print_copies = gPrintSettings.numCopies;
241 print_frametype = gPrintSettings.printFrameType;
242 print_howToEnableUI = gPrintSettings.howToEnableFrameUI;
243 print_selection_radio_enabled = gPrintSettings.GetPrintOptions(gPrintSetInterface.kEnableSelectionRB);
244 }
246 if (doDebug) {
247 dump("loadDialog*********************************************\n");
248 dump("print_tofile "+print_tofile+"\n");
249 dump("print_frame "+print_frametype+"\n");
250 dump("print_howToEnableUI "+print_howToEnableUI+"\n");
251 dump("selection_radio_enabled "+print_selection_radio_enabled+"\n");
252 }
254 dialog.printrangeGroup.selectedItem = dialog.allpagesRadio;
255 if (print_selection_radio_enabled) {
256 dialog.selectionRadio.removeAttribute("disabled");
257 } else {
258 dialog.selectionRadio.setAttribute("disabled","true");
259 }
260 doPrintRange(dialog.rangeRadio.selected);
261 dialog.frompageInput.value = 1;
262 dialog.topageInput.value = 1;
263 dialog.numCopiesInput.value = print_copies;
265 if (doDebug) {
266 dump("print_howToEnableUI: "+print_howToEnableUI+"\n");
267 }
269 // print frame
270 if (print_howToEnableUI == gPrintSetInterface.kFrameEnableAll) {
271 dialog.aslaidoutRadio.removeAttribute("disabled");
273 dialog.selectedframeRadio.removeAttribute("disabled");
274 dialog.eachframesepRadio.removeAttribute("disabled");
275 dialog.printframeGroupLabel.removeAttribute("disabled");
277 // initialize radio group
278 dialog.printframeGroup.selectedItem = dialog.selectedframeRadio;
280 } else if (print_howToEnableUI == gPrintSetInterface.kFrameEnableAsIsAndEach) {
281 dialog.aslaidoutRadio.removeAttribute("disabled"); //enable
283 dialog.selectedframeRadio.setAttribute("disabled","true"); // disable
284 dialog.eachframesepRadio.removeAttribute("disabled"); // enable
285 dialog.printframeGroupLabel.removeAttribute("disabled"); // enable
287 // initialize
288 dialog.printframeGroup.selectedItem = dialog.eachframesepRadio;
290 } else {
291 dialog.aslaidoutRadio.setAttribute("disabled","true");
292 dialog.selectedframeRadio.setAttribute("disabled","true");
293 dialog.eachframesepRadio.setAttribute("disabled","true");
294 dialog.printframeGroupLabel.setAttribute("disabled","true");
295 }
297 dialog.printButton.label = dialog.printName.getAttribute("label");
298 }
300 //---------------------------------------------------
301 function onLoad()
302 {
303 // Init dialog.
304 initDialog();
306 // param[0]: nsIPrintSettings object
307 // param[1]: container for return value (1 = print, 0 = cancel)
309 gPrintSettings = window.arguments[0].QueryInterface(gPrintSetInterface);
310 gWebBrowserPrint = window.arguments[1].QueryInterface(Components.interfaces.nsIWebBrowserPrint);
311 paramBlock = window.arguments[2].QueryInterface(Components.interfaces.nsIDialogParamBlock);
313 // default return value is "cancel"
314 paramBlock.SetInt(0, 0);
316 loadDialog();
317 }
319 //---------------------------------------------------
320 function onAccept()
321 {
322 if (gPrintSettings != null) {
323 var print_howToEnableUI = gPrintSetInterface.kFrameEnableNone;
325 // save these out so they can be picked up by the device spec
326 gPrintSettings.printerName = dialog.printerList.value;
327 print_howToEnableUI = gPrintSettings.howToEnableFrameUI;
328 gPrintSettings.printToFile = dialog.fileCheck.checked;
330 if (gPrintSettings.printToFile && !chooseFile())
331 return false;
333 if (dialog.allpagesRadio.selected) {
334 gPrintSettings.printRange = gPrintSetInterface.kRangeAllPages;
335 } else if (dialog.rangeRadio.selected) {
336 gPrintSettings.printRange = gPrintSetInterface.kRangeSpecifiedPageRange;
337 } else if (dialog.selectionRadio.selected) {
338 gPrintSettings.printRange = gPrintSetInterface.kRangeSelection;
339 }
340 gPrintSettings.startPageRange = dialog.frompageInput.value;
341 gPrintSettings.endPageRange = dialog.topageInput.value;
342 gPrintSettings.numCopies = dialog.numCopiesInput.value;
344 var frametype = gPrintSetInterface.kNoFrames;
345 if (print_howToEnableUI != gPrintSetInterface.kFrameEnableNone) {
346 if (dialog.aslaidoutRadio.selected) {
347 frametype = gPrintSetInterface.kFramesAsIs;
348 } else if (dialog.selectedframeRadio.selected) {
349 frametype = gPrintSetInterface.kSelectedFrame;
350 } else if (dialog.eachframesepRadio.selected) {
351 frametype = gPrintSetInterface.kEachFrameSep;
352 } else {
353 frametype = gPrintSetInterface.kSelectedFrame;
354 }
355 }
356 gPrintSettings.printFrameType = frametype;
357 if (doDebug) {
358 dump("onAccept*********************************************\n");
359 dump("frametype "+frametype+"\n");
360 dump("numCopies "+gPrintSettings.numCopies+"\n");
361 dump("printRange "+gPrintSettings.printRange+"\n");
362 dump("printerName "+gPrintSettings.printerName+"\n");
363 dump("startPageRange "+gPrintSettings.startPageRange+"\n");
364 dump("endPageRange "+gPrintSettings.endPageRange+"\n");
365 dump("printToFile "+gPrintSettings.printToFile+"\n");
366 }
367 }
369 var saveToPrefs = false;
371 saveToPrefs = gPrefs.getBoolPref("print.save_print_settings");
373 if (saveToPrefs && printService != null) {
374 var flags = gPrintSetInterface.kInitSavePaperSize |
375 gPrintSetInterface.kInitSaveColorSpace |
376 gPrintSetInterface.kInitSaveEdges |
377 gPrintSetInterface.kInitSaveInColor |
378 gPrintSetInterface.kInitSaveResolutionName |
379 gPrintSetInterface.kInitSaveDownloadFonts |
380 gPrintSetInterface.kInitSavePrintCommand |
381 gPrintSetInterface.kInitSaveShrinkToFit |
382 gPrintSetInterface.kInitSaveScaling;
383 printService.savePrintSettingsToPrefs(gPrintSettings, true, flags);
384 }
386 // set return value to "print"
387 if (paramBlock) {
388 paramBlock.SetInt(0, 1);
389 } else {
390 dump("*** FATAL ERROR: No paramBlock\n");
391 }
393 return true;
394 }
396 //---------------------------------------------------
397 function onCancel()
398 {
399 // set return value to "cancel"
400 if (paramBlock) {
401 paramBlock.SetInt(0, 0);
402 } else {
403 dump("*** FATAL ERROR: No paramBlock\n");
404 }
406 return true;
407 }
409 //---------------------------------------------------
410 const nsIFilePicker = Components.interfaces.nsIFilePicker;
411 function chooseFile()
412 {
413 try {
414 var fp = Components.classes["@mozilla.org/filepicker;1"]
415 .createInstance(nsIFilePicker);
416 fp.init(window, dialog.fpDialog.getAttribute("label"), nsIFilePicker.modeSave);
417 fp.appendFilters(nsIFilePicker.filterAll);
418 if (fp.show() != Components.interfaces.nsIFilePicker.returnCancel &&
419 fp.file && fp.file.path) {
420 gPrintSettings.toFileName = fp.file.path;
421 return true;
422 }
423 } catch(ex) {
424 dump(ex);
425 }
427 return false;
428 }