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 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(); 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 headers = new ArrayList(); for (String field : format.split("\\|")) { headers.add(field); } List> dataLines = new ArrayList>(); 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); } } }