home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 October / maximum-cd-2009-10.iso / DiscContents / Firefox Setup 3.5.exe / nonlocalized / chrome / toolkit.jar / content / global / printdialog.js < prev    next >
Encoding:
JavaScript  |  2009-06-24  |  14.7 KB  |  426 lines

  1. //@line 42 "e:\builds\moz2_slave\win32_build\build\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. //---------------------------------------------------
  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. //---------------------------------------------------
  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. //---------------------------------------------------
  68. function stripTrailingWhitespace(element)
  69. {
  70.   var value = element.value;
  71.   value = value.replace(/\s+$/,"");
  72.   element.value = value;
  73. }
  74.  
  75. //---------------------------------------------------
  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. //---------------------------------------------------
  90. function listElement(aListElement)
  91.   {
  92.     this.listElement = aListElement;
  93.   }
  94.  
  95. listElement.prototype =
  96.   {
  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.  
  107.     appendPrinterNames: 
  108.       function (aDataObject) 
  109.         { 
  110.           if ((null == aDataObject) || !aDataObject.hasMore()) {
  111.             // disable dialog
  112.             this.listElement.setAttribute("value", "");
  113.             this.listElement.setAttribute("label",
  114.               document.getElementById("printingBundle")
  115.                       .getString("noprinter"));
  116.  
  117.             this.listElement.setAttribute("disabled", "true");
  118.             dialog.printerLabel.setAttribute("disabled","true");
  119.             dialog.propertiesButton.setAttribute("disabled","true");
  120.             dialog.fileCheck.setAttribute("disabled","true");
  121.             dialog.printButton.setAttribute("disabled","true");
  122.           }
  123.           else {
  124.             // build popup menu from printer names
  125.             var list = document.getElementById("printerList"); 
  126.             do {
  127.               printerNameStr = aDataObject.getNext();
  128.               list.appendItem(printerNameStr, printerNameStr, getPrinterDescription(printerNameStr));
  129.             } while (aDataObject.hasMore());
  130.             this.listElement.removeAttribute("disabled");
  131.           }
  132.         } 
  133.   };
  134.  
  135. //---------------------------------------------------
  136. function getPrinters()
  137. {
  138.   var selectElement = new listElement(dialog.printerList);
  139.   selectElement.clearList();
  140.  
  141.   var printerEnumerator;
  142.   try {
  143.     printerEnumerator =
  144.         Components.classes["@mozilla.org/gfx/printerenumerator;1"]
  145.                   .getService(Components.interfaces.nsIPrinterEnumerator)
  146.                   .printerNameList;
  147.   } catch(e) { printerEnumerator = null; }
  148.  
  149.   selectElement.appendPrinterNames(printerEnumerator);
  150.   selectElement.listElement.value = printService.defaultPrinterName;
  151.  
  152.   // make sure we load the prefs for the initially selected printer
  153.   setPrinterDefaultsForSelectedPrinter();
  154. }
  155.  
  156.  
  157. //---------------------------------------------------
  158. // update gPrintSettings with the defaults for the selected printer
  159. function setPrinterDefaultsForSelectedPrinter()
  160. {
  161.   gPrintSettings.printerName = dialog.printerList.value;
  162.   
  163.   dialog.descText.value = getPrinterDescription(gPrintSettings.printerName);
  164.   
  165.   // First get any defaults from the printer 
  166.   printService.initPrintSettingsFromPrinter(gPrintSettings.printerName, gPrintSettings);
  167.   
  168.   // now augment them with any values from last time
  169.   printService.initPrintSettingsFromPrefs(gPrintSettings, true, gPrintSetInterface.kInitSaveAll);
  170.   
  171.   if (doDebug) {
  172.     dump("setPrinterDefaultsForSelectedPrinter: printerName='"+gPrintSettings.printerName+"', paperName='"+gPrintSettings.paperName+"'\n");
  173.   }
  174. }
  175.  
  176. //---------------------------------------------------
  177. function displayPropertiesDialog()
  178. {
  179.   gPrintSettings.numCopies = dialog.numCopiesInput.value;
  180.   try {
  181.     var printingPromptService = Components.classes["@mozilla.org/embedcomp/printingprompt-service;1"]
  182.                                                  .getService(Components.interfaces.nsIPrintingPromptService);
  183.     if (printingPromptService) {
  184.       printingPromptService.showPrinterProperties(null, dialog.printerList.value, gPrintSettings);
  185.       dialog.numCopiesInput.value = gPrintSettings.numCopies;
  186.     }
  187.   } catch(e) {
  188.     dump("problems getting printingPromptService\n");
  189.   }
  190. }
  191.  
  192. //---------------------------------------------------
  193. function doPrintRange(inx)
  194. {
  195.   if (inx == 1) {
  196.     dialog.frompageInput.removeAttribute("disabled");
  197.     dialog.frompageLabel.removeAttribute("disabled");
  198.     dialog.topageInput.removeAttribute("disabled");
  199.     dialog.topageLabel.removeAttribute("disabled");
  200.   } else {
  201.     dialog.frompageInput.setAttribute("disabled","true");
  202.     dialog.frompageLabel.setAttribute("disabled","true");
  203.     dialog.topageInput.setAttribute("disabled","true");
  204.     dialog.topageLabel.setAttribute("disabled","true");
  205.   }
  206. }
  207.  
  208. //---------------------------------------------------
  209. function loadDialog()
  210. {
  211.   var print_copies        = 1;
  212.   var print_selection_radio_enabled = false;
  213.   var print_frametype     = gPrintSetInterface.kSelectedFrame;
  214.   var print_howToEnableUI = gPrintSetInterface.kFrameEnableNone;
  215.   var print_tofile        = "";
  216.  
  217.   try {
  218.     gPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  219.  
  220.     printService = Components.classes["@mozilla.org/gfx/printsettings-service;1"];
  221.     if (printService) {
  222.       printService = printService.getService();
  223.       if (printService) {
  224.         printService = printService.QueryInterface(Components.interfaces.nsIPrintSettingsService);
  225.       }
  226.     }
  227.   } catch(e) {}
  228.  
  229.   // Note: getPrinters sets up the PrintToFile control
  230.   getPrinters();
  231.  
  232.   if (gPrintSettings) {
  233.     print_tofile        = gPrintSettings.printToFile;
  234.     gOriginalNumCopies  = gPrintSettings.numCopies;
  235.  
  236.     print_copies        = gPrintSettings.numCopies;
  237.     print_frametype     = gPrintSettings.printFrameType;
  238.     print_howToEnableUI = gPrintSettings.howToEnableFrameUI;
  239.     print_selection_radio_enabled = gPrintSettings.GetPrintOptions(gPrintSetInterface.kEnableSelectionRB);
  240.   }
  241.  
  242.   if (doDebug) {
  243.     dump("loadDialog*********************************************\n");
  244.     dump("print_tofile            "+print_tofile+"\n");
  245.     dump("print_frame             "+print_frametype+"\n");
  246.     dump("print_howToEnableUI     "+print_howToEnableUI+"\n");
  247.     dump("selection_radio_enabled "+print_selection_radio_enabled+"\n");
  248.   }
  249.  
  250.   dialog.printrangeGroup.selectedItem = dialog.allpagesRadio;
  251.   if (print_selection_radio_enabled) {
  252.     dialog.selectionRadio.removeAttribute("disabled");
  253.   } else {
  254.     dialog.selectionRadio.setAttribute("disabled","true");
  255.   }
  256.   doPrintRange(dialog.rangeRadio.selected);
  257.   dialog.frompageInput.value  = 1;
  258.   dialog.topageInput.value    = 1;
  259.   dialog.numCopiesInput.value = print_copies;
  260.  
  261.   if (doDebug) {
  262.     dump("print_howToEnableUI: "+print_howToEnableUI+"\n");
  263.   }
  264.  
  265.   // print frame
  266.   if (print_howToEnableUI == gPrintSetInterface.kFrameEnableAll) {
  267.     dialog.aslaidoutRadio.removeAttribute("disabled");
  268.  
  269.     dialog.selectedframeRadio.removeAttribute("disabled");
  270.     dialog.eachframesepRadio.removeAttribute("disabled");
  271.     dialog.printframeGroupLabel.removeAttribute("disabled");
  272.  
  273.     // initialize radio group
  274.     dialog.printframeGroup.selectedItem = dialog.selectedframeRadio;
  275.  
  276.   } else if (print_howToEnableUI == gPrintSetInterface.kFrameEnableAsIsAndEach) {
  277.     dialog.aslaidoutRadio.removeAttribute("disabled");       //enable
  278.  
  279.     dialog.selectedframeRadio.setAttribute("disabled","true"); // disable
  280.     dialog.eachframesepRadio.removeAttribute("disabled");       // enable
  281.     dialog.printframeGroupLabel.removeAttribute("disabled");    // enable
  282.  
  283.     // initialize
  284.     dialog.printframeGroup.selectedItem = dialog.eachframesepRadio;
  285.  
  286.   } else {
  287.     dialog.aslaidoutRadio.setAttribute("disabled","true");
  288.     dialog.selectedframeRadio.setAttribute("disabled","true");
  289.     dialog.eachframesepRadio.setAttribute("disabled","true");
  290.     dialog.printframeGroupLabel.setAttribute("disabled","true");
  291.   }
  292.  
  293.   dialog.printButton.label = dialog.printName.getAttribute("label");
  294. }
  295.  
  296. //---------------------------------------------------
  297. function onLoad()
  298. {
  299.   // Init dialog.
  300.   initDialog();
  301.  
  302.   // param[0]: nsIPrintSettings object
  303.   // param[1]: container for return value (1 = print, 0 = cancel)
  304.  
  305.   gPrintSettings   = window.arguments[0].QueryInterface(gPrintSetInterface);
  306.   gWebBrowserPrint = window.arguments[1].QueryInterface(Components.interfaces.nsIWebBrowserPrint);
  307.   paramBlock       = window.arguments[2].QueryInterface(Components.interfaces.nsIDialogParamBlock);
  308.  
  309.   // default return value is "cancel"
  310.   paramBlock.SetInt(0, 0);
  311.  
  312.   loadDialog();
  313. }
  314.  
  315. //---------------------------------------------------
  316. function onAccept()
  317. {
  318.   if (gPrintSettings != null) {
  319.     var print_howToEnableUI = gPrintSetInterface.kFrameEnableNone;
  320.  
  321.     // save these out so they can be picked up by the device spec
  322.     gPrintSettings.printerName = dialog.printerList.value;
  323.     print_howToEnableUI        = gPrintSettings.howToEnableFrameUI;
  324.     gPrintSettings.printToFile = dialog.fileCheck.checked;
  325.  
  326.     if (gPrintSettings.printToFile && !chooseFile())
  327.       return false;
  328.  
  329.     if (dialog.allpagesRadio.selected) {
  330.       gPrintSettings.printRange = gPrintSetInterface.kRangeAllPages;
  331.     } else if (dialog.rangeRadio.selected) {
  332.       gPrintSettings.printRange = gPrintSetInterface.kRangeSpecifiedPageRange;
  333.     } else if (dialog.selectionRadio.selected) {
  334.       gPrintSettings.printRange = gPrintSetInterface.kRangeSelection;
  335.     }
  336.     gPrintSettings.startPageRange = dialog.frompageInput.value;
  337.     gPrintSettings.endPageRange   = dialog.topageInput.value;
  338.     gPrintSettings.numCopies      = dialog.numCopiesInput.value;
  339.  
  340.     var frametype = gPrintSetInterface.kNoFrames;
  341.     if (print_howToEnableUI != gPrintSetInterface.kFrameEnableNone) {
  342.       if (dialog.aslaidoutRadio.selected) {
  343.         frametype = gPrintSetInterface.kFramesAsIs;
  344.       } else if (dialog.selectedframeRadio.selected) {
  345.         frametype = gPrintSetInterface.kSelectedFrame;
  346.       } else if (dialog.eachframesepRadio.selected) {
  347.         frametype = gPrintSetInterface.kEachFrameSep;
  348.       } else {
  349.         frametype = gPrintSetInterface.kSelectedFrame;
  350.       }
  351.     }
  352.     gPrintSettings.printFrameType = frametype;
  353.     if (doDebug) {
  354.       dump("onAccept*********************************************\n");
  355.       dump("frametype      "+frametype+"\n");
  356.       dump("numCopies      "+gPrintSettings.numCopies+"\n");
  357.       dump("printRange     "+gPrintSettings.printRange+"\n");
  358.       dump("printerName    "+gPrintSettings.printerName+"\n");
  359.       dump("startPageRange "+gPrintSettings.startPageRange+"\n");
  360.       dump("endPageRange   "+gPrintSettings.endPageRange+"\n");
  361.       dump("printToFile    "+gPrintSettings.printToFile+"\n");
  362.     }
  363.   }
  364.  
  365.   var saveToPrefs = false;
  366.  
  367.   saveToPrefs = gPrefs.getBoolPref("print.save_print_settings");
  368.  
  369.   if (saveToPrefs && printService != null) {
  370.     var flags = gPrintSetInterface.kInitSavePaperSize      | 
  371.                 gPrintSetInterface.kInitSaveColorSpace     |
  372.                 gPrintSetInterface.kInitSaveEdges          |
  373.                 gPrintSetInterface.kInitSaveInColor        |
  374.                 gPrintSetInterface.kInitSaveResolutionName |
  375.                 gPrintSetInterface.kInitSaveDownloadFonts  |
  376.                 gPrintSetInterface.kInitSavePrintCommand   |
  377.                 gPrintSetInterface.kInitSaveShrinkToFit    |
  378.                 gPrintSetInterface.kInitSaveScaling;
  379.     printService.savePrintSettingsToPrefs(gPrintSettings, true, flags);
  380.   }
  381.  
  382.   // set return value to "print"
  383.   if (paramBlock) {
  384.     paramBlock.SetInt(0, 1);
  385.   } else {
  386.     dump("*** FATAL ERROR: No paramBlock\n");
  387.   }
  388.  
  389.   return true;
  390. }
  391.  
  392. //---------------------------------------------------
  393. function onCancel()
  394. {
  395.   // set return value to "cancel"
  396.   if (paramBlock) {
  397.     paramBlock.SetInt(0, 0);
  398.   } else {
  399.     dump("*** FATAL ERROR: No paramBlock\n");
  400.   }
  401.  
  402.   return true;
  403. }
  404.  
  405. //---------------------------------------------------
  406. const nsIFilePicker = Components.interfaces.nsIFilePicker;
  407. function chooseFile()
  408. {
  409.   try {
  410.     var fp = Components.classes["@mozilla.org/filepicker;1"]
  411.                        .createInstance(nsIFilePicker);
  412.     fp.init(window, dialog.fpDialog.getAttribute("label"), nsIFilePicker.modeSave);
  413.     fp.appendFilters(nsIFilePicker.filterAll);
  414.     if (fp.show() != Components.interfaces.nsIFilePicker.returnCancel &&
  415.         fp.file && fp.file.path) {
  416.       gPrintSettings.toFileName = fp.file.path;
  417.       return true;
  418.     }
  419.   } catch(ex) {
  420.     dump(ex);
  421.   }
  422.  
  423.   return false;
  424. }
  425.  
  426.