Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlain Magloire2003-09-07 19:44:27 +0000
committerAlain Magloire2003-09-07 19:44:27 +0000
commit11fbc47cb25c5a1a0974174aecd5b822e71c6246 (patch)
tree1a3b7d9389ea293dc52c865a43c4bd2755167c36 /build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/MakefileContentOutlinePage.java
parent91470138363766275dccba150a3ff338643d5291 (diff)
downloadorg.eclipse.cdt-11fbc47cb25c5a1a0974174aecd5b822e71c6246.tar.gz
org.eclipse.cdt-11fbc47cb25c5a1a0974174aecd5b822e71c6246.tar.xz
org.eclipse.cdt-11fbc47cb25c5a1a0974174aecd5b822e71c6246.zip
Rename to Makefile*.java instead of Make*.java
Files are for managing Makefile related things.
Diffstat (limited to 'build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/MakefileContentOutlinePage.java')
-rw-r--r--build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/MakefileContentOutlinePage.java252
1 files changed, 252 insertions, 0 deletions
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
new file mode 100644
index 00000000000..46e959cb5ae
--- /dev/null
+++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/editor/MakefileContentOutlinePage.java
@@ -0,0 +1,252 @@
+/**********************************************************************
+ * Copyright (c) 2002,2003 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.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.cdt.make.core.makefile.IInferenceRule;
+import org.eclipse.cdt.make.core.makefile.IMacroDefinition;
+import org.eclipse.cdt.make.core.makefile.IMakefile;
+import org.eclipse.cdt.make.core.makefile.IRule;
+import org.eclipse.cdt.make.core.makefile.IStatement;
+import org.eclipse.cdt.make.core.makefile.ITargetRule;
+import org.eclipse.cdt.make.internal.core.makefile.posix.PosixMakefile;
+import org.eclipse.cdt.make.internal.ui.MakeUIImages;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+/**
+ * MakefileContentOutlinePage
+ */
+public class MakefileContentOutlinePage extends ContentOutlinePage implements IContentOutlinePage {
+
+ private class MakefileContentProvider implements ITreeContentProvider {
+
+ protected boolean showMacroDefinition = true;
+ protected boolean showTargetRule = true;
+ protected boolean showInferenceRule = true;
+
+ protected IMakefile makefile;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+ */
+ public Object[] getChildren(Object element) {
+ if (element == fInput) {
+ return getElements(element);
+ }
+ return new Object[0];
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+ */
+ public Object getParent(Object element) {
+ if (element instanceof IStatement)
+ return fInput;
+ return fInput;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+ */
+ public boolean hasChildren(Object element) {
+ return element == fInput;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
+ public Object[] getElements(Object inputElement) {
+ List list = new ArrayList();
+ if (showMacroDefinition) {
+ list.addAll(Arrays.asList(makefile.getMacroDefinitions()));
+ }
+ if (showInferenceRule) {
+ list.addAll(Arrays.asList(makefile.getInferenceRules()));
+ }
+ if (showTargetRule) {
+ list.addAll(Arrays.asList(makefile.getTargetRules()));
+ }
+ return list.toArray();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ public void dispose() {
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+ */
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ if (oldInput != null) {
+ //IDocument document= fDocumentProvider.getDocument(oldInput);
+ //if (document != null) {
+ //}
+ }
+
+ if (newInput != null) {
+ IDocument document = fDocumentProvider.getDocument(newInput);
+ if (document != null) {
+ try {
+ String content = document.get();
+ Reader r = new StringReader(content);
+ makefile = new PosixMakefile(r);
+ } catch (IOException e) {
+ }
+ }
+ }
+ }
+
+ }
+
+ private class MakefileLabelProvider extends LabelProvider implements ILabelProvider {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+ */
+ public Image getImage(Object element) {
+ if (element instanceof ITargetRule) {
+ return MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_TARGET_RULE);
+ } else if (element instanceof IInferenceRule) {
+ return MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_INFERENCE_RULE);
+ } else if (element instanceof IMacroDefinition) {
+ return MakeUIImages.getImage(MakeUIImages.IMG_OBJS_MAKEFILE_MACRO);
+ }
+ return super.getImage(element);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+ */
+ public String getText(Object element) {
+ if (element instanceof IRule) {
+ return ((IRule) element).getTarget().toString();
+ } else if (element instanceof IMacroDefinition) {
+ return ((IMacroDefinition) element).getName();
+ }
+ return super.getText(element);
+ }
+
+ }
+
+ protected IDocumentProvider fDocumentProvider;
+ protected MakefileEditor fEditor;
+ protected Object fInput;
+
+ public MakefileContentOutlinePage(IDocumentProvider provider, MakefileEditor editor) {
+ super();
+ fDocumentProvider = provider;
+ fEditor = editor;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.part.IPage#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+ TreeViewer viewer = getTreeViewer();
+
+ /*
+ * We might want to implement our own content provider.
+ * This content provider should be able to work on a dom like tree
+ * structure that resembles the file contents.
+ */
+ viewer.setContentProvider(new MakefileContentProvider());
+
+ /*
+ * We probably also need our own label provider.
+ */
+ viewer.setLabelProvider(new MakefileLabelProvider());
+
+ if (fInput != null) {
+ viewer.setInput(fInput);
+ }
+ }
+
+ /**
+ * Sets the input of the outline page
+ */
+ public void setInput(Object input) {
+ fInput = input;
+ update();
+ }
+
+ /* (non-Javadoc)
+ * Method declared on ContentOutlinePage
+ */
+ public void selectionChanged(SelectionChangedEvent event) {
+
+ super.selectionChanged(event);
+
+ ISelection selection = event.getSelection();
+ if (selection.isEmpty()) {
+ fEditor.resetHighlightRange();
+ } else if (selection instanceof IStructuredSelection){
+ Object element = ((IStructuredSelection) selection).getFirstElement();
+ if (element instanceof IStatement) {
+ IStatement statement = (IStatement)element;
+ int startLine = statement.getStartLine() - 1;
+ int endLine = statement.getEndLine() - 1;
+ try {
+ IDocument doc = fEditor.getDocumentProvider().getDocument(fInput);
+ int start = doc.getLineOffset(startLine);
+ int len = doc.getLineLength(endLine) - 1;
+ int length = (doc.getLineOffset(endLine) + len) - start;
+ fEditor.setHighlightRange(start, length, true);
+ } catch (IllegalArgumentException x) {
+ fEditor.resetHighlightRange();
+ } catch (BadLocationException e) {
+ fEditor.resetHighlightRange();
+ }
+ }
+ }
+ }
+
+ /**
+ * Updates the outline page.
+ */
+ public void update() {
+ TreeViewer viewer = getTreeViewer();
+
+ if (viewer != null) {
+ Control control = viewer.getControl();
+ if (control != null && !control.isDisposed()) {
+ control.setRedraw(false);
+ viewer.setInput(fInput);
+ viewer.expandAll();
+ control.setRedraw(true);
+ }
+ }
+ }
+
+}

Back to the top