1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

put error ticks in outline view

This commit is contained in:
David Inglis 2004-09-10 14:38:50 +00:00
parent f2b0d8b69c
commit bae54f4e47
2 changed files with 18 additions and 6 deletions

View file

@ -16,6 +16,7 @@ import org.eclipse.cdt.internal.ui.actions.AbstractToggleLinkingAction;
import org.eclipse.cdt.internal.ui.actions.ActionMessages; import org.eclipse.cdt.internal.ui.actions.ActionMessages;
import org.eclipse.cdt.internal.ui.search.actions.SelectionSearchGroup; import org.eclipse.cdt.internal.ui.search.actions.SelectionSearchGroup;
import org.eclipse.cdt.internal.ui.util.ProblemTreeViewer; import org.eclipse.cdt.internal.ui.util.ProblemTreeViewer;
import org.eclipse.cdt.internal.ui.viewsupport.DecoratingCLabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.StandardCElementLabelProvider; import org.eclipse.cdt.internal.ui.viewsupport.StandardCElementLabelProvider;
import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.PreferenceConstants; import org.eclipse.cdt.ui.PreferenceConstants;
@ -231,7 +232,7 @@ public class CContentOutlinePage extends Page implements IContentOutlinePage, IS
//treeViewer.setContentProvider(new CElementContentProvider(true, true)); //treeViewer.setContentProvider(new CElementContentProvider(true, true));
treeViewer.setContentProvider(new CContentOutlinerProvider(this)); treeViewer.setContentProvider(new CContentOutlinerProvider(this));
treeViewer.setLabelProvider(new StandardCElementLabelProvider()); treeViewer.setLabelProvider(new DecoratingCLabelProvider(new StandardCElementLabelProvider(), true));
treeViewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS); treeViewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
treeViewer.addSelectionChangedListener(this); treeViewer.addSelectionChangedListener(this);

View file

@ -41,6 +41,7 @@ import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.ui.part.FileEditorInput; import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.MarkerAnnotation; import org.eclipse.ui.texteditor.MarkerAnnotation;
import org.eclipse.ui.texteditor.MarkerUtilities;
/** /**
* LabelDecorator that decorates an element's image with error and warning overlays that * LabelDecorator that decorates an element's image with error and warning overlays that
@ -168,7 +169,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe
case ICElement.C_METHOD: case ICElement.C_METHOD:
ITranslationUnit tu= ((ISourceReference)element).getTranslationUnit(); ITranslationUnit tu= ((ISourceReference)element).getTranslationUnit();
if (tu != null && tu.exists()) { if (tu != null && tu.exists()) {
return getErrorTicksFromMarkers(tu.getResource(), IResource.DEPTH_ONE, tu); return getErrorTicksFromMarkers(tu.getResource(), IResource.DEPTH_ONE, (ISourceReference)element);
} }
default: default:
} }
@ -216,7 +217,14 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe
private boolean isMarkerInRange(IMarker marker, ISourceReference sourceElement) throws CoreException { private boolean isMarkerInRange(IMarker marker, ISourceReference sourceElement) throws CoreException {
if (marker.isSubtypeOf(IMarker.TEXT)) { if (marker.isSubtypeOf(IMarker.TEXT)) {
int pos= marker.getAttribute(IMarker.CHAR_START, -1); int pos= marker.getAttribute(IMarker.CHAR_START, -1);
return isInside(pos, sourceElement); if (pos == -1) {
int line= MarkerUtilities.getLineNumber(marker);
if (line >= 0) {
return isInside( -1, line, sourceElement);
}
}
return isInside(pos, -1, sourceElement);
} }
return false; return false;
} }
@ -249,7 +257,7 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe
IMarker marker= ((MarkerAnnotation) annot).getMarker(); IMarker marker= ((MarkerAnnotation) annot).getMarker();
if (marker.exists() && marker.isSubtypeOf(IMarker.PROBLEM)) { if (marker.exists() && marker.isSubtypeOf(IMarker.PROBLEM)) {
Position pos= model.getPosition(annot); Position pos= model.getPosition(annot);
if (pos != null && (sourceElement == null || isInside(pos.getOffset(), sourceElement))) { if (pos != null && (sourceElement == null || isInside(pos.getOffset(), -1, sourceElement))) {
return marker; return marker;
} }
} }
@ -266,11 +274,14 @@ public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabe
* *
* @since 2.1 * @since 2.1
*/ */
protected boolean isInside(int pos, ISourceReference sourceElement) throws CoreException { protected boolean isInside(int offSet, int line, ISourceReference sourceElement) throws CoreException {
ISourceRange range= sourceElement.getSourceRange(); ISourceRange range= sourceElement.getSourceRange();
if (range != null) { if (range != null) {
if (offSet ==-1) {
return (line >= range.getStartLine() && line <= range.getEndLine());
}
int rangeOffset= range.getStartPos(); int rangeOffset= range.getStartPos();
return (rangeOffset <= pos && rangeOffset + range.getLength() > pos); return (rangeOffset <= offSet && rangeOffset + range.getLength() > offSet);
} }
return false; return false;
} }