xptracker: fix out-of-sync add to canvas menu (#9983)
Changes so that `XpInfoBox` uses same method of determining whether to show `Add to canvas` or `Remove from canvas` button by calling `hasOverlay`. Previously `XpInfoBox` would rely solely on its own state which meant that if canvas is added from anywhere else (e.g. skill context menu) this action is not known by the `XpInfoBox`. Fixes #9788
This commit is contained in:
committed by
Tomas Slusny
parent
478df41331
commit
a46e1c133d
@@ -41,6 +41,8 @@ import javax.swing.JPopupMenu;
|
||||
import javax.swing.SwingConstants;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.event.PopupMenuEvent;
|
||||
import javax.swing.event.PopupMenuListener;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Getter;
|
||||
import net.runelite.api.Client;
|
||||
@@ -139,18 +141,34 @@ class XpInfoBox extends JPanel
|
||||
popupMenu.add(resetOthers);
|
||||
popupMenu.add(pauseSkill);
|
||||
popupMenu.add(canvasItem);
|
||||
popupMenu.addPopupMenuListener(new PopupMenuListener()
|
||||
{
|
||||
@Override
|
||||
public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent)
|
||||
{
|
||||
canvasItem.setText(xpTrackerPlugin.hasOverlay(skill) ? REMOVE_STATE : ADD_STATE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void popupMenuWillBecomeInvisible(PopupMenuEvent popupMenuEvent)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void popupMenuCanceled(PopupMenuEvent popupMenuEvent)
|
||||
{
|
||||
}
|
||||
});
|
||||
|
||||
canvasItem.addActionListener(e ->
|
||||
{
|
||||
if (canvasItem.getText().equals(REMOVE_STATE))
|
||||
{
|
||||
xpTrackerPlugin.removeOverlay(skill);
|
||||
canvasItem.setText(ADD_STATE);
|
||||
}
|
||||
else
|
||||
{
|
||||
xpTrackerPlugin.addOverlay(skill);
|
||||
canvasItem.setText(REMOVE_STATE);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -262,6 +262,17 @@ public class XpTrackerPlugin extends Plugin
|
||||
overlayManager.removeIf(e -> e instanceof XpInfoBoxOverlay && ((XpInfoBoxOverlay) e).getSkill() == skill);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if there is an overlay on the canvas for the skill.
|
||||
*
|
||||
* @param skill the skill which should have an overlay.
|
||||
* @return true if the skill has an overlay.
|
||||
*/
|
||||
boolean hasOverlay(final Skill skill)
|
||||
{
|
||||
return overlayManager.anyMatch(o -> o instanceof XpInfoBoxOverlay && ((XpInfoBoxOverlay) o).getSkill() == skill);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset internal state and re-initialize all skills with XP currently cached by the RS client
|
||||
* This is called by the user manually clicking resetSkillState in the UI.
|
||||
@@ -708,9 +719,4 @@ public class XpTrackerPlugin extends Plugin
|
||||
pauseSkill(skill, pause);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasOverlay(final Skill skill)
|
||||
{
|
||||
return overlayManager.anyMatch(o -> o instanceof XpInfoBoxOverlay && ((XpInfoBoxOverlay) o).getSkill() == skill);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user