From 454e54058a1fef0dbb8e4234eb5cdfb24c13880f Mon Sep 17 00:00:00 2001 From: l2- Date: Sun, 13 Aug 2017 17:12:36 -0400 Subject: [PATCH] Add support for color pickers in config --- .../runelite/client/config/ConfigManager.java | 26 ++++++++-- .../client/plugins/config/ConfigPanel.java | 52 +++++++++++++++++++ 2 files changed, 74 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java index 2613830724..4ab7702263 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java @@ -25,6 +25,8 @@ package net.runelite.client.config; import com.google.common.eventbus.EventBus; +import java.awt.Color; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -311,9 +313,9 @@ public class ConfigManager List items = Arrays.stream(inter.getMethods()) .filter(m -> m.getParameterCount() == 0) .map(m -> new ConfigItemDescriptor( - m.getDeclaredAnnotation(ConfigItem.class), - m.getReturnType() - )) + m.getDeclaredAnnotation(ConfigItem.class), + m.getReturnType() + )) .collect(Collectors.toList()); return new ConfigDescriptor(group, items); } @@ -355,7 +357,9 @@ public class ConfigManager } logger.debug("Setting default configuration value for {}.{} to {}", group.keyName(), item.keyName(), defaultValue); - setConfiguration(group.keyName(), item.keyName(), defaultValue.toString()); + + String valueString = objectToString(defaultValue); + setConfiguration(group.keyName(), item.keyName(), valueString); } } @@ -369,6 +373,20 @@ public class ConfigManager { return Integer.parseInt(str); } + if (type == Color.class) + { + return Color.decode(str); + } return str; } + + static String objectToString(Object object) + { + if (object instanceof Color) + { + return String.valueOf(((Color) object).getRGB()); + } + + return object.toString(); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index ded9517377..fbf41fd6af 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -25,20 +25,27 @@ package net.runelite.client.plugins.config; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JCheckBox; +import javax.swing.JColorChooser; import javax.swing.JComponent; import javax.swing.JFormattedTextField; +import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; @@ -48,6 +55,8 @@ import javax.swing.SpinnerModel; import javax.swing.SpinnerNumberModel; import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import net.runelite.client.RuneLite; import net.runelite.client.config.ConfigDescriptor; import net.runelite.client.config.ConfigItemDescriptor; @@ -141,6 +150,12 @@ public class ConfigPanel extends PluginPanel JTextField textField = (JTextField) component; configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), textField.getText()); } + + if (component instanceof JColorChooser) + { + JColorChooser jColorChooser = (JColorChooser) component; + configManager.setConfiguration(cd.getGroup().keyName(), cid.getItem().keyName(), String.valueOf(jColorChooser.getColor().getRGB())); + } } private void openGroupConfigPanel(ConfigDescriptor cd, ConfigManager configManager) @@ -205,6 +220,43 @@ public class ConfigPanel extends PluginPanel item.add(textField, BorderLayout.EAST); } + if (cid.getType() == Color.class) + { + JButton colorPicker = new JButton("Pick a color"); + colorPicker.setFocusable(false); + colorPicker.setBackground(Color.decode(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()))); + colorPicker.addMouseListener(new MouseAdapter() + { + @Override + public void mouseClicked(MouseEvent e) + { + final JFrame parent = new JFrame(); + parent.setLocation(RuneLite.getRunelite().getGui().getX(), RuneLite.getRunelite().getGui().getY()); + JColorChooser jColorChooser = new JColorChooser(Color.decode(configManager.getConfiguration(cd.getGroup().keyName(), cid.getItem().keyName()))); + jColorChooser.getSelectionModel().addChangeListener(new ChangeListener() + { + @Override + public void stateChanged(ChangeEvent e) + { + colorPicker.setBackground(jColorChooser.getColor()); + } + }); + parent.addWindowListener(new WindowAdapter() + { + @Override + public void windowClosing(WindowEvent e) + { + changeConfiguration(jColorChooser, cd, cid); + } + }); + parent.add(jColorChooser); + parent.pack(); + parent.setVisible(true); + } + }); + item.add(colorPicker, BorderLayout.EAST); + } + itemPanel.add(item); }