Merge pull request #4924 from psikoi/world-hopper-lotto-fix

More World hopper bug fixes
This commit is contained in:
Adam
2018-08-16 06:55:57 -04:00
committed by GitHub
3 changed files with 56 additions and 11 deletions

View File

@@ -44,6 +44,7 @@ import java.util.concurrent.TimeUnit;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.inject.Inject; import javax.inject.Inject;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.ChatMessageType; import net.runelite.api.ChatMessageType;
import net.runelite.api.ChatPlayer; import net.runelite.api.ChatPlayer;
@@ -124,6 +125,7 @@ public class WorldHopperPlugin extends Plugin
private NavigationButton navButton; private NavigationButton navButton;
private WorldSwitcherPanel panel; private WorldSwitcherPanel panel;
@Getter
private int lastWorld; private int lastWorld;
private int favoriteWorld1, favoriteWorld2; private int favoriteWorld1, favoriteWorld2;
@@ -228,6 +230,7 @@ public class WorldHopperPlugin extends Plugin
private void clearFavoriteConfig(int world) private void clearFavoriteConfig(int world)
{ {
configManager.unsetConfiguration(WorldHopperConfig.GROUP, "favorite_" + world); configManager.unsetConfiguration(WorldHopperConfig.GROUP, "favorite_" + world);
panel.resetAllFavoriteMenus();
} }
boolean isFavorite(World world) boolean isFavorite(World world)
@@ -250,12 +253,14 @@ public class WorldHopperPlugin extends Plugin
{ {
log.debug("Adding world {} to favorites", world.getId()); log.debug("Adding world {} to favorites", world.getId());
setFavoriteConfig(world.getId()); setFavoriteConfig(world.getId());
panel.updateFavoriteMenu(world.getId(), true);
} }
void removeFromFavorites(World world) void removeFromFavorites(World world)
{ {
log.debug("Removing world {} from favorites", world.getId()); log.debug("Removing world {} from favorites", world.getId());
clearFavoriteConfig(world.getId()); clearFavoriteConfig(world.getId());
panel.updateFavoriteMenu(world.getId(), false);
} }
@Subscribe @Subscribe

View File

@@ -150,6 +150,26 @@ class WorldSwitcherPanel extends PluginPanel
listContainer.repaint(); 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<World> worlds) void populate(List<World> worlds)
{ {
rows.clear(); rows.clear();
@@ -157,7 +177,7 @@ class WorldSwitcherPanel extends PluginPanel
for (int i = 0; i < worlds.size(); i++) for (int i = 0; i < worlds.size(); i++)
{ {
World world = worlds.get(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(); updateList();

View File

@@ -27,6 +27,7 @@ package net.runelite.client.plugins.worldhopper;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
@@ -69,9 +70,12 @@ class WorldTableRow extends JPanel
FLAG_GER = new ImageIcon(ImageUtil.getResourceStreamFromClass(WorldHopperPlugin.class, "flag_ger.png")); FLAG_GER = new ImageIcon(ImageUtil.getResourceStreamFromClass(WorldHopperPlugin.class, "flag_ger.png"));
} }
private final JMenuItem favoriteMenuOption = new JMenuItem();
private JLabel worldField; private JLabel worldField;
private JLabel playerCountField; private JLabel playerCountField;
private JLabel activityField; private JLabel activityField;
private BiConsumer<World, Boolean> onFavorite;
@Getter @Getter
private final World world; private final World world;
@@ -86,6 +90,7 @@ class WorldTableRow extends JPanel
{ {
this.current = current; this.current = current;
this.world = world; this.world = world;
this.onFavorite = onFavorite;
this.updatedPlayerCount = world.getPlayers(); this.updatedPlayerCount = world.getPlayers();
setLayout(new BorderLayout()); setLayout(new BorderLayout());
@@ -137,19 +142,11 @@ class WorldTableRow extends JPanel
} }
}); });
String favoriteAction = favorite ? setFavoriteMenu(favorite);
"Remove " + world.getId() + " from favorites" :
"Add " + world.getId() + " to favorites";
final JMenuItem fav = new JMenuItem(favoriteAction);
fav.addActionListener(e ->
{
onFavorite.accept(world, !favorite);
});
final JPopupMenu popupMenu = new JPopupMenu(); final JPopupMenu popupMenu = new JPopupMenu();
popupMenu.setBorder(new EmptyBorder(5, 5, 5, 5)); popupMenu.setBorder(new EmptyBorder(5, 5, 5, 5));
popupMenu.add(fav); popupMenu.add(favoriteMenuOption);
setComponentPopupMenu(popupMenu); setComponentPopupMenu(popupMenu);
@@ -177,6 +174,25 @@ class WorldTableRow extends JPanel
add(activityField, BorderLayout.CENTER); 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) void updatePlayerCount(int playerCount)
{ {
this.updatedPlayerCount = playerCount; this.updatedPlayerCount = playerCount;
@@ -204,6 +220,10 @@ class WorldTableRow extends JPanel
{ {
activityField.setForeground(TOURNAMENT_WORLD); activityField.setForeground(TOURNAMENT_WORLD);
} }
else
{
activityField.setForeground(Color.WHITE);
}
worldField.setForeground(world.getTypes().contains(WorldType.MEMBERS) ? MEMBERS_WORLD : FREE_WORLD); worldField.setForeground(world.getTypes().contains(WorldType.MEMBERS) ? MEMBERS_WORLD : FREE_WORLD);
} }