X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fui%2FConfigEditor.java;h=c687c98fee5637dfb8e10b7bad32f6be102ef9d5;hb=d46b7b96f94e88a776bcd2dfd756549ffb300cc9;hp=7bdf17a24abe3adeec66af828674f2258b902119;hpb=cd0c27d2e457ea19fcd9def879e1534a528292c2;p=fanfix.git diff --git a/src/be/nikiroo/utils/ui/ConfigEditor.java b/src/be/nikiroo/utils/ui/ConfigEditor.java index 7bdf17a..c687c98 100644 --- a/src/be/nikiroo/utils/ui/ConfigEditor.java +++ b/src/be/nikiroo/utils/ui/ConfigEditor.java @@ -1,9 +1,11 @@ package be.nikiroo.utils.ui; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import javax.swing.BoxLayout; @@ -12,9 +14,13 @@ import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; +import javax.swing.JTextArea; import javax.swing.border.EmptyBorder; +import javax.swing.border.TitledBorder; +import be.nikiroo.utils.StringUtils; import be.nikiroo.utils.resources.Bundle; +import be.nikiroo.utils.resources.MetaInfo; /** * A configuration panel for a {@link Bundle}. @@ -30,7 +36,7 @@ import be.nikiroo.utils.resources.Bundle; */ public class ConfigEditor> extends JPanel { private static final long serialVersionUID = 1L; - private List> items; + private List> items; /** * Create a new {@link ConfigEditor} for this {@link Bundle}. @@ -44,36 +50,39 @@ public class ConfigEditor> extends JPanel { */ public ConfigEditor(Class type, final Bundle bundle, String title) { this.setLayout(new BorderLayout()); - JPanel main = new JPanel(); - - JScrollPane scroll = new JScrollPane(main); - scroll.getVerticalScrollBar().setUnitIncrement(16); - this.add(scroll, BorderLayout.CENTER); + JPanel main = new JPanel(); main.setLayout(new BoxLayout(main, BoxLayout.PAGE_AXIS)); + main.setBorder(new EmptyBorder(5, 5, 5, 5)); main.add(new JLabel(title)); - items = ConfigItem.getItems(type, bundle); - for (ConfigItem item : items) { - main.add(item); + items = new ArrayList>(); + List> groupedItems = MetaInfo.getItems(type, bundle); + for (MetaInfo item : groupedItems) { + // will init this.items + addItem(main, item, 0); } - main.add(createButton("Reset", new ActionListener() { + JPanel buttons = new JPanel(); + buttons.setLayout(new BoxLayout(buttons, BoxLayout.PAGE_AXIS)); + buttons.setBorder(new EmptyBorder(5, 5, 5, 5)); + + buttons.add(createButton("Reset", new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - for (ConfigItem item : items) { + for (MetaInfo item : items) { item.reload(); } } })); - main.add(createButton("Default", new ActionListener() { + buttons.add(createButton("Default", new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Object snap = bundle.takeSnapshot(); bundle.reload(true); - for (ConfigItem item : items) { + for (MetaInfo item : items) { item.reload(); } bundle.reload(false); @@ -81,11 +90,11 @@ public class ConfigEditor> extends JPanel { } })); - main.add(createButton("Save", new ActionListener() { + buttons.add(createButton("Save", new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - for (ConfigItem item : items) { - item.save(); + for (MetaInfo item : items) { + item.save(true); } try { @@ -95,6 +104,43 @@ public class ConfigEditor> extends JPanel { } } })); + + JScrollPane scroll = new JScrollPane(main); + scroll.getVerticalScrollBar().setUnitIncrement(16); + + this.add(scroll, BorderLayout.CENTER); + this.add(buttons, BorderLayout.SOUTH); + } + + private void addItem(JPanel main, MetaInfo item, int nhgap) { + if (item.isGroup()) { + JPanel bpane = new JPanel(new BorderLayout()); + bpane.setBorder(new TitledBorder(item.getName())); + JPanel pane = new JPanel(); + pane.setBorder(new EmptyBorder(5, 5, 5, 5)); + pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS)); + + String info = item.getDescription(); + info = StringUtils.justifyTexts(info, 100); + if (!info.isEmpty()) { + info = info + "\n"; + JTextArea text = new JTextArea(info); + text.setWrapStyleWord(true); + text.setOpaque(false); + text.setForeground(new Color(100, 100, 180)); + text.setEditable(false); + pane.add(text); + } + + for (MetaInfo subitem : item) { + addItem(pane, subitem, nhgap + 11); + } + bpane.add(pane, BorderLayout.CENTER); + main.add(bpane); + } else { + items.add(item); + main.add(ConfigItem.createItem(item, nhgap)); + } } /**