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
;
18 import be
.nikiroo
.utils
.resources
.TransBundle
;
21 * A configuration panel for a {@link Bundle}.
23 * All the items in the given {@link Bundle} will be displayed in editable
24 * controls, with options to Save, Reset and/or Reset to the application default
30 * the type of {@link Bundle} to edit
32 public class ConfigEditor
<E
extends Enum
<E
>> extends JPanel
{
33 private static final long serialVersionUID
= 1L;
34 private List
<ConfigItem
<E
>> items
;
37 * Create a new {@link ConfigEditor} for this {@link Bundle}.
40 * a class instance of the item type to work on
42 * the {@link Bundle} to sort through
44 * the title to display before the options
46 public ConfigEditor(Class
<E
> type
, final Bundle
<E
> bundle
, String title
) {
47 this.setLayout(new BorderLayout());
48 JPanel main
= new JPanel();
50 JScrollPane scroll
= new JScrollPane(main
);
51 scroll
.getVerticalScrollBar().setUnitIncrement(16);
52 this.add(scroll
, BorderLayout
.CENTER
);
54 main
.setLayout(new BoxLayout(main
, BoxLayout
.PAGE_AXIS
));
56 main
.add(new JLabel(title
));
58 items
= ConfigItem
.getItems(type
, bundle
);
59 for (ConfigItem
<E
> item
: items
) {
63 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() {
72 public void actionPerformed(ActionEvent e
) {
73 Object snap
= bundle
.takeSnapshot();
75 for (ConfigItem
<E
> item
: items
) {
79 bundle
.restoreSnapshot(snap
);
83 main
.add(createButton("Save", new ActionListener() {
84 public void actionPerformed(ActionEvent e
) {
85 for (ConfigItem
<E
> item
: items
) {
91 } catch (IOException e1
) {
99 * Add an action button for this action.
106 private JComponent
createButton(String title
, ActionListener listener
) {
107 JButton button
= new JButton(title
);
108 button
.addActionListener(listener
);
110 JPanel panel
= new JPanel();
111 panel
.setLayout(new BorderLayout());
112 panel
.setBorder(new EmptyBorder(2, 10, 2, 10));
113 panel
.add(button
, BorderLayout
.CENTER
);