Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/MakeResources.properties5
-rw-r--r--build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/MakefileContentOutlinePage.java23
-rw-r--r--build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/OpenIncludeAction.java124
3 files changed, 150 insertions, 2 deletions
diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/MakeResources.properties b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/MakeResources.properties
index dded86e7897..05110ba3521 100644
--- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/MakeResources.properties
+++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/MakeResources.properties
@@ -107,6 +107,11 @@ AddBuildTargetAction.description=Add make Target
AddBuildTargetAction.tooltip= Add make Target
AddBuildTargetAction.exception.internal=Internal Error
+OpenIncludeAction.title=Open include directive
+OpenIncludeAction.description=Open an include directive
+OpenIncludeAction.tooltip= Include Directive
+OpenIncludeAction.exception.internal=Internal Error
+
TargetBuild.execption.message=Target Build Error
TargetBuild.monitor.beginTask=Building Targets...
TargetBuild.backgroundTask.name=Building Targets.
diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/MakefileContentOutlinePage.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/MakefileContentOutlinePage.java
index 30a74a143e2..d23bfcdbfef 100644
--- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/MakefileContentOutlinePage.java
+++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/MakefileContentOutlinePage.java
@@ -35,6 +35,8 @@ 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.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
@@ -219,11 +221,13 @@ public class MakefileContentOutlinePage extends ContentOutlinePage implements IC
protected MakefileEditor fEditor;
protected Object fInput;
protected AddBuildTargetAction fAddBuildTargetAction;
+ protected OpenIncludeAction fOpenIncludeAction;
public MakefileContentOutlinePage(MakefileEditor editor) {
super();
fEditor = editor;
fAddBuildTargetAction = new AddBuildTargetAction(this);
+ fOpenIncludeAction = new OpenIncludeAction(this);
}
/* (non-Javadoc)
@@ -248,7 +252,18 @@ public class MakefileContentOutlinePage extends ContentOutlinePage implements IC
Control tree = viewer.getControl();
Menu menu = manager.createContextMenu(tree);
tree.setMenu(menu);
-
+
+ viewer.addDoubleClickListener(new IDoubleClickListener() {
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent)
+ */
+ public void doubleClick(DoubleClickEvent event) {
+ if (fOpenIncludeAction != null) {
+ fOpenIncludeAction.run();
+ }
+ }
+ });
+
IPageSite site= getSite();
site.registerContextMenu(MakeUIPlugin.getPluginId() + ".outline", manager, viewer); //$NON-NLS-1$
site.setSelectionProvider(viewer);
@@ -259,8 +274,12 @@ public class MakefileContentOutlinePage extends ContentOutlinePage implements IC
* called to create the context menu of the outline
*/
protected void contextMenuAboutToShow(IMenuManager menu) {
- if (fAddBuildTargetAction.canActionBeAdded(getSelection()))
+ if (fOpenIncludeAction.canActionBeAdded(getSelection())) {
+ menu.add(fOpenIncludeAction);
+ }
+ if (fAddBuildTargetAction.canActionBeAdded(getSelection())) {
menu.add(fAddBuildTargetAction);
+ }
menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end"));//$NON-NLS-1$
}
diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/OpenIncludeAction.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/OpenIncludeAction.java
new file mode 100644
index 00000000000..d03a08c37db
--- /dev/null
+++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/OpenIncludeAction.java
@@ -0,0 +1,124 @@
+/**********************************************************************
+ * Copyright (c) 2002,2003,2004 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * QNX Software Systems - Initial API and implementation
+ ***********************************************************************/
+
+package org.eclipse.cdt.make.internal.ui.editor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.cdt.core.resources.FileStorage;
+import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
+import org.eclipse.cdt.make.core.makefile.IDirective;
+import org.eclipse.cdt.make.core.makefile.gnu.IInclude;
+import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IStorageEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.ide.IDE;
+
+/**
+ * OpenIncludeAction
+ */
+public class OpenIncludeAction extends Action {
+
+ ISelectionProvider fSelectionProvider;
+
+ /**
+ *
+ */
+ public OpenIncludeAction(ISelectionProvider provider) {
+ super(MakeUIPlugin.getResourceString("OpenIncludeAction.title")); //$NON-NLS-1$
+ setDescription(MakeUIPlugin.getResourceString("OpenIncludeAction.description")); //$NON-NLS-1$
+ setToolTipText(MakeUIPlugin.getResourceString("OpenIncludeAction.tooltip")); //$NON-NLS-1$
+ fSelectionProvider= provider;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.action.IAction#run()
+ */
+ public void run() {
+ IInclude[] includes= getIncludeDirective(fSelectionProvider.getSelection());
+ if (includes != null) {
+ for (int i = 0; i < includes.length; ++i) {
+ IDirective[] directives = includes[i].getDirectives();
+ for (int j = 0; j < directives.length; ++j) {
+ try {
+ openInEditor(directives[j]);
+ } catch (PartInitException e) {
+ }
+ }
+ }
+ }
+ }
+
+ private static IEditorPart openInEditor(IDirective directive) throws PartInitException {
+ String filename = directive.getFileName();
+ IPath path = new Path(filename);
+ IFile file = MakeUIPlugin.getWorkspace().getRoot().getFileForLocation(path);
+ if (file != null) {
+ IWorkbenchPage p = MakeUIPlugin.getActivePage();
+ if (p != null) {
+ IEditorPart editorPart = IDE.openEditor(p, file, true);
+ if (editorPart instanceof MakefileEditor) {
+ ((MakefileEditor)editorPart).setSelection(directive, true);
+ }
+ return editorPart;
+ }
+ } else {
+ // External file
+ IStorage storage = new FileStorage(path);
+ IStorageEditorInput input = new ExternalEditorInput(storage);
+ IWorkbenchPage p = MakeUIPlugin.getActivePage();
+ if (p != null) {
+ String editorID = "org.eclipse.cdt.make.editor"; //$NON-NLS-1$
+ IEditorPart editorPart = IDE.openEditor(p, input, editorID, true);
+ if (editorPart instanceof MakefileEditor) {
+ ((MakefileEditor)editorPart).setSelection(directive, true);
+ }
+ return editorPart;
+ }
+
+ }
+ return null;
+ }
+
+ IInclude[] getIncludeDirective(ISelection sel) {
+ if (!sel.isEmpty() && sel instanceof IStructuredSelection) {
+ List list= ((IStructuredSelection)sel).toList();
+ if (list.size() > 0) {
+ List includes = new ArrayList(list.size());
+ for (int i = 0; i < list.size(); ++i) {
+ Object element= list.get(i);
+ if (element instanceof IInclude) {
+ includes.add(element);
+ }
+ }
+ return (IInclude[]) includes.toArray(new IInclude[includes.size()]);
+ }
+ }
+ return null;
+ }
+
+ public boolean canActionBeAdded(ISelection selection) {
+ return getIncludeDirective(selection) != null;
+ }
+}

Back to the top