home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 March / PCWorld_2007-03_cd.bin / komunikace / nvu / nvu-1.0-cs-CZ.win32.installer.exe / chrome / toolkit.jar / content / global / printUtils.js < prev    next >
Text File  |  2004-08-10  |  8KB  |  234 lines

  1.  
  2. var  XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
  3.  
  4. var PrintUtils = {
  5.  
  6.   showPageSetup: function ()
  7.   {
  8.     try {
  9.       var printSettings = this.getPrintSettings();
  10.       var PRINTPROMPTSVC = Components.classes["@mozilla.org/embedcomp/printingprompt-service;1"]
  11.                                      .getService(Components.interfaces.nsIPrintingPromptService);
  12.       PRINTPROMPTSVC.showPageSetup(window, printSettings, null);
  13.       this.savePrintSettings(printSettings);
  14.  
  15.     } catch (e) {
  16.       dump("showPageSetup "+e+"\n");
  17.       return false;
  18.     }
  19.     return true;
  20.   },
  21.  
  22.   print: function ()
  23.   {
  24.     var webBrowserPrint = this.getWebBrowserPrint();
  25.     var printSettings = this.getPrintSettings();
  26.     try {
  27.       webBrowserPrint.print(printSettings, null);
  28.     } catch (e) {
  29.       // Pressing cancel is expressed as an NS_ERROR_ABORT return value,
  30.       // causing an exception to be thrown which we catch here.
  31.       // Unfortunately this will also consume helpful failures, so add a
  32.       // dump("print: "+e+"\n"); // if you need to debug
  33.     }
  34.   },
  35.  
  36.   printPreview: function (aEnterPPCallback, aExitPPCallback)
  37.   {
  38.     // if we're in PP mode, don't copy the callbacks.
  39.     if (!document.getElementById("print-preview-toolbar")) {
  40.       this._onEnterPP = aEnterPPCallback;
  41.       this._onExitPP  = aExitPPCallback;
  42.     }
  43.     this._webProgressPP = {};
  44.     var ppParams        = {};
  45.     var notifyOnOpen    = {};
  46.     var webBrowserPrint = this.getWebBrowserPrint();
  47.     var printSettings   = this.getPrintSettings();
  48.     // Here we get the PrintingPromptService so we can display the PP Progress from script
  49.     // For the browser implemented via XUL with the PP toolbar we cannot let it be
  50.     // automatically opened from the print engine because the XUL scrollbars in the PP window
  51.     // will layout before the content window and a crash will occur.
  52.     // Doing it all from script, means it lays out before hand and we can let printing do it's own thing
  53.     var PPROMPTSVC = Components.classes["@mozilla.org/embedcomp/printingprompt-service;1"]
  54.                                .getService(Components.interfaces.nsIPrintingPromptService);
  55.     // just in case we are already printing, 
  56.     // an error code could be returned if the Prgress Dialog is already displayed
  57.     try {
  58.       PPROMPTSVC.showProgress(this, webBrowserPrint, printSettings, this._obsPP, false,
  59.                               this._webProgressPP, ppParams, notifyOnOpen);
  60.       if (ppParams.value) {
  61.         var webNav = getBrowser().webNavigation;
  62.         ppParams.value.docTitle = webNav.document.title;
  63.         ppParams.value.docURL   = webNav.currentURI.spec;
  64.       }
  65.  
  66.       // this tells us whether we should continue on with PP or 
  67.       // wait for the callback via the observer
  68.       if (!notifyOnOpen.value.valueOf() || this._webProgressPP.value == null)
  69.         this.enterPrintPreview();
  70.     } catch (e) {
  71.       this.enterPrintPreview();
  72.     }
  73.   },
  74.  
  75.   getWebBrowserPrint: function ()
  76.   {
  77.     return _content.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
  78.                    .getInterface(Components.interfaces.nsIWebBrowserPrint);
  79.   },
  80.  
  81.   savePrintSettings: function (aPrintSettings)
  82.   {
  83.     var PSSVC = Components.classes["@mozilla.org/gfx/printsettings-service;1"]
  84.                           .getService(Components.interfaces.nsIPrintSettingsService);
  85.     PSSVC.savePrintSettingsToPrefs(aPrintSettings, false, aPrintSettings.kInitSaveNativeData);
  86.   },
  87.  
  88.   ////////////////////////////////////////
  89.   // "private" methods. Don't use them. //
  90.   ////////////////////////////////////////
  91.  
  92.   setPrinterDefaultsForSelectedPrinter: function (aPSSVC, aPrintSettings)
  93.   {
  94.     if (!aPrintSettings.printerName)
  95.       aPrintSettings.printerName = aPSSVC.defaultPrinterName;
  96.  
  97.     // First get any defaults from the printer 
  98.     aPSSVC.initPrintSettingsFromPrinter(aPrintSettings.printerName, aPrintSettings);
  99.     // now augment them with any values from last time
  100.     aPSSVC.initPrintSettingsFromPrefs(aPrintSettings, true,  aPrintSettings.kInitSaveAll);
  101.   },
  102.  
  103.   getPrintSettings: function ()
  104.   {
  105.     var printSettings;
  106.     try {
  107.       var PSSVC = Components.classes["@mozilla.org/gfx/printsettings-service;1"]
  108.                             .getService(Components.interfaces.nsIPrintSettingsService);
  109.       printSettings = PSSVC.globalPrintSettings;
  110.       this.setPrinterDefaultsForSelectedPrinter(PSSVC, printSettings);
  111.     } catch (e) {
  112.       dump("getPrintSettings: "+e+"\n");
  113.     }
  114.     return printSettings;
  115.   },
  116.  
  117.   _chromeState: {},
  118.   _closeHandlerPP: null,
  119.   _webProgressPP: null,
  120.   _onEnterPP: null,
  121.   _onExitPP: null,
  122.  
  123.   // This observer is called once the progress dialog has been "opened"
  124.   _obsPP: 
  125.   {
  126.     observe: function(aSubject, aTopic, aData)
  127.     {
  128.       // delay the print preview to show the content of the progress dialog
  129.       setTimeout(function () { PrintUtils.enterPrintPreview(); }, 0);
  130.     },
  131.  
  132.     QueryInterface : function(iid)
  133.     {
  134.       if (iid.equals(Components.interfaces.nsIObserver) || iid.equals(Components.interfaces.nsISupportsWeakReference))
  135.         return this;   
  136.       throw Components.results.NS_NOINTERFACE;
  137.     }
  138.   },
  139.  
  140.   enterPrintPreview: function ()
  141.   {
  142.     var webBrowserPrint = this.getWebBrowserPrint();
  143.     var printSettings   = this.getPrintSettings();
  144.     try {
  145.       webBrowserPrint.printPreview(printSettings, null, this._webProgressPP.value);
  146.     } catch (e) {
  147.       // Pressing cancel is expressed as an NS_ERROR_ABORT return value,
  148.       // causing an exception to be thrown which we catch here.
  149.       // Unfortunately this will also consume helpful failures, so add a
  150.       // dump(e); // if you need to debug
  151.       return;
  152.     }
  153.  
  154.     var printPreviewTB = document.getElementById("print-preview-toolbar");
  155.     if (printPreviewTB) {
  156.       printPreviewTB.updateToolbar();
  157.       return;
  158.     }
  159.  
  160.     // show the toolbar after we go into print preview mode so
  161.     // that we can initialize the toolbar with total num pages
  162.     printPreviewTB = document.createElementNS(XUL_NS, "toolbar");
  163.     printPreviewTB.setAttribute("printpreview", true);
  164.     printPreviewTB.setAttribute("id", "print-preview-toolbar");
  165.  
  166.  
  167.     // copy the window close handler
  168.     if (document.documentElement.hasAttribute("onclose"))
  169.       this._closeHandlerPP = document.documentElement.getAttribute("onclose");
  170.     else
  171.       this._closeHandlerPP = null;
  172.     document.documentElement.setAttribute("onclose", "PrintUtils.exitPrintPreview(); return false;");
  173.  
  174.     // disable chrome shortcuts...
  175.     window.addEventListener("keypress", this.onKeyPressPP, true);
  176.  
  177.     _content.focus();
  178.     
  179.     // on Enter PP Call back
  180.     if (this._onEnterPP) {
  181.       this._onEnterPP();
  182.       this._onEnterPP = null;
  183.     }
  184.   },
  185.  
  186.   exitPrintPreview: function ()
  187.   {
  188.     window.removeEventListener("keypress", this.onKeyPressPP, true);
  189.  
  190.  
  191.     // restore the old close handler
  192.     document.documentElement.setAttribute("onclose", this._closeHandlerPP);
  193.     this._closeHandlerPP = null;
  194.  
  195.     if ("getStripVisibility" in getBrowser())
  196.       getBrowser().setStripVisibilityTo(this._chromeState.hadTabStrip);
  197.  
  198.     var webBrowserPrint = this.getWebBrowserPrint();
  199.     webBrowserPrint.exitPrintPreview(); 
  200.  
  201.     // remove the print preview toolbar
  202.     var printPreviewTB = document.getElementById("print-preview-toolbar");
  203.     getBrowser().parentNode.removeChild(printPreviewTB);
  204.  
  205.     _content.focus();
  206.  
  207.     // on Exit PP Call back
  208.     if (this._onExitPP) {
  209.       this._onExitPP();
  210.       this._onExitPP = null;
  211.     }
  212.   },
  213.  
  214.   onKeyPressPP: function (aEvent)
  215.   {
  216.     var closeKey;
  217.     try {
  218.       closeKey = document.getElementById("key_close")
  219.                          .getAttribute("key");
  220.       closeKey = aEvent["DOM_VK_"+closeKey];
  221.     } catch (e) {}
  222.     var isModif = aEvent.ctrlKey || aEvent.metaKey;
  223.     // ESC and Ctrl-W exits the PP
  224.     if (aEvent.keyCode == aEvent.DOM_VK_ESCAPE || isModif &&
  225.         (aEvent.charCode == closeKey || aEvent.charCode == closeKey + 32))
  226.       PrintUtils.exitPrintPreview();
  227.     // cancel shortkeys
  228.     if (isModif) {
  229.       aEvent.preventDefault();
  230.       aEvent.stopPropagation();
  231.     }
  232.   }
  233. }
  234.