Add a View DeckList option to the Home screen. A couple points:

1) It only works for pre-constructed decks (currently)
2) Probably can be expanded to Theme decks by generating a sample to display
3) TODO - button should be enabled/disabled as appropriate
4) currently doesn't obey FSkin
This commit is contained in:
slapshot5
2011-12-11 17:13:13 +00:00
parent 3a994ea5cd
commit 5ef22b1f8a
4 changed files with 119 additions and 5 deletions

View File

@@ -1,11 +1,16 @@
package forge.control.home;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Map.Entry;
import javax.swing.JList;
import javax.swing.JOptionPane;
@@ -22,6 +27,7 @@ import forge.deck.generate.Generate3ColorDeck;
import forge.deck.generate.Generate5ColorDeck;
import forge.deck.generate.GenerateThemeDeck;
import forge.game.GameType;
import forge.item.CardPrinted;
import forge.view.GuiTopLevel;
import forge.view.home.ViewConstructed;
@@ -463,4 +469,90 @@ public class ControlConstructed {
return deckNames.toArray();
}
/**
* View deck list.
*/
public void viewDeckList(final String player) {
new DeckListAction(player).actionPerformed(null);
}
/**
* Receives click and programmatic requests for viewing card in a player's deck
*
*/
private class DeckListAction {
public DeckListAction(final String playerIn) {
player = playerIn;
}
private static final long serialVersionUID = 9874492387239847L;
private String player;
public void actionPerformed(final ActionEvent e) {
if (player.equals("Human") &&
(currentHumanSelection.getName().equals("lstColorsHuman") ||
currentHumanSelection.getName().equals("lstThemesHuman"))) {
return;
}
if (player.equals("Computer") &&
(currentAISelection.getName().equals("lstColorsAI") ||
currentAISelection.getName().equals("lstThemesAI"))) {
return;
}
Deck targetDeck = (player.equals("Human")) ?
AllZone.getDeckManager().getDeck(oa2sa(currentHumanSelection.getSelectedValues())[0]) :
AllZone.getDeckManager().getDeck(oa2sa(currentAISelection.getSelectedValues())[0]);
final HashMap<String, Integer> deckMap = new HashMap<String, Integer>();
for (final Entry<CardPrinted, Integer> s : targetDeck.getMain()) {
deckMap.put(s.getKey().getName(), s.getValue());
}
final String nl = System.getProperty("line.separator");
final StringBuilder deckList = new StringBuilder();
String dName = targetDeck.getName();
if (dName == null) {
dName = "";
} else {
deckList.append(dName + nl);
}
final ArrayList<String> dmKeys = new ArrayList<String>();
for (final String s : deckMap.keySet()) {
dmKeys.add(s);
}
Collections.sort(dmKeys);
for (final String s : dmKeys) {
deckList.append(deckMap.get(s) + " x " + s + nl);
}
int rcMsg = -1138;
String ttl = player + "'s Decklist";
if (!dName.equals("")) {
ttl += " - " + dName;
}
final StringBuilder msg = new StringBuilder();
if (deckMap.keySet().size() <= 32) {
msg.append(deckList.toString() + nl);
} else {
msg.append("Decklist too long for dialog." + nl + nl);
}
msg.append("Copy Decklist to Clipboard?");
rcMsg = JOptionPane.showConfirmDialog(null, msg, ttl, JOptionPane.OK_CANCEL_OPTION);
if (rcMsg == JOptionPane.OK_OPTION) {
final StringSelection ss = new StringSelection(deckList.toString());
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
}
}
} // End DeckListAction
}

View File

@@ -134,15 +134,14 @@ public class ControlDock {
*/
public void endTurn() {
// Big thanks to you, Gameplay Guru, since I was too lazy to figure this
// out
// before release. Doublestrike 24-11-11
// out before release. Doublestrike 24-11-11
System.err.println("forge.control.match > ControlDock > endTurn()");
System.out.println("Should skip to the end of turn, or entire turn.");
System.err.println("If some gameplay guru could implement this, that would be great...");
}
/**
* End turn.
* View deck list.
*/
public void viewDeckList() {
new DeckListAction(NewConstants.Lang.GuiDisplay.HUMAN_DECKLIST).actionPerformed(null);

View File

@@ -36,6 +36,7 @@ public class ViewConstructed extends JPanel {
private int counter;
private JList lstColorsHuman, lstColorsAI, lstThemesHuman,
lstThemesAI, lstDecksHuman, lstDecksAI;
private JButton viewHumanDeckList, viewAIDeckList;
private ControlConstructed control;
/**
@@ -72,6 +73,18 @@ public class ViewConstructed extends JPanel {
this.add(new JScrollPane(lstThemesHuman), constraints);
this.add(new OrPanel(), "w 5%!, h 30%!");
this.add(new JScrollPane(lstDecksHuman), constraints + ", wrap");
viewHumanDeckList = new JButton();
viewHumanDeckList.setAction(new AbstractAction() {
public void actionPerformed(ActionEvent arg0) {
ViewConstructed.this.control.viewDeckList("Human");
}
});
viewHumanDeckList.setFont(skin.getFont1().deriveFont(Font.PLAIN, 13));
viewHumanDeckList.setForeground(Color.BLACK);
viewHumanDeckList.setText("View Human Deck List");
viewHumanDeckList.setVerticalTextPosition(SwingConstants.CENTER);
this.add(viewHumanDeckList, "w 20%!, h 3%!, gap 2% 2% 2% 0, wrap, span 5 1");
// AI deck options area
JLabel lblAI = new JLabel("Choose a deck for the AI player:");
@@ -84,7 +97,18 @@ public class ViewConstructed extends JPanel {
this.add(new JScrollPane(lstThemesAI), constraints);
this.add(new OrPanel(), "w 5%!, h 30%!");
this.add(new JScrollPane(lstDecksAI), constraints + ", wrap");
viewAIDeckList = new JButton();
viewAIDeckList.setAction(new AbstractAction() {
public void actionPerformed(ActionEvent arg0) {
ViewConstructed.this.control.viewDeckList("Computer");
}
});
viewAIDeckList.setFont(skin.getFont1().deriveFont(Font.PLAIN, 13));
viewAIDeckList.setForeground(Color.BLACK);
viewAIDeckList.setText("View AI Deck List");
this.add(viewAIDeckList, "w 20%!, h 3%!, gap 5% 5% 2% 0, wrap, span 5 1");
// List box properties
this.lstColorsHuman.setName("lstColorsHuman");
this.lstThemesHuman.setName("lstThemesHuman");

View File

@@ -135,7 +135,6 @@ public class ViewDock extends FRoundedPanel {
}
});
//TODO - get an icon for this
final JLabel btnViewDeckList = new DockButton(skin.getIcon("dock.decklist"), "View Deck List");
btnViewDeckList.addMouseListener(new MouseAdapter() {
@Override