// Copyright (c) 2003-2005 by Leif Frenzel - see http://leiffrenzel.de
package net.sf.eclipsefp.haskell.ghccompiler.ui.preferences.dialog;
import net.sf.eclipsefp.common.ui.dialog.DialogField;
import net.sf.eclipsefp.haskell.ghccompiler.core.GhcParameter;
import net.sf.eclipsefp.haskell.ghccompiler.ui.internal.util.UITexts;
import net.sf.eclipsefp.haskell.ghccompiler.ui.preferences.ParamsUITexts;
import org.eclipse.core.runtime.Assert;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.Widget;
/** <p>dialog field for the selection of compiler optimization levels.</p>
*
* @author Leif Frenzel
*/
public class LevelSelectionDialogField extends DialogField {
private int selected = -1;
// ui elements
private Button[] buttons;
public LevelSelectionDialogField( final Composite parent ) {
super( parent );
setLayout( new GridLayout( 1, false ) );
createLabel();
createButtons();
}
// interface methods of DialogField
///////////////////////////////////
@Override
public Object getInfo() {
return new Integer( selected );
}
@Override
public void setInfo( final Object info ) {
int newSelected = ( ( Integer )info ).intValue();
Assert.isTrue( newSelected >= -1 && newSelected <= 2 );
selected = newSelected;
applySelection();
}
// UI creation methods
//////////////////////
private Button createButton( final Composite parent, final String prefKey ) {
String text = ParamsUITexts.getShortDescription( prefKey );
String tooltip = text + "\n" + ParamsUITexts.getOption( prefKey ); //$NON-NLS-1$
return createButton( parent, text, tooltip );
}
private Button createButton( final Composite parent,
final String text,
final String tooltip) {
Button result = new Button( parent, SWT.RADIO | SWT.LEFT );
result.setText( text );
result.setToolTipText( tooltip );
return result;
}
private void createButtons() {
String text = UITexts.levelSelectionDialogField_zeroText;
String tooltip = UITexts.levelSelectionDialogField_zeroTooltip;
buttons = new Button[ 4 ];
buttons[ 0 ] = createButton( this, text, tooltip );
buttons[ 1 ] = createButton( this, GhcParameter.OPT_O0.getName() );
buttons[ 2 ] = createButton( this, GhcParameter.OPT_O1.getName() );
buttons[ 3 ] = createButton( this, GhcParameter.OPT_O2.getName() );
SelectionListener li = new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent evt ) {
Widget widget = evt.widget;
int newSelected = -1;
if( widget == buttons[ 1 ] ) {
newSelected = 0;
} else if( widget == buttons[ 2 ] ) {
newSelected = 1;
} else if( widget == buttons[ 3 ] ) {
newSelected = 2;
}
selected = newSelected;
notifyListeners( new Integer( newSelected ) );
}
};
for( int i = 0; i < buttons.length; i++ ) {
buttons[ i ].addSelectionListener( li );
}
}
private void createLabel() {
Label label = new Label( this, SWT.WRAP );
label.setText( UITexts.levelSelectionDialogField_levelInfo );
}
// helping methods
//////////////////
private void applySelection() {
for (int a=0;a<buttons.length;a++){
buttons[a].setSelection(a==selected+1);
}
}
}