X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTMessageBox.java;h=9de90dcdf4c2197aba6fb40a8c45e344bc4d983c;hb=8582f35a3ffb8212463076217eb89278f42331d4;hp=1f05038cf5c7f14a185ef2e42147b7ea7e971384;hpb=daa4106c096cd4d2b92c3cbae6491edccd25fcc4;p=fanfix.git diff --git a/src/jexer/TMessageBox.java b/src/jexer/TMessageBox.java index 1f05038..9de90dc 100644 --- a/src/jexer/TMessageBox.java +++ b/src/jexer/TMessageBox.java @@ -33,6 +33,9 @@ package jexer; 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: @@ -77,6 +80,16 @@ public class TMessageBox extends TWindow { YESNOCANCEL }; + /** + * The type of this message box. + */ + private Type type; + + /** + * My buttons. + */ + List buttons; + /** * Message boxes have these possible results. */ @@ -102,7 +115,6 @@ public class TMessageBox extends TWindow { NO }; - /** * Which button was clicked: OK, CANCEL, YES, or NO. */ @@ -163,6 +175,10 @@ public class TMessageBox extends TWindow { // 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; @@ -188,7 +204,7 @@ public class TMessageBox extends TWindow { // The button line lineI++; - List buttons = new ArrayList(); + buttons = new ArrayList(); int buttonX = 0; @@ -317,4 +333,68 @@ public class TMessageBox extends TWindow { } } + /** + * 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); + } + }