pluginsorter: Make plugin sorting configurable (#1766)

This commit is contained in:
Owain van Brakel
2019-10-13 07:20:18 +02:00
committed by James
parent 89027e747e
commit bfcfdd3ba8
4 changed files with 87 additions and 31 deletions

View File

@@ -8,5 +8,6 @@ public enum PluginType
UTILITY, UTILITY,
GENERAL_USE, GENERAL_USE,
EXTERNAL, EXTERNAL,
PLUGIN_ORGANIZER PLUGIN_ORGANIZER,
IMPORTANT
} }

View File

@@ -26,7 +26,6 @@ package net.runelite.client.plugins.config;
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.ImmutableList;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
@@ -46,7 +45,6 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -107,7 +105,6 @@ import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginInstantiationException; import net.runelite.client.plugins.PluginInstantiationException;
import net.runelite.client.plugins.PluginManager; import net.runelite.client.plugins.PluginManager;
import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.ColorScheme;
import net.runelite.client.ui.DynamicGridLayout; import net.runelite.client.ui.DynamicGridLayout;
import net.runelite.client.ui.FontManager; import net.runelite.client.ui.FontManager;
@@ -320,20 +317,6 @@ public class ConfigPanel extends PluginPanel
chatColor.nameLabel.setForeground(Color.WHITE); chatColor.nameLabel.setForeground(Color.WHITE);
plugins.add(chatColor); plugins.add(chatColor);
ImmutableList<PluginType> definedOrder = ImmutableList.of(PluginType.EXTERNAL, PluginType.PVM, PluginType.SKILLING, PluginType.PVP, PluginType.UTILITY, PluginType.GENERAL_USE, PluginType.PLUGIN_ORGANIZER);
Comparator<PluginListItem> pluginTypeComparator = Comparator.comparing(plugin ->
{
PluginType type = PluginType.GENERAL_USE;
Plugin sortPlugin = plugin.getPlugin();
if (sortPlugin != null)
{
type = sortPlugin.getClass().getAnnotation(PluginDescriptor.class).type();
}
return definedOrder.indexOf(type);
});
plugins.sort(pluginTypeComparator.thenComparing(PluginListItem::getName));
pluginList.addAll(plugins); pluginList.addAll(plugins);
} }

View File

