Browse Source

Completing unequip behavior. Unequiping an object also updates the model.

Sam Jaffe 9 years ago
parent
commit
4f16594477

+ 4 - 2
src/org/leumasjaffe/charsheet/view/inventory/ArmorPanel.java

@@ -4,6 +4,8 @@ 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;
 import java.awt.Dimension;
@@ -34,7 +36,7 @@ public class ArmorPanel extends JPanel {
 	private JTextField weightField;
 	private JTextField propField;
 
-	public ArmorPanel(DDItem item) {
+	public ArmorPanel(DDItem item, Consumer<Component> consumer) {
 		final DDArmor armor = item.getArmor();
 		
 		setPreferredSize(new Dimension(280, 70));
@@ -285,7 +287,7 @@ public class ArmorPanel extends JPanel {
 		propField.setColumns(10);
 		
 		addMouseListener(new PopClickListener(
-				new EquipmentInfoMenu(item, new UnequipAction(this))));
+				new EquipmentInfoMenu(item, new UnequipAction(this, consumer))));
 	}
 
 }

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

@@ -16,10 +16,12 @@ 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;
 
 @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
 public class EquipmentPanel extends JPanel {
@@ -68,20 +70,30 @@ public class EquipmentPanel extends JPanel {
 		
 		final DDItem armor = inv.getEquipment().get(EquipmentSlot.BODY);
 		if ( armor != null ) {
-			equipment.add(new ArmorPanel(armor));
+			equipment.add(new ArmorPanel(armor, makeUnequipAction(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));
+			equipment.add(new ShieldPanel(off, makeUnequipAction(inv, EquipmentSlot.MAIN_HAND)));
 		}
 		if ( main != null ) {
-			equipment.add(new WeaponPanel(main));
+			equipment.add(new WeaponPanel(main, makeUnequipAction(inv, EquipmentSlot.OFF_HAND)));
 		}
-		if ( off != null && ( off != main || ( off.getSlot() == EquipmentSlot.ONE_HAND && off.getCount().value() > 1 ) ) ) {
-			equipment.add(new WeaponPanel(off));
+		if ( off != null && ( off != main || couldDualWieldThis(off) ) ) {
+			equipment.add(new WeaponPanel(off, makeUnequipAction(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);
+		};
+	}
 }

+ 4 - 2
src/org/leumasjaffe/charsheet/view/inventory/ShieldPanel.java

@@ -4,6 +4,8 @@ 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;
 import java.awt.Dimension;
@@ -31,7 +33,7 @@ public class ShieldPanel extends JPanel {
 	private JTextField spellField;
 	private JTextField propField;
 
-	public ShieldPanel(DDItem item) {
+	public ShieldPanel(DDItem item, Consumer<Component> consumer) {
 		final DDArmor armor = item.getArmor();
 		
 		setPreferredSize(new Dimension(280, 70));
@@ -215,7 +217,7 @@ public class ShieldPanel extends JPanel {
 		propField.setColumns(10);
 		
 		addMouseListener(new PopClickListener(
-				new EquipmentInfoMenu(item, new UnequipAction(this))));
+				new EquipmentInfoMenu(item, new UnequipAction(this, consumer))));
 	}
 
 }

+ 5 - 2
src/org/leumasjaffe/charsheet/view/inventory/UnequipAction.java

@@ -1,16 +1,19 @@
 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) {
+	public UnequipAction(Component base, Consumer<Component> func) {
 		comp = base;
+		apply = func;
 	}
 
 	public void fire() {
-		comp.getParent().remove(comp);
+		apply.accept(comp);
 	}
 
 }

+ 4 - 2
src/org/leumasjaffe/charsheet/view/inventory/WeaponPanel.java

@@ -4,6 +4,8 @@ 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;
 import java.awt.Dimension;
@@ -32,7 +34,7 @@ public class WeaponPanel extends JPanel {
 	private JTextField propField;
 	private JTextField typeField;
 
-	public WeaponPanel(final DDItem item) {
+	public WeaponPanel(final DDItem item, Consumer<Component> consumer) {
 		final DDWeapon weapon = item.getWeapon();
 		
 		setPreferredSize(new Dimension(280, 70));
@@ -242,7 +244,7 @@ public class WeaponPanel extends JPanel {
 		propField.setColumns(10);
 		
 		addMouseListener(new PopClickListener(
-				new EquipmentInfoMenu(item, new UnequipAction(this))));
+				new EquipmentInfoMenu(item, new UnequipAction(this, consumer))));
 	}
 
 }