/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.gef.action;
import java.util.*;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.gef.ui.actions.*;
import org.eclipse.jface.action.*;
import org.eclipse.ui.*;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.RetargetAction;
public class ActionRegistrySupport {
private IWorkbenchPage page;
private ActionRegistry registry = new ActionRegistry();
private List<IAction> retargetActions = new ArrayList<IAction>();
private List<String> globalActionKeys = new ArrayList<String>();
public void setPage(IWorkbenchPage page) {
this.page = page;
}
public IWorkbenchPage getPage() {
return page;
}
public void addGlobalActionKey(String key) {
globalActionKeys.add(key);
}
public Iterator<String> getGlobalActionKeys() {
return globalActionKeys.iterator();
}
public ActionRegistry getActionRegistry() {
return registry;
}
public void addAction(IAction action) {
getActionRegistry().registerAction(action);
}
public void addRetargetAction(IAction action) {
addAction(action);
retargetActions.add(action);
if(action instanceof RetargetAction) {
getPage().addPartListener((RetargetAction)action);
}
addGlobalActionKey(action.getId());
}
public IAction getAction(String id) {
return getActionRegistry().getAction(id);
}
public void buildGEFActions() {
addRetargetAction(new PrintRetargetAction());
addRetargetAction(ActionFactory.DELETE.create(getPage().getWorkbenchWindow()));
addRetargetAction(ActionFactory.COPY.create(getPage().getWorkbenchWindow()));
addRetargetAction(ActionFactory.PASTE.create(getPage().getWorkbenchWindow()));
addRetargetAction(new AlignmentRetargetAction(PositionConstants.LEFT));
addRetargetAction(new AlignmentRetargetAction(PositionConstants.CENTER));
addRetargetAction(new AlignmentRetargetAction(PositionConstants.RIGHT));
addRetargetAction(new AlignmentRetargetAction(PositionConstants.TOP));
addRetargetAction(new AlignmentRetargetAction(PositionConstants.MIDDLE));
addRetargetAction(new AlignmentRetargetAction(PositionConstants.BOTTOM));
addRetargetAction(new ZoomInRetargetAction());
addRetargetAction(new ZoomOutRetargetAction());
}
public void contributeGEFToToolBar(IToolBarManager tbm) {
tbm.add(getAction(PrintRetargetAction.ACTION_ID));
tbm.add(new Separator());
tbm.add(getAction(GEFActionConstants.ALIGN_LEFT));
tbm.add(getAction(GEFActionConstants.ALIGN_CENTER));
tbm.add(getAction(GEFActionConstants.ALIGN_RIGHT));
tbm.add(new Separator());
tbm.add(getAction(GEFActionConstants.ALIGN_TOP));
tbm.add(getAction(GEFActionConstants.ALIGN_MIDDLE));
tbm.add(getAction(GEFActionConstants.ALIGN_BOTTOM));
tbm.add(new Separator());
tbm.add(new ZoomComboContributionItem(getPage()));
}
public void declareGlobalActionKeys() {
addGlobalActionKey(ActionFactory.PRINT.getId());
addGlobalActionKey(ActionFactory.COPY.getId());
addGlobalActionKey(ActionFactory.PASTE.getId());
addGlobalActionKey(ActionFactory.CUT.getId());
addGlobalActionKey(ActionFactory.DELETE.getId());
}
public void dispose() {
if(retargetActions == null) return;
for (int i = 0; i < retargetActions.size(); i++) {
RetargetAction action = (RetargetAction)retargetActions.get(i);
getPage().removePartListener(action);
}
registry.dispose();
retargetActions = null;
registry = null;
}
}