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