1 package be
.nikiroo
.jvcard
.tui
.panes
;
3 import java
.util
.LinkedList
;
6 import be
.nikiroo
.jvcard
.Card
;
7 import be
.nikiroo
.jvcard
.Contact
;
8 import be
.nikiroo
.jvcard
.i18n
.Trans
;
9 import be
.nikiroo
.jvcard
.tui
.KeyAction
;
10 import be
.nikiroo
.jvcard
.tui
.UiColors
;
11 import be
.nikiroo
.jvcard
.tui
.KeyAction
.DataType
;
12 import be
.nikiroo
.jvcard
.tui
.KeyAction
.Mode
;
13 import be
.nikiroo
.jvcard
.tui
.UiColors
.Element
;
15 import com
.googlecode
.lanterna
.input
.KeyType
;
17 public class ContactList
extends MainContentList
{
20 private List
<String
> formats
= new LinkedList
<String
>();
21 private int selectedFormat
= -1;
22 private String format
= "";
24 public ContactList(Card card
) {
25 super(UiColors
.Element
.CONTACT_LINE
,
26 UiColors
.Element
.CONTACT_LINE_SELECTED
);
28 // TODO: should get that in an INI file
29 formats
.add("NICKNAME@3|FN@+|EMAIL@30");
30 formats
.add("FN@+|EMAIL@40");
37 * Change the currently displayed contacts card.
40 * the new {@link Card}
42 public void setCard(Card card
) {
47 for (int i
= 0; i
< card
.getContacts().size(); i
++) {
48 addItem("[contact line]");
56 public void refreshData() {
57 int index
= getSelectedIndex();
59 setSelectedIndex(index
);
64 public String
getExitWarning() {
65 if (card
!= null && card
.isDirty()) {
66 return "Ignore unsaved changes? [Y/N]";
73 public List
<KeyAction
> getKeyBindings() {
74 List
<KeyAction
> actions
= new LinkedList
<KeyAction
>();
77 actions
.add(new KeyAction(Mode
.CONTACT_DETAILS_RAW
, 'e',
78 Trans
.StringId
.KEY_ACTION_EDIT_CONTACT
) {
80 public Object
getObject() {
81 return getSelectedContact();
84 actions
.add(new KeyAction(Mode
.DELETE_CONTACT
, 'd',
85 Trans
.StringId
.KEY_ACTION_DELETE_CONTACT
) {
87 public Object
getObject() {
88 return getSelectedContact();
91 actions
.add(new KeyAction(Mode
.SAVE_CARD
, 's',
92 Trans
.StringId
.KEY_ACTION_SAVE_CARD
) {
94 public Object
getObject() {
98 actions
.add(new KeyAction(Mode
.CONTACT_DETAILS
, KeyType
.Enter
,
99 Trans
.StringId
.KEY_ACTION_VIEW_CONTACT
) {
101 public Object
getObject() {
102 return getSelectedContact();
105 actions
.add(new KeyAction(Mode
.NONE
, KeyType
.Tab
,
106 Trans
.StringId
.KEY_ACTION_SWITCH_FORMAT
) {
108 public boolean onAction() {
118 public DataType
getDataType() {
119 return DataType
.CARD
;
123 public String
getTitle() {
125 return card
.getName();
132 protected List
<TextPart
> getLabel(int index
, int width
, boolean selected
,
134 List
<TextPart
> parts
= new LinkedList
<TextPart
>();
136 Contact contact
= null;
137 if (index
> -1 && index
< card
.size())
138 contact
= card
.get(index
);
143 Element el
= (focused
&& selected
) ? Element
.CONTACT_LINE_SELECTED
144 : Element
.CONTACT_LINE
;
145 Element elSep
= (focused
&& selected
) ? Element
.CONTACT_LINE_SEPARATOR_SELECTED
146 : Element
.CONTACT_LINE_SEPARATOR
;
147 Element elDirty
= (focused
&& selected
) ? Element
.CONTACT_LINE_DIRTY_SELECTED
148 : Element
.CONTACT_LINE_DIRTY
;
150 width
-= 2; // dirty mark space
152 String
[] array
= contact
.toStringArray(format
, getSeparator(), " ",
153 width
, UiColors
.getInstance().isUnicode());
155 if (contact
.isDirty()) {
156 parts
.add(new TextPart(" ", el
));
157 parts
.add(new TextPart("*", elDirty
));
159 parts
.add(new TextPart(" ", elSep
));
162 boolean separator
= false;
163 for (String str
: array
) {
164 parts
.add(new TextPart(str
, (separator ? elSep
: el
)));
165 separator
= !separator
;
172 * Return the currently selected {@link Contact}.
174 * @return the currently selected {@link Contact}
176 private Contact
getSelectedContact() {
177 int index
= getSelectedIndex();
178 if (index
> -1 && index
< card
.size())
179 return card
.get(index
);
183 private void switchFormat() {
184 if (formats
.size() == 0)
188 if (selectedFormat
>= formats
.size()) {
192 format
= formats
.get(selectedFormat
);