/******************************************************************************* * Copyright (c) 2009 Johannes Utzig. * 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: * Johannes Utzig - initial API and implementation *******************************************************************************/ package org.eclipse.buckminster.ui.dependency.visualizer.controls; import java.util.HashSet; import java.util.Set; import org.eclipse.buckminster.ui.dependency.visualizer.DependencyVisualizer; import org.eclipse.buckminster.ui.dependency.visualizer.controls.listener.IViewerSettingChangeListener; import org.eclipse.buckminster.ui.dependency.visualizer.controls.listener.ViewerSettingChangeEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; /** * common base class for the sections of the 'settings' section in the * {@link DependencyVisualizer} editor * * @author Johannes Utzig * */ public abstract class AbstractViewerSettingControl { private FormToolkit toolkit; private Set<IViewerSettingChangeListener> listeners = new HashSet<IViewerSettingChangeListener>(); public AbstractViewerSettingControl(FormToolkit toolkit) { super(); this.toolkit = toolkit; } /** * adds a {@link IViewerSettingChangeListener} to this control. * <p> * does nothing if an identical listener has already been registered. * * @param listener */ public void addViewerSettingChangeListener(IViewerSettingChangeListener listener) { listeners.add(listener); } /** * Clients should override this method to have their controls created. * <p> * The given composite will usually be a {@link Section} with * {@link FillLayout} applied. * * @param parent * @return the only children of the parent */ public abstract Control createControl(Composite parent); /** * * @return the toolkit that should be used to create the widgets within this * control */ public FormToolkit getWidgetToolkit() { return toolkit; } /** * removes a {@link IViewerSettingChangeListener} from this control. * <p> * does nothing if an identical listener has already been registered. * * @param listener */ public void removeViewerSettingChangeListener(IViewerSettingChangeListener listener) { listeners.remove(listener); } /** * informs the registered {@link IViewerSettingChangeListener} about setting * changes * * @param event */ protected void fireViewerSettingsChangedEvent(ViewerSettingChangeEvent event) { for (IViewerSettingChangeListener listener : listeners) { listener.viewerSettingChanged(event); } } }