+ this.extMode = false;
+
+ for (int i = 0; i < contact.size(); i++) {
+ addItem("x");
+ }
+ }
+
+ @Override
+ public DataType getDataType() {
+ return DataType.DATA;
+ }
+
+ @Override
+ public List<KeyAction> getKeyBindings() {
+ // TODO Auto-generated method stub
+ List<KeyAction> actions = new LinkedList<KeyAction>();
+
+ // TODO: add, remove
+ actions.add(new KeyAction(Mode.ASK_USER, KeyType.Enter,
+ Trans.StringId.DUMMY) {
+ @Override
+ public Object getObject() {
+ return getSelectedData();
+ }
+
+ @Override
+ public String getQuestion() {
+ Data data = getData();
+ if (data != null) {
+ return data.getName();
+ }
+
+ return null;
+ }
+
+ @Override
+ public String getDefaultAnswer() {
+ Data data = getData();
+ if (data != null) {
+ return data.getValue();
+ }
+
+ return null;
+ }
+
+ @Override
+ public String callback(String answer) {
+ Data data = getData();
+ if (data != null) {
+ data.setValue(answer);
+ return null;
+ }
+
+ // TODO: i18n
+ return "Cannot modify value";
+ }
+ });
+ actions.add(new KeyAction(Mode.ASK_USER_KEY, 'd', Trans.StringId.DUMMY) {
+ @Override
+ public Object getObject() {
+ return getSelectedData();
+ }
+
+ @Override
+ public String getQuestion() {
+ // TODO i18n
+ return "Delete data? [Y/N]";
+ }
+
+ @Override
+ public String callback(String answer) {
+ if (answer.equalsIgnoreCase("y")) {
+ Data data = getData();
+ if (data != null && data.delete()) {
+ removeItem("x");
+ return null;
+ }
+
+ // TODO i18n
+ return "Cannot delete data";
+ }
+
+ return null;
+ }
+ });
+ // TODO: ui
+ actions.add(new KeyAction(Mode.ASK_USER, 'a', Trans.StringId.DUMMY) {
+ @Override
+ public Object getObject() {
+ return contact;
+ }
+
+ @Override
+ public String getQuestion() {
+ // TODO i18n
+ return "new data (xx.group = yy): ";
+ }
+
+ @Override
+ public String callback(String answer) {
+ int indexEq = answer.indexOf('=');
+ if (indexEq >= 0) {
+ String name = answer.substring(0, indexEq).trim();
+ String value = answer.substring(indexEq + 1).trim();
+ String group = null;
+
+ int indexDt = name.indexOf('.');
+ if (indexDt >= 0) {
+ group = name.substring(indexDt + 1).trim();
+ name = name.substring(0, indexDt).trim();
+ }
+
+ Data data = new Data(null, name, value, group);
+ getContact().add(data);
+ addItem("x");
+ }
+ return null;
+ }
+ });
+ // TODO: use a real UI for this, not a simple text box (a list or
+ // something, maybe a whole new pane?)
+ actions.add(new KeyAction(Mode.ASK_USER, 't', Trans.StringId.DUMMY) {
+ private String previous;
+
+ @Override
+ public Object getObject() {
+ return getSelectedData();
+ }
+
+ @Override
+ public String getQuestion() {
+ Data data = getData();
+ if (data != null) {
+ return data.getName();
+ }
+
+ return null;
+ }
+
+ @Override
+ public String getDefaultAnswer() {
+ Data data = getData();
+ if (data != null) {
+ previous = typesToString(data, null).toString();
+ return previous;
+ }
+
+ return null;
+ }
+
+ @Override
+ public String callback(String answer) {
+ Data data = getData();
+ if (data != null) {
+ if (!answer.equals(previous)) {
+ data.replaceListContent(stringToTypes(answer));
+ }
+ return null;
+ }
+
+ // TODO: i18n
+ return "Cannot modify value";
+ }
+ });
+ actions.add(new KeyAction(Mode.ASK_USER, 'g', Trans.StringId.DUMMY) {
+ private String previous;
+
+ @Override
+ public Object getObject() {
+ return getSelectedData();
+ }
+
+ @Override
+ public String getQuestion() {
+ Data data = getData();
+ if (data != null) {
+ return data.getName();
+ }
+
+ return null;
+ }
+
+ @Override
+ public String getDefaultAnswer() {
+ Data data = getData();
+ if (data != null) {
+ previous = data.getGroup();
+ return previous;
+ }
+
+ return null;
+ }
+
+ @Override
+ public String callback(String answer) {
+ Data data = getData();
+ if (data != null) {
+ if (!answer.equals(previous)) {
+ data.setGroup(answer);
+ }
+ return null;
+ }
+
+ // TODO: i18n
+ return "Cannot modify group";
+ }
+ });
+ actions.add(new KeyAction(Mode.NONE, KeyType.Tab,
+ Trans.StringId.KEY_ACTION_SWITCH_FORMAT) {
+ @Override
+ public boolean onAction() {
+ extMode = !extMode;
+ return false;
+ }
+ });
+
+ return actions;
+ }
+
+ @Override
+ public String getTitle() {
+ String title = null;