blob: 366e2a31ba4aee7f1d174c8ff722abc8d360061b [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.
*****************************************************************************/
/**
* Birt print report on the server dialog.
*/
BirtPrintReportServerDialog = Class.create( );
BirtPrintReportServerDialog.prototype = Object.extend( new AbstractBaseDialog( ),
{
__neh_select_change_closure : null,
__neh_printserver_click_closure : null,
__neh_pageradio_click_closure : null,
__enable : false,
__printer : null,
/**
* Initialization routine required by "ProtoType" lib.
* @return, void
*/
initialize : function( id )
{
this.__initBase( id );
this.__z_index = 200;
this.__initLayout( );
// Binding
this.__neh_select_change_closure = this.__neh_select_change.bindAsEventListener( this );
this.__neh_printserver_click_closure = this.__neh_printserver_click.bindAsEventListener( this );
this.__neh_pageradio_click_closure = this.__neh_pageradio_click.bindAsEventListener( this );
this.__installEventHandlers( id );
},
/**
* Install native/birt event handlers.
*
* @id, toolbar id (optional since there is only one toolbar)
* @return, void
*/
__installEventHandlers : function( id )
{
var oSelects = this.__instance.getElementsByTagName( 'select' );
Event.observe( oSelects[0], 'change', this.__neh_select_change_closure, false );
var oInputs = this.__instance.getElementsByTagName( 'input' );
Event.observe( oInputs[0], 'click', this.__neh_printserver_click_closure, false );
var oInputs = $( 'printServerPageSetting' ).getElementsByTagName( 'input' );
for( var i=0; i<oInputs.length; i++ )
{
if( oInputs[i].type == 'radio' )
Event.observe( oInputs[i], 'click', this.__neh_pageradio_click_closure,false );
}
},
/**
* Handle clicking on ok.
*
* @return, void
*/
__okPress : function( )
{
var flag = false;
if( this.__enable )
{
this.__collectPrinter( );
flag = this.__printAction( );
if ( flag )
{
birtConfirmationDialog.__cb_bind( );
}
}
// don't hide if there was an error
if ( !( this.__enable && !flag ) )
{
this.__l_hide( );
}
},
/**
* Collect printer information
*
* @return, void
*
*/
__collectPrinter : function( )
{
if( !this.__printer )
return;
var oCopies = $( 'printer_copies' );
if( !oCopies.disabled )
this.__printer.setCopies( oCopies.value );
var oCollate = $( 'printer_collate' );
if( !oCollate.disabled )
{
if( oCollate.checked )
this.__printer.setCollate( true );
else
this.__printer.setCollate( false );
}
var oDuplex = $( 'printer_duplexSimplex' );
if( !oDuplex.disabled && oDuplex.checked )
{
this.__printer.setDuplex( this.__printer.DUPLEX_SIMPLEX );
}
oDuplex = $( 'printer_duplexHorz' );
if( !oDuplex.disabled && oDuplex.checked )
{
this.__printer.setDuplex( this.__printer.DUPLEX_HORIZONTAL );
}
oDuplex = $( 'printer_duplexVert' );
if( !oDuplex.disabled && oDuplex.checked )
{
this.__printer.setDuplex( this.__printer.DUPLEX_VERTICAL );
}
var oMode = $( 'printer_modeBW' );
if( !oMode.disabled && oMode.checked )
{
this.__printer.setMode( this.__printer.MODE_MONOCHROME );
}
oMode = $( 'printer_modeColor' );
if( !oMode.disabled && oMode.checked )
{
this.__printer.setMode( this.__printer.MODE_COLOR );
}
var oMediaSize = $( 'printer_mediasize' );
if( !oMediaSize.disabled )
this.__printer.setMediaSize( oMediaSize.value );
},
/**
* Handle print report action
*
* @return, true or false
*/
__printAction : function( )
{
if( !this.__printer )
return false;
var docObj = document.getElementById( "Document" );
if ( !docObj || birtUtility.trim( docObj.innerHTML ).length <= 0)
{
alert ( Constants.error.generateReportFirst );
return false;
}
else
{
var divObj = document.createElement( "DIV" );
document.body.appendChild( divObj );
divObj.style.display = "none";
var formObj = document.createElement( "FORM" );
divObj.appendChild( formObj );
// Replace "html" to selected output format
var action = soapURL;
var reg = new RegExp( "([&|?]{1}" + Constants.PARAM_FORMAT + "\s*)=([^&|^#]*)", "gi" );
if( action.search( reg ) < 0 )
{
action = action + "&" + Constants.PARAM_FORMAT + "=" + Constants.FORMAT_POSTSCRIPT;
}
else
{
action = action.replace( reg, "$1=" + Constants.FORMAT_POSTSCRIPT );
}
// Delete page, pagerange and parameterpage settings in url if existed
action = birtUtility.deleteURLParameter( action, Constants.PARAM_PAGE );
action = birtUtility.deleteURLParameter( action, Constants.PARAM_PAGERANGE );
action = birtUtility.deleteURLParameter( action, Constants.PARAM_PARAMETERPAGE );
action = birtUtility.deleteURLParameter( action, Constants.PARAM_EMITTER_ID );
if( $( 'printServerPageCurrent' ).checked )
{
// Set page setting
var currentPage = birtUtility.trim( $( 'pageNumber' ).innerHTML );
action = action + "&" + Constants.PARAM_PAGE + "=" + currentPage;
}
else if( $( 'printServerPageRange' ).checked )
{
// Set page range setting
var pageRange = birtUtility.trim( $( 'printServerPageRange_input' ).value );
if ( !birtUtility.checkPageRange( pageRange ) )
{
alert( Constants.error.invalidPageRange );
return false;
}
action = action + "&" + Constants.PARAM_PAGERANGE + "=" + pageRange;
}
// auto
var pageOverflow = 0;
//var pagebreakonly = "true";
// fit to actual size
if( $( 'printServerFitToActual' ).checked )
{
pageOverflow = 1;
}
//fit to whole page
else if( $( 'printServerFitToWhole' ).checked )
{
pageOverflow = 2;
}
reg = new RegExp( "([&|?]{1}" + Constants.PARAM_PAGE_OVERFLOW + "\s*)=([^&|^#]*)", "gi" );
if( action.search( reg ) < 0 )
{
action = action + "&" + Constants.PARAM_PAGE_OVERFLOW + "=" + pageOverflow;
}
else
{
action = action.replace( reg, "$1=" + pageOverflow );
}
/*
reg = new RegExp( "([&|?]{1}" + Constants.PARAM_PAGEBREAKONLY + "\s*)=([^&|^#]*)", "gi" );
if( action.search( reg ) < 0 )
{
action = action + "&" + Constants.PARAM_PAGEBREAKONLY + "=" + pagebreakonly;
}
else
{
action = action.replace( reg, "$1=" + pagebreakonly );
}
*/
// Force "__overwrite" as false
reg = new RegExp( "([&|?]{1}" + Constants.PARAM_OVERWRITE + "\s*)=([^&|^#]*)", "gi" );
if( action.search( reg ) < 0 )
{
action = action + "&" + Constants.PARAM_OVERWRITE + "=false";
}
else
{
action = action.replace( reg, "$1=false" );
}
// Set action as print
reg = new RegExp( "([&|?]{1}" + Constants.PARAM_ACTION + "\s*)=([^&|^#]*)", "gi" );
if( action.search( reg ) < 0 )
{
action = action + "&" + Constants.PARAM_ACTION + "=" + Constants.ACTION_PRINT;
}
else
{
action = action.replace( reg, "$1=" + Constants.ACTION_PRINT );
}
// Post printer settings
var curPrinter = this.__findPrinter( this.__printer.getName( ) );
if( curPrinter )
{
var param = document.createElement( "INPUT" );
formObj.appendChild( param );
param.TYPE = "HIDDEN";
param.name = Constants.PARAM_PRINTER_NAME;
param.value = this.__printer.getName( );
if( curPrinter.isCopiesSupported( ) )
{
param = document.createElement( "INPUT" );
formObj.appendChild( param );
param.TYPE = "HIDDEN";
param.name = Constants.PARAM_PRINTER_COPIES;
param.value = this.__printer.getCopies( );
}
if( curPrinter.isCollateSupported( ) )
{
param = document.createElement( "INPUT" );
formObj.appendChild( param );
param.TYPE = "HIDDEN";
param.name = Constants.PARAM_PRINTER_COLLATE;
param.value = new String( this.__printer.isCollate( ) );
}
if( curPrinter.isDuplexSupported( ) )
{
param = document.createElement( "INPUT" );
formObj.appendChild( param );
param.TYPE = "HIDDEN";
param.name = Constants.PARAM_PRINTER_DUPLEX;
param.value = this.__printer.getDuplex( );
}
if( curPrinter.isModeSupported( ) )
{
param = document.createElement( "INPUT" );
formObj.appendChild( param );
param.TYPE = "HIDDEN";
param.name = Constants.PARAM_PRINTER_MODE;
param.value = this.__printer.getMode( );
}
if( curPrinter.isMediaSupported( ) )
{
param = document.createElement( "INPUT" );
formObj.appendChild( param );
param.TYPE = "HIDDEN";
param.name = Constants.PARAM_PRINTER_MEDIASIZE;
param.value = this.__printer.getMediaSize( );
}
}
formObj.action = action;
formObj.method = "post";
formObj.target = "birt_confirmation_iframe";
formObj.submit( );
}
return true;
},
/**
* Native event handler for select control.
*
* @param event
* @return, void
*/
__neh_select_change : function( event )
{
this.__updateInfo( );
},
/**
* Native event handler for click 'Print On Server' control.
*
* @param event
* @return, void
*/
__neh_printserver_click : function( event )
{
var oCtl = Event.element( event );
if( oCtl.checked )
{
this.__enable = true;
$( 'printer' ).disabled = false;
}
else
{
this.__enable = false;
$( 'printer' ).disabled = true;
}
// Update info
this.__updateInfo( );
},
/**
* Check whether focus on input control
*
* @param oSC
* @return, void
*/
__checkPageRadio : function( oSC )
{
if( !oSC || oSC.type != 'radio' )
return;
var oInput = $( 'printServerPageRange_input' );
if( oSC.checked && oSC.id == 'printServerPageRange' )
{
oInput.disabled = false;
oInput.focus( );
}
else
{
oInput.disabled = true;
oInput.value = "";
}
},
/**
* Native event handler for page radio control.
*/
__neh_pageradio_click : function( event )
{
var oSC = Event.element( event );
this.__checkPageRadio( oSC );
},
/**
* Initilize dialog layout
*
* @return, void
*/
__initLayout : function( )
{
var oSelect = $( 'printer' );
if( !oSelect )
return;
oSelect.disabled = true;
for( var i=0; i<printers.length; i++ )
{
var oOption = document.createElement( "OPTION" );
oOption.text = printers[i].name;
oOption.value = printers[i].value.getName( );
oSelect.options[oSelect.options.length] = oOption;
}
// Update info
this.__updateInfo( );
},
/**
* Insert HTML in a control
*
* @param id
* @param text
* @return, void
*/
__insertHTML : function( id,text )
{
var oControl = $( id );
if( oControl )
{
oControl.innerHTML = text;
}
},
/**
* Set disabled status for all controls in container
*
* @param id
* @param flag
* @return, void
*/
__setDisabled : function( id, flag )
{
var oContainer = $( id );
if( !oContainer )
return;
var oSelects = oContainer.getElementsByTagName( "select" );
if( oSelects )
{
for( var i=0; i<oSelects.length; i++ )
oSelects[i].disabled = flag;
}
var oInputs = oContainer.getElementsByTagName( "input" );
if( oInputs )
{
for( var i=0; i<oInputs.length; i++ )
oInputs[i].disabled = flag;
}
},
/**
* Find certain printer object by name
*
* @param name
* @return, void
*/
__findPrinter : function( name )
{
var curPrinter;
for( var i=0; i<printers.length; i++ )
{
if( name == printers[i].name )
{
curPrinter = printers[i].value;
break;
}
}
return curPrinter;
},
/**
* Update generate information
*
* @return, void
*/
__updateInfo : function( )
{
var printerName = $( 'printer' ).value;
var curPrinter = this.__findPrinter( printerName );
if( !curPrinter )
{
this.__enable = false;
this.__setDisabled( 'printer_config',true );
this.__setDisabled( 'printServerPageSetting',true );
this.__setDisabled( 'printServerFitSetting',true );
return;
}
this.__printer = curPrinter;
// Generate info
this.__insertHTML( 'printer_status', curPrinter.getStatus( ) );
this.__insertHTML( 'printer_model', curPrinter.getModel( ) );
this.__insertHTML( 'printer_info', curPrinter.getInfo( ) );
// Print settings
if( this.__enable )
{
this.__setDisabled( 'printer_config',false );
this.__setDisabled( 'printServerPageSetting',false );
this.__setDisabled( 'printServerFitSetting',false );
var oInputs = $( 'printServerPageSetting' ).getElementsByTagName( 'input' );
for( var i=0; i<oInputs.length; i++ )
this.__checkPageRadio( oInputs[i] );
}
else
{
this.__setDisabled( 'printer_config',true );
this.__setDisabled( 'printServerPageSetting',true );
this.__setDisabled( 'printServerFitSetting',true );
}
if( curPrinter.isCopiesSupported( ) )
{
$( 'printer_copies' ).value = curPrinter.getCopies( );
}
else
{
$( 'printer_copies' ).disabled = true;
}
if( curPrinter.isCollateSupported( ) )
{
if( curPrinter.isCollate( ) )
$( 'printer_collate' ).checked = true;
else
$( 'printer_collate' ).checked = false;
}
else
{
$( 'printer_collate' ).disabled = true;
$( 'printer_collate' ).checked = false;
}
if( curPrinter.isDuplexSupported( ) )
{
var duplex = curPrinter.getDuplex( );
switch( duplex )
{
case curPrinter.DUPLEX_SIMPLEX:
$( 'printer_duplexSimplex' ).checked = true;
break;
case curPrinter.DUPLEX_HORIZONTAL:
$( 'printer_duplexHorz' ).checked = true;
break;
case curPrinter.DUPLEX_VERTICAL:
$( 'printer_duplexVert' ).checked = true;
break;
default:
$( 'printer_duplexSimplex' ).checked = true;
}
}
else
{
$( 'printer_duplexSimplex' ).disabled = true;
$( 'printer_duplexSimplex' ).checked = false;
$( 'printer_duplexHorz' ).disabled = true;
$( 'printer_duplexHorz' ).checked = false;
$( 'printer_duplexVert' ).disabled = true;
$( 'printer_duplexVert' ).checked = false;
}
if( curPrinter.isModeSupported( ) )
{
var mode = curPrinter.getMode( );
switch( mode )
{
case curPrinter.MODE_MONOCHROME:
$( 'printer_modeBW' ).checked = true;
break;
case curPrinter.MODE_COLOR:
$( 'printer_modeColor' ).checked = true;
break;
default:
$( 'printer_modeBW' ).checked = true;
}
}
else
{
$( 'printer_modeBW' ).disabled = true;
$( 'printer_modeBW' ).checked = false;
$( 'printer_modeColor' ).disabled = true;
$( 'printer_modeColor' ).checked = false;
}
if( curPrinter.isMediaSupported( ) )
{
var mediaSize = curPrinter.getMediaSize( );
var mediaSizeNames = curPrinter.getMediaSizeNames( );
var oSize = $( 'printer_mediasize' );
oSize.length = 0;
for( var i=0; i<mediaSizeNames.length; i++ )
{
var oOption = document.createElement( "OPTION" );
var oLabel = document.createElement( "LABEL" );
oLabel.innerHTML = mediaSizeNames[i].name;
oOption.text = oLabel.innerHTML;
oOption.value = mediaSizeNames[i].value;
if( mediaSizeNames[i].value == mediaSize )
oOption.selected = true;
oSize.options[oSize.options.length] = oOption;
}
}
else
{
$( 'printer_mediasize' ).length = 0;
$( 'printer_mediasize' ).disabled = true;
}
},
/**
Called right before element is shown
*/
__preShow: function()
{
// disable the toolbar buttons
birtUtility.setButtonsDisabled ( "toolbar", true );
// disable the Navigation Bar buttons
birtUtility.setButtonsDisabled ( "navigationBar", true );
},
/**
Called before element is hidden
*/
__preHide: function()
{
// enable the toolbar buttons
birtUtility.setButtonsDisabled ( "toolbar", false );
// enable the Navigation Bar buttons
birtUtility.setButtonsDisabled ( "navigationBar", false );
}
} );