ソースを参照

Move the unequip process outside of the Weapon/Armor/Shield panel

Sam Jaffe 9 年 前
コミット
5722c39d79

+ 1 - 6
src/org/leumasjaffe/charsheet/view/inventory/ArmorPanel.java

@@ -4,7 +4,6 @@ import javax.swing.JPanel;
 import java.awt.GridBagLayout;
 import java.awt.GridBagConstraints;
 import java.awt.Insets;
-import java.util.function.Consumer;
 
 import javax.swing.JLabel;
 import javax.swing.JTextField;
@@ -13,7 +12,6 @@ import java.awt.Font;
 import java.awt.Color;
 import javax.swing.SwingConstants;
 
-import org.leumasjaffe.charsheet.controller.inventory.PopClickListener;
 import org.leumasjaffe.charsheet.model.equip.DDArmor;
 import org.leumasjaffe.charsheet.model.equip.DDItem;
 import org.leumasjaffe.charsheet.view.StringHelper;
@@ -36,7 +34,7 @@ public class ArmorPanel extends JPanel {
 	private JTextField weightField;
 	private JTextField propField;
 
-	public ArmorPanel(DDItem item, Consumer<Component> consumer) {
+	public ArmorPanel(DDItem item) {
 		final DDArmor armor = item.getArmor();
 		
 		setPreferredSize(new Dimension(280, 70));
@@ -285,9 +283,6 @@ public class ArmorPanel extends JPanel {
 		gbc_propField.gridy = 1;
 		panel_1.add(propField, gbc_propField);
 		propField.setColumns(10);
-		
-		addMouseListener(new PopClickListener(
-				new EquipmentInfoMenu(item, new UnequipAction(this, consumer))));
 	}
 
 }

+ 3 - 2
src/org/leumasjaffe/charsheet/view/inventory/EquipmentInfoMenu.java

@@ -3,6 +3,7 @@ package org.leumasjaffe.charsheet.view.inventory;
 import javax.swing.JPopupMenu;
 
 import org.leumasjaffe.charsheet.model.equip.DDItem;
+import org.leumasjaffe.function.VoidVoidFunction;
 
 import java.util.function.Consumer;
 
@@ -16,7 +17,7 @@ class EquipmentInfoMenu extends JPopupMenu {
 	private static final long serialVersionUID = 1L;
 	public Consumer<Void> example;
 	
-	public EquipmentInfoMenu(DDItem item, UnequipAction unequipAction) {
+	public EquipmentInfoMenu(DDItem item, VoidVoidFunction unequipAction) {
 		
 		JMenuItem mntmInfo = new JMenuItem("Info");
 		add(mntmInfo);
@@ -27,7 +28,7 @@ class EquipmentInfoMenu extends JPopupMenu {
 					"Are you sure you want to unequip your " + item.getName(), 
 					"Unequip", JOptionPane.YES_NO_OPTION) 
 					== JOptionPane.YES_OPTION ) {
-				unequipAction.fire();
+				unequipAction.apply();
 				System.out.println("Unequiping " + item.getName());
 			}
 		} );

+ 17 - 12
src/org/leumasjaffe/charsheet/view/inventory/EquipmentPanel.java

@@ -7,6 +7,7 @@ import javax.swing.SwingConstants;
 import javax.swing.border.MatteBorder;
 
 import org.jdesktop.swingx.VerticalLayout;
+import org.leumasjaffe.charsheet.controller.inventory.PopClickListener;
 import org.leumasjaffe.charsheet.model.DDCharacter;
 import org.leumasjaffe.charsheet.model.equip.DDInventory;
 import org.leumasjaffe.charsheet.model.equip.DDItem;
@@ -16,12 +17,11 @@ import lombok.AccessLevel;
 import lombok.experimental.FieldDefaults;
 
 import java.awt.Color;
-import java.awt.Component;
 import java.awt.Font;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.Insets;
-import java.util.function.Consumer;
+import java.util.function.Function;
 
 @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 public class EquipmentPanel extends JPanel {
@@ -70,30 +70,35 @@ public class EquipmentPanel extends JPanel {
 		
 		final DDItem armor = inv.getEquipment().get(EquipmentSlot.BODY);
 		if ( armor != null ) {
-			equipment.add(new ArmorPanel(armor, makeUnequipAction(inv, EquipmentSlot.BODY)));
+			createWithRightClickMenu(ArmorPanel::new, inv, EquipmentSlot.BODY);
 		}
 		
 		final DDItem main = inv.getEquipment().get(EquipmentSlot.MAIN_HAND);
 		final DDItem off = inv.getEquipment().get(EquipmentSlot.OFF_HAND);
 		if ( off != null && off.isArmor() ) {
-			equipment.add(new ShieldPanel(off, makeUnequipAction(inv, EquipmentSlot.MAIN_HAND)));
+			createWithRightClickMenu(ShieldPanel::new, inv, EquipmentSlot.OFF_HAND);
 		}
 		if ( main != null ) {
-			equipment.add(new WeaponPanel(main, makeUnequipAction(inv, EquipmentSlot.OFF_HAND)));
+			createWithRightClickMenu(WeaponPanel::new, inv, EquipmentSlot.MAIN_HAND);
 		}
 		if ( off != null && ( off != main || couldDualWieldThis(off) ) ) {
-			equipment.add(new WeaponPanel(off, makeUnequipAction(inv, EquipmentSlot.OFF_HAND)));
+			createWithRightClickMenu(WeaponPanel::new, inv, EquipmentSlot.OFF_HAND);
 		}
 	}
 
 	private boolean couldDualWieldThis(final DDItem item) {
 		return item.getSlot() == EquipmentSlot.ONE_HAND && item.getCount().value() > 1;
 	}
-
-	private Consumer<Component> makeUnequipAction(final DDInventory inv, final EquipmentSlot slot) {
-		return (comp) -> {
-			comp.getParent().remove(comp);
-			inv.unequip(slot);
-		};
+	
+	private void createWithRightClickMenu(final Function<DDItem, JPanel> make,
+			final DDInventory inv, final EquipmentSlot slot) {
+		final DDItem item = inv.getEquipment().get(slot);
+		final JPanel panel = make.apply(item);
+		equipment.add(panel);
+		panel.addMouseListener(new PopClickListener(
+				new EquipmentInfoMenu(item, () -> {
+					equipment.remove(panel);
+					inv.unequip(slot);
+				})));
 	}
 }

+ 1 - 6
src/org/leumasjaffe/charsheet/view/inventory/ShieldPanel.java

@@ -4,7 +4,6 @@ import javax.swing.JPanel;
 import java.awt.GridBagLayout;
 import java.awt.GridBagConstraints;
 import java.awt.Insets;
-import java.util.function.Consumer;
 
 import javax.swing.JLabel;
 import javax.swing.JTextField;
@@ -13,7 +12,6 @@ import java.awt.Font;
 import java.awt.Color;
 import javax.swing.SwingConstants;
 
-import org.leumasjaffe.charsheet.controller.inventory.PopClickListener;
 import org.leumasjaffe.charsheet.model.equip.DDArmor;
 import org.leumasjaffe.charsheet.model.equip.DDItem;
 import org.leumasjaffe.charsheet.view.StringHelper;
@@ -33,7 +31,7 @@ public class ShieldPanel extends JPanel {
 	private JTextField spellField;
 	private JTextField propField;
 
-	public ShieldPanel(DDItem item, Consumer<Component> consumer) {
+	public ShieldPanel(DDItem item) {
 		final DDArmor armor = item.getArmor();
 		
 		setPreferredSize(new Dimension(280, 70));
@@ -215,9 +213,6 @@ public class ShieldPanel extends JPanel {
 		gbc_propField.gridy = 1;
 		panel_1.add(propField, gbc_propField);
 		propField.setColumns(10);
-		
-		addMouseListener(new PopClickListener(
-				new EquipmentInfoMenu(item, new UnequipAction(this, consumer))));
 	}
 
 }

+ 0 - 19
src/org/leumasjaffe/charsheet/view/inventory/UnequipAction.java

@@ -1,19 +0,0 @@
-package org.leumasjaffe.charsheet.view.inventory;
-
-import java.awt.Component;
-import java.util.function.Consumer;
-
-public class UnequipAction {
-	Component comp;
-	Consumer<Component> apply;
-
-	public UnequipAction(Component base, Consumer<Component> func) {
-		comp = base;
-		apply = func;
-	}
-
-	public void fire() {
-		apply.accept(comp);
-	}
-
-}

+ 1 - 6
src/org/leumasjaffe/charsheet/view/inventory/WeaponPanel.java

@@ -4,7 +4,6 @@ import javax.swing.JPanel;
 import java.awt.GridBagLayout;
 import java.awt.GridBagConstraints;
 import java.awt.Insets;
-import java.util.function.Consumer;
 
 import javax.swing.JLabel;
 import javax.swing.JTextField;
@@ -13,7 +12,6 @@ import java.awt.Font;
 import java.awt.Color;
 import javax.swing.SwingConstants;
 
-import org.leumasjaffe.charsheet.controller.inventory.PopClickListener;
 import org.leumasjaffe.charsheet.model.equip.DDItem;
 import org.leumasjaffe.charsheet.model.equip.DDWeapon;
 import org.leumasjaffe.charsheet.view.StringHelper;
@@ -34,7 +32,7 @@ public class WeaponPanel extends JPanel {
 	private JTextField propField;
 	private JTextField typeField;
 
-	public WeaponPanel(final DDItem item, Consumer<Component> consumer) {
+	public WeaponPanel(final DDItem item) {
 		final DDWeapon weapon = item.getWeapon();
 		
 		setPreferredSize(new Dimension(280, 70));
@@ -242,9 +240,6 @@ public class WeaponPanel extends JPanel {
 		gbc_propField.gridy = 1;
 		panel_1.add(propField, gbc_propField);
 		propField.setColumns(10);
-		
-		addMouseListener(new PopClickListener(
-				new EquipmentInfoMenu(item, new UnequipAction(this, consumer))));
 	}
 
 }

+ 5 - 0
src/org/leumasjaffe/function/VoidVoidFunction.java

@@ -0,0 +1,5 @@
+package org.leumasjaffe.function;
+
+public interface VoidVoidFunction {
+	void apply();
+}