@@ -25,6 +25,9 @@
package net.runelite.client.plugins.pluginsorter; package net.runelite.client.plugins.pluginsorter;
import java.awt.Color; import java.awt.Color;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import net.runelite.client.config.Alpha; import net.runelite.client.config.Alpha;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
@@ -35,11 +38,50 @@ import net.runelite.client.config.Title;
@ConfigGroup("pluginsorter") @ConfigGroup("pluginsorter")
public interface PluginSorterConfig extends Config public interface PluginSorterConfig extends Config
{ {
@Getter(AccessLevel.PACKAGE)
@AllArgsConstructor
enum SortStyle
{
CATEGORY("Category"),
ALPHABETICALLY("Alphabetically");
private String name;
@Override
public String toString()
{
return getName();
}
}
@ConfigTitleSection(
keyName = "pluginSortingTitle",
name = "Sorting",
description = "",
position = 0
)
default Title pluginSortingTitle()
{
return new Title();
}
@ConfigItem(
position = 1,
keyName = "pluginSortMode",
name = "Sorting mode",
description = "Sorts plugins ",
titleSection = "pluginSortingTitle"
)
default SortStyle pluginSortMode()
{
return SortStyle.CATEGORY;
}
@ConfigTitleSection( @ConfigTitleSection(
keyName = "hidePluginsTitle", keyName = "hidePluginsTitle",
name = "Hiding", name = "Hiding",
description = "", description = "",
position = 0 position = 2
) )
default Title hidePluginsTitle() default Title hidePluginsTitle()
{ {
@@ -47,7 +89,7 @@ public interface PluginSorterConfig extends Config
} }
@ConfigItem( @ConfigItem(
position = 1, position = 3,
keyName = "hidePlugins", keyName = "hidePlugins",
name = "Hide Plugins", name = "Hide Plugins",
description = "Hides all OpenOSRS plugins if checked", description = "Hides all OpenOSRS plugins if checked",
@@ -60,7 +102,7 @@ public interface PluginSorterConfig extends Config
} }
@ConfigItem( @ConfigItem(
position = 6, position = 4,
keyName = "hideExternalPlugins", keyName = "hideExternalPlugins",
name = "Hide External Plugins", name = "Hide External Plugins",
description = "Hides all OpenOSRS external plugins if checked", description = "Hides all OpenOSRS external plugins if checked",
@@ -73,7 +115,7 @@ public interface PluginSorterConfig extends Config
} }
@ConfigItem( @ConfigItem(
position = 2, position = 5,
keyName = "hidePvmPlugins", keyName = "hidePvmPlugins",
name = "Hide PvM Plugins", name = "Hide PvM Plugins",
description = "Hides all OpenOSRS PvM plugins if checked", description = "Hides all OpenOSRS PvM plugins if checked",
@@ -86,7 +128,7 @@ public interface PluginSorterConfig extends Config
} }
@ConfigItem( @ConfigItem(
position = 4, position = 6,
keyName = "hideSkillingPlugins", keyName = "hideSkillingPlugins",
name = "Hide Skillinh Plugins", name = "Hide Skillinh Plugins",
description = "Hides all OpenOSRS skilling plugins if checked", description = "Hides all OpenOSRS skilling plugins if checked",
@@ -99,7 +141,7 @@ public interface PluginSorterConfig extends Config
} }
@ConfigItem( @ConfigItem(
position = 3, position = 7,
keyName = "hidePvpPlugins", keyName = "hidePvpPlugins",
name = "Hide PvP Plugins", name = "Hide PvP Plugins",
description = "Hides all OpenOSRS Pvp plugins if checked", description = "Hides all OpenOSRS Pvp plugins if checked",
@@ -112,7 +154,7 @@ public interface PluginSorterConfig extends Config
} }
@ConfigItem( @ConfigItem(
position = 5, position = 8,
keyName = "hideUtilityPlugins", keyName = "hideUtilityPlugins",
name = "Hide Utility Plugins", name = "Hide Utility Plugins",
description = "Hides all OpenOSRS utility plugins if checked", description = "Hides all OpenOSRS utility plugins if checked",
@@ -128,7 +170,7 @@ public interface PluginSorterConfig extends Config
keyName = "pluginsColorTitle", keyName = "pluginsColorTitle",
name = "Colors", name = "Colors",
description = "", description = "",
position = 7 position = 9
) )
default Title pluginsColorTitle() default Title pluginsColorTitle()
{ {
@@ -137,7 +179,7 @@ public interface PluginSorterConfig extends Config
@Alpha @Alpha
@ConfigItem( @ConfigItem(
position = 8, position = 10,
keyName = "externalColor", keyName = "externalColor",
name = "External color", name = "External color",
description = "Configure the color of external plugins", description = "Configure the color of external plugins",
@@ -150,7 +192,7 @@ public interface PluginSorterConfig extends Config
@Alpha @Alpha
@ConfigItem( @ConfigItem(
position = 9, position = 11,
keyName = "pvmColor", keyName = "pvmColor",
name = "PVM color", name = "PVM color",
description = "Configure the color of PVM related plugins", description = "Configure the color of PVM related plugins",
@@ -163,7 +205,7 @@ public interface PluginSorterConfig extends Config
@Alpha @Alpha
@ConfigItem( @ConfigItem(
position = 10, position = 12,
keyName = "pvpColor", keyName = "pvpColor",
name = "PVP color", name = "PVP color",
description = "Configure the color of PVP related plugins", description = "Configure the color of PVP related plugins",
@@ -176,7 +218,7 @@ public interface PluginSorterConfig extends Config
@Alpha @Alpha
@ConfigItem( @ConfigItem(
position = 11, position = 13,
keyName = "skillingColor", keyName = "skillingColor",
name = "Skilling color", name = "Skilling color",
description = "Configure the color of Skilling related plugins", description = "Configure the color of Skilling related plugins",
@@ -189,7 +231,7 @@ public interface PluginSorterConfig extends Config
@Alpha @Alpha
@ConfigItem( @ConfigItem(
position = 12, position = 14,
keyName = "utilityColor", keyName = "utilityColor",
name = "Utility color", name = "Utility color",
description = "Configure the color of Utility related plugins", description = "Configure the color of Utility related plugins",

View File

@@ -24,8 +24,10 @@
*/ */
package net.runelite.client.plugins.pluginsorter; package net.runelite.client.plugins.pluginsorter;
import com.google.common.collect.ImmutableList;
import com.google.inject.Provides; import com.google.inject.Provides;
import java.awt.Color; import java.awt.Color;
import java.util.Comparator;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.ConfigChanged;
@@ -53,12 +55,30 @@ public class PluginSorterPlugin extends Plugin
@Inject @Inject
private EventBus eventBus; private EventBus eventBus;
private PluginSorterConfig.SortStyle pluginSortMode;
private Color externalColor; private Color externalColor;
private Color pvmColor; private Color pvmColor;
private Color pvpColor; private Color pvpColor;
private Color skillingColor; private Color skillingColor;
private Color utilityColor; private Color utilityColor;
private final ImmutableList<PluginType> definedOrder = ImmutableList.of(PluginType.IMPORTANT, PluginType.EXTERNAL, PluginType.PVM, PluginType.SKILLING, PluginType.PVP, PluginType.UTILITY, PluginType.GENERAL_USE, PluginType.PLUGIN_ORGANIZER);
private final Comparator<PluginListItem> pluginTypeComparator = Comparator.comparing(plugin ->
{
PluginType type = PluginType.GENERAL_USE;
Plugin sortPlugin = plugin.getPlugin();
if (sortPlugin != null)
{
type = sortPlugin.getClass().getAnnotation(PluginDescriptor.class).type();
}
else if (plugin.configDescriptor.getGroup().value().equals("openosrs") || plugin.configDescriptor.getGroup().value().equals("runelite"))
{
type = PluginType.IMPORTANT;
}
return definedOrder.indexOf(type);
});
@Provides @Provides
PluginSorterConfig provideConfig(ConfigManager configManager) PluginSorterConfig provideConfig(ConfigManager configManager)
{ {
@@ -148,10 +168,20 @@ public class PluginSorterPlugin extends Plugin
} }
} }
} }
if (this.pluginSortMode == PluginSorterConfig.SortStyle.CATEGORY)
{
ConfigPanel.pluginList.sort(pluginTypeComparator.thenComparing(PluginListItem::getName));
}
else
{
ConfigPanel.pluginList.sort(Comparator.comparing(PluginListItem::getName));
}
} }
private void updateConfig() private void updateConfig()
{ {
this.pluginSortMode = config.pluginSortMode();
this.externalColor = config.externalColor(); this.externalColor = config.externalColor();
this.pvmColor = config.pvmColor(); this.pvmColor = config.pvmColor();
this.pvpColor = config.pvpColor(); this.pvpColor = config.pvpColor();