Merge branch 'subtree'
[nikiroo-utils.git] / src / be / nikiroo / fanfix / reader / tui / TSimpleScrollableWindow.java
index 48a225e69eace660902a3823b7936ebaf290cc78..7b8f439ef38f2cf31e58391d9142862e182963ee 100644 (file)
@@ -6,6 +6,8 @@ import jexer.TPanel;
 import jexer.TScrollableWindow;
 import jexer.TVScroller;
 import jexer.TWidget;
+import jexer.event.TMouseEvent;
+import jexer.event.TResizeEvent;
 
 public class TSimpleScrollableWindow extends TScrollableWindow {
        protected TPanel mainPane;
@@ -27,7 +29,7 @@ public class TSimpleScrollableWindow extends TScrollableWindow {
                        int width, int height, int flags, int realWidth, int realHeight) {
                super(application, title, width, height, flags);
 
-               mainPane = new TPanel(this, 0, 0, width, 80) {
+               mainPane = new TPanel(this, 0, 0, 1, 1) {
                        @Override
                        public void draw() {
                                for (TWidget children : mainPane.getChildren()) {
@@ -41,10 +43,8 @@ public class TSimpleScrollableWindow extends TScrollableWindow {
                        }
                };
 
-               // // TODO: test
-               // for (int i = 0; i < 80; i++) {
-               // mainPane.addLabel("ligne " + i, i, i);
-               // }
+               mainPane.setWidth(getWidth());
+               mainPane.setHeight(getHeight());
 
                setRealWidth(realWidth);
                setRealHeight(realHeight);
@@ -71,7 +71,7 @@ public class TSimpleScrollableWindow extends TScrollableWindow {
                                // size/position will be fixed by placeScrollbars()
                                hScroller = new THScroller(this, 0, 0, 10);
                        }
-                       hScroller.setRightValue(realWidth);
+                       setRightValue(realWidth);
                }
 
                reflowData();
@@ -87,12 +87,20 @@ public class TSimpleScrollableWindow extends TScrollableWindow {
                                // size/position will be fixed by placeScrollbars()
                                vScroller = new TVScroller(this, 0, 0, 10);
                        }
-                       vScroller.setBottomValue(realHeight);
+                       setBottomValue(realHeight);
                }
 
                reflowData();
        }
 
+       @Override
+       public void onResize(TResizeEvent event) {
+               super.onResize(event);
+               mainPane.setWidth(getWidth());
+               mainPane.setHeight(getHeight());
+               mainPane.onResize(event);
+       }
+
        @Override
        public void reflowData() {
                super.reflowData();
@@ -106,14 +114,37 @@ public class TSimpleScrollableWindow extends TScrollableWindow {
        }
 
        @Override
-       public void draw() {
+       public void onMouseUp(TMouseEvent mouse) {
+               super.onMouseUp(mouse);
+
+               // TODO: why? this should already be done by the scrollers
+               // it could also mean we do it twice if, somehow, it sometime works...
+               int mrx = mouse.getX();
+               int mry = mouse.getY();
+
+               int mx = mouse.getAbsoluteX();
+               int my = mouse.getAbsoluteY();
+
+               if (vScroller != null) {
+                       mouse.setX(mx - vScroller.getAbsoluteX());
+                       mouse.setY(my - vScroller.getAbsoluteY());
+                       vScroller.onMouseUp(mouse);
+               }
+               if (hScroller != null) {
+                       mouse.setX(mx - hScroller.getAbsoluteX());
+                       mouse.setY(my - hScroller.getAbsoluteY());
+                       hScroller.onMouseUp(mouse);
+               }
+
+               mouse.setX(mrx);
+               mouse.setY(mry);
+               //
+
                if (prevHorizontal != getHorizontalValue()
                                || prevVertical != getVerticalValue()) {
                        prevHorizontal = getHorizontalValue();
                        prevVertical = getVerticalValue();
                        reflowData();
                }
-
-               super.draw();
        }
 }