* Deck editor - Added possibility to edit number of cards for deck and sideboard directly if deck editor is in normal mode to build a deck from complete card pool.

This commit is contained in:
LevelX2 2014-05-09 16:00:37 +02:00
parent 7d714947aa
commit 0561499d5b
13 changed files with 351 additions and 55 deletions

View file

@ -38,6 +38,7 @@ package mage.client.deckeditor;
import mage.cards.decks.Deck;
import mage.client.cards.BigCard;
import mage.client.cards.CardsList;
import mage.client.constants.Constants.DeckEditorMode;
import mage.client.util.Event;
import mage.client.util.Listener;
import mage.view.CardsView;
@ -69,6 +70,11 @@ public class DeckArea extends javax.swing.JPanel {
this.sideboardList.setVisible(show);
}
public void setDeckEditorMode(DeckEditorMode mode) {
this.deckList.setDeckEditorMode(mode);
this.sideboardList.setDeckEditorMode(mode);
}
public void loadDeck(Deck deck, BigCard bigCard) {
deckList.loadCards(new CardsView(deck.getCards()), bigCard, null);
if (sideboardList.isVisible()) {

View file

@ -56,7 +56,7 @@ public class DeckEditorPane extends MagePane {
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
boolean initialized = false;
if (Plugins.getInstance().isThemePluginLoaded()) {
Map<String, JComponent> uiMap = new HashMap<String, JComponent>();
Map<String, JComponent> uiMap = new HashMap<>();
JComponent container = Plugins.getInstance().updateTablePanel(uiMap);
if (container != null) {
deckEditorPanel1 = new mage.client.deckeditor.DeckEditorPanel();
@ -73,7 +73,7 @@ public class DeckEditorPane extends MagePane {
}
public void show(DeckEditorMode mode, Deck deck, String name, UUID tableId, int time) {
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
if (mode == DeckEditorMode.SIDEBOARDING || mode == DeckEditorMode.LIMITED_BUILDING) {
this.setTitle("Deck Editor - " + tableId.toString());
}
else {

View file

@ -36,6 +36,8 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
@ -58,9 +60,9 @@ import mage.client.MageFrame;
import mage.client.cards.BigCard;
import mage.client.cards.ICardGrid;
import mage.client.constants.Constants.DeckEditorMode;
import static mage.client.constants.Constants.DeckEditorMode.Constructed;
import static mage.client.constants.Constants.DeckEditorMode.Limited;
import static mage.client.constants.Constants.DeckEditorMode.Sideboard;
import static mage.client.constants.Constants.DeckEditorMode.FREE_BUILDING;
import static mage.client.constants.Constants.DeckEditorMode.LIMITED_BUILDING;
import static mage.client.constants.Constants.DeckEditorMode.SIDEBOARDING;
import mage.client.dialog.AddLandDialog;
import mage.client.plugins.impl.Plugins;
import mage.client.util.Event;
@ -151,11 +153,12 @@ public class DeckEditorPanel extends javax.swing.JPanel {
this.tableId = tableId;
this.mode = mode;
this.btnAddLand.setVisible(false);
switch (mode) {
case Limited:
case LIMITED_BUILDING:
this.btnAddLand.setVisible(true);
this.txtTimeRemaining.setVisible(true);
case Sideboard:
case SIDEBOARDING:
this.btnSubmit.setVisible(true);
if (deck != null) {
this.cardSelector.loadSideboard(new ArrayList<>(deck.getSideboard()), this.bigCard);
@ -180,7 +183,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
}
}
break;
case Constructed:
case FREE_BUILDING:
this.btnSubmit.setVisible(false);
this.cardSelector.loadCards(this.bigCard);
//this.cardTableSelector.loadCards(this.bigCard);
@ -194,6 +197,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
break;
}
init();
this.deckArea.setDeckEditorMode(mode);
}
private void init() {
@ -210,7 +214,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
moveSelectorCardToDeck(event);
break;
case "shift-double-click":
if (mode == DeckEditorMode.Constructed) {
if (mode == DeckEditorMode.FREE_BUILDING) {
moveSelectorCardToSideboard(event);
} else {
// because in match mode selector is used as sideboard the card goes to deck also for shift click
@ -233,7 +237,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
new Listener<Event>() {
@Override
public void event(Event event) {
if (mode.equals(DeckEditorMode.Constructed)) {
if (mode.equals(DeckEditorMode.FREE_BUILDING)) {
switch (event.getEventName()) {
case "double-click":
{
@ -262,6 +266,10 @@ public class DeckEditorPanel extends javax.swing.JPanel {
refreshDeck();
break;
}
case "set-number":
{
setCardNumberToCardsList(event, deck.getCards());
}
}
} else {
// constructing phase or sideboarding during match -> card goes always to sideboard
@ -290,7 +298,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
new Listener<Event>() {
@Override
public void event(Event event) {
if (mode.equals(DeckEditorMode.Constructed)) {
if (mode.equals(DeckEditorMode.FREE_BUILDING)) {
// normal edit mode
switch (event.getEventName()) {
case "double-click":
@ -318,6 +326,10 @@ public class DeckEditorPanel extends javax.swing.JPanel {
hidePopup();
refreshDeck();
break;
case "set-number":
{
setCardNumberToCardsList(event, deck.getSideboard());
}
}
} else {
// construct phase or sideboarding during match
@ -344,12 +356,43 @@ public class DeckEditorPanel extends javax.swing.JPanel {
this.repaint();
}
private void setCardNumberToCardsList(Event event, Set<Card> cards) {
CardView cardView = (CardView) event.getSource();
int numberToSet = event.getNumber();
int cardsFound = 0;
List<Card> toDelete = new ArrayList<>();
for (Card card : cards) {
if (card.getName().equals(cardView.getName())
&& card.getCardNumber() == cardView.getCardNumber()
&& card.getExpansionSetCode().equals(cardView.getExpansionSetCode())) {
cardsFound++;
if (cardsFound > numberToSet) {
toDelete.add(card);
}
}
}
if (toDelete.isEmpty()) {
// add cards
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
for (int i = cardsFound; i < numberToSet; i++) {
cards.add(cardInfo.getMockCard());
}
} else {
// remove cards
for (Card card: toDelete) {
cards.remove(card);
}
}
hidePopup();
refreshDeck();
}
private void moveSelectorCardToDeck(Event event) {
SimpleCardView cardView = (SimpleCardView) event.getSource();
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
Card card = null;
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
if (mode == DeckEditorMode.SIDEBOARDING || mode == DeckEditorMode.LIMITED_BUILDING) {
Iterator sideboard = deck.getSideboard().iterator();
while (sideboard.hasNext()) {
card = (Card) sideboard.next();
@ -362,7 +405,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
}
if (card != null) {
deck.getCards().add(card);
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
if (mode == DeckEditorMode.SIDEBOARDING || mode == DeckEditorMode.LIMITED_BUILDING) {
deck.getSideboard().remove(card);
cardSelector.removeCard(card.getId());
cardSelector.setCardCount(deck.getSideboard().size());
@ -685,7 +728,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
}//GEN-LAST:event_btnSaveActionPerformed
private void btnNewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNewActionPerformed
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
if (mode == DeckEditorMode.SIDEBOARDING || mode == DeckEditorMode.LIMITED_BUILDING) {
for (Card card : deck.getCards()) {
deck.getSideboard().add(card);
}

View file

@ -87,13 +87,18 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
private boolean displayNoCopies = false;
private UpdateCountsCallback updateCountsCallback;
private final String column[] = { "", "Name", "Cost", "Color", "Type", "Stats", "Rarity", "Set" };
private final String column[] = { "Qty", "Name", "Cost", "Color", "Type", "Stats", "Rarity", "Set" };
private SortSetting sortSetting;
private int recentSortedColumn;
private boolean recentAscending;
private boolean numberEditable;
public TableModel() {
this.numberEditable = false;
}
public void clear() {
this.clearCardEventListeners();
this.clearCards();
@ -303,6 +308,11 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
cardEventSource.clearListeners();
}
public void setNumber(int index, int number) {
CardView card = view.get(index);
cardEventSource.setNumber(card, "set-number", number);
}
public void doubleClick(int index) {
CardView card = view.get(index);
cardEventSource.doubleClick(card, "double-click");
@ -326,9 +336,13 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
table.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent ev) {}
public void keyPressed(KeyEvent ev) {
}
@Override
public void keyTyped(KeyEvent ev) {}
public void keyTyped(KeyEvent ev) {
}
@Override
public void keyReleased(KeyEvent ev) {
int row = table.getSelectedRow();
@ -431,8 +445,22 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
this.updateCountsCallback = callback;
}
public void setNumberEditable(boolean numberEditable) {
this.numberEditable = numberEditable;
}
@Override
public int cardsSize() {
return cards.size();
}
@Override
public boolean isCellEditable(int row, int col) {
if (numberEditable && col == 0) {
return true;
}
return super.isCellEditable(row, col); //To change body of generated methods, choose Tools | Templates.
}
}

View file

@ -8,9 +8,9 @@ import javax.swing.*;
*/
public class UpdateCountsCallback {
private javax.swing.JLabel lblCount;
private javax.swing.JLabel lblCreatureCount;
private javax.swing.JLabel lblLandCount;
private final javax.swing.JLabel lblCount;
private final javax.swing.JLabel lblCreatureCount;
private final javax.swing.JLabel lblLandCount;
public UpdateCountsCallback(JLabel count, JLabel creatures, JLabel lands) {
this.lblCount = count;