X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Fjexer%2FTSizeConstraint.java;fp=src%2Fbe%2Fnikiroo%2Fjexer%2FTSizeConstraint.java;h=39daa20655abe0c14ac56f077af9d0e159d9ff06;hp=0000000000000000000000000000000000000000;hb=0bcb5c7ff5300deb01c5136cf0d26d65d9455100;hpb=0e38ba53d1253d53ddd6ea77444a74b85e814874 diff --git a/src/be/nikiroo/jexer/TSizeConstraint.java b/src/be/nikiroo/jexer/TSizeConstraint.java new file mode 100644 index 0000000..39daa20 --- /dev/null +++ b/src/be/nikiroo/jexer/TSizeConstraint.java @@ -0,0 +1,90 @@ +package be.nikiroo.jexer; + +import java.util.List; + +import jexer.TScrollableWidget; +import jexer.TWidget; +import jexer.event.TResizeEvent; +import jexer.event.TResizeEvent.Type; + +public class TSizeConstraint { + private TWidget widget; + private Integer x1; + private Integer y1; + private Integer x2; + private Integer y2; + + // TODO: include in the window classes I use? + + public TSizeConstraint(TWidget widget, Integer x1, Integer y1, Integer x2, + Integer y2) { + this.widget = widget; + this.x1 = x1; + this.y1 = y1; + this.x2 = x2; + this.y2 = y2; + } + + public TWidget getWidget() { + return widget; + } + + public Integer getX1() { + if (x1 != null && x1 < 0) + return widget.getParent().getWidth() + x1; + return x1; + } + + public Integer getY1() { + if (y1 != null && y1 < 0) + return widget.getParent().getHeight() + y1; + return y1; + } + + public Integer getX2() { + if (x2 != null && x2 <= 0) + return widget.getParent().getWidth() - 2 + x2; + return x2; + } + + public Integer getY2() { + if (y2 != null && y2 <= 0) + return widget.getParent().getHeight() - 2 + y2; + return y2; + } + + // coordinates < 0 = from the other side, x2 or y2 = 0 = max size + static public void setSize(List sizeConstraints, TWidget child, + Integer x1, Integer y1, Integer x2, Integer y2) { + sizeConstraints.add(new TSizeConstraint(child, x1, y1, x2, y2)); + } + + static public void resize(List sizeConstraints) { + for (TSizeConstraint sizeConstraint : sizeConstraints) { + TWidget widget = sizeConstraint.getWidget(); + Integer x1 = sizeConstraint.getX1(); + Integer y1 = sizeConstraint.getY1(); + Integer x2 = sizeConstraint.getX2(); + Integer y2 = sizeConstraint.getY2(); + + if (x1 != null) + widget.setX(x1); + if (y1 != null) + widget.setY(y1); + + if (x2 != null) + widget.setWidth(x2 - widget.getX()); + if (y2 != null) + widget.setHeight(y2 - widget.getY()); + + // Resize the text field + // TODO: why setW/setH/reflow not enough for the scrollbars? + widget.onResize(new TResizeEvent(Type.WIDGET, widget.getWidth(), + widget.getHeight())); + + if (widget instanceof TScrollableWidget) { + ((TScrollableWidget) widget).reflowData(); + } + } + } +}