project: Make Rl their config sets a lot less ugly and more user friendly
This commit is contained in:
@@ -24,7 +24,6 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.client.plugins.config;
|
package net.runelite.client.plugins.config;
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
|
||||||
import com.google.common.base.Splitter;
|
import com.google.common.base.Splitter;
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import com.google.common.collect.ComparisonChain;
|
import com.google.common.collect.ComparisonChain;
|
||||||
@@ -53,11 +52,14 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.swing.BorderFactory;
|
import javax.swing.BorderFactory;
|
||||||
import javax.swing.BoxLayout;
|
import javax.swing.BoxLayout;
|
||||||
@@ -80,7 +82,6 @@ import javax.swing.JSpinner;
|
|||||||
import javax.swing.JTextArea;
|
import javax.swing.JTextArea;
|
||||||
import javax.swing.JTextField;
|
import javax.swing.JTextField;
|
||||||
import javax.swing.ListCellRenderer;
|
import javax.swing.ListCellRenderer;
|
||||||
import javax.swing.ListSelectionModel;
|
|
||||||
import javax.swing.ScrollPaneConstants;
|
import javax.swing.ScrollPaneConstants;
|
||||||
import javax.swing.SpinnerModel;
|
import javax.swing.SpinnerModel;
|
||||||
import javax.swing.SpinnerNumberModel;
|
import javax.swing.SpinnerNumberModel;
|
||||||
@@ -130,7 +131,6 @@ import net.runelite.client.util.ImageUtil;
|
|||||||
import net.runelite.client.util.LinkBrowser;
|
import net.runelite.client.util.LinkBrowser;
|
||||||
import net.runelite.client.util.SwingUtil;
|
import net.runelite.client.util.SwingUtil;
|
||||||
import net.runelite.client.util.Text;
|
import net.runelite.client.util.Text;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
class ConfigPanel extends PluginPanel
|
class ConfigPanel extends PluginPanel
|
||||||
@@ -935,32 +935,31 @@ class ConfigPanel extends PluginPanel
|
|||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JList<Enum<?>> createList(ConfigDescriptor cd, ConfigItemDescriptor cid)
|
private JPanel createList(ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
{
|
{
|
||||||
ParameterizedType parameterizedType = (ParameterizedType) cid.getType();
|
ParameterizedType parameterizedType = (ParameterizedType) cid.getType();
|
||||||
Class<? extends Enum> type = (Class<? extends Enum>) parameterizedType.getActualTypeArguments()[0];
|
Class<? extends Enum> type = (Class<? extends Enum>) parameterizedType.getActualTypeArguments()[0];
|
||||||
Set<? extends Enum> set = configManager.getConfiguration(cd.getGroup().value(), null,
|
Set<? extends Enum> set = configManager.getConfiguration(cd.getGroup().value(), null,
|
||||||
cid.getItem().keyName(), parameterizedType);
|
cid.getItem().keyName(), parameterizedType);
|
||||||
|
|
||||||
JList<Enum<?>> list = new JList<Enum<?>>(type.getEnumConstants()); // NOPMD: UseDiamondOperator
|
JPanel enumsetLayout = new JPanel(new GridLayout(0, 2));
|
||||||
list.setCellRenderer(listCellRenderer);
|
List<ToggleButton> jcheckboxes = new ArrayList<>();
|
||||||
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
|
||||||
list.setLayoutOrientation(JList.VERTICAL);
|
Set<?> selectedItems = new HashSet(Objects.requireNonNullElse(set, Collections.emptySet()));
|
||||||
list.setSelectedIndices(
|
|
||||||
MoreObjects.firstNonNull(set, Collections.emptySet())
|
for (Object obj : type.getEnumConstants())
|
||||||
.stream()
|
|
||||||
.mapToInt(e -> ArrayUtils.indexOf(type.getEnumConstants(), e))
|
|
||||||
.toArray());
|
|
||||||
list.addFocusListener(new FocusAdapter()
|
|
||||||
{
|
{
|
||||||
@Override
|
ToggleButton checkbox = new ToggleButton(obj);
|
||||||
public void focusLost(FocusEvent e)
|
checkbox.setBackground(ColorScheme.DARK_GRAY_COLOR);
|
||||||
{
|
checkbox.setSelected(selectedItems.contains(obj));
|
||||||
changeConfiguration(list, cd, cid);
|
jcheckboxes.add(checkbox);
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return list;
|
enumsetLayout.add(checkbox);
|
||||||
|
}
|
||||||
|
|
||||||
|
jcheckboxes.forEach(checkbox -> checkbox.addActionListener(ae -> changeConfiguration(jcheckboxes, cd, cid)));
|
||||||
|
|
||||||
|
return enumsetLayout;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JPanel createEnumSetLayout(ConfigDescriptor cd, ConfigItemDescriptor cid)
|
private JPanel createEnumSetLayout(ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
@@ -975,13 +974,13 @@ class ConfigPanel extends PluginPanel
|
|||||||
}
|
}
|
||||||
|
|
||||||
JPanel enumsetLayout = new JPanel(new GridLayout(0, 2));
|
JPanel enumsetLayout = new JPanel(new GridLayout(0, 2));
|
||||||
List<JCheckBox> jcheckboxes = new ArrayList<>();
|
List<ToggleButton> jcheckboxes = new ArrayList<>();
|
||||||
|
|
||||||
for (Object obj : enumType.getEnumConstants())
|
for (Object obj : enumType.getEnumConstants())
|
||||||
{
|
{
|
||||||
String option = Text.titleCase((Enum<?>) obj);
|
String option = Text.titleCase((Enum<?>) obj);
|
||||||
|
|
||||||
JCheckBox checkbox = new ToggleButton(option);
|
ToggleButton checkbox = new ToggleButton(option);
|
||||||
checkbox.setBackground(ColorScheme.DARK_GRAY_COLOR);
|
checkbox.setBackground(ColorScheme.DARK_GRAY_COLOR);
|
||||||
checkbox.setSelected(enumSet.toString().contains(String.valueOf(obj)));
|
checkbox.setSelected(enumSet.toString().contains(String.valueOf(obj)));
|
||||||
jcheckboxes.add(checkbox);
|
jcheckboxes.add(checkbox);
|
||||||
@@ -1031,22 +1030,32 @@ class ConfigPanel extends PluginPanel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeConfiguration(List<JCheckBox> components, ConfigDescriptor cd, ConfigItemDescriptor cid)
|
private void changeConfiguration(List<ToggleButton> components, ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
{
|
{
|
||||||
EnumSet enumSet = EnumSet.noneOf(cid.getItem().enumClass());
|
if (cid.getItem().enumClass() != Enum.class)
|
||||||
|
|
||||||
//noinspection unchecked
|
|
||||||
components.forEach(value ->
|
|
||||||
{
|
{
|
||||||
if (value.isSelected())
|
EnumSet enumSet = EnumSet.noneOf(cid.getItem().enumClass());
|
||||||
|
|
||||||
|
//noinspection unchecked
|
||||||
|
components.forEach(value ->
|
||||||
{
|
{
|
||||||
enumSet.add(Enum.valueOf(cid.getItem().enumClass(), String.valueOf(value.getText()).toUpperCase().replace(" ", "_")));
|
if (value.isSelected())
|
||||||
}
|
{
|
||||||
});
|
enumSet.add(Enum.valueOf(cid.getItem().enumClass(), String.valueOf(value.getText()).toUpperCase().replace(" ", "_")));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), enumSet);
|
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), enumSet);
|
||||||
|
}
|
||||||
rebuild();
|
else
|
||||||
|
{
|
||||||
|
Set<Object> values = components
|
||||||
|
.stream()
|
||||||
|
.filter(ToggleButton::isSelected)
|
||||||
|
.map(ToggleButton::getObject)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), values);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeConfiguration(Component component, ConfigDescriptor cd, ConfigItemDescriptor cid)
|
private void changeConfiguration(Component component, ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import javax.swing.JCheckBox;
|
|||||||
import net.runelite.client.ui.ColorScheme;
|
import net.runelite.client.ui.ColorScheme;
|
||||||
import net.runelite.client.util.ImageUtil;
|
import net.runelite.client.util.ImageUtil;
|
||||||
import net.runelite.client.util.SwingUtil;
|
import net.runelite.client.util.SwingUtil;
|
||||||
|
import net.runelite.client.util.Text;
|
||||||
|
|
||||||
public class ToggleButton extends JCheckBox
|
public class ToggleButton extends JCheckBox
|
||||||
{
|
{
|
||||||
@@ -38,6 +39,8 @@ public class ToggleButton extends JCheckBox
|
|||||||
private static final ImageIcon OFF_SWITCHER;
|
private static final ImageIcon OFF_SWITCHER;
|
||||||
private static final ImageIcon DISABLED_SWITCHER;
|
private static final ImageIcon DISABLED_SWITCHER;
|
||||||
|
|
||||||
|
private final Object object;
|
||||||
|
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
BufferedImage onSwitcher = ImageUtil.loadImageResource(ToggleButton.class, "switcher_on.png");
|
BufferedImage onSwitcher = ImageUtil.loadImageResource(ToggleButton.class, "switcher_on.png");
|
||||||
@@ -63,6 +66,8 @@ public class ToggleButton extends JCheckBox
|
|||||||
public ToggleButton()
|
public ToggleButton()
|
||||||
{
|
{
|
||||||
super(OFF_SWITCHER);
|
super(OFF_SWITCHER);
|
||||||
|
this.object = null;
|
||||||
|
|
||||||
setSelectedIcon(ON_SWITCHER);
|
setSelectedIcon(ON_SWITCHER);
|
||||||
setDisabledIcon(DISABLED_SWITCHER);
|
setDisabledIcon(DISABLED_SWITCHER);
|
||||||
SwingUtil.removeButtonDecorations(this);
|
SwingUtil.removeButtonDecorations(this);
|
||||||
@@ -71,8 +76,25 @@ public class ToggleButton extends JCheckBox
|
|||||||
public ToggleButton(String text)
|
public ToggleButton(String text)
|
||||||
{
|
{
|
||||||
super(text, OFF_SWITCHER, false);
|
super(text, OFF_SWITCHER, false);
|
||||||
|
this.object = null;
|
||||||
|
|
||||||
setSelectedIcon(ON_SWITCHER);
|
setSelectedIcon(ON_SWITCHER);
|
||||||
setDisabledIcon(DISABLED_SWITCHER);
|
setDisabledIcon(DISABLED_SWITCHER);
|
||||||
SwingUtil.removeButtonDecorations(this);
|
SwingUtil.removeButtonDecorations(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ToggleButton(Object object)
|
||||||
|
{
|
||||||
|
super(Text.titleCase((Enum<?>) object), OFF_SWITCHER, false);
|
||||||
|
this.object = object;
|
||||||
|
|
||||||
|
setSelectedIcon(ON_SWITCHER);
|
||||||
|
setDisabledIcon(DISABLED_SWITCHER);
|
||||||
|
SwingUtil.removeButtonDecorations(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getObject()
|
||||||
|
{
|
||||||
|
return this.object;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user