diff options
Diffstat (limited to 'toolkit/content/widgets/spinbuttons.xml')
-rw-r--r-- | toolkit/content/widgets/spinbuttons.xml | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/toolkit/content/widgets/spinbuttons.xml b/toolkit/content/widgets/spinbuttons.xml new file mode 100644 index 000000000..3a695beac --- /dev/null +++ b/toolkit/content/widgets/spinbuttons.xml @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- 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/. --> + +<bindings id="spinbuttonsBindings" + xmlns="http://www.mozilla.org/xbl" + xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + xmlns:xbl="http://www.mozilla.org/xbl"> + + <binding id="spinbuttons" + extends="chrome://global/content/bindings/general.xml#basecontrol"> + + <resources> + <stylesheet src="chrome://global/skin/spinbuttons.css"/> + </resources> + + <content> + <xul:vbox class="spinbuttons-box" flex="1"> + <xul:button anonid="increaseButton" type="repeat" flex="1" + class="spinbuttons-button spinbuttons-up" + xbl:inherits="disabled,disabled=increasedisabled"/> + <xul:button anonid="decreaseButton" type="repeat" flex="1" + class="spinbuttons-button spinbuttons-down" + xbl:inherits="disabled,disabled=decreasedisabled"/> + </xul:vbox> + </content> + + <implementation> + <property name="_increaseButton" readonly="true"> + <getter> + return document.getAnonymousElementByAttribute(this, "anonid", "increaseButton"); + </getter> + </property> + <property name="_decreaseButton" readonly="true"> + <getter> + return document.getAnonymousElementByAttribute(this, "anonid", "decreaseButton"); + </getter> + </property> + + <property name="increaseDisabled" + onget="return this._increaseButton.getAttribute('disabled') == 'true';" + onset="if (val) this._increaseButton.setAttribute('disabled', 'true'); + else this._increaseButton.removeAttribute('disabled'); return val;"/> + <property name="decreaseDisabled" + onget="return this._decreaseButton.getAttribute('disabled') == 'true';" + onset="if (val) this._decreaseButton.setAttribute('disabled', 'true'); + else this._decreaseButton.removeAttribute('disabled'); return val;"/> + </implementation> + + <handlers> + <handler event="mousedown"> + <![CDATA[ + // on the Mac, the native theme draws the spinbutton as a single widget + // so a state attribute is set based on where the mouse button was pressed + if (event.originalTarget == this._increaseButton) + this.setAttribute("state", "up"); + else if (event.originalTarget == this._decreaseButton) + this.setAttribute("state", "down"); + ]]> + </handler> + + <handler event="mouseup"> + this.removeAttribute("state"); + </handler> + <handler event="mouseout"> + this.removeAttribute("state"); + </handler> + + <handler event="command"> + <![CDATA[ + var eventname; + if (event.originalTarget == this._increaseButton) + eventname = "up"; + else if (event.originalTarget == this._decreaseButton) + eventname = "down"; + + var evt = document.createEvent("Events"); + evt.initEvent(eventname, true, true); + var cancel = this.dispatchEvent(evt); + + if (this.hasAttribute("on" + eventname)) { + var fn = new Function("event", this.getAttribute("on" + eventname)); + if (fn.call(this, event) == false) + cancel = true; + } + + return !cancel; + ]]> + </handler> + + </handlers> + </binding> + +</bindings> |