package jexer;
import java.util.Arrays;
-import java.util.LinkedList;
+import java.util.ArrayList;
import java.util.List;
import jexer.bits.CellAttributes;
+import jexer.bits.StringUtils;
import jexer.event.TKeypressEvent;
import jexer.event.TMouseEvent;
import static jexer.TKeypress.kbDown;
this.text = text;
this.colorKey = colorKey;
- lines = new LinkedList<String>();
+ lines = new ArrayList<String>();
- vScroller = new TVScroller(this, getWidth() - 1, 0, getHeight() - 1);
- hScroller = new THScroller(this, 0, getHeight() - 1, getWidth() - 1);
+ vScroller = new TVScroller(this, getWidth() - 1, 0,
+ Math.max(1, getHeight() - 1));
+ hScroller = new THScroller(this, 0, getHeight() - 1,
+ Math.max(1, getWidth() - 1));
reflowData();
}
// TScrollableWidget ------------------------------------------------------
// ------------------------------------------------------------------------
+ /**
+ * Override TWidget's width: we need to set child widget widths.
+ *
+ * @param width new widget width
+ */
+ @Override
+ public void setWidth(final int width) {
+ super.setWidth(width);
+ if (hScroller != null) {
+ hScroller.setWidth(getWidth() - 1);
+ }
+ if (vScroller != null) {
+ vScroller.setX(getWidth() - 1);
+ }
+ }
+
+ /**
+ * Override TWidget's height: we need to set child widget heights.
+ * time.
+ *
+ * @param height new widget height
+ */
+ @Override
+ public void setHeight(final int height) {
+ super.setHeight(height);
+ if (hScroller != null) {
+ hScroller.setY(getHeight() - 1);
+ }
+ if (vScroller != null) {
+ vScroller.setHeight(getHeight() - 1);
+ }
+ }
+
/**
* Draw the text box.
*/
int topY = 0;
for (int i = begin; i < lines.size(); i++) {
String line = lines.get(i);
- if (hScroller.getValue() < line.length()) {
+ if (hScroller.getValue() < StringUtils.width(line)) {
line = line.substring(hScroller.getValue());
} else {
line = "";
}
- String formatString = "%-" + Integer.toString(getWidth() - 1) + "s";
- putStringXY(0, topY, String.format(formatString, line), color);
+ if (getWidth() > 3) {
+ String formatString = "%-" + Integer.toString(getWidth() - 1) + "s";
+ putStringXY(0, topY, String.format(formatString, line), color);
+ }
topY++;
if (topY >= (getHeight() - 1)) {
* @param line new line to add
*/
public void addLine(final String line) {
- if (text.length() == 0) {
+ if (StringUtils.width(text) == 0) {
text = line;
} else {
text += "\n\n";
private void computeBounds() {
maxLineWidth = 0;
for (String line : lines) {
- if (line.length() > maxLineWidth) {
- maxLineWidth = line.length();
+ if (StringUtils.width(line) > maxLineWidth) {
+ maxLineWidth = StringUtils.width(line);
}
}
/**
* Set justification.
*
- * @param justification LEFT, CENTER, RIGHT, or FULL
+ * @param justification NONE, LEFT, CENTER, RIGHT, or FULL
*/
public void setJustification(final Justification justification) {
this.justification = justification;
reflowData();
}
+ /**
+ * Un-justify the text.
+ */
+ public void unJustify() {
+ justification = Justification.NONE;
+ reflowData();
+ }
+
}