X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Fjvcard%2Ftui%2FKeyAction.java;h=21e9dac77142444927b011c586b27f72b5d25f68;hb=d5260eeb873fcf2ef9855dedcd9e2a3a3a990582;hp=ac1b093849a279ddd26d09fb3a748582c22466d9;hpb=fae07ea7af01c64ca1a858db75a615555318d5e2;p=jvcard.git diff --git a/src/be/nikiroo/jvcard/tui/KeyAction.java b/src/be/nikiroo/jvcard/tui/KeyAction.java index ac1b093..21e9dac 100644 --- a/src/be/nikiroo/jvcard/tui/KeyAction.java +++ b/src/be/nikiroo/jvcard/tui/KeyAction.java @@ -5,7 +5,8 @@ import java.io.File; import be.nikiroo.jvcard.Card; import be.nikiroo.jvcard.Contact; import be.nikiroo.jvcard.Data; -import be.nikiroo.jvcard.i18n.Trans.StringId; +import be.nikiroo.jvcard.launcher.Main; +import be.nikiroo.jvcard.resources.StringId; import com.googlecode.lanterna.input.KeyStroke; import com.googlecode.lanterna.input.KeyType; @@ -27,7 +28,7 @@ public class KeyAction { * */ public enum Mode { - NONE, MOVE, BACK, HELP, FILE_LIST, CONTACT_LIST, CONTACT_DETAILS, SWICTH_FORMAT, + NONE, MOVE, BACK, HELP, FILE_LIST, CONTACT_LIST, CONTACT_DETAILS_RAW, CONTACT_DETAILS, ASK_USER, ASK_USER_KEY, } public enum DataType { @@ -57,6 +58,8 @@ public class KeyAction { private StringId id; private KeyStroke key; private Mode mode; + private String message; + private boolean error; public KeyAction(Mode mode, KeyStroke key, StringId id) { this.id = id; @@ -77,17 +80,56 @@ public class KeyAction { } /** - * Return the key used to trigger this {@link KeyAction} or '\0' if none. - * Also check the special key ({@link KeyAction#getKkey}) if any. + * Return the key used to trigger this {@link KeyAction}. * - * @return the shortcut character to use to invoke this {@link KeyAction} or - * '\0' + * @return the shortcut {@link KeyStroke} to use to invoke this + * {@link KeyAction} */ public KeyStroke getKey() { return key; } - // check if the given key should trigger this action + /** + * Return the associated message if any. + * + * @return the associated message or NULL + */ + public String getMessage() { + return message; + } + + /** + * Set a message to display to the user. This message will be get after + * {@link KeyAction#getObject()} has been called. + * + * @param message + * the message + * @param error + * TRUE for an error message, FALSE for information + */ + public void setMessage(String message, boolean error) { + this.message = message; + this.error = error; + } + + /** + * Check if the included message ({@link KeyAction#getMessage()}) is an + * error message or an information message. + * + * @return TRUE for error, FALSE for information + */ + public boolean isError() { + return error; + } + + /** + * Check if the given {@link KeyStroke} should trigger this action. + * + * @param mkey + * the {@link KeyStroke} to check against + * + * @return TRUE if it should + */ public boolean match(KeyStroke mkey) { if (mkey == null || key == null) return false; @@ -102,16 +144,6 @@ public class KeyAction { return false; } - /** - * Return the kind of key this {@link KeyAction } is linked to. Will be - * {@link KeyType#NormalKey} if only normal keys can invoke this - * {@link KeyAction}. Also check the normal key ({@link KeyAction#getKey}) - * if any. - * - * @return the special shortcut key to use to invoke this {@link KeyAction} - * or {@link KeyType#NormalKey} - */ - /** * The mode to change to when this action is completed. * @@ -121,10 +153,21 @@ public class KeyAction { return mode; } + /** + * Get the associated {@link StringId} or NULL if the action must not be + * displayed in the action bar. + * + * @return the {@link StringId} or NULL + */ public StringId getStringId() { return id; } + /** + * Get the associated object as a {@link Card} if it is a {@link Card}. + * + * @return the associated {@link Card} or NULL + */ public Card getCard() { Object o = getObject(); if (o instanceof Card) @@ -132,6 +175,12 @@ public class KeyAction { return null; } + /** + * Get the associated object as a {@link Contact} if it is a {@link Contact} + * . + * + * @return the associated {@link Contact} or NULL + */ public Contact getContact() { Object o = getObject(); if (o instanceof Contact) @@ -139,6 +188,11 @@ public class KeyAction { return null; } + /** + * Get the associated object as a {@link Data} if it is a {@link Data}. + * + * @return the associated {@link Data} or NULL + */ public Data getData() { Object o = getObject(); if (o instanceof Data) @@ -146,14 +200,30 @@ public class KeyAction { return null; } - // override this one if needed + /** + * Return the associated target object. You should use + * {@link KeyAction#getCard()}, {@link KeyAction#getContact()} or + * {@link KeyAction#getData()} instead if you know the kind of object it is. + * + *

+ * + * You are expected to override this method to return your object, the 3 + * afore-mentioned methods will use this one as the source. + * + *

+ * + * DO NOT process data here, this method will be called often; this + * should only be a getter method. + * + * @return the associated object + */ public Object getObject() { return null; } /** * The method which is called when the action is performed. You can subclass - * it if you want to customize the action (by default, it just accepts the + * it if you want to customise the action (by default, it just accepts the * mode change (see {@link KeyAction#getMode}). * * @return false to cancel mode change @@ -161,4 +231,82 @@ public class KeyAction { public boolean onAction() { return true; } + + /** + * Used to callback a function from the menu when the user has to introduce + * some text. + * + * @param answer + * the user answer + * + * @return an error message if any + */ + @SuppressWarnings("unused") + public String callback(String answer) { + return null; + } + + /** + * When asking a question to the user, return the question. + * + * @return the question + */ + public String getQuestion() { + return null; + } + + /** + * When asking a question to the user (not for one-key mode), return the + * default answer. + * + * @return the default answer + */ + public String getDefaultAnswer() { + return null; + } + + /** + * Translate the given {@link KeyStroke} into a user text {@link String} of + * size 3. + * + * @param key + * the key to translate + * + * @return the translated text + */ + static public String trans(KeyStroke key) { + String keyTrans = ""; + + switch (key.getKeyType()) { + case Enter: + if (Main.isUnicode()) + keyTrans = " ⤶ "; + else + keyTrans = Main.trans(StringId.KEY_ENTER); + break; + case Tab: + if (Main.isUnicode()) + keyTrans = " ↹ "; + else + keyTrans = Main.trans(StringId.KEY_TAB); + + break; + case Character: + keyTrans = " " + key.getCharacter() + " "; + break; + default: + keyTrans = "" + key.getKeyType(); + int width = 3; + if (keyTrans.length() > width) { + keyTrans = keyTrans.substring(0, width); + } else if (keyTrans.length() < width) { + keyTrans = keyTrans + + new String(new char[width - keyTrans.length()]) + .replace('\0', ' '); + } + break; + } + + return keyTrans; + } }