Преглед на файлове

Moved Equipment and Inventory GUI objects to their own objects.
Added a base unequip action - this still doesn't modify the underlying model

Sam Jaffe преди 9 години
родител
ревизия
c1fdfc0cea

+ 19 - 85
src/org/leumasjaffe/charsheet/view/EquipmentTab.java

@@ -5,25 +5,12 @@ import javax.swing.JPanel;
 import lombok.AccessLevel;
 import lombok.experimental.FieldDefaults;
 import java.awt.GridBagLayout;
-import javax.swing.JScrollPane;
 import java.awt.GridBagConstraints;
-import java.awt.Insets;
 
-import org.jdesktop.swingx.VerticalLayout;
 import org.leumasjaffe.charsheet.model.DDCharacter;
-import org.leumasjaffe.charsheet.model.equip.DDInventory;
-import org.leumasjaffe.charsheet.model.equip.DDItem;
-import org.leumasjaffe.charsheet.model.equip.EquipmentSlot;
-import org.leumasjaffe.charsheet.view.inventory.ArmorPanel;
-import org.leumasjaffe.charsheet.view.inventory.ItemPanel;
-import org.leumasjaffe.charsheet.view.inventory.ShieldPanel;
-import org.leumasjaffe.charsheet.view.inventory.WeaponPanel;
+import org.leumasjaffe.charsheet.view.inventory.EquipmentPanel;
+import org.leumasjaffe.charsheet.view.inventory.InventoryPanel;
 
-import java.awt.Color;
-import javax.swing.JLabel;
-import javax.swing.SwingConstants;
-import java.awt.Font;
-import javax.swing.border.MatteBorder;
 import java.awt.Dimension;
 
 @FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
@@ -32,8 +19,8 @@ public class EquipmentTab extends JPanel {
 	 * 
 	 */
 	private static final long serialVersionUID = 1L;
-	private JPanel equipment;
-	private JPanel inventory;
+	private EquipmentPanel equipment;
+	private InventoryPanel inventory;
 
 	public EquipmentTab() {
 		setPreferredSize(new Dimension(600, 300));
@@ -45,77 +32,24 @@ public class EquipmentTab extends JPanel {
 		gridBagLayout.rowWeights = new double[]{1.0, Double.MIN_VALUE};
 		setLayout(gridBagLayout);
 		
-		JScrollPane scrollPane = new JScrollPane();
-		scrollPane.setOpaque(false);
-		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
-		gbc_scrollPane.insets = new Insets(0, 0, 0, 5);
-		gbc_scrollPane.fill = GridBagConstraints.BOTH;
-		gbc_scrollPane.gridx = 0;
-		gbc_scrollPane.gridy = 0;
-		add(scrollPane, gbc_scrollPane);
-		
-		equipment = new JPanel();
-		equipment.setBackground(Color.WHITE);
-		scrollPane.setViewportView(equipment);
-		equipment.setLayout(new VerticalLayout(5));
-		
-		JScrollPane scrollPane_1 = new JScrollPane();
-		scrollPane_1.setOpaque(false);
-		GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
-		gbc_scrollPane_1.fill = GridBagConstraints.BOTH;
-		gbc_scrollPane_1.gridx = 1;
-		gbc_scrollPane_1.gridy = 0;
-		add(scrollPane_1, gbc_scrollPane_1);
-		
-		inventory = new JPanel();
-		inventory.setBackground(Color.WHITE);
-		scrollPane_1.setViewportView(inventory);
-		inventory.setLayout(new VerticalLayout(5));
-		
-		JLabel lblEquipment = new JLabel("Equipment");
-		lblEquipment.setBorder(new MatteBorder(0, 0, 1, 0, (Color) Color.WHITE));
-		lblEquipment.setFont(new Font("Tahoma", Font.BOLD, 20));
-		lblEquipment.setHorizontalAlignment(SwingConstants.CENTER);
-		lblEquipment.setBackground(Color.BLACK);
-		lblEquipment.setOpaque(true);
-		lblEquipment.setForeground(Color.WHITE);
-		scrollPane.setColumnHeaderView(lblEquipment);
-		
-		JLabel lblInventory = new JLabel("Inventory");
-		lblInventory.setBorder(new MatteBorder(0, 0, 1, 0, (Color) Color.WHITE));
-		lblInventory.setHorizontalAlignment(SwingConstants.CENTER);
-		lblInventory.setBackground(Color.BLACK);
-		lblInventory.setOpaque(true);
-		lblInventory.setForeground(Color.WHITE);
-		lblInventory.setFont(new Font("Tahoma", Font.BOLD, 20));
-		scrollPane_1.setColumnHeaderView(lblInventory);		
+		equipment = new EquipmentPanel();
+		GridBagConstraints gbc_equipment = new GridBagConstraints();
+		gbc_equipment.fill = GridBagConstraints.BOTH;
+		gbc_equipment.gridx = 0;
+		gbc_equipment.gridy = 0;
+		add(equipment, gbc_equipment);
+				
+		inventory = new InventoryPanel();
+		GridBagConstraints gbc_inventory = new GridBagConstraints();
+		gbc_inventory.fill = GridBagConstraints.BOTH;
+		gbc_inventory.gridx = 1;
+		gbc_inventory.gridy = 0;
+		add(inventory, gbc_inventory);
 	}
 
 	public void setModel(DDCharacter model) {
-		equipment.removeAll();
-		inventory.removeAll();
-		
-		final DDInventory inv = model.getInventory();
-		for ( final DDItem item : inv.getItems() ) {
-			inventory.add(new ItemPanel(item));
-		}
-		
-		final DDItem armor = inv.getEquipment().get(EquipmentSlot.BODY);
-		if ( armor != null ) {
-			equipment.add(new ArmorPanel(armor));
-		}
-		
-		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));
-		}
-		if ( main != null ) {
-			equipment.add(new WeaponPanel(main));
-		}
-		if ( off != null && ( off != main || ( off.getSlot() == EquipmentSlot.ONE_HAND && off.getCount().value() > 1 ) ) ) {
-			equipment.add(new WeaponPanel(off));
-		}
+		equipment.setModel(model);
+		inventory.setModel(model);
 	}
 
 }

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

@@ -11,6 +11,8 @@ 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,6 +35,8 @@ public class ArmorPanel extends JPanel {
 	private JTextField propField;
 
 	public ArmorPanel(DDItem item) {
+		final DDArmor armor = item.getArmor();
+		
 		setPreferredSize(new Dimension(280, 70));
 		GridBagLayout gridBagLayout = new GridBagLayout();
 		gridBagLayout.columnWidths = new int[]{0, 0};
@@ -127,7 +131,7 @@ public class ArmorPanel extends JPanel {
 		panel.add(armorNameField, gbc_armorNameField);
 		armorNameField.setColumns(10);
 		
-		armorTypeField = new JTextField(item.getArmor().getType().toString());
+		armorTypeField = new JTextField(armor.getType().toString());
 		GridBagConstraints gbc_armorTypeField = new GridBagConstraints();
 		gbc_armorTypeField.insets = new Insets(0, 0, 0, 0);
 		gbc_armorTypeField.fill = GridBagConstraints.HORIZONTAL;
@@ -146,7 +150,7 @@ public class ArmorPanel extends JPanel {
 		panel.add(armorBonusField, gbc_armorBonusField);
 		armorBonusField.setColumns(10);
 		
-		armorDexField = new JTextField(StringHelper.toSignedString(item.getArmor().getMaxDex()));
+		armorDexField = new JTextField(StringHelper.toSignedString(armor.getMaxDex()));
 		armorDexField.setHorizontalAlignment(SwingConstants.CENTER);
 		GridBagConstraints gbc_armorDexField = new GridBagConstraints();
 		gbc_armorDexField.fill = GridBagConstraints.HORIZONTAL;
@@ -233,7 +237,7 @@ public class ArmorPanel extends JPanel {
 		gbc_lblSpecialProperties.gridy = 0;
 		panel_1.add(lblSpecialProperties, gbc_lblSpecialProperties);
 		
-		checkField = new JTextField(StringHelper.toString(item.getArmor().getCheckPenalty()));
+		checkField = new JTextField(StringHelper.toString(armor.getCheckPenalty()));
 		checkField.setHorizontalAlignment(SwingConstants.CENTER);
 		GridBagConstraints gbc_checkField = new GridBagConstraints();
 		gbc_checkField.insets = new Insets(0, 0, 0, 0);
@@ -243,7 +247,7 @@ public class ArmorPanel extends JPanel {
 		panel_1.add(checkField, gbc_checkField);
 		checkField.setColumns(10);
 		
-		spellField = new JTextField(StringHelper.toString(item.getArmor().getSpellFailure()) + "%");
+		spellField = new JTextField(StringHelper.toString(armor.getSpellFailure()) + "%");
 		spellField.setHorizontalAlignment(SwingConstants.CENTER);
 		GridBagConstraints gbc_spellField = new GridBagConstraints();
 		gbc_spellField.insets = new Insets(0, 0, 0, 0);
@@ -253,7 +257,7 @@ public class ArmorPanel extends JPanel {
 		panel_1.add(spellField, gbc_spellField);
 		spellField.setColumns(10);
 		
-		speedField = new JTextField(StringHelper.toString(item.getArmor().getSpeed()));
+		speedField = new JTextField(StringHelper.toString(armor.getSpeed()));
 		speedField.setHorizontalAlignment(SwingConstants.CENTER);
 		GridBagConstraints gbc_speedField = new GridBagConstraints();
 		gbc_speedField.insets = new Insets(0, 0, 0, 0);
@@ -279,7 +283,9 @@ public class ArmorPanel extends JPanel {
 		gbc_propField.gridy = 1;
 		panel_1.add(propField, gbc_propField);
 		propField.setColumns(10);
-		// TODO Auto-generated constructor stub
+		
+		addMouseListener(new PopClickListener(
+				new EquipmentInfoMenu(item, new UnequipAction(this))));
 	}
 
 }

+ 16 - 6
src/org/leumasjaffe/charsheet/view/inventory/EquipmentInfoMenu.java

@@ -4,24 +4,34 @@ import javax.swing.JPopupMenu;
 
 import org.leumasjaffe.charsheet.model.equip.DDItem;
 
+import java.util.function.Consumer;
+
 import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
 
-public class EquipmentInfoMenu extends JPopupMenu {
+class EquipmentInfoMenu extends JPopupMenu {
 	/**
 	 * 
 	 */
 	private static final long serialVersionUID = 1L;
-
-	public EquipmentInfoMenu(DDItem item) {
+	public Consumer<Void> example;
+	
+	public EquipmentInfoMenu(DDItem item, UnequipAction unequipAction) {
 		
 		JMenuItem mntmInfo = new JMenuItem("Info");
 		add(mntmInfo);
 		
 		JMenuItem mntmEquip = new JMenuItem("Unequip");
+		mntmEquip.addActionListener( e -> {
+			if ( JOptionPane.showConfirmDialog(null, 
+					"Are you sure you want to unequip your " + item.getName(), 
+					"Unequip", JOptionPane.YES_NO_OPTION) 
+					== JOptionPane.YES_OPTION ) {
+				unequipAction.fire();
+				System.out.println("Unequiping " + item.getName());
+			}
+		} );
 		add(mntmEquip);
-		
-		JMenuItem mntmRemove = new JMenuItem("Remove");
-		add(mntmRemove);
 	}
 
 }

+ 87 - 0
src/org/leumasjaffe/charsheet/view/inventory/EquipmentPanel.java

@@ -0,0 +1,87 @@
+package org.leumasjaffe.charsheet.view.inventory;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.SwingConstants;
+import javax.swing.border.MatteBorder;
+
+import org.jdesktop.swingx.VerticalLayout;
+import org.leumasjaffe.charsheet.model.DDCharacter;
+import org.leumasjaffe.charsheet.model.equip.DDInventory;
+import org.leumasjaffe.charsheet.model.equip.DDItem;
+import org.leumasjaffe.charsheet.model.equip.EquipmentSlot;
+
+import lombok.AccessLevel;
+import lombok.experimental.FieldDefaults;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+
+@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
+public class EquipmentPanel extends JPanel {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	JPanel equipment;
+
+	public EquipmentPanel() {
+		GridBagLayout gridBagLayout = new GridBagLayout();
+		gridBagLayout.columnWidths = new int[]{0};
+		gridBagLayout.rowHeights = new int[]{0};
+		gridBagLayout.columnWeights = new double[]{Double.MIN_VALUE};
+		gridBagLayout.rowWeights = new double[]{Double.MIN_VALUE};
+		setLayout(gridBagLayout);
+		
+		JScrollPane scrollPane = new JScrollPane();
+		scrollPane.setOpaque(false);
+		GridBagConstraints gbc_scrollPane = new GridBagConstraints();
+		gbc_scrollPane.insets = new Insets(0, 0, 0, 5);
+		gbc_scrollPane.fill = GridBagConstraints.BOTH;
+		gbc_scrollPane.gridx = 0;
+		gbc_scrollPane.gridy = 0;
+		add(scrollPane, gbc_scrollPane);
+		
+		JLabel lblEquipment = new JLabel("Equipment");
+		lblEquipment.setBorder(new MatteBorder(0, 0, 1, 0, (Color) Color.WHITE));
+		lblEquipment.setFont(new Font("Tahoma", Font.BOLD, 20));
+		lblEquipment.setHorizontalAlignment(SwingConstants.CENTER);
+		lblEquipment.setBackground(Color.BLACK);
+		lblEquipment.setOpaque(true);
+		lblEquipment.setForeground(Color.WHITE);
+		scrollPane.setColumnHeaderView(lblEquipment);
+
+		equipment = new JPanel();
+		equipment.setBackground(Color.WHITE);
+		scrollPane.setViewportView(equipment);
+		equipment.setLayout(new VerticalLayout(5));
+	}
+	
+	public void setModel(DDCharacter model) {
+		equipment.removeAll();
+		
+		final DDInventory inv = model.getInventory();
+		
+		final DDItem armor = inv.getEquipment().get(EquipmentSlot.BODY);
+		if ( armor != null ) {
+			equipment.add(new ArmorPanel(armor));
+		}
+		
+		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));
+		}
+		if ( main != null ) {
+			equipment.add(new WeaponPanel(main));
+		}
+		if ( off != null && ( off != main || ( off.getSlot() == EquipmentSlot.ONE_HAND && off.getCount().value() > 1 ) ) ) {
+			equipment.add(new WeaponPanel(off));
+		}
+	}
+
+}

+ 70 - 0
src/org/leumasjaffe/charsheet/view/inventory/InventoryPanel.java

@@ -0,0 +1,70 @@
+package org.leumasjaffe.charsheet.view.inventory;
+
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.SwingConstants;
+import javax.swing.border.MatteBorder;
+
+import org.jdesktop.swingx.VerticalLayout;
+import org.leumasjaffe.charsheet.model.DDCharacter;
+import org.leumasjaffe.charsheet.model.equip.DDInventory;
+import org.leumasjaffe.charsheet.model.equip.DDItem;
+
+import lombok.AccessLevel;
+import lombok.experimental.FieldDefaults;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+
+@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
+public class InventoryPanel extends JPanel {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	JComponent inventory;
+
+	public InventoryPanel() {
+		GridBagLayout gridBagLayout = new GridBagLayout();
+		gridBagLayout.columnWidths = new int[]{0};
+		gridBagLayout.rowHeights = new int[]{0};
+		gridBagLayout.columnWeights = new double[]{Double.MIN_VALUE};
+		gridBagLayout.rowWeights = new double[]{Double.MIN_VALUE};
+		setLayout(gridBagLayout);
+		
+		JScrollPane scrollPane = new JScrollPane();
+		scrollPane.setOpaque(false);
+		GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
+		gbc_scrollPane_1.fill = GridBagConstraints.BOTH;
+		gbc_scrollPane_1.gridx = 0;
+		gbc_scrollPane_1.gridy = 0;
+		add(scrollPane, gbc_scrollPane_1);
+		
+		JLabel lblInventory = new JLabel("Inventory");
+		lblInventory.setBorder(new MatteBorder(0, 0, 1, 0, (Color) Color.WHITE));
+		lblInventory.setHorizontalAlignment(SwingConstants.CENTER);
+		lblInventory.setBackground(Color.BLACK);
+		lblInventory.setOpaque(true);
+		lblInventory.setForeground(Color.WHITE);
+		lblInventory.setFont(new Font("Tahoma", Font.BOLD, 20));
+		scrollPane.setColumnHeaderView(lblInventory);		
+		
+		inventory = new JPanel();
+		inventory.setBackground(Color.WHITE);
+		scrollPane.setViewportView(inventory);
+		inventory.setLayout(new VerticalLayout(5));
+	}
+
+	public void setModel(DDCharacter model) {
+		inventory.removeAll();
+		
+		final DDInventory inv = model.getInventory();
+		for ( final DDItem item : inv.getItems() ) {
+			inventory.add(new ItemPanel(item));
+		}
+	}
+}

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

@@ -7,7 +7,7 @@ import org.leumasjaffe.charsheet.model.equip.EquipmentSlot;
 
 import javax.swing.JMenuItem;
 
-public class ItemInfoMenu extends JPopupMenu {
+class ItemInfoMenu extends JPopupMenu {
 	/**
 	 * 
 	 */

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

@@ -11,6 +11,8 @@ 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;
 
@@ -29,7 +31,9 @@ public class ShieldPanel extends JPanel {
 	private JTextField spellField;
 	private JTextField propField;
 
-	public ShieldPanel(DDItem shield) {
+	public ShieldPanel(DDItem item) {
+		final DDArmor armor = item.getArmor();
+		
 		setPreferredSize(new Dimension(280, 70));
 		GridBagLayout gridBagLayout = new GridBagLayout();
 		gridBagLayout.columnWidths = new int[]{0, 0};
@@ -115,7 +119,7 @@ public class ShieldPanel extends JPanel {
 		lblCheckPenalty.setBackground(Color.BLACK);
 		lblCheckPenalty.setFont(new Font("Tahoma", Font.BOLD, 8));
 		
-		nameField = new JTextField(shield.getName());
+		nameField = new JTextField(item.getName());
 		GridBagConstraints gbc_nameField = new GridBagConstraints();
 		gbc_nameField.insets = new Insets(0, 0, 0, 0);
 		gbc_nameField.fill = GridBagConstraints.HORIZONTAL;
@@ -124,7 +128,7 @@ public class ShieldPanel extends JPanel {
 		panel.add(nameField, gbc_nameField);
 		nameField.setColumns(10);
 		
-		armorBonusField = new JTextField(StringHelper.toSignedString(shield.getArmor().getBonus()));
+		armorBonusField = new JTextField(StringHelper.toSignedString(armor.getBonus()));
 		armorBonusField.setHorizontalAlignment(SwingConstants.CENTER);
 		GridBagConstraints gbc_armorBonusField = new GridBagConstraints();
 		gbc_armorBonusField.insets = new Insets(0, 0, 0, 0);
@@ -144,7 +148,7 @@ public class ShieldPanel extends JPanel {
 		panel.add(weightField, gbc_weightField);
 		weightField.setColumns(10);
 		
-		checkField = new JTextField(StringHelper.toString(shield.getArmor().getCheckPenalty()));
+		checkField = new JTextField(StringHelper.toString(armor.getCheckPenalty()));
 		checkField.setHorizontalAlignment(SwingConstants.CENTER);
 		GridBagConstraints gbc_checkField = new GridBagConstraints();
 		gbc_checkField.fill = GridBagConstraints.HORIZONTAL;
@@ -192,7 +196,7 @@ public class ShieldPanel extends JPanel {
 		gbc_lblSpecialProperties.gridy = 0;
 		panel_1.add(lblSpecialProperties, gbc_lblSpecialProperties);
 		
-		spellField = new JTextField(StringHelper.toString(shield.getArmor().getSpellFailure()));
+		spellField = new JTextField(StringHelper.toString(armor.getSpellFailure()) + "%");
 		spellField.setHorizontalAlignment(SwingConstants.CENTER);
 		GridBagConstraints gbc_spellField = new GridBagConstraints();
 		gbc_spellField.insets = new Insets(0, 0, 0, 0);
@@ -209,7 +213,9 @@ public class ShieldPanel extends JPanel {
 		gbc_propField.gridy = 1;
 		panel_1.add(propField, gbc_propField);
 		propField.setColumns(10);
-		// TODO Auto-generated constructor stub
+		
+		addMouseListener(new PopClickListener(
+				new EquipmentInfoMenu(item, new UnequipAction(this))));
 	}
 
 }

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

@@ -0,0 +1,16 @@
+package org.leumasjaffe.charsheet.view.inventory;
+
+import java.awt.Component;
+
+public class UnequipAction {
+	Component comp;
+
+	public UnequipAction(Component base) {
+		comp = base;
+	}
+
+	public void fire() {
+		comp.getParent().remove(comp);
+	}
+
+}

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

@@ -11,6 +11,7 @@ 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;
@@ -239,7 +240,9 @@ public class WeaponPanel extends JPanel {
 		gbc_propField.gridy = 1;
 		panel_1.add(propField, gbc_propField);
 		propField.setColumns(10);
-		// TODO Auto-generated constructor stub
+		
+		addMouseListener(new PopClickListener(
+				new EquipmentInfoMenu(item, new UnequipAction(this))));
 	}
 
 }