From 6e26fa81776895f60039b0ec0a2a620126afe8d0 Mon Sep 17 00:00:00 2001 From: psikoi Date: Thu, 16 Aug 2018 01:53:38 +0100 Subject: [PATCH 1/3] Update menu option on favorite Updates the right click menu option of each row when the player favorites a world or removes it from the favorites list. --- .../worldhopper/WorldHopperPlugin.java | 3 ++ .../worldhopper/WorldSwitcherPanel.java | 20 +++++++++++ .../plugins/worldhopper/WorldTableRow.java | 36 +++++++++++++------ 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java index b734ed491a..ea47ce5747 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java @@ -228,6 +228,7 @@ public class WorldHopperPlugin extends Plugin private void clearFavoriteConfig(int world) { configManager.unsetConfiguration(WorldHopperConfig.GROUP, "favorite_" + world); + panel.resetAllFavoriteMenus(); } boolean isFavorite(World world) @@ -250,12 +251,14 @@ public class WorldHopperPlugin extends Plugin { log.debug("Adding world {} to favorites", world.getId()); setFavoriteConfig(world.getId()); + panel.updateFavoriteMenu(world.getId(), true); } void removeFromFavorites(World world) { log.debug("Removing world {} from favorites", world.getId()); clearFavoriteConfig(world.getId()); + panel.updateFavoriteMenu(world.getId(), false); } @Subscribe diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java index 537e2bf375..a7c2902f3d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java @@ -150,6 +150,26 @@ class WorldSwitcherPanel extends PluginPanel listContainer.repaint(); } + void updateFavoriteMenu(int world, boolean favorite) + { + for (WorldTableRow row : rows) + { + if (row.getWorld().getId() == world) + { + row.setFavoriteMenu(favorite); + } + } + } + + void resetAllFavoriteMenus() + { + for (WorldTableRow row : rows) + { + row.setFavoriteMenu(false); + } + + } + void populate(List worlds) { rows.clear(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java index e0182cb663..474669e95c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.worldhopper; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.function.BiConsumer; @@ -69,9 +70,12 @@ class WorldTableRow extends JPanel FLAG_GER = new ImageIcon(ImageUtil.getResourceStreamFromClass(WorldHopperPlugin.class, "flag_ger.png")); } + private final JMenuItem favoriteMenuOption = new JMenuItem(); + private JLabel worldField; private JLabel playerCountField; private JLabel activityField; + private BiConsumer onFavorite; @Getter private final World world; @@ -86,6 +90,7 @@ class WorldTableRow extends JPanel { this.current = current; this.world = world; + this.onFavorite = onFavorite; this.updatedPlayerCount = world.getPlayers(); setLayout(new BorderLayout()); @@ -137,19 +142,11 @@ class WorldTableRow extends JPanel } }); - String favoriteAction = favorite ? - "Remove " + world.getId() + " from favorites" : - "Add " + world.getId() + " to favorites"; - - final JMenuItem fav = new JMenuItem(favoriteAction); - fav.addActionListener(e -> - { - onFavorite.accept(world, !favorite); - }); + setFavoriteMenu(favorite); final JPopupMenu popupMenu = new JPopupMenu(); popupMenu.setBorder(new EmptyBorder(5, 5, 5, 5)); - popupMenu.add(fav); + popupMenu.add(favoriteMenuOption); setComponentPopupMenu(popupMenu); @@ -177,6 +174,25 @@ class WorldTableRow extends JPanel add(activityField, BorderLayout.CENTER); } + void setFavoriteMenu(boolean favorite) + { + String favoriteAction = favorite ? + "Remove " + world.getId() + " from favorites" : + "Add " + world.getId() + " to favorites"; + + favoriteMenuOption.setText(favoriteAction); + + for (ActionListener listener : favoriteMenuOption.getActionListeners()) + { + favoriteMenuOption.removeActionListener(listener); + } + + favoriteMenuOption.addActionListener(e -> + { + onFavorite.accept(world, !favorite); + }); + } + void updatePlayerCount(int playerCount) { this.updatedPlayerCount = playerCount; From 6506409f024f4d05a24ed76bea006cf8b2ab9598 Mon Sep 17 00:00:00 2001 From: psikoi Date: Thu, 16 Aug 2018 01:56:33 +0100 Subject: [PATCH 2/3] Fix activity recolouring on hop The activity label had no default color so it remained green unless it was pvp/deadman/tournament, easy fix. --- .../runelite/client/plugins/worldhopper/WorldTableRow.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java index 474669e95c..4a35015ec5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldTableRow.java @@ -220,6 +220,10 @@ class WorldTableRow extends JPanel { activityField.setForeground(TOURNAMENT_WORLD); } + else + { + activityField.setForeground(Color.WHITE); + } worldField.setForeground(world.getTypes().contains(WorldType.MEMBERS) ? MEMBERS_WORLD : FREE_WORLD); } From 98f843627ce6db556eb95ff904529043f10efb6f Mon Sep 17 00:00:00 2001 From: psikoi Date: Thu, 16 Aug 2018 02:02:40 +0100 Subject: [PATCH 3/3] Fix highlighting wrong default world The default world plugin was running after the list was populated, by not highlighting any default world, only the current world after login, we unsure that it highlights the correct first world. --- .../runelite/client/plugins/worldhopper/WorldHopperPlugin.java | 2 ++ .../runelite/client/plugins/worldhopper/WorldSwitcherPanel.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java index ea47ce5747..f698a2b1f5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java @@ -44,6 +44,7 @@ import java.util.concurrent.TimeUnit; import javax.imageio.ImageIO; import javax.inject.Inject; import javax.swing.SwingUtilities; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatMessageType; import net.runelite.api.ChatPlayer; @@ -124,6 +125,7 @@ public class WorldHopperPlugin extends Plugin private NavigationButton navButton; private WorldSwitcherPanel panel; + @Getter private int lastWorld; private int favoriteWorld1, favoriteWorld2; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java index a7c2902f3d..f8e9491056 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldSwitcherPanel.java @@ -177,7 +177,7 @@ class WorldSwitcherPanel extends PluginPanel for (int i = 0; i < worlds.size(); i++) { World world = worlds.get(i); - rows.add(buildRow(world, i % 2 == 0, world.getId() == plugin.getCurrentWorld(), plugin.isFavorite(world))); + rows.add(buildRow(world, i % 2 == 0, world.getId() == plugin.getCurrentWorld() && plugin.getLastWorld() != 0, plugin.isFavorite(world))); } updateList();