Merge branch 'CardRepository'

This commit is contained in:
North 2012-11-05 19:37:51 +02:00
commit f64149971a
79 changed files with 1811 additions and 2686 deletions

View file

@ -39,8 +39,10 @@ import de.schlichtherle.truezip.file.TConfig;
import de.schlichtherle.truezip.fs.FsOutputOption;
import mage.cards.Card;
import mage.cards.decks.Deck;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.cards.repository.CardScanner;
import mage.client.cards.BigCard;
import mage.client.cards.CardsStorage;
import mage.client.chat.ChatPanel;
import mage.client.components.*;
import mage.client.components.ext.dlg.DialogManager;
@ -74,6 +76,7 @@ import mage.server.Main;
import mage.utils.MageVersion;
import org.apache.log4j.Logger;
import org.mage.card.arcane.ManaSymbols;
import org.mage.plugins.card.images.DownloadPictures;
import org.mage.plugins.card.utils.impl.ImageManagerImpl;
import javax.imageio.ImageIO;
@ -81,14 +84,23 @@ import javax.swing.*;
import javax.swing.JToolBar.Separator;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import java.awt.*;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.SplashScreen;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.beans.PropertyVetoException;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@ -468,22 +480,36 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
menu.show(component, 0, component.getHeight());
}
private List<Card> getAllCards() {
List<Card> cards = new ArrayList<Card>();
List<CardInfo> allCards = CardRepository.instance.getAllCards();
for (CardInfo cardInfo : allCards) {
cards.add(cardInfo.getCard());
}
return cards;
}
private void checkForNewImages() {
HashSet<Card> cards = new HashSet<Card>(CardsStorage.getAllCards());
List<Card> notImplemented = CardsStorage.getNotImplementedCards();
cards.addAll(notImplemented);
if (Plugins.getInstance().newImage(cards)) {
List<Card> cards = getAllCards();
String useDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_USE_DEFAULT, "true");
String path = useDefault.equals("true") ? null : PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PATH, null);
if (DownloadPictures.checkForNewCards(cards, path)) {
if (JOptionPane.showConfirmDialog(null, "New cards are available. Do you want to download the images?", "New images available", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
Plugins.getInstance().downloadImage(cards);
DownloadPictures.startDownload(null, cards, path);
}
}
}
public void btnImagesActionPerformed(java.awt.event.ActionEvent evt) {
HashSet<Card> cards = new HashSet<Card>(CardsStorage.getAllCards());
List<Card> notImplemented = CardsStorage.getNotImplementedCards();
cards.addAll(notImplemented);
Plugins.getInstance().downloadImage(cards);
List<Card> cards = getAllCards();
String useDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_USE_DEFAULT, "true");
String path = useDefault.equals("true") ? null : PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PATH, null);
DownloadPictures.startDownload(null, cards, path);
}
public void btnSymbolsActionPerformed(java.awt.event.ActionEvent evt) {
@ -974,6 +1000,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
});
SwingUtilities.invokeLater(new Runnable() {
public void run() {
CardScanner.scan();
for (String arg : args) {
if (arg.startsWith(liteModeArg)) {
liteMode = true;
@ -1147,4 +1174,4 @@ class MagePaneMenuItem extends JCheckBoxMenuItem {
public MagePane getFrame() {
return frame;
}
}
}

View file

@ -46,7 +46,7 @@ import mage.client.util.DefaultActionCallback;
import mage.client.util.ImageHelper;
import mage.client.util.gui.ArrowBuilder;
import mage.remote.Session;
import mage.sets.Sets;
import mage.cards.Sets;
import mage.view.AbilityView;
import mage.view.CardView;
import mage.view.PermanentView;

View file

@ -32,9 +32,9 @@ import mage.client.util.Event;
import mage.client.util.EventDispatcher;
import mage.client.util.EventSource;
import mage.client.util.Listener;
import mage.view.SimpleCardView;
import java.io.Serializable;
import java.util.UUID;
/**
*
@ -49,12 +49,12 @@ public class CardEventSource implements EventSource<Event>, Serializable {
dispatcher.addListener(listener);
}
public void doubleClick(UUID cardId, String message) {
dispatcher.fireEvent(new Event(cardId, message));
public void doubleClick(SimpleCardView card, String message) {
dispatcher.fireEvent(new Event(card, message));
}
public void shiftDoubleClick(UUID cardId, String message) {
dispatcher.fireEvent(new Event(cardId, message));
public void shiftDoubleClick(SimpleCardView card, String message) {
dispatcher.fireEvent(new Event(card, message));
}
public void removeFromMainEvent(String message) {

View file

@ -253,9 +253,9 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
e.consume();
Object obj = e.getSource();
if (obj instanceof Card) {
cardEventSource.doubleClick(((Card)obj).getCardId(), "double-click");
cardEventSource.doubleClick(((Card) obj).getOriginal(), "double-click");
} else if (obj instanceof MageCard) {
cardEventSource.doubleClick(((MageCard)obj).getOriginal().getId(), "double-click");
cardEventSource.doubleClick(((MageCard) obj).getOriginal(), "double-click");
}
}
}

View file

@ -462,14 +462,14 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
Object obj = e.getSource();
if (obj instanceof Card) {
if (e.isShiftDown())
cardEventSource.shiftDoubleClick(((Card)obj).getCardId(), "shift-double-click");
cardEventSource.shiftDoubleClick(((Card)obj).getOriginal(), "shift-double-click");
else
cardEventSource.doubleClick(((Card)obj).getCardId(), "double-click");
cardEventSource.doubleClick(((Card)obj).getOriginal(), "double-click");
} else if (obj instanceof MageCard) {
if (e.isShiftDown())
cardEventSource.shiftDoubleClick(((MageCard)obj).getOriginal().getId(), "shift-double-click");
cardEventSource.shiftDoubleClick(((MageCard)obj).getOriginal(), "shift-double-click");
else
cardEventSource.doubleClick(((MageCard)obj).getOriginal().getId(), "double-click");
cardEventSource.doubleClick(((MageCard)obj).getOriginal(), "double-click");
}
}
}

View file

@ -1,15 +1,11 @@
package mage.client.cards;
import mage.Constants;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.ExpansionSet;
import mage.sets.Sets;
import mage.utils.CardUtil;
import org.apache.log4j.Logger;
import java.io.InputStream;
import java.util.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/**
* Stores all implemented cards on client side.
@ -18,16 +14,9 @@ import java.util.*;
* @author nantuko
*/
public class CardsStorage {
private static final Logger log = Logger.getLogger(CardsStorage.class);
private static final List<Card> allCards;
private static final Set<Card> nonBasicLandCards;
private static final List<String> setCodes;
private static Map<String, Integer> ratings;
private static Integer min = Integer.MAX_VALUE, max = 0;
private static List<Card> notImplementedCards;
private static boolean loaded;
/**
* Rating that is given for new cards.
@ -35,99 +24,6 @@ public class CardsStorage {
*/
private static final int DEFAULT_NOT_RATED_CARD_RATING = 6;
static {
allCards = new ArrayList<Card>();
nonBasicLandCards = new LinkedHashSet<Card>();
setCodes = new ArrayList<String>();
List<ExpansionSet> sets = new ArrayList<ExpansionSet>(Sets.getInstance().values());
Collections.sort(sets, new SetComparator());
for (ExpansionSet set : sets) {
setCodes.add(set.getCode());
}
}
private static void loadLazily() {
if (!loaded) {
synchronized (CardsStorage.class) {
if (!loaded) {
List<ExpansionSet> sets = new ArrayList<ExpansionSet>(Sets.getInstance().values());
for (ExpansionSet set : sets) {
List<Card> cards = set.getCards();
Collections.sort(cards, new CardComparator());
allCards.addAll(cards);
for (Card card : cards) {
if (CardUtil.isLand(card) && !CardUtil.isBasicLand(card)) {
nonBasicLandCards.add(card);
}
}
}
loaded = true;
}
}
}
}
public static List<Card> getAllCards() {
if (!loaded) {
loadLazily();
}
return allCards;
}
/**
* Get cards from card pool starting from start index and ending with end index.
* Can filter cards by set (if parameter is not null).
*
* @param start
* @param end
* @param set Cards set code. Can be null.
* @param onlyImplemented return only implemented cards
* @return
*/
public static List<Card> getAllCards(int start, int end, String set, boolean onlyImplemented) {
List<Card> cards = new ArrayList<Card>();
List<Card> pool;
if (set == null) {
pool = getAllCards();
} else {
pool = new ArrayList<Card>();
for (Card card : getAllCards()) {
if (card.getExpansionSetCode().equals(set)) {
pool.add(card);
}
}
}
if (!onlyImplemented) {
for (Card card : getNotImplementedCards()) {
if (card.getExpansionSetCode().equals(set)) {
pool.add(card);
}
}
Collections.sort(pool, new CardComparator());
}
for (int i = start; i < Math.min(end + 1, pool.size()); i++) {
cards.add(pool.get(i));
}
return cards;
}
public static int getCardsCount() {
return getAllCards().size();
}
public static List<String> getSetCodes() {
return setCodes;
}
public static Set<Card> getNonBasicLandCards() {
if (!loaded) {
loadLazily();
}
return nonBasicLandCards;
}
/**
* Return rating of a card: 1-10.
*
@ -175,157 +71,4 @@ public class CardsStorage {
}
}
}
/**
* Get list of not implemented cards.
* Used in collection viewer to show what cards need to be done for the latest set.
*
* @return
*/
public static List<Card> getNotImplementedCards() {
List<Card> cards = new ArrayList<Card>();
if (notImplementedCards == null) {
if (getAllCards().isEmpty()) {
return cards;
}
Set<String> names = new HashSet<String>();
for (Card card : getAllCards()) {
names.add(card.getExpansionSetCode() + card.getName());
}
readUnimplemented("ZEN", "/zen.txt", names, cards);
readUnimplemented("WWK", "/wwk.txt", names, cards);
names.clear();
}
return cards;
}
private static final class UnimplementedCardImpl extends CardImpl {
public UnimplementedCardImpl(CardImpl card) {
super(card);
}
@Override
public UnimplementedCardImpl copy() {
return new UnimplementedCardImpl(this);
}
public void setCanTransform(boolean canTransform) {
this.canTransform = canTransform;
}
public void setNightCard(boolean nightCard) {
this.nightCard = nightCard;
}
public void setSecondSideCard(Card secondSideCard) {
this.secondSideCard = secondSideCard;
}
}
private static void readUnimplemented(String set, String filename, Set<String> names, List<Card> cards) {
try {
CardImpl tmp = (CardImpl) allCards.get(0);
InputStream is = CardsStorage.class.getResourceAsStream(filename);
if (is == null) {
log.error("Couldn't find: " + filename);
return;
}
Scanner scanner = new Scanner(is);
UnimplementedCardImpl cardToAdd = null;
boolean addCard = false;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] s = line.split("\\|");
if (s.length == 2) {
String name = s[1].trim();
if (!names.contains(set + name)) {
UnimplementedCardImpl card = new UnimplementedCardImpl(tmp);
Integer cid;
boolean secondFace = false;
if (s[0].endsWith("a")) {
cid = Integer.parseInt(s[0].replace("a", ""));
} else if (s[0].endsWith("b")) {
cid = Integer.parseInt(s[0].replace("b", ""));
secondFace = true;
if (cardToAdd != null) {
addCard = true;
}
} else {
cid = Integer.parseInt(s[0]);
addCard = true;
}
card.setName(name);
card.setExpansionSetCode(set);
card.setCardNumber(cid);
card.setRarity(Constants.Rarity.NA); // mark as not implemented
card.getCardType().clear();
if (secondFace) {
if (cardToAdd != null) {
cardToAdd.setCanTransform(true);
cardToAdd.setSecondSideCard(card);
card.setCanTransform(true);
card.setNightCard(true);
}
} else {
cardToAdd = card;
}
if (addCard) {
cards.add(cardToAdd);
cardToAdd = null;
addCard = false;
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] argv) {
for (Card card : getAllCards()) {
String name = card.getName();
if (name.equals("Baneslayer Angel") || name.equals("Lightning Bolt") || name.equals("Zombie Outlander")
|| name.equals("Naturalize") || name.equals("Kraken's Eye") || name.equals("Serra Angel")) {
System.out.println(name + " : " + rateCard(card));
}
}
}
/**
* Card comparator.
* First compares collector ids and then card names.
* <p/>
* Show latest set cards on top.
*
* @author nantuko
*/
private static class CardComparator implements Comparator<Card> {
@Override
public int compare(Card o1, Card o2) {
Integer cid1 = o1.getCardNumber();
Integer cid2 = o2.getCardNumber();
if (cid1 == cid2) {
return o1.getName().compareTo(o2.getName());
} else {
return cid1.compareTo(cid2);
}
}
}
/**
* Set comparator. Puts latest set on top.
*/
private static class SetComparator implements Comparator<ExpansionSet> {
@Override
public int compare(ExpansionSet set1, ExpansionSet set2) {
return set2.getReleaseDate().compareTo(set1.getReleaseDate());
}
}
}

View file

@ -132,7 +132,7 @@ public class DraftGrid extends javax.swing.JPanel implements MouseListener {
public void mousePressed(MouseEvent e) {
Object obj = e.getSource();
if (obj instanceof MageCard) {
this.cardEventSource.doubleClick(((MageCard)obj).getOriginal().getId(), "pick-a-card");
this.cardEventSource.doubleClick(((MageCard)obj).getOriginal(), "pick-a-card");
}
}

View file

@ -56,7 +56,7 @@ import mage.cards.CardDimensions;
import mage.cards.MagePermanent;
import mage.client.util.Config;
import mage.client.util.ImageHelper;
import mage.sets.Sets;
import mage.cards.Sets;
import mage.view.CounterView;
import mage.view.PermanentView;

View file

@ -1,51 +1,53 @@
package mage.client.deck.generator;
import mage.Constants.CardType;
import mage.Constants.ColoredManaSymbol;
import mage.Mana;
import mage.cards.Card;
import mage.cards.decks.Deck;
import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.client.MageFrame;
import mage.client.cards.CardsStorage;
import mage.client.util.gui.ColorsChooser;
import mage.client.util.sets.ConstructedFormats;
import mage.interfaces.rate.RateCallback;
import mage.sets.Sets;
import mage.utils.CardUtil;
import mage.cards.Sets;
import mage.utils.DeckBuilder;
import javax.swing.*;
import java.awt.*;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.UUID;
/**
* Generates random card pool and builds a deck.
*
* @author nantuko
*/
public class DeckGenerator {
private static JDialog dlg;
private static String selectedColors;
private static JComboBox formats;
private static final int SPELL_CARD_POOL_SIZE = 180;
private static final int DECK_LANDS = 16;
private static final int MAX_NON_BASIC_SOURCE = DECK_LANDS / 2;
private static final boolean GENERATE_RANDOM_BASIC_LAND = true;
private static final int MAX_TRIES = 4096;
private static Deck deck = new Deck();
private static final int ADDITIONAL_CARDS_FOR_3_COLOR_DECKS = 20;
private static String colors = "GWUBR";
/**
* Opens color chooser dialog. Generates deck.
* Saves generated deck and use it as selected deck to play.
@ -55,21 +57,21 @@ public class DeckGenerator {
public static String generateDeck() {
JPanel p0 = new JPanel();
p0.setLayout(new BoxLayout(p0, BoxLayout.Y_AXIS));
JLabel text = new JLabel("Choose color for your deck: ");
text.setAlignmentX(Component.CENTER_ALIGNMENT);
p0.add(text);
p0.add(Box.createVerticalStrut(5));
String chosen = MageFrame.getPreferences().get("genDeckColor", "u");
final ColorsChooser colorsChooser = new ColorsChooser(chosen);
p0.add(colorsChooser);
p0.add(Box.createVerticalStrut(5));
JLabel text2 = new JLabel("(X - random color)");
text2.setAlignmentX(Component.CENTER_ALIGNMENT);
p0.add(text2);
p0.add(Box.createVerticalStrut(5));
JPanel jPanel = new JPanel();
JLabel text3 = new JLabel("Choose format:");
@ -81,9 +83,10 @@ public class DeckGenerator {
jPanel.add(text3);
jPanel.add(formats);
p0.add(jPanel);
final JButton btnGenerate = new JButton("Ok");
btnGenerate.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
btnGenerate.setEnabled(false);
colorsChooser.setEnabled(false);
@ -94,6 +97,7 @@ public class DeckGenerator {
});
final JButton btnCancel = new JButton("Cancel");
btnCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dlg.setVisible(false);
selectedColors = null;
@ -104,7 +108,7 @@ public class DeckGenerator {
dlg = optionPane.createDialog("Generating deck");
dlg.setVisible(true);
dlg.dispose();
if (selectedColors != null) {
buildDeck();
try {
@ -115,53 +119,53 @@ public class DeckGenerator {
//JOptionPane.showMessageDialog(null, "Deck has been generated.");
return tmp.getAbsolutePath();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Couldn't generate deck. Try once again.");
}
}
return selectedColors;
}
/**
* Generates card pool
*/
protected static void buildDeck() {
List<ColoredManaSymbol> allowedColors = new ArrayList<ColoredManaSymbol>();
selectedColors = selectedColors.toUpperCase();
String format = (String)formats.getSelectedItem();
selectedColors = selectedColors != null ? selectedColors.toUpperCase() : getRandomColors("X");
String format = (String) formats.getSelectedItem();
List<String> setsToUse = ConstructedFormats.getSetsByFormat(format);
if (setsToUse.isEmpty()) {
// use all
setsToUse = CardsStorage.getSetCodes();
setsToUse = CardRepository.instance.getSetCodes();
}
if (selectedColors.contains("X")) {
selectedColors = getRandomColors(selectedColors);
}
for (int i = 0; i < selectedColors.length(); i++) {
char c = selectedColors.charAt(i);
allowedColors.add(ColoredManaSymbol.lookup(c));
}
int cardPoolSize = SPELL_CARD_POOL_SIZE;
if (selectedColors.length() > 2) {
cardPoolSize += ADDITIONAL_CARDS_FOR_3_COLOR_DECKS;
}
List<Card> spellCardPool = generateSpellCardPool(cardPoolSize, allowedColors, setsToUse);
List<Card> landCardPool = generateNonBasicLandCardPool(MAX_NON_BASIC_SOURCE, allowedColors, setsToUse);
System.out.println("deck generator card pool: spells=" + spellCardPool.size() + ", lands=" + landCardPool.size());
final List<String> setsToUseFinal = setsToUse;
deck = DeckBuilder.buildDeck(spellCardPool, allowedColors, landCardPool, new RateCallback() {
@Override
public int rateCard(Card card) {
return CardsStorage.rateCard(card);
}
@Override
public Card getBestBasicLand(ColoredManaSymbol color) {
int tries = 100;
@ -175,29 +179,36 @@ public class DeckGenerator {
}
});
}
private static String getRandomColors(String _selectedColors) {
Random random = new Random();
List<Character> availableColors = new ArrayList();
availableColors.add('R');
availableColors.add('G');
availableColors.add('B');
availableColors.add('U');
availableColors.add('W');
StringBuilder generatedColors = new StringBuilder();
Set<String> colors = new HashSet<String>();
int randomColors = 0;
for (int i = 0; i < _selectedColors.length(); i++) {
String color = getRandomColor() + "";
int retry = 100;
while (colors.contains(color)) {
color = getRandomColor() + "";
retry--;
if (retry <= 0) break;
char currentColor = _selectedColors.charAt(i);
if (currentColor != 'X') {
generatedColors.append(currentColor);
availableColors.remove(new Character(currentColor));
} else {
randomColors++;
}
generatedColors.append(color);
colors.add(color);
}
for (int i = 0; i < randomColors && !availableColors.isEmpty(); i++) {
int index = random.nextInt(availableColors.size());
generatedColors.append(availableColors.remove(index));
}
return generatedColors.toString();
}
private static char getRandomColor() {
Random r = new Random();
return colors.charAt(r.nextInt(colors.length()));
}
/**
* Generates card pool of cardsCount cards that have manacost of allowed colors.
*
@ -207,25 +218,22 @@ public class DeckGenerator {
*/
private static List<Card> generateSpellCardPool(int cardsCount, List<ColoredManaSymbol> allowedColors, List<String> setsToUse) {
List<Card> spellCardPool = new ArrayList<Card>();
int count = 0;
List<Card> cardPool = new ArrayList<Card>();
for (Card card : CardsStorage.getAllCards()) {
if (setsToUse.contains(card.getExpansionSetCode())) {
cardPool.add(card);
}
}
CardCriteria spellCriteria = new CardCriteria();
spellCriteria.setCodes(setsToUse.toArray(new String[0]));
spellCriteria.notTypes(CardType.LAND);
List<CardInfo> cardPool = CardRepository.instance.findCards(spellCriteria);
int cardPoolCount = cardPool.size();
Random random = new Random();
if (cardPoolCount > 0) {
int tries = 0;
int count = 0;
while (count < cardsCount) {
Card card = cardPool.get(random.nextInt(cardPoolCount));
if (!card.getCardType().contains(CardType.LAND)) {
if (cardFitsChosenColors(card, allowedColors)) {
spellCardPool.add(card);
count++;
}
Card card = cardPool.get(random.nextInt(cardPoolCount)).getCard();
if (cardFitsChosenColors(card, allowedColors)) {
spellCardPool.add(card);
count++;
}
tries++;
if (tries > MAX_TRIES) { // to avoid infinite loop
@ -235,10 +243,10 @@ public class DeckGenerator {
} else {
throw new IllegalStateException("Not enough cards to generate deck.");
}
return spellCardPool;
}
/**
* Check that card can be played using chosen (allowed) colors.
*
@ -264,7 +272,7 @@ public class DeckGenerator {
}
return true;
}
/**
* Generates card pool of land cards that can produce allowed colors.
*
@ -274,25 +282,23 @@ public class DeckGenerator {
*/
private static List<Card> generateNonBasicLandCardPool(int landsCount, List<ColoredManaSymbol> allowedColors, List<String> setsToUse) {
List<Card> nonBasicLandCardPool = new ArrayList<Card>();
int count = 0;
List<Card> landCards = new ArrayList<Card>();
for (Card land : CardsStorage.getNonBasicLandCards()) {
if (setsToUse.contains(land.getExpansionSetCode())) {
landCards.add(land);
}
}
CardCriteria landCriteria = new CardCriteria();
landCriteria.setCodes(setsToUse.toArray(new String[0]));
landCriteria.types(CardType.LAND);
landCriteria.notSupertypes("Basic");
List<CardInfo> landCards = CardRepository.instance.findCards(landCriteria);
int allCount = landCards.size();
Random random = new Random();
if (allCount > 0) {
int tries = 0;
int count = 0;
while (count < landsCount) {
Card card = landCards.get(random.nextInt(allCount));
if (!CardUtil.isBasicLand(card)) {
if (cardCardProduceChosenColors(card, allowedColors)) {
nonBasicLandCardPool.add(card);
count++;
}
Card card = landCards.get(random.nextInt(allCount)).getCard();
if (cardCardProduceChosenColors(card, allowedColors)) {
nonBasicLandCardPool.add(card);
count++;
}
tries++;
if (tries > MAX_TRIES) { // to avoid infinite loop
@ -301,10 +307,10 @@ public class DeckGenerator {
}
}
}
return nonBasicLandCardPool;
}
/**
* Checks that chosen card can produce mana of specific color.
*
@ -324,7 +330,7 @@ public class DeckGenerator {
}
return false;
}
/**
* Get random basic land that can produce specified color mana.
* Random here means random set and collector id for the same mana producing land.
@ -334,52 +340,30 @@ public class DeckGenerator {
*/
private static Card getBestBasicLand(ColoredManaSymbol color) {
if (color.equals(ColoredManaSymbol.G)) {
return Sets.findCard("Forest", GENERATE_RANDOM_BASIC_LAND);
CardInfo cardInfo = CardRepository.instance.findCard("Forest");
return cardInfo != null ? cardInfo.getCard() : null;
}
if (color.equals(ColoredManaSymbol.R)) {
return Sets.findCard("Mountain", GENERATE_RANDOM_BASIC_LAND);
CardInfo cardInfo = CardRepository.instance.findCard("Mountain");
return cardInfo != null ? cardInfo.getCard() : null;
}
if (color.equals(ColoredManaSymbol.B)) {
return Sets.findCard("Swamp", GENERATE_RANDOM_BASIC_LAND);
CardInfo cardInfo = CardRepository.instance.findCard("Swamp");
return cardInfo != null ? cardInfo.getCard() : null;
}
if (color.equals(ColoredManaSymbol.U)) {
return Sets.findCard("Island", GENERATE_RANDOM_BASIC_LAND);
CardInfo cardInfo = CardRepository.instance.findCard("Island");
return cardInfo != null ? cardInfo.getCard() : null;
}
if (color.equals(ColoredManaSymbol.W)) {
return Sets.findCard("Plains", GENERATE_RANDOM_BASIC_LAND);
CardInfo cardInfo = CardRepository.instance.findCard("Plains");
return cardInfo != null ? cardInfo.getCard() : null;
}
return null;
}
protected static boolean isColoredMana(String symbol) {
return symbol.equals("W") || symbol.equals("G") || symbol.equals("U") || symbol.equals("B") || symbol.equals("R") || symbol.contains("/");
}
public static void main(String[] args) {
Card selesnyaGuildMage = null;
for (Card card : CardsStorage.getAllCards()) {
if (card.getName().equals("Selesnya Guildmage")) {
selesnyaGuildMage = card;
break;
}
}
if (selesnyaGuildMage == null) {
throw new RuntimeException("Couldn't find card: Selesnya Guildmage");
}
List<ColoredManaSymbol> allowedColors = new ArrayList<ColoredManaSymbol>();
allowedColors.add(ColoredManaSymbol.lookup('B'));
allowedColors.add(ColoredManaSymbol.lookup('R'));
System.out.println(DeckGenerator.cardFitsChosenColors(selesnyaGuildMage, allowedColors));
allowedColors.clear();
allowedColors = new ArrayList<ColoredManaSymbol>();
allowedColors.add(ColoredManaSymbol.lookup('G'));
System.out.println(DeckGenerator.cardFitsChosenColors(selesnyaGuildMage, allowedColors));
allowedColors.clear();
allowedColors = new ArrayList<ColoredManaSymbol>();
allowedColors.add(ColoredManaSymbol.lookup('W'));
System.out.println(DeckGenerator.cardFitsChosenColors(selesnyaGuildMage, allowedColors));
}
}
}

View file

@ -39,9 +39,12 @@ import mage.MageObject;
import mage.ObjectColor;
import mage.cards.Card;
import mage.cards.ExpansionSet;
import mage.cards.Sets;
import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.client.cards.BigCard;
import mage.client.cards.CardGrid;
import mage.client.cards.CardsStorage;
import mage.client.cards.ICardGrid;
import mage.client.constants.Constants.SortBy;
import mage.client.deckeditor.table.TableModel;
@ -54,15 +57,14 @@ import mage.filter.predicate.mageobject.ColorPredicate;
import mage.filter.predicate.mageobject.ColorlessPredicate;
import mage.filter.predicate.other.CardTextPredicate;
import mage.filter.predicate.other.ExpansionSetPredicate;
import mage.sets.Sets;
import mage.view.CardsView;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.event.*;
import java.util.*;
import java.util.List;
/**
*
@ -71,7 +73,6 @@ import java.util.List;
public class CardSelector extends javax.swing.JPanel implements ComponentListener {
private final List<Card> cards = new ArrayList<Card>();
private FilterCard filter = new FilterCard();
private BigCard bigCard;
private boolean limited = false;
@ -163,8 +164,8 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
filterCards();
}
private void buildFilter() {
filter = new FilterCard();
private FilterCard buildFilter() {
FilterCard filter = new FilterCard();
ArrayList<Predicate<MageObject>> predicates = new ArrayList<Predicate<MageObject>>();
if (this.rdoGreen.isSelected()) {
@ -224,10 +225,59 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
filter.add(Predicates.or(expansionPredicates));
}
}
return filter;
}
private CardCriteria buildCriteria() {
CardCriteria criteria = new CardCriteria();
criteria.black(this.rdoBlack.isSelected());
criteria.blue(this.rdoBlue.isSelected());
criteria.green(this.rdoGreen.isSelected());
criteria.red(this.rdoRed.isSelected());
criteria.white(this.rdoWhite.isSelected());
criteria.colorless(this.rdoColorless.isSelected());
if (this.rdoLand.isSelected()) {
criteria.types(CardType.LAND);
}
if (this.rdoArtifacts.isSelected()) {
criteria.types(CardType.ARTIFACT);
}
if (this.rdoCreatures.isSelected()) {
criteria.types(CardType.CREATURE);
}
if (this.rdoEnchantments.isSelected()) {
criteria.types(CardType.ENCHANTMENT);
}
if (this.rdoInstants.isSelected()) {
criteria.types(CardType.INSTANT);
}
if (this.rdoSorceries.isSelected()) {
criteria.types(CardType.SORCERY);
}
if (this.rdoPlaneswalkers.isSelected()) {
criteria.types(CardType.PLANESWALKER);
}
String text = jTextFieldSearch.getText().trim();
if (!text.isEmpty()) {
// criteria.rules(text);
}
if (this.cbExpansionSet.isVisible()) {
String expansionSelection = this.cbExpansionSet.getSelectedItem().toString();
if (!expansionSelection.equals("- All Sets")) {
List<String> setCodes = ConstructedFormats.getSetsByFormat(expansionSelection);
criteria.setCodes(setCodes.toArray(new String[0]));
}
}
return criteria;
}
private void filterCards() {
buildFilter();
FilterCard filter = buildFilter();
try {
List<Card> filteredCards = new ArrayList<Card>();
setCursor(new Cursor(Cursor.WAIT_CURSOR));
@ -239,7 +289,9 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
}
}
else {
for (Card card: CardsStorage.getAllCards()) {
List<CardInfo> foundCards = CardRepository.instance.findCards(buildCriteria());
for (CardInfo cardInfo : foundCards) {
Card card = cardInfo.getCard();
if (filter.match(card, null)) {
filteredCards.add(card);
}
@ -275,22 +327,6 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
}
}
public Card getCard(UUID cardId) {
if (!cards.isEmpty()) {
for (Card card: cards) {
if (card.getId().equals(cardId))
return card;
}
}
else {
for (Card card: CardsStorage.getAllCards()) {
if (card.getId().equals(cardId))
return card;
}
}
return null;
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
@ -748,34 +784,36 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
}//GEN-LAST:event_rdoPlaneswalkersActionPerformed
private void cbExpansionSetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbExpansionSetActionPerformed
if (cbExpansionSet.getSelectedItem() instanceof ExpansionSet) {
if (this.cbExpansionSet.getSelectedItem().equals("-- Standard")) {
filterCards();
} else {
if (this.cbExpansionSet.getSelectedItem().equals("-- Standard")) {
filterCards();
} else {
// auto switch for ListView for "All sets" (too many cards to load)
jToggleListView.doClick();
jToggleListView.setSelected(true);
}
// auto switch for ListView for "All sets" (too many cards to load)
jToggleListView.doClick();
jToggleListView.setSelected(true);
}
}//GEN-LAST:event_cbExpansionSetActionPerformed
private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnClearActionPerformed
cards.clear();
this.limited = false;
filterCards();
}//GEN-LAST:event_btnClearActionPerformed
private void btnBoosterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBoosterActionPerformed
if (cbExpansionSet.getSelectedItem() instanceof ExpansionSet) {
List<Card> booster = ((ExpansionSet)this.cbExpansionSet.getSelectedItem()).createBooster();
for (Card card: booster) {
cards.add(card);
List<String> sets = ConstructedFormats.getSetsByFormat(this.cbExpansionSet.getSelectedItem().toString());
if (sets.size() == 1) {
if (!this.limited) {
this.limited = true;
cards.clear();
}
ExpansionSet expansionSet = Sets.getInstance().get(sets.get(0));
if (expansionSet != null) {
List<Card> booster = expansionSet.createBooster();
cards.addAll(booster);
filterCards();
}
filterCards();
} else {
JOptionPane.showMessageDialog(null, "It's not possible to generate booster for not Expansion Set \nChoose Expansion Set first.");
JOptionPane.showMessageDialog(null, "An expansion set must be selected to be able to generate a booster.");
}
}//GEN-LAST:event_btnBoosterActionPerformed

View file

@ -28,9 +28,12 @@
package mage.client.deckeditor;
import mage.cards.Card;
import mage.cards.CardImpl;
import mage.cards.decks.Deck;
import mage.cards.decks.importer.DeckImporter;
import mage.cards.decks.importer.DeckImporterUtil;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.client.MageFrame;
import mage.client.cards.BigCard;
import mage.client.cards.ICardGrid;
@ -42,13 +45,16 @@ import mage.client.util.Listener;
import mage.components.CardInfoPane;
import mage.game.GameException;
import mage.remote.Session;
import mage.sets.Sets;
import mage.cards.Sets;
import mage.view.CardView;
import mage.view.SimpleCardView;
import org.apache.log4j.Logger;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import java.awt.*;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
@ -163,9 +169,11 @@ public class DeckEditorPanel extends javax.swing.JPanel {
@Override
public void event(Event event) {
if (event.getEventName().equals("double-click")) {
Card card = cardSelector.getCard((UUID) event.getSource());
SimpleCardView cardView = (SimpleCardView) event.getSource();
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card != null) {
deck.getCards().add(Sets.createCard(card.getClass()));
deck.getCards().add(card);
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
deck.getSideboard().remove(card);
cardSelector.removeCard(card.getId());
@ -179,8 +187,12 @@ public class DeckEditorPanel extends javax.swing.JPanel {
}
} else if (event.getEventName().equals("shift-double-click") && mode == DeckEditorMode.Constructed) {
Card card = cardSelector.getCard((UUID) event.getSource());
deck.getSideboard().add(Sets.createCard(card.getClass()));
SimpleCardView cardView = (SimpleCardView) event.getSource();
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card != null) {
deck.getSideboard().add(CardImpl.createCard(card.getClass()));
}
if (cardInfoPane instanceof CardInfoPane) {
((CardInfoPane)cardInfoPane).setCard(new CardView(card));
}
@ -201,8 +213,9 @@ public class DeckEditorPanel extends javax.swing.JPanel {
@Override
public void event(Event event) {
if (event.getEventName().equals("double-click")) {
SimpleCardView cardView = (SimpleCardView) event.getSource();
for (Card card: deck.getCards()) {
if (card.getId().equals(event.getSource())) {
if (card.getId().equals(cardView.getId())) {
deck.getCards().remove(card);
if (mode == DeckEditorMode.Limited || mode == DeckEditorMode.Sideboard) {
deck.getSideboard().add(card);
@ -215,8 +228,9 @@ public class DeckEditorPanel extends javax.swing.JPanel {
refreshDeck();
}
else if (event.getEventName().equals("shift-double-click") && mode == DeckEditorMode.Constructed) {
SimpleCardView cardView = (SimpleCardView) event.getSource();
for (Card card: deck.getCards()) {
if (card.getId().equals(event.getSource())) {
if (card.getId().equals(cardView.getId())) {
deck.getCards().remove(card);
deck.getSideboard().add(card);
break;
@ -233,8 +247,9 @@ public class DeckEditorPanel extends javax.swing.JPanel {
@Override
public void event(Event event) {
if (event.getEventName().equals("double-click")) {
SimpleCardView cardView = (SimpleCardView) event.getSource();
for (Card card: deck.getSideboard()) {
if (card.getId().equals(event.getSource())) {
if (card.getId().equals(cardView.getId())) {
deck.getSideboard().remove(card);
deck.getCards().add(card);
break;

View file

@ -32,8 +32,11 @@ import mage.cards.Card;
import mage.cards.CardDimensions;
import mage.cards.MageCard;
import mage.client.MageFrame;
import mage.cards.CardImpl;
import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.client.cards.BigCard;
import mage.client.cards.CardsStorage;
import mage.client.components.HoverButton;
import mage.client.plugins.impl.Plugins;
import mage.client.util.AudioManager;
@ -49,11 +52,16 @@ import org.mage.card.arcane.ManaSymbols;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
@ -209,13 +217,14 @@ public class MageBook extends JComponent {
jLayeredPane.removeAll();
addLeftRightPageButtons();
java.util.List<Card> cards = getCards(currentPage, currentSet);
List<CardInfo> cards = getCards(currentPage, currentSet);
int size = cards.size();
Rectangle rectangle = new Rectangle();
rectangle.translate(OFFSET_X, OFFSET_Y);
for (int i = 0; i < Math.min(conf.CARDS_PER_PAGE / 2, size); i++) {
addCard(new CardView(cards.get(i)), bigCard, null, rectangle);
Card card = CardImpl.createCard(cards.get(i).getClassName());
addCard(new CardView(card), bigCard, null, rectangle);
rectangle = CardPosition.translatePosition(i, rectangle, conf);
}
@ -225,7 +234,8 @@ public class MageBook extends JComponent {
rectangle.setLocation(second_page_x, OFFSET_Y);
for (int i = conf.CARDS_PER_PAGE / 2; i < Math.min(conf.CARDS_PER_PAGE, size); i++) {
addCard(new CardView(cards.get(i)), bigCard, null, rectangle);
Card card = CardImpl.createCard(cards.get(i).getClassName());
addCard(new CardView(card), bigCard, null, rectangle);
rectangle = CardPosition.translatePosition(i - conf.CARDS_PER_PAGE / 2, rectangle, conf);
}
@ -252,10 +262,10 @@ public class MageBook extends JComponent {
jLayeredPane.add(label);
}
private java.util.List<Card> getCards(int page, String set) {
int start = page * conf.CARDS_PER_PAGE;
int end = (page + 1) * conf.CARDS_PER_PAGE;
java.util.List<Card> cards = CardsStorage.getAllCards(start, end, currentSet, false);
private List<CardInfo> getCards(int page, String set) {
CardCriteria criteria = new CardCriteria();
criteria.setCodes(set).start((long) page * conf.CARDS_PER_PAGE).count((long) conf.CARDS_PER_PAGE + 1);
List<CardInfo> cards = CardRepository.instance.findCards(criteria);
if (cards.size() > conf.CARDS_PER_PAGE) {
pageRight.setVisible(true);
}
@ -288,7 +298,7 @@ public class MageBook extends JComponent {
this.setsToDisplay = ConstructedFormats.getSetsByFormat(format);
if (this.setsToDisplay.isEmpty()) {
// display all
this.setsToDisplay = CardsStorage.getSetCodes();
this.setsToDisplay = CardRepository.instance.getSetCodes();
}
addSetTabs();
tabs.get(0).execute();

View file

@ -3,6 +3,7 @@ package mage.client.deckeditor.collection.viewer;
import mage.client.plugins.impl.Plugins;
import javax.swing.*;
import mage.cards.repository.CardScanner;
import org.mage.card.arcane.ManaSymbols;
/**
@ -12,6 +13,7 @@ public class TestMageBook extends JFrame {
public static void main(String[] args) {
Plugins.getInstance().loadPlugins();
ManaSymbols.loadImages();
CardScanner.scan();
JFrame frame = new TestMageBook();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new MageBook(null));

View file

@ -1,770 +0,0 @@
/*
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.client.deckeditor.table;
import mage.Constants.CardType;
import mage.MageObject;
import mage.ObjectColor;
import mage.cards.Card;
import mage.cards.ExpansionSet;
import mage.client.cards.BigCard;
import mage.client.cards.CardEventSource;
import mage.client.cards.CardsStorage;
import mage.client.cards.ICardGrid;
import mage.client.constants.Constants.DeckEditorMode;
import mage.client.constants.Constants.SortBy;
import mage.client.util.sets.ConstructedFormats;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicate;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.filter.predicate.mageobject.ColorlessPredicate;
import mage.filter.predicate.other.CardTextPredicate;
import mage.filter.predicate.other.ExpansionSetPredicate;
import mage.sets.Sets;
import mage.view.CardsView;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.*;
import java.util.List;
/**
*
* @author BetaSteward_at_googlemail.com, nantuko
*/
public class CardTableSelector extends javax.swing.JPanel implements ComponentListener {
private final List<Card> cards = new ArrayList<Card>();
private FilterCard filter = new FilterCard();
private BigCard bigCard;
protected CardEventSource cardEventSource = new CardEventSource();
private DeckEditorMode mode = DeckEditorMode.Constructed;
public CardTableSelector() {
initComponents();
this.addComponentListener(this);
setOpaque(false);
mainTable.setOpaque(false);
jScrollPane1.setOpaque(false);
jScrollPane1.getViewport().setOpaque(false);
cbSortBy.setModel(new DefaultComboBoxModel(SortBy.values()));
cbSortBy.setVisible(false);
chkPiles.setVisible(false);
mainTable.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2 && !e.isConsumed()) {
e.consume();
jButtonAddToMainActionPerformed(null);
}
}
});
}
private void buildFilter() {
filter = new FilterCard();
ArrayList<Predicate<MageObject>> predicates = new ArrayList<Predicate<MageObject>>();
if (this.rdoGreen.isSelected()) {
predicates.add(new ColorPredicate(ObjectColor.GREEN));
}
if (this.rdoRed.isSelected()) {
predicates.add(new ColorPredicate(ObjectColor.RED));
}
if (this.rdoBlack.isSelected()) {
predicates.add(new ColorPredicate(ObjectColor.BLACK));
}
if (this.rdoBlue.isSelected()) {
predicates.add(new ColorPredicate(ObjectColor.BLUE));
}
if (this.rdoWhite.isSelected()) {
predicates.add(new ColorPredicate(ObjectColor.WHITE));
}
if (this.rdoColorless.isSelected()) {
predicates.add(new ColorlessPredicate());
}
filter.add(Predicates.or(predicates));
predicates.clear();
if (this.rdoLand.isSelected()) {
predicates.add(new CardTypePredicate(CardType.LAND));
}
if (this.rdoArtifacts.isSelected()) {
predicates.add(new CardTypePredicate(CardType.ARTIFACT));
}
if (this.rdoCreatures.isSelected()) {
predicates.add(new CardTypePredicate(CardType.CREATURE));
}
if (this.rdoEnchantments.isSelected()) {
predicates.add(new CardTypePredicate(CardType.ENCHANTMENT));
}
if (this.rdoInstants.isSelected()) {
predicates.add(new CardTypePredicate(CardType.INSTANT));
}
if (this.rdoSorceries.isSelected()) {
predicates.add(new CardTypePredicate(CardType.SORCERY));
}
if (this.rdoPlaneswalkers.isSelected()) {
predicates.add(new CardTypePredicate(CardType.PLANESWALKER));
}
filter.add(Predicates.or(predicates));
String name = jTextFieldSearch.getText().trim();
filter.add(new CardTextPredicate(name));
if (this.cbExpansionSet.getSelectedItem() instanceof ExpansionSet) {
filter.add(new ExpansionSetPredicate(((ExpansionSet) this.cbExpansionSet.getSelectedItem()).getCode()));
} else if (this.cbExpansionSet.getSelectedItem().equals("-- Standard")) {
ArrayList<Predicate<Card>> expansionPredicates = new ArrayList<Predicate<Card>>();
for(String setCode : ConstructedFormats.getSetsByFormat("Standard")) {
expansionPredicates.add(new ExpansionSetPredicate(setCode));
}
filter.add(Predicates.or(expansionPredicates));
}
}
public void loadCards(List<Card> sideboard, BigCard bigCard, boolean construct) {
this.bigCard = bigCard;
this.btnBooster.setVisible(false);
this.btnClear.setVisible(false);
this.cbExpansionSet.setVisible(false);
this.cards.clear();
for (Card card: sideboard) {
this.cards.add(card);
}
filterCards();
}
public void loadCards(BigCard bigCard) {
this.bigCard = bigCard;
this.btnBooster.setVisible(true);
this.btnClear.setVisible(true);
this.cbExpansionSet.setVisible(true);
Object[] l = Sets.getInstance().values().toArray();
Arrays.sort(l, new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {
return ((ExpansionSet)o1).getName().compareTo(((ExpansionSet)o2).getName());
}
});
cbExpansionSet.setModel(new DefaultComboBoxModel(l));
cbExpansionSet.insertItemAt("-- All sets -- ", 0);
cbExpansionSet.setSelectedIndex(0);
filterCards();
}
private void filterCards() {
buildFilter();
try {
List<Card> filteredCards = new ArrayList<Card>();
setCursor(new Cursor(Cursor.WAIT_CURSOR));
if (!cards.isEmpty()) {
for (Card card: cards) {
if (filter.match(card, null))
filteredCards.add(card);
}
}
else {
for (Card card: CardsStorage.getAllCards()) {
if (filter.match(card, null))
filteredCards.add(card);
}
}
this.mainModel.loadCards(new CardsView(filteredCards), (SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected(), bigCard, null);
}
finally {
setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
public ICardGrid getCardsList() {
return this.mainModel;
}
public void removeCard(UUID cardId) {
this.mainModel.removeCard(cardId);
for (Card card: cards) {
if (card.getId().equals(cardId)) {
cards.remove(card);
break;
}
}
}
public Card getCard(UUID cardId) {
if (!cards.isEmpty()) {
for (Card card: cards) {
if (card.getId().equals(cardId))
return card;
}
}
else {
for (Card card: CardsStorage.getAllCards()) {
if (card.getId().equals(cardId))
return card;
}
}
return null;
}
private void initComponents() {
tbColor = new javax.swing.JToolBar();
rdoRed = new javax.swing.JRadioButton();
rdoGreen = new javax.swing.JRadioButton();
rdoBlue = new javax.swing.JRadioButton();
rdoBlack = new javax.swing.JRadioButton();
rdoWhite = new javax.swing.JRadioButton();
rdoColorless = new javax.swing.JRadioButton();
cbExpansionSet = new javax.swing.JComboBox();
btnBooster = new javax.swing.JButton();
btnClear = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
mainTable = new JTable();
tbTypes = new javax.swing.JToolBar();
rdoLand = new javax.swing.JRadioButton();
rdoCreatures = new javax.swing.JRadioButton();
rdoArtifacts = new javax.swing.JRadioButton();
rdoEnchantments = new javax.swing.JRadioButton();
rdoInstants = new javax.swing.JRadioButton();
rdoSorceries = new javax.swing.JRadioButton();
rdoPlaneswalkers = new javax.swing.JRadioButton();
chkPiles = new javax.swing.JCheckBox();
cbSortBy = new javax.swing.JComboBox();
jTextFieldSearch = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
jButtonSearch = new javax.swing.JButton();
jButtonClean = new javax.swing.JButton();
jSeparator1 = new javax.swing.JSeparator();
jButtonAddToMain = new javax.swing.JButton();
jButtonAddToSideboard = new javax.swing.JButton();
tbColor.setFloatable(false);
tbColor.setRollover(true);
rdoRed.setSelected(true);
rdoRed.setText("Red ");
rdoRed.setFocusable(false);
rdoRed.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoRed.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoRed.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoRedActionPerformed(evt);
}
});
tbColor.add(rdoRed);
rdoGreen.setSelected(true);
rdoGreen.setText("Green ");
rdoGreen.setFocusable(false);
rdoGreen.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoGreen.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoGreen.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoGreenActionPerformed(evt);
}
});
tbColor.add(rdoGreen);
rdoBlue.setSelected(true);
rdoBlue.setText("Blue ");
rdoBlue.setFocusable(false);
rdoBlue.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoBlue.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoBlue.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoBlueActionPerformed(evt);
}
});
tbColor.add(rdoBlue);
rdoBlack.setSelected(true);
rdoBlack.setText("Black ");
rdoBlack.setFocusable(false);
rdoBlack.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoBlack.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoBlack.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoBlackActionPerformed(evt);
}
});
tbColor.add(rdoBlack);
rdoWhite.setSelected(true);
rdoWhite.setText("White ");
rdoWhite.setFocusable(false);
rdoWhite.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoWhite.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoWhite.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoWhiteActionPerformed(evt);
}
});
tbColor.add(rdoWhite);
rdoColorless.setSelected(true);
rdoColorless.setText("Colorless ");
rdoColorless.setFocusable(false);
rdoColorless.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoColorless.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoColorless.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoColorlessActionPerformed(evt);
}
});
tbColor.add(rdoColorless);
cbExpansionSet.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
cbExpansionSet.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbExpansionSetActionPerformed(evt);
}
});
tbColor.add(cbExpansionSet);
btnBooster.setText("Open Booster");
btnBooster.setFocusable(false);
btnBooster.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnBooster.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnBooster.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnBoosterActionPerformed(evt);
}
});
tbColor.add(btnBooster);
btnClear.setText("Clear");
btnClear.setFocusable(false);
btnClear.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnClear.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnClear.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnClearActionPerformed(evt);
}
});
tbColor.add(btnClear);
mainModel = new TableModel();
mainModel.addListeners(mainTable);
mainTable.setModel(mainModel);
mainTable.setForeground(Color.white);
DefaultTableCellRenderer myRenderer = (DefaultTableCellRenderer) mainTable.getDefaultRenderer(String.class);
myRenderer.setBackground(new Color(0, 0, 0, 100));
mainTable.getColumnModel().getColumn(0).setMaxWidth(0);
mainTable.getColumnModel().getColumn(0).setPreferredWidth(10);
mainTable.getColumnModel().getColumn(1).setPreferredWidth(110);
mainTable.getColumnModel().getColumn(2).setPreferredWidth(90);
mainTable.getColumnModel().getColumn(3).setPreferredWidth(50);
mainTable.getColumnModel().getColumn(4).setPreferredWidth(170);
mainTable.getColumnModel().getColumn(5).setPreferredWidth(30);
mainTable.getColumnModel().getColumn(6).setPreferredWidth(15);
mainTable.getColumnModel().getColumn(7).setPreferredWidth(15);
jScrollPane1.setViewportView(mainTable);
tbTypes.setFloatable(false);
tbTypes.setRollover(true);
rdoLand.setSelected(true);
rdoLand.setFocusable(false);
rdoLand.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoLand.setLabel("Land ");
rdoLand.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoLand.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoLandActionPerformed(evt);
}
});
tbTypes.add(rdoLand);
rdoCreatures.setSelected(true);
rdoCreatures.setFocusable(false);
rdoCreatures.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoCreatures.setLabel("Creatures ");
rdoCreatures.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoCreatures.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoCreaturesActionPerformed(evt);
}
});
tbTypes.add(rdoCreatures);
rdoArtifacts.setSelected(true);
rdoArtifacts.setText("Artifacts ");
rdoArtifacts.setFocusable(false);
rdoArtifacts.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoArtifacts.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoArtifacts.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoArtifactsActionPerformed(evt);
}
});
tbTypes.add(rdoArtifacts);
rdoEnchantments.setSelected(true);
rdoEnchantments.setText("Enchantments ");
rdoEnchantments.setFocusable(false);
rdoEnchantments.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoEnchantments.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoEnchantments.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoEnchantmentsActionPerformed(evt);
}
});
tbTypes.add(rdoEnchantments);
rdoInstants.setSelected(true);
rdoInstants.setText("Instants ");
rdoInstants.setFocusable(false);
rdoInstants.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoInstants.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoInstants.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoInstantsActionPerformed(evt);
}
});
tbTypes.add(rdoInstants);
rdoSorceries.setSelected(true);
rdoSorceries.setText("Sorceries ");
rdoSorceries.setFocusable(false);
rdoSorceries.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoSorceries.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoSorceries.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoSorceriesActionPerformed(evt);
}
});
tbTypes.add(rdoSorceries);
rdoPlaneswalkers.setSelected(true);
rdoPlaneswalkers.setText("Planeswalkers ");
rdoPlaneswalkers.setFocusable(false);
rdoPlaneswalkers.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
rdoPlaneswalkers.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
rdoPlaneswalkers.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rdoPlaneswalkersActionPerformed(evt);
}
});
tbTypes.add(rdoPlaneswalkers);
chkPiles.setText("Piles");
chkPiles.setFocusable(false);
chkPiles.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
chkPiles.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
chkPiles.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
chkPilesActionPerformed(evt);
}
});
tbTypes.add(chkPiles);
cbSortBy.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
cbSortBy.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cbSortByActionPerformed(evt);
}
});
tbTypes.add(cbSortBy);
jLabel1.setText("Search (by name,in rules):");
jButtonSearch.setLabel("Search");
jButtonSearch.setMaximumSize(new java.awt.Dimension(85, 23));
jButtonSearch.setMinimumSize(new java.awt.Dimension(85, 23));
jButtonSearch.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonSearchActionPerformed(evt);
}
});
jButtonClean.setText("Clear");
jButtonClean.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonCleanActionPerformed(evt);
}
});
jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL);
jButtonAddToMain.setLabel("Add to Main");
jButtonAddToMain.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonAddToMainActionPerformed(evt);
}
});
jButtonAddToSideboard.setLabel("Add to Sideboard");
jButtonAddToSideboard.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonAddToSideboardActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tbColor, javax.swing.GroupLayout.DEFAULT_SIZE, 938, Short.MAX_VALUE)
.addComponent(tbTypes, javax.swing.GroupLayout.DEFAULT_SIZE, 938, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 938, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButtonAddToMain, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButtonAddToSideboard)
.addGap(18, 18, 18)
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextFieldSearch, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButtonSearch, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButtonClean)
.addContainerGap(322, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(tbColor, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, 0)
.addComponent(tbTypes, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 284, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButtonAddToMain)
.addComponent(jButtonAddToSideboard))
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jButtonSearch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButtonClean)
.addComponent(jTextFieldSearch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap())
);
}
private void rdoGreenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoGreenActionPerformed
filterCards();
}//GEN-LAST:event_rdoGreenActionPerformed
private void rdoBlackActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoBlackActionPerformed
filterCards();
}//GEN-LAST:event_rdoBlackActionPerformed
private void rdoWhiteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoWhiteActionPerformed
filterCards();
}//GEN-LAST:event_rdoWhiteActionPerformed
private void rdoRedActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoRedActionPerformed
filterCards();
}//GEN-LAST:event_rdoRedActionPerformed
private void rdoBlueActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoBlueActionPerformed
filterCards();
}//GEN-LAST:event_rdoBlueActionPerformed
private void rdoColorlessActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoColorlessActionPerformed
filterCards();
}//GEN-LAST:event_rdoColorlessActionPerformed
private void rdoLandActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoLandActionPerformed
filterCards();
}//GEN-LAST:event_rdoLandActionPerformed
private void rdoCreaturesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoCreaturesActionPerformed
filterCards();
}//GEN-LAST:event_rdoCreaturesActionPerformed
private void rdoArtifactsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoArtifactsActionPerformed
filterCards();
}//GEN-LAST:event_rdoArtifactsActionPerformed
private void rdoEnchantmentsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoEnchantmentsActionPerformed
filterCards();
}//GEN-LAST:event_rdoEnchantmentsActionPerformed
private void rdoInstantsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoInstantsActionPerformed
filterCards();
}//GEN-LAST:event_rdoInstantsActionPerformed
private void rdoSorceriesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoSorceriesActionPerformed
filterCards();
}//GEN-LAST:event_rdoSorceriesActionPerformed
private void rdoPlaneswalkersActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoPlaneswalkersActionPerformed
filterCards();
}//GEN-LAST:event_rdoPlaneswalkersActionPerformed
private void cbExpansionSetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbExpansionSetActionPerformed
filterCards();
}//GEN-LAST:event_cbExpansionSetActionPerformed
private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnClearActionPerformed
cards.clear();
filterCards();
}//GEN-LAST:event_btnClearActionPerformed
private void btnBoosterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBoosterActionPerformed
if (this.cbExpansionSet.getSelectedItem() instanceof ExpansionSet) {
List<Card> booster = ((ExpansionSet)this.cbExpansionSet.getSelectedItem()).createBooster();
for (Card card: booster) {
cards.add(card);
}
filterCards();
}
}//GEN-LAST:event_btnBoosterActionPerformed
private void cbSortByActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbSortByActionPerformed
if (cbSortBy.getSelectedItem() instanceof SortBy)
this.mainModel.drawCards((SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected());
}//GEN-LAST:event_cbSortByActionPerformed
private void chkPilesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkPilesActionPerformed
if (cbSortBy.getSelectedItem() instanceof SortBy)
this.mainModel.drawCards((SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected());
}//GEN-LAST:event_chkPilesActionPerformed
private void jButtonAddToMainActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
if (mainTable.getSelectedRowCount() > 0) {
int[] n = mainTable.getSelectedRows();
List<Integer> indexes = asList(n);
Collections.reverse(indexes);
for (Integer index : indexes) {
mainModel.doubleClick(index);
}
if (!mode.equals(DeckEditorMode.Constructed))
mainModel.fireTableDataChanged();
}
}//GEN-LAST:event_jButton3ActionPerformed
private void jButtonAddToSideboardActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
if (mainTable.getSelectedRowCount() > 0) {
int[] n = mainTable.getSelectedRows();
List<Integer> indexes = asList(n);
Collections.reverse(indexes);
for (Integer index : indexes) {
mainModel.shiftDoubleClick(index);
}
if (!mode.equals(DeckEditorMode.Constructed))
mainModel.fireTableDataChanged();
}
}//GEN-LAST:event_jButton4ActionPerformed
public List<Integer> asList(final int[] is) {
List<Integer> list = new ArrayList<Integer>();
for (int i : is) list.add(i);
return list;
}
private void jButtonSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
filterCards();
}//GEN-LAST:event_jButton1ActionPerformed
private void jButtonCleanActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
jTextFieldSearch.setText("");
filterCards();
}//GEN-LAST:event_jButton2ActionPerformed
private TableModel mainModel;
private javax.swing.JButton btnBooster;
private javax.swing.JButton btnClear;
private JTable mainTable = new JTable();
private javax.swing.JComboBox cbExpansionSet;
private javax.swing.JComboBox cbSortBy;
private javax.swing.JCheckBox chkPiles;
private javax.swing.JButton jButtonSearch;
private javax.swing.JButton jButtonClean;
private javax.swing.JButton jButtonAddToMain;
private javax.swing.JButton jButtonAddToSideboard;
private javax.swing.JLabel jLabel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JSeparator jSeparator1;
private javax.swing.JTextField jTextFieldSearch;
private javax.swing.JRadioButton rdoArtifacts;
private javax.swing.JRadioButton rdoBlack;
private javax.swing.JRadioButton rdoBlue;
private javax.swing.JRadioButton rdoColorless;
private javax.swing.JRadioButton rdoCreatures;
private javax.swing.JRadioButton rdoEnchantments;
private javax.swing.JRadioButton rdoGreen;
private javax.swing.JRadioButton rdoInstants;
private javax.swing.JRadioButton rdoLand;
private javax.swing.JRadioButton rdoPlaneswalkers;
private javax.swing.JRadioButton rdoRed;
private javax.swing.JRadioButton rdoSorceries;
private javax.swing.JRadioButton rdoWhite;
private javax.swing.JToolBar tbColor;
private javax.swing.JToolBar tbTypes;
@Override
public void componentResized(ComponentEvent e) {
if (cbSortBy.getSelectedItem() instanceof SortBy)
this.mainModel.drawCards((SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected());
}
@Override
public void componentMoved(ComponentEvent e) {
if (cbSortBy.getSelectedItem() instanceof SortBy)
this.mainModel.drawCards((SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected());
}
@Override
public void componentShown(ComponentEvent e) {
if (cbSortBy.getSelectedItem() instanceof SortBy)
this.mainModel.drawCards((SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected());
}
@Override
public void componentHidden(ComponentEvent e) {
if (cbSortBy.getSelectedItem() instanceof SortBy)
this.mainModel.drawCards((SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected());
}
public void setMode(DeckEditorMode mode) {
this.mode = mode;
}
}

View file

@ -269,12 +269,12 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
public void doubleClick(int index) {
CardView card = view.get(index);
cardEventSource.doubleClick(card.getId(), "double-click");
cardEventSource.doubleClick(card, "double-click");
}
public void shiftDoubleClick(int index) {
CardView card = view.get(index);
cardEventSource.shiftDoubleClick(card.getId(), "shift-double-click");
cardEventSource.shiftDoubleClick(card, "shift-double-click");
}
public void removeFromMainEvent(int index) {

View file

@ -34,10 +34,14 @@
package mage.client.dialog;
import java.util.List;
import java.util.Random;
import javax.swing.JLayeredPane;
import mage.cards.Card;
import mage.cards.decks.Deck;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.client.MageFrame;
import mage.sets.Sets;
/**
*
@ -59,6 +63,19 @@ public class AddLandDialog extends MageDialog {
this.setVisible(true);
}
private void addLands(String landName, int number) {
Random random = new Random();
List<CardInfo> cards = CardRepository.instance.findCards(landName);
if (cards.isEmpty()) {
return;
}
for (int i = 0; i < number; i++) {
Card land = cards.get(random.nextInt(cards.size())).getCard();
deck.getCards().add(land);
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
@ -194,25 +211,16 @@ public class AddLandDialog extends MageDialog {
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddActionPerformed
int nForest = ((Number)spnForest.getValue()).intValue();
for (int i = 0; i < nForest; i++) {
deck.getCards().add(Sets.findCard("Forest", true));
}
int nIsland = ((Number)spnIsland.getValue()).intValue();
for (int i = 0; i < nIsland; i++) {
deck.getCards().add(Sets.findCard("Island", true));
}
int nMountain = ((Number)spnMountain.getValue()).intValue();
for (int i = 0; i < nMountain; i++) {
deck.getCards().add(Sets.findCard("Mountain", true));
}
int nPlains = ((Number)spnPlains.getValue()).intValue();
for (int i = 0; i < nPlains; i++) {
deck.getCards().add(Sets.findCard("Plains", true));
}
int nSwamp = ((Number)spnSwamp.getValue()).intValue();
for (int i = 0; i < nSwamp; i++) {
deck.getCards().add(Sets.findCard("Swamp", true));
}
addLands("Forest", nForest);
addLands("Island", nIsland);
addLands("Mountain", nMountain);
addLands("Plains", nPlains);
addLands("Swamp", nSwamp);
this.hideDialog();
}//GEN-LAST:event_btnAddActionPerformed

View file

@ -44,7 +44,7 @@ import mage.game.draft.DraftOptions.TimingOption;
import mage.game.tournament.LimitedOptions;
import mage.game.tournament.TournamentOptions;
import mage.remote.Session;
import mage.sets.Sets;
import mage.cards.Sets;
import mage.view.TableView;
import mage.view.TournamentTypeView;
import org.apache.log4j.Logger;

View file

@ -37,6 +37,7 @@ package mage.client.game;
import mage.cards.MageCard;
import mage.cards.action.ActionCallback;
import mage.cards.decks.importer.DckDeckImporter;
import mage.cards.repository.CardRepository;
import mage.client.MageFrame;
import mage.client.cards.BigCard;
import mage.client.components.HoverButton;
@ -50,7 +51,6 @@ import mage.client.util.ImageHelper;
import mage.client.util.gui.BufferedImageBuilder;
import mage.components.ImagePanel;
import mage.remote.Session;
import mage.sets.Sets;
import mage.view.CardView;
import mage.view.ManaPoolView;
import mage.view.PlayerView;
@ -202,7 +202,7 @@ public class PlayerPanelExt extends javax.swing.JPanel {
// Avatar
Image image = ImageHelper.getImageFromResources("/avatars/unknown.jpg");
topCardPanel = Plugins.getInstance().getMageCard(new CardView(Sets.findCard("Forest")), bigCard, topCardDimension, gameId, true);
topCardPanel = Plugins.getInstance().getMageCard(new CardView(CardRepository.instance.findCard("Forest").getCard()), bigCard, topCardDimension, gameId, true);
topCardPanel.setVisible(false);
panelBackground.add(topCardPanel);

View file

@ -1,6 +1,5 @@
package mage.client.plugins;
import mage.cards.Card;
import mage.cards.MageCard;
import mage.cards.MagePermanent;
import mage.cards.action.ActionCallback;
@ -13,7 +12,6 @@ import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
public interface MagePlugins {
@ -27,8 +25,6 @@ public interface MagePlugins {
boolean isCardPluginLoaded();
boolean isCounterPluginLoaded();
int sortPermanents(Map<String, JComponent> ui, Collection<MagePermanent> permanents);
boolean newImage(Set<Card> allCards);
void downloadImage(Set<Card> allCards);
void downloadSymbols();
int getGamesPlayed();
void addGamesPlayed();

View file

@ -119,22 +119,6 @@ public class Plugins implements MagePlugins {
return -1;
}
@Override
public boolean newImage(Set<mage.cards.Card> allCards) {
String useDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_USE_DEFAULT, "true");
String path = useDefault.equals("true") ? null : PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PATH, null);
return this.cardPlugin.newImages(allCards, path);
}
@Override
public void downloadImage(Set<mage.cards.Card> allCards) {
String useDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_USE_DEFAULT, "true");
String path = useDefault.equals("true") ? null : PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_PATH, null);
if (this.cardPlugin != null) {
this.cardPlugin.downloadImages(allCards, path);
}
}
@Override
public void downloadSymbols() {
String useDefault = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_CARD_IMAGES_USE_DEFAULT, "true");

View file

@ -28,7 +28,9 @@
package mage.client.util;
import mage.sets.Sets;
import mage.cards.Card;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.view.CardView;
import mage.view.CardsView;
import mage.view.SimpleCardView;
@ -44,9 +46,9 @@ public class CardsViewUtil {
CardsView cards = new CardsView();
for (SimpleCardView simple: view.values()) {
mage.cards.Card card = Sets.findCard(simple.getExpansionSetCode(), simple.getCardNumber());
CardInfo cardInfo = CardRepository.instance.findCard(simple.getExpansionSetCode(), simple.getCardNumber());
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card != null) {
cards.put(simple.getId(), new CardView(card, simple.getId()));
}
}

View file

@ -29,9 +29,9 @@
package mage.client.util;
import mage.cards.Card;
import mage.cards.ExpansionSet;
import mage.cards.decks.Deck;
import mage.sets.Sets;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
import mage.view.DeckView;
import mage.view.SimpleCardView;
import org.apache.log4j.Logger;
@ -51,25 +51,21 @@ public class DeckUtil {
public static Deck construct(DeckView view) {
Deck deck = new Deck();
for (SimpleCardView cardView : view.getCards().values()) {
ExpansionSet set = Sets.findSet(cardView.getExpansionSetCode());
if (set != null) {
Card card = set.findCard(cardView.getCardNumber());
if (card != null) {
deck.getCards().add(card);
} else {
log.fatal("(Deck constructing) Couldn't find card: set=" + cardView.getExpansionSetCode() + ", cid=" + Integer.valueOf(cardView.getCardNumber()));
}
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card != null) {
deck.getCards().add(card);
} else {
log.fatal("(Deck constructing) Couldn't find card: set=" + cardView.getExpansionSetCode() + ", cid=" + Integer.valueOf(cardView.getCardNumber()));
}
}
for (SimpleCardView cardView : view.getSideboard().values()) {
ExpansionSet set = Sets.findSet(cardView.getExpansionSetCode());
if (set != null) {
Card card = set.findCard(cardView.getCardNumber());
if (card != null) {
deck.getSideboard().add(card);
} else {
log.fatal("(Deck constructing) Couldn't find card: set=" + cardView.getExpansionSetCode() + ", cid=" + Integer.valueOf(cardView.getCardNumber()));
}
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card != null) {
deck.getSideboard().add(card);
} else {
log.fatal("(Deck constructing) Couldn't find card: set=" + cardView.getExpansionSetCode() + ", cid=" + Integer.valueOf(cardView.getCardNumber()));
}
}
return deck;

View file

@ -6,8 +6,8 @@ import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import mage.cards.ExpansionSet;
import mage.client.cards.CardsStorage;
import mage.sets.Sets;
import mage.cards.repository.CardRepository;
import mage.cards.Sets;
/**
* Utility class for constructed formats.
@ -344,10 +344,9 @@ public class ConstructedFormats {
}
private static void buildLists() {
for (String setCode : CardsStorage.getSetCodes()) {
for (String setCode : CardRepository.instance.getSetCodes()) {
ExpansionSet set = Sets.findSet(setCode);
if (set.getReleaseDate().after(standardDate)) {
standard.add(set.getCode());
}
@ -359,7 +358,7 @@ public class ConstructedFormats {
}
}
}
private static final List<String> standard = new ArrayList<String>();
private static final Date standardDate = new GregorianCalendar(2011, 9, 29).getTime();

View file

@ -1,6 +1,6 @@
package org.mage.card.arcane;
import mage.client.cards.CardsStorage;
import mage.cards.repository.CardRepository;
import mage.client.util.ImageHelper;
import mage.client.util.gui.BufferedImageBuilder;
import org.apache.log4j.Logger;
@ -47,7 +47,8 @@ public class ManaSymbols {
} catch (Exception e) {
}
}
for (String set : CardsStorage.getSetCodes()) {
List<String> setCodes = CardRepository.instance.getSetCodes();
for (String set : setCodes) {
String _set = set.equals("CON") ? "CFX" : set;
File file = new File(Constants.RESOURCE_PATH_SET + _set + "-C.jpg");
try {
@ -104,7 +105,7 @@ public class ManaSymbols {
}
File file;
for (String set : CardsStorage.getSetCodes()) {
for (String set : CardRepository.instance.getSetCodes()) {
file = new File(Constants.RESOURCE_PATH_SET_SMALL);
if (!file.exists()) {
break;

View file

@ -1,6 +1,5 @@
package org.mage.plugins.card;
import mage.cards.Card;
import mage.cards.MagePermanent;
import mage.cards.action.ActionCallback;
import mage.interfaces.plugin.CardPlugin;
@ -21,7 +20,6 @@ import org.mage.plugins.card.dl.DownloadJob;
import org.mage.plugins.card.dl.Downloader;
import org.mage.plugins.card.dl.sources.GathererSets;
import org.mage.plugins.card.dl.sources.GathererSymbols;
import org.mage.plugins.card.images.DownloadPictures;
import org.mage.plugins.card.images.ImageCache;
import org.mage.plugins.card.info.CardInfoPaneImpl;
@ -421,22 +419,6 @@ public class CardPluginImpl implements CardPlugin {
}
}
@Override
public boolean newImages(Set<Card> allCards, String imagesPath) {
return DownloadPictures.checkForNewCards(allCards, imagesPath);
}
/**
* Download images.
*
* @param allCards Set of cards to download images for.
* @param imagesPath Path to check in and store images to. Can be null, in such case default path should be used.
*/
@Override
public void downloadImages(Set<Card> allCards, String imagesPath) {
DownloadPictures.startDownload(null, allCards, imagesPath);
}
/**
* Download various symbols (mana, tap, set).
*

View file

@ -21,7 +21,9 @@ import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.FileImageOutputStream;
import javax.swing.*;
import java.awt.*;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
@ -32,7 +34,7 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.regex.Pattern;
@ -67,7 +69,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
startDownload(null, null, null);
}
public static void startDownload(JFrame frame, Set<Card> allCards, String imagesPath) {
public static void startDownload(JFrame frame, List<Card> allCards, String imagesPath) {
ArrayList<CardInfo> cards = getNeededCards(allCards, imagesPath);
/*
@ -207,7 +209,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
dlg = new JOptionPane(p0, JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[1]);
}
public static boolean checkForNewCards(Set<Card> allCards, String imagesPath) {
public static boolean checkForNewCards(List<Card> allCards, String imagesPath) {
TFile file;
for (Card card : allCards) {
if (card.getCardNumber() > 0 && !card.getExpansionSetCode().isEmpty()) {
@ -221,7 +223,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab
return false;
}
private static ArrayList<CardInfo> getNeededCards(Set<Card> allCards, String imagesPath) {
private static ArrayList<CardInfo> getNeededCards(List<Card> allCards, String imagesPath) {
ArrayList<CardInfo> cardsToDownload = new ArrayList<CardInfo>();