/**
 * 
 */
package org.eclipse.epf.diagramming.base;

import org.eclipse.epf.diagramming.base.actions.ActionIds;
import org.eclipse.epf.diagramming.base.actions.OrientationAction;
import org.eclipse.gmf.runtime.common.ui.services.action.contributionitem.AbstractContributionItemProvider;
import org.eclipse.gmf.runtime.common.ui.util.IWorkbenchPartDescriptor;
import org.eclipse.jface.action.IAction;
import org.eclipse.ui.IWorkbenchPage;

/**
 * @author Shashidhar Kannoori
 *
 */
public class EpfDiagramActionProvider extends AbstractContributionItemProvider {

	/**
	 * 
	 */
	public EpfDiagramActionProvider() {
		// TODO Auto-generated constructor stub
	}
	
	/*
	 * (non-Javadoc)
	 * @see org.eclipse.gmf.runtime.common.ui.services.action.contributionitem.AbstractContributionItemProvider#createAction(java.lang.String, org.eclipse.gmf.runtime.common.ui.util.IWorkbenchPartDescriptor)
	 * @modified
	 */
	protected IAction createAction(String actionId, IWorkbenchPartDescriptor partDescriptor) {
		
		IWorkbenchPage page = partDescriptor.getPartPage();
		if(actionId.equals(ActionIds.ACTION_V_ORIENTATION)){
			OrientationAction action = new OrientationAction(page,
					actionId);
			action.setId(actionId);
			action.setText("vOrientation");
			action.setToolTipText("vOrientation");
		}
		return super.createAction(actionId, partDescriptor);
	}
}
