/*******************************************************************************
* Copyright (C) 2003-2007, 2013, Guillaume Brocker
*
* 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:
* Guillaume Brocker - Initial API and implementation
*
******************************************************************************/
package eclox.ui.editor.basic;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.FormToolkit;
/**
* Implements a multi editor that presents choices in a combo box.
*
* @author Guillaume Brocker
*/
public class ComboMultiEditor extends MultiEditor {
/**
* Implements a selection listener that will handle selection changes in the combo control.
*/
private class MySelectionListener implements SelectionListener {
/**
* @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
/**
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
selectState( combo.getItem(combo.getSelectionIndex()) );
commit();
}
}
/**
* the combo control that is the representation of the editor
*/
Combo combo;
/**
* Constructor
*
* @param states an array of string representing all posible states
*/
ComboMultiEditor( String [] states ) {
super( states );
}
/**
* @see eclox.ui.editor.editors.IEditor#createContent(org.eclipse.swt.widgets.Composite, org.eclipse.ui.forms.widgets.FormToolkit)
*/
public void createContent(Composite parent, FormToolkit formToolkit) {
// Pre-condition
assert combo != null;
// Creates the combo control.
combo = new Combo(parent, SWT.DROP_DOWN|SWT.READ_ONLY);
combo.addSelectionListener( new MySelectionListener() );
formToolkit.adapt(combo, true, true);
// Fills the combo with the state names.
for( int i = 0; i != states.length; ++i ) {
combo.add( states[i].getName() );
}
combo.setVisibleItemCount(states.length);
// Installs a layout in the parent composite
parent.setLayout(new FillLayout());
}
/**
* @see eclox.ui.editor.editors.IEditor#dispose()
*/
public void dispose() {
combo = null;
}
/**
* @see eclox.ui.editor.editors.IEditor#grabVerticalSpace()
*/
public boolean grabVerticalSpace() {
return false;
}
/**
* @see eclox.ui.editor.basic.MultiEditor#refresh()
*/
public void refresh() {
// Pre-condition
assert combo != null;
super.refresh();
// Selectes the string corresponding to the current selection
State selection = getSelectionAsState();
if( selection != null ) {
combo.select( combo.indexOf(selection.getName()) );
}
else {
combo.deselectAll();
}
}
/**
* @see eclox.ui.editor.editors.IEditor#setEnabled(boolean)
*/
public void setEnabled(boolean enabled) {
// Pre-condition
assert combo != null;
combo.setEnabled(enabled);
}
/**
* @see eclox.ui.editor.editors.IEditor#setFocus()
*/
public void setFocus() {
// Pre-condition
assert combo != null;
combo.setFocus();
}
}