diff --git a/src/main/java/net/rptools/maptool/language/I18N.java b/src/main/java/net/rptools/maptool/language/I18N.java index 3e54044bc5..66ab6143d5 100644 --- a/src/main/java/net/rptools/maptool/language/I18N.java +++ b/src/main/java/net/rptools/maptool/language/I18N.java @@ -170,6 +170,11 @@ public static String getString(String key) { * @return the String found with mnemonics removed, or the input key if not found */ public static String getText(String key) { + if (key == null || key.isBlank()) { + // No benefit to doing a lookup + return key; + } + String value = getString(key); if (value == null) { log.debug("Cannot find key '" + key + "' in properties file."); diff --git a/src/main/java/net/rptools/maptool/model/Asset.java b/src/main/java/net/rptools/maptool/model/Asset.java index 0434e5bc82..6c10df0a18 100644 --- a/src/main/java/net/rptools/maptool/model/Asset.java +++ b/src/main/java/net/rptools/maptool/model/Asset.java @@ -16,6 +16,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonParser; +import com.google.protobuf.ByteString; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamConverter; import java.awt.image.BufferedImage; @@ -791,22 +792,29 @@ private boolean isBroken() { } public static Asset fromDto(AssetDto dto) { + var dtoData = dto.getData().toByteArray(); var asset = new Asset( new MD5Key(dto.getMd5Key()), dto.getName(), + dtoData, dto.getExtension(), Asset.Type.valueOf(dto.getType().name()), - false); + dtoData.length == 0); return asset; } public AssetDto toDto() { - return AssetDto.newBuilder() - .setMd5Key(getMD5Key().toString()) - .setName(getName()) - .setExtension(getExtension()) - .setType(AssetDtoType.valueOf(getType().name())) - .build(); + var builder = + AssetDto.newBuilder() + .setMd5Key(getMD5Key().toString()) + .setName(getName()) + .setExtension(getExtension()) + .setType(AssetDtoType.valueOf(getType().name())); + + if (getData() != null) { + builder.setData(ByteString.copyFrom(data)); + } + return builder.build(); } } diff --git a/src/main/proto/data_transfer_objects.proto b/src/main/proto/data_transfer_objects.proto index 62cb56cf33..d922aa8997 100644 --- a/src/main/proto/data_transfer_objects.proto +++ b/src/main/proto/data_transfer_objects.proto @@ -466,6 +466,7 @@ message AssetDto { string name = 2; string extension = 3; AssetDtoType type = 4; + bytes data = 5; } message LabelDto { diff --git a/src/main/resources/net/rptools/maptool/client/ui/forms/tokenPropertiesDialog.xml b/src/main/resources/net/rptools/maptool/client/ui/forms/tokenPropertiesDialog.xml index 3e7d163615..05ab2c3aec 100644 --- a/src/main/resources/net/rptools/maptool/client/ui/forms/tokenPropertiesDialog.xml +++ b/src/main/resources/net/rptools/maptool/client/ui/forms/tokenPropertiesDialog.xml @@ -747,7 +747,7 @@ propertiesTable 1161 - EditTokenDialog.table.properties + fill @@ -3514,7 +3514,7 @@ ownershipList 1161 - EditTokenDialog.label.Ownership + fill @@ -7087,7 +7087,7 @@ xmlStatblockRTextScrollPane 1110 - EditTokenDialog.label.hero.statBlockRTextScroll.xml + fill @@ -7445,7 +7445,7 @@ textStatblockRTextScrollPane 1110 - EditTokenDialog.label.hero.statBlockRTextScroll.text + fill @@ -8070,7 +8070,7 @@ summaryText 850 - EditTokenDialog.valueNotSet.hero.summary + fill @@ -8131,7 +8131,7 @@ true portfolioLocation 95 - EditTokenDialog.valueNotSet.hero.portfolio + fill @@ -8251,7 +8251,7 @@ lastModified 70 - EditTokenDialog.valueNotSet.hero.last + fill diff --git a/src/main/resources/net/rptools/maptool/language/i18n.properties b/src/main/resources/net/rptools/maptool/language/i18n.properties index 48bb817701..343f6f5020 100644 --- a/src/main/resources/net/rptools/maptool/language/i18n.properties +++ b/src/main/resources/net/rptools/maptool/language/i18n.properties @@ -287,7 +287,6 @@ EditTokenDialog.border.title.handout = Handout EditTokenDialog.border.title.charsheet = Charsheet EditTokenDialog.status.layout.instructions = Mouse Wheel to zoom; double-LClick to reset position and zoom EditTokenDialog.label.allplayers = All Players -EditTokenDialog.label.Ownership = ownerShipLabel EditTokenDialog.tab.properties = Properties EditTokenDialog.tab.vbl = Topology EditTokenDialog.tab.state = State @@ -296,7 +295,6 @@ EditTokenDialog.tab.ownership = Ownership EditTokenDialog.tab.config = Config EditTokenDialog.tab.hero = Hero Lab EditTokenDialog.tab.libToken = Lib:Token properties -EditTokenDialog.table.properties = propertiesTable EditTokenDialog.button.vbl = Generate Token Topology EditTokenDialog.button.vbl.tooltip = This will create VBL/MBL based on non-transparent pixels. EditTokenDialog.button.vbl.clear = Clear Token Topology @@ -328,9 +326,6 @@ EditTokenDialog.status.vbl.instructions = Mouse Wheel to zoom; double-LClick to EditTokenDialog.label.hero.summary = Summary: EditTokenDialog.label.hero.portfolio = Portfolio: EditTokenDialog.label.hero.last = Last Modified: -EditTokenDialog.valueNotSet.hero.summary = summaryText -EditTokenDialog.valueNotSet.hero.portfolio = portfolioLocation -EditTokenDialog.valueNotSet.hero.last = lastModified EditTokenDialog.button.hero.setAsTokenPortrait = Set as Token Portrait EditTokenDialog.button.hero.setAsTokenImage = Set as Token Image EditTokenDialog.button.hero.setAsTokenHandout = Set as Token Handout @@ -338,8 +333,6 @@ EditTokenDialog.label.hero.isAlly = Ally? EditTokenDialog.label.hero.statBlockSearch = Expression: EditTokenDialog.button.hero.statBlockSearch.tooltip = Search the statblock using the expression provided. EditTokenDialog.label.hero.statBlockSearch.tooltip = Enter raw text, a regular expression or an xPath expression to search the statblock for. -EditTokenDialog.label.hero.statBlockRTextScroll.text = textStatblockRTextScrollPane -EditTokenDialog.label.hero.statBlockRTextScroll.xml = xmlStatblockRTextScrollPane EditTokenDialog.action.hero.statBlockRTextScroll = Find EditTokenDialog.tab.hero.images = Images EditTokenDialog.tab.hero.text = TEXT