| /******************************************************************************* |
| * Copyright (c) 2011, 2012, 2013, 2014 Red Hat, Inc. |
| * All rights reserved. |
| * This program is 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: |
| * Red Hat, Inc. - initial API and implementation |
| * |
| * @author Bob Brodt |
| ******************************************************************************/ |
| package org.eclipse.bpmn2.modeler.core; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| import org.eclipse.swt.widgets.Composite; |
| |
| /** |
| * The interface that defines a provider for an EditControl. |
| * <p> |
| * An EditControl is an SWT Composite that can be embedded in a Viewer or |
| * Dialog, just like any other Composite. |
| * <p> |
| * EditControl must implement setValue() and getValue() methods which are used |
| * to initialize the EditControl's widget with data, and fetch data from the |
| * widget. |
| * <p> |
| * Listeners are used to notify the client when the widget's data has changed, |
| * therefore the implementation must add "this" as a widget Selection Listener |
| * in the createControl() method. |
| */ |
| public interface EditControlProvider { |
| |
| /** |
| * An wrapper class for SWT widgets. |
| * <p> |
| * Clients must extend this class and provide appropriate editing widgets. |
| */ |
| public abstract class EditControl extends Composite implements SelectionListener { |
| protected List<SelectionListener> listeners; |
| |
| public EditControl(Composite parent, int style) { |
| super(parent, style); |
| } |
| |
| /** |
| * The implementation must return the value of the object being edited, |
| * performing data type conversion if necessary. |
| * |
| * @return the value of the object being edited, in the correct data |
| * type. |
| */ |
| public abstract Object getValue(); |
| |
| /** |
| * The implementation must convert the given object value to a form that |
| * can be represented by the SWT editing widget. |
| * |
| * @param value |
| * the object value |
| * @return true if the value is valid, false if not. |
| */ |
| public abstract boolean setValue(Object value); |
| |
| /** |
| * The implementation must add this EditControl as a selection listener. |
| * This will notify the parent when the value changes in the editing |
| * widget. |
| * |
| * @param listener |
| * should be this EditControl, or some proxy. |
| */ |
| public void addSelectionListener(SelectionListener listener) { |
| if (listeners == null) |
| listeners = new ArrayList<SelectionListener>(); |
| listeners.add(listener); |
| } |
| |
| /** |
| * Remove the selection listener previously added. |
| * |
| * @param listener |
| * a listener previously added by |
| * {@code EditControl#addSelectionListener(SelectionListener)} |
| */ |
| public void removeSelectionListener(SelectionListener listener) { |
| if (listeners == null) |
| return; |
| listeners.remove(listener); |
| if (listeners.size() == 0) |
| listeners = null; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse |
| * .swt.events.SelectionEvent) |
| */ |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| if (listeners != null) { |
| for (SelectionListener listener : listeners) |
| listener.widgetSelected(e); |
| } |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org |
| * .eclipse.swt.events.SelectionEvent) |
| */ |
| @Override |
| public void widgetDefaultSelected(SelectionEvent e) { |
| } |
| } |
| |
| /** |
| * The implementation must create the editing widget(s) in the given parent |
| * container and apply the given style bits if appropriate. |
| * |
| * @param parent |
| * the parent Composite container widget. |
| * @param style |
| * style bits for the editing widget. |
| * @return the editing widget control. If more than one widget is required |
| * for editing the data object, the one returned should be the same |
| * widget that was registered as the selection listener. |
| */ |
| public EditControl createControl(Composite parent, int style); |
| } |