From ffd096ab55cccf99fbf196625dfb6f2c7f133846 Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Tue, 1 Apr 2003 18:41:24 +0000 Subject: [PATCH] Fix from Chris Songer to deal with IBinary elements when doing the selection. --- .../cdt/internal/ui/editor/CEditor.java | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java index 8c23209880a..e8b97d35dbd 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java @@ -38,8 +38,10 @@ import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceConverter; +import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.DocumentCommand; import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.ITextOperationTarget; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.ITextViewerExtension; @@ -574,27 +576,49 @@ public class CEditor extends TextEditor implements ISelectionChangedListener { } } + /** + * Sets the current editor selection to the source range. Optionally + * sets the current editor position. + * + * @param element the source range to be shown in the editor, can be null. + * @param moveCursor if true the editor is scrolled to show the range. + */ private void setSelection(ISourceRange element, boolean moveCursor) { if (element != null) { try { + IRegion alternateRegion = null; int start= element.getStartPos(); int length= element.getLength(); + + // 0 length and start and non-zero start line says we know + // the line for some reason, but not the offset. + if (length == 0 && start == 0 && element.getStartLine() != 0) { + alternateRegion = + getDocumentProvider().getDocument(getEditorInput()).getLineInformation(element.getStartLine()); + if (alternateRegion != null) { + start = alternateRegion.getOffset(); + length = alternateRegion.getLength(); + } + } setHighlightRange(start, length, moveCursor); if (moveCursor) { start= element.getIdStartPos(); - if (start > -1) { - length= element.getIdLength(); - if (getSourceViewer() != null) { - getSourceViewer().revealRange(start, length); - getSourceViewer().setSelectedRange(start, length); - } + length= element.getIdLength(); + if (start == 0 && length == 0 && alternateRegion != null) { + start = alternateRegion.getOffset(); + length = alternateRegion.getLength(); + } + if (start > -1 && getSourceViewer() != null) { + getSourceViewer().revealRange(start, length); + getSourceViewer().setSelectedRange(start, length); } updateStatusField(CTextEditorActionConstants.STATUS_CURSOR_POS); } return; } catch (IllegalArgumentException x) { + } catch (BadLocationException e ) { } }