summaryrefslogtreecommitdiffstats
path: root/toolkit/components/printing/content/printPreviewBindings.xml
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/printing/content/printPreviewBindings.xml')
-rw-r--r--toolkit/components/printing/content/printPreviewBindings.xml415
1 files changed, 415 insertions, 0 deletions
diff --git a/toolkit/components/printing/content/printPreviewBindings.xml b/toolkit/components/printing/content/printPreviewBindings.xml
new file mode 100644
index 000000000..182ecc199
--- /dev/null
+++ b/toolkit/components/printing/content/printPreviewBindings.xml
@@ -0,0 +1,415 @@
+<?xml version="1.0"?>
+
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<!-- this file depends on printUtils.js -->
+
+<!DOCTYPE bindings [
+<!ENTITY % printPreviewDTD SYSTEM "chrome://global/locale/printPreview.dtd" >
+%printPreviewDTD;
+]>
+
+<bindings id="printPreviewBindings"
+ xmlns="http://www.mozilla.org/xbl"
+ xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <binding id="printpreviewtoolbar"
+ extends="chrome://global/content/bindings/toolbar.xml#toolbar">
+ <resources>
+ <stylesheet src="chrome://global/skin/printPreview.css"/>
+ </resources>
+
+ <content>
+ <xul:button label="&print.label;" accesskey="&print.accesskey;"
+ oncommand="this.parentNode.print();" icon="print"/>
+
+ <xul:button label="&pageSetup.label;" accesskey="&pageSetup.accesskey;"
+ oncommand="this.parentNode.doPageSetup();"/>
+
+ <xul:vbox align="center" pack="center">
+ <xul:label value="&page.label;" accesskey="&page.accesskey;" control="pageNumber"/>
+ </xul:vbox>
+ <xul:toolbarbutton anonid="navigateHome" class="navigate-button tabbable"
+ oncommand="parentNode.navigate(0, 0, 'home');" tooltiptext="&homearrow.tooltip;"/>
+ <xul:toolbarbutton anonid="navigatePrevious" class="navigate-button tabbable"
+ oncommand="parentNode.navigate(-1, 0, 0);" tooltiptext="&previousarrow.tooltip;"/>
+ <xul:hbox align="center" pack="center">
+ <xul:textbox id="pageNumber" size="3" value="1" min="1" type="number"
+ hidespinbuttons="true" onchange="navigate(0, this.valueNumber, 0);"/>
+ <xul:label value="&of.label;"/>
+ <xul:label value="1"/>
+ </xul:hbox>
+ <xul:toolbarbutton anonid="navigateNext" class="navigate-button tabbable"
+ oncommand="parentNode.navigate(1, 0, 0);" tooltiptext="&nextarrow.tooltip;"/>
+ <xul:toolbarbutton anonid="navigateEnd" class="navigate-button tabbable"
+ oncommand="parentNode.navigate(0, 0, 'end');" tooltiptext="&endarrow.tooltip;"/>
+
+ <xul:toolbarseparator class="toolbarseparator-primary"/>
+ <xul:vbox align="center" pack="center">
+ <xul:label value="&scale.label;" accesskey="&scale.accesskey;" control="scale"/>
+ </xul:vbox>
+
+ <xul:hbox align="center" pack="center">
+ <xul:menulist id="scale" crop="none"
+ oncommand="parentNode.parentNode.scale(this.selectedItem.value);">
+ <xul:menupopup>
+ <xul:menuitem value="0.3" label="&p30.label;"/>
+ <xul:menuitem value="0.4" label="&p40.label;"/>
+ <xul:menuitem value="0.5" label="&p50.label;"/>
+ <xul:menuitem value="0.6" label="&p60.label;"/>
+ <xul:menuitem value="0.7" label="&p70.label;"/>
+ <xul:menuitem value="0.8" label="&p80.label;"/>
+ <xul:menuitem value="0.9" label="&p90.label;"/>
+ <xul:menuitem value="1" label="&p100.label;"/>
+ <xul:menuitem value="1.25" label="&p125.label;"/>
+ <xul:menuitem value="1.5" label="&p150.label;"/>
+ <xul:menuitem value="1.75" label="&p175.label;"/>
+ <xul:menuitem value="2" label="&p200.label;"/>
+ <xul:menuseparator/>
+ <xul:menuitem flex="1" value="ShrinkToFit"
+ label="&ShrinkToFit.label;"/>
+ <xul:menuitem value="Custom" label="&Custom.label;"/>
+ </xul:menupopup>
+ </xul:menulist>
+ </xul:hbox>
+
+ <xul:toolbarseparator class="toolbarseparator-primary"/>
+ <xul:hbox align="center" pack="center">
+ <xul:toolbarbutton label="&portrait.label;" checked="true"
+ accesskey="&portrait.accesskey;"
+ type="radio" group="orient" class="toolbar-portrait-page tabbable"
+ oncommand="parentNode.parentNode.orient('portrait');"/>
+ <xul:toolbarbutton label="&landscape.label;"
+ accesskey="&landscape.accesskey;"
+ type="radio" group="orient" class="toolbar-landscape-page tabbable"
+ oncommand="parentNode.parentNode.orient('landscape');"/>
+ </xul:hbox>
+
+ <xul:toolbarseparator class="toolbarseparator-primary"/>
+ <xul:checkbox label="&simplifyPage.label;" checked="false" disabled="true"
+ accesskey="&simplifyPage.accesskey;"
+ tooltiptext-disabled="&simplifyPage.disabled.tooltip;"
+ tooltiptext-enabled="&simplifyPage.enabled.tooltip;"
+ oncommand="this.parentNode.simplify();"/>
+
+ <xul:toolbarseparator class="toolbarseparator-primary"/>
+ <xul:button label="&close.label;" accesskey="&close.accesskey;"
+ oncommand="PrintUtils.exitPrintPreview();" icon="close"/>
+ <xul:data value="&customPrompt.title;"/>
+ </content>
+
+ <implementation implements="nsIMessageListener">
+ <field name="mPrintButton">
+ document.getAnonymousNodes(this)[0]
+ </field>
+ <field name="mPageTextBox">
+ document.getAnonymousNodes(this)[5].childNodes[0]
+ </field>
+ <field name="mTotalPages">
+ document.getAnonymousNodes(this)[5].childNodes[2]
+ </field>
+ <field name="mScaleLabel">
+ document.getAnonymousNodes(this)[9].firstChild
+ </field>
+ <field name="mScaleCombobox">
+ document.getAnonymousNodes(this)[10].firstChild
+ </field>
+ <field name="mOrientButtonsBox">
+ document.getAnonymousNodes(this)[12]
+ </field>
+ <field name="mPortaitButton">
+ this.mOrientButtonsBox.childNodes[0]
+ </field>
+ <field name="mLandscapeButton">
+ this.mOrientButtonsBox.childNodes[1]
+ </field>
+ <field name="mSimplifyPageCheckbox">
+ document.getAnonymousNodes(this)[14]
+ </field>
+ <field name="mSimplifyPageToolbarSeparator">
+ document.getAnonymousNodes(this)[15]
+ </field>
+ <field name="mCustomTitle">
+ document.getAnonymousNodes(this)[17].firstChild
+ </field>
+ <field name="mPrintPreviewObs">
+ </field>
+ <field name="mWebProgress">
+ </field>
+ <field name="mPPBrowser">
+ null
+ </field>
+ <field name="mMessageManager">
+ null
+ </field>
+
+ <method name="initialize">
+ <parameter name="aPPBrowser"/>
+ <body>
+ <![CDATA[
+ let {Services} = Components.utils.import("resource://gre/modules/Services.jsm", {});
+ if (!Services.prefs.getBoolPref("print.use_simplify_page")) {
+ this.mSimplifyPageCheckbox.hidden = true;
+ this.mSimplifyPageToolbarSeparator.hidden = true;
+ }
+ this.mPPBrowser = aPPBrowser;
+ this.mMessageManager = aPPBrowser.messageManager;
+ this.mMessageManager.addMessageListener("Printing:Preview:UpdatePageCount", this);
+ this.updateToolbar();
+
+ let $ = id => document.getAnonymousElementByAttribute(this, "anonid", id);
+ let ltr = document.documentElement.matches(":root:-moz-locale-dir(ltr)");
+ // Windows 7 doesn't support ⏮ and ⏭ by default, and fallback doesn't
+ // always work (bug 1343330).
+ let {AppConstants} = Components.utils.import("resource://gre/modules/AppConstants.jsm", {});
+ let useCompatCharacters = AppConstants.isPlatformAndVersionAtMost("win", "6.1");
+ let leftEnd = useCompatCharacters ? "⏪" : "⏮";
+ let rightEnd = useCompatCharacters ? "⏩" : "⏭";
+ $("navigateHome").label = ltr ? leftEnd : rightEnd;
+ $("navigatePrevious").label = ltr ? "◂" : "▸";
+ $("navigateNext").label = ltr ? "▸" : "◂";
+ $("navigateEnd").label = ltr ? rightEnd : leftEnd;
+ ]]>
+ </body>
+ </method>
+
+ <method name="doPageSetup">
+ <body>
+ <![CDATA[
+ var didOK = PrintUtils.showPageSetup();
+ if (didOK) {
+ // the changes that effect the UI
+ this.updateToolbar();
+
+ // Now do PrintPreview
+ PrintUtils.printPreview();
+ }
+ ]]>
+ </body>
+ </method>
+
+ <method name="navigate">
+ <parameter name="aDirection"/>
+ <parameter name="aPageNum"/>
+ <parameter name="aHomeOrEnd"/>
+ <body>
+ <![CDATA[
+ const nsIWebBrowserPrint = Components.interfaces.nsIWebBrowserPrint;
+ let navType, pageNum;
+
+ // we use only one of aHomeOrEnd, aDirection, or aPageNum
+ if (aHomeOrEnd) {
+ // We're going to either the very first page ("home"), or the
+ // very last page ("end").
+ if (aHomeOrEnd == "home") {
+ navType = nsIWebBrowserPrint.PRINTPREVIEW_HOME;
+ this.mPageTextBox.value = 1;
+ } else {
+ navType = nsIWebBrowserPrint.PRINTPREVIEW_END;
+ this.mPageTextBox.value = this.mPageTextBox.max;
+ }
+ pageNum = 0;
+ } else if (aDirection) {
+ // aDirection is either +1 or -1, and allows us to increment
+ // or decrement our currently viewed page.
+ this.mPageTextBox.valueNumber += aDirection;
+ navType = nsIWebBrowserPrint.PRINTPREVIEW_GOTO_PAGENUM;
+ pageNum = this.mPageTextBox.value; // TODO: back to valueNumber?
+ } else {
+ // We're going to a specific page (aPageNum)
+ navType = nsIWebBrowserPrint.PRINTPREVIEW_GOTO_PAGENUM;
+ pageNum = aPageNum;
+ }
+
+ this.mMessageManager.sendAsyncMessage("Printing:Preview:Navigate", {
+ navType: navType,
+ pageNum: pageNum,
+ });
+ ]]>
+ </body>
+ </method>
+
+ <method name="print">
+ <body>
+ <![CDATA[
+ PrintUtils.printWindow(this.mPPBrowser.outerWindowID, this.mPPBrowser);
+ ]]>
+ </body>
+ </method>
+
+ <method name="promptForScaleValue">
+ <parameter name="aValue"/>
+ <body>
+ <![CDATA[
+ var value = Math.round(aValue);
+ var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
+ var promptStr = this.mScaleLabel.value;
+ var renameTitle = this.mCustomTitle;
+ var result = {value:value};
+ var confirmed = promptService.prompt(window, renameTitle, promptStr, result, null, {value:value});
+ if (!confirmed || (!result.value) || (result.value == "") || result.value == value) {
+ return -1;
+ }
+ return result.value;
+ ]]>
+ </body>
+ </method>
+
+ <method name="setScaleCombobox">
+ <parameter name="aValue"/>
+ <body>
+ <![CDATA[
+ var scaleValues = [0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.25, 1.5, 1.75, 2];
+
+ aValue = new Number(aValue);
+
+ for (var i = 0; i < scaleValues.length; i++) {
+ if (aValue == scaleValues[i]) {
+ this.mScaleCombobox.selectedIndex = i;
+ return;
+ }
+ }
+ this.mScaleCombobox.value = "Custom";
+ ]]>
+ </body>
+ </method>
+
+ <method name="scale">
+ <parameter name="aValue"/>
+ <body>
+ <![CDATA[
+ var settings = PrintUtils.getPrintSettings();
+ if (aValue == "ShrinkToFit") {
+ if (!settings.shrinkToFit) {
+ settings.shrinkToFit = true;
+ this.savePrintSettings(settings, settings.kInitSaveShrinkToFit | settings.kInitSaveScaling);
+ PrintUtils.printPreview();
+ }
+ return;
+ }
+
+ if (aValue == "Custom") {
+ aValue = this.promptForScaleValue(settings.scaling * 100.0);
+ if (aValue >= 10) {
+ aValue /= 100.0;
+ } else {
+ if (this.mScaleCombobox.hasAttribute('lastValidInx')) {
+ this.mScaleCombobox.selectedIndex = this.mScaleCombobox.getAttribute('lastValidInx');
+ }
+ return;
+ }
+ }
+
+ this.setScaleCombobox(aValue);
+ this.mScaleCombobox.setAttribute('lastValidInx', this.mScaleCombobox.selectedIndex);
+
+ if (settings.scaling != aValue || settings.shrinkToFit)
+ {
+ settings.shrinkToFit = false;
+ settings.scaling = aValue;
+ this.savePrintSettings(settings, settings.kInitSaveShrinkToFit | settings.kInitSaveScaling);
+ PrintUtils.printPreview();
+ }
+ ]]>
+ </body>
+ </method>
+
+ <method name="orient">
+ <parameter name="aOrientation"/>
+ <body>
+ <![CDATA[
+ const kIPrintSettings = Components.interfaces.nsIPrintSettings;
+ var orientValue = (aOrientation == "portrait") ? kIPrintSettings.kPortraitOrientation :
+ kIPrintSettings.kLandscapeOrientation;
+ var settings = PrintUtils.getPrintSettings();
+ if (settings.orientation != orientValue)
+ {
+ settings.orientation = orientValue;
+ this.savePrintSettings(settings, settings.kInitSaveOrientation);
+ PrintUtils.printPreview();
+ }
+ ]]>
+ </body>
+ </method>
+
+ <method name="simplify">
+ <body>
+ <![CDATA[
+ PrintUtils.setSimplifiedMode(this.mSimplifyPageCheckbox.checked);
+ PrintUtils.printPreview();
+ ]]>
+ </body>
+ </method>
+
+ <method name="enableSimplifyPage">
+ <body>
+ <![CDATA[
+ this.mSimplifyPageCheckbox.disabled = false;
+ this.mSimplifyPageCheckbox.setAttribute("tooltiptext",
+ this.mSimplifyPageCheckbox.getAttribute("tooltiptext-enabled"));
+ ]]>
+ </body>
+ </method>
+
+ <method name="disableSimplifyPage">
+ <body>
+ <![CDATA[
+ this.mSimplifyPageCheckbox.disabled = true;
+ this.mSimplifyPageCheckbox.setAttribute("tooltiptext",
+ this.mSimplifyPageCheckbox.getAttribute("tooltiptext-disabled"));
+ ]]>
+ </body>
+ </method>
+
+ <method name="updateToolbar">
+ <body>
+ <![CDATA[
+ var settings = PrintUtils.getPrintSettings();
+
+ var isPortrait = settings.orientation == Components.interfaces.nsIPrintSettings.kPortraitOrientation;
+
+ this.mPortaitButton.checked = isPortrait;
+ this.mLandscapeButton.checked = !isPortrait;
+
+ if (settings.shrinkToFit) {
+ this.mScaleCombobox.value = "ShrinkToFit";
+ } else {
+ this.setScaleCombobox(settings.scaling);
+ }
+
+ this.mPageTextBox.value = 1;
+
+ this.mMessageManager.sendAsyncMessage("Printing:Preview:UpdatePageCount");
+ ]]>
+ </body>
+ </method>
+
+ <method name="savePrintSettings">
+ <parameter name="settings"/>
+ <parameter name="flags"/>
+ <body><![CDATA[
+ var PSSVC = Components.classes["@mozilla.org/gfx/printsettings-service;1"]
+ .getService(Components.interfaces.nsIPrintSettingsService);
+ PSSVC.savePrintSettingsToPrefs(settings, true, flags);
+ ]]></body>
+ </method>
+
+ <!-- nsIMessageListener -->
+ <method name="receiveMessage">
+ <parameter name="message"/>
+ <body>
+ <![CDATA[
+ if (message.name == "Printing:Preview:UpdatePageCount") {
+ let numPages = message.data.numPages;
+ this.mTotalPages.value = numPages;
+ this.mPageTextBox.max = numPages;
+ }
+ ]]>
+ </body>
+ </method>
+ </implementation>
+ </binding>
+
+</bindings>