abouttreesummaryrefslogcommitdiff
path: root/srcs/juloo.keyboard2/KeyModifier.java
diff options
context:
space:
mode:
Diffstat (limited to 'srcs/juloo.keyboard2/KeyModifier.java')
-rw-r--r--srcs/juloo.keyboard2/KeyModifier.java175
1 files changed, 94 insertions, 81 deletions
diff --git a/srcs/juloo.keyboard2/KeyModifier.java b/srcs/juloo.keyboard2/KeyModifier.java
index 4089ab8..fa23217 100644
--- a/srcs/juloo.keyboard2/KeyModifier.java
+++ b/srcs/juloo.keyboard2/KeyModifier.java
@@ -7,11 +7,8 @@ import java.util.HashMap;
class KeyModifier
{
/** Cache key is KeyValue's name */
- private static HashMap<String, HashMap<Pointers.Modifiers, KeyValue>> _cache =
- new HashMap<String, HashMap<Pointers.Modifiers, KeyValue>>();
-
- /** Represents a removed key, because a cache entry can't be [null]. */
- private static final KeyValue removed_key = KeyValue.getKeyByName("removed");
+ private static HashMap<KeyValue, HashMap<Pointers.Modifiers, KeyValue>> _cache =
+ new HashMap<KeyValue, HashMap<Pointers.Modifiers, KeyValue>>();
/** Modify a key according to modifiers. */
public static KeyValue modify(KeyValue k, Pointers.Modifiers mods)
@@ -27,10 +24,10 @@ class KeyModifier
/* Order: Fn, Shift, accents */
for (int i = 0; i < n_mods; i++)
r = modify(r, mods.get(i));
- r = remove_placeholders(r);
ks.put(mods, r);
}
- return (r == removed_key) ? null : r;
+ /* Keys with an empty string are placeholder keys. */
+ return (r.getString().length() == 0) ? null : r;
}
public static KeyValue modify(KeyValue k, KeyValue.Modifier mod)
@@ -117,70 +114,97 @@ class KeyModifier
private static KeyValue apply_fn(KeyValue k)
{
- String name;
- switch (k.name)
+ String name = null;
+ switch (k.getKind())
+ {
+ case Char: name = apply_fn_char(k.getChar()); break;
+ case Keyevent: name = apply_fn_keyevent(k.getKeyevent()); break;
+ case String:
+ switch (k.getString())
+ {
+ case "":
+ if (k == KeyValue.getKeyByName("f11_placeholder"))
+ name = "f11";
+ else if (k == KeyValue.getKeyByName("f12_placeholder"))
+ name = "f12";
+ break;
+ }
+ break;
+ }
+ return (name == null) ? k : KeyValue.getKeyByName(name);
+ }
+
+ private static String apply_fn_keyevent(int code)
+ {
+ switch (code)
{
- case "1": name = "f1"; break;
- case "2": name = "f2"; break;
- case "3": name = "f3"; break;
- case "4": name = "f4"; break;
- case "5": name = "f5"; break;
- case "6": name = "f6"; break;
- case "7": name = "f7"; break;
- case "8": name = "f8"; break;
- case "9": name = "f9"; break;
- case "0": name = "f10"; break;
- case "f11_placeholder": name = "f11"; break;
- case "f12_placeholder": name = "f12"; break;
- case "up": name = "page_up"; break;
- case "down": name = "page_down"; break;
- case "left": name = "home"; break;
- case "right": name = "end"; break;
- case "<": name = "«"; break;
- case ">": name = "»"; break;
- case "{": name = "‹"; break;
- case "}": name = "›"; break;
- case "[": name = "‘"; break;
- case "]": name = "’"; break;
- case "(": name = "“"; break;
- case ")": name = "”"; break;
- case "'": name = "‚"; break;
- case "\"": name = "„"; break;
- case "-": name = "–"; break;
- case "_": name = "—"; break;
- case "^": name = "¬"; break;
- case "%": name = "‰"; break;
- case "=": name = "≈"; break;
- case "u": name = "µ"; break;
- case "a": name = "æ"; break;
- case "o": name = "œ"; break;
- case "esc": name = "insert"; break;
- case "*": name = "°"; break;
- case ".": name = "…"; break;
- case ",": name = "·"; break;
- case "!": name = "¡"; break;
- case "?": name = "¿"; break;
- case "tab": name = "\\t"; break;
- case "space": name = "nbsp"; break;
- case "↖": name = "⇖"; break;
- case "↑": name = "⇑"; break;
- case "↗": name = "⇗"; break;
- case "←": name = "⇐"; break;
- case "→": name = "⇒"; break;
- case "↙": name = "⇙"; break;
- case "↓": name = "⇓"; break;
- case "↘": name = "⇘"; break;
+ case KeyEvent.KEYCODE_DPAD_UP: return "page_up";
+ case KeyEvent.KEYCODE_DPAD_DOWN: return "page_down";
+ case KeyEvent.KEYCODE_DPAD_LEFT: return "home";
+ case KeyEvent.KEYCODE_DPAD_RIGHT: return "end";
+ case KeyEvent.KEYCODE_ESCAPE: return "insert";
+ default: return null;
+ }
+ }
+
+ /** Return the name of modified key, or [null]. */
+ private static String apply_fn_char(char c)
+ {
+ switch (c)
+ {
+ case '1': return "f1";
+ case '2': return "f2";
+ case '3': return "f3";
+ case '4': return "f4";
+ case '5': return "f5";
+ case '6': return "f6";
+ case '7': return "f7";
+ case '8': return "f8";
+ case '9': return "f9";
+ case '0': return "f10";
+ case '<': return "«";
+ case '>': return "»";
+ case '{': return "‹";
+ case '}': return "›";
+ case '[': return "‘";
+ case ']': return "’";
+ case '(': return "“";
+ case ')': return "”";
+ case '\'': return "‚";
+ case '"': return "„";
+ case '-': return "–";
+ case '_': return "—";
+ case '^': return "¬";
+ case '%': return "‰";
+ case '=': return "≈";
+ case 'u': return "µ";
+ case 'a': return "æ";
+ case 'o': return "œ";
+ case '*': return "°";
+ case '.': return "…";
+ case ',': return "·";
+ case '!': return "¡";
+ case '?': return "¿";
+ case '↖': return "⇖";
+ case '↑': return "⇑";
+ case '↗': return "⇗";
+ case '←': return "⇐";
+ case '→': return "⇒";
+ case '↙': return "⇙";
+ case '↓': return "⇓";
+ case '↘': return "⇘";
// Currency symbols
- case "e": name = "€"; break;
- case "l": name = "£"; break;
- case "r": name = "₹"; break;
- case "y": name = "¥"; break;
- case "c": name = "¢"; break;
- case "p": name = "₱"; break;
- case "€": case "£": return removed_key; // Avoid showing these twice
- default: return k;
+ case 'e': return "€";
+ case 'l': return "£";
+ case 'r': return "₹";
+ case 'y': return "¥";
+ case 'c': return "¢";
+ case 'p': return "₱";
+ case '€': case '£': return "removed"; // Avoid showing these twice
+ case '\t': return "\\t";
+ case ' ': return "nbsp";
+ default: return null;
}
- return KeyValue.getKeyByName(name);
}
private static KeyValue turn_into_keyevent(KeyValue k)
@@ -249,25 +273,14 @@ class KeyModifier
return k.withKeyevent(e);
}
- /** Remove placeholder keys that haven't been modified into something. */
- private static KeyValue remove_placeholders(KeyValue k)
- {
- switch (k.name)
- {
- case "f11_placeholder":
- case "f12_placeholder": return removed_key;
- default: return k;
- }
- }
-
/* Lookup the cache entry for a key. Create it needed. */
private static HashMap<Pointers.Modifiers, KeyValue> cacheEntry(KeyValue k)
{
- HashMap<Pointers.Modifiers, KeyValue> ks = _cache.get(k.name);
+ HashMap<Pointers.Modifiers, KeyValue> ks = _cache.get(k);
if (ks == null)
{
ks = new HashMap<Pointers.Modifiers, KeyValue>();
- _cache.put(k.name, ks);
+ _cache.put(k, ks);
}
return ks;
}