still more Deck Editor changes

This commit is contained in:
BetaSteward 2011-01-11 15:51:57 -05:00
parent 436c48b17e
commit f74df18cc9
11 changed files with 132 additions and 69 deletions

View file

@ -34,6 +34,7 @@
package mage.client;
import java.io.FileNotFoundException;
import mage.cards.Card;
import mage.cards.decks.Deck;
import mage.client.cards.CardsStorage;
@ -49,6 +50,7 @@ import mage.client.remote.Session;
import mage.client.util.EDTExceptionHandler;
import mage.client.util.gui.ArrowBuilder;
import mage.components.ImagePanel;
import mage.game.GameException;
import mage.util.Logging;
import javax.imageio.ImageIO;
@ -68,6 +70,7 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.prefs.Preferences;
import mage.client.draft.DraftPane;
import mage.sets.Sets;
/**
* @author BetaSteward_at_googlemail.com
@ -547,7 +550,7 @@ public class MageFrame extends javax.swing.JFrame {
this.tablesPane.setVisible(false);
this.draftPane.setVisible(false);
this.collectionViewerPane.setVisible(false);
showDeckEditor(DeckEditorMode.Constructed, null, null);
showDeckEditor(DeckEditorMode.Constructed, null, null);
}//GEN-LAST:event_btnDeckEditorActionPerformed
private void btnCollectionViewerActionPerformed(java.awt.event.ActionEvent evt) {

View file

@ -84,7 +84,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener
for (Iterator<Entry<UUID, MageCard>> i = cards.entrySet().iterator(); i.hasNext();) {
Entry<UUID, MageCard> entry = i.next();
if (!showCards.containsKey(entry.getKey())) {
removeCard(entry.getKey());
removeCardImg(entry.getKey());
i.remove();
}
}
@ -123,14 +123,16 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener
}
}
resizeArea();
revalidate();
repaint();
}
public void removeCard(UUID cardId) {
private void removeCardImg(UUID cardId) {
for (Component comp: getComponents()) {
if (comp instanceof Card) {
if (((Card)comp).getCardId().equals(cardId)) {
remove(comp);
}
}
} else if (comp instanceof MageCard) {
if (((MageCard)comp).getOriginal().getId().equals(cardId)) {
remove(comp);
@ -139,6 +141,11 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener
}
}
public void removeCard(UUID cardId) {
removeCardImg(cardId);
cards.remove(cardId);
}
public void addCardEventListener(Listener<Event> listener) {
cardEventSource.addListener(listener);
@ -213,8 +220,6 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener
}
if (size.height != area.height || size.width != area.width) {
setPreferredSize(area);
revalidate();
repaint();
}
}

View file

@ -355,19 +355,19 @@ public class DeckGenerator {
private static Card getBestBasicLand(ColoredManaSymbol color) {
manaSource = color.toString();
if (color.equals(ColoredManaSymbol.G)) {
return CardImpl.createCard(Sets.findCard("Forest", GENERATE_RANDOM_BASIC_LAND));
return Sets.findCard("Forest", GENERATE_RANDOM_BASIC_LAND);
}
if (color.equals(ColoredManaSymbol.R)) {
return CardImpl.createCard(Sets.findCard("Mountain", GENERATE_RANDOM_BASIC_LAND));
return Sets.findCard("Mountain", GENERATE_RANDOM_BASIC_LAND);
}
if (color.equals(ColoredManaSymbol.B)) {
return CardImpl.createCard(Sets.findCard("Swamp", GENERATE_RANDOM_BASIC_LAND));
return Sets.findCard("Swamp", GENERATE_RANDOM_BASIC_LAND);
}
if (color.equals(ColoredManaSymbol.U)) {
return CardImpl.createCard(Sets.findCard("Island", GENERATE_RANDOM_BASIC_LAND));
return Sets.findCard("Island", GENERATE_RANDOM_BASIC_LAND);
}
if (color.equals(ColoredManaSymbol.W)) {
return CardImpl.createCard(Sets.findCard("Plains", GENERATE_RANDOM_BASIC_LAND));
return Sets.findCard("Plains", GENERATE_RANDOM_BASIC_LAND);
}
return null;

View file

@ -50,7 +50,7 @@ public class DecDeckImporter extends DeckImporterImpl {
String lineName = line.substring(delim).trim();
try {
int num = Integer.parseInt(lineNum);
String cardName = Sets.findCard(lineName);
String cardName = Sets.findCard(lineName).getClass().getCanonicalName();
if (cardName == null)
sbMessage.append("Could not find card: '").append(lineName).append("' at line ").append(lineCount).append("\n");
else {

View file

@ -35,7 +35,12 @@
package mage.client.deckeditor;
import mage.cards.decks.Deck;
import mage.client.cards.BigCard;
import mage.client.cards.CardsList;
import mage.client.util.Event;
import mage.client.util.Listener;
import mage.view.CardsView;
/**
*
@ -55,12 +60,26 @@ public class DeckArea extends javax.swing.JPanel {
this.sideboardList.setVisible(show);
}
public CardsList getDeckList() {
return deckList;
public void loadDeck(Deck deck, BigCard bigCard) {
deckList.loadCards(new CardsView(deck.getCards()), bigCard, null, true);
if (sideboardList.isVisible())
sideboardList.loadCards(new CardsView(deck.getSideboard()), bigCard, null, true);
}
public CardsList getSideboardList() {
return sideboardList;
public void addDeckEventListener(Listener<Event> listener) {
deckList.addCardEventListener(listener);
}
public void clearDeckEventListeners() {
deckList.clearCardEventListeners();
}
public void addSideboardEventListener(Listener<Event> listener) {
sideboardList.addCardEventListener(listener);
}
public void clearSideboardEventListeners() {
sideboardList.clearCardEventListeners();
}
/** This method is called from within the constructor to

View file

@ -37,14 +37,12 @@ package mage.client.deckeditor;
import mage.cards.Card;
import mage.cards.decks.Deck;
import mage.client.MageFrame;
//import mage.client.deckeditor.collection.viewer.Huerotator2;
import mage.client.plugins.impl.Plugins;
import mage.client.util.Event;
import mage.client.util.Listener;
import mage.components.CardInfoPane;
import mage.game.GameException;
import mage.view.CardView;
import mage.view.CardsView;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
@ -56,7 +54,9 @@ import java.util.ArrayList;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import mage.client.cards.BigCard;
import mage.client.constants.Constants.DeckEditorMode;
import mage.client.dialog.AddLandDialog;
import mage.sets.Sets;
/**
@ -93,8 +93,10 @@ public class DeckEditorPanel extends javax.swing.JPanel {
this.deck = deck;
this.tableId = tableId;
this.mode = mode;
this.btnAddLand.setVisible(false);
switch (mode) {
case Limited:
this.btnAddLand.setVisible(true);
case Sideboard:
this.btnSubmit.setVisible(true);
this.cardSelector.loadCards(new ArrayList<Card>(deck.getSideboard()), this.bigCard, mode == DeckEditorMode.Limited);
@ -126,8 +128,9 @@ public class DeckEditorPanel extends javax.swing.JPanel {
if (event.getEventName().equals("double-click")) {
Card card = cardSelector.getCard((UUID) event.getSource());
if (card != null) {
deck.getCards().add(createCard(card.getClass()));
deck.getCards().add(Sets.createCard(card.getClass()));
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
deck.getSideboard().remove(card);
cardSelector.getCardsList().removeCard(card.getId());
}
if (cardInfoPane instanceof CardInfoPane) {
@ -139,18 +142,19 @@ public class DeckEditorPanel extends javax.swing.JPanel {
}
}
);
this.deckArea.getDeckList().clearCardEventListeners();
this.deckArea.getDeckList().addCardEventListener(
this.deckArea.clearDeckEventListeners();
this.deckArea.addDeckEventListener(
new Listener<Event> () {
@Override
public void event(Event event) {
if (System.getProperty("draft") != null) {
return;
}
if (event.getEventName().equals("double-click")) {
for (Card card: deck.getCards()) {
if (card.getId().equals((UUID)event.getSource())) {
deck.getCards().remove(card);
if (mode == DeckEditorMode.Limited || mode == DeckEditorMode.Sideboard) {
deck.getSideboard().add(card);
cardSelector.loadCards(new ArrayList<Card>(deck.getSideboard()), getBigCard(), mode == DeckEditorMode.Limited);
}
break;
}
}
@ -164,28 +168,21 @@ public class DeckEditorPanel extends javax.swing.JPanel {
this.repaint();
}
private BigCard getBigCard() {
return this.bigCard;
}
private void refreshDeck() {
try {
setCursor(new Cursor(Cursor.WAIT_CURSOR));
this.txtDeckName.setText(deck.getName());
deckArea.getDeckList().loadCards(new CardsView(deck.getCards()), bigCard, null, true);
deckArea.getSideboardList().loadCards(new CardsView(deck.getSideboard()), bigCard, null, true);
deckArea.loadDeck(deck, bigCard);
}
finally {
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
private Card createCard(Class clazz) {
try {
Constructor<?> con = clazz.getConstructor(new Class[]{UUID.class});
return (Card) con.newInstance(new Object[] {null});
} catch (Exception ex) {
Logger.getLogger(DeckEditorPanel.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
private void initComponents() {
jSplitPane1 = new javax.swing.JSplitPane();
@ -201,6 +198,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
btnExit = new javax.swing.JButton();
btnImport = new javax.swing.JButton();
btnSubmit = new javax.swing.JButton();
btnAddLand = new javax.swing.JButton();
jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jSplitPane1.setResizeWeight(0.5);
@ -266,6 +264,14 @@ public class DeckEditorPanel extends javax.swing.JPanel {
}
});
btnAddLand.setText("Add Land");
btnAddLand.setName("btnAddLand"); // NOI18N
btnAddLand.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnAddLandActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
@ -292,6 +298,8 @@ public class DeckEditorPanel extends javax.swing.JPanel {
.addContainerGap()
.addComponent(btnImport)
.addContainerGap()
.addComponent(btnAddLand)
.addContainerGap()
.addComponent(btnSubmit)))
.addContainerGap())
);
@ -311,6 +319,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btnImport)
.addComponent(btnAddLand)
.addComponent(btnSubmit))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, isShowCardInfo ? 30 : 159, Short.MAX_VALUE)
.addComponent(cardInfoPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
@ -386,7 +395,16 @@ public class DeckEditorPanel extends javax.swing.JPanel {
}//GEN-LAST:event_btnSaveActionPerformed
private void btnNewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNewActionPerformed
deck = new Deck();
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
for (Card card: deck.getCards()) {
deck.getSideboard().add(card);
}
deck.getCards().clear();
cardSelector.loadCards(new ArrayList<Card>(deck.getSideboard()), this.bigCard, mode == DeckEditorMode.Limited);
}
else {
deck = new Deck();
}
refreshDeck();
}//GEN-LAST:event_btnNewActionPerformed
@ -429,6 +447,12 @@ public class DeckEditorPanel extends javax.swing.JPanel {
this.setVisible(false);
}
private void btnAddLandActionPerformed(java.awt.event.ActionEvent evt) {
AddLandDialog addLand = new AddLandDialog();
addLand.showDialog(deck);
refreshDeck();
}
public DeckImporter getDeckImporter(String file) {
if (file.toLowerCase().endsWith("dec"))
return new DecDeckImporter();
@ -457,6 +481,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
private JComponent cardInfoPane;
private javax.swing.JButton btnSubmit;
private javax.swing.JButton btnAddLand;
}
class DeckFilter extends FileFilter {

View file

@ -57,10 +57,10 @@ public class MWSDeckImporter extends DeckImporterImpl {
ExpansionSet set = Sets.findSet(setCode);
String cardName;
if (set != null) {
cardName = set.findCard(lineName);
cardName = set.findCard(lineName).getClass().getCanonicalName();
}
else {
cardName = Sets.findCard(lineName);
cardName = Sets.findCard(lineName).getClass().getCanonicalName();
}
if (cardName == null)
sbMessage.append("Could not find card: '").append(lineName).append("' at line ").append(lineCount).append("\n");

View file

@ -51,7 +51,7 @@ public class TxtDeckImporter extends DeckImporterImpl {
String lineName = line.substring(delim).trim();
try {
int num = Integer.parseInt(lineNum);
String cardName = Sets.findCard(lineName);
String cardName = Sets.findCard(lineName).getClass().getCanonicalName();
if (cardName == null)
sbMessage.append("Could not find card: '").append(lineName).append("' at line ").append(lineCount).append("\n");
else {

View file

@ -238,9 +238,8 @@ public class GameController implements GameCallback {
}
public boolean cheat(UUID sessionId, UUID playerId, String cardName) {
String clazz = Sets.findCard(cardName);
if (clazz != null) {
Card card = CardImpl.createCard(clazz);
Card card = Sets.findCard(cardName, true);
if (card != null) {
Set<Card> cards = new HashSet<Card>();
cards.add(card);
game.loadCards(cards, playerId);
@ -463,17 +462,12 @@ public class GameController implements GameCallback {
String cardName = m.group(3);
Integer amount = Integer.parseInt(m.group(4));
for (int i = 0; i < amount; i++) {
String clazz = Sets.findCard(cardName);
if (clazz != null) {
Card card = CardImpl.createCard(clazz);
if (card != null) {
Set<Card> cards = new HashSet<Card>();
cards.add(card);
game.loadCards(cards, player.getId());
swapWithAnyCard(game, player, card, gameZone);
} else {
logger.severe("Couldn't create a card: " + cardName);
}
Card card = Sets.findCard(cardName, true);
if (card != null) {
Set<Card> cards = new HashSet<Card>();
cards.add(card);
game.loadCards(cards, player.getId());
swapWithAnyCard(game, player, card, gameZone);
} else {
logger.severe("Couldn't find a card: " + cardName);
}

View file

@ -31,13 +31,18 @@ package mage.sets;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.ExpansionSet;
import mage.cards.decks.DeckCardLists;
import mage.util.Logging;
/**
*
@ -45,6 +50,7 @@ import mage.cards.decks.DeckCardLists;
*/
public class Sets extends HashMap<String, ExpansionSet> {
private final static Logger logger = Logging.getLogger(Sets.class.getName());
private static final Sets fINSTANCE = new Sets();
private static Set<String> names;
protected static Random rnd = new Random();
@ -83,24 +89,24 @@ public class Sets extends HashMap<String, ExpansionSet> {
return names;
}
public static String findCard(String name) {
public static Card findCard(String name) {
for (ExpansionSet set: fINSTANCE.values()) {
String cardName = set.findCard(name);
if (cardName != null)
return cardName;
Card card = set.findCard(name);
if (card != null)
return card;
}
return null;
}
public static String findCard(String name, boolean random) {
public static Card findCard(String name, boolean random) {
if (!random) {
return findCard(name);
} else {
List<String> cards = new ArrayList<String>();
List<Card> cards = new ArrayList<Card>();
for (ExpansionSet set: fINSTANCE.values()) {
String cardName = set.findCard(name, true);
if (cardName != null) {
cards.add(cardName);
Card card = set.findCard(name, true);
if (card != null) {
cards.add(card);
}
}
if (cards.size() > 0) {
@ -109,7 +115,18 @@ public class Sets extends HashMap<String, ExpansionSet> {
}
return null;
}
public static Card createCard(Class clazz) {
try {
Constructor<?> con = clazz.getConstructor(new Class[]{UUID.class});
return (Card) con.newInstance(new Object[] {null});
} catch (Exception ex) {
logger.log(Level.SEVERE, "Error creating card:" + clazz.getName(), ex);
return null;
}
}
public static ExpansionSet findSet(String code) {
for (ExpansionSet set: fINSTANCE.values()) {
if (set.getCode().equals(code))

View file

@ -135,19 +135,19 @@ public abstract class ExpansionSet implements Serializable {
return name;
}
public String findCard(String name) {
public Card findCard(String name) {
for (Card card: createCards()) {
if (name.equals(card.getName()))
return card.getClass().getCanonicalName();
return card;
}
return null;
}
public String findCard(String name, boolean random) {
List<String> cards = new ArrayList<String>();
public Card findCard(String name, boolean random) {
List<Card> cards = new ArrayList<Card>();
for (Card card: createCards()) {
if (name.equals(card.getName())) {
cards.add(card.getClass().getCanonicalName());
cards.add(card);
}
}
if (cards.size() > 0) {