ge plugin: move item composition and image calls off of awt thread
This commit is contained in:
@@ -28,6 +28,7 @@ package net.runelite.client.plugins.grandexchange;
|
|||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.CardLayout;
|
import java.awt.CardLayout;
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
import java.text.NumberFormat;
|
import java.text.NumberFormat;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.swing.BorderFactory;
|
import javax.swing.BorderFactory;
|
||||||
@@ -43,7 +44,6 @@ import net.runelite.api.GrandExchangeOffer;
|
|||||||
import net.runelite.api.GrandExchangeOfferState;
|
import net.runelite.api.GrandExchangeOfferState;
|
||||||
import static net.runelite.api.GrandExchangeOfferState.EMPTY;
|
import static net.runelite.api.GrandExchangeOfferState.EMPTY;
|
||||||
import net.runelite.api.ItemComposition;
|
import net.runelite.api.ItemComposition;
|
||||||
import net.runelite.client.game.ItemManager;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class GrandExchangeOfferSlot extends JPanel
|
public class GrandExchangeOfferSlot extends JPanel
|
||||||
@@ -57,8 +57,6 @@ public class GrandExchangeOfferSlot extends JPanel
|
|||||||
private static final String INFO_CARD = "INFO_CARD";
|
private static final String INFO_CARD = "INFO_CARD";
|
||||||
private static final String EMPTY_CARD = "EMPTY_CARD";
|
private static final String EMPTY_CARD = "EMPTY_CARD";
|
||||||
|
|
||||||
private final ItemManager itemManager;
|
|
||||||
|
|
||||||
private final CardLayout cardLayout = new CardLayout();
|
private final CardLayout cardLayout = new CardLayout();
|
||||||
private final JLabel itemIcon = new JLabel();
|
private final JLabel itemIcon = new JLabel();
|
||||||
private final TitledBorder itemName = BorderFactory.createTitledBorder("Nothing");
|
private final TitledBorder itemName = BorderFactory.createTitledBorder("Nothing");
|
||||||
@@ -69,9 +67,8 @@ public class GrandExchangeOfferSlot extends JPanel
|
|||||||
* This (sub)panel is used for each GE slot displayed
|
* This (sub)panel is used for each GE slot displayed
|
||||||
* in the sidebar
|
* in the sidebar
|
||||||
*/
|
*/
|
||||||
GrandExchangeOfferSlot(ItemManager itemManager)
|
GrandExchangeOfferSlot()
|
||||||
{
|
{
|
||||||
this.itemManager = itemManager;
|
|
||||||
buildPanel();
|
buildPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,12 +117,9 @@ public class GrandExchangeOfferSlot extends JPanel
|
|||||||
emptySlotCard.add(Box.createHorizontalGlue());
|
emptySlotCard.add(Box.createHorizontalGlue());
|
||||||
|
|
||||||
cardLayout.show(this, EMPTY_CARD);
|
cardLayout.show(this, EMPTY_CARD);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateOffer(@Nullable GrandExchangeOffer newOffer)
|
void updateOffer(ItemComposition offerItem, BufferedImage itemImage, @Nullable GrandExchangeOffer newOffer)
|
||||||
{
|
{
|
||||||
if (newOffer == null || newOffer.getState() == EMPTY)
|
if (newOffer == null || newOffer.getState() == EMPTY)
|
||||||
{
|
{
|
||||||
@@ -136,12 +130,10 @@ public class GrandExchangeOfferSlot extends JPanel
|
|||||||
{
|
{
|
||||||
cardLayout.show(this, INFO_CARD);
|
cardLayout.show(this, INFO_CARD);
|
||||||
|
|
||||||
ItemComposition offerItem = itemManager.getItemComposition(newOffer.getItemId());
|
|
||||||
|
|
||||||
itemName.setTitle(offerItem.getName());
|
itemName.setTitle(offerItem.getName());
|
||||||
|
|
||||||
boolean shouldStack = offerItem.isStackable() || newOffer.getTotalQuantity() > 1;
|
boolean shouldStack = offerItem.isStackable() || newOffer.getTotalQuantity() > 1;
|
||||||
ImageIcon newItemIcon = new ImageIcon(itemManager.getImage(newOffer.getItemId(), newOffer.getTotalQuantity(), shouldStack));
|
ImageIcon newItemIcon = new ImageIcon(itemImage);
|
||||||
itemIcon.setIcon(newItemIcon);
|
itemIcon.setIcon(newItemIcon);
|
||||||
|
|
||||||
offerState.setText(getNameForState(newOffer.getState()) + " at " + NUMBER_FORMATTER.format(newOffer.getPrice()) + (newOffer.getTotalQuantity() > 1 ? "gp ea" : "gp"));
|
offerState.setText(getNameForState(newOffer.getState()) + " at " + NUMBER_FORMATTER.format(newOffer.getPrice()) + (newOffer.getTotalQuantity() > 1 ? "gp ea" : "gp"));
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
package net.runelite.client.plugins.grandexchange;
|
package net.runelite.client.plugins.grandexchange;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.swing.BoxLayout;
|
import javax.swing.BoxLayout;
|
||||||
@@ -35,6 +36,7 @@ import lombok.Getter;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.GrandExchangeOffer;
|
import net.runelite.api.GrandExchangeOffer;
|
||||||
|
import net.runelite.api.ItemComposition;
|
||||||
import net.runelite.client.game.ItemManager;
|
import net.runelite.client.game.ItemManager;
|
||||||
import net.runelite.client.ui.PluginPanel;
|
import net.runelite.client.ui.PluginPanel;
|
||||||
|
|
||||||
@@ -62,7 +64,7 @@ class GrandExchangePanel extends PluginPanel
|
|||||||
offerPanel.setLayout(new BoxLayout(offerPanel, BoxLayout.Y_AXIS));
|
offerPanel.setLayout(new BoxLayout(offerPanel, BoxLayout.Y_AXIS));
|
||||||
for (int i = 0; i < offerSlotPanels.length; ++i)
|
for (int i = 0; i < offerSlotPanels.length; ++i)
|
||||||
{
|
{
|
||||||
offerSlotPanels[i] = new GrandExchangeOfferSlot(itemManager);
|
offerSlotPanels[i] = new GrandExchangeOfferSlot();
|
||||||
offerPanel.add(offerSlotPanels[i]);
|
offerPanel.add(offerSlotPanels[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,9 +75,9 @@ class GrandExchangePanel extends PluginPanel
|
|||||||
tabbedPane.addTab("Search", searchPanel);
|
tabbedPane.addTab("Search", searchPanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateOffer(GrandExchangeOffer newOffer, int slot)
|
void updateOffer(ItemComposition item, BufferedImage itemImage, GrandExchangeOffer newOffer, int slot)
|
||||||
{
|
{
|
||||||
offerSlotPanels[slot].updateOffer(newOffer);
|
offerSlotPanels[slot].updateOffer(item, itemImage, newOffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
void showSearch()
|
void showSearch()
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import javax.imageio.ImageIO;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.GrandExchangeOffer;
|
||||||
import net.runelite.api.ItemComposition;
|
import net.runelite.api.ItemComposition;
|
||||||
import net.runelite.api.Point;
|
import net.runelite.api.Point;
|
||||||
import net.runelite.api.events.ConfigChanged;
|
import net.runelite.api.events.ConfigChanged;
|
||||||
@@ -44,6 +45,7 @@ import net.runelite.api.widgets.Widget;
|
|||||||
import net.runelite.api.widgets.WidgetInfo;
|
import net.runelite.api.widgets.WidgetInfo;
|
||||||
import net.runelite.api.widgets.WidgetItem;
|
import net.runelite.api.widgets.WidgetItem;
|
||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
|
import net.runelite.client.game.ItemManager;
|
||||||
import net.runelite.client.input.MouseListener;
|
import net.runelite.client.input.MouseListener;
|
||||||
import net.runelite.client.input.MouseManager;
|
import net.runelite.client.input.MouseManager;
|
||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
@@ -62,6 +64,9 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
|
|
||||||
private MouseListener itemClick;
|
private MouseListener itemClick;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ItemManager itemManager;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private MouseManager mouseManager;
|
private MouseManager mouseManager;
|
||||||
|
|
||||||
@@ -179,6 +184,10 @@ public class GrandExchangePlugin extends Plugin
|
|||||||
@Subscribe
|
@Subscribe
|
||||||
public void onGrandExchangeOfferChanged(GrandExchangeOfferChanged offerEvent)
|
public void onGrandExchangeOfferChanged(GrandExchangeOfferChanged offerEvent)
|
||||||
{
|
{
|
||||||
SwingUtilities.invokeLater(() -> panel.updateOffer(offerEvent.getOffer(), offerEvent.getSlot()));
|
GrandExchangeOffer offer = offerEvent.getOffer();
|
||||||
|
ItemComposition offerItem = itemManager.getItemComposition(offer.getItemId());
|
||||||
|
boolean shouldStack = offerItem.isStackable() || offer.getTotalQuantity() > 1;
|
||||||
|
BufferedImage itemImage = itemManager.getImage(offer.getItemId(), offer.getTotalQuantity(), shouldStack);
|
||||||
|
SwingUtilities.invokeLater(() -> panel.updateOffer(offerItem, itemImage, offerEvent.getOffer(), offerEvent.getSlot()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,11 +29,8 @@ import java.awt.image.BufferedImage;
|
|||||||
import net.runelite.api.GrandExchangeOffer;
|
import net.runelite.api.GrandExchangeOffer;
|
||||||
import net.runelite.api.GrandExchangeOfferState;
|
import net.runelite.api.GrandExchangeOfferState;
|
||||||
import net.runelite.api.ItemComposition;
|
import net.runelite.api.ItemComposition;
|
||||||
import net.runelite.client.game.ItemManager;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import static org.mockito.Matchers.anyBoolean;
|
|
||||||
import static org.mockito.Matchers.anyInt;
|
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
@@ -42,21 +39,16 @@ import org.mockito.runners.MockitoJUnitRunner;
|
|||||||
@RunWith(MockitoJUnitRunner.class)
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
public class GrandExchangeOfferSlotTest
|
public class GrandExchangeOfferSlotTest
|
||||||
{
|
{
|
||||||
@Mock
|
|
||||||
private ItemManager itemManager;
|
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private GrandExchangeOffer offer;
|
private GrandExchangeOffer offer;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateOffer()
|
public void testUpdateOffer()
|
||||||
{
|
{
|
||||||
when(itemManager.getItemComposition(anyInt())).thenReturn(mock(ItemComposition.class));
|
|
||||||
when(itemManager.getImage(anyInt(), anyInt(), anyBoolean())).thenReturn(mock(BufferedImage.class));
|
|
||||||
when(offer.getState()).thenReturn(GrandExchangeOfferState.CANCELLED);
|
when(offer.getState()).thenReturn(GrandExchangeOfferState.CANCELLED);
|
||||||
|
|
||||||
GrandExchangeOfferSlot offerSlot = new GrandExchangeOfferSlot(itemManager);
|
GrandExchangeOfferSlot offerSlot = new GrandExchangeOfferSlot();
|
||||||
offerSlot.updateOffer(offer);
|
offerSlot.updateOffer(mock(ItemComposition.class), mock(BufferedImage.class), offer);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user