forked from External/mage
* 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:
parent
7d714947aa
commit
0561499d5b
13 changed files with 351 additions and 55 deletions
|
|
@ -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()) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue