Преглед изворни кода

Get rid of stupid VoidVoidFunction that act as weird lambda bindings when ObserverDispatch is perfectly effective.

Sam Jaffe пре 8 година
родитељ
комит
421ed73474

+ 62 - 62
src/main/lombok/org/leumasjaffe/charsheet/view/inventory/EquipItemHelper.java

@@ -7,83 +7,83 @@ import javax.swing.JOptionPane;
 import org.leumasjaffe.charsheet.model.inventory.DDInventory;
 import org.leumasjaffe.charsheet.model.inventory.DDItem;
 import org.leumasjaffe.charsheet.model.inventory.EquipmentSlot;
-import org.leumasjaffe.function.VoidVoidFunction;
 import org.leumasjaffe.observer.ObserverDispatch;
 
 import lombok.RequiredArgsConstructor;
 
-@RequiredArgsConstructor
-public class EquipItemHelper implements VoidVoidFunction {
-	final InventoryPanel panel;
-	final DDInventory inv;
-	final DDItem item;
-	
-	public void apply() {
+public class EquipItemHelper {	
+
+	public static void accept(final DDInventory inv, final DDItem item) {
 		if ( item.getUnequippedCount() == 0 ) { return; }
-		if ( inv.canEquip( item ) || getReplaceItem( item.getSlot() ) ) {
+		if ( inv.canEquip(item) || new Helper(inv).getReplaceItem(item.getSlot()) ) {
 			item.setCountEquipped(item.getCountEquipped() + 1);
-			inv.equipNext( item );
-			ObserverDispatch.notifySubscribers(inv, panel);
+			inv.equipNext(item);
+			ObserverDispatch.notifySubscribers(inv, null);
 		}
 	}
 
-	private boolean getReplaceItem(final EquipmentSlot slot) {
-		switch ( slot ) {
-		case TWO_HANDS: return selectToReplaceAllOf( TWO_HANDS, MAIN_HAND, OFF_HAND );
-		case ONE_HAND: return selectToReplaceOneOf( MAIN_HAND, OFF_HAND );
-		case RING: return selectToReplaceOneOf( RING1, RING2 );
-		default: return selectToReplace( slot );
+	@RequiredArgsConstructor
+	private static class Helper {
+		final DDInventory inv;
+		
+		private boolean getReplaceItem(final EquipmentSlot slot) {
+			switch ( slot ) {
+			case TWO_HANDS: return selectToReplaceAllOf( TWO_HANDS, MAIN_HAND, OFF_HAND );
+			case ONE_HAND: return selectToReplaceOneOf( MAIN_HAND, OFF_HAND );
+			case RING: return selectToReplaceOneOf( RING1, RING2 );
+			default: return selectToReplace( slot );
+			}
 		}
-	}
 
-	private boolean selectToReplaceAllOf(final EquipmentSlot base,
-			final EquipmentSlot slot1, final EquipmentSlot slot2) {
-		final EquipItemPanel panel;
-		if ( inv.getEquipment().get(slot1).getSlot() == base ) {
-			panel = new EquipItemPanel("Do you want to replace the following item?", 
-					slot1, inv.getEquipment().get(slot1));
-		} else {
-			panel = new EquipItemPanel("Do you want to replace both of the following items?", 
-					new EquipItemPanel.Tuple(slot1, inv.getEquipment().get(slot1)),
-					new EquipItemPanel.Tuple(slot2, inv.getEquipment().get(slot2)));
-		}
-		if ( JOptionPane.showConfirmDialog(null, 
-				panel, "Replace Equipped Item", JOptionPane.YES_NO_OPTION) 
-				== JOptionPane.YES_OPTION ) {
-			inv.unequip( slot1 );
-			inv.unequip( slot2 );
-			return true;
+		private boolean selectToReplaceAllOf(final EquipmentSlot base,
+				final EquipmentSlot slot1, final EquipmentSlot slot2) {
+			final EquipItemPanel panel;
+			if ( inv.getEquipment().get(slot1).getSlot() == base ) {
+				panel = new EquipItemPanel("Do you want to replace the following item?", 
+						slot1, inv.getEquipment().get(slot1));
+			} else {
+				panel = new EquipItemPanel("Do you want to replace both of the following items?", 
+						new EquipItemPanel.Tuple(slot1, inv.getEquipment().get(slot1)),
+						new EquipItemPanel.Tuple(slot2, inv.getEquipment().get(slot2)));
+			}
+			if ( JOptionPane.showConfirmDialog(null, 
+					panel, "Replace Equipped Item", JOptionPane.YES_NO_OPTION) 
+					== JOptionPane.YES_OPTION ) {
+				inv.unequip( slot1 );
+				inv.unequip( slot2 );
+				return true;
+			}
+			return false;
 		}
-		return false;
-	}
 
-	private boolean selectToReplaceOneOf(final EquipmentSlot slot1, 
-			final EquipmentSlot slot2) {
-		final int choice = JOptionPane.showOptionDialog(null, 
-				new EquipItemPanel("Which of the following items would you like to replace?", 
-						new EquipItemPanel.Tuple(slot1, inv.getEquipment().get(slot1)),
-						new EquipItemPanel.Tuple(slot2, inv.getEquipment().get(slot2))), 
-				"Replace Equipped Item", JOptionPane.YES_NO_CANCEL_OPTION,
-				JOptionPane.QUESTION_MESSAGE, null, 
-				new String[] {"Cancel", slot1.toString(), slot2.toString()}, null );
-		if ( choice == JOptionPane.YES_OPTION ) {
-			inv.unequip( slot1 );
-			return true;
-		} else if ( choice == JOptionPane.NO_OPTION ) {
-			inv.unequip( slot2 );
-			return true;
+		private boolean selectToReplaceOneOf(final EquipmentSlot slot1, 
+				final EquipmentSlot slot2) {
+			final int choice = JOptionPane.showOptionDialog(null, 
+					new EquipItemPanel("Which of the following items would you like to replace?", 
+							new EquipItemPanel.Tuple(slot1, inv.getEquipment().get(slot1)),
+							new EquipItemPanel.Tuple(slot2, inv.getEquipment().get(slot2))), 
+					"Replace Equipped Item", JOptionPane.YES_NO_CANCEL_OPTION,
+					JOptionPane.QUESTION_MESSAGE, null, 
+					new String[] {"Cancel", slot1.toString(), slot2.toString()}, null );
+			if ( choice == JOptionPane.YES_OPTION ) {
+				inv.unequip( slot1 );
+				return true;
+			} else if ( choice == JOptionPane.NO_OPTION ) {
+				inv.unequip( slot2 );
+				return true;
+			}
+			return false;
 		}
-		return false;
-	}
 
-	private boolean selectToReplace(final EquipmentSlot slot) {
-		if ( JOptionPane.showConfirmDialog(null, 
-				new EquipItemPanel("Do you want to replace the following item?", slot, inv.getEquipment().get(slot)), 
-				"Replace Equipped Item", JOptionPane.YES_NO_OPTION) 
-				== JOptionPane.YES_OPTION ) {
-			inv.unequip( slot );
-			return true;
+		private boolean selectToReplace(final EquipmentSlot slot) {
+			if ( JOptionPane.showConfirmDialog(null, 
+					new EquipItemPanel("Do you want to replace the following item?", slot, inv.getEquipment().get(slot)), 
+					"Replace Equipped Item", JOptionPane.YES_NO_OPTION) 
+					== JOptionPane.YES_OPTION ) {
+				inv.unequip( slot );
+				return true;
+			}
+			return false;
 		}
-		return false;
 	}
 }

+ 8 - 4
src/main/lombok/org/leumasjaffe/charsheet/view/inventory/EquipmentInfoMenu.java

@@ -2,8 +2,10 @@ package org.leumasjaffe.charsheet.view.inventory;
 
 import javax.swing.JPopupMenu;
 
+import org.leumasjaffe.charsheet.model.inventory.DDInventory;
 import org.leumasjaffe.charsheet.model.inventory.DDItem;
-import org.leumasjaffe.function.VoidVoidFunction;
+import org.leumasjaffe.charsheet.model.inventory.EquipmentSlot;
+import org.leumasjaffe.observer.ObserverDispatch;
 
 import javax.swing.JFrame;
 import javax.swing.JMenuItem;
@@ -15,7 +17,8 @@ class EquipmentInfoMenu extends JPopupMenu {
 	 */
 	private static final long serialVersionUID = 1L;
 	
-	public EquipmentInfoMenu(DDItem item, VoidVoidFunction unequipAction) {
+	public EquipmentInfoMenu(DDInventory inv, DDItem item,
+			EquipmentSlot slot) {
 		
 		JMenuItem mntmInfo = new JMenuItem("Info");
 		add(mntmInfo);
@@ -32,8 +35,9 @@ class EquipmentInfoMenu extends JPopupMenu {
 					"Are you sure you want to unequip your " + item.getName(), 
 					"Unequip", JOptionPane.YES_NO_OPTION) 
 					== JOptionPane.YES_OPTION) {
-				unequipAction.apply();
-				System.out.println("Unequiping " + item.getName());
+				item.setCountEquipped(item.getCountEquipped()-1);
+				inv.unequip(slot);
+				ObserverDispatch.notifySubscribers(inv, null);
 			}
 		});
 		add(mntmEquip);

+ 1 - 8
src/main/lombok/org/leumasjaffe/charsheet/view/inventory/EquipmentPanel.java

@@ -13,7 +13,6 @@ import org.leumasjaffe.charsheet.model.inventory.DDItem;
 import org.leumasjaffe.charsheet.model.inventory.EquipmentSlot;
 import org.leumasjaffe.event.PopClickListener;
 import org.leumasjaffe.observer.ObservableListener;
-import org.leumasjaffe.observer.ObserverDispatch;
 
 import lombok.AccessLevel;
 import lombok.experimental.FieldDefaults;
@@ -139,12 +138,6 @@ public class EquipmentPanel extends JPanel {
 		final JPanel panel = make.apply(item);
 		equipment.add(panel);
 		panel.addMouseListener(new PopClickListener(
-				new EquipmentInfoMenu(item, () -> {
-					equipment.remove(panel);
-					item.setCountEquipped(item.getCountEquipped() - 1);
-					inv.unequip(slot);
-					repaint();
-					ObserverDispatch.notifySubscribers(inv, this);
-				})));
+				new EquipmentInfoMenu(inv, item, slot)));
 	}
 }

+ 1 - 1
src/main/lombok/org/leumasjaffe/charsheet/view/inventory/InventoryPanel.java

@@ -79,7 +79,7 @@ public class InventoryPanel extends JPanel {
 	private void createWithRightClickMenu(final DDInventory inv, final DDItem item) {
 		final ItemPanel panel = new ItemPanel(item);
 		panel.addMouseListener(new PopClickListener(
-				new ItemInfoMenu(item, new EquipItemHelper(this, inv, item))));
+				new ItemInfoMenu(inv, item)));
 		inventory.add(panel);
 	}
 	

+ 13 - 8
src/main/lombok/org/leumasjaffe/charsheet/view/inventory/ItemInfoMenu.java

@@ -2,9 +2,9 @@ package org.leumasjaffe.charsheet.view.inventory;
 
 import javax.swing.JPopupMenu;
 
+import org.leumasjaffe.charsheet.model.inventory.DDInventory;
 import org.leumasjaffe.charsheet.model.inventory.DDItem;
 import org.leumasjaffe.charsheet.model.inventory.EquipmentSlot;
-import org.leumasjaffe.function.VoidVoidFunction;
 
 import javax.swing.JFrame;
 import javax.swing.JMenuItem;
@@ -15,7 +15,7 @@ class ItemInfoMenu extends JPopupMenu {
 	 */
 	private static final long serialVersionUID = 1L;
 
-	public ItemInfoMenu(final DDItem item, final VoidVoidFunction cons) {
+	public ItemInfoMenu(final DDInventory inv, final DDItem item) {
 		
 		JMenuItem mntmInfo = new JMenuItem("Info");
 		add(mntmInfo);
@@ -25,15 +25,20 @@ class ItemInfoMenu extends JPopupMenu {
 			frame.pack();
 			frame.setVisible(true);
 		});
-		
-		if (item.getSlot() != EquipmentSlot.NONE && item.getUnequippedCount() > 0) {
+
+		JMenuItem mntmBuy = new JMenuItem("Purchase");
+		add(mntmBuy);
+
+		JMenuItem mntmSell = new JMenuItem("Sell");	
+		mntmSell.setEnabled(item.getUnequippedCount() > 0);
+		add(mntmSell);
+
+		if (item.getSlot() != EquipmentSlot.NONE) {
 			JMenuItem mntmEquip = new JMenuItem("Equip");
-			mntmEquip.addActionListener(e -> cons.apply());
+			mntmEquip.setEnabled(item.getUnequippedCount() > 0);
+			mntmEquip.addActionListener(e -> EquipItemHelper.accept(inv, item));
 			add(mntmEquip);
 		}
-		
-		JMenuItem mntmRemove = new JMenuItem("Remove");
-		add(mntmRemove);
 	}
 
 }