/******************************************************************************* * 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.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.widgets.FormToolkit; /** * Implements a specialized multi editor that is represented by a check box and * provides only two states: SELECTED and DESELECTED. * * @author Guillaume Brocker */ public class CheckMultiEditor extends MultiEditor { /** * the selected state name constant */ public static final String SELECTED = "Selected"; /** * the deselected state name constant */ public static final String DESELECTED = "Deselected"; /** * Defines the selection listener for the check box button */ private class MySelectionListener implements SelectionListener { public void widgetDefaultSelected(SelectionEvent e) { widgetSelected(e); } public void widgetSelected(SelectionEvent e) { Button button = (Button) e.widget; selectState( button.getSelection() ? SELECTED : DESELECTED ); commit(); } } /** * a string containing the text to use for the check box button */ private String text; /** * the check box button that represents the editor */ private Button button; /** * Constructor * * @param text a string containing the text that will be used for the check box control */ public CheckMultiEditor( String text ) { super( new String[] {SELECTED, DESELECTED} ); this.text = text; } /** * @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) { button = formToolkit.createButton(parent, text, SWT.CHECK); button.addSelectionListener( new MySelectionListener() ); parent.setLayout(new FillLayout(SWT.VERTICAL)); } /** * @see eclox.ui.editor.editors.IEditor#dispose() */ public void dispose() { button = 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 button != null; // Refreshes the states. super.refresh(); // Refreshes the check box State selection = getSelectionAsState(); button.setSelection( selection != null && selection.getName().equals(SELECTED) ); } /** * @see eclox.ui.editor.editors.IEditor#setEnabled(boolean) */ public void setEnabled(boolean enabled) { // Pre-condition assert button != null; button.setEnabled(enabled); } /** * @see eclox.ui.editor.editors.IEditor#setFocus() */ public void setFocus() { // Pre-condition assert button != null; button.setFocus(); } }