blob: 3314cfacd940e4b08f149ee6b4a17b5e30d5d810 [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.
*****************************************************************************/
/**
* BirtParameterDialog
* ...
*/
AbstractParameterDialog = function( ) { };
AbstractParameterDialog.prototype = Object.extend( new AbstractBaseDialog( ),
{
/**
*__parameter to store "name" and "value" pairs
*/
__parameter : [],
/**
*__cascadingParameter to store "name" and "value" pairs
*/
__cascadingParameter : [],
/**
* Event handler closures.
*/
__neh_click_radio_closure : null,
__neh_change_select_closure : null,
/**
* Initialize dialog base.
* @return, void
*/
initializeBase : function( id )
{
this.__initBase( id, '500px' );
this.__z_index = 200;
this.__neh_click_radio_closure = this.__neh_click_radio.bindAsEventListener( this );
this.__neh_change_select_closure = this.__neh_change_select.bindAsEventListener( this );
this.__local_installEventHandlers(id);
},
/**
* Binding data to the dialog UI. Data includes zoom scaling factor.
* @data, data DOM tree (schema TBD)
* @return, void
*/
__bind : function( data )
{
this.__propogateCascadeParameter( data );
},
/**
* Binding data to the dialog UI. Data includes zoom scaling factor.
* @data, data DOM tree (schema TBD)
* @return, void
*/
__propogateCascadeParameter : function( data )
{
if ( this.__operationCancelled )
{
return;
}
if( data )
{
var cascade_param = data.getElementsByTagName( 'CascadeParameter' )[0];//assume there is only one cascadeparameter
var selectionLists = data.getElementsByTagName( 'SelectionList' );
if ( !selectionLists )
{
return;
}
for ( var k = 0; k < selectionLists.length; k++ )
{
var param_name = selectionLists[k].getElementsByTagName( 'Name' )[0].firstChild.data;
var selections = selectionLists[k].getElementsByTagName( 'Selections' );
var append_selection = document.getElementById( param_name + "_selection" );
append_selection.title = "";
var len = append_selection.options.length;
// Clear our selection list.
for( var i = 0, index = 0; i < len; i++ )
{
/*
if ( append_selection.options[index].value == "" )
{
index++;
continue;
}
*/
append_selection.remove( index );
}
// Add new options based on server response.
for( var i = 0; i < selections.length; i++ )
{
if ( !selections[i].firstChild )
{
continue;
}
var oOption = document.createElement( "OPTION" );
var oLabel = selections[i].getElementsByTagName( 'Label' )
if ( oLabel && oLabel.length > 0 )
{
oLabel = oLabel[0].firstChild;
}
if( oLabel )
oOption.text = oLabel.data;
else
oOption.text = "";
var oValue = selections[i].getElementsByTagName( 'Value' );
if ( oValue && oValue.length > 0 )
{
oValue = oValue[0].firstChild;
}
if( oValue )
oOption.value = oValue.data;
else
oOption.value = "";
append_selection.options[append_selection.options.length] = oOption;
}
}
}
},
/**
* Install native/birt event handlers.
*
* @id, toolbar id (optional since there is only one toolbar)
* @return, void
*/
__local_installEventHandlers : function( id )
{
//install UIComponent native handler
var oTBC = document.getElementById("parameter_table").getElementsByTagName( 'TABLE' );
for( var k = 0, counter = 0; k < oTBC.length; k++ )
{
var temp = oTBC[k].getElementsByTagName( 'TABLE' );
if( !temp.length )
{
//install select event handler in cascade parameters
this.__install_cascade_parameter_event_handler( oTBC[k], counter++ );
}
}
var oTRC = document.getElementById( "parameter_table" ).getElementsByTagName( "TR" );
for( var i = 0; i < oTRC.length; i++ )
{
var oInput = oTRC[i].getElementsByTagName( "input" );
var oTable = oTRC[i].getElementsByTagName( "table" );
if( oTable.length > 0 )
{
continue;
}
//find radio with textbox or select items to install event listener.
var flag = false;
for( var j = 0; j < oInput.length; j++ )
{
if( oInput[j].type == "radio" && !flag )
{
var tempRadio = oInput[j];
flag = true;
continue;
}
if( oInput[j].type == "radio" && tempRadio != {} && oInput[j].id != tempRadio.id )
{
Event.observe( tempRadio, 'click', this.__neh_click_radio_closure, false );
Event.observe( oInput[j], 'click', this.__neh_click_radio_closure, false );
}
}
}
},
/**
* Handle clicking on ok.
*
* @event, incoming browser native event
* @return, void
*/
__okPress : function( )
{
if( birtParameterDialog.collect_parameter( ) )
{
birtEventDispatcher.broadcastEvent( birtEvent.__E_CHANGE_PARAMETER );
this.__l_hide( );
}
},
/**
* Handle clicking on radio.
*
* @event, incoming browser native event
* @return, void
*/
__neh_click_radio : function( event )
{
var temp = Event.element( event );
var oInput = temp.parentNode.getElementsByTagName( "input" );
var oSelect = temp.parentNode.getElementsByTagName( "select" );
for( var i = 0; i < oInput.length; i++ )
{
if( oInput[i].id == temp.id )
{
//enable the next component
oInput[i].checked = true;
if( oInput[i+1] && ( oInput[i+1].type == "text" || oInput[i+1].type == "password" ) )
{
oInput[i+1].disabled = false;
oInput[i+1].focus( );
}
else if( oSelect[0] )
{
oSelect[0].disabled = false;
oSelect[0].focus( );
}
}
else if( oInput[i].type == "radio" && oInput[i].id != temp.id )
{
//disable the next component and clear the radio
oInput[i].checked = false;
if( oInput[i+1] && ( oInput[i+1].type == "text" || oInput[i+1].type == "password" ) )
{
oInput[i+1].disabled = true;
}
else if( oSelect[0] )
{
oSelect[0].disabled = true;
}
}
}
},
/**
* Handle change event when clicking on select.
*
* @event, incoming browser native event
* @return, void
*/
__neh_change_select : function( event )
{
var matrix = new Array( );
var m = 0;
for( var i = 0; i < this.__cascadingParameter.length; i++ )
{
for( var j = 0; j < this.__cascadingParameter[i].length; j++ )
{
if( this.__cascadingParameter[i][j].name == Event.element( event ).id.substr( 0, Event.element( event ).id.length - 10 ) )
{
this.__cascadingParameter[i][j].value = Event.element( event ).options[Event.element( event ).selectedIndex].value;
for( var m = 0; m <= j; m++ )
{
if( !matrix[m] )
{
matrix[m] = {};
}
matrix[m].name = this.__cascadingParameter[i][m].name;
matrix[m].value = this.__cascadingParameter[i][m].value;
}
birtEventDispatcher.broadcastEvent( birtEvent.__E_CASCADING_PARAMETER, matrix );
}
}
}
}
} );