X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTScrollableWindow.java;h=1e260b3f86e00c7a7cc07409e28e0e1aa646fe03;hb=HEAD;hp=ae5f50c570e645a78f79d4170a73138e0fe3d41a;hpb=fe0770f988e64fc0ccafd3d3b086b4a0eb559d3b;p=fanfix.git diff --git a/src/jexer/TScrollableWindow.java b/src/jexer/TScrollableWindow.java index ae5f50c..1e260b3 100644 --- a/src/jexer/TScrollableWindow.java +++ b/src/jexer/TScrollableWindow.java @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (C) 2017 Kevin Lamonte + * Copyright (C) 2019 Kevin Lamonte * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -37,6 +37,10 @@ import jexer.event.TResizeEvent; */ public class TScrollableWindow extends TWindow implements Scrollable { + // ------------------------------------------------------------------------ + // Variables -------------------------------------------------------------- + // ------------------------------------------------------------------------ + /** * The horizontal scrollbar. */ @@ -47,45 +51,9 @@ public class TScrollableWindow extends TWindow implements Scrollable { */ protected TVScroller vScroller = null; - /** - * Place the scrollbars on the edge of this widget, and adjust bigChange - * to match the new size. This is called by onResize(). - */ - protected void placeScrollbars() { - if (hScroller != null) { - hScroller.setY(getHeight() - 2); - hScroller.setWidth(getWidth() - hScroller.getX() - 3); - hScroller.setBigChange(getWidth() - hScroller.getX() - 3); - } - if (vScroller != null) { - vScroller.setX(getWidth() - 2); - vScroller.setHeight(getHeight() - 2); - vScroller.setBigChange(getHeight() - 2); - } - } - - /** - * Recompute whatever data is displayed by this widget. - */ - public void reflowData() { - // Default: nothing to do - } - - /** - * Handle window/screen resize events. - * - * @param event resize event - */ - @Override - public void onResize(final TResizeEvent event) { - if (event.getType() == TResizeEvent.Type.WIDGET) { - reflowData(); - placeScrollbars(); - return; - } else { - super.onResize(event); - } - } + // ------------------------------------------------------------------------ + // Constructors ----------------------------------------------------------- + // ------------------------------------------------------------------------ /** * Public constructor. Window will be located at (0, 0). @@ -150,6 +118,73 @@ public class TScrollableWindow extends TWindow implements Scrollable { super(application, title, x, y, width, height, flags); } + // ------------------------------------------------------------------------ + // TWindow ---------------------------------------------------------------- + // ------------------------------------------------------------------------ + + /** + * Handle window/screen resize events. + * + * @param event resize event + */ + @Override + public void onResize(final TResizeEvent event) { + if (event.getType() == TResizeEvent.Type.WIDGET) { + reflowData(); + placeScrollbars(); + return; + } else { + super.onResize(event); + } + } + + /** + * Maximize window. + */ + @Override + public void maximize() { + super.maximize(); + placeScrollbars(); + } + + /** + * Restore (unmaximize) window. + */ + @Override + public void restore() { + super.restore(); + placeScrollbars(); + } + + // ------------------------------------------------------------------------ + // TScrollableWindow ------------------------------------------------------ + // ------------------------------------------------------------------------ + + /** + * Place the scrollbars on the edge of this widget, and adjust bigChange + * to match the new size. This is called by onResize(). + */ + protected void placeScrollbars() { + if (hScroller != null) { + hScroller.setX(Math.min(Math.max(0, getWidth() - 17), 17)); + hScroller.setY(getHeight() - 2); + hScroller.setWidth(getWidth() - hScroller.getX() - 3); + hScroller.setBigChange(getWidth() - hScroller.getX() - 3); + } + if (vScroller != null) { + vScroller.setX(getWidth() - 2); + vScroller.setHeight(getHeight() - 2); + vScroller.setBigChange(getHeight() - 2); + } + } + + /** + * Recompute whatever data is displayed by this widget. + */ + public void reflowData() { + // Default: nothing to do + } + /** * Get the horizontal scrollbar, or null if this Viewport does not * support horizontal scrolling.