Skip to content

Commit

Permalink
Fixes RPTools#513 Null Pointer Exception on apply change to token macro
Browse files Browse the repository at this point in the history
Fixed issue caused by two functions related to macro edit window that were looking for token only on current map.

However, token macro edit window remains open even if the token is no longer on the current map.

This fix make the two functions look for the token across all maps.
  • Loading branch information
Merudo committed Aug 5, 2019
1 parent b68e836 commit 5803fde
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,18 @@ private String[] parseMultiLineCommand(String multiLineCommand) {
}

public Token getToken() {
return MapTool.getFrame().getCurrentZoneRenderer().getZone().getToken(this.tokenId);
Token token = MapTool.getFrame().getCurrentZoneRenderer().getZone().getToken(this.tokenId);

// If token not in current map, look for token in other maps.
if (token == null) {
List<ZoneRenderer> zrenderers = MapTool.getFrame().getZoneRenderers();
for (ZoneRenderer zr : zrenderers) {
if (token == null) {
token = zr.getZone().getToken(this.tokenId);
}
}
}
return token;
}

public void setTokenId(Token token) {
Expand Down
20 changes: 18 additions & 2 deletions src/main/java/net/rptools/maptool/model/Token.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import net.rptools.maptool.client.MapTool;
import net.rptools.maptool.client.MapToolVariableResolver;
import net.rptools.maptool.client.functions.JSONMacroFunctions;
import net.rptools.maptool.client.ui.zone.ZoneRenderer;
import net.rptools.maptool.client.ui.zone.ZoneRenderer.SelectionSet;
import net.rptools.maptool.language.I18N;
import net.rptools.maptool.util.ImageManager;
Expand Down Expand Up @@ -961,6 +962,22 @@ public GUID getId() {
return id;
}

public ZoneRenderer getZoneRenderer() { // Returns the ZoneRenderer the token is on
ZoneRenderer zoneRenderer = MapTool.getFrame().getCurrentZoneRenderer();
Token token = zoneRenderer.getZone().getToken(getId());

if (token == null) {
List<ZoneRenderer> zrenderers = MapTool.getFrame().getZoneRenderers();
for (ZoneRenderer zr : zrenderers) {
token = zr.getZone().getToken(getId());
if (token != null) {
zoneRenderer = zr;
}
}
}
return zoneRenderer;
}

public void setId(GUID id) {
this.id = id;
}
Expand Down Expand Up @@ -1531,8 +1548,7 @@ public boolean hasMacros(boolean secure) {
public void saveMacroButtonProperty(MacroButtonProperties prop) {
getMacroPropertiesMap(false).put(prop.getIndex(), prop);
MapTool.getFrame().resetTokenPanels();
MapTool.serverCommand()
.putToken(MapTool.getFrame().getCurrentZoneRenderer().getZone().getId(), this);
MapTool.serverCommand().putToken(getZoneRenderer().getZone().getId(), this);

// Lets the token macro panels update only if a macro changes
fireModelChangeEvent(new ModelChangeEvent(this, ChangeEvent.MACRO_CHANGED, id));
Expand Down

0 comments on commit 5803fde

Please sign in to comment.