From: Niki Roo Date: Fri, 8 Mar 2019 07:59:08 +0000 (+0100) Subject: new: TSizeConstraint X-Git-Url: https://git.nikiroo.be/?a=commitdiff_plain;h=743608327805de42d51d97a18e0ec07558b74c83;p=fanfix-jexer.git new: TSizeConstraint --- diff --git a/src/be/nikiroo/fanfix/reader/tui/TSizeConstraint.java b/src/be/nikiroo/fanfix/reader/tui/TSizeConstraint.java new file mode 100644 index 0000000..3baf125 --- /dev/null +++ b/src/be/nikiroo/fanfix/reader/tui/TSizeConstraint.java @@ -0,0 +1,90 @@ +package be.nikiroo.fanfix.reader.tui; + +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 void setSize(List list, TWidget child, Integer x1, + Integer y1, Integer x2, Integer y2) { + list.add(new TSizeConstraint(child, x1, y1, x2, y2)); + } + + static 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(); + } + } + } +}