!import
1 <?xml version="1.0"?>
2
3 <bindings id="scaleBindings"
4 xmlns="http://www.mozilla.org/xbl"
5 xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
6 xmlns:xbl="http://www.mozilla.org/xbl">
7
8 <binding id="scalethumb" extends="xul:button">
9 <resources>
10 <stylesheet src="chrome://global/skin/scale.css"/>
11 </resources>
12
13 <implementation implements="nsIAccessibleProvider">
14 <property name="accessibleType" readonly="true">
get_accessibleType
15 <getter>
16 return Components.interfaces.nsIAccessibleProvider.XULThumb;
17 </getter>
18 </property>
19 </implementation>
20 </binding>
21
22 <binding id="scaleslider" display="xul:slider"
23 extends="chrome://global/content/bindings/general.xml#basecontrol">
24 <resources>
25 <stylesheet src="chrome://global/skin/scale.css"/>
26 </resources>
27 </binding>
28
29 <binding id="scale"
30 extends="chrome://global/content/bindings/general.xml#basecontrol">
31 <resources>
32 <stylesheet src="chrome://global/skin/scale.css"/>
33 </resources>
34
35 <content align="center" pack="center">
36 <xul:slider anonid="slider" class="scale-slider" snap="true" flex="1"
37 xbl:inherits="disabled,orient,dir,curpos=value,minpos=min,maxpos=max,increment,pageincrement">
38 <xul:thumb class="scale-thumb" xbl:inherits="disabled,orient"/>
39 </xul:slider>
40 </content>
41
42 <implementation implements="nsIAccessibleProvider">
43 <property name="accessibleType" readonly="true">
get_accessibleType
44 <getter>
45 return Components.interfaces.nsIAccessibleProvider.XULScale;
46 </getter>
47 </property>
48
get_value
set_value
49 <property name="value" onget="return this._getIntegerAttribute('curpos', 0);"
50 onset="return this._setIntegerAttribute('curpos', val);"/>
get_min
set_min
51 <property name="min" onget="return this._getIntegerAttribute('minpos', 0);"
52 onset="return this._setIntegerAttribute('minpos', val);"/>
get_max
set_max
53 <property name="max" onget="return this._getIntegerAttribute('maxpos', 100);"
54 onset="return this._setIntegerAttribute('maxpos', val);"/>
get_increment
set_increment
55 <property name="increment" onget="return this._getIntegerAttribute('increment', 1);"
56 onset="return this._setIntegerAttribute('increment', val);"/>
get_pageIncrement
set_pageIncrement
57 <property name="pageIncrement" onget="return this._getIntegerAttribute('pageincrement', 10);"
58 onset="return this._setIntegerAttribute('pageincrement', val);"/>
59
field__sliderElement
60 <field name="_sliderElement"/>
61 <property name="_slider" readonly="true">
get__slider
62 <getter>
63 if (!this._sliderElement)
64 this._sliderElement = document.getAnonymousElementByAttribute(this, "anonid", "slider");
65 return this._sliderElement;
66 </getter>
67 </property>
68
constructor
69 <constructor>
70 <![CDATA[
71 var value = parseInt(this.getAttribute("value"), 10);
72 if (!isNaN(value))
73 this.value = value;
74 else if (this.min > 0)
75 this.value = this.min;
76 else if (this.max < 0)
77 this.value = this.max;
78 ]]>
79 </constructor>
80
81 <method name="_getIntegerAttribute">
82 <parameter name="aAttr"/>
83 <parameter name="aDefaultValue"/>
_getIntegerAttribute
84 <body>
85 var value = this._slider.getAttribute(aAttr);
86 var intvalue = parseInt(value, 10);
87 if (!isNaN(intvalue))
88 return intvalue;
89 return aDefaultValue;
90 </body>
91 </method>
92
93 <method name="_setIntegerAttribute">
94 <parameter name="aAttr"/>
95 <parameter name="aValue"/>
_setIntegerAttribute
96 <body>
97 <![CDATA[
98 var intvalue = parseInt(aValue, 10);
99 if (!isNaN(intvalue)) {
100 if (aAttr == "curpos") {
101 if (intvalue < this.min)
102 intvalue = this.min;
103 else if (intvalue > this.max)
104 intvalue = this.max;
105 }
106 this._slider.setAttribute(aAttr, intvalue);
107 }
108 return aValue;
109 ]]>
110 </body>
111 </method>
112
113 <method name="decrease">
decrease
114 <body>
115 <![CDATA[
116 var newpos = this.value - this.increment;
117 var startpos = this.min;
118 this.value = (newpos > startpos) ? newpos : startpos;
119 ]]>
120 </body>
121 </method>
122 <method name="increase">
increase
123 <body>
124 <![CDATA[
125 var newpos = this.value + this.increment;
126 var endpos = this.max;
127 this.value = (newpos < endpos) ? newpos : endpos;
128 ]]>
129 </body>
130 </method>
131
132 <method name="decreasePage">
decreasePage
133 <body>
134 <![CDATA[
135 var newpos = this.value - this.pageIncrement;
136 var startpos = this.min;
137 this.value = (newpos > startpos) ? newpos : startpos;
138 ]]>
139 </body>
140 </method>
141 <method name="increasePage">
increasePage
142 <body>
143 <![CDATA[
144 var newpos = this.value + this.pageIncrement;
145 var endpos = this.max;
146 this.value = (newpos < endpos) ? newpos : endpos;
147 ]]>
148 </body>
149 </method>
150
151 </implementation>
152
153 <handlers>
onDOMAttrModified
154 <handler event="DOMAttrModified">
155 if (event.originalTarget != this._slider)
156 return;
157
158 switch (event.attrName) {
159 case "curpos":
160 this.setAttribute("value", event.newValue);
161
162 var changeEvent = document.createEvent("Events");
163 changeEvent.initEvent("change", true, true);
164 this.dispatchEvent(changeEvent);
165 break;
166
167 case "minpos":
168 this.setAttribute("min", event.newValue);
169 break;
170
171 case "maxpos":
172 this.setAttribute("max", event.newValue);
173 break;
174 }
175 </handler>
176
onkeypress
177 <handler event="keypress" keycode="VK_UP" preventdefault="true">
178 return (this.dir == "reverse") ? this.increase() : this.decrease();
179 </handler>
onkeypress
180 <handler event="keypress" keycode="VK_LEFT" preventdefault="true">
181 return (this.dir == "reverse") ? this.increase() : this.decrease();
182 </handler>
onkeypress
183 <handler event="keypress" keycode="VK_DOWN" preventdefault="true">
184 return (this.dir == "reverse") ? this.decrease() : this.increase();
185 </handler>
onkeypress
186 <handler event="keypress" keycode="VK_RIGHT" preventdefault="true">
187 return (this.dir == "reverse") ? this.decrease() : this.increase();
188 </handler>
onkeypress
189 <handler event="keypress" keycode="VK_PAGE_UP" preventdefault="true">
190 return (this.dir == "reverse") ? this.increasePage() : this.decreasePage();
191 </handler>
onkeypress
192 <handler event="keypress" keycode="VK_PAGE_DOWN" preventdefault="true">
193 return (this.dir == "reverse") ? this.decreasePage() : this.increasePage();
194 </handler>
onkeypress
195 <handler event="keypress" keycode="VK_HOME" preventdefault="true">
196 this.value = (this.dir == "reverse") ? this.max : this.min;
197 </handler>
onkeypress
198 <handler event="keypress" keycode="VK_END" preventdefault="true">
199 this.value = (this.dir == "reverse") ? this.min : this.max;
200 </handler>
201 </handlers>
202
203 </binding>
204 </bindings>