/*******************************************************************************
* Copyright © 2008, 2013 IBM 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:
* IBM Corporation - initial API and implementation
*
*******************************************************************************/
package org.eclipse.edt.ide.rui.visualeditor.internal.editor;
import java.text.DecimalFormat;
import org.eclipse.edt.compiler.internal.EGLBasePlugin;
import org.eclipse.edt.ide.rui.visualeditor.internal.actions.EvActionBidiSettings;
import org.eclipse.edt.ide.rui.visualeditor.internal.actions.EvActionPreferences;
import org.eclipse.edt.ide.rui.visualeditor.internal.nl.Tooltips;
import org.eclipse.edt.ide.rui.visualeditor.internal.preferences.EvPreferences;
import org.eclipse.edt.ide.rui.visualeditor.internal.util.BidiFormat;
import org.eclipse.edt.ide.rui.visualeditor.internal.util.BidiUtils;
import org.eclipse.edt.ide.rui.visualeditor.internal.util.BrowserManager;
import org.eclipse.edt.ide.rui.visualeditor.internal.util.TranslationTestMode;
import org.eclipse.edt.ide.rui.visualeditor.plugin.Activator;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Slider;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
public class EvDesignToolbar extends Composite implements SelectionListener, IPropertyChangeListener {
protected Button _buttonOverlayOnTop = null;
protected Button _buttonBrowserOnTop = null;
protected Button _buttonTranslationTest = null;
protected Composite _compositeTransparencyControls = null;
protected DecimalFormat _decimalFormat = new DecimalFormat( "####%" );
protected ToolItem _itemPreferences = null;
protected ToolItem _itemRefreshPalette = null;
protected ToolItem _itemRefreshWebPage = null;
protected ToolItem _itemShowBrowserSizeControls = null;
protected ToolItem _itemShowTransparencyControls = null;
protected ToolItem _itemTransparencyDisabled = null;
protected ToolItem _itemTransparencyFixed = null;
protected ToolItem _itemTransparencyVariable = null;
protected ToolItem _itemBrowserInfo = null;
protected Label _labelTransparencyPercent = null;
protected EvDesignPage _pageDesign = null;
protected Slider _sliderTransparencyAmount = null;
// IBM BIDI Append Start
protected ToolItem _itemBidiPreferences = null;
// IBM BIDI Append End
/**
*
*/
public EvDesignToolbar( Composite compositeParent, int style, EvDesignPage pageDesign ) {
super( compositeParent, style );
_pageDesign = pageDesign;
// For translation verification test, an
// extra TVT button is placed on the toolbar
// This happens when the file TVT_TVT.egl is opened
//-------------------------------------------------
boolean bTranslationTest = pageDesign.getEditor().isTranslationTestMode();
// For debugging, it may be handy to
// change the z-order of the browser widget
// and the overlay. Change this variable to
// true to place the buttons on the tool bar
//-------------------------------------------
boolean bShowZOrderControls = false;
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 4;
if( bTranslationTest == true )
gridLayout.numColumns++;
if( bShowZOrderControls == true )
gridLayout.numColumns += 2;
gridLayout.marginWidth = 16;
gridLayout.marginHeight = 1;
gridLayout.horizontalSpacing = 2;
setLayout( gridLayout );
if( bTranslationTest == true ) {
_buttonTranslationTest = new Button( this, SWT.PUSH );
_buttonTranslationTest.setText( "TVT" );
_buttonTranslationTest.addSelectionListener( this );
}
if( bShowZOrderControls == true ){
_buttonBrowserOnTop = new Button( this, SWT.PUSH );
_buttonBrowserOnTop.setText( "Browser" );
GridData gridData = new GridData();
_buttonBrowserOnTop.setLayoutData( gridData );
_buttonBrowserOnTop.addSelectionListener( this );
_buttonOverlayOnTop = new Button( this, SWT.PUSH );
_buttonOverlayOnTop.setText( "Overlay" );
gridData = new GridData();
_buttonOverlayOnTop.setLayoutData( gridData );
_buttonOverlayOnTop.addSelectionListener( this );
_buttonOverlayOnTop.setEnabled( false );
}
// 1
Label label = new Label( this, SWT.NULL );
GridData gridData = new GridData( GridData.GRAB_HORIZONTAL );
label.setLayoutData( gridData );
// 2
createTransparencyComposite( this );
// 3
label = new Label( this, SWT.NULL );
gridData = new GridData();
gridData.widthHint = 16;
label.setLayoutData( gridData );
// 4
ToolBar toolbar = new ToolBar( this, SWT.HORIZONTAL | SWT.FLAT );
gridData = new GridData( GridData.HORIZONTAL_ALIGN_END );
toolbar.setLayoutData( gridData );
_itemBrowserInfo = createBrowserInfo( toolbar );
_itemShowTransparencyControls = createShowTransparencyControls( toolbar );
_itemShowBrowserSizeControls = createShowBrowserSizeControls( toolbar );
// Options and preferences
//------------------------
new ToolItem( toolbar, SWT.SEPARATOR );
// IBM BIDI Append Start
_itemBidiPreferences = createBidiPreferences( toolbar );
_itemBidiPreferences.setEnabled( BidiUtils.isBidi() );
EGLBasePlugin.getPlugin().getPreferenceStore().addPropertyChangeListener(this);
// IBM BIDI Append End
_itemPreferences = createPreferences( toolbar );
// Refresh palette
//----------------
new ToolItem( toolbar, SWT.SEPARATOR );
_itemRefreshPalette = createRefreshPalette( toolbar );
_itemRefreshWebPage = createRefreshWebPage( toolbar );
// Help
//-----
EvHelp.setHelp( toolbar, EvHelp.DESIGN_TOOLBAR );
for( int i = 0; i < toolbar.getItemCount(); ++i )
EvHelp.setHelp( toolbar.getItem( i ).getControl(), EvHelp.DESIGN_TOOLBAR );
EvHelp.setHelp( _buttonOverlayOnTop, EvHelp.DESIGN_TOOLBAR );
EvHelp.setHelp( _buttonBrowserOnTop, EvHelp.DESIGN_TOOLBAR );
}
protected ToolItem createBrowserInfo( ToolBar toolbar ) {
ToolItem item = new ToolItem( toolbar, SWT.PUSH | SWT.FLAT );
item.setImage( Activator.getImage( EvConstants.ICON_USER_AGENT ) );
item.addSelectionListener( this );
item.setToolTipText( Tooltips.NL_User_agent );
return item;
}
// IBM BIDI Append Start
/**
* Creates the bidirectional preferences toolbar item.
*/
protected ToolItem createBidiPreferences( ToolBar toolbar ) {
ToolItem item = new ToolItem( toolbar, SWT.PUSH | SWT.FLAT );
item.setImage( Activator.getImage( EvConstants.ICON_BIDI_SETTINGS ) );
item.addSelectionListener( this );
item.setToolTipText( Tooltips.NL_Configure_bidirectional_options );
return item;
}
// IBM BIDI Append End
/**
* Creates the preferences toolbar item.
*/
protected ToolItem createPreferences( ToolBar toolbar ) {
ToolItem item = new ToolItem( toolbar, SWT.PUSH | SWT.FLAT );
item.setImage( Activator.getImage( EvConstants.ICON_PREFERENCES ) );
item.addSelectionListener( this );
item.setToolTipText( Tooltips.NL_Configure_preferences );
return item;
}
/**
*
*/
protected ToolItem createRefreshPalette( ToolBar toolbar ) {
ToolItem item = new ToolItem( toolbar, SWT.PUSH | SWT.FLAT );
item.setImage( Activator.getImage( EvConstants.ICON_REFRESH_PALETTE ) );
item.addSelectionListener( this );
item.setToolTipText( Tooltips.NL_Refresh_palette );
return item;
}
/**
*
*/
protected ToolItem createRefreshWebPage( ToolBar toolbar ) {
ToolItem item = new ToolItem( toolbar, SWT.PUSH | SWT.FLAT );
item.setImage( Activator.getImage( EvConstants.ICON_REFRESH_WEB_PAGE ) );
item.addSelectionListener( this );
item.setToolTipText( Tooltips.NL_Refresh_web_page );
// Disable if no RUI handler
//--------------------------
item.setEnabled( _pageDesign.getEditor().isRuiHandler() );
return item;
}
/**
* Creates the 'Show browser size controls' toolbar item.
*/
protected ToolItem createShowBrowserSizeControls( ToolBar toolbar ) {
ToolItem item = new ToolItem( toolbar, SWT.CHECK | SWT.FLAT );
item.setImage( Activator.getImage( EvConstants.ICON_SHOW_BROWSER_SIZE_CONTROLS ) );
item.setToolTipText( Tooltips.NL_Show_browser_size_controls );
boolean bShowBrowserSizeControls = EvPreferences.getBoolean( EvConstants.PREFERENCE_BROWSER_SIZE_CONTROLS_VISIBLE );
item.setSelection( bShowBrowserSizeControls );
item.addSelectionListener( this );
return item;
}
/**
* Creates the 'Show transparency controls' toolbar item.
*/
protected ToolItem createShowTransparencyControls( ToolBar toolbar ) {
ToolItem item = new ToolItem( toolbar, SWT.CHECK | SWT.FLAT );
item.setImage( Activator.getImage( EvConstants.ICON_SHOW_TRANSPARENCY_CONTROLS ) );
item.setToolTipText( Tooltips.NL_Show_transparency_controls );
boolean bShowBrowserSizeControls = EvPreferences.getBoolean( EvConstants.PREFERENCE_TRANSPARENCY_CONTROLS_VISIBLE );
item.setSelection( bShowBrowserSizeControls );
item.addSelectionListener( this );
return item;
}
/**
* Creates the transparency controls
*/
protected void createTransparencyComposite( Composite compositeParent ) {
_compositeTransparencyControls = new Composite( compositeParent, SWT.NULL );
GridData gridData = new GridData( GridData.HORIZONTAL_ALIGN_END );
_compositeTransparencyControls.setLayoutData( gridData );
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3;
gridLayout.horizontalSpacing = 2;
gridLayout.marginWidth = 4;
gridLayout.marginHeight = 0;
_compositeTransparencyControls.setLayout( gridLayout );
ToolBar toolbar = new ToolBar( _compositeTransparencyControls, SWT.HORIZONTAL | SWT.FLAT );
gridData = new GridData( GridData.HORIZONTAL_ALIGN_END );
toolbar.setLayoutData( gridData );
int iTransparencyMode = EvPreferences.getInt( EvConstants.PREFERENCE_SEMITRANSPARENCY_MODE );
_itemTransparencyDisabled = new ToolItem( toolbar, SWT.RADIO );
_itemTransparencyDisabled.setImage( Activator.getImage( EvConstants.ICON_TRANSPARENCY_NONE ) );
_itemTransparencyDisabled.setSelection( iTransparencyMode == EvConstants.SEMITRANSPARENCY_NONE );
_itemTransparencyDisabled.addSelectionListener( this );
_itemTransparencyDisabled.setToolTipText( Tooltips.NL_Fully_transparent );
_itemTransparencyFixed = new ToolItem( toolbar, SWT.RADIO );
_itemTransparencyFixed.setImage( Activator.getImage( EvConstants.ICON_TRANSPARENCY_FIXED ) );
_itemTransparencyFixed.setSelection( iTransparencyMode == EvConstants.SEMITRANSPARENCY_FIXED );
_itemTransparencyFixed.addSelectionListener( this );
_itemTransparencyFixed.setToolTipText( Tooltips.NL_Dotted_transparency_pattern );
// The variable transparency controls are not available if the operating
// system doesn't support transparency
//----------------------------------------------------------------------
if( _pageDesign.isGraphicsTransparencyAvailable() == true ) {
_itemTransparencyVariable = new ToolItem( toolbar, SWT.RADIO );
_itemTransparencyVariable.setImage( Activator.getImage( EvConstants.ICON_TRANSPARENCY_VARIABLE ) );
_itemTransparencyVariable.setSelection( iTransparencyMode == EvConstants.SEMITRANSPARENCY_VARIABLE );
_itemTransparencyVariable.addSelectionListener( this );
_itemTransparencyVariable.setToolTipText( Tooltips.NL_Variable_transparency );
_sliderTransparencyAmount = new Slider( _compositeTransparencyControls, SWT.NULL );
gridData = new GridData();
gridData.widthHint = 100;
_sliderTransparencyAmount.setLayoutData( gridData );
_sliderTransparencyAmount.setToolTipText( Tooltips.NL_Variable_transparency );
int iTransparencyAmount = EvPreferences.getInt( EvConstants.PREFERENCE_SEMITRANSPARENCY_AMOUNT );
_sliderTransparencyAmount.setValues( iTransparencyAmount, 0, 255 + 1, 1, 1, 10 );
_sliderTransparencyAmount.addSelectionListener( this );
_labelTransparencyPercent = new Label( _compositeTransparencyControls, SWT.NULL );
gridData = new GridData();
_labelTransparencyPercent.setLayoutData( gridData );
_labelTransparencyPercent.setText( "000%" );
}
EvHelp.setHelp( _compositeTransparencyControls, EvHelp.DESIGN_TOOLBAR );
EvHelp.setHelp( toolbar, EvHelp.DESIGN_TOOLBAR );
if( _sliderTransparencyAmount != null )
EvHelp.setHelp( _sliderTransparencyAmount, EvHelp.DESIGN_TOOLBAR );
for( int i = 0; i < toolbar.getItemCount(); ++i )
EvHelp.setHelp( toolbar.getItem( i ).getControl(), EvHelp.DESIGN_TOOLBAR );
updateTransparencyControls();
// Show/hide the transparency controls
//------------------------------------
boolean bShowTransparencyControls = EvPreferences.getBoolean( EvConstants.PREFERENCE_TRANSPARENCY_CONTROLS_VISIBLE );
_compositeTransparencyControls.setVisible( bShowTransparencyControls );
}
// IBM BIDI Append Start
public void propertyChange(PropertyChangeEvent event) {
//TODO EDT BIDI
// if (EGLBasePlugin.BIDI_ENABLED_OPTION.equals(event.getProperty())){
// if (!_itemBidiPreferences.isDisposed())
// _itemBidiPreferences.setEnabled( ((Boolean)event.getNewValue()).booleanValue() );
// }
}
// IBM BIDI Append End
/**
* Updates the transparency amount slider position and transparency percentage amount
*/
public void updateTransparencyControls() {
if( _sliderTransparencyAmount == null )
return;
_sliderTransparencyAmount.setEnabled( _itemTransparencyVariable.getSelection() == true );
int iPercent = ( _sliderTransparencyAmount.getSelection() * 100 ) / 255;
// Space is added to the end, otherwise the label not wide enough if the value is single/double digit
//---------------------------------------------------------------------------------------------------
StringBuffer strb = new StringBuffer();
double dPercentage = new Double( iPercent ).doubleValue();
if( dPercentage < 100d ) // 0 to 100
strb.append( " " );
if( dPercentage < 0.1d )
strb.append( " " );
_labelTransparencyPercent.setText( _decimalFormat.format( dPercentage / 100 ) + strb.toString() );
}
/**
* Declared in SelectionListener.
* Defers an 'enter' key press to the widgetSelected method.
*/
public void widgetDefaultSelected( SelectionEvent event ) {
widgetSelected( event );
}
/**
* Declared in SelectionListener.
*/
public void widgetSelected( SelectionEvent event ) {
// IBM BIDI Append Start
if( event.widget == _itemBidiPreferences ) {
BidiFormat bidiFormat = _pageDesign.getBidiFormat();
EvActionBidiSettings action = new EvActionBidiSettings( bidiFormat );
action.run();
bidiFormat = action.getBidiFormat();
_pageDesign.setBidiFormat( bidiFormat );
// Set the focus to allow an F1 press
// to present the tool bar help
//-----------------------------------
_itemBidiPreferences.getParent().setFocus();
}
// IBM BIDI Append End
// Hide browser size controls
//---------------------------
else if( event.widget == _itemRefreshPalette )
_pageDesign.refreshPalette();
// Refresh browser
// Tells the editor that the model has changed
// This will generate a web page and
// refresh the design and preview pages.
//--------------------------------------------
else if( event.widget == _itemRefreshWebPage ) {
_pageDesign._bFullRefresh = true;
_pageDesign.getEditor().modelChanged();
}
// Show preferences
//-----------------
else if( event.widget == _itemPreferences ) {
EvActionPreferences action = new EvActionPreferences();
action.run();
// Set the focus to allow an F1 press
// to present the tool bar help
//-----------------------------------
_itemPreferences.getParent().setFocus();
}
// Hide browser size controls
//---------------------------
else if( event.widget == _itemShowBrowserSizeControls )
_pageDesign.updateBrowserSizeControlsVisible( _itemShowBrowserSizeControls.getSelection() );
// Transparency controls
//----------------------
else if( event.widget == _itemShowTransparencyControls )
_compositeTransparencyControls.setVisible( _itemShowTransparencyControls.getSelection() );
else if (event.widget == _itemTransparencyDisabled ){
if( _itemTransparencyDisabled.getSelection() == true )
_pageDesign.setTransparency( EvConstants.SEMITRANSPARENCY_NONE, 0 );
updateTransparencyControls();
_itemTransparencyDisabled.getParent().setFocus();
}
else if (event.widget == _itemTransparencyFixed ){
if( _itemTransparencyFixed.getSelection() == true )
_pageDesign.setTransparency( EvConstants.SEMITRANSPARENCY_FIXED, 0 );
updateTransparencyControls();
_itemTransparencyFixed.getParent().setFocus();
}
else if (event.widget == _itemTransparencyVariable ){
_pageDesign.setTransparency( EvConstants.SEMITRANSPARENCY_VARIABLE, _sliderTransparencyAmount.getSelection() );
updateTransparencyControls();
_itemTransparencyVariable.getParent().setFocus();
}
else if( _sliderTransparencyAmount != null && event.widget == _sliderTransparencyAmount ){
_pageDesign.setTransparency( EvConstants.SEMITRANSPARENCY_VARIABLE, _sliderTransparencyAmount.getSelection() );
updateTransparencyControls();
_sliderTransparencyAmount.setFocus();
}
// TVT mode
//---------
else if( event.widget == _buttonTranslationTest ){
TranslationTestMode testMode = new TranslationTestMode();
testMode.execute( _pageDesign.getEditor() );
}
// Z-order controls
//-----------------
else if( event.widget == _buttonOverlayOnTop ) {
_buttonOverlayOnTop.setEnabled( false );
_buttonBrowserOnTop.setEnabled( true );
_pageDesign.setDesignMode( true );
}
else if( event.widget == _buttonBrowserOnTop ) {
_buttonOverlayOnTop.setEnabled( true );
_buttonBrowserOnTop.setEnabled( false );
_pageDesign.setDesignMode( false );
}
// Display browser information
//------------------------
else if( event.widget == _itemBrowserInfo ) {
BrowserManager.getInstance().displayBrowserInfo(_pageDesign.getBrowser());
}
}
}