1 /* 2 * DocDisplay.java 3 * 4 * Copyright (C) 2021 by RStudio, PBC 5 * 6 * Unless you have received this program directly from RStudio pursuant 7 * to the terms of a commercial license agreement with RStudio, then 8 * this program is licensed to you under the terms of version 3 of the 9 * GNU Affero General Public License. This program is distributed WITHOUT 10 * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, 11 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the 12 * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. 13 * 14 */ 15 package org.rstudio.studio.client.workbench.views.source.editors.text; 16 17 import java.util.function.BiPredicate; 18 import org.rstudio.core.client.Rectangle; 19 import org.rstudio.core.client.command.KeySequence; 20 21 import java.util.List; 22 23 import org.rstudio.core.client.js.JsMap; 24 import org.rstudio.core.client.patch.TextChange; 25 import org.rstudio.studio.client.common.debugging.model.Breakpoint; 26 import org.rstudio.studio.client.common.filetypes.TextFileType; 27 import org.rstudio.studio.client.server.Void; 28 import org.rstudio.studio.client.workbench.model.ChangeTracker; 29 import org.rstudio.studio.client.workbench.views.console.shell.assist.CompletionManager; 30 import org.rstudio.studio.client.workbench.views.console.shell.editor.InputEditorDisplay; 31 import org.rstudio.studio.client.workbench.views.console.shell.editor.InputEditorPosition; 32 import org.rstudio.studio.client.workbench.views.console.shell.editor.InputEditorSelection; 33 import org.rstudio.studio.client.workbench.views.output.lint.model.AceAnnotation; 34 import org.rstudio.studio.client.workbench.views.output.lint.model.LintItem; 35 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.AceCommandManager; 36 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.AceFold; 37 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Anchor; 38 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.LineWidget; 39 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Marker; 40 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Mode.InsertChunkInfo; 41 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Position; 42 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Range; 43 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Renderer.ScreenCoordinates; 44 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Selection; 45 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.Token; 46 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.TokenIterator; 47 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.spelling.CharClassifier; 48 import org.rstudio.studio.client.workbench.views.source.editors.text.ace.spelling.TokenPredicate; 49 import org.rstudio.studio.client.workbench.views.source.editors.text.cpp.CppCompletionContext; 50 import org.rstudio.studio.client.workbench.views.source.editors.text.events.ActiveScopeChangedEvent; 51 import org.rstudio.studio.client.workbench.views.source.editors.text.events.BreakpointMoveEvent; 52 import org.rstudio.studio.client.workbench.views.source.editors.text.events.BreakpointSetEvent; 53 import org.rstudio.studio.client.workbench.views.source.editors.text.events.CommandClickEvent; 54 import org.rstudio.studio.client.workbench.views.source.editors.text.events.CursorChangedEvent; 55 import org.rstudio.studio.client.workbench.views.source.editors.text.events.EditorModeChangedEvent; 56 import org.rstudio.studio.client.workbench.views.source.editors.text.events.FindRequestedEvent; 57 import org.rstudio.studio.client.workbench.views.source.editors.text.events.HasDocumentChangedHandlers; 58 import org.rstudio.studio.client.workbench.views.source.editors.text.events.HasFoldChangeHandlers; 59 import org.rstudio.studio.client.workbench.views.source.editors.text.events.HasLineWidgetsChangedHandlers; 60 import org.rstudio.studio.client.workbench.views.source.editors.text.events.HasRenderFinishedHandlers; 61 import org.rstudio.studio.client.workbench.views.source.editors.text.events.PasteEvent; 62 import org.rstudio.studio.client.workbench.views.source.editors.text.events.ScopeTreeReadyEvent; 63 import org.rstudio.studio.client.workbench.views.source.editors.text.events.UndoRedoEvent; 64 import org.rstudio.studio.client.workbench.views.source.editors.text.rmd.ChunkDefinition; 65 import org.rstudio.studio.client.workbench.views.source.editors.text.spelling.SpellingDoc; 66 import org.rstudio.studio.client.workbench.views.source.events.CollabEditStartParams; 67 import org.rstudio.studio.client.workbench.views.source.events.SaveFileEvent; 68 69 import com.google.gwt.core.client.JavaScriptObject; 70 import com.google.gwt.core.client.JsArray; 71 import com.google.gwt.core.client.JsArrayString; 72 import com.google.gwt.event.dom.client.BlurHandler; 73 import com.google.gwt.event.dom.client.FocusHandler; 74 import com.google.gwt.event.dom.client.HasContextMenuHandlers; 75 import com.google.gwt.event.dom.client.HasFocusHandlers; 76 import com.google.gwt.event.dom.client.HasKeyDownHandlers; 77 import com.google.gwt.event.logical.shared.AttachEvent; 78 import com.google.gwt.event.logical.shared.HasValueChangeHandlers; 79 import com.google.gwt.event.shared.HandlerRegistration; 80 import com.google.gwt.user.client.ui.IsWidget; 81 import com.google.gwt.user.client.ui.Widget; 82 83 import org.rstudio.studio.client.workbench.views.source.events.ScrollYEvent; 84 import org.rstudio.studio.client.workbench.views.source.model.DirtyState; 85 import org.rstudio.studio.client.workbench.views.source.model.RnwCompletionContext; 86 import org.rstudio.studio.client.workbench.views.source.model.SourcePosition; 87 88 public interface DocDisplay extends HasValueChangeHandlers<Void>, 89 HasFoldChangeHandlers, 90 HasLineWidgetsChangedHandlers, 91 IsWidget, 92 HasContextMenuHandlers, 93 HasFocusHandlers, 94 HasKeyDownHandlers, 95 HasRenderFinishedHandlers, 96 HasDocumentChangedHandlers, 97 InputEditorDisplay, 98 NavigableSourceEditor 99 { 100 public interface AnchoredSelection 101 { getValue()102 String getValue(); getRange()103 Range getRange(); apply()104 void apply(); detach()105 void detach(); 106 } getFileType()107 TextFileType getFileType(); setFileType(TextFileType fileType)108 void setFileType(TextFileType fileType); setFileType(TextFileType fileType, boolean suppressCompletion)109 void setFileType(TextFileType fileType, boolean suppressCompletion); setFileType(TextFileType fileType, CompletionManager completionManager)110 void setFileType(TextFileType fileType, CompletionManager completionManager); syncCompletionPrefs()111 void syncCompletionPrefs(); syncDiagnosticsPrefs()112 void syncDiagnosticsPrefs(); setRnwCompletionContext(RnwCompletionContext rnwContext)113 void setRnwCompletionContext(RnwCompletionContext rnwContext); setCppCompletionContext(CppCompletionContext cppContext)114 void setCppCompletionContext(CppCompletionContext cppContext); setRCompletionContext(CompletionContext rContext)115 void setRCompletionContext(CompletionContext rContext); getCode()116 String getCode(); getLines()117 JsArrayString getLines(); getLines(int startRow, int endRow)118 JsArrayString getLines(int startRow, int endRow); setCode(String code, boolean preserveCursorPosition)119 void setCode(String code, boolean preserveCursorPosition); insertCode(String code, boolean blockMode)120 void insertCode(String code, boolean blockMode); applyChanges(TextChange[] changes)121 void applyChanges(TextChange[] changes); applyChanges(TextChange[] changes, boolean preserveCursorPosition)122 void applyChanges(TextChange[] changes, boolean preserveCursorPosition); focus()123 void focus(); isFocused()124 boolean isFocused(); print()125 void print(); codeCompletion()126 void codeCompletion(); goToHelp()127 void goToHelp(); goToDefinition()128 void goToDefinition(); getSelectionValue()129 String getSelectionValue(); getCurrentLine()130 String getCurrentLine(); getCurrentLineUpToCursor()131 String getCurrentLineUpToCursor(); getNextLineIndent()132 String getNextLineIndent(); 133 // This returns null for most file types, but for Sweave it returns "R" or 134 // "TeX". Use SweaveFileType constants to test for these values. getLanguageMode(Position position)135 String getLanguageMode(Position position); getModeId()136 String getModeId(); 137 inMultiSelectMode()138 boolean inMultiSelectMode(); exitMultiSelectMode()139 void exitMultiSelectMode(); 140 quickAddNext()141 void quickAddNext(); 142 yankBeforeCursor()143 void yankBeforeCursor(); yankAfterCursor()144 void yankAfterCursor(); pasteLastYank()145 void pasteLastYank(); 146 clearSelection()147 void clearSelection(); replaceSelection(String code)148 void replaceSelection(String code); replaceRange(Range range, String text)149 void replaceRange(Range range, String text); moveSelectionToNextLine(boolean skipBlankLines)150 boolean moveSelectionToNextLine(boolean skipBlankLines); moveSelectionToBlankLine()151 boolean moveSelectionToBlankLine(); 152 expandSelection()153 void expandSelection(); shrinkSelection()154 void shrinkSelection(); clearSelectionHistory()155 void clearSelectionHistory(); 156 expandRaggedSelection()157 void expandRaggedSelection(); 158 reindent()159 void reindent(); reindent(Range range)160 void reindent(Range range); getChangeTracker()161 ChangeTracker getChangeTracker(); 162 getCode(Position start, Position end)163 String getCode(Position start, Position end); createAnchoredSelection(Widget hostWidget, Position start, Position end)164 DocDisplay.AnchoredSelection createAnchoredSelection(Widget hostWidget, 165 Position start, 166 Position end); createAnchoredSelection(Position start, Position end)167 DocDisplay.AnchoredSelection createAnchoredSelection(Position start, 168 Position end); getCode(InputEditorSelection selection)169 String getCode(InputEditorSelection selection); 170 fitSelectionToLines(boolean expand)171 void fitSelectionToLines(boolean expand); getSelectionOffset(boolean start)172 int getSelectionOffset(boolean start); 173 174 // Fix bug 964 onActivate()175 void onActivate(); 176 setReadOnly(boolean readOnly)177 void setReadOnly(boolean readOnly); setFontSize(double size)178 void setFontSize(double size); 179 onVisibilityChanged(boolean visible)180 void onVisibilityChanged(boolean visible); onResize()181 void onResize(); 182 setHighlightSelectedLine(boolean on)183 void setHighlightSelectedLine(boolean on); setHighlightSelectedWord(boolean on)184 void setHighlightSelectedWord(boolean on); setShowLineNumbers(boolean on)185 void setShowLineNumbers(boolean on); setUseSoftTabs(boolean on)186 void setUseSoftTabs(boolean on); setUseWrapMode(boolean on)187 void setUseWrapMode(boolean on); getUseWrapMode()188 boolean getUseWrapMode(); setTabSize(int tabSize)189 void setTabSize(int tabSize); autoDetectIndentation(boolean on)190 void autoDetectIndentation(boolean on); setShowPrintMargin(boolean on)191 void setShowPrintMargin(boolean on); setPrintMarginColumn(int column)192 void setPrintMarginColumn(int column); setShowInvisibles(boolean show)193 void setShowInvisibles(boolean show); setShowIndentGuides(boolean show)194 void setShowIndentGuides(boolean show); setBlinkingCursor(boolean blinking)195 void setBlinkingCursor(boolean blinking); setScrollPastEndOfDocument(boolean enable)196 void setScrollPastEndOfDocument(boolean enable); setHighlightRFunctionCalls(boolean highlight)197 void setHighlightRFunctionCalls(boolean highlight); setRainbowParentheses(boolean rainbow)198 void setRainbowParentheses(boolean rainbow); getRainbowParentheses()199 boolean getRainbowParentheses(); 200 setScrollLeft(int x)201 void setScrollLeft(int x); setScrollTop(int y)202 void setScrollTop(int y); scrollTo(int x, int y)203 void scrollTo(int x, int y); 204 enableSearchHighlight()205 void enableSearchHighlight(); disableSearchHighlight()206 void disableSearchHighlight(); 207 setUseEmacsKeybindings(boolean use)208 void setUseEmacsKeybindings(boolean use); isEmacsModeOn()209 boolean isEmacsModeOn(); clearEmacsMark()210 void clearEmacsMark(); 211 setUseVimMode(boolean use)212 void setUseVimMode(boolean use); isVimModeOn()213 boolean isVimModeOn(); isVimInInsertMode()214 boolean isVimInInsertMode(); 215 isRendered()216 boolean isRendered(); 217 getFolds()218 JsArray<AceFold> getFolds(); getFoldState(int row)219 String getFoldState(int row); addFold(Range range)220 void addFold(Range range); addFoldFromRow(int row)221 void addFoldFromRow(int row); unfold(AceFold fold)222 void unfold(AceFold fold); unfold(int row)223 void unfold(int row); unfold(Range range)224 void unfold(Range range); 225 getMarks()226 JsMap<Position> getMarks(); setMarks(JsMap<Position> marks)227 void setMarks(JsMap<Position> marks); 228 toggleCommentLines()229 void toggleCommentLines(); 230 getSpellingDoc()231 SpellingDoc getSpellingDoc(); 232 getCommandManager()233 AceCommandManager getCommandManager(); setEditorCommandBinding(String id, List<KeySequence> keys)234 void setEditorCommandBinding(String id, List<KeySequence> keys); resetCommands()235 void resetCommands(); 236 addAttachHandler(AttachEvent.Handler handler)237 HandlerRegistration addAttachHandler(AttachEvent.Handler handler); addEditorFocusHandler(FocusHandler handler)238 HandlerRegistration addEditorFocusHandler(FocusHandler handler); addEditorBlurHandler(BlurHandler handler)239 HandlerRegistration addEditorBlurHandler(BlurHandler handler); addCommandClickHandler(CommandClickEvent.Handler handler)240 HandlerRegistration addCommandClickHandler(CommandClickEvent.Handler handler); addFindRequestedHandler(FindRequestedEvent.Handler handler)241 HandlerRegistration addFindRequestedHandler(FindRequestedEvent.Handler handler); addCursorChangedHandler(CursorChangedEvent.Handler handler)242 HandlerRegistration addCursorChangedHandler(CursorChangedEvent.Handler handler); addEditorModeChangedHandler(EditorModeChangedEvent.Handler handler)243 HandlerRegistration addEditorModeChangedHandler(EditorModeChangedEvent.Handler handler); addSaveCompletedHandler(SaveFileEvent.Handler handler)244 HandlerRegistration addSaveCompletedHandler(SaveFileEvent.Handler handler); addPasteHandler(PasteEvent.Handler handler)245 HandlerRegistration addPasteHandler(PasteEvent.Handler handler); 246 isScopeTreeReady(int row)247 boolean isScopeTreeReady(int row); addScopeTreeReadyHandler(ScopeTreeReadyEvent.Handler handler)248 HandlerRegistration addScopeTreeReadyHandler(ScopeTreeReadyEvent.Handler handler); addActiveScopeChangedHandler(ActiveScopeChangedEvent.Handler handler)249 HandlerRegistration addActiveScopeChangedHandler(ActiveScopeChangedEvent.Handler handler); 250 getCursorPosition()251 Position getCursorPosition(); setCursorPosition(Position position)252 void setCursorPosition(Position position); 253 getCursorPositionScreen()254 Position getCursorPositionScreen(); 255 moveCursorBackward()256 void moveCursorBackward(); moveCursorBackward(int characters)257 void moveCursorBackward(int characters); moveCursorForward()258 void moveCursorForward(); moveCursorForward(int characters)259 void moveCursorForward(int characters); 260 moveCursorNearTop()261 void moveCursorNearTop(); moveCursorNearTop(int rowOffset)262 void moveCursorNearTop(int rowOffset); ensureCursorVisible()263 void ensureCursorVisible(); scrollCursorIntoViewIfNecessary()264 void scrollCursorIntoViewIfNecessary(); scrollCursorIntoViewIfNecessary(int rowsAround)265 void scrollCursorIntoViewIfNecessary(int rowsAround); isCursorInSingleLineString()266 boolean isCursorInSingleLineString(); 267 gotoPageDown()268 void gotoPageDown(); gotoPageUp()269 void gotoPageUp(); 270 ensureRowVisible(int row)271 void ensureRowVisible(int row); 272 search(String needle, boolean backwards, boolean wrap, boolean caseSensitive, boolean wholeWord, Position start, Range range, boolean regexpModex)273 InputEditorSelection search(String needle, 274 boolean backwards, 275 boolean wrap, 276 boolean caseSensitive, 277 boolean wholeWord, 278 Position start, 279 Range range, 280 boolean regexpModex); 281 insertCode(InputEditorPosition position, String code)282 void insertCode(InputEditorPosition position, String code); 283 getScrollLeft()284 int getScrollLeft(); scrollToX(int x)285 void scrollToX(int x); 286 getScrollTop()287 int getScrollTop(); scrollToY(int y, int animateMs)288 void scrollToY(int y, int animateMs); 289 scrollToLine(int row, boolean center)290 void scrollToLine(int row, boolean center); 291 alignCursor(Position position, double ratio)292 void alignCursor(Position position, double ratio); centerSelection()293 void centerSelection(); 294 getCurrentScope()295 Scope getCurrentScope(); getCurrentChunk()296 Scope getCurrentChunk(); getCurrentSection()297 Scope getCurrentSection(); getCurrentFunction(boolean allowAnonymous)298 ScopeFunction getCurrentFunction(boolean allowAnonymous); 299 getScopeAtPosition(Position position)300 Scope getScopeAtPosition(Position position); getChunkAtPosition(Position position)301 Scope getChunkAtPosition(Position position); getFunctionAtPosition(Position position, boolean allowAnonymous)302 ScopeFunction getFunctionAtPosition(Position position, boolean allowAnonymous); getSectionAtPosition(Position position)303 Scope getSectionAtPosition(Position position); hasCodeModelScopeTree()304 boolean hasCodeModelScopeTree(); getScopeTree()305 JsArray<Scope> getScopeTree(); getInsertChunkInfo()306 InsertChunkInfo getInsertChunkInfo(); 307 foldAll()308 void foldAll(); unfoldAll()309 void unfoldAll(); toggleFold()310 void toggleFold(); setFoldStyle(String style)311 void setFoldStyle(String style); // see FoldStyle constants 312 jumpToMatching()313 void jumpToMatching(); selectToMatching()314 void selectToMatching(); expandToMatching()315 void expandToMatching(); 316 addCursorAbove()317 void addCursorAbove(); addCursorBelow()318 void addCursorBelow(); editLinesFromStart()319 void editLinesFromStart(); 320 addUndoRedoHandler(UndoRedoEvent.Handler handler)321 HandlerRegistration addUndoRedoHandler(UndoRedoEvent.Handler handler); getCleanStateToken()322 JavaScriptObject getCleanStateToken(); checkCleanStateToken(JavaScriptObject token)323 boolean checkCleanStateToken(JavaScriptObject token); 324 getNativeSelection()325 Selection getNativeSelection(); getSelectionStart()326 Position getSelectionStart(); getSelectionEnd()327 Position getSelectionEnd(); getSelectionRange()328 Range getSelectionRange(); setSelectionRange(Range range)329 void setSelectionRange(Range range); 330 getLength(int row)331 int getLength(int row); getRowCount()332 int getRowCount(); getLine(int row)333 String getLine(int row); getPixelWidth()334 int getPixelWidth(); 335 positionFromIndex(int index)336 Position positionFromIndex(int index); indexFromPosition(Position position)337 int indexFromPosition(Position position); 338 getCharacterAtCursor()339 char getCharacterAtCursor(); getCharacterBeforeCursor()340 char getCharacterBeforeCursor(); 341 debug_getDocumentDump()342 String debug_getDocumentDump(); debug_setSessionValueDirectly(String s)343 void debug_setSessionValueDirectly(String s); 344 345 // HACK: This should not use Ace-specific data structures createSelection(Position pos1, Position pos2)346 InputEditorSelection createSelection(Position pos1, Position pos2); 347 348 // HACK: InputEditorPosition should just become AceInputEditorPosition selectionToPosition(InputEditorPosition pos)349 Position selectionToPosition(InputEditorPosition pos); 350 createInputEditorPosition(Position pos)351 InputEditorPosition createInputEditorPosition(Position pos); 352 getWords(TokenPredicate tokenPredicate, CharClassifier charClassifier, Position start, Position end)353 Iterable<Range> getWords(TokenPredicate tokenPredicate, 354 CharClassifier charClassifier, 355 Position start, 356 Position end); 357 getTextForRange(Range range)358 String getTextForRange(Range range); 359 tokenizeDocument()360 void tokenizeDocument(); retokenizeDocument()361 void retokenizeDocument(); getTokenAt(int row, int column)362 Token getTokenAt(int row, int column); getTokenAt(Position position)363 Token getTokenAt(Position position); getTokens(int row)364 JsArray<Token> getTokens(int row); 365 createTokenIterator()366 TokenIterator createTokenIterator(); createTokenIterator(Position position)367 TokenIterator createTokenIterator(Position position); 368 createAnchor(Position pos)369 Anchor createAnchor(Position pos); 370 getStartOfCurrentStatement()371 int getStartOfCurrentStatement(); getEndOfCurrentStatement()372 int getEndOfCurrentStatement(); 373 getMultiLineExpr(Position pos, int startRow, int endRow)374 Range getMultiLineExpr(Position pos, int startRow, int endRow); getParagraph(Position pos, int startRow, int endRow)375 Range getParagraph(Position pos, int startRow, int endRow); 376 highlightDebugLocation( SourcePosition startPos, SourcePosition endPos, boolean executing)377 void highlightDebugLocation( 378 SourcePosition startPos, 379 SourcePosition endPos, 380 boolean executing); endDebugHighlighting()381 void endDebugHighlighting(); 382 addBreakpointSetHandler(BreakpointSetEvent.Handler handler)383 HandlerRegistration addBreakpointSetHandler 384 (BreakpointSetEvent.Handler handler); addBreakpointMoveHandler(BreakpointMoveEvent.Handler handler)385 HandlerRegistration addBreakpointMoveHandler 386 (BreakpointMoveEvent.Handler handler); addScrollYHandler(ScrollYEvent.Handler handler)387 HandlerRegistration addScrollYHandler 388 (ScrollYEvent.Handler handler); addOrUpdateBreakpoint(Breakpoint breakpoint)389 void addOrUpdateBreakpoint(Breakpoint breakpoint); removeBreakpoint(Breakpoint breakpoint)390 void removeBreakpoint(Breakpoint breakpoint); removeAllBreakpoints()391 void removeAllBreakpoints(); toggleBreakpointAtCursor()392 void toggleBreakpointAtCursor(); hasBreakpoints()393 boolean hasBreakpoints(); 394 setAnnotations(JsArray<AceAnnotation> annotations)395 void setAnnotations(JsArray<AceAnnotation> annotations); showLint(JsArray<LintItem> lint)396 void showLint(JsArray<LintItem> lint); clearLint()397 void clearLint(); removeMarkersAtCursorPosition()398 void removeMarkersAtCursorPosition(); removeMarkersOnCursorLine()399 void removeMarkersOnCursorLine(); removeMarkers(BiPredicate<AceAnnotation, Marker> predicate)400 void removeMarkers(BiPredicate<AceAnnotation, Marker> predicate); removeMarkersAtWord(String word)401 void removeMarkersAtWord(String word); 402 beginCollabSession(CollabEditStartParams params, DirtyState dirtyState)403 void beginCollabSession(CollabEditStartParams params, DirtyState dirtyState); hasActiveCollabSession()404 boolean hasActiveCollabSession(); hasFollowingCollabSession()405 boolean hasFollowingCollabSession(); endCollabSession()406 void endCollabSession(); 407 setPopupVisible(boolean visible)408 void setPopupVisible(boolean visible); isPopupVisible()409 boolean isPopupVisible(); selectAll(String needle)410 void selectAll(String needle); 411 getTabSize()412 int getTabSize(); insertRoxygenSkeleton()413 void insertRoxygenSkeleton(); 414 getLastModifiedTime()415 long getLastModifiedTime(); getLastCursorChangedTime()416 long getLastCursorChangedTime(); 417 moveLinesUp()418 void moveLinesUp(); moveLinesDown()419 void moveLinesDown(); expandToLine()420 void expandToLine(); copyLinesDown()421 void copyLinesDown(); joinLines()422 void joinLines(); removeLine()423 void removeLine(); 424 blockIndent()425 void blockIndent(); blockOutdent()426 void blockOutdent(); splitIntoLines()427 void splitIntoLines(); 428 getFirstFullyVisibleRow()429 int getFirstFullyVisibleRow(); 430 getPositionBounds(Position position)431 Rectangle getPositionBounds(Position position); getRangeBounds(Range range)432 Rectangle getRangeBounds(Range range); 433 toDocumentPosition(ScreenCoordinates coordinates)434 Position toDocumentPosition(ScreenCoordinates coordinates); documentPositionToScreenCoordinates(Position position)435 ScreenCoordinates documentPositionToScreenCoordinates(Position position); screenCoordinatesToDocumentPosition(int pageX, int pageY)436 Position screenCoordinatesToDocumentPosition(int pageX, int pageY); 437 forceImmediateRender()438 void forceImmediateRender(); isPositionVisible(Position position)439 boolean isPositionVisible(Position position); 440 getFirstVisibleRow()441 int getFirstVisibleRow(); getLastVisibleRow()442 int getLastVisibleRow(); 443 showInfoBar(String message)444 void showInfoBar(String message); 445 setDragEnabled(boolean enabled)446 void setDragEnabled(boolean enabled); 447 isSnippetsTabStopManagerActive()448 boolean isSnippetsTabStopManagerActive(); 449 addLineWidget(LineWidget widget)450 void addLineWidget(LineWidget widget); removeLineWidget(LineWidget widget)451 void removeLineWidget(LineWidget widget); removeAllLineWidgets()452 void removeAllLineWidgets(); onLineWidgetChanged(LineWidget widget)453 void onLineWidgetChanged(LineWidget widget); 454 hasLineWidgets()455 boolean hasLineWidgets(); getLineWidgets()456 JsArray<LineWidget> getLineWidgets(); getLineWidgetForRow(int row)457 LineWidget getLineWidgetForRow(int row); 458 showChunkOutputInline()459 boolean showChunkOutputInline(); setShowChunkOutputInline(boolean show)460 void setShowChunkOutputInline(boolean show); getChunkDefs()461 JsArray<ChunkDefinition> getChunkDefs(); setChunkLineExecState(int start, int end, int state)462 void setChunkLineExecState(int start, int end, int state); 463 getDocumentEnd()464 Position getDocumentEnd(); 465 setInsertMatching(boolean value)466 void setInsertMatching(boolean value); setSurroundSelectionPref(String value)467 void setSurroundSelectionPref(String value); 468 goToLineStart()469 void goToLineStart(); goToLineEnd()470 void goToLineEnd(); 471 toggleTokenInfo()472 void toggleTokenInfo(); setTextInputAriaLabel(String label)473 void setTextInputAriaLabel(String label); 474 } 475