blob: d61c13dae451129250b83b4bd1e449e067460a46 [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2011-2016 See4sys, itemis and others.
* 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:
* See4sys - Initial API and implementation
* itemis - [503063] Provide launching support for Sphinx Workflows
*
* </copyright>
*/
package org.eclipse.sphinx.platform.ui.groups;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.sphinx.platform.ui.fields.IField;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
public abstract class AbstractGroup implements IGroup {
/**
* The name of this group.
*/
protected String groupName;
/**
* The dialog settings for this group; <code>null</code> if none.
*/
private IDialogSettings dialogSettings = null;
/**
* The listeners of this group. These listeners are notified when group changes append.
* <p>
* Listeners added to this list must be instances of {@link IGroupListener}.
*/
private ListenerList<IGroupListener> groupListeners = new ListenerList<IGroupListener>();
/**
* This construct a group with <code>groupName</code> group name.
*
* @param groupName
* the name of the group.
*/
public AbstractGroup(String groupName) {
this(groupName, null);
}
/**
* This construct a group with <code>groupName</code> group name.
*
* @param groupName
* the name of the group.
* @param dialogSettings
* the dialog settings for this group or null.
*/
public AbstractGroup(String groupName, IDialogSettings dialogSettings) {
this.groupName = groupName;
this.dialogSettings = dialogSettings;
}
@Override
public void createContent(Composite parent, int numColumns) {
createContent(parent, numColumns, false, false);
}
@Override
public void createContent(Composite parent, int numColumns, boolean grabExcessVerticalSpace) {
createContent(parent, numColumns, grabExcessVerticalSpace, false);
}
@Override
public void createContent(Composite parent, int numColumns, boolean grabExcessVerticalSpace, boolean suppressGroupFrame) {
Composite group;
if (!suppressGroupFrame) {
group = new Group(parent, SWT.SHADOW_NONE);
((Group) group).setText(groupName);
} else {
group = new Composite(parent, SWT.SHADOW_NONE);
}
GridDataFactory.fillDefaults().grab(true, grabExcessVerticalSpace).applyTo(group);
// Create group content
doCreateContent(group, numColumns);
// Load group settings
loadGroupSettings();
}
/**
* Creates the content i.e., all required fields of the group.
*/
protected abstract void doCreateContent(Composite parent, int numColumns);
/**
* Sent when the content of a group field has changed. This method should be overriding for instance by wizards that
* contain the output group field for example to adjust the enable state of the Back, Next, and Finish buttons
* wizard page.
*/
protected void notifyGroupChanged(IField field) {
// Iterates over all listeners
for (Object listener : groupListeners.getListeners()) {
// Fires dialog group changed notification
((IGroupListener) listener).groupChanged(field);
}
}
/**
* Loads the dialog settings of this group.
*/
protected void loadGroupSettings() {
// Do nothing by default.
}
/**
* Saves the dialog settings of this group.
*/
public void saveGroupSettings() {
// Do nothing by default.
}
/*
* @see org.eclipse.sphinx.platform.ui.groups.IGroup#addGroupListener(org.eclipse.sphinx.platform.ui.groups.
* IGroupListener )
*/
@Override
public final void addGroupListener(IGroupListener listener) {
groupListeners.add(listener);
}
/*
* @see org.eclipse.sphinx.platform.ui.groups.IGroup#removeGroupListener(org.eclipse.sphinx.platform.ui.groups.
* IGroupListener )
*/
@Override
public void removeGroupListener(IGroupListener listener) {
groupListeners.remove(listener);
}
/**
* Returns true or false if the group is complete or not.
*/
@Override
public boolean isGroupComplete() {
return true;
}
/**
* Sets the dialog settings for this group.
* <p>
* The dialog settings is used to record state between group invocations (i.e. template path and the selected define
* block inside this template)
* </p>
*
* @param settings
* the dialog settings, or <code>null</code> if none
* @see #getDialogSettings
*/
public void setDialogSettings(IDialogSettings dialogSettings) {
this.dialogSettings = dialogSettings;
}
/**
* Returns the dialog settings for this group.
*
* @return the dialog settings, or <code>null</code> if none
*/
protected IDialogSettings getDialogSettings() {
return dialogSettings;
}
}