Update support code for Jexer
[jvcard.git] / src / be / nikiroo / jvcard / tui / windows / TuiContactListWindow.java
1 package be.nikiroo.jvcard.tui.windows;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.LinkedList;
6 import java.util.List;
7
8 import jexer.TAction;
9 import jexer.TApplication;
10 import jexer.TKeypress;
11 import jexer.TWindow;
12 import be.nikiroo.jvcard.Card;
13 import be.nikiroo.jvcard.Contact;
14 import be.nikiroo.jvcard.resources.DisplayBundle;
15 import be.nikiroo.jvcard.resources.DisplayOption;
16
17 public class TuiContactListWindow extends TuiBrowserWindow {
18 private Card card;
19 private String filter;
20 private List<String> formats;
21 private int selectedFormat;
22 private String format;
23
24 public TuiContactListWindow(TuiBasicWindow parent, Card card) {
25 super(parent, "Contacts", false);
26
27 this.card = card;
28 this.selectedFormat = -1;
29
30 DisplayBundle map = new DisplayBundle();
31 formats = new LinkedList<String>();
32 for (String format : map.getString(DisplayOption.CONTACT_LIST_FORMAT)
33 .split(",")) {
34 formats.add(format);
35 }
36
37 addKeyBinding(TKeypress.kbQ, "Quit", new TAction() {
38 @Override
39 public void DO() {
40 close();
41 }
42 });
43
44 addKeyBinding(TKeypress.kbTab, "Switch format", new TAction() {
45 @Override
46 public void DO() {
47 switchFormat();
48 }
49 });
50
51 switchFormat();
52 setCard(card);
53 }
54
55 @Override
56 public void onAction(int selectedLine, int selectedColumn) {
57 try {
58 @SuppressWarnings("unused")
59 TWindow w = new TuiContactWindow(TuiContactListWindow.this, card.get(selectedLine));
60 } catch (IndexOutOfBoundsException e) {
61 setMessage("Fail to get contact", true);
62 }
63 }
64
65 private void setCard(Card card) {
66 List<String> headers = new ArrayList<String>();
67 for (String field : format.split("\\|")) {
68 headers.add(field);
69 }
70
71 List<List<String>> dataLines = new ArrayList<List<String>>();
72 if (card != null) {
73 for (Contact c : card) {
74 if (filter == null
75 || c.toString(format, "|").toLowerCase()
76 .contains(filter.toLowerCase())) {
77 dataLines.add(Arrays.asList(c.toStringArray(format,
78 getWidth(), true)));
79 }
80 }
81 }
82
83 setData(headers, dataLines);
84 }
85
86 private void switchFormat() {
87 if (formats.size() == 0)
88 return;
89
90 selectedFormat++;
91 if (selectedFormat >= formats.size()) {
92 selectedFormat = 0;
93 }
94
95 format = formats.get(selectedFormat);
96
97 setCard(card);
98 }
99
100 // TODO
101 private void setMessage(String message, boolean error) {
102 if (error) {
103 System.err.println(message);
104 } else {
105 System.out.println(message);
106 }
107 }
108 }