*
* The MIT License (MIT)
*
- * Copyright (C) 2016 Kevin Lamonte
+ * Copyright (C) 2017 Kevin Lamonte
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
*/
public static final int CENTERED = 0x04;
+ /**
+ * Window has no close box (default no). Window can still be closed via
+ * TApplication.closeWindow() and TWindow.close().
+ */
+ public static final int NOCLOSEBOX = 0x08;
+
// ------------------------------------------------------------------------
// Common window attributes -----------------------------------------------
// ------------------------------------------------------------------------
/**
* Maximize window.
*/
- private void maximize() {
+ public void maximize() {
+ if (maximized) {
+ return;
+ }
+
restoreWindowWidth = getWidth();
restoreWindowHeight = getHeight();
restoreWindowX = getX();
}
/**
- * Restote (unmaximize) window.
+ * Restore (unmaximize) window.
*/
- private void restore() {
+ public void restore() {
+ if (!maximized) {
+ return;
+ }
+
setWidth(restoreWindowWidth);
setHeight(restoreWindowHeight);
setX(restoreWindowX);
maximized = false;
}
+ // ------------------------------------------------------------------------
+ // Window visibility ------------------------------------------------------
+ // ------------------------------------------------------------------------
+
+ /**
+ * Hidden flag. A hidden window will still have its onIdle() called, and
+ * will also have onClose() called at application exit. Note package
+ * private access: TApplication will force hidden false if a modal window
+ * is active.
+ */
+ boolean hidden = false;
+
+ /**
+ * Returns true if this window is hidden.
+ *
+ * @return true if this window is hidden, false if the window is shown
+ */
+ public final boolean isHidden() {
+ return hidden;
+ }
+
+ /**
+ * Returns true if this window is shown.
+ *
+ * @return true if this window is shown, false if the window is hidden
+ */
+ public final boolean isShown() {
+ return !hidden;
+ }
+
+ /**
+ * Hide window. A hidden window will still have its onIdle() called, and
+ * will also have onClose() called at application exit. Hidden windows
+ * will not receive any other events.
+ */
+ public void hide() {
+ application.hideWindow(this);
+ }
+
+ /**
+ * Show window.
+ */
+ public void show() {
+ application.showWindow(this);
+ }
+
+ /**
+ * Activate window (bring to top and receive events).
+ */
+ public void activate() {
+ application.activateWindow(this);
+ }
+
+ /**
+ * Close window. Note that windows without a close box can still be
+ * closed by calling the close() method.
+ */
+ public void close() {
+ application.closeWindow(this);
+ }
+
// ------------------------------------------------------------------------
// Constructors -----------------------------------------------------------
// ------------------------------------------------------------------------
return true;
}
+ /**
+ * Returns true if this window has a close box.
+ *
+ * @return true if this window has a close box
+ */
+ public final boolean hasCloseBox() {
+ if ((flags & NOCLOSEBOX) != 0) {
+ return true;
+ }
+ return false;
+ }
+
/**
* Retrieve the background color.
*
if (isActive()) {
// Draw the close button
- putCharXY(2, 0, '[', border);
- putCharXY(4, 0, ']', border);
- if (mouseOnClose() && mouse.isMouse1()) {
- putCharXY(3, 0, GraphicsChars.CP437[0x0F],
- !isModal()
- ? getTheme().getColor("twindow.border.windowmove")
- : getTheme().getColor("twindow.border.modal.windowmove"));
- } else {
- putCharXY(3, 0, GraphicsChars.CP437[0xFE],
- !isModal()
- ? getTheme().getColor("twindow.border.windowmove")
- : getTheme().getColor("twindow.border.modal.windowmove"));
+ if ((flags & NOCLOSEBOX) == 0) {
+ putCharXY(2, 0, '[', border);
+ putCharXY(4, 0, ']', border);
+ if (mouseOnClose() && mouse.isMouse1()) {
+ putCharXY(3, 0, GraphicsChars.CP437[0x0F],
+ !isModal()
+ ? getTheme().getColor("twindow.border.windowmove")
+ : getTheme().getColor("twindow.border.modal.windowmove"));
+ } else {
+ putCharXY(3, 0, GraphicsChars.CP437[0xFE],
+ !isModal()
+ ? getTheme().getColor("twindow.border.windowmove")
+ : getTheme().getColor("twindow.border.modal.windowmove"));
+ }
}
// Draw the maximize button
*
* @return true if mouse is currently on the close button
*/
- private boolean mouseOnClose() {
+ protected boolean mouseOnClose() {
+ if ((flags & NOCLOSEBOX) != 0) {
+ return false;
+ }
if ((mouse != null)
&& (mouse.getAbsoluteY() == getY())
&& (mouse.getAbsoluteX() == getX() + 3)
*
* @return true if the mouse is currently on the maximize/restore button
*/
- private boolean mouseOnMaximize() {
+ protected boolean mouseOnMaximize() {
if ((mouse != null)
&& !isModal()
&& (mouse.getAbsoluteY() == getY())
* @return true if the mouse is currently on the resizable lower right
* corner
*/
- private boolean mouseOnResize() {
+ protected boolean mouseOnResize() {
if (((flags & RESIZABLE) != 0)
&& !isModal()
&& (mouse != null)
// Default: do nothing
}
+ /**
+ * Called by application.hideWindow().
+ */
+ public void onHide() {
+ // Default: do nothing
+ }
+
+ /**
+ * Called by application.showWindow().
+ */
+ public void onShow() {
+ // Default: do nothing
+ }
+
/**
* Handle mouse button presses.
*
setY(getY() - 1);
}
}
- if (keypress.equals(kbShiftLeft)) {
- if ((getWidth() > minimumWindowWidth)
- || (minimumWindowWidth <= 0)
- ) {
- setWidth(getWidth() - 1);
+
+ /*
+ * Only permit keyboard resizing if the window was RESIZABLE.
+ */
+ if ((flags & RESIZABLE) != 0) {
+
+ if (keypress.equals(kbShiftLeft)) {
+ if ((getWidth() > minimumWindowWidth)
+ || (minimumWindowWidth <= 0)
+ ) {
+ setWidth(getWidth() - 1);
+ }
}
- }
- if (keypress.equals(kbShiftRight)) {
- if ((getWidth() < maximumWindowWidth)
- || (maximumWindowWidth <= 0)
- ) {
- setWidth(getWidth() + 1);
+ if (keypress.equals(kbShiftRight)) {
+ if ((getWidth() < maximumWindowWidth)
+ || (maximumWindowWidth <= 0)
+ ) {
+ setWidth(getWidth() + 1);
+ }
}
- }
- if (keypress.equals(kbShiftUp)) {
- if ((getHeight() > minimumWindowHeight)
- || (minimumWindowHeight <= 0)
- ) {
- setHeight(getHeight() - 1);
+ if (keypress.equals(kbShiftUp)) {
+ if ((getHeight() > minimumWindowHeight)
+ || (minimumWindowHeight <= 0)
+ ) {
+ setHeight(getHeight() - 1);
+ }
}
- }
- if (keypress.equals(kbShiftDown)) {
- if ((getHeight() < maximumWindowHeight)
- || (maximumWindowHeight <= 0)
- ) {
- setHeight(getHeight() + 1);
+ if (keypress.equals(kbShiftDown)) {
+ if ((getHeight() < maximumWindowHeight)
+ || (maximumWindowHeight <= 0)
+ ) {
+ setHeight(getHeight() + 1);
+ }
}
- }
- // Pass a resize event to my children
- onResize(new TResizeEvent(TResizeEvent.Type.WIDGET,
- getWidth(), getHeight()));
+ // Pass a resize event to my children
+ onResize(new TResizeEvent(TResizeEvent.Type.WIDGET,
+ getWidth(), getHeight()));
+
+ } // if ((flags & RESIZABLE) != 0)
return;
}
// overrides onMenu() due to how TApplication dispatches
// accelerators.
- // Ctrl-W - close window
- if (keypress.equals(kbCtrlW)) {
- application.closeWindow(this);
- return;
- }
+ if (!(this instanceof TDesktop)) {
- // F6 - behave like Alt-TAB
- if (keypress.equals(kbF6)) {
- application.switchWindow(true);
- return;
- }
+ // Ctrl-W - close window
+ if (keypress.equals(kbCtrlW)) {
+ if ((flags & NOCLOSEBOX) == 0) {
+ application.closeWindow(this);
+ }
+ return;
+ }
- // Shift-F6 - behave like Shift-Alt-TAB
- if (keypress.equals(kbShiftF6)) {
- application.switchWindow(false);
- return;
- }
+ // F6 - behave like Alt-TAB
+ if (keypress.equals(kbF6)) {
+ application.switchWindow(true);
+ return;
+ }
- // F5 - zoom
- if (keypress.equals(kbF5)) {
- if (maximized) {
- restore();
- } else {
- maximize();
+ // Shift-F6 - behave like Shift-Alt-TAB
+ if (keypress.equals(kbShiftF6)) {
+ application.switchWindow(false);
+ return;
}
- }
- // Ctrl-F5 - size/move
- if (keypress.equals(kbCtrlF5)) {
- inKeyboardResize = !inKeyboardResize;
- }
+ // F5 - zoom
+ if (keypress.equals(kbF5)) {
+ if (maximized) {
+ restore();
+ } else {
+ maximize();
+ }
+ }
+
+ // Ctrl-F5 - size/move
+ if (keypress.equals(kbCtrlF5)) {
+ inKeyboardResize = !inKeyboardResize;
+ }
+
+ } // if (!(this instanceof TDesktop))
// I didn't take it, pass it on to my children
super.onKeypress(keypress);
// overrides onMenu() due to how TApplication dispatches
// accelerators.
- if (command.equals(cmWindowClose)) {
- application.closeWindow(this);
- return;
- }
+ if (!(this instanceof TDesktop)) {
- if (command.equals(cmWindowNext)) {
- application.switchWindow(true);
- return;
- }
+ if (command.equals(cmWindowClose)) {
+ if ((flags & NOCLOSEBOX) == 0) {
+ application.closeWindow(this);
+ }
+ return;
+ }
- if (command.equals(cmWindowPrevious)) {
- application.switchWindow(false);
- return;
- }
+ if (command.equals(cmWindowNext)) {
+ application.switchWindow(true);
+ return;
+ }
- if (command.equals(cmWindowMove)) {
- inKeyboardResize = true;
- return;
- }
+ if (command.equals(cmWindowPrevious)) {
+ application.switchWindow(false);
+ return;
+ }
- if (command.equals(cmWindowZoom)) {
- if (maximized) {
- restore();
- } else {
- maximize();
+ if (command.equals(cmWindowMove)) {
+ inKeyboardResize = true;
+ return;
}
- }
+
+ if (command.equals(cmWindowZoom)) {
+ if (maximized) {
+ restore();
+ } else {
+ maximize();
+ }
+ }
+
+ } // if (!(this instanceof TDesktop))
// I didn't take it, pass it on to my children
super.onCommand(command);
*/
@Override
public void onMenu(final TMenuEvent menu) {
- if (menu.getId() == TMenu.MID_WINDOW_CLOSE) {
- application.closeWindow(this);
- return;
- }
- if (menu.getId() == TMenu.MID_WINDOW_NEXT) {
- application.switchWindow(true);
- return;
- }
+ if (!(this instanceof TDesktop)) {
- if (menu.getId() == TMenu.MID_WINDOW_PREVIOUS) {
- application.switchWindow(false);
- return;
- }
+ if (menu.getId() == TMenu.MID_WINDOW_CLOSE) {
+ if ((flags & NOCLOSEBOX) == 0) {
+ application.closeWindow(this);
+ }
+ return;
+ }
- if (menu.getId() == TMenu.MID_WINDOW_MOVE) {
- inKeyboardResize = true;
- return;
- }
+ if (menu.getId() == TMenu.MID_WINDOW_NEXT) {
+ application.switchWindow(true);
+ return;
+ }
- if (menu.getId() == TMenu.MID_WINDOW_ZOOM) {
- if (maximized) {
- restore();
- } else {
- maximize();
+ if (menu.getId() == TMenu.MID_WINDOW_PREVIOUS) {
+ application.switchWindow(false);
+ return;
}
- return;
- }
+
+ if (menu.getId() == TMenu.MID_WINDOW_MOVE) {
+ inKeyboardResize = true;
+ return;
+ }
+
+ if (menu.getId() == TMenu.MID_WINDOW_ZOOM) {
+ if (maximized) {
+ restore();
+ } else {
+ maximize();
+ }
+ return;
+ }
+
+ } // if (!(this instanceof TDesktop))
// I didn't take it, pass it on to my children
super.onMenu(menu);