--- /dev/null
+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<TSizeConstraint> list, TWidget child, Integer x1,
+ Integer y1, Integer x2, Integer y2) {
+ list.add(new TSizeConstraint(child, x1, y1, x2, y2));
+ }
+
+ static void resize(List<TSizeConstraint> 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();
+ }
+ }
+ }
+}