blob: d342a068da2b72e8e3046dd32de2b28adada3663 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2004 Actuate Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Actuate Corporation - Initial implementation.
*****************************************************************************/
/**
* BirtEventDispatcher
* ...
*/
BirtEventDispatcher = Class.create( );
BirtEventDispatcher.prototype =
{
__focusId : null,
__event_map : { },
/**
* Initialization routine required by "ProtoType" lib.
*
* @return, void
*/
initialize : function( )
{
},
/**
* Register birt event handler with global birt event dispatcher to
* handle birt events (Not native events).
*
* @eventType, pre-defined birt event type
* @id, ui object id
* @handler, birt event handler
* @return, void
*/
registerEventHandler : function( eventType, id, handler )
{
if ( !this.__event_map[eventType] )
{
this.__event_map[eventType] = { };
}
this.__event_map[eventType][id] = handler;
},
/**
* Register birt event handler with global birt event dispatcher to
* handle birt events (Not native events).
*
* @eventType, pre-defined birt event type
* @id, ui object id
* @handler, birt event handler
* @return, void
*/
unregisterEventHandler : function( eventType, id )
{
if( this.__event_map[eventType] && this.__event_map[eventType][id] )
{
delete this.__event_map[eventType][id]; //deletes 'id' property
}
},
/**
Unregisters all handlers associated with a particular id
@param id ui object id
*/
unregisterEventHandlerById : function( id )
{
debug(birtEventDispatcher.toString());
for( var eventType in this.__event_map)
{
if( this.__event_map[eventType][id])
{
delete this.__event_map[eventType][id]; //deletes 'id' property
}
}
debug(birtEventDispatcher.toString());
},
/**
* Register birt event handler with global birt event dispatcher to
* handle birt events (Not native events).
* If the event has already been registered under another handler,
* replace that handler with new handler.
*
* @eventType, pre-defined birt event type
* @id, ui object id
* @handler, birt event handler
* @return, void
*/
replaceEventHandler : function( eventType, id, handler )
{
if ( !this.__event_map[eventType] )
{
this.__event_map[eventType] = { };
}
else
{
for( var eventId in this.__event_map[eventType] )
{
delete this.__event_map[eventType][eventId]; //unregister previous event handler
}
}
this.__event_map[eventType][id] = handler;
},
/**
* Fire birt event. Objects that is or is the child of current focused object are waken.
* Their registered event handlers are triggered.
*
* @eventType, pr-defined birt events.
* @object, event parameters.
* @return, void
*/
fireEvent : function( eventType, object )
{
var handled = this.sendEvent( eventType, object, false );
if ( !handled )
{
this.broadcastEvent( birtEvent.__E_WARN );
}
},
/**
* Fire birt event. Objects that is or is the child of current focused object are waken.
* Their registered event handlers are triggered.
*
* @eventType, pr-defined birt events.
* @object, event parameters.
* @return, void
*/
broadcastEvent : function( eventType, object )
{
this.sendEvent( eventType, object, true );
},
/**
* Fire birt event. Objects that is or is the child of current focused object are waken.
* Their registered event handlers are triggered.
*
* @eventType, pr-defined birt events.
* @object, event parameters.
* @return, void
*/
sendEvent : function( eventType, object, isBroadcast )
{
var processed = false;
var serverCall = false;
var focus = this.__focusId ? this.__focusId : birtReportDocument.__instance.id;
for ( var id in this.__event_map[ eventType ] )
{
if ( !isBroadcast && focus && focus != id )
{
// TODO: need more complex scheme.
continue;
}
var handler = this.__event_map[ eventType ][ id ];
if ( handler )
{
processed = true;
}
if ( handler( id, object ) )
{
serverCall = true;
}
}
if( serverCall )
{
birtCommunicationManager.connect( );
}
return processed;
},
/**
* @param id id of current DOM element in focus.
*/
setFocusId : function( id )
{
this.__focusId = id;
},
/**
* @return id id of current DOM element in focus.
*/
getFocusId : function( )
{
return this.__focusId;
},
/**
* Convenience method.
*
* @param element current DOM element in focus, must have id
*/
setFocusElement : function( element )
{
this.__focusId = element.id || null;
},
/**
* Convenience method.
*
* @return element current DOM element in focus
*/
getFocusElement : function( )
{
return $( this.__focusId );
},
toString: function( )
{
var str = "";
str += "----start-------BirtEventDispatcher.toString------------";
str += "\n";
str += (" focusId = " + this.__focusId);
for(var i in this.__event_map)
{
str += "\n";
str += (" eventType = " + i);
for(var k in this.__event_map[i])
{
str += "\n";
str += (" id = " + k);
}
}
str += "\n";
str += "------end-------BirtEventDispatcher.toString------------";
return str;
}
}
var birtEventDispatcher = new BirtEventDispatcher( );