--- /dev/null
+package be.nikiroo.fanfix.reader.tui;
+
+import jexer.TApplication;
+import jexer.THScroller;
+import jexer.TPanel;
+import jexer.TScrollableWindow;
+import jexer.TVScroller;
+import jexer.TWidget;
+
+public class TSimpleScrollableWindow extends TScrollableWindow {
+ protected TPanel mainPane;
+ private int prevHorizontal = -1;
+ private int prevVertical = -1;
+
+ public TSimpleScrollableWindow(TApplication application, String title,
+ int width, int height) {
+ this(application, title, width, height, 0, 0, 0);
+ }
+
+ public TSimpleScrollableWindow(TApplication application, String title,
+ int width, int height, int flags) {
+ this(application, title, width, height, flags, 0, 0);
+ }
+
+ // 0 = none (so, no scrollbar)
+ public TSimpleScrollableWindow(TApplication application, String title,
+ int width, int height, int flags, int realWidth, int realHeight) {
+ super(application, title, width, height, flags);
+
+ mainPane = new TPanel(this, 0, 0, width, 80) {
+ @Override
+ public void draw() {
+ for (TWidget children : mainPane.getChildren()) {
+ int y = children.getY() + children.getHeight();
+ int x = children.getX() + children.getWidth();
+ boolean visible = (y > getVerticalValue())
+ && (x > getHorizontalValue());
+ children.setVisible(visible);
+ }
+ super.draw();
+ }
+ };
+
+ // // TODO: test
+ // for (int i = 0; i < 80; i++) {
+ // mainPane.addLabel("ligne " + i, i, i);
+ // }
+
+ setRealWidth(realWidth);
+ setRealHeight(realHeight);
+ placeScrollbars();
+ }
+
+ /**
+ * The main pane on which you can add other widgets for this scrollable
+ * window.
+ *
+ * @return the main pane
+ */
+ public TPanel getMainPane() {
+ return mainPane;
+ }
+
+ public void setRealWidth(int realWidth) {
+ if (realWidth <= 0) {
+ if (hScroller != null) {
+ hScroller.remove();
+ }
+ } else {
+ if (hScroller == null) {
+ // size/position will be fixed by placeScrollbars()
+ hScroller = new THScroller(this, 0, 0, 10);
+ }
+ hScroller.setRightValue(realWidth);
+ }
+
+ reflowData();
+ }
+
+ public void setRealHeight(int realHeight) {
+ if (realHeight <= 0) {
+ if (vScroller != null) {
+ vScroller.remove();
+ }
+ } else {
+ if (vScroller == null) {
+ // size/position will be fixed by placeScrollbars()
+ vScroller = new TVScroller(this, 0, 0, 10);
+ }
+ vScroller.setBottomValue(realHeight);
+ }
+
+ reflowData();
+ }
+
+ @Override
+ public void reflowData() {
+ super.reflowData();
+ reflowData(getHorizontalValue(), getVerticalValue());
+ }
+
+ protected void reflowData(int totalX, int totalY) {
+ super.reflowData();
+ mainPane.setX(-totalX);
+ mainPane.setY(-totalY);
+ }
+
+ @Override
+ public void draw() {
+ if (prevHorizontal != getHorizontalValue()
+ || prevVertical != getVerticalValue()) {
+ prevHorizontal = getHorizontalValue();
+ prevVertical = getVerticalValue();
+ reflowData();
+ }
+
+ super.draw();
+ }
+}