Used CardRepository in Deck Editor

This commit is contained in:
North 2012-10-21 18:13:07 +03:00
parent 56a11f4da2
commit 809910e8c7
8 changed files with 160 additions and 74 deletions

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

@ -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

@ -39,9 +39,11 @@ import mage.MageObject;
import mage.ObjectColor;
import mage.cards.Card;
import mage.cards.ExpansionSet;
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 +56,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 +72,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 +163,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 +224,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 +288,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 +326,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

View file

@ -31,6 +31,8 @@ import mage.cards.Card;
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;
@ -44,11 +46,14 @@ import mage.game.GameException;
import mage.remote.Session;
import mage.sets.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 +168,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.getCard(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 +186,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.getCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
Card card = cardInfo != null ? cardInfo.getCard() : null;
if (card != null) {
deck.getSideboard().add(Sets.createCard(card.getClass()));
}
if (cardInfoPane instanceof CardInfoPane) {
((CardInfoPane)cardInfoPane).setCard(new CardView(card));
}
@ -201,8 +212,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 +227,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 +246,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

@ -33,9 +33,11 @@ import mage.MageObject;
import mage.ObjectColor;
import mage.cards.Card;
import mage.cards.ExpansionSet;
import mage.cards.repository.CardCriteria;
import mage.cards.repository.CardInfo;
import mage.cards.repository.CardRepository;
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;
@ -53,13 +55,13 @@ 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.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.*;
import java.util.List;
/**
*
@ -68,7 +70,6 @@ import java.util.List;
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;
@ -95,8 +96,8 @@ public class CardTableSelector extends javax.swing.JPanel implements ComponentLi
}
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()) {
@ -150,11 +151,13 @@ public class CardTableSelector extends javax.swing.JPanel implements ComponentLi
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")) {
for (String setCode : ConstructedFormats.getSetsByFormat("Standard")) {
expansionPredicates.add(new ExpansionSetPredicate(setCode));
}
filter.add(Predicates.or(expansionPredicates));
}
return filter;
}
public void loadCards(List<Card> sideboard, BigCard bigCard, boolean construct) {
@ -189,21 +192,71 @@ public class CardTableSelector extends javax.swing.JPanel implements ComponentLi
filterCards();
}
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.getSelectedItem() instanceof ExpansionSet) {
criteria.setCodes(((ExpansionSet) this.cbExpansionSet.getSelectedItem()).getCode());
} else if (this.cbExpansionSet.getSelectedItem().equals("-- Standard")) {
List<String> setCodes = ConstructedFormats.getSetsByFormat("Standard");
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));
if (!cards.isEmpty()) {
for (Card card: cards) {
if (filter.match(card, null))
if (filter.match(card, null)) {
filteredCards.add(card);
}
}
}
else {
for (Card card: CardsStorage.getAllCards()) {
if (filter.match(card, null))
List<CardInfo> foundCards = CardRepository.instance.findCards(buildCriteria());
for (CardInfo cardInfo : foundCards) {
Card card = cardInfo.getCard();
if (filter.match(card, null)) {
filteredCards.add(card);
}
}
}
this.mainModel.loadCards(new CardsView(filteredCards), (SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected(), bigCard, null);
@ -227,22 +280,6 @@ public class CardTableSelector extends javax.swing.JPanel implements ComponentLi
}
}
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();

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) {