/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.ide.api.editor.document;
import com.google.web.bindery.event.shared.HandlerRegistration;
import org.eclipse.che.ide.api.editor.events.CursorActivityHandler;
import org.eclipse.che.ide.api.editor.text.LinearRange;
import org.eclipse.che.ide.api.editor.text.TextPosition;
import org.eclipse.che.ide.api.editor.text.TextRange;
import org.eclipse.che.ide.api.resources.VirtualFile;
/**
* An abstraction over the editor representation of the document.
*
* @author "Mickaƫl Leduque"
*/
public interface Document extends ReadOnlyDocument {
/**
* Changes the cursor position.
*
* @param position
* the new position
*/
void setCursorPosition(TextPosition position);
/**
* Change the selected range.
*
* @param range
* the new selected range
*/
void setSelectedRange(TextRange range);
/**
* Returns the line index at the given character offset.
* The valid offsets are 0 to char count inclusive. The line index for
* char count is <code>line count - 1</code>. Returns <code>-1</code> if
* the offset is out of range.
*
* @param offset
* a character offset.
* @return line index or <code>-1</code> if out of range.
*/
int getLineAtOffset(int offset);
/**
* Returns the start character offset for the given line.
* <p>
* The valid indices are 0 to line count exclusive. Returns <code>-1</code>
* if the index is out of range.
* </p>
*
* @param lineIndex
* index of the line.
* @return the line start offset or <code>-1</code> if out of range.
*/
int getLineStart(int lineIndex);
/**
* Change the selected range and optionally move the viewport to show the new selection.
*
* @param range
* the new selected range
* @param show
* true iff the viewport is moved to show the selection
*/
void setSelectedRange(TextRange range, boolean show);
/**
* Change the selected range.
*
* @param range
* the new selected range
*/
void setSelectedRange(LinearRange range);
/**
* Change the selected range and optionally move the viewport to show the new selection.
*
* @param range
* the new selected range
* @param show
* true iff the viewport is moved to show the selection
*/
void setSelectedRange(LinearRange range, boolean show);
/**
* Returns the document handle.
*
* @return the document handle
*/
DocumentHandle getDocumentHandle();
/**
* Adds a cursor handler.
*
* @param handler
* the added handler
* @return a handle to remove the handler
*/
HandlerRegistration addCursorHandler(CursorActivityHandler handler);
/**
* Replaces the text range with the given replacement contents.
*
* @param offset
* start of the range
* @param length
* en of the range
* @param text
* the replacement text
*/
void replace(int offset, int length, String text);
/**
* Replaces the text range with the given replacement contents.
*
* @param startLine
* start line of the range
* @param startChar
* start char of the range
* @param endLine
* end line of the range
* @param endChar
* end char of the range
* @param text
* the replacement text
*/
void replace(int startLine, int startChar, int endLine, int endChar, String text);
void setFile(VirtualFile file);
VirtualFile getFile();
/**
* Returns a {@link ReadOnlyDocument} that refers to the same document.
*
* @return a read-only document
*/
ReadOnlyDocument getReadOnlyDocument();
}