3 <!-- ***** BEGIN LICENSE BLOCK *****
4 - Version: MPL 1.1/GPL 2.0/LGPL 2.1
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/
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
16 - The Original Code is BlueGriffon.
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.
24 - Daniel Glazman (daniel.glazman@disruptive-innovations.com), Original Author
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.
38 - ***** END LICENSE BLOCK ***** -->
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">
46 <binding id="multistatebutton">
49 <stylesheet src="chrome://bluegriffon/content/bindings/multistate.css"/>
53 <xul:toolbarbutton xbl:inherits="value,label,image,disabled"
55 class="multistate-button"/>
60 <property name="mButton"
62 onget="return document.getAnonymousElementByAttribute(this, 'anonid', 'button')" />
64 <property name="value"
65 onget="return this.mButton.getAttribute('value');"
66 onset="this.mButton.setAttribute('value', val);"/>
68 <property name="disabled"
69 onget="return this.mButton.getAttribute('disabled');"
70 onset="this.mButton.setAttribute('disabled', val);"/>
74 if (!this.mButton.hasAttribute("value") && this.firstChild)
75 this._adoptNextState(this.firstChild);
79 <method name="_isState">
80 <parameter name="aNode"/>
84 throw Components.results.NS_ERROR_NULL_POINTER;
86 return (aNode.nodeType == Node.ELEMENT_NODE &&
87 aNode.nodeName == "state" &&
88 aNode.namespaceURI == "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul")
93 <method name="_adoptNextState">
94 <parameter name="aSeed"/>
100 if (this._isState(child))
102 this._cloneAttributes(child, this.mButton);
105 child = child.nextSibling;
112 <method name="_cloneAttributes">
113 <parameter name="aSrc"/>
114 <parameter name="aDest"/>
118 throw Components.results.NS_ERROR_NULL_POINTER;
120 if (aSrc.nodeType != Node.ELEMENT_NODE ||
121 aDest.nodeType != Node.ELEMENT_NODE)
122 throw Components.results.NS_ERROR_INVALID_ARG;
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);
136 <handler event="command" phase="capturing">
139 if (this.mButton.hasAttribute("value"))
141 var states = this.getElementsByAttribute("value", this.value);
142 for (var i = 0 ; i < states.length; i++)
143 if (this._isState(states[i]))
145 done = this._adoptNextState(states[i].nextSibling);
150 this._adoptNextState(this.firstChild);