Prepare a new TUI version with Jexer (needs TTable)
[jvcard.git] / src / be / nikiroo / jvcard / tui / windows / TuiContactListWindow.java
diff --git a/src/be/nikiroo/jvcard/tui/windows/TuiContactListWindow.java b/src/be/nikiroo/jvcard/tui/windows/TuiContactListWindow.java
new file mode 100644 (file)
index 0000000..af6b08e
--- /dev/null
@@ -0,0 +1,110 @@
+package be.nikiroo.jvcard.tui.windows;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+import jexer.TAction;
+import jexer.TApplication;
+import jexer.TKeypress;
+import jexer.TWindow;
+import be.nikiroo.jvcard.Card;
+import be.nikiroo.jvcard.Contact;
+import be.nikiroo.jvcard.resources.DisplayBundle;
+import be.nikiroo.jvcard.resources.DisplayOption;
+
+public class TuiContactListWindow extends TuiBrowserWindow {
+       private TApplication app;
+       private Card card;
+       private String filter;
+       private List<String> formats;
+       private int selectedFormat;
+       private String format;
+
+       public TuiContactListWindow(TApplication app, Card card) {
+               super(app, "Contacts", false);
+
+               this.app = app;
+               this.card = card;
+               this.selectedFormat = -1;
+
+               DisplayBundle map = new DisplayBundle();
+               formats = new LinkedList<String>();
+               for (String format : map.getString(DisplayOption.CONTACT_LIST_FORMAT)
+                               .split(",")) {
+                       formats.add(format);
+               }
+
+               addKeyBinding(TKeypress.kbTab, new TAction() {
+                       @Override
+                       public void DO() {
+                               switchFormat();
+                       }
+               });
+
+               addKeyBinding(TKeypress.kbQ, new TAction() {
+                       @Override
+                       public void DO() {
+                               close();
+                       }
+               });
+
+               switchFormat();
+               setCard(card);
+       }
+
+       @Override
+       public void onAction(int selectedLine, int selectedColumn) {
+               try {
+                       @SuppressWarnings("unused")
+                       TWindow w = new TuiContactWindow(app, card.get(selectedLine));
+               } catch (IndexOutOfBoundsException e) {
+                       setMessage("Fail to get contact", true);
+               }
+       }
+
+       private void setCard(Card card) {
+               List<String> headers = new ArrayList<String>();
+               for (String field : format.split("\\|")) {
+                       headers.add(field);
+               }
+
+               List<List<String>> dataLines = new ArrayList<List<String>>();
+               if (card != null) {
+                       for (Contact c : card) {
+                               if (filter == null
+                                               || c.toString(format, "|").toLowerCase()
+                                                               .contains(filter.toLowerCase())) {
+                                       dataLines.add(Arrays.asList(c.toStringArray(format,
+                                                       getWidth(), true)));
+                               }
+                       }
+               }
+
+               setData(headers, dataLines);
+       }
+
+       private void switchFormat() {
+               if (formats.size() == 0)
+                       return;
+
+               selectedFormat++;
+               if (selectedFormat >= formats.size()) {
+                       selectedFormat = 0;
+               }
+
+               format = formats.get(selectedFormat);
+
+               setCard(card);
+       }
+
+       // TODO
+       private void setMessage(String message, boolean error) {
+               if (error) {
+                       System.err.println(message);
+               } else {
+                       System.out.println(message);
+               }
+       }
+}