X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTText.java;h=1750be113f636fe0385e885fe525fe04f095d361;hb=e16dda65585466c8987bd1efd718431450a96605;hp=6d2fe27faaf6e3ae9652761acd52e9c7ea8d1830;hpb=a83fea2bae838f4b9bbf59ce3832e0e67be41378;p=nikiroo-utils.git diff --git a/src/jexer/TText.java b/src/jexer/TText.java index 6d2fe27..1750be1 100644 --- a/src/jexer/TText.java +++ b/src/jexer/TText.java @@ -1,45 +1,52 @@ -/** +/* * Jexer - Java Text User Interface * - * License: LGPLv3 or later - * - * This module is licensed under the GNU Lesser General Public License - * Version 3. Please see the file "COPYING" in this directory for more - * information about the GNU Lesser General Public License Version 3. + * The MIT License (MIT) * - * Copyright (C) 2015 Kevin Lamonte + * Copyright (C) 2016 Kevin Lamonte * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 3 of - * the License, or (at your option) any later version. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. * - * You should have received a copy of the GNU Lesser General Public - * License along with this program; if not, see - * http://www.gnu.org/licenses/, or write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * * @author Kevin Lamonte [kevin.lamonte@gmail.com] * @version 1 */ 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 { @@ -81,7 +88,8 @@ 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) { @@ -98,13 +106,13 @@ public final class TText extends TWidget { */ 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); } @@ -112,7 +120,7 @@ public final class TText extends TWidget { vScroller.setValue(vScroller.getBottomValue()); } - hScroller.setRightValue(maxLineWidth - getWidth() + 1); + hScroller.setRightValue((maxLineWidth - getWidth()) + 1); if (hScroller.getRightValue() < 0) { hScroller.setRightValue(0); } @@ -122,12 +130,14 @@ public final class TText extends TWidget { } /** - * 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) { @@ -144,7 +154,7 @@ public final class TText extends TWidget { if (ch == ' ') { sb.append(word.toString()); sb.append(ch); - if (word.length() >= n - 1) { + if (word.length() >= (n - 1)) { sb.append('\n'); col = 0; } @@ -154,7 +164,7 @@ public final class TText extends TWidget { } col++; - if (col >= n - 1) { + if (col >= (n - 1)) { sb.append('\n'); col = 0; } @@ -164,7 +174,6 @@ public final class TText extends TWidget { return sb.toString(); } - /** * Resize text and scrollbars for a new width/height. */ @@ -173,10 +182,10 @@ public final class TText extends TWidget { 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++) { @@ -186,8 +195,7 @@ public final class TText extends TWidget { // 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 { @@ -198,8 +206,7 @@ public final class TText extends TWidget { // 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 { @@ -214,15 +221,21 @@ public final class TText extends TWidget { /** * 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"); } @@ -230,17 +243,25 @@ public final class TText extends TWidget { /** * 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); @@ -271,17 +292,17 @@ public final class TText extends TWidget { line = ""; } String formatString = "%-" + Integer.toString(getWidth() - 1) + "s"; - getScreen().putStrXY(0, topY, String.format(formatString, line), - color); + getScreen().putStringXY(0, topY, String.format(formatString, line), + 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); } @@ -290,15 +311,16 @@ public final class TText extends TWidget { /** * 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; } @@ -310,7 +332,8 @@ public final class TText extends TWidget { /** * Handle keystrokes. * - * @param keypress keystroke event + * @param keypress + * keystroke event */ @Override public void onKeypress(final TKeypressEvent keypress) {