From f4b5e2cd230ae17b480315257d4f6559e99faf19 Mon Sep 17 00:00:00 2001 From: Irmuun Date: Wed, 5 Jan 2022 22:17:55 -0800 Subject: [PATCH 1/6] add config panel refresh on config change --- .../runelite/client/plugins/config/ConfigPanel.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index 25e3d501c5..da431c162a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -112,6 +112,7 @@ import net.runelite.client.config.Range; import net.runelite.client.config.Units; import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.ExternalPluginsChanged; import net.runelite.client.events.PluginChanged; import net.runelite.client.externalplugins.ExternalPluginManager; @@ -1175,6 +1176,18 @@ class ConfigPanel extends PluginPanel SwingUtilities.invokeLater(this::rebuild); } + @Subscribe + private void onConfigChanged(ConfigChanged event){ + if(pluginConfig.getConfigDescriptor() == null) + { + return; + } + if(pluginConfig.getConfigDescriptor().getGroup().value().equals(event.getGroup())) + { + SwingUtilities.invokeLater(this::rebuild); + } + } + private JMenuItem createResetMenuItem(PluginConfigurationDescriptor pluginConfig, ConfigItemDescriptor configItemDescriptor) { JMenuItem menuItem = new JMenuItem("Reset"); From 7531c6687f7a677a53287259b6e95ab79122067f Mon Sep 17 00:00:00 2001 From: Irmuun Date: Wed, 5 Jan 2022 22:20:15 -0800 Subject: [PATCH 2/6] format code --- .../net/runelite/client/plugins/config/ConfigPanel.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index da431c162a..c4583e7026 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -1177,12 +1177,13 @@ class ConfigPanel extends PluginPanel } @Subscribe - private void onConfigChanged(ConfigChanged event){ - if(pluginConfig.getConfigDescriptor() == null) + private void onConfigChanged(ConfigChanged event) + { + if (pluginConfig.getConfigDescriptor() == null) { return; } - if(pluginConfig.getConfigDescriptor().getGroup().value().equals(event.getGroup())) + if (pluginConfig.getConfigDescriptor().getGroup().value().equals(event.getGroup())) { SwingUtilities.invokeLater(this::rebuild); } From 794dce7b204aa758eb4f4d301a6813dacc6368cf Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Mon, 17 Jan 2022 23:23:45 +0100 Subject: [PATCH 3/6] project: Expose world select var rld selection --- .../src/main/java/net/runelite/api/Client.java | 12 ++++++++++++ .../src/main/java/net/runelite/rs/api/RSClient.java | 8 ++++++++ 2 files changed, 20 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index e1ed167ec9..ba96faf53b 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -183,6 +183,18 @@ public interface Client extends GameEngine */ void stopNow(); + /** + * Gets the login screen world select state. + * + * @return the world select state + */ + boolean isWorldSelectOpen(); + + /** + * Sets the login screen world select state. + */ + void setWorldSelectOpen(boolean open); + /** * Gets the current logged in username. * diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index 12a87220d3..7cb2040a89 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -257,6 +257,14 @@ public interface RSClient extends RSGameEngine, Client @Import("graphicsObjects") RSNodeDeque getGraphicsObjectDeque(); + @Import("worldSelectOpen") + @Override + boolean isWorldSelectOpen(); + + @Import("worldSelectOpen") + @Override + void setWorldSelectOpen(boolean open); + @Import("Login_username") @Override String getUsername(); From 36218b5dd26b8c14387ad981e06a96ef9dbc583f Mon Sep 17 00:00:00 2001 From: Justin Date: Tue, 18 Jan 2022 22:31:17 +1100 Subject: [PATCH 4/6] project: bump version --- buildSrc/src/main/kotlin/Dependencies.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index da3d1e75de..cab05a0340 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -27,7 +27,7 @@ object ProjectVersions { const val launcherVersion = "2.2.0" const val rlVersion = "1.8.9" - const val openosrsVersion = "4.18.1" + const val openosrsVersion = "4.18.2" const val rsversion = 202 const val cacheversion = 165 From 5afb5dbd7607b39811dcaa50381d4325ff775f82 Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Tue, 18 Jan 2022 16:01:47 +0100 Subject: [PATCH 5/6] project: Don't rebuild the config panel when not needed --- .../client/plugins/config/ConfigPanel.java | 205 ++++++++++++++---- 1 file changed, 162 insertions(+), 43 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index c4583e7026..a468caf200 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -33,7 +33,6 @@ import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; -import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; @@ -174,11 +173,13 @@ class ConfigPanel extends PluginPanel private final ListCellRenderer> listCellRenderer = new ComboBoxListRenderer<>(); + private final JScrollPane scrollPane; private final FixedWidthPanel mainPanel; private final JLabel title; private final PluginToggleButton pluginToggle; private PluginConfigurationDescriptor pluginConfig = null; + private boolean skipRebuild; @Inject @@ -213,7 +214,7 @@ class ConfigPanel extends PluginPanel northPanel.setLayout(new BorderLayout()); northPanel.add(mainPanel, BorderLayout.NORTH); - JScrollPane scrollPane = new JScrollPane(northPanel); + scrollPane = new JScrollPane(northPanel); scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); add(scrollPane, BorderLayout.CENTER); @@ -275,7 +276,7 @@ class ConfigPanel extends PluginPanel pluginToggle.setVisible(false); } - rebuild(); + rebuild(false); } private void toggleSection(ConfigSectionDescriptor csd, JButton button, JPanel contents) @@ -289,8 +290,11 @@ class ConfigPanel extends PluginPanel SwingUtilities.invokeLater(contents::revalidate); } - private void rebuild() + private void rebuild(boolean refresh) { + log.info("Rebuilding plugin config panel, restoring scroll state: {}", refresh); + int scrollBarPosition = scrollPane.getVerticalScrollBar().getValue(); + mainPanel.removeAll(); ConfigDescriptor cd = pluginConfig.getConfigDescriptor(); @@ -460,7 +464,7 @@ class ConfigPanel extends PluginPanel for (ConfigItemDescriptor cid : cd.getItems()) { - if (!hideUnhide(cid)) + if (!shouldBeHidden(cid)) { continue; } @@ -582,7 +586,7 @@ class ConfigPanel extends PluginPanel plugin.resetConfiguration(); } - rebuild(); + rebuild(false); } }); mainPanel.add(resetButton); @@ -591,6 +595,15 @@ class ConfigPanel extends PluginPanel backButton.addActionListener(e -> pluginList.getMuxer().popState()); mainPanel.add(backButton); + if (refresh) + { + scrollPane.getVerticalScrollBar().setValue(scrollBarPosition); + } + else + { + scrollPane.getVerticalScrollBar().setValue(0); + } + revalidate(); } @@ -1095,11 +1108,13 @@ class ConfigPanel extends PluginPanel if (result != JOptionPane.YES_OPTION) { - rebuild(); + rebuild(false); return; } } + skipRebuild = true; + if (component instanceof JCheckBox) { JCheckBox checkbox = (JCheckBox) component; @@ -1143,8 +1158,10 @@ class ConfigPanel extends PluginPanel configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), Sets.newHashSet(selectedValues)); } - enableDisable(component, cid); - rebuild(); + if (enableDisable(component, cid) || hideUnhide(component, cd, cid)) + { + rebuild(true); + } } @Override @@ -1173,7 +1190,7 @@ class ConfigPanel extends PluginPanel { pluginList.getMuxer().popState(); } - SwingUtilities.invokeLater(this::rebuild); + SwingUtilities.invokeLater(() -> rebuild(false)); } @Subscribe @@ -1183,10 +1200,13 @@ class ConfigPanel extends PluginPanel { return; } - if (pluginConfig.getConfigDescriptor().getGroup().value().equals(event.getGroup())) + + if (!skipRebuild && pluginConfig.getConfigDescriptor().getGroup().value().equals(event.getGroup())) { - SwingUtilities.invokeLater(this::rebuild); + SwingUtilities.invokeLater(() -> rebuild(true)); } + + skipRebuild = false; } private JMenuItem createResetMenuItem(PluginConfigurationDescriptor pluginConfig, ConfigItemDescriptor configItemDescriptor) @@ -1202,12 +1222,127 @@ class ConfigPanel extends PluginPanel configManager.unsetConfiguration(configGroup.value(), configItem.keyName()); configManager.setDefaultConfiguration(pluginConfig.getConfig(), false); - rebuild(); + rebuild(false); }); return menuItem; } - private boolean hideUnhide(ConfigItemDescriptor cid) + private boolean hideUnhide(Component component, ConfigDescriptor cd, ConfigItemDescriptor cid) + { + boolean rebuild = false; + + if (component instanceof JCheckBox) + { + JCheckBox checkbox = (JCheckBox) component; + + for (ConfigItemDescriptor cid2 : cd.getItems()) + { + if (cid2.getItem().hidden() || !cid2.getItem().hide().isEmpty()) + { + List itemHide = Splitter + .onPattern("\\|\\|") + .trimResults() + .omitEmptyStrings() + .splitToList(String.format("%s || %s", cid2.getItem().unhide(), cid2.getItem().hide())); + + if (itemHide.contains(cid.getItem().keyName())) + { + rebuild = true; + } + } + + if (checkbox.isSelected()) + { + if (cid2.getItem().enabledBy().contains(cid.getItem().keyName())) + { + skipRebuild = true; + configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "true"); + rebuild = true; + } + else if (cid2.getItem().disabledBy().contains(cid.getItem().keyName())) + { + skipRebuild = true; + configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "false"); + rebuild = true; + } + } + } + } + else if (component instanceof JComboBox) + { + JComboBox jComboBox = (JComboBox) component; + + for (ConfigItemDescriptor cid2 : cd.getItems()) + { + if (cid2.getItem().hidden() || !cid2.getItem().hide().isEmpty()) + { + List itemHide = Splitter + .onPattern("\\|\\|") + .trimResults() + .omitEmptyStrings() + .splitToList(String.format("%s || %s", cid2.getItem().unhide(), cid2.getItem().hide())); + + String changedVal = ((Enum) jComboBox.getSelectedItem()).name(); + + if (cid2.getItem().enabledBy().contains(cid.getItem().keyName()) && cid2.getItem().enabledByValue().equals(changedVal)) + { + skipRebuild = true; + configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "true"); + rebuild = true; + } + else if (cid2.getItem().disabledBy().contains(cid.getItem().keyName()) && cid2.getItem().disabledByValue().equals(changedVal)) + { + skipRebuild = true; + configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "false"); + rebuild = true; + } + else if (itemHide.contains(cid.getItem().keyName())) + { + rebuild = true; + } + } + } + } + else if (component instanceof JList) + { + JList jList = (JList) component; + + for (ConfigItemDescriptor cid2 : cd.getItems()) + { + if (cid2.getItem().hidden() || !cid2.getItem().hide().isEmpty()) + { + List itemHide = Splitter + .onPattern("\\|\\|") + .trimResults() + .omitEmptyStrings() + .splitToList(String.format("%s || %s", cid2.getItem().unhide(), cid2.getItem().hide())); + + String changedVal = String.valueOf((jList.getSelectedValues())); + + if (cid2.getItem().enabledBy().contains(cid.getItem().keyName()) && cid2.getItem().enabledByValue().equals(changedVal)) + { + skipRebuild = true; + configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "true"); + rebuild = true; + } + else if (cid2.getItem().disabledBy().contains(cid.getItem().keyName()) && cid2.getItem().disabledByValue().equals(changedVal)) + { + skipRebuild = true; + configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "false"); + rebuild = true; + } + else if (itemHide.contains(cid.getItem().keyName())) + { + rebuild = true; + } + } + } + } + + return rebuild; + } + + private boolean shouldBeHidden(ConfigItemDescriptor cid) { ConfigDescriptor cd = pluginConfig.getConfigDescriptor(); @@ -1272,8 +1407,10 @@ class ConfigPanel extends PluginPanel return true; } - private void enableDisable(Component component, ConfigItemDescriptor cid) + private boolean enableDisable(Component component, ConfigItemDescriptor cid) { + boolean rebuild = false; + ConfigDescriptor cd = pluginConfig.getConfigDescriptor(); if (component instanceof JCheckBox) @@ -1286,11 +1423,15 @@ class ConfigPanel extends PluginPanel { if (cid2.getItem().enabledBy().contains(cid.getItem().keyName())) { + skipRebuild = true; configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "true"); + rebuild = true; } else if (cid2.getItem().disabledBy().contains(cid.getItem().keyName())) { + skipRebuild = true; configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "false"); + rebuild = true; } } } @@ -1305,46 +1446,24 @@ class ConfigPanel extends PluginPanel if (cid2.getItem().enabledBy().contains(cid.getItem().keyName()) && cid2.getItem().enabledByValue().equals(changedVal)) { + skipRebuild = true; configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "true"); + rebuild = true; } else if (cid2.getItem().disabledBy().contains(cid.getItem().keyName()) && cid2.getItem().disabledByValue().equals(changedVal)) { + skipRebuild = true; configManager.setConfiguration(cd.getGroup().value(), cid2.getItem().keyName(), "false"); + rebuild = true; } } } + + return rebuild; } private static String htmlLabel(String key, String value) { return "" + key + ": " + value + ""; } - - public static Component findComponentByName(Component component, String componentName) - { - if (component == null) - { - return null; - } - - if (component.getName() != null && component.getName().equalsIgnoreCase(componentName)) - { - return component; - } - - if (component instanceof Container) - { - Component[] children = ((Container) component).getComponents(); - for (Component child : children) - { - Component found = findComponentByName(child, componentName); - if (found != null) - { - return found; - } - } - } - - return null; - } } From ce76f4a18adb4db616d30dff88e7a7144d97d916 Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Tue, 18 Jan 2022 16:05:38 +0100 Subject: [PATCH 6/6] project: Whoops logging --- .../java/net/runelite/client/plugins/config/ConfigPanel.java | 1 - 1 file changed, 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java index a468caf200..ad189be6a5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/config/ConfigPanel.java @@ -292,7 +292,6 @@ class ConfigPanel extends PluginPanel private void rebuild(boolean refresh) { - log.info("Rebuilding plugin config panel, restoring scroll state: {}", refresh); int scrollBarPosition = scrollPane.getVerticalScrollBar().getValue(); mainPanel.removeAll();