1 package be
.nikiroo
.utils
.ui
;
3 import java
.awt
.BorderLayout
;
4 import java
.awt
.event
.ActionEvent
;
5 import java
.awt
.event
.ActionListener
;
6 import java
.io
.IOException
;
9 import javax
.swing
.BoxLayout
;
10 import javax
.swing
.JButton
;
11 import javax
.swing
.JComponent
;
12 import javax
.swing
.JLabel
;
13 import javax
.swing
.JPanel
;
14 import javax
.swing
.JScrollPane
;
15 import javax
.swing
.border
.EmptyBorder
;
17 import be
.nikiroo
.utils
.resources
.Bundle
;
20 * A configuration panel for a {@link Bundle}.
22 * All the items in the given {@link Bundle} will be displayed in editable
23 * controls, with options to Save, Reset and/or Reset to the application default
29 * the type of {@link Bundle} to edit
31 public class ConfigEditor
<E
extends Enum
<E
>> extends JPanel
{
32 private static final long serialVersionUID
= 1L;
33 private List
<ConfigItem
<E
>> items
;
36 * Create a new {@link ConfigEditor} for this {@link Bundle}.
39 * a class instance of the item type to work on
41 * the {@link Bundle} to sort through
43 * the title to display before the options
45 public ConfigEditor(Class
<E
> type
, final Bundle
<E
> bundle
, String title
) {
46 this.setLayout(new BorderLayout());
47 JPanel main
= new JPanel();
49 JScrollPane scroll
= new JScrollPane(main
);
50 scroll
.getVerticalScrollBar().setUnitIncrement(16);
51 this.add(scroll
, BorderLayout
.CENTER
);
53 main
.setLayout(new BoxLayout(main
, BoxLayout
.PAGE_AXIS
));
55 main
.add(new JLabel(title
));
57 items
= ConfigItem
.getItems(type
, bundle
);
58 for (ConfigItem
<E
> item
: items
) {
62 main
.add(createButton("Reset", new ActionListener() {
64 public void actionPerformed(ActionEvent e
) {
65 for (ConfigItem
<E
> item
: items
) {
71 main
.add(createButton("Default", new ActionListener() {
73 public void actionPerformed(ActionEvent e
) {
74 Object snap
= bundle
.takeSnapshot();
76 for (ConfigItem
<E
> item
: items
) {
80 bundle
.restoreSnapshot(snap
);
84 main
.add(createButton("Save", new ActionListener() {
86 public void actionPerformed(ActionEvent e
) {
87 for (ConfigItem
<E
> item
: items
) {
93 } catch (IOException e1
) {
101 * Add an action button for this action.
108 private JComponent
createButton(String title
, ActionListener listener
) {
109 JButton button
= new JButton(title
);
110 button
.addActionListener(listener
);
112 JPanel panel
= new JPanel();
113 panel
.setLayout(new BorderLayout());
114 panel
.setBorder(new EmptyBorder(2, 10, 2, 10));
115 panel
.add(button
, BorderLayout
.CENTER
);