/*******************************************************************************
* 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.model.ui.views.navigator;
import org.jboss.tools.common.model.ui.action.ModelContributionManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
//import org.eclipse.jface.util.IPropertyChangeListener;
//import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.actions.ActionContext;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.AddBookmarkAction;
import org.eclipse.ui.actions.AddTaskAction;
import org.eclipse.ui.actions.WorkingSetFilterActionGroup;
import org.eclipse.ui.dialogs.PropertyDialogAction;
import org.eclipse.ui.ide.IDEActionFactory;
import org.eclipse.ui.views.navigator.*;
public class ModelNavigatorActionGroup extends ResourceNavigatorActionGroup {
protected AddBookmarkAction addBookmarkAction;
protected AddTaskAction addTaskAction;
protected PropertyDialogAction propertyDialogAction;
protected CollapseAllAction collapseAllAction;
protected ToggleLinkingAction toggleLinkingAction;
protected OpenActionGroup openGroup;
protected NRefactorActionGroup refactorGroup;
protected WorkingSetFilterActionGroup workingSetGroup;
protected WorkspaceActionGroup workspaceGroup;
protected ModelContributionManager mcm;
protected boolean activateModelContribution = false;
/**
* Constructs the main action group.
*/
public ModelNavigatorActionGroup(IResourceNavigator navigator) {
super(navigator);
makeSubGroups();
}
/**
* Makes the actions contained directly in this action group.
*/
protected void makeActions() {
Shell shell = navigator.getSite().getShell();
if(activateModelContribution) {
mcm = new ModelContributionManager(shell, null);
}
addBookmarkAction = new AddBookmarkAction(shell);
addTaskAction = new AddTaskAction(shell);
propertyDialogAction =
new PropertyDialogAction(navigator.getSite(), navigator.getViewer());
collapseAllAction = new CollapseAllAction(navigator, "Collapse All");
collapseAllAction.setToolTipText("Collapse All");
collapseAllAction.setImageDescriptor(getImageDescriptor("elcl16/collapseall.gif")); //$NON-NLS-1$
toggleLinkingAction = new ToggleLinkingAction(
navigator, "Link with Editor");
toggleLinkingAction.setToolTipText("Link with Editor");
toggleLinkingAction.setImageDescriptor(getImageDescriptor("elcl16/synced.gif"));//$NON-NLS-1$
}
/**
* Makes the sub action groups.
*/
protected void makeSubGroups() {
openGroup = new OpenActionGroup(navigator);
refactorGroup = new NRefactorActionGroup(navigator);
workspaceGroup = new WorkspaceActionGroup(navigator);
}
/**
* Extends the superclass implementation to set the context in the subgroups.
*/
public void setContext(ActionContext context) {
super.setContext(context);
openGroup.setContext(context);
refactorGroup.setContext(context);
workspaceGroup.setContext(context);
if(mcm != null) mcm.setContext(context);
}
/**
* Adds the actions in this group and its subgroups to the action bars.
*/
public void fillActionBars(IActionBars actionBars) {
actionBars.setGlobalActionHandler(
ActionFactory.PROPERTIES.getId(),
propertyDialogAction);
actionBars.setGlobalActionHandler(
IDEActionFactory.BOOKMARK.getId(),
addBookmarkAction);
actionBars.setGlobalActionHandler(
IDEActionFactory.ADD_TASK.getId(),
addTaskAction);
openGroup.fillActionBars(actionBars);
refactorGroup.fillActionBars(actionBars);
workspaceGroup.fillActionBars(actionBars);
IToolBarManager toolBar = actionBars.getToolBarManager();
toolBar.add(new Separator());
toolBar.add(collapseAllAction);
toolBar.add(toggleLinkingAction);
}
/**
* Updates the actions which were added to the action bars,
* delegating to the subgroups as necessary.
*/
public void updateActionBars() {
IStructuredSelection selection =
(IStructuredSelection) getContext().getSelection();
propertyDialogAction.setEnabled(selection.size() == 1);
addBookmarkAction.selectionChanged(selection);
addTaskAction.selectionChanged(selection);
openGroup.updateActionBars();
refactorGroup.updateActionBars();
workspaceGroup.updateActionBars();
if(mcm != null) mcm.markDirty();
if(mcm != null) mcm.update(true);
}
/**
* Runs the default action (open file) by delegating the open group.
*/
public void runDefaultAction(IStructuredSelection selection) {
openGroup.runDefaultAction(selection);
}
/**
* Handles a key pressed event by invoking the appropriate action,
* delegating to the subgroups as necessary.
*/
public void handleKeyPressed(KeyEvent event) {
refactorGroup.handleKeyPressed(event);
workspaceGroup.handleKeyPressed(event);
}
/**
* Extends the superclass implementation to dispose the subgroups.
*/
public void dispose() {
openGroup.dispose();
refactorGroup.dispose();
workspaceGroup.dispose();
if(mcm != null) mcm.dispose();
super.dispose();
}
}