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