runelite-client: support enums in configuration

This commit is contained in:
l2-
2017-11-17 17:35:31 -05:00
committed by Adam
parent fdb5193c3e
commit 2e3fc669bb
2 changed files with 54 additions and 14 deletions

View File

@@ -407,6 +407,10 @@ public class ConfigManager
{ {
return Color.decode(str); return Color.decode(str);
} }
if (type.isEnum())
{
return Enum.valueOf((Class<? extends Enum>) type, str);
}
return str; return str;
} }
@@ -416,7 +420,10 @@ public class ConfigManager
{ {
return String.valueOf(((Color) object).getRGB()); return String.valueOf(((Color) object).getRGB());
} }
if (object instanceof Enum)
{
return ((Enum) object).name();
}
return object.toString(); return object.toString();
} }
} }

View File

@@ -32,6 +32,7 @@ import java.awt.GridLayout;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.FocusEvent; import java.awt.event.FocusEvent;
import java.awt.event.FocusListener; import java.awt.event.FocusListener;
import java.awt.event.ItemEvent;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
@@ -43,6 +44,7 @@ import javax.swing.BorderFactory;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JCheckBox; import javax.swing.JCheckBox;
import javax.swing.JColorChooser; import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JFormattedTextField; import javax.swing.JFormattedTextField;
import javax.swing.JFrame; import javax.swing.JFrame;
@@ -55,8 +57,6 @@ import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel; import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
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;
@@ -159,6 +159,12 @@ public class ConfigPanel extends PluginPanel
JColorChooser jColorChooser = (JColorChooser) component; JColorChooser jColorChooser = (JColorChooser) component;
configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), String.valueOf(jColorChooser.getColor().getRGB())); configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), String.valueOf(jColorChooser.getColor().getRGB()));
} }
if (component instanceof JComboBox)
{
JComboBox jComboBox = (JComboBox) component;
configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), ((Enum) jComboBox.getSelectedItem()).name());
}
} }
private void openGroupConfigPanel(ConfigDescriptor cd, ConfigManager configManager) private void openGroupConfigPanel(ConfigDescriptor cd, ConfigManager configManager)
@@ -166,7 +172,10 @@ public class ConfigPanel extends PluginPanel
JPanel itemPanel = new JPanel(); JPanel itemPanel = new JPanel();
itemPanel.setBorder(BORDER_PADDING); itemPanel.setBorder(BORDER_PADDING);
itemPanel.setLayout(new GridLayout(0, 1, 0, 6)); itemPanel.setLayout(new GridLayout(0, 1, 0, 6));
itemPanel.add(new JLabel(cd.getGroup().name() + " Configuration", SwingConstants.CENTER)); String name = cd.getGroup().name() + " Configuration";
JLabel title = new JLabel(name);
title.setToolTipText(cd.getGroup().description());
itemPanel.add(title, SwingConstants.CENTER);
for (ConfigItemDescriptor cid : cd.getItems()) for (ConfigItemDescriptor cid : cd.getItems())
{ {
@@ -177,7 +186,10 @@ public class ConfigPanel extends PluginPanel
JPanel item = new JPanel(); JPanel item = new JPanel();
item.setLayout(new BorderLayout()); item.setLayout(new BorderLayout());
item.add(new JLabel(cid.getItem().name()), BorderLayout.CENTER); name = cid.getItem().name();
JLabel configEntryName = new JLabel(name);
configEntryName.setToolTipText("<html>" + name + ":<br>" + cid.getItem().description() + "</html>");
item.add(configEntryName, BorderLayout.CENTER);
if (cid.getType() == boolean.class) if (cid.getType() == boolean.class)
{ {
@@ -217,9 +229,10 @@ public class ConfigPanel extends PluginPanel
public void focusLost(FocusEvent e) public void focusLost(FocusEvent e)
{ {
changeConfiguration(textField, cd, cid); changeConfiguration(textField, cd, cid);
textField.setToolTipText(textField.getText());
} }
}); });
textField.setToolTipText(textField.getText());
item.add(textField, BorderLayout.EAST); item.add(textField, BorderLayout.EAST);
} }
@@ -235,14 +248,7 @@ public class ConfigPanel extends PluginPanel
{ {
final JFrame parent = new JFrame(); final JFrame parent = new JFrame();
JColorChooser jColorChooser = new JColorChooser(Color.decode(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()))); JColorChooser jColorChooser = new JColorChooser(Color.decode(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName())));
jColorChooser.getSelectionModel().addChangeListener(new ChangeListener() jColorChooser.getSelectionModel().addChangeListener(e1 -> colorPicker.setBackground(jColorChooser.getColor()));
{
@Override
public void stateChanged(ChangeEvent e)
{
colorPicker.setBackground(jColorChooser.getColor());
}
});
parent.addWindowListener(new WindowAdapter() parent.addWindowListener(new WindowAdapter()
{ {
@Override @Override
@@ -259,6 +265,33 @@ public class ConfigPanel extends PluginPanel
item.add(colorPicker, BorderLayout.EAST); item.add(colorPicker, BorderLayout.EAST);
} }
if (cid.getType().isEnum())
{
Class<? extends Enum> type = (Class<? extends Enum>) cid.getType();
JComboBox box = new JComboBox(type.getEnumConstants());
box.setFocusable(false);
box.setPrototypeDisplayValue("XXXXXXXX"); //sorry but this is the way to keep the size of the combobox in check.
try
{
Enum selectedItem = Enum.valueOf(type, configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()));
box.setSelectedItem(selectedItem);
box.setToolTipText(selectedItem.toString());
}
catch (IllegalArgumentException ex)
{
logger.debug("invalid seleced item", ex);
}
box.addItemListener(e ->
{
if (e.getStateChange() == ItemEvent.SELECTED)
{
changeConfiguration(box, cd, cid);
box.setToolTipText(box.getSelectedItem().toString());
}
});
item.add(box, BorderLayout.EAST);
}
itemPanel.add(item); itemPanel.add(item);
} }