Added Integer and String support to the ConfigPanel

This commit is contained in:
Kronos
2017-06-26 13:30:56 +10:00
parent 12e52a2482
commit 802ed51332
2 changed files with 81 additions and 14 deletions

View File

@@ -365,6 +365,10 @@ public class ConfigManager
{ {
return Boolean.parseBoolean(str); return Boolean.parseBoolean(str);
} }
if (type == int.class)
{
return Integer.parseInt(str);
}
return str; return str;
} }
} }

View File

@@ -25,20 +25,25 @@
package net.runelite.client.plugins.config; package net.runelite.client.plugins.config;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.EmptyBorder;
import net.runelite.client.RuneLite; import net.runelite.client.RuneLite;
import net.runelite.client.config.ConfigDescriptor; import net.runelite.client.config.ConfigDescriptor;
import net.runelite.client.config.ConfigItemDescriptor; import net.runelite.client.config.ConfigItemDescriptor;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.ui.PluginPanel; import net.runelite.client.ui.PluginPanel;
import static net.runelite.client.ui.PluginPanel.PANEL_HEIGHT;
import static net.runelite.client.ui.PluginPanel.PANEL_WIDTH;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -46,6 +51,10 @@ public class ConfigPanel extends PluginPanel
{ {
private static final Logger logger = LoggerFactory.getLogger(ConfigPanel.class); private static final Logger logger = LoggerFactory.getLogger(ConfigPanel.class);
private static final EmptyBorder BORDER_PADDING = new EmptyBorder(6, 6, 6, 6);
private static final int TEXT_FIELD_WIDTH = 12;
private static final int SPINNER_FIELD_WIDTH = 10;
private final RuneLite runelite = RuneLite.getRunelite(); private final RuneLite runelite = RuneLite.getRunelite();
private JScrollPane scrollPane; private JScrollPane scrollPane;
@@ -86,8 +95,9 @@ public class ConfigPanel extends PluginPanel
private JComponent createConfigPanel() private JComponent createConfigPanel()
{ {
JPanel panel = new JPanel(); JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.setBorder(BORDER_PADDING);
panel.add(new JLabel("Plugin configuration"), BorderLayout.NORTH); panel.setLayout(new GridLayout(0, 1, 0, 3));
panel.add(new JLabel("Plugin Configuration", SwingConstants.CENTER));
ConfigManager configManager = runelite.getConfigManager(); ConfigManager configManager = runelite.getConfigManager();
Collection<ConfigDescriptor> config = getConfig(); Collection<ConfigDescriptor> config = getConfig();
@@ -97,7 +107,7 @@ public class ConfigPanel extends PluginPanel
groupPanel.setLayout(new BorderLayout()); groupPanel.setLayout(new BorderLayout());
JButton viewGroupItemsButton = new JButton(cd.getGroup().name()); JButton viewGroupItemsButton = new JButton(cd.getGroup().name());
viewGroupItemsButton.addActionListener(ae -> openGroupConfigPanel(cd, configManager)); viewGroupItemsButton.addActionListener(ae -> openGroupConfigPanel(cd, configManager));
groupPanel.add(viewGroupItemsButton, BorderLayout.NORTH); groupPanel.add(viewGroupItemsButton);
panel.add(groupPanel); panel.add(groupPanel);
} }
@@ -108,31 +118,83 @@ public class ConfigPanel extends PluginPanel
return scrollPane; return scrollPane;
} }
private void changeConfiguration(ActionEvent ae, JCheckBox checkbox, ConfigDescriptor cd, ConfigItemDescriptor cid) private void changeConfiguration(JComponent component, ConfigDescriptor cd, ConfigItemDescriptor cid)
{ {
ConfigManager configManager = runelite.getConfigManager(); ConfigManager configManager = runelite.getConfigManager();
configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), "" + checkbox.isSelected()); if (component instanceof JCheckBox)
{
JCheckBox checkbox = (JCheckBox) component;
configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), "" + checkbox.isSelected());
}
if (component instanceof JSpinner)
{
JSpinner spinner = (JSpinner) component;
configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), "" + spinner.getValue());
}
if (component instanceof JTextField)
{
JTextField textField = (JTextField) component;
configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), textField.getText());
}
} }
private void openGroupConfigPanel(ConfigDescriptor cd, ConfigManager configManager) private void openGroupConfigPanel(ConfigDescriptor cd, ConfigManager configManager)
{ {
JPanel itemPanel = new JPanel(); JPanel itemPanel = new JPanel();
itemPanel.setLayout(new BoxLayout(itemPanel, BoxLayout.Y_AXIS)); itemPanel.setBorder(BORDER_PADDING);
itemPanel.add(new JLabel(cd.getGroup().name() + " Configuration"), BorderLayout.NORTH); itemPanel.setLayout(new GridLayout(0, 1, 0, 6));
itemPanel.add(new JLabel(cd.getGroup().name() + " Configuration", SwingConstants.CENTER));
for (ConfigItemDescriptor cid : cd.getItems()) for (ConfigItemDescriptor cid : cd.getItems())
{ {
JPanel item = new JPanel(); JPanel item = new JPanel();
item.setLayout(new BoxLayout(item, BoxLayout.X_AXIS)); item.setLayout(new BorderLayout());
item.add(new JLabel(cid.getItem().name())); item.add(new JLabel(cid.getItem().name()), BorderLayout.CENTER);
if (cid.getType() == boolean.class) if (cid.getType() == boolean.class)
{ {
JCheckBox checkbox = new JCheckBox(); JCheckBox checkbox = new JCheckBox();
checkbox.setSelected(Boolean.parseBoolean(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()))); checkbox.setSelected(Boolean.parseBoolean(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName())));
checkbox.addActionListener(ae -> changeConfiguration(ae, checkbox, cd, cid)); checkbox.addActionListener(ae -> changeConfiguration(checkbox, cd, cid));
item.add(checkbox); item.add(checkbox, BorderLayout.EAST);
}
if (cid.getType() == int.class)
{
int value = Integer.parseInt(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()));
SpinnerModel model = new SpinnerNumberModel(value, 0, Integer.MAX_VALUE, 1);
JSpinner spinner = new JSpinner(model);
Component editor = spinner.getEditor();
JFormattedTextField spinnerTextField = ((JSpinner.DefaultEditor) editor).getTextField();
spinnerTextField.setColumns(SPINNER_FIELD_WIDTH);
spinner.addChangeListener(ce -> changeConfiguration(spinner, cd, cid));
item.add(spinner, BorderLayout.EAST);
}
if (cid.getType() == String.class)
{
JTextField textField = new JTextField("", TEXT_FIELD_WIDTH);
textField.setText(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()));
textField.addFocusListener(new FocusListener()
{
@Override
public void focusGained(FocusEvent e)
{
}
@Override
public void focusLost(FocusEvent e)
{
changeConfiguration(textField, cd, cid);
}
});
item.add(textField, BorderLayout.EAST);
} }
itemPanel.add(item); itemPanel.add(item);
@@ -140,7 +202,7 @@ public class ConfigPanel extends PluginPanel
JButton backButton = new JButton("Back"); JButton backButton = new JButton("Back");
backButton.addActionListener(this::getBackButtonListener); backButton.addActionListener(this::getBackButtonListener);
itemPanel.add(backButton, BorderLayout.NORTH); itemPanel.add(backButton);
removeAll(); removeAll();
updateUI(); updateUI();
@@ -154,4 +216,5 @@ public class ConfigPanel extends PluginPanel
add(scrollPane, BorderLayout.NORTH); add(scrollPane, BorderLayout.NORTH);
} }
} }