1 11 package org.eclipse.jface.text; 12 13 import org.eclipse.swt.custom.StyledText; 14 15 import org.eclipse.jface.text.source.ILineRange; 16 import org.eclipse.jface.text.source.LineRange; 17 18 26 public final class JFaceTextUtil { 27 28 private JFaceTextUtil() { 29 } 31 32 41 public static int computeLineHeight(StyledText textWidget, int startLine, int endLine, int lineCount) { 42 return getLinePixel(textWidget, endLine) - getLinePixel(textWidget, startLine); 43 } 44 45 56 public static int getBottomIndex(StyledText widget) { 57 int lastPixel= computeLastVisiblePixel(widget); 58 59 int bottom= widget.getLineIndex(lastPixel); 61 62 if (bottom == 0) 64 return bottom; 65 66 int pixel= widget.getLinePixel(bottom); 67 if (pixel <= 0) 69 return bottom; 70 71 int offset= widget.getOffsetAtLine(bottom); 72 int height= widget.getLineHeight(offset); 73 74 if (pixel + height - 1 > lastPixel) 76 return bottom - 1; 77 78 return bottom; 80 } 81 82 88 public static int getPartialTopIndex(StyledText widget) { 89 int top= widget.getTopIndex(); 91 int pixels= widget.getLinePixel(top); 92 93 if (pixels == -widget.getLineHeight(widget.getOffsetAtLine(top))) { 95 top++; 96 pixels= 0; 97 } 98 99 if (pixels > 0) 100 top--; 101 102 return top; 103 } 104 105 111 public static int getPartialBottomIndex(StyledText widget) { 112 int lastPixel= computeLastVisiblePixel(widget); 114 int bottom= widget.getLineIndex(lastPixel); 115 return bottom; 116 } 117 118 124 private static int computeLastVisiblePixel(StyledText widget) { 125 int caHeight= widget.getClientArea().height; 126 int lastPixel= caHeight - 1; 127 return lastPixel; 131 } 132 133 140 public static int getPartialTopIndex(ITextViewer viewer) { 141 StyledText widget= viewer.getTextWidget(); 142 int widgetTop= getPartialTopIndex(widget); 143 return widgetLine2ModelLine(viewer, widgetTop); 144 } 145 146 152 public static int getPartialBottomIndex(ITextViewer viewer) { 153 StyledText textWidget= viewer.getTextWidget(); 154 int widgetBottom= getPartialBottomIndex(textWidget); 155 return widgetLine2ModelLine(viewer, widgetBottom); 156 } 157 158 166 public static ILineRange getVisibleModelLines(ITextViewer viewer) { 167 int top= getPartialTopIndex(viewer); 168 int bottom= getPartialBottomIndex(viewer); 169 if (top == -1 || bottom == -1) 170 return null; 171 return new LineRange(top, bottom - top + 1); 172 } 173 174 184 public static int widgetLine2ModelLine(ITextViewer viewer, int widgetLine) { 185 int modelLine; 186 if (viewer instanceof ITextViewerExtension5) { 187 ITextViewerExtension5 extension= (ITextViewerExtension5) viewer; 188 modelLine= extension.widgetLine2ModelLine(widgetLine); 189 } else { 190 try { 191 IRegion r= viewer.getVisibleRegion(); 192 IDocument d= viewer.getDocument(); 193 modelLine= widgetLine + d.getLineOfOffset(r.getOffset()); 194 } catch (BadLocationException x) { 195 modelLine= widgetLine; 196 } 197 } 198 return modelLine; 199 } 200 201 211 public static int modelLineToWidgetLine(ITextViewer viewer, final int modelLine) { 212 int widgetLine; 213 if (viewer instanceof ITextViewerExtension5) { 214 ITextViewerExtension5 extension= (ITextViewerExtension5) viewer; 215 widgetLine= extension.modelLine2WidgetLine(modelLine); 216 } else { 217 IRegion region= viewer.getVisibleRegion(); 218 IDocument document= viewer.getDocument(); 219 try { 220 int visibleStartLine= document.getLineOfOffset(region.getOffset()); 221 int visibleEndLine= document.getLineOfOffset(region.getOffset() + region.getLength()); 222 if (modelLine < visibleStartLine || modelLine > visibleEndLine) 223 widgetLine= -1; 224 else 225 widgetLine= modelLine - visibleStartLine; 226 } catch (BadLocationException x) { 227 widgetLine= -1; 229 } 230 } 231 return widgetLine; 232 } 233 234 235 242 public static int getHiddenTopLinePixels(StyledText textWidget) { 243 int top= getPartialTopIndex(textWidget); 244 return -textWidget.getLinePixel(top); 245 } 246 247 250 public static int getLinePixel(StyledText textWidget, int line) { 251 return textWidget.getLinePixel(line); 252 } 253 254 257 public static int getLineIndex(StyledText textWidget, int y) { 258 int lineIndex= textWidget.getLineIndex(y); 259 return lineIndex; 260 } 261 262 270 public static boolean isShowingEntireContents(StyledText widget) { 271 if (widget.getTopPixel() != 0) return false; 273 274 int lastVisiblePixel= computeLastVisiblePixel(widget); 275 int lastPossiblePixel= widget.getLinePixel(widget.getLineCount()); 276 return lastPossiblePixel <= lastVisiblePixel; 277 } 278 279 } 280
| Popular Tags
|