1 <bindings xmlns="http://www.mozilla.org/xbl"
2 xmlns:xbl="http://www.mozilla.org/xbl"
3 xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
4
5 <binding id="buttonmenu" display="xul:menu"
6 extends="chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton">
7 <content>
8 <children includes="observes|template|menupopup|tooltip"/>
9 <xul:image class="toolbarbutton-icon" xbl:inherits="validate,src=image,toolbarmode,buttonstyle"/>
10 <xul:label class="toolbarbutton-text" crop="right" flex="1"
11 xbl:inherits="value=label,accesskey,crop,dragover-top,toolbarmode,buttonstyle"/>
12 </content>
13 </binding>
14
15 <!-- borrowed from Hit-a-Hint by Pekka P. Sillanpaa (c) -->
16 <binding id="keyinputbox">
17 <resources>
18 <stylesheet src="chrome://fireinput/skin/fireinput.css"/>
19 </resources>
20 <content>
21 <xul:textbox xbl:inherits="size"
22 readonly="true"
23 class="keyinputbox"
24 onkeydown="parentNode.onKeyDown(event);"
25 onkeyup="parentNode.stopEvent(event);return false;"
26 onkeypress="parentNode.stopEvent(event);return false;"
27 onfocus="style.background='#faa';"
28 onblur="style.background='#fff';"
29 />
30 </content>
31 <implementation>
32 <!-- Stores the keyCode and modifiers in a single value -->
33 <property name="combinedValue"
34 onset="return this.setCombinedValue(val);"
35 onget="return this.getCombinedValue();"/>
36 <property name="allowModifiers"
37 onset="return this.setAttribute('allowmodifiers',val);"
38 onget="return this.getAttribute('allowmodifiers');"/>
39 <!-- onset="return this.updateAttr('modifiers',val);" -->
40 <property name="modifiers"
41 onget="return this.getAttribute('modifiers');"/>
42 <!-- onset="return this.updateAttr('keycode',val);" -->
43 <property name="keyCode"
44 onget="return this.getAttribute('keycode');"/>
45
46
47 <constructor>
48 if (this.getAttribute('keycode') != '')
49 this.updateDisplay();
50 </constructor>
51
52 <method name="updateAttr">
53 <parameter name="attr"/>
54 <parameter name="value"/>
55 <body>
56 <![CDATA[
57 if (attr == 'modifiers' && this.getAttribute('allowmodifiers') == 'false')
58 return false;
59 this.setAttribute(attr, value);
60 this.updateDisplay();
61 return true;
62 ]]>
63 </body>
64 </method>
65
66 <method name="updateDisplay">
67 <body>
68 document.getAnonymousNodes(this)[0].value = this.keyString();
69 </body>
70 </method>
71
72 <!-- Returns a displayable representation of the keyCode and modifier values -->
73 <method name="keyString">
74 <body>
75 <![CDATA[
76 var str = '';
77 var parts;
78 var modifiers = this.getAttribute('modifiers');
79 var keyCode = this.getAttribute('keycode');
80 if (keyCode == '') return '未设';
81 str += (modifiers & Event.CONTROL_MASK)?'Ctrl+':'';
82 str += (modifiers & Event.ALT_MASK)?'Alt+':'';
83 str += (modifiers & Event.SHIFT_MASK)?'Shift+':'';
84 str += (modifiers & Event.META_MASK)?'Meta+':'';
85 if(keyCodeMapper!=null)
86 return str + keyCodeMapper[keyCode];
87 // If no name is set, just use the keyCode
88 return str + keyCode;
89 ]]>
90 </body>
91 </method>
92
93 <method name="onKeyDown">
94 <parameter name="event"/>
95 <body>
96 if (event.keyCode == Event.prototype.DOM_VK_META ||
97 event.keyCode == Event.prototype.DOM_VK_SHIFT ||
98 event.keyCode == Event.prototype.DOM_VK_CONTROL ||
99 event.keyCode == Event.prototype.DOM_VK_ALT)
100 return;
101 this.setKey(event);
102 this.stopEvent(event);
103 </body>
104 </method>
105
106 <method name="stopEvent">
107 <parameter name="event"/>
108 <body>
109 event.preventDefault();
110 event.stopPropagation();
111 </body>
112 </method>
113
114
115
116 <method name="setKey">
117 <parameter name="event"/>
118 <body>
119 if(event.keyCode=="8"){
120 this.updateAttr('keycode',"");
121 this.updateAttr('modifiers',0);
122 }else{
123 this.updateAttr('keycode',event.keyCode);
124 this.updateAttr('modifiers',this.getModifiers(event));
125 }
126 this.updateDisplay();
127 </body>
128 </method>
129
130
131 <method name="getModifiers">
132 <parameter name="event"/>
133 <body>
134 return event.altKey * Event.ALT_MASK |
135 event.ctrlKey * Event.CONTROL_MASK |
136 event.shiftKey * Event.SHIFT_MASK |
137 event.metaKey * Event.META_MASK;
138 </body>
139 </method>
140 <!-- Returns a string that can be used in the 'modifiers' attribute of the
141 XUL <key> element -->
142 <method name="getModifierString">
143 <body>
144 <![CDATA[
145 var arr = new Array();
146 var modifiers = this.getAttribute('modifiers');
147 if (modifiers & Event.CONTROL_MASK) arr.push('accel');
148 if (modifiers & Event.SHIFT_MASK) arr.push('shift');
149 if (modifiers & Event.ALT_MASK) arr.push('alt');
150 if (modifiers & Event.META_MASK) arr.push('meta');
151 return arr.join(',');
152 ]]>
153 </body>
154 </method>
155 <method name="setCombinedValue">
156 <parameter name="value"/>
157 <body>
158 <![CDATA[
159 if(value=="0"){
160 this.updateAttr('modifiers', 0);
161 this.updateAttr('keycode', "");
162 }else{
163 this.updateAttr('modifiers', value & 0xF);
164 this.updateAttr('keycode', value >> 4);
165 }
166 ]]>
167 </body>
168 </method>
169
170 <method name="getCombinedValue">
171 <body>
172 <![CDATA[
173 return this.keyCode << 4 | this.modifiers;
174 ]]>
175 </body>
176 </method>
177 </implementation>
178 </binding>
179 </bindings>
syntax highlighted by Code2HTML, v. 0.9.1