/*******************************************************************************
 * Copyright (c) 2004-2008 Istvan Rath and Daniel Varro
 * 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:
 *    Istvan Rath - initial API and implementation
 *******************************************************************************/

 package org.eclipse.viatra2.treeeditor.menu;


import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.ui.part.EditorActionBarContributor;
import org.eclipse.viatra2.treeeditor.actions.ViatraDeleteAction;
import org.eclipse.viatra2.treeeditor.actions.ViatraRedoAction;
import org.eclipse.viatra2.treeeditor.actions.ViatraUndoAction;

public class ViatraTreeEditorActionBarContributor extends EditorActionBarContributor {

	private ViatraDeleteAction iDeleteAction;
	private ViatraUndoAction iUndoAction;
	private ViatraRedoAction iRedoAction;
	
	public ViatraDeleteAction getDeleteAction() {
		return iDeleteAction;
	}

	public ViatraRedoAction getRedoAction() {
		return iRedoAction;
	}

	public ViatraUndoAction getUndoAction() {
		return iUndoAction;
	}
	
	public ViatraTreeEditorActionBarContributor() {
		super();
		iDeleteAction = new ViatraDeleteAction();
		iUndoAction = new ViatraUndoAction();
		iRedoAction = new ViatraRedoAction();
	}
	
	@Override
	public void contributeToToolBar(IToolBarManager toolBarManager) {
		toolBarManager.add(iDeleteAction);
		toolBarManager.add(iUndoAction);
		toolBarManager.add(iRedoAction);
	}


	

}
