import java.util.ArrayList;
import java.util.List;
+import jexer.event.TKeypressEvent;
+import static jexer.TKeypress.*;
+
/**
* TMessageBox is a system-modal dialog with buttons for OK, Cancel, Yes, or
* No. Call it like:
YESNOCANCEL
};
+ /**
+ * The type of this message box.
+ */
+ private Type type;
+
+ /**
+ * My buttons.
+ */
+ List<TButton> buttons;
+
/**
* Message boxes have these possible results.
*/
NO
};
-
/**
* Which button was clicked: OK, CANCEL, YES, or NO.
*/
// Start as 50x50 at (1, 1). These will be changed later.
super(application, title, 1, 1, 100, 100, CENTERED | MODAL);
+ // Hang onto type so that we can provide more convenience in
+ // onKeypress().
+ this.type = type;
+
// Determine width and height
String [] lines = caption.split("\n");
int width = title.length() + 12;
// The button line
lineI++;
- List<TButton> buttons = new ArrayList<TButton>();
+ buttons = new ArrayList<TButton>();
int buttonX = 0;
}
}
+ /**
+ * Handle keystrokes.
+ *
+ * @param keypress keystroke event
+ */
+ @Override
+ public void onKeypress(final TKeypressEvent keypress) {
+
+ if (this instanceof TInputBox) {
+ super.onKeypress(keypress);
+ return;
+ }
+
+ // Some convenience for message boxes: Alt won't be needed for the
+ // buttons.
+ switch (type) {
+
+ case OK:
+ if (keypress.equals(kbO)) {
+ buttons.get(0).dispatch();
+ return;
+ }
+ break;
+
+ case OKCANCEL:
+ if (keypress.equals(kbO)) {
+ buttons.get(0).dispatch();
+ return;
+ } else if (keypress.equals(kbC)) {
+ buttons.get(1).dispatch();
+ return;
+ }
+ break;
+
+ case YESNO:
+ if (keypress.equals(kbY)) {
+ buttons.get(0).dispatch();
+ return;
+ } else if (keypress.equals(kbN)) {
+ buttons.get(1).dispatch();
+ return;
+ }
+ break;
+
+ case YESNOCANCEL:
+ if (keypress.equals(kbY)) {
+ buttons.get(0).dispatch();
+ return;
+ } else if (keypress.equals(kbN)) {
+ buttons.get(1).dispatch();
+ return;
+ } else if (keypress.equals(kbC)) {
+ buttons.get(2).dispatch();
+ return;
+ }
+ break;
+
+ default:
+ throw new IllegalArgumentException("Invalid message box type: " + type);
+ }
+
+ super.onKeypress(keypress);
+ }
+
}
*/
@Override
public void onKeypress(final TKeypressEvent keypress) {
- if (getActiveChild() != null) {
- if (getActiveChild() instanceof TSubMenu) {
+
+ /*
+ System.err.printf("keypress: %s active child: %s\n", keypress,
+ getActiveChild());
+ */
+
+ if (getActiveChild() != this) {
+ if ((getActiveChild() instanceof TSubMenu)
+ || (getActiveChild() instanceof TMenu)
+ ) {
getActiveChild().onKeypress(keypress);
return;
}
return;
}
if (keypress.equals(kbRight)) {
- if (!isSubMenu) {
- getApplication().switchMenu(true);
- }
+ getApplication().switchMenu(true);
return;
}
if (keypress.equals(kbLeft)) {
@Override
public void onKeypress(final TKeypressEvent keypress) {
+ // Open me if they hit my mnemonic.
+ if (!keypress.getKey().isFnKey()
+ && !keypress.getKey().isAlt()
+ && !keypress.getKey().isCtrl()
+ && (getMnemonic() != null)
+ && (Character.toLowerCase(getMnemonic().getShortcut())
+ == Character.toLowerCase(keypress.getKey().getChar()))
+ ) {
+ dispatch();
+ return;
+ }
+
if (menu.isActive()) {
menu.onKeypress(keypress);
return;