190 lines
3.7 KiB
JavaScript
190 lines
3.7 KiB
JavaScript
|
/**
|
||
|
* Copyright (c) 2006-2015, JGraph Ltd
|
||
|
* Copyright (c) 2006-2015, Gaudenz Alder
|
||
|
*/
|
||
|
/**
|
||
|
* Class: mxEventSource
|
||
|
*
|
||
|
* Base class for objects that dispatch named events. To create a subclass that
|
||
|
* inherits from mxEventSource, the following code is used.
|
||
|
*
|
||
|
* (code)
|
||
|
* function MyClass() { };
|
||
|
*
|
||
|
* MyClass.prototype = new mxEventSource();
|
||
|
* MyClass.prototype.constructor = MyClass;
|
||
|
* (end)
|
||
|
*
|
||
|
* Known Subclasses:
|
||
|
*
|
||
|
* <mxGraphModel>, <mxGraph>, <mxGraphView>, <mxEditor>, <mxCellOverlay>,
|
||
|
* <mxToolbar>, <mxWindow>
|
||
|
*
|
||
|
* Constructor: mxEventSource
|
||
|
*
|
||
|
* Constructs a new event source.
|
||
|
*/
|
||
|
function mxEventSource(eventSource)
|
||
|
{
|
||
|
this.setEventSource(eventSource);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Variable: eventListeners
|
||
|
*
|
||
|
* Holds the event names and associated listeners in an array. The array
|
||
|
* contains the event name followed by the respective listener for each
|
||
|
* registered listener.
|
||
|
*/
|
||
|
mxEventSource.prototype.eventListeners = null;
|
||
|
|
||
|
/**
|
||
|
* Variable: eventsEnabled
|
||
|
*
|
||
|
* Specifies if events can be fired. Default is true.
|
||
|
*/
|
||
|
mxEventSource.prototype.eventsEnabled = true;
|
||
|
|
||
|
/**
|
||
|
* Variable: eventSource
|
||
|
*
|
||
|
* Optional source for events. Default is null.
|
||
|
*/
|
||
|
mxEventSource.prototype.eventSource = null;
|
||
|
|
||
|
/**
|
||
|
* Function: isEventsEnabled
|
||
|
*
|
||
|
* Returns <eventsEnabled>.
|
||
|
*/
|
||
|
mxEventSource.prototype.isEventsEnabled = function()
|
||
|
{
|
||
|
return this.eventsEnabled;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Function: setEventsEnabled
|
||
|
*
|
||
|
* Sets <eventsEnabled>.
|
||
|
*/
|
||
|
mxEventSource.prototype.setEventsEnabled = function(value)
|
||
|
{
|
||
|
this.eventsEnabled = value;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Function: getEventSource
|
||
|
*
|
||
|
* Returns <eventSource>.
|
||
|
*/
|
||
|
mxEventSource.prototype.getEventSource = function()
|
||
|
{
|
||
|
return this.eventSource;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Function: setEventSource
|
||
|
*
|
||
|
* Sets <eventSource>.
|
||
|
*/
|
||
|
mxEventSource.prototype.setEventSource = function(value)
|
||
|
{
|
||
|
this.eventSource = value;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Function: addListener
|
||
|
*
|
||
|
* Binds the specified function to the given event name. If no event name
|
||
|
* is given, then the listener is registered for all events.
|
||
|
*
|
||
|
* The parameters of the listener are the sender and an <mxEventObject>.
|
||
|
*/
|
||
|
mxEventSource.prototype.addListener = function(name, funct)
|
||
|
{
|
||
|
if (this.eventListeners == null)
|
||
|
{
|
||
|
this.eventListeners = [];
|
||
|
}
|
||
|
|
||
|
this.eventListeners.push(name);
|
||
|
this.eventListeners.push(funct);
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Function: removeListener
|
||
|
*
|
||
|
* Removes all occurrences of the given listener from <eventListeners>.
|
||
|
*/
|
||
|
mxEventSource.prototype.removeListener = function(funct)
|
||
|
{
|
||
|
if (this.eventListeners != null)
|
||
|
{
|
||
|
var i = 0;
|
||
|
|
||
|
while (i < this.eventListeners.length)
|
||
|
{
|
||
|
if (this.eventListeners[i+1] == funct)
|
||
|
{
|
||
|
this.eventListeners.splice(i, 2);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
i += 2;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Function: fireEvent
|
||
|
*
|
||
|
* Dispatches the given event to the listeners which are registered for
|
||
|
* the event. The sender argument is optional. The current execution scope
|
||
|
* ("this") is used for the listener invocation (see <mxUtils.bind>).
|
||
|
*
|
||
|
* Example:
|
||
|
*
|
||
|
* (code)
|
||
|
* fireEvent(new mxEventObject("eventName", key1, val1, .., keyN, valN))
|
||
|
* (end)
|
||
|
*
|
||
|
* Parameters:
|
||
|
*
|
||
|
* evt - <mxEventObject> that represents the event.
|
||
|
* sender - Optional sender to be passed to the listener. Default value is
|
||
|
* the return value of <getEventSource>.
|
||
|
*/
|
||
|
mxEventSource.prototype.fireEvent = function(evt, sender)
|
||
|
{
|
||
|
if (this.eventListeners != null && this.isEventsEnabled())
|
||
|
{
|
||
|
if (evt == null)
|
||
|
{
|
||
|
evt = new mxEventObject();
|
||
|
}
|
||
|
|
||
|
if (sender == null)
|
||
|
{
|
||
|
sender = this.getEventSource();
|
||
|
}
|
||
|
|
||
|
if (sender == null)
|
||
|
{
|
||
|
sender = this;
|
||
|
}
|
||
|
|
||
|
var args = [sender, evt];
|
||
|
|
||
|
for (var i = 0; i < this.eventListeners.length; i += 2)
|
||
|
{
|
||
|
var listen = this.eventListeners[i];
|
||
|
|
||
|
if (listen == null || listen == evt.getName())
|
||
|
{
|
||
|
this.eventListeners[i+1].apply(this, args);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|