/******************************************************************************* * Copyright (c) 2000, 2008 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 * Markus Schorn (Wind River Systems) * Anton Leherbauer (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.ui.cview; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; 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.jface.viewers.Viewer; import org.eclipse.jface.window.IShellProvider; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IMemento; import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.actions.ActionContext; import org.eclipse.ui.actions.AddBookmarkAction; import org.eclipse.ui.actions.AddTaskAction; import org.eclipse.ui.actions.ExportResourcesAction; import org.eclipse.ui.actions.ImportResourcesAction; import org.eclipse.ui.actions.NewWizardMenu; import org.eclipse.ui.actions.WorkingSetFilterActionGroup; import org.eclipse.ui.ide.IDEActionFactory; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.ui.actions.CustomFiltersActionGroup; import org.eclipse.cdt.ui.actions.OpenViewActionGroup; import org.eclipse.cdt.ui.refactoring.actions.CRefactoringActionGroup; import org.eclipse.cdt.internal.ui.IContextMenuConstants; import org.eclipse.cdt.internal.ui.actions.SelectionConverter; import org.eclipse.cdt.internal.ui.editor.OpenIncludeAction; import org.eclipse.cdt.internal.ui.search.actions.SelectionSearchGroup; /** * The main action group for the cview. This contains a few actions and several * subgroups. */ public class MainActionGroup extends CViewActionGroup { // Actions for Menu context. AddBookmarkAction addBookmarkAction; AddTaskAction addTaskAction; ImportResourcesAction importAction; ExportResourcesAction exportAction; // CElement action OpenIncludeAction openIncludeAction; // Collapsing CollapseAllAction collapseAllAction; ToggleLinkingAction toggleLinkingAction; BuildGroup buildGroup; OpenFileGroup openFileGroup; GotoActionGroup gotoGroup; RefactorActionGroup refactorGroup; OpenProjectGroup openProjectGroup; WorkingSetFilterActionGroup workingSetGroup; CustomFiltersActionGroup fCustomFiltersActionGroup; SelectionSearchGroup selectionSearchGroup; OpenViewActionGroup openViewActionGroup; CRefactoringActionGroup crefactoringActionGroup; private NewWizardMenu newWizardMenu; public MainActionGroup(CView cview) { super(cview); } /** * Handles key events in viewer. */ @Override public void handleKeyPressed(KeyEvent event) { refactorGroup.handleKeyPressed(event); openFileGroup.handleKeyPressed(event); openProjectGroup.handleKeyPressed(event); gotoGroup.handleKeyPressed(event); buildGroup.handleKeyPressed(event); } /** * Handles key events in viewer. */ @Override public void handleKeyReleased(KeyEvent event) { refactorGroup.handleKeyReleased(event); openFileGroup.handleKeyReleased(event); openProjectGroup.handleKeyReleased(event); gotoGroup.handleKeyReleased(event); buildGroup.handleKeyReleased(event); } @Override protected void makeActions() { final Viewer viewer = getCView().getViewer(); IShellProvider shellProvider = getCView().getViewSite(); Shell shell = shellProvider.getShell(); openFileGroup = new OpenFileGroup(getCView()); openProjectGroup = new OpenProjectGroup(getCView()); gotoGroup = new GotoActionGroup(getCView()); buildGroup = new BuildGroup(getCView()); refactorGroup = new RefactorActionGroup(getCView()); newWizardMenu = new NewWizardMenu(getCView().getSite().getWorkbenchWindow()); openIncludeAction = new OpenIncludeAction(viewer); //sortByNameAction = new SortViewAction(this, false); //sortByTypeAction = new SortViewAction(this, true); IPropertyChangeListener workingSetUpdater = new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { String property = event.getProperty(); if (WorkingSetFilterActionGroup.CHANGE_WORKING_SET.equals(property)) { Object newValue = event.getNewValue(); if (newValue instanceof IWorkingSet) { getCView().setWorkingSet((IWorkingSet) newValue); } else if (newValue == null) { getCView().setWorkingSet(null); } } } }; workingSetGroup = new WorkingSetFilterActionGroup(shell, workingSetUpdater); workingSetGroup.setWorkingSet(getCView().getWorkingSet()); fCustomFiltersActionGroup= new CustomFiltersActionGroup(getCView(), getCView().getViewer()); addBookmarkAction = new AddBookmarkAction(shellProvider, true); addTaskAction = new AddTaskAction(shellProvider); // Importing/exporting. importAction = new ImportResourcesAction(getCView().getSite().getWorkbenchWindow()); exportAction = new ExportResourcesAction(getCView().getSite().getWorkbenchWindow()); collapseAllAction = new CollapseAllAction(getCView()); toggleLinkingAction = new ToggleLinkingAction(getCView()); toggleLinkingAction.setImageDescriptor(getImageDescriptor("elcl16/synced.gif"));//$NON-NLS-1$ // toggleLinkingAction.setHoverImageDescriptor(getImageDescriptor("clcl16/synced.gif"));//$NON-NLS-1$ selectionSearchGroup = new SelectionSearchGroup(getCView().getSite()); openViewActionGroup= new OpenViewActionGroup(getCView()); crefactoringActionGroup= new CRefactoringActionGroup(getCView()); } /** * Called when the context menu is about to open. Override to add your own * context dependent menu contributions. */ @Override public void fillContextMenu(IMenuManager menu) { IStructuredSelection celements = (IStructuredSelection) getCView().getViewer().getSelection(); IStructuredSelection resources = SelectionConverter.convertSelectionToResources(celements); addNewMenu(menu, resources); if (resources.isEmpty()) { menu.add(new Separator(IContextMenuConstants.GROUP_GOTO)); menu.add(new Separator(IContextMenuConstants.GROUP_OPEN)); menu.add(new Separator(IContextMenuConstants.GROUP_BUILD)); menu.add(new Separator(IContextMenuConstants.GROUP_REORGANIZE)); menu.add(new Separator("group.private1")); //$NON-NLS-1$ importAction.selectionChanged(resources); menu.add(importAction); exportAction.selectionChanged(resources); menu.add(exportAction); menu.add(new Separator("group.private2")); //$NON-NLS-1$ //Can be added once support for manually adding external files to index is established /*menu.add(new Separator()); menu.add(addToIndexAction);*/ menu.add(new Separator(IContextMenuConstants.GROUP_SEARCH)); addSearchMenu(menu, celements); menu.add(new Separator(IContextMenuConstants.GROUP_ADDITIONS)); menu.add(new Separator(IContextMenuConstants.GROUP_ADDITIONS + "-end")); //$NON-NLS-1$ menu.add(new Separator(IContextMenuConstants.GROUP_PROPERTIES)); openViewActionGroup.fillContextMenu(menu); crefactoringActionGroup.fillContextMenu(menu); if (OpenIncludeAction.canActionBeAdded(celements)) { menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, openIncludeAction); } return; } menu.add(new Separator(IContextMenuConstants.GROUP_GOTO)); gotoGroup.fillContextMenu(menu); menu.add(new Separator(IContextMenuConstants.GROUP_OPEN)); openFileGroup.fillContextMenu(menu); menu.add(new Separator(IContextMenuConstants.GROUP_BUILD)); buildGroup.fillContextMenu(menu); menu.add(new Separator(IContextMenuConstants.GROUP_REORGANIZE)); refactorGroup.fillContextMenu(menu); menu.add(new Separator("group.private1")); //$NON-NLS-1$ importAction.selectionChanged(resources); menu.add(importAction); exportAction.selectionChanged(resources); menu.add(exportAction); menu.add(new Separator("group.private2")); //$NON-NLS-1$ openProjectGroup.fillContextMenu(menu); addBookMarkMenu(menu, resources); menu.add(new Separator(IContextMenuConstants.GROUP_ADDITIONS)); menu.add(new Separator(IContextMenuConstants.GROUP_ADDITIONS + "-end")); //$NON-NLS-1$ menu.add(new Separator(IContextMenuConstants.GROUP_PROPERTIES)); openViewActionGroup.fillContextMenu(menu); crefactoringActionGroup.fillContextMenu(menu); } /** * Extends the superclass implementation to set the context in the * subgroups. */ @Override public void setContext(ActionContext context) { super.setContext(context); gotoGroup.setContext(context); openFileGroup.setContext(context); openProjectGroup.setContext(context); refactorGroup.setContext(context); buildGroup.setContext(context); openViewActionGroup.setContext(context); crefactoringActionGroup.setContext(context); //sortAndFilterGroup.setContext(context); //workspaceGroup.setContext(context); } void addNewMenu(IMenuManager menu, IStructuredSelection selection) { MenuManager newMenu = new MenuManager(CViewMessages.NewWizardsActionGroup_new); menu.add(newMenu); newMenu.add(newWizardMenu); } void addBookMarkMenu(IMenuManager menu, IStructuredSelection selection) { Object obj = selection.getFirstElement(); if (obj instanceof IAdaptable) { IAdaptable element = (IAdaptable) obj; IResource resource = (IResource) element.getAdapter(IResource.class); if (resource instanceof IFile) { addBookmarkAction.selectionChanged(selection); menu.add(addBookmarkAction); } } } void addSearchMenu(IMenuManager menu, IStructuredSelection selection) { IAdaptable element = (IAdaptable) selection.getFirstElement(); if (element instanceof ITranslationUnit || element instanceof ICProject) { return; } if (SelectionSearchGroup.canActionBeAdded(selection)){ selectionSearchGroup.fillContextMenu(menu); } } @Override public void runDefaultAction(IStructuredSelection selection) { openFileGroup.runDefaultAction(selection); openProjectGroup.runDefaultAction(selection); gotoGroup.runDefaultAction(selection); buildGroup.runDefaultAction(selection); refactorGroup.runDefaultAction(selection); //workingSetGroup.runDefaultAction(selection); } /** * Updates all actions with the given selection. Necessary when popping up * a menu, because some of the enablement criteria may have changed, even * if the selection in the viewer hasn't. E.g. A project was opened or * closed. */ @Override public void updateActionBars() { IStructuredSelection selection = (IStructuredSelection) getContext().getSelection(); //sortByTypeAction.selectionChanged(selection); //sortByNameAction.selectionChanged(selection); addBookmarkAction.selectionChanged(selection); addTaskAction.selectionChanged(selection); openFileGroup.updateActionBars(); openProjectGroup.updateActionBars(); gotoGroup.updateActionBars(); buildGroup.updateActionBars(); refactorGroup.updateActionBars(); workingSetGroup.updateActionBars(); fCustomFiltersActionGroup.updateActionBars(); openViewActionGroup.updateActionBars(); crefactoringActionGroup.updateActionBars(); } @Override public void fillActionBars(IActionBars actionBars) { actionBars.setGlobalActionHandler(IDEActionFactory.BOOKMARK.getId(), addBookmarkAction); actionBars.setGlobalActionHandler(IDEActionFactory.ADD_TASK.getId(), addTaskAction); workingSetGroup.fillActionBars(actionBars); fCustomFiltersActionGroup.fillActionBars(actionBars); gotoGroup.fillActionBars(actionBars); refactorGroup.fillActionBars(actionBars); openFileGroup.fillActionBars(actionBars); openProjectGroup.fillActionBars(actionBars); buildGroup.fillActionBars(actionBars); openViewActionGroup.fillActionBars(actionBars); crefactoringActionGroup.fillActionBars(actionBars); IToolBarManager toolBar = actionBars.getToolBarManager(); toolBar.add(new Separator()); toolBar.add(collapseAllAction); toolBar.add(toggleLinkingAction); IMenuManager menu = actionBars.getMenuManager(); //menu.add (clibFilterAction); //menu.add(fCustomFiltersActionGroup); menu.add(toggleLinkingAction); } //---- Persistent state ----------------------------------------------------------------------- @Override public void restoreFilterAndSorterState(IMemento memento) { //fWorkingSetFilterActionGroup.restoreState(memento); fCustomFiltersActionGroup.restoreState(memento); } @Override public void saveFilterAndSorterState(IMemento memento) { //fWorkingSetFilterActionGroup.saveState(memento); fCustomFiltersActionGroup.saveState(memento); } public CustomFiltersActionGroup getCustomFilterActionGroup() { return fCustomFiltersActionGroup; } @Override public void dispose() { importAction.dispose(); exportAction.dispose(); refactorGroup.dispose(); openFileGroup.dispose(); openProjectGroup.dispose(); gotoGroup.dispose(); buildGroup.dispose(); newWizardMenu.dispose(); openViewActionGroup.dispose(); crefactoringActionGroup.dispose(); super.dispose(); } }