*/
package jexer;
+import static jexer.TKeypress.kbDown;
+import static jexer.TKeypress.kbEnd;
+import static jexer.TKeypress.kbHome;
+import static jexer.TKeypress.kbLeft;
+import static jexer.TKeypress.kbPgDn;
+import static jexer.TKeypress.kbPgUp;
+import static jexer.TKeypress.kbRight;
+import static jexer.TKeypress.kbUp;
+
import java.util.LinkedList;
import java.util.List;
import jexer.bits.CellAttributes;
import jexer.event.TKeypressEvent;
import jexer.event.TMouseEvent;
-import static jexer.TKeypress.*;
/**
- * TText implements a simple text windget.
+ * TText implements a simple scrollable text area. It reflows automatically on
+ * resize.
*/
public final class TText extends TWidget {
/**
* Convenience method used by TWindowLoggerOutput.
*
- * @param line new line to add
+ * @param line
+ * new line to add
*/
public void addLine(final String line) {
if (text.length() == 0) {
*/
private void computeBounds() {
maxLineWidth = 0;
- for (String line: lines) {
+ for (String line : lines) {
if (line.length() > maxLineWidth) {
maxLineWidth = line.length();
}
}
- vScroller.setBottomValue(lines.size() - getHeight() + 1);
+ vScroller.setBottomValue((lines.size() - getHeight()) + 1);
if (vScroller.getBottomValue() < 0) {
vScroller.setBottomValue(0);
}
vScroller.setValue(vScroller.getBottomValue());
}
- hScroller.setRightValue(maxLineWidth - getWidth() + 1);
+ hScroller.setRightValue((maxLineWidth - getWidth()) + 1);
if (hScroller.getRightValue() < 0) {
hScroller.setRightValue(0);
}
}
/**
- * Insert newlines into a string to wrap it to a maximum column.
- * Terminate the final string with a newline. Note that interior
- * newlines are converted to spaces.
+ * Insert newlines into a string to wrap it to a maximum column. Terminate
+ * the final string with a newline. Note that interior newlines are
+ * converted to spaces.
*
- * @param str the string
- * @param n the maximum number of characters in a line
+ * @param str
+ * the string
+ * @param n
+ * the maximum number of characters in a line
* @return the wrapped string
*/
private String wrap(final String str, final int n) {
if (ch == ' ') {
sb.append(word.toString());
sb.append(ch);
- if (word.length() >= n - 1) {
+ if (word.length() >= (n - 1)) {
sb.append('\n');
col = 0;
}
}
col++;
- if (col >= n - 1) {
+ if (col >= (n - 1)) {
sb.append('\n');
col = 0;
}
return sb.toString();
}
-
/**
* Resize text and scrollbars for a new width/height.
*/
lines.clear();
// Break up text into paragraphs
- String [] paragraphs = text.split("\n\n");
- for (String p: paragraphs) {
+ String[] paragraphs = text.split("\n\n");
+ for (String p : paragraphs) {
String paragraph = wrap(p, getWidth() - 1);
- for (String line: paragraph.split("\n")) {
+ for (String line : paragraph.split("\n")) {
lines.add(line);
}
for (int i = 0; i < lineSpacing; i++) {
// Start at the top
if (vScroller == null) {
- vScroller = new TVScroller(this, getWidth() - 1, 0,
- getHeight() - 1);
+ vScroller = new TVScroller(this, getWidth() - 1, 0, getHeight() - 1);
vScroller.setTopValue(0);
vScroller.setValue(0);
} else {
// Start at the left
if (hScroller == null) {
- hScroller = new THScroller(this, 0, getHeight() - 1,
- getWidth() - 1);
+ hScroller = new THScroller(this, 0, getHeight() - 1, getWidth() - 1);
hScroller.setLeftValue(0);
hScroller.setValue(0);
} else {
/**
* Public constructor.
*
- * @param parent parent widget
- * @param text text on the screen
- * @param x column relative to parent
- * @param y row relative to parent
- * @param width width of text area
- * @param height height of text area
+ * @param parent
+ * parent widget
+ * @param text
+ * text on the screen
+ * @param x
+ * column relative to parent
+ * @param y
+ * row relative to parent
+ * @param width
+ * width of text area
+ * @param height
+ * height of text area
*/
public TText(final TWidget parent, final String text, final int x,
- final int y, final int width, final int height) {
+ final int y, final int width, final int height) {
this(parent, text, x, y, width, height, "ttext");
}
/**
* Public constructor.
*
- * @param parent parent widget
- * @param text text on the screen
- * @param x column relative to parent
- * @param y row relative to parent
- * @param width width of text area
- * @param height height of text area
- * @param colorKey ColorTheme key color to use for foreground text.
- * Default is "ttext"
+ * @param parent
+ * parent widget
+ * @param text
+ * text on the screen
+ * @param x
+ * column relative to parent
+ * @param y
+ * row relative to parent
+ * @param width
+ * width of text area
+ * @param height
+ * height of text area
+ * @param colorKey
+ * ColorTheme key color to use for foreground text. Default is
+ * "ttext"
*/
public TText(final TWidget parent, final String text, final int x,
- final int y, final int width, final int height, final String colorKey) {
+ final int y, final int width, final int height,
+ final String colorKey) {
// Set parent and window
super(parent, x, y, width, height);
}
String formatString = "%-" + Integer.toString(getWidth() - 1) + "s";
getScreen().putStrXY(0, topY, String.format(formatString, line),
- color);
+ color);
topY++;
- if (topY >= getHeight() - 1) {
+ if (topY >= (getHeight() - 1)) {
break;
}
}
// Pad the rest with blank lines
- for (int i = topY; i < getHeight() - 1; i++) {
+ for (int i = topY; i < (getHeight() - 1); i++) {
getScreen().hLineXY(0, i, getWidth() - 1, ' ', color);
}
/**
* Handle mouse press events.
*
- * @param mouse mouse button press event
+ * @param mouse
+ * mouse button press event
*/
@Override
public void onMouseDown(final TMouseEvent mouse) {
- if (mouse.getMouseWheelUp()) {
+ if (mouse.isMouseWheelUp()) {
vScroller.decrement();
return;
}
- if (mouse.getMouseWheelDown()) {
+ if (mouse.isMouseWheelDown()) {
vScroller.increment();
return;
}
/**
* Handle keystrokes.
*
- * @param keypress keystroke event
+ * @param keypress
+ * keystroke event
*/
@Override
public void onKeypress(final TKeypressEvent keypress) {