X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTWidget.java;h=9dd21c1a08e9fa18d341fe310f7d1ac1c9aa894e;hb=8f62f06e3ab03e24e23a1b7f369ae31d701e736b;hp=9e02613735d210d2d95e00641c766b024c61ad4f;hpb=5218e73c343be793d6e7833744565dfbc0f08c31;p=nikiroo-utils.git diff --git a/src/jexer/TWidget.java b/src/jexer/TWidget.java index 9e02613..9dd21c1 100644 --- a/src/jexer/TWidget.java +++ b/src/jexer/TWidget.java @@ -43,6 +43,7 @@ import jexer.event.TKeypressEvent; import jexer.event.TMenuEvent; import jexer.event.TMouseEvent; import jexer.event.TResizeEvent; +import jexer.layout.LayoutManager; import jexer.menu.TMenu; import jexer.ttree.TTreeItem; import jexer.ttree.TTreeView; @@ -136,6 +137,11 @@ public abstract class TWidget implements Comparable { */ private int cursorY = 0; + /** + * Layout manager. + */ + private LayoutManager layout = null; + // ------------------------------------------------------------------------ // Constructors ----------------------------------------------------------- // ------------------------------------------------------------------------ @@ -212,15 +218,15 @@ public abstract class TWidget implements Comparable { this.parent = parent; children = new ArrayList(); - if (parent != null) { - this.window = parent.window; - parent.addChild(this); - } - this.x = x; this.y = y; this.width = width; this.height = height; + + if (parent != null) { + this.window = parent.window; + parent.addChild(this); + } } /** @@ -570,6 +576,9 @@ public abstract class TWidget implements Comparable { if (resize.getType() == TResizeEvent.Type.WIDGET) { width = resize.getWidth(); height = resize.getHeight(); + if (layout != null) { + layout.onResize(resize); + } } else { // Let children see the screen resize for (TWidget widget: children) { @@ -732,6 +741,9 @@ public abstract class TWidget implements Comparable { } children.remove(child); child.parent = null; + if (layout != null) { + layout.remove(this); + } } /** @@ -854,7 +866,7 @@ public abstract class TWidget implements Comparable { * * @return widget width */ - public final int getWidth() { + public int getWidth() { return this.width; } @@ -863,8 +875,12 @@ public abstract class TWidget implements Comparable { * * @param width new widget width */ - public final void setWidth(final int width) { + public void setWidth(final int width) { this.width = width; + if (layout != null) { + layout.onResize(new TResizeEvent(TResizeEvent.Type.WIDGET, + width, height)); + } } /** @@ -872,7 +888,7 @@ public abstract class TWidget implements Comparable { * * @return widget height */ - public final int getHeight() { + public int getHeight() { return this.height; } @@ -881,8 +897,12 @@ public abstract class TWidget implements Comparable { * * @param height new widget height */ - public final void setHeight(final int height) { + public void setHeight(final int height) { this.height = height; + if (layout != null) { + layout.onResize(new TResizeEvent(TResizeEvent.Type.WIDGET, + width, height)); + } } /** @@ -900,6 +920,39 @@ public abstract class TWidget implements Comparable { setY(y); setWidth(width); setHeight(height); + if (layout != null) { + layout.onResize(new TResizeEvent(TResizeEvent.Type.WIDGET, + width, height)); + } + } + + /** + * Get the layout manager. + * + * @return the layout manager, or null if not set + */ + public LayoutManager getLayoutManager() { + return layout; + } + + /** + * Set the layout manager. + * + * @param layout the new layout manager + */ + public void setLayoutManager(LayoutManager layout) { + if (this.layout != null) { + for (TWidget w: children) { + this.layout.remove(w); + } + this.layout = null; + } + this.layout = layout; + if (this.layout != null) { + for (TWidget w: children) { + this.layout.add(w); + } + } } /** @@ -1262,6 +1315,9 @@ public abstract class TWidget implements Comparable { for (int i = 0; i < children.size(); i++) { children.get(i).tabOrder = i; } + if (layout != null) { + layout.add(child); + } } /** @@ -1501,7 +1557,7 @@ public abstract class TWidget implements Comparable { * @param ch character to draw * @param attr attributes to use (bold, foreColor, backColor) */ - protected final void putAll(final char ch, final CellAttributes attr) { + protected final void putAll(final int ch, final CellAttributes attr) { getScreen().putAll(ch, attr); } @@ -1524,7 +1580,7 @@ public abstract class TWidget implements Comparable { * @param ch character to draw * @param attr attributes to use (bold, foreColor, backColor) */ - protected final void putCharXY(final int x, final int y, final char ch, + protected final void putCharXY(final int x, final int y, final int ch, final CellAttributes attr) { getScreen().putCharXY(x, y, ch, attr); @@ -1537,7 +1593,7 @@ public abstract class TWidget implements Comparable { * @param y row coordinate. 0 is the top-most row. * @param ch character to draw */ - protected final void putCharXY(final int x, final int y, final char ch) { + protected final void putCharXY(final int x, final int y, final int ch) { getScreen().putCharXY(x, y, ch); } @@ -1577,7 +1633,7 @@ public abstract class TWidget implements Comparable { * @param attr attributes to use (bold, foreColor, backColor) */ protected final void vLineXY(final int x, final int y, final int n, - final char ch, final CellAttributes attr) { + final int ch, final CellAttributes attr) { getScreen().vLineXY(x, y, n, ch, attr); } @@ -1592,7 +1648,7 @@ public abstract class TWidget implements Comparable { * @param attr attributes to use (bold, foreColor, backColor) */ protected final void hLineXY(final int x, final int y, final int n, - final char ch, final CellAttributes attr) { + final int ch, final CellAttributes attr) { getScreen().hLineXY(x, y, n, ch, attr); } @@ -1791,18 +1847,18 @@ public abstract class TWidget implements Comparable { * @param values the possible values for the box, shown in the drop-down * @param valuesIndex the initial index in values, or -1 for no default * value - * @param valuesHeight the height of the values drop-down when it is - * visible + * @param maxValuesHeight the maximum height of the values drop-down when + * it is visible * @param updateAction action to call when a new value is selected from * the list or enter is pressed in the edit field * @return the new combobox */ public final TComboBox addComboBox(final int x, final int y, final int width, final List values, final int valuesIndex, - final int valuesHeight, final TAction updateAction) { + final int maxValuesHeight, final TAction updateAction) { return new TComboBox(this, x, y, width, values, valuesIndex, - valuesHeight, updateAction); + maxValuesHeight, updateAction); } /** @@ -2334,6 +2390,31 @@ public abstract class TWidget implements Comparable { moveAction); } + /** + * Convenience function to add a list to this container/window. + * + * @param strings list of strings to show. This is allowed to be null + * and set later with setList() or by subclasses. + * @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 enterAction action to perform when an item is selected + * @param moveAction action to perform when the user navigates to a new + * item with arrow/page keys + * @param singleClickAction action to perform when the user clicks on an + * item + */ + public TList addList(final List strings, final int x, + final int y, final int width, final int height, + final TAction enterAction, final TAction moveAction, + final TAction singleClickAction) { + + return new TList(this, strings, x, y, width, height, enterAction, + moveAction, singleClickAction); + } + + /** * Convenience function to add an image to this container/window. *