/** * Adjusts the highlight range so that at least the specified range * is highlighted. * <p> * Subclasses may re-implement this method.</p> * * @param offset the offset of the range which at least should be highlighted * @param length the length of the range which at least should be highlighted */ protected void adjustHighlightRange(int offset, int length) { if (fSourceViewer == null) return; if (fSourceViewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5) fSourceViewer; extension.exposeModelRange(new Region(offset, length)); } else if (!isVisible(fSourceViewer, offset, length)) { fSourceViewer.resetVisibleRegion(); } }
/** * Returns the offset of the given source viewer's text widget that corresponds * to the given model offset or <code>-1</code> if there is no such offset. * * @param viewer the source viewer * @param modelOffset the model offset * @return the corresponding offset in the source viewer's text widget or <code>-1</code> * @since 3.0 */ protected final static int modelOffset2WidgetOffset(ISourceViewer viewer, int modelOffset) { if (viewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5) viewer; return extension.modelOffset2WidgetOffset(modelOffset); } return modelOffset - viewer.getVisibleRegion().getOffset(); }
private /*static*/ final boolean isVisible(ITextViewer viewer, int offset, int length) { if (viewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5) viewer; IRegion overlap= extension.modelRange2WidgetRange(new Region(offset, length)); return overlap != null; } return viewer.overlapsWithVisibleRegion(offset, length); }
/** * Check if the given widget line is a folded line. * * @param widgetLine the widget line number * @return <code>true</code> if the line is folded */ private boolean isFoldedLine(int widgetLine) { if (fTextViewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5)fTextViewer; int modelLine= extension.widgetLine2ModelLine(widgetLine); int widgetLine2= extension.modelLine2WidgetLine(modelLine + 1); return widgetLine2 == -1; } return false; }
/** * Returns the offset of the given source viewer's document that corresponds * to the given widget offset or <code>-1</code> if there is no such offset. * * @param viewer the source viewer * @param widgetOffset the widget offset * @return the corresponding offset in the source viewer's document or <code>-1</code> * @since 2.1 */ protected final static int widgetOffset2ModelOffset(ISourceViewer viewer, int widgetOffset) { if (viewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5) viewer; return extension.widgetOffset2ModelOffset(widgetOffset); } return widgetOffset + viewer.getVisibleRegion().getOffset(); }
/** * Returns the minimal region of the given source viewer's document that completely * comprises everything that is visible in the viewer's widget. * * @param viewer the viewer go return the coverage for * @return the minimal region of the source viewer's document comprising the contents of the viewer's widget * @since 2.1 */ protected static final IRegion getCoverage(ISourceViewer viewer) { if (viewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5) viewer; return extension.getModelCoverage(); } return viewer.getVisibleRegion(); }
offset= extension.widgetOffset2ModelOffset(widgetOffset); } else offset= widgetOffset + fCachedTextViewer.getVisibleRegion().getOffset(); if (fCachedTextViewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5)fCachedTextViewer; lineEndWidgetOffset= extension.modelOffset2WidgetOffset(lineEndOffset); } else lineEndWidgetOffset= lineEndOffset - fCachedTextViewer.getVisibleRegion().getOffset();
/** * Returns the document relative offset from the text widget relative point * * @param document the document * @param textWidget the text widget * @param point the point for which to get the offset * @return the offset * @throws BadLocationException if the document is accessed with an invalid line */ private int getOffset(IDocument document, StyledText textWidget, Point point) throws BadLocationException { int widgetCaret= fViewer.getTextWidget().getCaretOffset(); if (fViewer instanceof ITextViewerExtension5) { ITextViewerExtension5 ext= (ITextViewerExtension5) fViewer; try { return ext.widgetOffset2ModelOffset(textWidget.getOffsetAtLocation(point)); } catch (IllegalArgumentException e) { int docLineIndex= ext.widgetLine2ModelLine(textWidget.getLineIndex(point.y)); String lineDelimiter= document.getLineDelimiter(docLineIndex); int delimLength= lineDelimiter == null ? 0 : lineDelimiter.length(); return document.getLineOffset(docLineIndex) + document.getLineLength(docLineIndex) - delimLength; } } IRegion visible= fViewer.getVisibleRegion(); return widgetCaret + visible.getOffset(); } }
IRegion widgetRange= extension.modelRange2WidgetRange(new Region(offset, length)); if (widgetRange == null) return; int startLine= doc.getLineOfOffset(offset); int endLine= doc.getLineOfOffset(offset + length); if (extension.modelLine2WidgetLine(startLine) == -1 || extension.modelLine2WidgetLine(endLine) == -1) return; } catch (BadLocationException e) {
topLine= extension.widgetLine2ModelLine(widgetTopLine); coverage= extension.getModelCoverage();
private void updateEditorTopIndex() { int caretOffset = fMinimapTextWidget.getCaretOffset(); int lineAtOffset = fMinimapTextWidget.getLineAtOffset(caretOffset); int newTopIndex = lineAtOffset; if (fEditorViewer instanceof ITextViewerExtension5) { // adjust offset according folded content newTopIndex = ((ITextViewerExtension5) fEditorViewer).widgetLine2ModelLine(lineAtOffset); } fEditorViewer.setTopIndex(newTopIndex); }
/** * Returns for the widget line number for the given document line number. * * @param line the absolute line number * @return the line number relative to the viewer's visible region * @throws BadLocationException if <code>line</code> is not valid in the viewer's document */ private int getWidgetLineNumber(int line) throws BadLocationException { if (fSourceViewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5) fSourceViewer; return extension.modelLine2WidgetLine(line); } IRegion region= fSourceViewer.getVisibleRegion(); int firstLine= fSourceViewer.getDocument().getLineOfOffset(region.getOffset()); return line - firstLine; }
/** * Returns the model region that corresponds to the given region in the * viewer's text widget. * * @param offset the offset in the viewer's widget * @param length the length in the viewer's widget * @return the corresponding document region * @since 3.2 */ private IRegion getModelRange(int offset, int length) { if (offset == Integer.MAX_VALUE) return null; if (fSourceViewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5) fSourceViewer; return extension.widgetRange2ModelRange(new Region(offset, length)); } IRegion region= fSourceViewer.getVisibleRegion(); return new Region(region.getOffset() + offset, length); }
/** * Returns the offset of the given source viewer's document that corresponds * to the given widget offset or <code>-1</code> if there is no such offset. * * @param viewer the source viewer * @param widgetOffset the widget offset * @return the corresponding offset in the source viewer's document or <code>-1</code> * @since 2.1 */ protected static final int widgetOffset2ModelOffset(ISourceViewer viewer, int widgetOffset) { if (viewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5) viewer; return extension.widgetOffset2ModelOffset(widgetOffset); } return widgetOffset + viewer.getVisibleRegion().getOffset(); }
/** * Returns the minimal region of the given source viewer's document that completely * comprises everything that is visible in the viewer's widget. * * @param viewer the viewer go return the coverage for * @return the minimal region of the source viewer's document comprising the contents of the viewer's widget * @since 2.1 */ protected final static IRegion getCoverage(ISourceViewer viewer) { if (viewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5) viewer; return extension.getModelCoverage(); } return viewer.getVisibleRegion(); }
/** * Returns the document relative offset from the text widget relative point * * @param document the document * @param textWidget the text widget * @param point the point for which to get the offset * @return the offset * @throws BadLocationException if the document is accessed with an invalid line */ private int getOffset(IDocument document, StyledText textWidget, Point point) throws BadLocationException { int widgetCaret= fViewer.getTextWidget().getCaretOffset(); if (fViewer instanceof ITextViewerExtension5) { ITextViewerExtension5 ext= (ITextViewerExtension5) fViewer; int widgetOffset = textWidget.getOffsetAtPoint(point); int offset = widgetOffset != -1 ? ext.widgetOffset2ModelOffset(textWidget.getOffsetAtPoint(point)) : -1; if (offset == -1) { int docLineIndex= ext.widgetLine2ModelLine(textWidget.getLineIndex(point.y)); String lineDelimiter= document.getLineDelimiter(docLineIndex); int delimLength= lineDelimiter == null ? 0 : lineDelimiter.length(); return document.getLineOffset(docLineIndex) + document.getLineLength(docLineIndex) - delimLength; } return offset; } IRegion visible= fViewer.getVisibleRegion(); return widgetCaret + visible.getOffset(); } }
IRegion widgetRange= extension.modelRange2WidgetRange(new Region(offset, length)); if (widgetRange == null) return; int startLine= doc.getLineOfOffset(offset); int endLine= doc.getLineOfOffset(offset + length); if (extension.modelLine2WidgetLine(startLine) == -1 || extension.modelLine2WidgetLine(endLine) == -1) return; } catch (BadLocationException e) {
topLine= extension.widgetLine2ModelLine(widgetTopLine); coverage= extension.getModelCoverage();
public void run() { if (fSourceViewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5) fSourceViewer; StyledText textWidget= fSourceViewer.getTextWidget(); int topIndex= textWidget.getTopIndex(); int newTopIndex= Math.max(0, topIndex + fScrollIncrement); fSourceViewer.setTopIndex(extension.widgetLine2ModelLine(newTopIndex)); } else { int topIndex= fSourceViewer.getTopIndex(); int newTopIndex= Math.max(0, topIndex + fScrollIncrement); fSourceViewer.setTopIndex(newTopIndex); } } }
/** * Returns for the widget line number for the given document line number. * * @param line the absolute line number * @return the line number relative to the viewer's visible region * @throws BadLocationException if <code>line</code> is not valid in the viewer's document */ private int getWidgetLineNumber(int line) throws BadLocationException { if (fSourceViewer instanceof ITextViewerExtension5) { ITextViewerExtension5 extension= (ITextViewerExtension5) fSourceViewer; return extension.modelLine2WidgetLine(line); } IRegion region= fSourceViewer.getVisibleRegion(); int firstLine= fSourceViewer.getDocument().getLineOfOffset(region.getOffset()); return line - firstLine; }