Merge pull request #10662 from Hydrox6/config-units

Add Unit support to Config
This commit is contained in:
Adam
2020-02-02 15:00:39 -05:00
committed by GitHub
22 changed files with 116 additions and 14 deletions

View File

@@ -33,4 +33,5 @@ public class ConfigItemDescriptor
private final Class<?> type; private final Class<?> type;
private final Range range; private final Range range;
private final Alpha alpha; private final Alpha alpha;
private final Units units;
} }

View File

@@ -455,7 +455,8 @@ public class ConfigManager
m.getDeclaredAnnotation(ConfigItem.class), m.getDeclaredAnnotation(ConfigItem.class),
m.getReturnType(), m.getReturnType(),
m.getDeclaredAnnotation(Range.class), m.getDeclaredAnnotation(Range.class),
m.getDeclaredAnnotation(Alpha.class) m.getDeclaredAnnotation(Alpha.class),
m.getDeclaredAnnotation(Units.class)
)) ))
.sorted((a, b) -> ComparisonChain.start() .sorted((a, b) -> ComparisonChain.start()
.compare(a.getItem().position(), b.getItem().position()) .compare(a.getItem().position(), b.getItem().position())

View File

@@ -279,10 +279,11 @@ public interface RuneLiteConfig extends Config
@ConfigItem( @ConfigItem(
keyName = "infoBoxSize", keyName = "infoBoxSize",
name = "Infobox size (px)", name = "Infobox size",
description = "Configures the size of each infobox in pixels", description = "Configures the size of each infobox in pixels",
position = 42 position = 42
) )
@Units(Units.PIXELS)
default int infoBoxSize() default int infoBoxSize()
{ {
return 35; return 35;

View File

@@ -0,0 +1,49 @@
/*
* Copyright (c) 2020, Hydrox6 <ikada@protonmail.ch>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.runelite.client.config;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Used with ConfigItem, defines what units are shown to the side of the box.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface Units
{
String MILLISECONDS = "ms";
String MINUTES = " mins";
String PERCENT = "%";
String PIXELS = "px";
String SECONDS = "s";
String TICKS = " ticks";
String value();
}

View File

@@ -28,6 +28,7 @@ import java.awt.Color;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("agility") @ConfigGroup("agility")
public interface AgilityConfig extends Config public interface AgilityConfig extends Config
@@ -56,10 +57,11 @@ public interface AgilityConfig extends Config
@ConfigItem( @ConfigItem(
keyName = "lapTimeout", keyName = "lapTimeout",
name = "Hide Lap Count (minutes)", name = "Hide Lap Count",
description = "Time until the lap counter hides/resets", description = "Time until the lap counter hides/resets",
position = 2 position = 2
) )
@Units(Units.MINUTES)
default int lapTimeout() default int lapTimeout()
{ {
return 5; return 5;

View File

@@ -36,6 +36,7 @@ import java.awt.event.ItemEvent;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.text.DecimalFormat;
import javax.inject.Inject; import javax.inject.Inject;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
@@ -66,6 +67,7 @@ import net.runelite.client.config.ConfigManager;
import net.runelite.client.config.Keybind; import net.runelite.client.config.Keybind;
import net.runelite.client.config.ModifierlessKeybind; import net.runelite.client.config.ModifierlessKeybind;
import net.runelite.client.config.Range; import net.runelite.client.config.Range;
import net.runelite.client.config.Units;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ExternalPluginsChanged; import net.runelite.client.events.ExternalPluginsChanged;
import net.runelite.client.events.PluginChanged; import net.runelite.client.events.PluginChanged;
@@ -256,6 +258,16 @@ class ConfigPanel extends PluginPanel
spinnerTextField.setColumns(SPINNER_FIELD_WIDTH); spinnerTextField.setColumns(SPINNER_FIELD_WIDTH);
spinner.addChangeListener(ce -> changeConfiguration(spinner, cd, cid)); spinner.addChangeListener(ce -> changeConfiguration(spinner, cd, cid));
Units units = cid.getUnits();
if (units != null)
{
DecimalFormat df = ((JSpinner.NumberEditor) spinner.getEditor()).getFormat();
df.setPositiveSuffix(units.value());
df.setNegativeSuffix(units.value());
// Force update the spinner to have it add the units initially
spinnerTextField.setValue(value);
}
item.add(spinner, BorderLayout.EAST); item.add(spinner, BorderLayout.EAST);
} }

View File

@@ -28,6 +28,7 @@ package net.runelite.client.plugins.cooking;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("cooking") @ConfigGroup("cooking")
public interface CookingConfig extends Config public interface CookingConfig extends Config
@@ -35,9 +36,10 @@ public interface CookingConfig extends Config
@ConfigItem( @ConfigItem(
position = 1, position = 1,
keyName = "statTimeout", keyName = "statTimeout",
name = "Reset stats (minutes)", name = "Reset stats",
description = "Configures the time until the session resets and the overlay is hidden (0 = Disable feature)" description = "Configures the time until the session resets and the overlay is hidden (0 = Disable feature)"
) )
@Units(Units.MINUTES)
default int statTimeout() default int statTimeout()
{ {
return 5; return 5;

View File

@@ -27,16 +27,18 @@ package net.runelite.client.plugins.discord;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("discord") @ConfigGroup("discord")
public interface DiscordConfig extends Config public interface DiscordConfig extends Config
{ {
@ConfigItem( @ConfigItem(
keyName = "actionTimeout", keyName = "actionTimeout",
name = "Action timeout (minutes)", name = "Action timeout",
description = "Configures after how long of not updating status will be reset (in minutes)", description = "Configures after how long of not updating status will be reset (in minutes)",
position = 1 position = 1
) )
@Units(Units.MINUTES)
default int actionTimeout() default int actionTimeout()
{ {
return 5; return 5;

View File

@@ -28,6 +28,7 @@ import java.awt.Color;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("xpdrop") @ConfigGroup("xpdrop")
public interface XpDropConfig extends Config public interface XpDropConfig extends Config
@@ -82,6 +83,7 @@ public interface XpDropConfig extends Config
description = "Configures how many ticks should pass between fake XP drops, 0 to disable", description = "Configures how many ticks should pass between fake XP drops, 0 to disable",
position = 4 position = 4
) )
@Units(Units.TICKS)
default int fakeXpDropDelay() default int fakeXpDropDelay()
{ {
return 0; return 0;

View File

@@ -28,6 +28,7 @@ import java.awt.Color;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("fishing") @ConfigGroup("fishing")
public interface FishingConfig extends Config public interface FishingConfig extends Config
@@ -112,9 +113,10 @@ public interface FishingConfig extends Config
@ConfigItem( @ConfigItem(
position = 7, position = 7,
keyName = "statTimeout", keyName = "statTimeout",
name = "Reset stats (minutes)", name = "Reset stats",
description = "The time until fishing session data is reset in minutes." description = "The time until fishing session data is reset in minutes."
) )
@Units(Units.MINUTES)
default int statTimeout() default int statTimeout()
{ {
return 5; return 5;

View File

@@ -29,6 +29,7 @@ import java.awt.Color;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
import net.runelite.client.plugins.grounditems.config.ItemHighlightMode; import net.runelite.client.plugins.grounditems.config.ItemHighlightMode;
import net.runelite.client.plugins.grounditems.config.MenuHighlightMode; import net.runelite.client.plugins.grounditems.config.MenuHighlightMode;
import net.runelite.client.plugins.grounditems.config.PriceDisplayMode; import net.runelite.client.plugins.grounditems.config.PriceDisplayMode;
@@ -343,6 +344,7 @@ public interface GroundItemsConfig extends Config
description = "Decrease this number if you accidentally hide ground items often. (0 = Disabled)", description = "Decrease this number if you accidentally hide ground items often. (0 = Disabled)",
position = 26 position = 26
) )
@Units(Units.MILLISECONDS)
default int doubleTapDelay() default int doubleTapDelay()
{ {
return 250; return 250;

View File

@@ -27,6 +27,7 @@ package net.runelite.client.plugins.idlenotifier;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("idlenotifier") @ConfigGroup("idlenotifier")
public interface IdleNotifierConfig extends Config public interface IdleNotifierConfig extends Config
@@ -77,10 +78,11 @@ public interface IdleNotifierConfig extends Config
@ConfigItem( @ConfigItem(
keyName = "timeout", keyName = "timeout",
name = "Idle Notification Delay (ms)", name = "Idle Notification Delay",
description = "The notification delay after the player is idle", description = "The notification delay after the player is idle",
position = 5 position = 5
) )
@Units(Units.MILLISECONDS)
default int getIdleNotificationDelay() default int getIdleNotificationDelay()
{ {
return 5000; return 5000;
@@ -114,6 +116,7 @@ public interface IdleNotifierConfig extends Config
position = 8, position = 8,
description = "The amount of remaining oxygen to send a notification at. A value of 0 will disable notification." description = "The amount of remaining oxygen to send a notification at. A value of 0 will disable notification."
) )
@Units(Units.PERCENT)
default int getOxygenThreshold() default int getOxygenThreshold()
{ {
return 0; return 0;
@@ -125,6 +128,7 @@ public interface IdleNotifierConfig extends Config
position = 9, position = 9,
description = "The amount of spec energy reached to send a notification at. A value of 0 will disable notification." description = "The amount of spec energy reached to send a notification at. A value of 0 will disable notification."
) )
@Units(Units.PERCENT)
default int getSpecEnergyThreshold() default int getSpecEnergyThreshold()
{ {
return 0; return 0;

View File

@@ -28,6 +28,7 @@ package net.runelite.client.plugins.motherlode;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("motherlode") @ConfigGroup("motherlode")
public interface MotherlodeConfig extends Config public interface MotherlodeConfig extends Config
@@ -54,9 +55,10 @@ public interface MotherlodeConfig extends Config
@ConfigItem( @ConfigItem(
keyName = "statTimeout", keyName = "statTimeout",
name = "Reset stats (minutes)", name = "Reset stats",
description = "Configures the time until statistics are reset" description = "Configures the time until statistics are reset"
) )
@Units(Units.MINUTES)
default int statTimeout() default int statTimeout()
{ {
return 5; return 5;

View File

@@ -27,6 +27,7 @@ package net.runelite.client.plugins.regenmeter;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("regenmeter") @ConfigGroup("regenmeter")
public interface RegenMeterConfig extends Config public interface RegenMeterConfig extends Config
@@ -60,9 +61,10 @@ public interface RegenMeterConfig extends Config
@ConfigItem( @ConfigItem(
keyName = "notifyBeforeHpRegenDuration", keyName = "notifyBeforeHpRegenDuration",
name = "Hitpoint Regen Notification (seconds)", name = "Hitpoint Regen Notification",
description = "Notify approximately when your next hitpoint is about to regen. A value of 0 will disable notification." description = "Notify approximately when your next hitpoint is about to regen. A value of 0 will disable notification."
) )
@Units(Units.SECONDS)
default int getNotifyBeforeHpRegenSeconds() default int getNotifyBeforeHpRegenSeconds()
{ {
return 0; return 0;

View File

@@ -29,6 +29,7 @@ import java.awt.Color;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("slayer") @ConfigGroup("slayer")
public interface SlayerConfig extends Config public interface SlayerConfig extends Config
@@ -69,9 +70,10 @@ public interface SlayerConfig extends Config
@ConfigItem( @ConfigItem(
position = 4, position = 4,
keyName = "statTimeout", keyName = "statTimeout",
name = "InfoBox Expiry (minutes)", name = "InfoBox Expiry",
description = "Set the time until the InfoBox expires" description = "Set the time until the InfoBox expires"
) )
@Units(Units.MINUTES)
default int statTimeout() default int statTimeout()
{ {
return 5; return 5;

View File

@@ -27,6 +27,7 @@ package net.runelite.client.plugins.smelting;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("smelting") @ConfigGroup("smelting")
public interface SmeltingConfig extends Config public interface SmeltingConfig extends Config
@@ -34,9 +35,10 @@ public interface SmeltingConfig extends Config
@ConfigItem( @ConfigItem(
position = 1, position = 1,
keyName = "statTimeout", keyName = "statTimeout",
name = "Reset stats (minutes)", name = "Reset stats",
description = "The time it takes for the current smelting session to be reset" description = "The time it takes for the current smelting session to be reset"
) )
@Units(Units.MINUTES)
default int statTimeout() default int statTimeout()
{ {
return 5; return 5;

View File

@@ -28,6 +28,7 @@ package net.runelite.client.plugins.stretchedmode;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("stretchedmode") @ConfigGroup("stretchedmode")
public interface StretchedModeConfig extends Config public interface StretchedModeConfig extends Config
@@ -64,9 +65,10 @@ public interface StretchedModeConfig extends Config
@ConfigItem( @ConfigItem(
keyName = "scalingFactor", keyName = "scalingFactor",
name = "Resizable Scaling (%)", name = "Resizable Scaling",
description = "In resizable mode, the game is reduced in size this much before it's stretched." description = "In resizable mode, the game is reduced in size this much before it's stretched."
) )
@Units(Units.PERCENT)
default int scalingFactor() default int scalingFactor()
{ {
return 50; return 50;

View File

@@ -27,6 +27,7 @@ package net.runelite.client.plugins.timetracking;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("timetracking") @ConfigGroup("timetracking")
public interface TimeTrackingConfig extends Config public interface TimeTrackingConfig extends Config
@@ -72,10 +73,11 @@ public interface TimeTrackingConfig extends Config
@ConfigItem( @ConfigItem(
keyName = "defaultTimerMinutes", keyName = "defaultTimerMinutes",
name = "Default Time (Minutes)", name = "Default Time",
description = "The default time for the timer in minutes", description = "The default time for the timer in minutes",
position = 4 position = 4
) )
@Units(Units.MINUTES)
default int defaultTimerMinutes() default int defaultTimerMinutes()
{ {
return 5; return 5;

View File

@@ -30,6 +30,7 @@ import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Range; import net.runelite.client.config.Range;
import net.runelite.client.config.Units;
import net.runelite.client.plugins.wintertodt.config.WintertodtNotifyMode; import net.runelite.client.plugins.wintertodt.config.WintertodtNotifyMode;
@ConfigGroup("wintertodt") @ConfigGroup("wintertodt")
@@ -66,6 +67,7 @@ public interface WintertodtConfig extends Config
@Range( @Range(
max = 60 max = 60
) )
@Units(Units.SECONDS)
default int roundNotification() default int roundNotification()
{ {
return 5; return 5;

View File

@@ -27,6 +27,7 @@ package net.runelite.client.plugins.woodcutting;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("woodcutting") @ConfigGroup("woodcutting")
public interface WoodcuttingConfig extends Config public interface WoodcuttingConfig extends Config
@@ -34,9 +35,10 @@ public interface WoodcuttingConfig extends Config
@ConfigItem( @ConfigItem(
position = 1, position = 1,
keyName = "statTimeout", keyName = "statTimeout",
name = "Reset stats (minutes)", name = "Reset stats",
description = "Configures the time until statistic is reset. Also configures when tree indicator is hidden" description = "Configures the time until statistic is reset. Also configures when tree indicator is hidden"
) )
@Units(Units.MINUTES)
default int statTimeout() default int statTimeout()
{ {
return 5; return 5;

View File

@@ -29,6 +29,7 @@ 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;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("xpglobes") @ConfigGroup("xpglobes")
public interface XpGlobesConfig extends Config public interface XpGlobesConfig extends Config
@@ -141,6 +142,7 @@ public interface XpGlobesConfig extends Config
description = "Change the stroke width of the progress arc", description = "Change the stroke width of the progress arc",
position = 9 position = 9
) )
@Units(Units.PIXELS)
default int progressArcStrokeWidth() default int progressArcStrokeWidth()
{ {
return 2; return 2;
@@ -152,6 +154,7 @@ public interface XpGlobesConfig extends Config
description = "Change the size of the xp orbs", description = "Change the size of the xp orbs",
position = 10 position = 10
) )
@Units(Units.PIXELS)
default int xpOrbSize() default int xpOrbSize()
{ {
return 40; return 40;
@@ -163,6 +166,7 @@ public interface XpGlobesConfig extends Config
description = "Change the duration the xp orbs are visible", description = "Change the duration the xp orbs are visible",
position = 11 position = 11
) )
@Units(Units.SECONDS)
default int xpOrbDuration() default int xpOrbDuration()
{ {
return 10; return 10;

View File

@@ -28,6 +28,7 @@ import lombok.AllArgsConstructor;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigGroup;
import net.runelite.client.config.ConfigItem; import net.runelite.client.config.ConfigItem;
import net.runelite.client.config.Units;
@ConfigGroup("xpTracker") @ConfigGroup("xpTracker")
public interface XpTrackerConfig extends Config public interface XpTrackerConfig extends Config
@@ -87,6 +88,7 @@ public interface XpTrackerConfig extends Config
name = "Auto pause after", name = "Auto pause after",
description = "Configures how many minutes passes before pausing a skill while in game and there's no XP, 0 means disabled" description = "Configures how many minutes passes before pausing a skill while in game and there's no XP, 0 means disabled"
) )
@Units(Units.MINUTES)
default int pauseSkillAfter() default int pauseSkillAfter()
{ {
return 0; return 0;