Skip to content
This repository has been archived by the owner on Apr 8, 2023. It is now read-only.

Commit

Permalink
Merge pull request #2263 from Owain94/enumsets
Browse files Browse the repository at this point in the history
config: render EnumSet as checkboxes
  • Loading branch information
Owain94 authored Jan 21, 2020
2 parents 6789f6e + c2119b1 commit b78fe11
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,6 @@

boolean parse() default false;

/**
* For Config items that have a value of multiple enums,
*
* @return the number of rows that are display in the item without having to scroll.
*/
int displayRows() default 2;

Class<?> clazz() default void.class;

String method() default "";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,14 @@ static Object stringToObject(String str, Class<?> type)
EnumSet enumSet = EnumSet.noneOf(enumClass);
for (String s : splitStr)
{
enumSet.add(Enum.valueOf(enumClass, s.replace("[", "").replace("]", "")));
try
{
enumSet.add(Enum.valueOf(enumClass, s.replace("[", "").replace("]", "")));
}
catch (IllegalArgumentException ignore)
{
return EnumSet.noneOf(enumClass);
}
}
return enumSet;
}
Expand Down Expand Up @@ -617,6 +624,11 @@ static String objectToString(Object object)
}
if (object instanceof EnumSet)
{
if (((EnumSet) object).size() == 0)
{
return getElementType((EnumSet) object).getCanonicalName() + "{}";
}

return ((EnumSet) object).toArray()[0].getClass().getCanonicalName() + "{" + object.toString() + "}";
}
if (object instanceof Number)
Expand All @@ -626,6 +638,15 @@ static String objectToString(Object object)
return object.toString();
}

public static <T extends Enum<T>> Class<T> getElementType(EnumSet<T> enumSet)
{
if (enumSet.isEmpty())
{
enumSet = EnumSet.complementOf(enumSet);
}
return enumSet.iterator().next().getDeclaringClass();
}

public void sendConfig()
{
boolean changed;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@

import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
Expand Down Expand Up @@ -65,7 +65,6 @@
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;
Expand Down Expand Up @@ -361,7 +360,6 @@ else if (parentSection != null)
}



private Boolean parse(ConfigItem item, String value)
{
try
Expand Down Expand Up @@ -843,9 +841,6 @@ public void focusLost(FocusEvent e)
}
else if (cid.getType() == EnumSet.class)
{

int displayRows = cid.getItem().displayRows();

Class enumType = cid.getItem().enumClass();

EnumSet enumSet = configManager.getConfiguration(cd.getGroup().value(),
Expand All @@ -854,37 +849,25 @@ else if (cid.getType() == EnumSet.class)
{
enumSet = EnumSet.noneOf(enumType);
}
JList jList = new JList(enumType.getEnumConstants());
jList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

if (!enumSet.isEmpty() && enumSet.size() > 1)
{
int[] selected = new int[enumSet.size()];
for (int i = 0; i < enumSet.size(); i++)
{
if (enumSet.contains(EnumSet.allOf(enumType).toArray()[i]))
{
selected[i] = Lists.newArrayList(EnumSet.allOf(enumType)).indexOf(enumSet.toArray()[i]);
}
}
jList.setSelectedIndices(selected);
}
if (enumSet.size() == 1)
JPanel enumsetLayout = new JPanel(new GridLayout(0, 2));
List<JCheckBox> jcheckboxes = new ArrayList<>();

for (Object obj : enumType.getEnumConstants())
{
enumSet.forEach(anObject -> jList.setSelectedValue(anObject, true));
String option = String.valueOf(obj).toLowerCase().replace("_", " ");

JCheckBox checkbox = new JCheckBox(option);
checkbox.setBackground(ColorScheme.LIGHT_GRAY_COLOR);
checkbox.setSelected(enumSet.contains(obj));
jcheckboxes.add(checkbox);

enumsetLayout.add(checkbox);
}
jList.setVisibleRowCount(displayRows);
jList.setPrototypeCellValue("XXXXXXXXXX");
jList.setCellRenderer(new ComboBoxListRenderer());
jList.setLayoutOrientation(JList.VERTICAL);
jList.setSelectionBackground(Color.decode("708090"));
jList.addListSelectionListener(e -> changeConfiguration(jList, cd, cid));
JScrollPane jScrollPane = new JScrollPane();
jScrollPane.setViewportView(jList);
jScrollPane.setViewportBorder(BorderFactory.createLoweredSoftBevelBorder());

item.add(jScrollPane, BorderLayout.SOUTH);

jcheckboxes.forEach(checkbox -> checkbox.addActionListener(ae -> changeConfiguration(jcheckboxes, cd, cid)));

item.add(enumsetLayout, BorderLayout.SOUTH);
}

JPanel titleSection = titleSectionWidgets.get(cid.getItem().titleSection());
Expand Down Expand Up @@ -938,6 +921,32 @@ else if (section != null)
revalidate();
}

private void changeConfiguration(List<JCheckBox> components, ConfigDescriptor cd, ConfigItemDescriptor cid)
{
Class<? extends Enum> enumType = cid.getItem().enumClass();
EnumSet enumSet = configManager.getConfiguration(cd.getGroup().value(),
cid.getItem().keyName(), EnumSet.class);
if (enumSet == null)
{
//noinspection unchecked
enumSet = EnumSet.noneOf(enumType);
}
enumSet.clear();

EnumSet finalEnumSet = enumSet;

//noinspection unchecked
components.forEach(value ->
{
if (value.isSelected())
{
finalEnumSet.add(Enum.valueOf(cid.getItem().enumClass(), String.valueOf(value.getText()).toUpperCase().replace(" ", "_")));
}
});

configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), finalEnumSet);
}

