Browse Source

Adding system to view spell info in the prepare-a-spell Dialog.

Sam Jaffe 8 years ago
parent
commit
0ebc0f134b

+ 19 - 2
src/org/leumasjaffe/charsheet/view/magic/SelectPreparedSpellsPanel.java

@@ -2,10 +2,10 @@ package org.leumasjaffe.charsheet.view.magic;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.List;
 
 import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
 import javax.swing.JTable;
 import javax.swing.ListSelectionModel;
 
@@ -14,6 +14,7 @@ import org.leumasjaffe.charsheet.model.magic.DDSpell;
 import org.leumasjaffe.charsheet.model.magic.impl.Prepared;
 import org.leumasjaffe.charsheet.model.observable.IntValue;
 import org.leumasjaffe.charsheet.util.StringHelper;
+import org.leumasjaffe.graphics.SelectTableRowPopupMenuListener;
 
 import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
@@ -23,10 +24,13 @@ import java.awt.GridBagLayout;
 import java.awt.Dimension;
 import java.awt.GridBagConstraints;
 import java.awt.Insets;
+
 import javax.swing.border.BevelBorder;
 import javax.swing.border.SoftBevelBorder;
 import javax.swing.table.AbstractTableModel;
 import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
 import javax.swing.JScrollPane;
 
@@ -80,7 +84,7 @@ class SelectPreparedSpellsPanel extends JPanel {
 		putClientProperty(READY, true);
 		final Prepared spellBook = (Prepared) dclass.getSpellBook().get();
 		this.prepared = new ArrayList<>(spellBook.getSpellsPreparedPreviouslyForLevel(level));
-		final Collection<DDSpell> known = spellBook.spellsKnownAtLevel(level);
+		final List<DDSpell> known = new ArrayList<>(spellBook.spellsKnownAtLevel(level));
 		this.modelPrepared = new SelectSpellModel(prepared.stream().map(DDSpell::getName).toArray());
 		this.modelKnown = new SelectSpellModel(known.stream().map(DDSpell::getName).toArray());
 		
@@ -144,6 +148,19 @@ class SelectPreparedSpellsPanel extends JPanel {
 		scrollPane.setViewportView(tableKnown);
 		tableKnown.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
 		
+		JPopupMenu popup = new JPopupMenu();
+		popup.addPopupMenuListener(new SelectTableRowPopupMenuListener(popup, tableKnown));
+		JMenuItem mntmInfo = new JMenuItem("Info");
+		mntmInfo.addActionListener( e -> {
+			DDSpell spell = known.get(tableKnown.getSelectedRow());
+			JFrame frame = new JFrame(spell.getName() +  " (" + dclass.getName() + " " + level + ")");
+			frame.add(new SpellInfoPanel(dclass, spell));
+			frame.pack();
+			frame.setVisible(true);
+		});
+		popup.add(mntmInfo);
+		tableKnown.setComponentPopupMenu(popup);
+		
 		JButton button = new JButton(">>");
 		button.setMargin(new Insets(2, 8, 2, 8));
 		GridBagConstraints gbc_button = new GridBagConstraints();

+ 36 - 0
src/org/leumasjaffe/graphics/SelectTableRowPopupMenuListener.java

@@ -0,0 +1,36 @@
+package org.leumasjaffe.graphics;
+
+import java.awt.Point;
+
+import javax.swing.JPopupMenu;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
+
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public final class SelectTableRowPopupMenuListener implements PopupMenuListener {
+	JPopupMenu popupMenu;
+	JTable table;
+
+	@Override
+	public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+	    SwingUtilities.invokeLater(new Runnable() {
+	        @Override
+	        public void run() {
+	            int rowAtPoint = table.rowAtPoint(SwingUtilities.convertPoint(popupMenu, new Point(0, 0), table));
+	            if (rowAtPoint > -1) {
+	            	table.setRowSelectionInterval(rowAtPoint, rowAtPoint);
+	            }
+	        }
+	    });
+	}
+
+	@Override
+	public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
+
+	@Override
+	public void popupMenuCanceled(PopupMenuEvent e) {}
+}