blob: ec6abed2597b0e1cdebb1c03aa57af7bae6665cc [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
****************************************************************************/
package org.eclipse.gmf.runtime.common.ui.action.ide.actions.global;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.gmf.runtime.common.ui.action.actions.global.GlobalActionManager;
import org.eclipse.gmf.runtime.common.ui.action.global.GlobalAction;
import org.eclipse.gmf.runtime.common.ui.action.ide.global.IDEGlobalActionId;
import org.eclipse.gmf.runtime.common.ui.util.IPartSelector;
/**
* This class subclasses GlobalActionManager and includes support for IDE global
* actions, which include the bookmark action, the open project action, and the
* close project action.
*
* @author wdiu, Wayne Diu
*/
public class IDEGlobalActionManager extends GlobalActionManager {
/**
* Static list of action ID strings
*/
private static final List actionIdStrings = new ArrayList();
static {
actionIdStrings.add(IDEGlobalActionId.BOOKMARK);
actionIdStrings.add(IDEGlobalActionId.OPEN_PROJECT);
actionIdStrings.add(IDEGlobalActionId.CLOSE_PROJECT);
}
/**
* Create the singleton.
*/
private static IDEGlobalActionManager instance = new IDEGlobalActionManager();
/**
* Create the singleton.
*/
private static GlobalActionManager globalActionManager = GlobalActionManager.getInstance();
/**
* Return the singleton.
*/
public static GlobalActionManager getInstance() {
return instance;
}
/**
* Constructor for IDEGlobalActionManager. Adds several action ids for
* ide actions.
*/
private IDEGlobalActionManager() {
Iterator it = actionIdStrings.iterator();
while (it.hasNext()) {
String id = (String) it.next();
addActionId(id);
}
}
/**
* Creates a GlobalAction.
*
* @param page The workbench page
* @param id The action id
*
* @return GlobalAction
*/
public GlobalAction createActionHandler(IWorkbenchPage page, String id) {
GlobalAction action = null;
if (id.equals(IDEGlobalActionId.BOOKMARK))
action = new GlobalBookmarkAction(page);
else
action = globalActionManager.createActionHandler(page, id);
// this initialization should be moved to the client to call
if (action != null)
action.init();
return action;
}
/**
* Creates a GlobalAction.
*
* @param part The workbench part
* @param id The action id
*
* @return GlobalAction
*/
public GlobalAction createActionHandler(final IWorkbenchPart part, String id) {
GlobalAction action = null;
if (id.equals(IDEGlobalActionId.BOOKMARK))
action = new GlobalBookmarkAction(part);
else if (id.equals(IDEGlobalActionId.OPEN_PROJECT))
action = new GlobalOpenProjectAction(part);
else if (id.equals(IDEGlobalActionId.CLOSE_PROJECT))
action = new GlobalCloseProjectAction(part);
else
action = globalActionManager.createActionHandler(part, id);
if (action != null) {
// this initialization should be moved to the client to call
action.init();
// the action will only refresh on selection changes in the specified part
action.setPartSelector(new IPartSelector() {
public boolean selects(IWorkbenchPart p) {
return part == p;
}
});
}
return action;
}
/* (non-Javadoc)
* @see org.eclipse.gmf.runtime.common.ui.action.internal.actions.global.GlobalActionManager#createGlobalActions(org.eclipse.ui.IWorkbenchPart, java.lang.String[])
*/
public GlobalAction[] createGlobalActions(IWorkbenchPart part,
String[] actionIds) {
//superclass will handle the ids from actionIdStrings
//rest are delegated to global action manager
List forSuper = new ArrayList(), forGlobalActionManager = new ArrayList();
for (int i = 0; i < actionIds.length; i++) {
if (actionIdStrings.contains(actionIds[i])) {
forSuper.add(actionIds[i]);
}
else {
forGlobalActionManager.add(actionIds[i]);
}
}
String[] superArray = new String[forSuper.size()], globalActionManagerArray = new String[forGlobalActionManager.size()];
forSuper.toArray(superArray);
forGlobalActionManager.toArray(globalActionManagerArray);
GlobalAction[] actions1 = globalActionManager.createGlobalActions(part, globalActionManagerArray);
GlobalAction[] actions2 = new GlobalAction[0];
if (superArray.length > 0) {
actions2 = super.createGlobalActions(part, superArray);
}
GlobalAction[] allActions = new GlobalAction[actions1.length + actions2.length];
System.arraycopy(actions1, 0, allActions, 0, actions1.length);
System.arraycopy(actions2, 0, allActions, actions1.length, actions2.length);
return allActions;
}
/* (non-Javadoc)
* @see org.eclipse.gmf.runtime.common.ui.action.internal.actions.global.GlobalActionManager#createGlobalActions(org.eclipse.ui.IWorkbenchPart)
*/
public GlobalAction[] createGlobalActions(IWorkbenchPart part) {
GlobalAction[] actions1 = globalActionManager.createGlobalActions(part);
GlobalAction[] actions2 = super.createGlobalActions(part);
GlobalAction[] allActions = new GlobalAction[actions1.length + actions2.length];
System.arraycopy(actions1, 0, allActions, 0, actions1.length);
System.arraycopy(actions2, 0, allActions, actions1.length, actions2.length);
return allActions;
}
/* (non-Javadoc)
* @see org.eclipse.gmf.runtime.common.ui.action.internal.actions.global.GlobalActionManager#getGlobalAction(org.eclipse.ui.IWorkbenchPart, java.lang.String)
*/
public GlobalAction getGlobalAction(IWorkbenchPart part, String actionId) {
GlobalAction action = super.getGlobalAction(part, actionId);
return action != null ? action : globalActionManager.getGlobalActionHandler(part, actionId);
}
/* (non-Javadoc)
* @see org.eclipse.gmf.runtime.common.ui.action.internal.actions.global.GlobalActionManager#getGlobalActionHandler(org.eclipse.ui.IWorkbenchPart, java.lang.String)
*/
public GlobalAction getGlobalActionHandler(IWorkbenchPart part,
String globalActionId) {
GlobalAction action = super.getGlobalActionHandler(part, globalActionId);
return action != null ? action : globalActionManager.getGlobalActionHandler(part, globalActionId);
}
/* (non-Javadoc)
* @see org.eclipse.gmf.runtime.common.ui.action.internal.actions.global.GlobalActionManager#refreshGlobalActions(org.eclipse.ui.IWorkbenchPart)
*/
public void refreshGlobalActions(IWorkbenchPart part) {
globalActionManager.refreshGlobalActions(part);
super.refreshGlobalActions(part);
}
/* (non-Javadoc)
* @see org.eclipse.gmf.runtime.common.ui.action.internal.actions.global.GlobalActionManager#setGlobalActionHandlers(org.eclipse.ui.IActionBars, org.eclipse.ui.IWorkbenchPart)
*/
public void setGlobalActionHandlers(IActionBars bar, IWorkbenchPart part) {
globalActionManager.setGlobalActionHandlers(bar, part);
super.setGlobalActionHandlers(bar, part);
}
/* (non-Javadoc)
* @see org.eclipse.gmf.runtime.common.ui.action.internal.actions.global.GlobalActionManager#unSetGlobalActionHandlers(org.eclipse.ui.IActionBars, org.eclipse.ui.IWorkbenchPart)
*/
public void unSetGlobalActionHandlers(IActionBars bar, IWorkbenchPart part) {
globalActionManager.unSetGlobalActionHandlers(bar, part);
super.unSetGlobalActionHandlers(bar, part);
}
}