ConfigItem: improve logic, UI
[fanfix.git] / src / be / nikiroo / utils / ui / ConfigItem.java
CommitLineData
d350b96b
NR
1package be.nikiroo.utils.ui;
2
3import java.awt.BorderLayout;
d350b96b 4
9e834013 5import javax.swing.JCheckBox;
8517b60c 6import javax.swing.JLabel;
d350b96b
NR
7import javax.swing.JPanel;
8import javax.swing.JTextField;
d350b96b
NR
9
10import be.nikiroo.utils.resources.Bundle;
9e834013
NR
11import be.nikiroo.utils.resources.Meta.Format;
12import be.nikiroo.utils.resources.MetaInfo;
d350b96b
NR
13
14/**
15 * A graphical item that reflect a configuration option from the given
16 * {@link Bundle}.
17 *
18 * @author niki
db31c358 19 *
d350b96b
NR
20 * @param <E>
21 * the type of {@link Bundle} to edit
22 */
23public class ConfigItem<E extends Enum<E>> extends JPanel {
24 private static final long serialVersionUID = 1L;
db31c358 25
9e834013 26 public ConfigItem(final MetaInfo<E> info) {
d350b96b 27 this.setLayout(new BorderLayout());
8517b60c 28 // this.setBorder(new EmptyBorder(2, 10, 2, 10));
d350b96b 29
9e834013
NR
30 if (info.getFormat() == Format.BOOLEAN) {
31 final JCheckBox field = new JCheckBox();
32 field.setToolTipText(info.getDescription());
33 Boolean state = info.getBoolean();
34 if (state == null) {
35 info.getDefaultBoolean();
db31c358 36 }
d350b96b 37
9e834013
NR
38 // Should not happen!
39 if (state == null) {
40 System.err
8517b60c
NR
41 .println("No default value given for BOOLEAN parameter \""
42 + info.getName()
43 + "\", we consider it is FALSE");
9e834013
NR
44 state = false;
45 }
d350b96b 46
9e834013
NR
47 field.setSelected(state);
48
8517b60c 49 info.addReloadedListener(new Runnable() {
9e834013
NR
50 @Override
51 public void run() {
8517b60c
NR
52 Boolean state = info.getBoolean();
53 if (state == null) {
54 info.getDefaultBoolean();
55 }
56 if (state == null) {
57 state = false;
58 }
59
60 field.setSelected(state);
61 }
62 });
63 info.addSaveListener(new Runnable() {
64 @Override
65 public void run() {
66 info.setBoolean(field.isSelected());
9e834013
NR
67 }
68 });
69
8517b60c 70 this.add(new JLabel(info.getName() + ": "), BorderLayout.WEST);
9e834013
NR
71 this.add(field, BorderLayout.CENTER);
72 } else {
73 final JTextField field = new JTextField();
74 field.setToolTipText(info.getDescription());
75 field.setText(info.getString());
76
8517b60c 77 info.addReloadedListener(new Runnable() {
9e834013
NR
78 @Override
79 public void run() {
80 field.setText(info.getString());
81 }
82 });
8517b60c
NR
83 info.addSaveListener(new Runnable() {
84 @Override
85 public void run() {
86 info.setString(field.getText());
87 }
88 });
9e834013 89
8517b60c 90 this.add(new JLabel(info.getName() + ": "), BorderLayout.WEST);
9e834013 91 this.add(field, BorderLayout.CENTER);
d350b96b 92 }
d350b96b
NR
93 }
94}