|
30 | 30 | import java.io.IOException; |
31 | 31 | import java.util.Arrays; |
32 | 32 | import java.util.List; |
| 33 | +import java.util.Objects; |
33 | 34 | import java.util.logging.Level; |
34 | 35 | import java.util.logging.Logger; |
35 | 36 | import java.util.stream.Collectors; |
|
58 | 59 | import javax.swing.table.TableModel; |
59 | 60 | import org.apache.commons.lang3.ArrayUtils; |
60 | 61 | import org.apache.commons.lang3.StringUtils; |
| 62 | +import pcgen.core.Equipment; |
61 | 63 | import pcgen.facade.core.CharacterFacade; |
62 | 64 | import pcgen.facade.core.EquipmentFacade; |
63 | 65 | import pcgen.facade.core.EquipmentSetFacade; |
@@ -1009,6 +1011,8 @@ public void showPopup(MouseEvent e) |
1009 | 1011 | popupMenu.add(new MoveEquipDownMenuItem(character, targets)); |
1010 | 1012 | popupMenu.addSeparator(); |
1011 | 1013 | popupMenu.add(new SortEquipMenuItem(character, targets)); |
| 1014 | + popupMenu.addSeparator(); |
| 1015 | + popupMenu.add(new EditChargesMenuItem(character, targets)); |
1012 | 1016 | popupMenu.show(e.getComponent(), e.getX(), e.getY()); |
1013 | 1017 | } |
1014 | 1018 |
|
@@ -1132,4 +1136,45 @@ public void actionPerformed(ActionEvent e) |
1132 | 1136 |
|
1133 | 1137 | } |
1134 | 1138 |
|
| 1139 | + /** |
| 1140 | + * Menu item for editing the number of charges on an item. |
| 1141 | + */ |
| 1142 | + private static class EditChargesMenuItem extends JMenuItem implements ActionListener |
| 1143 | + { |
| 1144 | + private final CharacterFacade character; |
| 1145 | + private final List<? extends EquipNode> targets; |
| 1146 | + |
| 1147 | + EditChargesMenuItem(CharacterFacade character, List<? extends EquipNode> targets) |
| 1148 | + { |
| 1149 | + super(LanguageBundle.getString("in_igModifyCharges")); //$NON-NLS-1$ |
| 1150 | + this.character = character; |
| 1151 | + this.targets = targets; |
| 1152 | + setIcon(Icons.Edit16.getImageIcon()); |
| 1153 | + // Set enabled only if there are items with charges |
| 1154 | + boolean hasItemWithCharges = false; |
| 1155 | + for (EquipNode node : targets) |
| 1156 | + { |
| 1157 | + EquipmentFacade equipment = node.getEquipment(); |
| 1158 | + if (equipment instanceof Equipment && ((Equipment) equipment).getMaxCharges() > 0) |
| 1159 | + { |
| 1160 | + hasItemWithCharges = true; |
| 1161 | + break; |
| 1162 | + } |
| 1163 | + } |
| 1164 | + setEnabled(hasItemWithCharges); |
| 1165 | + |
| 1166 | + addActionListener(this); |
| 1167 | + } |
| 1168 | + |
| 1169 | + @Override |
| 1170 | + public void actionPerformed(ActionEvent e) |
| 1171 | + { |
| 1172 | + List<EquipmentFacade> equipmentList = targets.stream() |
| 1173 | + .map(EquipNode::getEquipment) |
| 1174 | + .filter(Objects::nonNull) |
| 1175 | + .collect(Collectors.toList()); |
| 1176 | + |
| 1177 | + character.modifyCharges(equipmentList); |
| 1178 | + } |
| 1179 | + } |
1135 | 1180 | } |
0 commit comments