2 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 * @implements {WebInspector.EventTarget}
30 WebInspector.Object = function() {
33 WebInspector.Object.prototype = {
35 * @param {string} eventType
36 * @param {function(!WebInspector.Event)} listener
37 * @param {!Object=} thisObject
39 addEventListener: function(eventType, listener, thisObject)
42 console.assert(false);
46 if (!this._listeners[eventType])
47 this._listeners[eventType] = [];
48 this._listeners[eventType].push({ thisObject: thisObject, listener: listener });
52 * @param {string} eventType
53 * @param {function(!WebInspector.Event)} listener
54 * @param {!Object=} thisObject
56 removeEventListener: function(eventType, listener, thisObject)
58 console.assert(listener);
60 if (!this._listeners || !this._listeners[eventType])
62 var listeners = this._listeners[eventType];
63 for (var i = 0; i < listeners.length; ++i) {
64 if (listeners[i].listener === listener && listeners[i].thisObject === thisObject)
65 listeners.splice(i--, 1);
68 if (!listeners.length)
69 delete this._listeners[eventType];
72 removeAllListeners: function()
74 delete this._listeners;
78 * @param {string} eventType
81 hasEventListeners: function(eventType)
83 if (!this._listeners || !this._listeners[eventType])
89 * @param {string} eventType
90 * @param {*=} eventData
93 dispatchEventToListeners: function(eventType, eventData)
95 if (!this._listeners || !this._listeners[eventType])
98 var event = new WebInspector.Event(this, eventType, eventData);
99 var listeners = this._listeners[eventType].slice(0);
100 for (var i = 0; i < listeners.length; ++i) {
101 listeners[i].listener.call(listeners[i].thisObject, event);
102 if (event._stoppedPropagation)
106 return event.defaultPrevented;
112 * @param {!WebInspector.EventTarget} target
113 * @param {string} type
116 WebInspector.Event = function(target, type, data)
118 this.target = target;
121 this.defaultPrevented = false;
122 this._stoppedPropagation = false;
125 WebInspector.Event.prototype = {
126 stopPropagation: function()
128 this._stoppedPropagation = true;
131 preventDefault: function()
133 this.defaultPrevented = true;
137 * @param {boolean=} preventDefault
139 consume: function(preventDefault)
141 this.stopPropagation();
143 this.preventDefault();
149 * @extends {WebInspector.Object}
151 WebInspector.Lock = function()
153 this._count = 0; // Reentrant.
159 WebInspector.Lock.Events = {
160 StateChanged: "StateChanged"
163 WebInspector.Lock.prototype = {
167 isAcquired: function()
169 return !!this._count;
174 if (++this._count === 1)
175 this.dispatchEventToListeners(WebInspector.Lock.Events.StateChanged);
181 if (this._count < 0) {
182 console.error("WebInspector.Lock acquire/release calls are unbalanced " + new Error().stack);
186 this.dispatchEventToListeners(WebInspector.Lock.Events.StateChanged);
189 __proto__: WebInspector.Object.prototype
195 WebInspector.EventTarget = function()
199 WebInspector.EventTarget.prototype = {
201 * @param {string} eventType
202 * @param {function(!WebInspector.Event)} listener
203 * @param {!Object=} thisObject
205 addEventListener: function(eventType, listener, thisObject) { },
208 * @param {string} eventType
209 * @param {function(!WebInspector.Event)} listener
210 * @param {!Object=} thisObject
212 removeEventListener: function(eventType, listener, thisObject) { },
214 removeAllListeners: function() { },
217 * @param {string} eventType
220 hasEventListeners: function(eventType) { },
223 * @param {string} eventType
224 * @param {*=} eventData
227 dispatchEventToListeners: function(eventType, eventData) { },