Add support for color pickers in config

This commit is contained in:
l2-
2017-08-13 17:12:36 -04:00
committed by Adam
parent 61f276a799
commit 454e54058a
2 changed files with 74 additions and 4 deletions

View File

@@ -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<ConfigItemDescriptor> 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();
}
}

View File

@@ -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);
}