KeyAction management now more generic
[jvcard.git] / src / be / nikiroo / jvcard / i18n / Trans.java
CommitLineData
a3b510ab
NR
1package be.nikiroo.jvcard.i18n;
2
3import java.util.HashMap;
4import java.util.Map;
5
296a0b75
NR
6import com.googlecode.lanterna.input.KeyStroke;
7
8import be.nikiroo.jvcard.tui.UiColors;
9
a3b510ab
NR
10/**
11 * This class manages the translation of {@link Trans#StringId}s into
12 * user-understandable text.
13 *
14 * @author niki
15 *
16 */
17public class Trans {
18 static private Object lock = new Object();
19 static private Trans instance = null;
20
21 private Map<StringId, String> map = null;
22
23 /**
24 * An enum representing information to be translated to the user.
25 *
26 * @author niki
27 *
28 */
29 public enum StringId {
bcb54330
NR
30 DUMMY, // <-- TODO : remove
31 KEY_ACTION_BACK, KEY_ACTION_HELP, // MainWindow
32 KEY_ACTION_VIEW_CARD, // FileList
ae22c247 33 KEY_ACTION_VIEW_CONTACT, KEY_ACTION_EDIT_CONTACT, KEY_ACTION_SAVE_CARD, KEY_ACTION_DELETE_CONTACT, KEY_ACTION_SEARCH, // ContactList
296a0b75 34 DEAULT_FIELD_SEPARATOR, DEAULT_FIELD_SEPARATOR_NOUTF, // MainContentList
ae22c247
NR
35 KEY_ACTION_INVERT, KEY_ACTION_FULLSCREEN, // ContactDetails
36 KEY_ACTION_SWITCH_FORMAT, // multi-usage
bcb54330 37 NULL; // Special usage
a3b510ab
NR
38
39 public String trans() {
40 return Trans.getInstance().trans(this);
41 }
42 };
43
44 /**
45 * Get the (unique) instance of this class.
46 *
47 * @return the (unique) instance
48 */
49 static public Trans getInstance() {
50 synchronized (lock) {
51 if (instance == null)
52 instance = new Trans();
53 }
54
55 return instance;
56 }
57
296a0b75
NR
58 /**
59 * Translate the given {@link StringId} into user text.
60 *
61 * @param stringId
62 * the ID to translate
63 *
64 * @return the translated text
65 */
a3b510ab 66 public String trans(StringId stringId) {
296a0b75
NR
67 StringId id = stringId;
68 if (!UiColors.getInstance().isUnicode()) {
69 try {
70 id = StringId.valueOf(stringId.toString() + "_NOUTF");
71 } catch (IllegalArgumentException iae) {
72 // no special _NOUTF version found
73 }
74 }
75
76 if (map.containsKey(id)) {
77 return map.get(id);
78 }
79
80 return id.toString();
81 }
82
83 /**
84 * Translate the given {@link KeyStroke} into a user text {@link String} of
85 * size 3.
86 *
87 * @param key
88 * the key to translate
89 *
90 * @return the translated text
91 */
92 public String trans(KeyStroke key) {
93 String keyTrans = "";
94
95 switch (key.getKeyType()) {
96 case Enter:
97 if (UiColors.getInstance().isUnicode())
98 keyTrans = " ⤶ ";
99 else
100 keyTrans = "ENT";
101 break;
102 case Tab:
103 if (UiColors.getInstance().isUnicode())
104 keyTrans = " ↹ ";
105 else
106 keyTrans = "TAB";
107
108 break;
109 case Character:
110 keyTrans = " " + key.getCharacter() + " ";
111 break;
112 default:
113 keyTrans = "" + key.getKeyType();
114 int width = 3;
115 if (keyTrans.length() > width) {
116 keyTrans = keyTrans.substring(0, width);
117 } else if (keyTrans.length() < width) {
118 keyTrans = keyTrans
119 + new String(new char[width - keyTrans.length()])
120 .replace('\0', ' ');
121 }
122 break;
a3b510ab
NR
123 }
124
296a0b75 125 return keyTrans;
a3b510ab
NR
126 }
127
128 private Trans() {
129 map = new HashMap<StringId, String>();
130
131 // TODO: get from a file instead?
132 map.put(StringId.NULL, "");
0b0b2b0f 133 map.put(StringId.DUMMY, "[dummy]");
296a0b75
NR
134 // we could use: " ", "┃", "│"...
135 map.put(StringId.DEAULT_FIELD_SEPARATOR, "┃");
136 map.put(StringId.DEAULT_FIELD_SEPARATOR_NOUTF, "|");
a3b510ab 137 map.put(StringId.KEY_ACTION_BACK, "Back");
bcb54330
NR
138 map.put(StringId.KEY_ACTION_HELP, "Help");
139 map.put(StringId.KEY_ACTION_VIEW_CONTACT, "Open");
140 map.put(StringId.KEY_ACTION_VIEW_CARD, "Open");
141 map.put(StringId.KEY_ACTION_EDIT_CONTACT, "Edit");
142 map.put(StringId.KEY_ACTION_DELETE_CONTACT, "Delete");
0b0b2b0f 143 map.put(StringId.KEY_ACTION_SWITCH_FORMAT, "Change view");
ae22c247
NR
144 map.put(StringId.KEY_ACTION_INVERT, "Invert colours");
145 map.put(StringId.KEY_ACTION_FULLSCREEN, "Fullscreen");
146 map.put(StringId.KEY_ACTION_SEARCH, "Search");
a3b510ab
NR
147 }
148}