/******************************************************************************* * 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. *
* Note: Implementations of this interface has to be thread safe. *
* * @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'\000'
chars
* and null
{@link Style}
* To illustrate shift, here is some sample data: *
* 0 aaaa * 1 bbbb * 2 cccc * 3 dddd * 4 eeee ** * Shift a region of 3 lines up by one line
shift(1,3,-1)
* * 0 aaaa * 1 cccc * 2 dddd * 3 * 4 eeee ** * * Shift a region of 3 lines down by one line
shift(1,3,1)
* * 0 aaaa * 1 * 2 bbbb * 3 cccc * 4 eeee ** @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
'\000
'.
* 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 length
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);
}