blob: 4ced38d0a2ade0dcdff2372fb7ec06ace513df5c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2012 Intel Corporation.
* 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:
* Oleg Danilov, Intel - Initial API and Implementation
*
*******************************************************************************/
package org.eclipse.bpel.ui;
import org.eclipse.bpel.ui.actions.BPELCopyAction;
import org.eclipse.bpel.ui.actions.BPELCutAction;
import org.eclipse.bpel.ui.actions.BPELDeleteAction;
import org.eclipse.bpel.ui.actions.BPELPasteAction;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.jface.action.IAction;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorActionBarContributor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.part.MultiPageEditorActionBarContributor;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.ui.texteditor.ITextEditorActionConstants;
/**
* Manages the installation/deinstallation of global actions for multi-page
* editors. Responsible for the redirection of global actions to the active
* editor. Multi-page contributor replaces the contributors for the individual
* editors in the multi-page editor.
*/
public class BPELMultiPageEditorActionBarContributor extends
MultiPageEditorActionBarContributor {
private IEditorPart activeEditorPart;
private BPELEditor bpelEditor;
/**
* Creates a multi-page contributor.
*/
public BPELMultiPageEditorActionBarContributor() {
super();
}
/**
* Returns the action registered with the given text editor.
*
* @return IAction or null if editor is null.
*/
protected IAction getAction(ITextEditor editor, String actionID) {
return (editor == null ? null : editor.getAction(actionID));
}
/*
* (non-JavaDoc) Method declared in
* AbstractMultiPageEditorActionBarContributor.
*/
@Override
public void setActivePage(IEditorPart part) {
if (activeEditorPart == part)
return;
activeEditorPart = part;
IActionBars actionBars = getActionBars();
if (activeEditorPart != null && activeEditorPart instanceof ITextEditor) {
IActionBars siteActionBars = ((IEditorSite)activeEditorPart.getEditorSite()).getActionBars();
siteActionBars.setGlobalActionHandler(ITextEditorActionConstants.UNDO, getAction((ITextEditor)activeEditorPart, ITextEditorActionConstants.UNDO));
siteActionBars.setGlobalActionHandler(ITextEditorActionConstants.REDO, getAction((ITextEditor)activeEditorPart, ITextEditorActionConstants.REDO));
siteActionBars.updateActionBars();
} else {
if (part instanceof BPELEditor) {
bpelEditor = (BPELEditor) part;
}
if (bpelEditor != null) {
Object adapter = bpelEditor.getAdapter(ActionRegistry.class);
if (adapter instanceof ActionRegistry) {
ActionRegistry registry = (ActionRegistry) adapter;
// COPY
IAction action = registry.getAction(BPELCopyAction.ID);
actionBars.setGlobalActionHandler(ActionFactory.COPY
.getId(), action);
// CUT
action = registry.getAction(BPELCutAction.ID);
actionBars.setGlobalActionHandler(
ActionFactory.CUT.getId(), action);
// PASTE
action = registry.getAction(BPELPasteAction.ID);
actionBars.setGlobalActionHandler(ActionFactory.PASTE
.getId(), action);
// DELETE
action = registry.getAction(BPELDeleteAction.ID);
actionBars.setGlobalActionHandler(ActionFactory.DELETE
.getId(), action);
}
IWorkbenchPartSite site = bpelEditor.getSite();
if (site instanceof IEditorSite)
{
ITextEditor textEditor = bpelEditor.getMultipageEditor().getTextEditor();
IActionBars siteActionBars = ((IEditorSite) site).getActionBars();
siteActionBars.setGlobalActionHandler(ITextEditorActionConstants.UNDO, getAction(textEditor, ITextEditorActionConstants.UNDO));
siteActionBars.setGlobalActionHandler(ITextEditorActionConstants.REDO, getAction(textEditor, ITextEditorActionConstants.REDO));
siteActionBars.updateActionBars();
}
}
}
if (actionBars != null) {
// update menu bar and tool bar
actionBars.updateActionBars();
}
}
}