X-Git-Url: http://git.nikiroo.be/?p=nikiroo-utils.git;a=blobdiff_plain;f=src%2Fjexer%2Fteditor%2FLine.java;h=de1265982c67e3190a122a1dae0e692ba7e2a17e;hp=b89d8277ed30b1ac6b1a500f9056839b9b87069c;hb=e8a11f986bfe2556e450d7b8ad6ef0059b369bbc;hpb=12b55d76e3473407bf37fca3667860240cb8f3be diff --git a/src/jexer/teditor/Line.java b/src/jexer/teditor/Line.java index b89d827..de12659 100644 --- a/src/jexer/teditor/Line.java +++ b/src/jexer/teditor/Line.java @@ -31,6 +31,8 @@ package jexer.teditor; import java.util.ArrayList; import java.util.List; +import jexer.bits.CellAttributes; + /** * A Line represents a single line of text on the screen, as a collection of * words. @@ -42,10 +44,20 @@ public class Line { */ private ArrayList words = new ArrayList(); + /** + * The default color for the TEditor class. + */ + private CellAttributes defaultColor = null; + + /** + * The text highlighter to use. + */ + private Highlighter highlighter = null; + /** * The current cursor position on this line. */ - private int cursorX; + private int cursor = 0; /** * The current word that the cursor position is in. @@ -57,6 +69,32 @@ public class Line { */ private int displayLength = -1; + /** + * Get the current cursor position. + * + * @return the cursor position + */ + public int getCursor() { + return cursor; + } + + /** + * Set the current cursor position. + * + * @param cursor the new cursor position + */ + public void setCursor(final int cursor) { + if ((cursor < 0) + || ((cursor >= getDisplayLength()) + && (getDisplayLength() > 0)) + ) { + throw new IndexOutOfBoundsException("Max length is " + + getDisplayLength() + ", requested position " + cursor); + } + this.cursor = cursor; + // TODO: set word + } + /** * Get a (shallow) copy of the list of words. * @@ -80,16 +118,30 @@ public class Line { n += word.getDisplayLength(); } displayLength = n; + + // If we have any visible characters, add one to the display so that + // the cursor is immediately after the data. + if (displayLength > 0) { + displayLength++; + } return displayLength; } /** - * Construct a new Line from an existing text string. + * Construct a new Line from an existing text string, and highlight + * certain strings. * * @param str the text string + * @param defaultColor the color for unhighlighted text + * @param highlighter the highlighter to use */ - public Line(final String str) { - currentWord = new Word(); + public Line(final String str, final CellAttributes defaultColor, + final Highlighter highlighter) { + + this.defaultColor = defaultColor; + this.highlighter = highlighter; + + currentWord = new Word(this.defaultColor, this.highlighter); words.add(currentWord); for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); @@ -99,40 +151,81 @@ public class Line { currentWord = newWord; } } + for (Word word: words) { + word.applyHighlight(); + } + } + + /** + * Construct a new Line from an existing text string. + * + * @param str the text string + * @param defaultColor the color for unhighlighted text + */ + public Line(final String str, final CellAttributes defaultColor) { + this(str, defaultColor, null); } /** * Decrement the cursor by one. If at the first column, do nothing. + * + * @return true if the cursor position changed */ - public void left() { - if (cursorX == 0) { - return; + public boolean left() { + if (cursor == 0) { + return false; } - // TODO + // TODO: switch word + cursor--; + return true; } /** * Increment the cursor by one. If at the last column, do nothing. + * + * @return true if the cursor position changed */ - public void right() { - if (cursorX == getDisplayLength() - 1) { - return; + public boolean right() { + if (getDisplayLength() == 0) { + return false; } - // TODO + if (cursor == getDisplayLength() - 1) { + return false; + } + // TODO: switch word + cursor++; + return true; } /** * Go to the first column of this line. + * + * @return true if the cursor position changed */ - public void home() { - // TODO + public boolean home() { + if (cursor > 0) { + cursor = 0; + currentWord = words.get(0); + return true; + } + return false; } /** * Go to the last column of this line. + * + * @return true if the cursor position changed */ - public void end() { - // TODO + public boolean end() { + if (cursor != getDisplayLength() - 1) { + cursor = getDisplayLength() - 1; + if (cursor < 0) { + cursor = 0; + } + currentWord = words.get(words.size() - 1); + return true; + } + return false; } /** @@ -150,13 +243,21 @@ public class Line { } /** - * Replace or insert a character at the cursor, depending on overwrite - * flag. + * Insert a character at the cursor. * - * @param ch the character to replace or insert + * @param ch the character to insert */ public void addChar(final char ch) { // TODO } + /** + * Replace a character at the cursor. + * + * @param ch the character to replace + */ + public void replaceChar(final char ch) { + // TODO + } + }