home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 January / 01_03.iso / software / ghostzilla_hit / files / ghostzilla-1.0-plus-install.exe / chrome / toolkit.jar / content / global / printdialog.js < prev    next >
Encoding:
JavaScript  |  2002-04-19  |  17.8 KB  |  500 lines

  1. /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2.  *
  3.  * The contents of this file are subject to the Netscape Public
  4.  * License Version 1.1 (the "License"); you may not use this file
  5.  * except in compliance with the License. You may obtain a copy of
  6.  * the License at http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the License is distributed on an "AS
  9.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10.  * implied. See the License for the specific language governing
  11.  * rights and limitations under the License.
  12.  *
  13.  * The Original Code is Mozilla Communicator client code.
  14.  *
  15.  * The Initial Developer of the Original Code is Netscape Communications
  16.  * Corporation.  Portions created by Netscape are
  17.  * Copyright (C) 1998 Netscape Communications Corporation. All
  18.  * Rights Reserved.
  19.  *
  20.  * Contributor(s): 
  21.  *   Masaki Katakai <katakai@japan.sun.com>
  22.  *   Jessica Blanco <jblanco@us.ibm.com>
  23.  *   Asko Tontti <atontti@cc.hut.fi>
  24.  *   Roland Mainz <roland.mainz@informatik.med.uni-giessen.de>
  25.  */
  26.  
  27. var dialog;
  28. var printService       = null;
  29. var gOriginalNumCopies = 1;
  30.  
  31. var paramBlock;
  32. var gPrintSettings = null;
  33. var gPrinterName   = "";
  34. var gWebBrowserPrint   = null;
  35. var default_file       = "mozilla.ps";
  36. var gPrintSetInterface = Components.interfaces.nsIPrintSettings;
  37. var doDebug            = false;
  38.  
  39. //---------------------------------------------------
  40. function initDialog()
  41. {
  42.   dialog = new Object;
  43.  
  44.   dialog.propertiesButton = document.getElementById("properties");
  45.  
  46.   dialog.destGroup       = document.getElementById("destGroup");
  47.   dialog.fileRadio       = document.getElementById("fileRadio");
  48.   dialog.printerRadio    = document.getElementById("printerRadio");
  49.  
  50.   dialog.printrangeGroup = document.getElementById("printrangeGroup");
  51.   dialog.allpagesRadio   = document.getElementById("allpagesRadio");
  52.   dialog.rangeRadio      = document.getElementById("rangeRadio");
  53.   dialog.selectionRadio  = document.getElementById("selectionRadio");
  54.   dialog.frompageInput   = document.getElementById("frompageInput");
  55.   dialog.frompageLabel   = document.getElementById("frompageLabel");
  56.   dialog.topageInput     = document.getElementById("topageInput");
  57.   dialog.topageLabel     = document.getElementById("topageLabel");
  58.  
  59.   dialog.numCopiesInput  = document.getElementById("numCopiesInput");  
  60.  
  61.   dialog.printframeGroup      = document.getElementById("printframeGroup");
  62.   dialog.aslaidoutRadio       = document.getElementById("aslaidoutRadio");
  63.   dialog.selectedframeRadio   = document.getElementById("selectedframeRadio");
  64.   dialog.eachframesepRadio    = document.getElementById("eachframesepRadio");
  65.   dialog.printframeGroupLabel = document.getElementById("printframeGroupLabel");
  66.  
  67.   dialog.fileInput       = document.getElementById("fileInput");
  68.   dialog.fileLabel       = document.getElementById("fileLabel");
  69.   dialog.printerLabel    = document.getElementById("printerLabel");
  70.   dialog.chooseButton    = document.getElementById("chooseFile");
  71.   dialog.printerList     = document.getElementById("printerList");
  72.  
  73.   dialog.printButton     = document.documentElement.getButton("accept");
  74.  
  75.   // <data> elements
  76.   dialog.printName       = document.getElementById("printButton");
  77.   dialog.fpDialog        = document.getElementById("fpDialog");
  78.  
  79.   dialog.enabled         = false;
  80. }
  81.  
  82. //---------------------------------------------------
  83. function checkInteger(element)
  84. {
  85.   var value = element.value;
  86.   if (value && value.length > 0) {
  87.     value = value.replace(/[^0-9]/g,"");
  88.     if (!value) value = "";
  89.     element.value = value;
  90.   }
  91.   if (!value || value < 1 || value > 999)
  92.     dialog.printButton.setAttribute("disabled","true");
  93.   else
  94.     dialog.printButton.removeAttribute("disabled");
  95. }
  96.  
  97. //---------------------------------------------------
  98. function stripTrailingWhitespace(element)
  99. {
  100.   var value = element.value;
  101.   value = value.replace(/\s+$/,"");
  102.   element.value = value;
  103. }
  104.  
  105. //---------------------------------------------------
  106. function doEnablePrintToFile(value)
  107. {
  108.   if (value) {
  109.     dialog.fileLabel.removeAttribute("disabled");
  110.     dialog.fileInput.removeAttribute("disabled");
  111.     dialog.chooseButton.removeAttribute("disabled");
  112.   } else {
  113.     dialog.fileLabel.setAttribute("disabled","true");
  114.     dialog.fileInput.setAttribute("disabled","true");
  115.     dialog.chooseButton.setAttribute("disabled","true");
  116.   }
  117. }
  118.  
  119. //---------------------------------------------------
  120. function listElement(aListElement)
  121.   {
  122.     this.listElement = aListElement;
  123.   }
  124.  
  125. listElement.prototype =
  126.   {
  127.     clearList:
  128.       function ()
  129.         {
  130.           // remove the menupopup node child of the menulist.
  131.           this.listElement.removeChild(this.listElement.firstChild);
  132.         },
  133.  
  134.     appendPrinterNames: 
  135.       function (aDataObject) 
  136.         { 
  137.           var popupNode = document.createElement("menupopup"); 
  138.           var strDefaultPrinterName = "";
  139.           var printerName;
  140.  
  141.           // build popup menu from printer names
  142.           while (aDataObject.hasMoreElements()) {
  143.             printerName = aDataObject.getNext();
  144.             printerName = printerName.QueryInterface(Components.interfaces.nsISupportsWString);
  145.             var printerNameStr = printerName.toString();
  146.             if (strDefaultPrinterName == "")
  147.                strDefaultPrinterName = printerNameStr;
  148.             var itemNode = document.createElement("menuitem");
  149.             itemNode.setAttribute("value", printerNameStr);
  150.             itemNode.setAttribute("label", printerNameStr);
  151.             popupNode.appendChild(itemNode);
  152.           }
  153.           if (strDefaultPrinterName != "") {
  154.             this.listElement.removeAttribute("disabled");
  155.           } else {
  156.             var stringBundle = srGetStrBundle("chrome://global/locale/printing.properties");
  157.             this.listElement.setAttribute("value", strDefaultPrinterName);
  158.             this.listElement.setAttribute("label", stringBundle.GetStringFromName("noprinter"));
  159.  
  160.             // disable dialog
  161.             this.listElement.setAttribute("disabled", "true");
  162.             dialog.destGroup.setAttribute("disabled","true");
  163.             dialog.printerRadio.setAttribute("disabled","true");
  164.             dialog.printerLabel.setAttribute("disabled","true");
  165.             dialog.propertiesButton.setAttribute("disabled","true");
  166.             dialog.fileRadio.setAttribute("disabled","true");
  167.             dialog.printButton.setAttribute("disabled","true");
  168.             doEnablePrintToFile(false);
  169.           }
  170.  
  171.           this.listElement.appendChild(popupNode); 
  172.           return strDefaultPrinterName;
  173.         } 
  174.   };
  175.  
  176. //---------------------------------------------------
  177. function getPrinters()
  178. {
  179.   var printerEnumerator = printService.availablePrinters();
  180.  
  181.   var selectElement = new listElement(dialog.printerList);
  182.   selectElement.clearList();
  183.   var strDefaultPrinterName = selectElement.appendPrinterNames(printerEnumerator);
  184.  
  185.   selectElement.listElement.value = strDefaultPrinterName;
  186.  
  187.   // make sure we load the prefs for the initially selected printer
  188.   setPrinterDefaultsForSelectedPrinter();
  189. }
  190.  
  191.  
  192. //---------------------------------------------------
  193. // update gPrintSettings with the defaults for the selected printer
  194. function setPrinterDefaultsForSelectedPrinter()
  195. {
  196.   /* FixMe: We should save the old printer's values here... */
  197.  
  198.   gPrintSettings.printerName  = dialog.printerList.value;
  199.   var ifreq = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
  200.   gWebBrowserPrint = ifreq.getInterface(Components.interfaces.nsIWebBrowserPrint);
  201.  
  202.   // First get any defaults from the printer 
  203.   gWebBrowserPrint.initPrintSettingsFromPrinter(gPrintSettings.printerName, gPrintSettings);
  204.  
  205.   var flags = gPrintSetInterface.kInitSavePaperSizeType | gPrintSetInterface.kInitSavePaperSizeUnit |
  206.               gPrintSetInterface.kInitSavePaperWidth | gPrintSetInterface.kInitSavePaperHeight |
  207.               gPrintSetInterface.kInitSavePaperName |
  208.               gPrintSetInterface.kInitSavePrintCommand;
  209.  
  210.   // now augment them with any values from last time
  211.   gWebBrowserPrint.initPrintSettingsFromPrefs(gPrintSettings, true, flags);
  212.  
  213. }
  214.  
  215. //---------------------------------------------------
  216. function displayPropertiesDialog()
  217. {
  218.   var displayed = new Object;
  219.   displayed.value = false;
  220.   gPrintSettings.numCopies = dialog.numCopiesInput.value;
  221.    
  222.   printService.displayJobProperties(dialog.printerList.value, gPrintSettings, displayed);
  223.   dialog.numCopiesInput.value = gPrintSettings.numCopies;
  224.  
  225.   if (doDebug) {
  226.     if (displayed.value)
  227.       dump("\nproperties dlg came up. displayed = "+displayed.value+"\n");
  228.     else
  229.       dump("\nproperties dlg didn't come up. displayed = "+displayed.value+"\n");
  230.   }    
  231. }
  232.  
  233. //---------------------------------------------------
  234. function doPrintRange(inx)
  235. {
  236.   if (inx == 1) {
  237.     dialog.frompageInput.removeAttribute("disabled");
  238.     dialog.frompageLabel.removeAttribute("disabled");
  239.     dialog.topageInput.removeAttribute("disabled");
  240.     dialog.topageLabel.removeAttribute("disabled");
  241.   } else {
  242.     dialog.frompageInput.setAttribute("disabled","true");
  243.     dialog.frompageLabel.setAttribute("disabled","true");
  244.     dialog.topageInput.setAttribute("disabled","true");
  245.     dialog.topageLabel.setAttribute("disabled","true");
  246.   }
  247. }
  248.  
  249. //---------------------------------------------------
  250. function loadDialog()
  251. {
  252.   var print_copies        = 1;
  253.   var print_file          = default_file;
  254.   var print_selection_radio_enabled = false;
  255.   var print_frametype     = gPrintSetInterface.kSelectedFrame;
  256.   var print_howToEnableUI = gPrintSetInterface.kFrameEnableNone;
  257.   var print_tofile        = "";
  258.  
  259.   try {
  260.     printService = Components.classes["@mozilla.org/gfx/printoptions;1"];
  261.     if (printService) {
  262.       printService = printService.getService();
  263.       if (printService) {
  264.         printService = printService.QueryInterface(Components.interfaces.nsIPrintOptions);
  265.       }
  266.     }
  267.   } catch(e) {}
  268.  
  269.   if (gPrintSettings) {
  270.     gPrinterName        = gPrintSettings.printerName;
  271.     print_tofile        = gPrintSettings.printToFile;
  272.     gOriginalNumCopies  = gPrintSettings.numCopies;
  273.  
  274.     print_copies        = gPrintSettings.numCopies;
  275.     print_file          = gPrintSettings.toFileName;
  276.     print_frametype     = gPrintSettings.printFrameType;
  277.     print_howToEnableUI = gPrintSettings.howToEnableFrameUI;
  278.     print_selection_radio_enabled = gPrintSettings.GetPrintOptions(gPrintSetInterface.kEnableSelectionRB);
  279.   }
  280.  
  281.   if (print_tofile) {
  282.     dialog.destGroup.selectedItem = dialog.fileRadio;
  283.     doEnablePrintToFile(true);
  284.   } else {
  285.     dialog.destGroup.selectedItem = dialog.printerRadio;
  286.     doEnablePrintToFile(false);
  287.   }
  288.  
  289.   if (doDebug) {
  290.     dump("loadDialog*********************************************\n");
  291.     dump("toFileName              ["+print_file+"]\n");
  292.     dump("print_tofile            "+print_tofile+"\n");
  293.     dump("print_frame             "+print_frametype+"\n");
  294.     dump("print_howToEnableUI     "+print_howToEnableUI+"\n");
  295.     dump("selection_radio_enabled "+print_selection_radio_enabled+"\n");
  296.   }
  297.  
  298.   if (print_file == "") {
  299.     print_file = default_file;
  300.   }
  301.  
  302.   dialog.printrangeGroup.selectedItem = dialog.allpagesRadio;
  303.   if (print_selection_radio_enabled) {
  304.     dialog.selectionRadio.removeAttribute("disabled");
  305.   } else {
  306.     dialog.selectionRadio.setAttribute("disabled","true");
  307.   }
  308.   doPrintRange(dialog.rangeRadio.selected);
  309.   dialog.frompageInput.value  = 1;
  310.   dialog.topageInput.value    = 1;
  311.   dialog.numCopiesInput.value = 1;
  312.  
  313.   dialog.fileInput.value   = print_file;
  314.  
  315.   // NOTE: getPRinters sets up the PrintToFile radio buttons
  316.   getPrinters();
  317.  
  318.   if (gPrintSettings.toFileName != "") {
  319.     dialog.fileInput.value = gPrintSettings.toFileName;
  320.   }
  321.  
  322.   if (doDebug) {
  323.     dump("print_howToEnableUI: "+print_howToEnableUI+"\n");
  324.   }
  325.  
  326.   // print frame
  327.   if (print_howToEnableUI == gPrintSetInterface.kFrameEnableAll) {
  328.     dialog.aslaidoutRadio.removeAttribute("disabled");
  329.  
  330.     dialog.selectedframeRadio.removeAttribute("disabled");
  331.     dialog.eachframesepRadio.removeAttribute("disabled");
  332.     dialog.printframeGroupLabel.removeAttribute("disabled");
  333.  
  334.     // initialize radio group
  335.     dialog.printframeGroup.selectedItem = dialog.selectedframeRadio;
  336.  
  337.   } else if (print_howToEnableUI == gPrintSetInterface.kFrameEnableAsIsAndEach) {
  338.     dialog.aslaidoutRadio.removeAttribute("disabled");       //enable
  339.  
  340.     dialog.selectedframeRadio.setAttribute("disabled","true"); // disable
  341.     dialog.eachframesepRadio.removeAttribute("disabled");       // enable
  342.     dialog.printframeGroupLabel.removeAttribute("disabled");    // enable
  343.  
  344.     // initialize
  345.     dialog.printframeGroup.selectedItem = dialog.eachframesepRadio;
  346.  
  347.   } else {
  348.     dialog.aslaidoutRadio.setAttribute("disabled","true");
  349.     dialog.selectedframeRadio.setAttribute("disabled","true");
  350.     dialog.eachframesepRadio.setAttribute("disabled","true");
  351.     dialog.printframeGroupLabel.setAttribute("disabled","true");
  352.   }
  353.  
  354.   dialog.printButton.label = dialog.printName.getAttribute("label");
  355. }
  356.  
  357. //---------------------------------------------------
  358. function onLoad()
  359. {
  360.   // Init dialog.
  361.   initDialog();
  362.  
  363.   // param[0]: nsIPrintSettings object
  364.   // param[1]: container for return value (1 = print, 0 = cancel)
  365.  
  366.   var ps = window.arguments[0].QueryInterface(gPrintSetInterface);
  367.   if (ps != null) {
  368.     gPrintSettings = ps;
  369.     paramBlock = window.arguments[1].QueryInterface(Components.interfaces.nsIDialogParamBlock);
  370.   } else {
  371.     var suppsArray = window.arguments[0].QueryInterface(Components.interfaces.nsISupportsArray);
  372.     if (suppsArray) {
  373.       var supps = suppsArray.ElementAt(0);
  374.       gPrintSettings = supps.QueryInterface(gPrintSetInterface);
  375.       if(!gPrintSettings) {
  376.         return;
  377.       }
  378.       supps = suppsArray.ElementAt(1);
  379.       paramBlock = supps.QueryInterface(Components.interfaces.nsIDialogParamBlock);
  380.       if(!paramBlock) {
  381.         return;
  382.       }
  383.     } else {
  384.       return;
  385.     }
  386.   }
  387.  
  388.   // default return value is "cancel"
  389.   paramBlock.SetInt(0, 0);
  390.  
  391.   loadDialog();
  392. }
  393.  
  394. //---------------------------------------------------
  395. function onAccept()
  396. {
  397.  
  398.   if (gPrintSettings != null) {
  399.     var print_howToEnableUI = gPrintSetInterface.kFrameEnableNone;
  400.  
  401.     if (dialog.fileRadio.selected && dialog.fileInput.value == "") {
  402.       var stringBundle = srGetStrBundle("chrome://global/locale/printing.properties");
  403.       var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService();
  404.       promptService = promptService.QueryInterface(Components.interfaces.nsIPromptService)
  405.       var titleText = stringBundle.GetStringFromName("noPrintFilename.title");
  406.       var alertText = stringBundle.GetStringFromName("noPrintFilename.alert");
  407.       promptService.alert(this.window, titleText, alertText);
  408.       return false;
  409.     }
  410.  
  411.     // save these out so they can be picked up by the device spec
  412.     gPrintSettings.printToFile = dialog.fileRadio.selected;
  413.     print_howToEnableUI        = gPrintSettings.howToEnableFrameUI;
  414.  
  415.     // save these out so they can be picked up by the device spec
  416.     gPrintSettings.toFileName   = dialog.fileInput.value;
  417.     gPrintSettings.printerName  = dialog.printerList.value;
  418.  
  419.     if (dialog.allpagesRadio.selected) {
  420.       gPrintSettings.printRange = gPrintSetInterface.kRangeAllPages;
  421.     } else if (dialog.rangeRadio.selected) {
  422.       gPrintSettings.printRange = gPrintSetInterface.kRangeSpecifiedPageRange;
  423.     } else if (dialog.selectionRadio.selected) {
  424.       gPrintSettings.printRange = gPrintSetInterface.kRangeSelection;
  425.     }
  426.     gPrintSettings.startPageRange = dialog.frompageInput.value;
  427.     gPrintSettings.endPageRange   = dialog.topageInput.value;
  428.     gPrintSettings.numCopies      = dialog.numCopiesInput.value;
  429.  
  430.     var frametype = gPrintSetInterface.kNoFrames;
  431.     if (print_howToEnableUI != gPrintSetInterface.kFrameEnableNone) {
  432.       if (dialog.aslaidoutRadio.selected) {
  433.         frametype = gPrintSetInterface.kFramesAsIs;
  434.       } else if (dialog.selectedframeRadio.selected) {
  435.         frametype = gPrintSetInterface.kSelectedFrame;
  436.       } else if (dialog.eachframesepRadio.selected) {
  437.         frametype = gPrintSetInterface.kEachFrameSep;
  438.       } else {
  439.         frametype = gPrintSetInterface.kSelectedFrame;
  440.       }
  441.     }
  442.     gPrintSettings.printFrameType = frametype;
  443.     if (doDebug) {
  444.       dump("onAccept*********************************************\n");
  445.       dump("frametype      "+frametype+"\n");
  446.       dump("numCopies      "+gPrintSettings.numCopies+"\n");
  447.       dump("printRange     "+gPrintSettings.printRange+"\n");
  448.       dump("printerName    "+gPrintSettings.printerName+"\n");
  449.       dump("startPageRange "+gPrintSettings.startPageRange+"\n");
  450.       dump("endPageRange   "+gPrintSettings.endPageRange+"\n");
  451.       dump("printToFile    "+gPrintSettings.printToFile+"\n");
  452.     }
  453.   }
  454.  
  455.   var saveToPrefs = false;
  456.   var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  457.   if (prefs) {
  458.     saveToPrefs = prefs.getBoolPref("print.save_print_settings");
  459.   }
  460.  
  461.   if (saveToPrefs && gWebBrowserPrint != null) {
  462.     var flags = gPrintSetInterface.kInitSavePaperSizeType | gPrintSetInterface.kInitSavePaperSizeUnit |
  463.                 gPrintSetInterface.kInitSavePaperWidth | gPrintSetInterface.kInitSavePaperHeight |
  464.                 gPrintSetInterface.kInitSavePaperName |
  465.                 gPrintSetInterface.kInitSavePrintCommand;
  466.     gWebBrowserPrint.savePrintSettingsToPrefs(gPrintSettings, true, flags);
  467.   }
  468.  
  469.   // set return value to "print"
  470.   if (paramBlock) {
  471.     paramBlock.SetInt(0, 1);
  472.   } else {
  473.     dump("*** FATAL ERROR: No paramBlock\n");
  474.   }
  475.  
  476.   return true;
  477.  
  478. }
  479.  
  480. //---------------------------------------------------
  481. const nsIFilePicker = Components.interfaces.nsIFilePicker;
  482. function onChooseFile()
  483. {
  484.   if (dialog.fileRadio.selected == false)
  485.     return;
  486.  
  487.   try {
  488.     var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  489.     fp.init(window, dialog.fpDialog.getAttribute("label"), nsIFilePicker.modeSave);
  490.     fp.appendFilters(nsIFilePicker.filterAll);
  491.     fp.show();
  492.     if (fp.file && fp.file.path.length > 0) {
  493.       dialog.fileInput.value = fp.file.path;
  494.     }
  495.   } catch(ex) {
  496.     dump(ex);
  497.   }
  498. }
  499.  
  500.