/*******************************************************************************
* Copyright (c) 2008, 2011 Thomas Holland (thomas@innot.de) 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:
* Thomas Holland - initial API and implementation
*******************************************************************************/
package de.innot.avreclipse.ui.editors;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.forms.AbstractFormPart;
import org.eclipse.ui.forms.IManagedForm;
import de.innot.avreclipse.core.toolinfo.fuses.ByteValues;
/**
* A <code>IFormPart</code> that adds one or more actions to the form toolbar.
* <p>
* This part can be created and used like a normal <code>IFormPart</code>. Subclasses provide the
* action to be performed. If the Action changes the <code>ByteValues</code> form input it will
* fire an Selection event via the ManagedForm to inform other parts that the input
* <code>ByteValues</code> have changed.
* </p>
*
* @author Thomas Holland
* @since 2.3
*
*/
public abstract class AbstractActionPart extends AbstractFormPart {
/**
* The model for this <code>ActionPart</code>. Other than the normal FormParts this will be
* modified immediately when the MCU is changed.
*/
private ByteValues fByteValues;
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.AbstractFormPart#initialize(org.eclipse.ui.forms.IManagedForm)
*/
@Override
public void initialize(IManagedForm form) {
super.initialize(form);
// Get the toolbar manager of the form and add our actions to it.
IToolBarManager toolbarmanager = form.getForm().getToolBarManager();
IAction[] allactions = getAction();
for (IAction action : allactions) {
if (action == null) {
toolbarmanager.add(new Separator());
} else {
toolbarmanager.add(action);
}
}
form.getForm().updateToolBar();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.AbstractFormPart#setFormInput(java.lang.Object)
*/
@Override
public boolean setFormInput(Object input) {
if (input instanceof ByteValues) {
fByteValues = (ByteValues) input;
return true;
}
return false;
}
/**
* Notify other Part of the ManagedForm that the values in the source <code>ByteValues</code>
* has changed.
* <p>
* The other parts must implement the <code>IPartSelectionListener</code> interface to receive
* the notification. The <code>ISelection</code> required by the ManagedForm is not used and
* is just an empty implementation.
* </p>
*/
protected void notifyForm() {
getManagedForm().fireSelectionChanged(this, new ISelection() {
public boolean isEmpty() {
return false;
}
});
}
/**
* Get the <code>ByteValues</code> input object of this form.
*
* @return
*/
protected ByteValues getByteValues() {
return fByteValues;
}
/**
* Create the actions.
* <p>
* The actions are added to the form toolbar. If the returned array has a <code>null</code> in
* it, then a toolbar separator is added in its place.
* </p>
*
* @return An <code>IAction</code> that can be added to the form toolbar.
*/
abstract protected IAction[] getAction();
}