blob: 3ca18158aa3aa4e93c0a158e997c18558645f9f7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2009 Wind River Systems, Inc. and others.
* 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:
* Michael Scharf (Wind River) - initial API and implementation
* Martin Oberhuber (Wind River) - [261486][api][cleanup] Mark @noimplement interfaces as @noextend
*******************************************************************************/
package org.eclipse.tm.terminal.model;
/**
* A writable matrix of characters and {@link Style}. This is intended to be the
* low level representation of the text of a Terminal. Higher layers are
* responsible to fill the text and styles into this representation.
* <p>
* <b>Note: </b> Implementations of this interface has to be thread safe.
* </p>
*
* @noimplement This interface is not intended to be implemented by clients.
* @noextend This interface is not intended to be extended by clients.
*/
public interface ITerminalTextData extends ITerminalTextDataReadOnly {
/**
* Sets the dimensions of the data. If the dimensions are smaller than the current
* dimensions, the lines will be chopped. If the dimensions are bigger, then
* the new elements will be filled with 0 chars and null Style.
* @param height
* @param width
*/
void setDimensions(int height, int width);
void setMaxHeight(int height);
int getMaxHeight();
/**
* Set a single character and the associated {@link Style}.
* @param line line must be >=0 and < height
* @param column column must be >=0 and < width
* @param c the new character at this position
* @param style the style or null
*/
void setChar(int line, int column, char c, Style style);
/**
* Set an array of characters showing in the same {@link Style}.
* @param line line must be >=0 and < height
* @param column column must be >=0 and < width
* @param chars the new characters at this position
* @param style the style or null
*/
void setChars(int line, int column, char[] chars, Style style);
/**
* Set a subrange of an array of characters showing in the same {@link Style}.
* @param line line must be >=0 and < height
* @param column column must be >=0 and < width
* @param chars the new characters at this position
* @param start the start index in the chars array
* @param len the number of characters to insert. Characters beyond width are not inserted.
* @param style the style or null
*/
void setChars(int line, int column, char[] chars, int start, int len, Style style);
/**
* Cleans the entire line.
* @param line
*/
void cleanLine(int line);
// /**
// * @param line
// * @return true if this line belongs to the previous line but is simply
// * wrapped.
// */
// boolean isWrappedLine(int line);
//
// /**
// * Makes this line an extension to the previous line. Wrapped lines get folded back
// * when the width of the terminal changes
// * @param line
// * @param extendsPreviousLine
// */
// void setWrappedLine(int line, boolean extendsPreviousLine);
/**
* Shifts some lines up or down. The "empty" space is filled with <code>'\000'</code> chars
* and <code>null</code> {@link Style}
* <p>To illustrate shift, here is some sample data:
* <pre>
* 0 aaaa
* 1 bbbb
* 2 cccc
* 3 dddd
* 4 eeee
* </pre>
*
* Shift a region of 3 lines <b>up</b> by one line <code>shift(1,3,-1)</code>
* <pre>
* 0 aaaa
* 1 cccc
* 2 dddd
* 3
* 4 eeee
* </pre>
*
*
* Shift a region of 3 lines <b>down</b> by one line <code>shift(1,3,1)</code>
* <pre>
* 0 aaaa
* 1
* 2 bbbb
* 3 cccc
* 4 eeee
* </pre>
* @param startLine the start line of the shift
* @param size the number of lines to shift
* @param shift how much scrolling is done. New scrolled area is filled with <code>'\000</code>'.
* Negative number means scroll down, positive scroll up (see example above).
*/
void scroll(int startLine, int size, int shift);
/**Adds a new line to the terminal. If maxHeigth is reached, the entire terminal
* will be scrolled. Else a line will be added.
*/
void addLine();
/**
* Copies the entire source into this and changes the size accordingly
* @param source
*/
void copy(ITerminalTextData source);
/**
* Copy a sourceLine from source to this at destLine.
* @param source
* @param sourceLine
* @param destLine
*/
void copyLine(ITerminalTextData source,int sourceLine, int destLine);
/**
* Copy <code>length</code> lines from source starting at sourceLine into this starting at
* destLine.
* @param source
* @param sourceStartLine
* @param destStartLine
* @param length
*/
void copyRange(ITerminalTextData source, int sourceStartLine, int destStartLine,int length);
void setCursorLine(int line);
void setCursorColumn(int column);
}