1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/content/widgets/scale.xml Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,232 @@ 1.4 +<?xml version="1.0"?> 1.5 +<!-- This Source Code Form is subject to the terms of the Mozilla Public 1.6 + - License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> 1.8 + 1.9 + 1.10 +<bindings id="scaleBindings" 1.11 + xmlns="http://www.mozilla.org/xbl" 1.12 + xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" 1.13 + xmlns:xbl="http://www.mozilla.org/xbl"> 1.14 + 1.15 + <binding id="scalethumb" extends="xul:button" role="xul:thumb"> 1.16 + <resources> 1.17 + <stylesheet src="chrome://global/skin/scale.css"/> 1.18 + </resources> 1.19 + </binding> 1.20 + 1.21 + <binding id="scaleslider" display="xul:slider" 1.22 + extends="chrome://global/content/bindings/general.xml#basecontrol"> 1.23 + <resources> 1.24 + <stylesheet src="chrome://global/skin/scale.css"/> 1.25 + </resources> 1.26 + </binding> 1.27 + 1.28 + <binding id="scale" role="xul:scale" 1.29 + extends="chrome://global/content/bindings/general.xml#basecontrol"> 1.30 + <resources> 1.31 + <stylesheet src="chrome://global/skin/scale.css"/> 1.32 + </resources> 1.33 + 1.34 + <content align="center" pack="center"> 1.35 + <xul:slider anonid="slider" class="scale-slider" snap="true" flex="1" 1.36 + xbl:inherits="disabled,orient,dir,curpos=value,minpos=min,maxpos=max,increment,pageincrement,movetoclick"> 1.37 + <xul:thumb class="scale-thumb" xbl:inherits="disabled,orient"/> 1.38 + </xul:slider> 1.39 + </content> 1.40 + 1.41 + <implementation implements="nsISliderListener"> 1.42 + <property name="value" onget="return this._getIntegerAttribute('curpos', 0);" 1.43 + onset="return this._setIntegerAttribute('curpos', val);"/> 1.44 + <property name="min" onget="return this._getIntegerAttribute('minpos', 0);" 1.45 + onset="return this._setIntegerAttribute('minpos', val);"/> 1.46 + <property name="max" onget="return this._getIntegerAttribute('maxpos', 100);" 1.47 + onset="return this._setIntegerAttribute('maxpos', val);"/> 1.48 + <property name="increment" onget="return this._getIntegerAttribute('increment', 1);" 1.49 + onset="return this._setIntegerAttribute('increment', val);"/> 1.50 + <property name="pageIncrement" onget="return this._getIntegerAttribute('pageincrement', 10);" 1.51 + onset="return this._setIntegerAttribute('pageincrement', val);"/> 1.52 + 1.53 + <property name="_slider" readonly="true"> 1.54 + <getter> 1.55 + if (!this._sliderElement) 1.56 + this._sliderElement = document.getAnonymousElementByAttribute(this, "anonid", "slider"); 1.57 + return this._sliderElement; 1.58 + </getter> 1.59 + </property> 1.60 + 1.61 + <constructor> 1.62 + <![CDATA[ 1.63 + this._userChanged = false; 1.64 + var value = parseInt(this.getAttribute("value"), 10); 1.65 + if (!isNaN(value)) 1.66 + this.value = value; 1.67 + else if (this.min > 0) 1.68 + this.value = this.min; 1.69 + else if (this.max < 0) 1.70 + this.value = this.max; 1.71 + ]]> 1.72 + </constructor> 1.73 + 1.74 + <method name="_getIntegerAttribute"> 1.75 + <parameter name="aAttr"/> 1.76 + <parameter name="aDefaultValue"/> 1.77 + <body> 1.78 + var value = this._slider.getAttribute(aAttr); 1.79 + var intvalue = parseInt(value, 10); 1.80 + if (!isNaN(intvalue)) 1.81 + return intvalue; 1.82 + return aDefaultValue; 1.83 + </body> 1.84 + </method> 1.85 + 1.86 + <method name="_setIntegerAttribute"> 1.87 + <parameter name="aAttr"/> 1.88 + <parameter name="aValue"/> 1.89 + <body> 1.90 + <![CDATA[ 1.91 + var intvalue = parseInt(aValue, 10); 1.92 + if (!isNaN(intvalue)) { 1.93 + if (aAttr == "curpos") { 1.94 + if (intvalue < this.min) 1.95 + intvalue = this.min; 1.96 + else if (intvalue > this.max) 1.97 + intvalue = this.max; 1.98 + } 1.99 + this._slider.setAttribute(aAttr, intvalue); 1.100 + } 1.101 + return aValue; 1.102 + ]]> 1.103 + </body> 1.104 + </method> 1.105 + 1.106 + <method name="decrease"> 1.107 + <body> 1.108 + <![CDATA[ 1.109 + var newpos = this.value - this.increment; 1.110 + var startpos = this.min; 1.111 + this.value = (newpos > startpos) ? newpos : startpos; 1.112 + ]]> 1.113 + </body> 1.114 + </method> 1.115 + <method name="increase"> 1.116 + <body> 1.117 + <![CDATA[ 1.118 + var newpos = this.value + this.increment; 1.119 + var endpos = this.max; 1.120 + this.value = (newpos < endpos) ? newpos : endpos; 1.121 + ]]> 1.122 + </body> 1.123 + </method> 1.124 + 1.125 + <method name="decreasePage"> 1.126 + <body> 1.127 + <![CDATA[ 1.128 + var newpos = this.value - this.pageIncrement; 1.129 + var startpos = this.min; 1.130 + this.value = (newpos > startpos) ? newpos : startpos; 1.131 + ]]> 1.132 + </body> 1.133 + </method> 1.134 + <method name="increasePage"> 1.135 + <body> 1.136 + <![CDATA[ 1.137 + var newpos = this.value + this.pageIncrement; 1.138 + var endpos = this.max; 1.139 + this.value = (newpos < endpos) ? newpos : endpos; 1.140 + ]]> 1.141 + </body> 1.142 + </method> 1.143 + 1.144 + <method name="valueChanged"> 1.145 + <parameter name="which"/> 1.146 + <parameter name="newValue"/> 1.147 + <parameter name="userChanged"/> 1.148 + <body> 1.149 + <![CDATA[ 1.150 + switch (which) { 1.151 + case "curpos": 1.152 + this.setAttribute("value", newValue); 1.153 + 1.154 + // in the future, only fire the change event when userChanged 1.155 + // or _userChanged is true 1.156 + var changeEvent = document.createEvent("Events"); 1.157 + changeEvent.initEvent("change", true, true); 1.158 + this.dispatchEvent(changeEvent); 1.159 + break; 1.160 + 1.161 + case "minpos": 1.162 + this.setAttribute("min", newValue); 1.163 + break; 1.164 + 1.165 + case "maxpos": 1.166 + this.setAttribute("max", newValue); 1.167 + break; 1.168 + } 1.169 + ]]> 1.170 + </body> 1.171 + </method> 1.172 + 1.173 + <method name="dragStateChanged"> 1.174 + <parameter name="isDragging"/> 1.175 + <body/> 1.176 + </method> 1.177 + </implementation> 1.178 + 1.179 + <handlers> 1.180 + <handler event="keypress" keycode="VK_LEFT" preventdefault="true"> 1.181 + <![CDATA[ 1.182 + this._userChanged = true; 1.183 + (this.orient != "vertical" && this.dir == "reverse") ? this.increase() : this.decrease(); 1.184 + this._userChanged = false; 1.185 + ]]> 1.186 + </handler> 1.187 + <handler event="keypress" keycode="VK_RIGHT" preventdefault="true"> 1.188 + <![CDATA[ 1.189 + this._userChanged = true; 1.190 + (this.orient != "vertical" && this.dir == "reverse") ? this.decrease() : this.increase(); 1.191 + this._userChanged = false; 1.192 + ]]> 1.193 + </handler> 1.194 + <handler event="keypress" keycode="VK_UP" preventdefault="true"> 1.195 + <![CDATA[ 1.196 + this._userChanged = true; 1.197 + (this.orient == "vertical" && this.dir != "reverse") ? this.decrease() : this.increase(); 1.198 + this._userChanged = false; 1.199 + ]]> 1.200 + </handler> 1.201 + <handler event="keypress" keycode="VK_DOWN" preventdefault="true"> 1.202 + <![CDATA[ 1.203 + this._userChanged = true; 1.204 + (this.orient == "vertical" && this.dir != "reverse") ? this.increase() : this.decrease(); 1.205 + this._userChanged = false; 1.206 + ]]> 1.207 + </handler> 1.208 + <handler event="keypress" keycode="VK_PAGE_UP" preventdefault="true"> 1.209 + <![CDATA[ 1.210 + this._userChanged = true; 1.211 + (this.orient == "vertical" && this.dir != "reverse") ? this.decreasePage() : this.increasePage(); 1.212 + this._userChanged = false; 1.213 + ]]> 1.214 + </handler> 1.215 + <handler event="keypress" keycode="VK_PAGE_DOWN" preventdefault="true"> 1.216 + <![CDATA[ 1.217 + this._userChanged = true; 1.218 + (this.orient == "vertical" && this.dir != "reverse") ? this.increasePage() : this.decreasePage(); 1.219 + this._userChanged = false; 1.220 + ]]> 1.221 + </handler> 1.222 + <handler event="keypress" keycode="VK_HOME" preventdefault="true"> 1.223 + this._userChanged = true; 1.224 + this.value = (this.dir == "reverse") ? this.max : this.min; 1.225 + this._userChanged = false; 1.226 + </handler> 1.227 + <handler event="keypress" keycode="VK_END" preventdefault="true"> 1.228 + this._userChanged = true; 1.229 + this.value = (this.dir == "reverse") ? this.min : this.max; 1.230 + this._userChanged = false; 1.231 + </handler> 1.232 + </handlers> 1.233 + 1.234 + </binding> 1.235 +</bindings>