1 package be
.nikiroo
.jvcard
.tui
.panes
;
4 import java
.util
.Base64
;
5 import java
.util
.LinkedList
;
8 import javax
.swing
.ImageIcon
;
10 import be
.nikiroo
.jvcard
.Contact
;
11 import be
.nikiroo
.jvcard
.Data
;
12 import be
.nikiroo
.jvcard
.TypeInfo
;
13 import be
.nikiroo
.jvcard
.i18n
.Trans
;
14 import be
.nikiroo
.jvcard
.tui
.ImageTextControl
;
15 import be
.nikiroo
.jvcard
.tui
.KeyAction
;
16 import be
.nikiroo
.jvcard
.tui
.KeyAction
.DataType
;
17 import be
.nikiroo
.jvcard
.tui
.KeyAction
.Mode
;
19 import com
.googlecode
.lanterna
.TerminalSize
;
20 import com
.googlecode
.lanterna
.gui2
.BorderLayout
;
21 import com
.googlecode
.lanterna
.gui2
.Panel
;
22 import com
.googlecode
.lanterna
.input
.KeyType
;
24 public class ContactDetails
extends MainContent
{
25 private Contact contact
;
27 private ImageTextControl txt
;
29 private boolean fullscreenImage
;
31 public ContactDetails(Contact contact
) {
32 this.contact
= contact
;
34 BorderLayout blayout
= new BorderLayout();
35 setLayoutManager(blayout
);
39 addComponent(top
, BorderLayout
.Location
.TOP
);
42 public void setContact(Contact contact
) {
44 this.contact
= contact
;
46 if (contact
!= null) {
47 Data photo
= contact
.getPreferredData("PHOTO");
49 TypeInfo encoding
= null;
51 for (TypeInfo info
: photo
.getTypes()) {
52 if (info
.getName() != null) {
53 if (info
.getName().equalsIgnoreCase("ENCODING"))
55 if (info
.getName().equalsIgnoreCase("TYPE"))
60 if (encoding
!= null && encoding
.getValue() != null
61 && encoding
.getValue().equalsIgnoreCase("b")) {
63 img
= new ImageIcon(Base64
.getDecoder().decode(
64 photo
.getValue())).getImage();
73 public DataType
getDataType() {
78 public List
<KeyAction
> getKeyBindings() {
79 List
<KeyAction
> actions
= new LinkedList
<KeyAction
>();
82 actions
.add(new KeyAction(Mode
.NONE
, KeyType
.Tab
,
83 Trans
.StringId
.KEY_ACTION_SWITCH_FORMAT
) {
85 public boolean onAction() {
93 actions
.add(new KeyAction(Mode
.NONE
, 'i',
94 Trans
.StringId
.KEY_ACTION_INVERT
) {
96 public boolean onAction() {
104 actions
.add(new KeyAction(Mode
.NONE
, 'f',
105 Trans
.StringId
.KEY_ACTION_FULLSCREEN
) {
107 public boolean onAction() {
108 fullscreenImage
= !fullscreenImage
;
118 public synchronized Panel
setSize(TerminalSize size
) {
125 * Set the {@link Image} to render.
128 * the new {@link Image}
130 private void setImage(Image image
) {
133 TerminalSize size
= getTxtSize();
138 txt
= new ImageTextControl(image
, size
);
141 if (top
.getChildCount() > 0)
142 top
.removeAllComponents();
145 top
.addComponent(txt
);
149 * Compute the size to use for the {@link Image} text rendering. Return NULL
152 * @return the {@link TerminalSize} to use or NULL if it is not possible
154 private TerminalSize
getTxtSize() {
155 if (image
!= null && getSize() != null && getSize().getColumns() > 0
156 && getSize().getRows() > 0) {
157 if (fullscreenImage
) {
161 return new TerminalSize(40, 20);