X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTWindow.java;h=97c607e42f8e687537c82154489f77e0d440bb8f;hb=daa4106c096cd4d2b92c3cbae6491edccd25fcc4;hp=af345597609aed3c1c2438a66429c30fe4b95cf3;hpb=fca67db090dc7e6476b98b800ce225c2bf60425c;p=fanfix.git diff --git a/src/jexer/TWindow.java b/src/jexer/TWindow.java index af34559..97c607e 100644 --- a/src/jexer/TWindow.java +++ b/src/jexer/TWindow.java @@ -1,4 +1,4 @@ -/** +/* * Jexer - Java Text User Interface * * License: LGPLv3 or later @@ -39,13 +39,14 @@ import jexer.event.TMenuEvent; import jexer.event.TMouseEvent; import jexer.event.TResizeEvent; import jexer.io.Screen; +import jexer.menu.TMenu; import static jexer.TCommand.*; import static jexer.TKeypress.*; /** * TWindow is the top-level container and drawing surface for other widgets. */ -public class TWindow extends TWidget implements Comparable { +public class TWindow extends TWidget { /** * Window's parent TApplication. @@ -57,6 +58,7 @@ public class TWindow extends TWidget implements Comparable { * * @return this TWindow's parent TApplication */ + @Override public final TApplication getApplication() { return application; } @@ -66,6 +68,7 @@ public class TWindow extends TWidget implements Comparable { * * @return the Screen */ + @Override public final Screen getScreen() { return application.getScreen(); } @@ -140,13 +143,13 @@ public class TWindow extends TWidget implements Comparable { * If true, then the user clicked on the title bar and is moving the * window. */ - private boolean inWindowMove = false; + protected boolean inWindowMove = false; /** * If true, then the user clicked on the bottom right corner and is * resizing the window. */ - private boolean inWindowResize = false; + protected boolean inWindowResize = false; /** * If true, then the user selected "Size/Move" (or hit Ctrl-F5) and is @@ -162,7 +165,7 @@ public class TWindow extends TWidget implements Comparable { /** * Remember mouse state. */ - private TMouseEvent mouse; + protected TMouseEvent mouse; // For moving the window. resizing also uses moveWindowMouseX/Y private int moveWindowMouseX; @@ -184,6 +187,15 @@ public class TWindow extends TWidget implements Comparable { private int restoreWindowX; private int restoreWindowY; + /** + * Set the maximum width for this window. + * + * @param maximumWindowWidth new maximum width + */ + public final void setMaximumWindowWidth(final int maximumWindowWidth) { + this.maximumWindowWidth = maximumWindowWidth; + } + /** * Public constructor. Window will be located at (0, 0). * @@ -302,17 +314,6 @@ public class TWindow extends TWidget implements Comparable { return true; } - /** - * Comparison operator sorts on z. - * - * @param that another TWindow instance - * @return difference between this.z and that.z - */ - @Override - public final int compareTo(final TWindow that) { - return (this.z - that.z); - } - /** * Returns true if the mouse is currently on the close button. * @@ -369,26 +370,26 @@ public class TWindow extends TWidget implements Comparable { * * @return the background color */ - private final CellAttributes getBackground() { + public final CellAttributes getBackground() { if (!isModal() && (inWindowMove || inWindowResize || inKeyboardResize) ) { - assert (getActive()); - return application.getTheme().getColor("twindow.background.windowmove"); + assert (isActive()); + return getTheme().getColor("twindow.background.windowmove"); } else if (isModal() && inWindowMove) { - assert (getActive()); - return application.getTheme().getColor("twindow.background.modal"); + assert (isActive()); + return getTheme().getColor("twindow.background.modal"); } else if (isModal()) { - if (getActive()) { - return application.getTheme().getColor("twindow.background.modal"); + if (isActive()) { + return getTheme().getColor("twindow.background.modal"); } - return application.getTheme().getColor("twindow.background.modal.inactive"); - } else if (getActive()) { + return getTheme().getColor("twindow.background.modal.inactive"); + } else if (isActive()) { assert (!isModal()); - return application.getTheme().getColor("twindow.background"); + return getTheme().getColor("twindow.background"); } else { assert (!isModal()); - return application.getTheme().getColor("twindow.background.inactive"); + return getTheme().getColor("twindow.background.inactive"); } } @@ -397,27 +398,27 @@ public class TWindow extends TWidget implements Comparable { * * @return the border color */ - private final CellAttributes getBorder() { + private CellAttributes getBorder() { if (!isModal() && (inWindowMove || inWindowResize || inKeyboardResize) ) { - assert (getActive()); - return application.getTheme().getColor("twindow.border.windowmove"); + assert (isActive()); + return getTheme().getColor("twindow.border.windowmove"); } else if (isModal() && inWindowMove) { - assert (getActive()); - return application.getTheme().getColor("twindow.border.modal.windowmove"); + assert (isActive()); + return getTheme().getColor("twindow.border.modal.windowmove"); } else if (isModal()) { - if (getActive()) { - return application.getTheme().getColor("twindow.border.modal"); + if (isActive()) { + return getTheme().getColor("twindow.border.modal"); } else { - return application.getTheme().getColor("twindow.border.modal.inactive"); + return getTheme().getColor("twindow.border.modal.inactive"); } - } else if (getActive()) { + } else if (isActive()) { assert (!isModal()); - return application.getTheme().getColor("twindow.border"); + return getTheme().getColor("twindow.border"); } else { assert (!isModal()); - return application.getTheme().getColor("twindow.border.inactive"); + return getTheme().getColor("twindow.border.inactive"); } } @@ -426,22 +427,22 @@ public class TWindow extends TWidget implements Comparable { * * @return the border line type */ - private final int getBorderType() { + private int getBorderType() { if (!isModal() && (inWindowMove || inWindowResize || inKeyboardResize) ) { - assert (getActive()); + assert (isActive()); return 1; } else if (isModal() && inWindowMove) { - assert (getActive()); + assert (isActive()); return 1; } else if (isModal()) { - if (getActive()) { + if (isActive()) { return 2; } else { return 1; } - } else if (getActive()) { + } else if (isActive()) { return 2; } else { return 1; @@ -472,24 +473,24 @@ public class TWindow extends TWidget implements Comparable { // Draw the title int titleLeft = (getWidth() - title.length() - 2) / 2; putCharXY(titleLeft, 0, ' ', border); - putStrXY(titleLeft + 1, 0, title); + putStringXY(titleLeft + 1, 0, title); putCharXY(titleLeft + title.length() + 1, 0, ' ', border); - if (getActive()) { + if (isActive()) { // Draw the close button putCharXY(2, 0, '[', border); putCharXY(4, 0, ']', border); - if (mouseOnClose() && mouse.getMouse1()) { + if (mouseOnClose() && mouse.isMouse1()) { putCharXY(3, 0, GraphicsChars.CP437[0x0F], !isModal() - ? application.getTheme().getColor("twindow.border.windowmove") - : application.getTheme().getColor("twindow.border.modal.windowmove")); + ? getTheme().getColor("twindow.border.windowmove") + : getTheme().getColor("twindow.border.modal.windowmove")); } else { putCharXY(3, 0, GraphicsChars.CP437[0xFE], !isModal() - ? application.getTheme().getColor("twindow.border.windowmove") - : application.getTheme().getColor("twindow.border.modal.windowmove")); + ? getTheme().getColor("twindow.border.windowmove") + : getTheme().getColor("twindow.border.modal.windowmove")); } // Draw the maximize button @@ -497,25 +498,27 @@ public class TWindow extends TWidget implements Comparable { putCharXY(getWidth() - 5, 0, '[', border); putCharXY(getWidth() - 3, 0, ']', border); - if (mouseOnMaximize() && mouse.getMouse1()) { + if (mouseOnMaximize() && mouse.isMouse1()) { putCharXY(getWidth() - 4, 0, GraphicsChars.CP437[0x0F], - application.getTheme().getColor("twindow.border.windowmove")); + getTheme().getColor("twindow.border.windowmove")); } else { if (maximized) { putCharXY(getWidth() - 4, 0, GraphicsChars.CP437[0x12], - application.getTheme().getColor("twindow.border.windowmove")); + getTheme().getColor("twindow.border.windowmove")); } else { putCharXY(getWidth() - 4, 0, GraphicsChars.UPARROW, - application.getTheme().getColor("twindow.border.windowmove")); + getTheme().getColor("twindow.border.windowmove")); } } // Draw the resize corner if ((flags & RESIZABLE) != 0) { - putCharXY(getWidth() - 2, getHeight() - 1, GraphicsChars.SINGLE_BAR, - application.getTheme().getColor("twindow.border.windowmove")); - putCharXY(getWidth() - 1, getHeight() - 1, GraphicsChars.LRCORNER, - application.getTheme().getColor("twindow.border.windowmove")); + putCharXY(getWidth() - 2, getHeight() - 1, + GraphicsChars.SINGLE_BAR, + getTheme().getColor("twindow.border.windowmove")); + putCharXY(getWidth() - 1, getHeight() - 1, + GraphicsChars.LRCORNER, + getTheme().getColor("twindow.border.windowmove")); } } } @@ -529,12 +532,11 @@ public class TWindow extends TWidget implements Comparable { @Override public void onMouseDown(final TMouseEvent mouse) { this.mouse = mouse; - application.setRepaint(); inKeyboardResize = false; if ((mouse.getAbsoluteY() == getY()) - && mouse.getMouse1() + && mouse.isMouse1() && (getX() <= mouse.getAbsoluteX()) && (mouse.getAbsoluteX() < getX() + getWidth()) && !mouseOnClose() @@ -602,28 +604,27 @@ public class TWindow extends TWidget implements Comparable { @Override public void onMouseUp(final TMouseEvent mouse) { this.mouse = mouse; - application.setRepaint(); - if ((inWindowMove) && (mouse.getMouse1())) { + if ((inWindowMove) && (mouse.isMouse1())) { // Stop moving window inWindowMove = false; return; } - if ((inWindowResize) && (mouse.getMouse1())) { + if ((inWindowResize) && (mouse.isMouse1())) { // Stop resizing window inWindowResize = false; return; } - if (mouse.getMouse1() && mouseOnClose()) { + if (mouse.isMouse1() && mouseOnClose()) { // Close window application.closeWindow(this); return; } if ((mouse.getAbsoluteY() == getY()) - && mouse.getMouse1() + && mouse.isMouse1() && mouseOnMaximize()) { if (maximized) { // Restore @@ -650,7 +651,6 @@ public class TWindow extends TWidget implements Comparable { @Override public void onMouseMotion(final TMouseEvent mouse) { this.mouse = mouse; - application.setRepaint(); if (inWindowMove) { // Move window over @@ -748,26 +748,38 @@ public class TWindow extends TWidget implements Comparable { } } if (keypress.equals(kbShiftLeft)) { - if (getWidth() > minimumWindowWidth) { + if ((getWidth() > minimumWindowWidth) + || (minimumWindowWidth <= 0) + ) { setWidth(getWidth() - 1); } } if (keypress.equals(kbShiftRight)) { - if (getWidth() < maximumWindowWidth) { + if ((getWidth() < maximumWindowWidth) + || (maximumWindowWidth <= 0) + ) { setWidth(getWidth() + 1); } } if (keypress.equals(kbShiftUp)) { - if (getHeight() > minimumWindowHeight) { + if ((getHeight() > minimumWindowHeight) + || (minimumWindowHeight <= 0) + ) { setHeight(getHeight() - 1); } } if (keypress.equals(kbShiftDown)) { - if (getHeight() < maximumWindowHeight) { + if ((getHeight() < maximumWindowHeight) + || (maximumWindowHeight <= 0) + ) { setHeight(getHeight() + 1); } } + // Pass a resize event to my children + onResize(new TResizeEvent(TResizeEvent.Type.WIDGET, + getWidth(), getHeight())); + return; } @@ -991,10 +1003,10 @@ public class TWindow extends TWidget implements Comparable { * @param str string to draw * @param attr attributes to use (bold, foreColor, backColor) */ - public final void putStrXY(final int x, final int y, final String str, + public final void putStringXY(final int x, final int y, final String str, final CellAttributes attr) { - getScreen().putStrXY(x, y, str, attr); + getScreen().putStringXY(x, y, str, attr); } /** @@ -1005,8 +1017,8 @@ public class TWindow extends TWidget implements Comparable { * @param y row coordinate. 0 is the top-most row. * @param str string to draw */ - public final void putStrXY(final int x, final int y, final String str) { - getScreen().putStrXY(x, y, str); + public final void putStringXY(final int x, final int y, final String str) { + getScreen().putStringXY(x, y, str); } /**