X-Git-Url: https://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Fjvcard%2Ftui%2Fpanes%2FContactDetails.java;h=1fad960e46730006273c8ab47943fab1a85eb11d;hb=bcb54330afff6a443ab43ee3d38cc7f863c701b7;hp=c1e86c3d1fca92fbda2798a7bc16aae2542b92e9;hpb=0b0b2b0ff1f5e21f7b0feb955b4b54855fb3d508;p=jvcard.git diff --git a/src/be/nikiroo/jvcard/tui/panes/ContactDetails.java b/src/be/nikiroo/jvcard/tui/panes/ContactDetails.java index c1e86c3..1fad960 100644 --- a/src/be/nikiroo/jvcard/tui/panes/ContactDetails.java +++ b/src/be/nikiroo/jvcard/tui/panes/ContactDetails.java @@ -1,32 +1,98 @@ package be.nikiroo.jvcard.tui.panes; +import java.util.LinkedList; import java.util.List; +import com.googlecode.lanterna.input.KeyType; + import be.nikiroo.jvcard.Contact; import be.nikiroo.jvcard.Data; +import be.nikiroo.jvcard.TypeInfo; +import be.nikiroo.jvcard.i18n.Trans; import be.nikiroo.jvcard.tui.KeyAction; import be.nikiroo.jvcard.tui.KeyAction.DataType; import be.nikiroo.jvcard.tui.KeyAction.Mode; +import be.nikiroo.jvcard.tui.StringUtils; +import be.nikiroo.jvcard.tui.UiColors.Element; -import com.googlecode.lanterna.gui2.Direction; -import com.googlecode.lanterna.gui2.Label; - -public class ContactDetails extends MainContent { +public class ContactDetails extends MainContentList { private Contact contact; + private int mode; public ContactDetails(Contact contact) { - super(Direction.VERTICAL); + super(null, null); this.contact = contact; + this.mode = 0; - for (Data data : contact.getContent()) { - addComponent(new Label(data.getName() + ": " + data.getValue())); + for (int i = 0; i < contact.getContent().size(); i++) { + addItem("[detail line]"); } } + @Override + protected List getLabel(int index, int width, boolean selected, + boolean focused) { + // TODO: from ini file? + int SIZE_COL_1 = 15; + + Element el = (focused && selected) ? Element.CONTACT_LINE_SELECTED + : Element.CONTACT_LINE; + Element elSep = (focused && selected) ? Element.CONTACT_LINE_SEPARATOR_SELECTED + : Element.CONTACT_LINE_SEPARATOR; + Element elDirty = (focused && selected) ? Element.CONTACT_LINE_DIRTY_SELECTED + : Element.CONTACT_LINE_DIRTY; + + Data data = contact.getContent().get(index); + + List parts = new LinkedList(); + if (data.isDirty()) { + parts.add(new TextPart(" ", el)); + parts.add(new TextPart("*", elDirty)); + } else { + parts.add(new TextPart(" ", elSep)); + } + String name = " " + data.getName() + " "; + String value = null; + + StringBuilder valueBuilder = new StringBuilder(" "); + switch (mode) { + case 0: + valueBuilder.append(data.getValue()); + if (data.getGroup() != null && data.getGroup().length() > 0) { + valueBuilder.append("("); + valueBuilder.append(data.getGroup()); + valueBuilder.append(")"); + } + break; + case 1: + for (TypeInfo type : data.getTypes()) { + if (valueBuilder.length() > 1) + valueBuilder.append(", "); + valueBuilder.append(type.getName()); + valueBuilder.append(": "); + valueBuilder.append(type.getValue()); + } + break; + } + valueBuilder.append(" "); + + value = valueBuilder.toString(); + + name = StringUtils.padString(name, SIZE_COL_1); + value = StringUtils.padString(value, width - SIZE_COL_1 + - getSeparator().length() - 2); + + parts.add(new TextPart(name, el)); + parts.add(new TextPart(getSeparator(), elSep)); + parts.add(new TextPart(value, el)); + + return parts; + }; + @Override public DataType getDataType() { - return DataType.CONTACT; + return DataType.DATA; } @Override @@ -38,7 +104,28 @@ public class ContactDetails extends MainContent { @Override public List getKeyBindings() { // TODO Auto-generated method stub - return null; + List actions = new LinkedList(); + + // TODO: add, remove + actions.add(new KeyAction(Mode.EDIT_DETAIL, 'd', Trans.StringId.DUMMY) { + @Override + public Object getObject() { + return contact.getContent().get(getSelectedIndex()); + } + }); + actions.add(new KeyAction(Mode.NONE, KeyType.Tab, + Trans.StringId.KEY_ACTION_SWITCH_FORMAT) { + @Override + public boolean onAction() { + mode++; + if (mode > 1) + mode = 0; + + return false; + } + }); + + return actions; } @Override