AgeEditorActionBarContributor.java
package org.osate.ge.gef.ui.editor;
import java.util.Objects;
import org.eclipse.e4.core.contexts.EclipseContextFactory;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.menus.CommandContributionItemParameter;
import org.eclipse.ui.part.EditorActionBarContributor;
import org.osate.ge.aadl2.ui.internal.editor.DeleteFlowContributionItem;
import org.osate.ge.aadl2.ui.internal.editor.EditFlowContributionItem;
import org.osate.ge.aadl2.ui.internal.editor.FlowContributionItem;
import org.osate.ge.aadl2.ui.internal.editor.ModeContributionItem;
import org.osate.ge.aadl2.ui.internal.editor.ShowFlowContributionItem;
import org.osate.ge.internal.services.ModelChangeNotifier;
import org.osate.ge.internal.ui.editor.DummyContributionItem;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
/**
* Action bar contributor for {@link AgeEditor}. Provides items for the action bar when the graphical editor is active.
* This class is referenced as part of the editor extension definition.
*
*/
public final class AgeEditorActionBarContributor extends EditorActionBarContributor {
private final ZoomSelectorContributionItem zoomItem;
private final ModeContributionItem selectedModeItem;
private final FlowContributionItem selectedFlowItem;
private final ShowFlowContributionItem showFlowImplElements;
private final EditFlowContributionItem editFlowItem;
private final DeleteFlowContributionItem deleteFlowItem;
private final DummyContributionItem dummyItem;
/**
* Creates a new instance
*/
public AgeEditorActionBarContributor() {
final Bundle bundle = FrameworkUtil.getBundle(getClass());
final ModelChangeNotifier modelChangeNotifier = Objects.requireNonNull(
EclipseContextFactory.getServiceContext(bundle.getBundleContext()).get(ModelChangeNotifier.class),
"unable to retrieve model change notifier");
zoomItem = new ZoomSelectorContributionItem();
selectedModeItem = new ModeContributionItem("org.osate.ge.gef.ui.editor.items.selected_mode",
modelChangeNotifier);
showFlowImplElements = new ShowFlowContributionItem("org.osate.ge.gef.ui.editor.items.show_flow_elements");
editFlowItem = new EditFlowContributionItem("org.osate.ge.gef.ui.editor.items.edit_flow");
deleteFlowItem = new DeleteFlowContributionItem("org.osate.ge.gef.ui.editor.items.delete_flow");
selectedFlowItem = new FlowContributionItem("org.osate.ge.gef.ui.editor.items.selected_flow",
showFlowImplElements, editFlowItem, deleteFlowItem, modelChangeNotifier);
dummyItem = new DummyContributionItem("org.osate.ge.gef.ui.editor.items.dummy"); // Needed to ensure separator appears
}
@Override
public void dispose() {
zoomItem.setActiveEditor(null);
selectedModeItem.setActiveEditor(null);
selectedFlowItem.setActiveEditor(null);
showFlowImplElements.setActiveEditor(null);
editFlowItem.setActiveEditor(null);
deleteFlowItem.setActiveEditor(null);
super.dispose();
}
@Override
public void contributeToToolBar(final IToolBarManager tbm) {
final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (window != null) {
tbm.add(new CommandContributionItem(new CommandContributionItemParameter(window, null,
"org.osate.ge.gef.ui.commands.zoomOut", CommandContributionItem.STYLE_PUSH)));
tbm.add(new CommandContributionItem(new CommandContributionItemParameter(window, null,
"org.osate.ge.gef.ui.commands.zoomIn", CommandContributionItem.STYLE_PUSH)));
}
tbm.add(zoomItem);
tbm.add(selectedModeItem);
tbm.add(new Separator());
tbm.add(selectedFlowItem);
tbm.add(showFlowImplElements);
tbm.add(editFlowItem);
tbm.add(deleteFlowItem);
tbm.add(new Separator());
tbm.add(dummyItem);
}
@Override
public final void setActiveEditor(final IEditorPart editor) {
super.setActiveEditor(editor);
zoomItem.setActiveEditor(editor);
selectedModeItem.setActiveEditor(editor);
selectedFlowItem.setActiveEditor(editor);
showFlowImplElements.setActiveEditor(editor);
editFlowItem.setActiveEditor(editor);
deleteFlowItem.setActiveEditor(editor);
}
}