private void changeConfiguration(Component component, ConfigDescriptor cd, ConfigItemDescriptor cid)
{
final ConfigItem configItem = cid.getItem();
Expand Down Expand Up @@ -985,27 +994,6 @@ else if (component instanceof JComboBox)
JComboBox jComboBox = (JComboBox) component;
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), ((Enum) jComboBox.getSelectedItem()).name());
}
else if (component instanceof JList)
{
JList jList = (JList) component;

Class<? extends Enum> enumType = cid.getItem().enumClass();
EnumSet enumSet = configManager.getConfiguration(cd.getGroup().value(),
cid.getItem().keyName(), EnumSet.class);
if (enumSet == null)
{
//noinspection unchecked
enumSet = EnumSet.noneOf(enumType);
}
enumSet.clear();

EnumSet finalEnumSet = enumSet;
//noinspection unchecked
jList.getSelectedValuesList().forEach(value ->
finalEnumSet.add(Enum.valueOf(cid.getItem().enumClass(), value.toString())));

configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), finalEnumSet);
}
else if (component instanceof HotkeyButton)
{
HotkeyButton hotkeyButton = (HotkeyButton) component;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -482,42 +482,60 @@ private void updateConfig()
if (this.highlightOwnPlayer)
{
relationColorHashMap.put(PlayerRelation.SELF, config.getOwnPlayerColor());
locationHashMap.put(PlayerRelation.SELF, EnumSet.copyOf(config.selfIndicatorModes()).toArray());
if (config.selfIndicatorModes() != null)
{
locationHashMap.put(PlayerRelation.SELF, EnumSet.copyOf(config.selfIndicatorModes()).toArray());
}
}

this.highlightFriends = config.highlightFriends();
if (this.highlightFriends)
{
relationColorHashMap.put(PlayerRelation.FRIEND, config.getFriendColor());
locationHashMap.put(PlayerRelation.FRIEND, config.friendIndicatorMode().toArray());
if (config.friendIndicatorMode() != null)
{
locationHashMap.put(PlayerRelation.FRIEND, config.friendIndicatorMode().toArray());
}
}

this.highlightClan = config.highlightClan();
if (this.highlightClan)
{
relationColorHashMap.put(PlayerRelation.CLAN, config.getClanColor());
locationHashMap.put(PlayerRelation.CLAN, config.clanIndicatorModes().toArray());
if (config.clanIndicatorModes() != null)
{
locationHashMap.put(PlayerRelation.CLAN, config.clanIndicatorModes().toArray());
}
}

this.highlightTeam = config.highlightTeamMembers();
if (this.highlightTeam)
{
relationColorHashMap.put(PlayerRelation.TEAM, config.getTeamcolor());
locationHashMap.put(PlayerRelation.TEAM, config.teamIndicatorModes().toArray());
if (config.teamIndicatorModes() != null)
{
locationHashMap.put(PlayerRelation.TEAM, config.teamIndicatorModes().toArray());
}
}

this.highlightOther = config.highlightOtherPlayers();
if (this.highlightOther)
{
relationColorHashMap.put(PlayerRelation.OTHER, config.getOtherColor());
locationHashMap.put(PlayerRelation.OTHER, EnumSet.copyOf(config.otherIndicatorModes()).toArray());
if (config.otherIndicatorModes() != null)
{
locationHashMap.put(PlayerRelation.OTHER, EnumSet.copyOf(config.otherIndicatorModes()).toArray());
}
}

this.highlightTargets = config.highlightTargets();
if (this.highlightTargets)
{
relationColorHashMap.put(PlayerRelation.TARGET, config.getTargetsColor());
locationHashMap.put(PlayerRelation.TARGET, config.targetsIndicatorModes().toArray());
if (config.targetsIndicatorModes() != null)
{
locationHashMap.put(PlayerRelation.TARGET, config.targetsIndicatorModes().toArray());
}
}

this.highlightCallers = config.highlightCallers();
Expand All @@ -527,15 +545,21 @@ private void updateConfig()

this.configCallers = config.callers();
relationColorHashMap.put(PlayerRelation.CALLER, config.callerColor());
locationHashMap.put(PlayerRelation.CALLER, config.callerHighlightOptions().toArray());
if (config.callerHighlightOptions() != null)
{
locationHashMap.put(PlayerRelation.CALLER, config.callerHighlightOptions().toArray());
}
getCallerList();
}

this.highlightCallerTargets = config.callersTargets();
if (this.highlightCallerTargets)
{
relationColorHashMap.put(PlayerRelation.CALLER_TARGET, config.callerTargetColor());
locationHashMap.put(PlayerRelation.CALLER_TARGET, config.callerTargetHighlightOptions().toArray());
if (config.callerTargetHighlightOptions() != null)
{
locationHashMap.put(PlayerRelation.CALLER_TARGET, config.callerTargetHighlightOptions().toArray());
}
}

this.showClanRanks = config.showClanRanks();
Expand Down

0 comments on commit b78fe11

Please sign in to comment.