|
51 | 51 | import javax.swing.event.DocumentEvent; |
52 | 52 | import javax.swing.event.DocumentListener; |
53 | 53 | import javax.swing.table.AbstractTableModel; |
54 | | -import javax.swing.table.DefaultTableModel; |
55 | 54 | import javax.swing.table.TableCellRenderer; |
56 | 55 | import javax.swing.text.Position.Bias; |
57 | 56 | import javax.swing.text.html.HTMLDocument; |
@@ -138,6 +137,10 @@ public EditTokenDialog() { |
138 | 137 | this(new TokenPropertiesDialog()); |
139 | 138 | } |
140 | 139 |
|
| 140 | + public void initPropertyTable() { |
| 141 | + getPropertyTable().setModel(new TokenPropertyTableModel()); |
| 142 | + } |
| 143 | + |
141 | 144 | public void initGMNotesEditorPane() { |
142 | 145 | setGmNotesEnabled(MapTool.getPlayer().isGM()); |
143 | 146 | } |
@@ -677,15 +680,9 @@ private void updatePropertiesTable(@Nullable Token token, final String propertyT |
677 | 680 | EventQueue.invokeLater( |
678 | 681 | () -> { |
679 | 682 | PropertyTable pp = getPropertyTable(); |
680 | | - if (token != null) { |
681 | | - var propertyList = MapTool.getCampaign().getTokenPropertyList(propertyType); |
682 | | - |
683 | | - pp.setModel( |
684 | | - new TokenPropertyTableModel( |
685 | | - token, propertyType, propertyList, propertyCellRenderer)); |
686 | | - } else { |
687 | | - pp.setModel(new DefaultTableModel()); |
688 | | - } |
| 683 | + var propertyList = MapTool.getCampaign().getTokenPropertyList(propertyType); |
| 684 | + pp.setModel( |
| 685 | + new TokenPropertyTableModel(token, propertyType, propertyList, propertyCellRenderer)); |
689 | 686 | pp.expandAll(); |
690 | 687 | }); |
691 | 688 | } |
@@ -925,7 +922,15 @@ public boolean commit() { |
925 | 922 | token.setSpeechMap(((KeyValueTableModel) getSpeechTable().getModel()).getMap()); |
926 | 923 |
|
927 | 924 | /* Properties */ |
928 | | - ((TokenPropertyTableModel) getPropertyTable().getModel()).applyTo(token); |
| 925 | + var tableModel = getPropertyTable().getModel(); |
| 926 | + if (getPropertyTable().getModel() instanceof TokenPropertyTableModel tokenPropertyTableModel) { |
| 927 | + tokenPropertyTableModel.applyTo(token); |
| 928 | + } else { |
| 929 | + log.warn( |
| 930 | + "Property table model is not of the expected type; expected {} but got {}", |
| 931 | + TokenPropertyTableModel.class, |
| 932 | + tableModel.getClass()); |
| 933 | + } |
929 | 934 |
|
930 | 935 | /* Charsheet */ |
931 | 936 | if (getCharSheetPanel().getImageId() != null) { |
@@ -2165,16 +2170,21 @@ private static class TokenPropertyTableModel |
2165 | 2170 | private final List<TokenProperty> propertyList; |
2166 | 2171 | private final Map<String, String> propertyMap; |
2167 | 2172 |
|
| 2173 | + public TokenPropertyTableModel() { |
| 2174 | + propertyList = List.of(); |
| 2175 | + propertyMap = Map.of(); |
| 2176 | + } |
| 2177 | + |
2168 | 2178 | public TokenPropertyTableModel( |
2169 | | - Token model, |
| 2179 | + @Nullable Token model, |
2170 | 2180 | String propertyType, |
2171 | 2181 | List<TokenProperty> propertyList, |
2172 | 2182 | TableCellRenderer propertyCellRenderer) { |
2173 | 2183 | this.propertyList = propertyList; |
2174 | 2184 |
|
2175 | 2185 | this.propertyMap = new HashMap<>(); |
2176 | 2186 | for (TokenProperty property : propertyList) { |
2177 | | - String value = (String) model.getProperty(property.getName()); |
| 2187 | + String value = model == null ? null : (String) model.getProperty(property.getName()); |
2178 | 2188 | if (value == null) { |
2179 | 2189 | value = property.getDefaultValue(); |
2180 | 2190 | } |
|
0 commit comments