/*******************************************************************************
* Copyright (c) 2002, 2008 Innoopract Informationssysteme GmbH.
* 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:
* Innoopract Informationssysteme GmbH - initial API and implementation
******************************************************************************/
package org.eclipse.rap.demo.presentation;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.rwt.graphics.Graphics;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
class ActionBarButton
extends MouseAdapter
implements IPropertyChangeListener
{
private final Action action;
private final Label label;
ActionBarButton( final Action action, final Composite actionBar ) {
this.action = action;
this.label = new Label( actionBar, SWT.NONE );
label.setText( action.getText() );
FontData fontData = label.getFont().getFontData()[ 0 ];
label.setFont( Graphics.getFont( fontData.getName(),
fontData.getHeight() + 2,
fontData.getStyle() ) );
label.pack();
action.addPropertyChangeListener( this );
adjustEnablement( action.isEnabled() );
}
public void mouseUp( final MouseEvent event ) {
run();
}
public void run() {
action.run();
}
public void propertyChange( final PropertyChangeEvent event ) {
if( "enabled".equals( event.getProperty() ) ) {
adjustEnablement( ( ( Boolean )event.getNewValue() ).booleanValue() );
}
}
private void adjustEnablement( boolean booleanValue ) {
if( booleanValue ) {
label.addMouseListener( this );
label.setForeground( Graphics.getColor( 255, 255, 255 ) );
} else {
label.removeMouseListener( this );
label.setForeground( Graphics.getColor( 192, 192, 192 ) );
}
}
}