/*******************************************************************************
 * 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
 *******************************************************************************/
package com.google.eclipse.elt.emulator.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.
 */
public interface ITerminalTextData extends ITerminalTextDataReadOnly {

  void setDimensions(int height, int width);

  void setMaxHeight(int height);

  int getMaxHeight();

  void setChar(int line, int column, char c, Style style);

  void setChars(int line, int column, char[] chars, Style style);

  void setChars(int line, int column, char[] chars, int start, int len, Style style);

  void cleanLine(int line);

  /**
   * Shifts some lines up or down. The "empty" space is filled with {@code '\000'} chars and {@code null} {@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)}
   * <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)}
   * <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'}. A 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();

  void copy(ITerminalTextData source);

  void copyLine(ITerminalTextData source, int sourceLine, int destinationLine);

  void copyRange(ITerminalTextData source, int sourceStartLine, int destinationStartLine, int length);

  void setCursorLine(int line);

  void setCursorColumn(int column);
}
