Add more warnings source to 1.6) and fix warnings
[jvcard.git] / src / be / nikiroo / jvcard / tui / ImageTextControl.java
CommitLineData
25232463
NR
1package be.nikiroo.jvcard.tui;
2
f06c8100 3import java.awt.Dimension;
25232463
NR
4import java.awt.Image;
5
7da41ecd 6import be.nikiroo.jvcard.launcher.Main;
f06c8100
NR
7import be.nikiroo.utils.ImageText;
8import be.nikiroo.utils.ImageText.Mode;
25232463
NR
9
10import com.googlecode.lanterna.TerminalSize;
11import com.googlecode.lanterna.gui2.BorderLayout;
12import com.googlecode.lanterna.gui2.Panel;
13import com.googlecode.lanterna.gui2.TextBox;
14
ae22c247
NR
15/**
16 * A {@link Panel} containing an {@link ImageText} rendering.
17 *
18 * @author niki
f06c8100 19 *
ae22c247 20 */
25232463 21public class ImageTextControl extends Panel {
ae22c247 22 private ImageText image;
25232463
NR
23 private TextBox txt;
24 private int mode;
25
ae22c247
NR
26 /**
27 * Create a new {@link ImageTextControl} for the given {@link Image} and
28 * {@link TerminalSize}.
29 *
30 * @param image
31 * the {@link Image} to render
32 * @param size
33 * the target size of this control
34 */
25232463
NR
35 public ImageTextControl(Image image, TerminalSize size) {
36 Mode mode = Mode.DOUBLE_DITHERING;
7da41ecd 37 if (!Main.isUnicode()) {
25232463
NR
38 mode = Mode.ASCII;
39 }
40
41 Mode[] modes = Mode.values();
42 for (int i = 0; i < modes.length; i++) {
43 if (mode == modes[i])
44 this.mode = i;
45 }
46
47 this.setLayoutManager(new BorderLayout());
ae22c247 48 setSize(size);
f06c8100
NR
49 setImage(new ImageText(image, new Dimension(size.getColumns(),
50 size.getRows()), mode, false));
25232463
NR
51 }
52
ae22c247
NR
53 /**
54 * Cycle through the available rendering modes if possible.
55 *
56 * @return TRUE if it was possible to switch modes
57 */
25232463 58 public boolean switchMode() {
7da41ecd 59 if (image == null || !Main.isUnicode())
25232463
NR
60 return false;
61
62 Mode[] modes = Mode.values();
63 mode++;
64 if (mode >= modes.length)
65 mode = 0;
66
ae22c247
NR
67 image.setMode(modes[mode]);
68 setImage(image);
25232463
NR
69
70 return true;
71 }
72
ae22c247
NR
73 /**
74 * Invert the colours.
75 */
25232463 76 public void invertColor() {
ae22c247
NR
77 if (image != null) {
78 image.setColorInvert(!image.isColorInvert());
79 setImage(image);
25232463
NR
80 }
81 }
82
ae22c247
NR
83 @Override
84 public synchronized Panel setSize(TerminalSize size) {
85 if (image != null)
f06c8100 86 image.setSize(new Dimension(size.getColumns(), size.getRows()));
ae22c247
NR
87
88 super.setSize(size);
89
90 setImage(image);
91
92 return this;
d5260eeb 93 }
ae22c247
NR
94
95 /**
96 * Set/reset the {@link ImageText} to render.
97 *
98 * @param image
99 * the new {@link ImageText}
100 */
101 private void setImage(ImageText image) {
102 this.image = image;
25232463
NR
103 removeAllComponents();
104 txt = null;
ae22c247
NR
105 if (image != null) {
106 txt = new TextBox(image.getText());
25232463
NR
107 this.addComponent(txt, BorderLayout.Location.CENTER);
108 }
109 }
110}