OSDN Git Service

import source-tree based svn r84.
[bluegriffon/BlueGriffon.git] / base / content / bluegriffon / bindings / multistate.xml
1 <?xml version="1.0"?>
2
3 <!-- ***** BEGIN LICENSE BLOCK *****
4    - Version: MPL 1.1/GPL 2.0/LGPL 2.1
5    -
6    - The contents of this file are subject to the Mozilla Public License Version
7    - 1.1 (the "License"); you may not use this file except in compliance with
8    - the License. You may obtain a copy of the License at
9    - http://www.mozilla.org/MPL/
10    -
11    - Software distributed under the License is distributed on an "AS IS" basis,
12    - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13    - for the specific language governing rights and limitations under the
14    - License.
15    -
16    - The Original Code is BlueGriffon.
17    -
18    - The Initial Developer of the Original Code is
19    - Disruptive Innovations SARL.
20    - Portions created by the Initial Developer are Copyright (C) 2007
21    - the Initial Developer. All Rights Reserved.
22    -
23    - Contributor(s):
24    -   Daniel Glazman (daniel.glazman@disruptive-innovations.com), Original Author
25    -
26    - Alternatively, the contents of this file may be used under the terms of
27    - either the GNU General Public License Version 2 or later (the "GPL"), or
28    - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29    - in which case the provisions of the GPL or the LGPL are applicable instead
30    - of those above. If you wish to allow use of your version of this file only
31    - under the terms of either the GPL or the LGPL, and not to allow others to
32    - use your version of this file under the terms of the MPL, indicate your
33    - decision by deleting the provisions above and replace them with the notice
34    - and other provisions required by the LGPL or the GPL. If you do not delete
35    - the provisions above, a recipient may use your version of this file under
36    - the terms of any one of the MPL, the GPL or the LGPL.
37    -
38    - ***** END LICENSE BLOCK ***** -->
39
40 <bindings id="multistateBindings"
41           xmlns="http://www.mozilla.org/xbl"
42           xmlns:html="http://www.w3.org/1999/xhtml"
43           xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
44           xmlns:xbl="http://www.mozilla.org/xbl">
45
46   <binding id="multistatebutton">
47
48     <resources>
49       <stylesheet src="chrome://bluegriffon/content/bindings/multistate.css"/>
50     </resources>
51
52     <content>
53       <xul:toolbarbutton xbl:inherits="value,label,image,disabled"
54                   anonid="button"
55                   class="multistate-button"/>
56       <children/>
57     </content>
58
59     <implementation>
60       <property name="mButton"
61                 readonly="true"
62                 onget="return document.getAnonymousElementByAttribute(this, 'anonid', 'button')" />
63
64       <property name="value"
65                 onget="return this.mButton.getAttribute('value');"
66                 onset="this.mButton.setAttribute('value', val);"/>
67
68       <property name="disabled"
69                 onget="return this.mButton.getAttribute('disabled');"
70                 onset="this.mButton.setAttribute('disabled', val);"/>
71
72       <constructor>
73         <![CDATA[
74           if (!this.mButton.hasAttribute("value") && this.firstChild)
75             this._adoptNextState(this.firstChild);
76         ]]>
77       </constructor>
78
79       <method name="_isState">
80         <parameter name="aNode"/>
81         <body>
82         <![CDATA[
83           if (!aNode)
84             throw Components.results.NS_ERROR_NULL_POINTER;
85
86           return (aNode.nodeType == Node.ELEMENT_NODE &&
87                   aNode.nodeName == "state" &&
88                   aNode.namespaceURI == "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul")
89         ]]>
90         </body>
91       </method>
92
93       <method name="_adoptNextState">
94         <parameter name="aSeed"/>
95         <body>
96         <![CDATA[
97           var child = aSeed;
98           while (child)
99           {
100             if (this._isState(child))
101             {
102               this._cloneAttributes(child, this.mButton);
103               return true;
104             }
105             child = child.nextSibling;
106           }
107           return false;
108         ]]>
109         </body>
110       </method>
111
112       <method name="_cloneAttributes">
113         <parameter name="aSrc"/>
114         <parameter name="aDest"/>
115         <body>
116         <![CDATA[
117           if (!aSrc || !aDest)
118             throw Components.results.NS_ERROR_NULL_POINTER;
119
120           if (aSrc.nodeType  != Node.ELEMENT_NODE ||
121               aDest.nodeType != Node.ELEMENT_NODE)
122             throw Components.results.NS_ERROR_INVALID_ARG;
123
124           var attributes = aSrc.attributes;
125           for (var i = 0 ; i < attributes.length; i++)
126             aDest.setAttributeNS(attributes[i].namespaceURI,
127                                  attributes[i].localName,
128                                  attributes[i].nodeValue);
129         ]]>
130         </body>
131       </method>
132
133     </implementation>
134
135     <handlers>
136       <handler event="command" phase="capturing">
137         <![CDATA[
138           var done = false;
139           if (this.mButton.hasAttribute("value"))
140           {
141             var states = this.getElementsByAttribute("value", this.value);
142             for (var i = 0 ; i < states.length; i++)
143               if (this._isState(states[i]))
144               {
145                 done = this._adoptNextState(states[i].nextSibling);
146                 break;
147               }
148           }
149           if (!done)
150             this._adoptNextState(this.firstChild);
151         ]]>
152       </handler>
153     </handlers>
154
155   </binding>
156
157 </bindings>