-/**
+/*
* Jexer - Java Text User Interface
*
* License: LGPLv3 or later
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.
+ */
+ private 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);
+ }
+
}