mirror of
https://github.com/correl/mage.git
synced 2024-11-16 03:00:12 +00:00
spjspj - Add in a 'Duplicate' (of selection) right click menu option for FREE_BUILDING mode
This commit is contained in:
parent
1114eeb133
commit
56cb226634
3 changed files with 131 additions and 7 deletions
|
@ -53,6 +53,7 @@ import mage.cards.MageCard;
|
|||
import mage.cards.decks.DeckCardInfo;
|
||||
import mage.cards.decks.DeckCardLayout;
|
||||
import mage.client.MageFrame;
|
||||
import mage.client.constants.Constants;
|
||||
import mage.client.dialog.PreferencesDialog;
|
||||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.client.util.CardViewCardTypeComparator;
|
||||
|
@ -76,6 +77,7 @@ import org.mage.card.arcane.CardRenderer;
|
|||
public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarget {
|
||||
|
||||
private final static Logger LOGGER = Logger.getLogger(DragCardGrid.class);
|
||||
private Constants.DeckEditorMode mode;
|
||||
|
||||
@Override
|
||||
public Collection<CardView> dragCardList() {
|
||||
|
@ -363,7 +365,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
|||
// Add new cards to grid
|
||||
for (CardView card : cards) {
|
||||
card.setSelected(true);
|
||||
addCardView(card);
|
||||
addCardView(card, false);
|
||||
eventSource.addSpecificCard(card, "add-specific-card");
|
||||
}
|
||||
layoutGrid();
|
||||
|
@ -448,6 +450,10 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
|||
return new DeckCardLayout(info, saveSettings().toString());
|
||||
}
|
||||
|
||||
public void setDeckEditorMode(Constants.DeckEditorMode mode) {
|
||||
this.mode = mode;
|
||||
}
|
||||
|
||||
public enum Sort {
|
||||
NONE("No Sort", new Comparator<CardView>() {
|
||||
@Override
|
||||
|
@ -571,6 +577,8 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
|||
|
||||
void hideCards(Collection<CardView> card);
|
||||
|
||||
void duplicateCards(Collection<CardView> cards);
|
||||
|
||||
void showAll();
|
||||
};
|
||||
|
||||
|
@ -740,6 +748,9 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
|||
setLayout(new BorderLayout());
|
||||
setOpaque(false);
|
||||
|
||||
// Editting mode
|
||||
this.mode = Constants.DeckEditorMode.LIMITED_BUILDING;
|
||||
|
||||
// Toolbar
|
||||
sortButton = new JButton("Sort");
|
||||
filterButton = new JButton("Filter");
|
||||
|
@ -1077,6 +1088,12 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
|||
}
|
||||
}
|
||||
|
||||
private void duplicateSelection() {
|
||||
Collection<CardView> toDuplicate = dragCardList();
|
||||
for (DragCardGridListener l : listeners) {
|
||||
l.duplicateCards(toDuplicate);
|
||||
}
|
||||
}
|
||||
private void showAll() {
|
||||
for (DragCardGridListener l : listeners) {
|
||||
l.showAll();
|
||||
|
@ -1448,7 +1465,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
|||
for (CardView newCard : cardsView.values()) {
|
||||
if (!cardViews.containsKey(newCard.getId())) {
|
||||
// Is a new card
|
||||
addCardView(newCard);
|
||||
addCardView(newCard, false);
|
||||
|
||||
// Put it into the appropirate place in the grid given the current sort
|
||||
sortIntoGrid(newCard);
|
||||
|
@ -1471,7 +1488,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
|||
for (CardView newCard : cardsView.values()) {
|
||||
if (!cardViews.containsKey(newCard.getId())) {
|
||||
// Add the new card
|
||||
addCardView(newCard);
|
||||
addCardView(newCard, false);
|
||||
|
||||
// Add the new card to tracking
|
||||
Map<String, ArrayList<CardView>> forSetCode;
|
||||
|
@ -1589,10 +1606,17 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
|||
JMenuItem hide = new JMenuItem("Hide");
|
||||
hide.addActionListener(e2 -> hideSelection());
|
||||
menu.add(hide);
|
||||
|
||||
// Show 'Duplicate Selection' for FREE_BUILDING
|
||||
if (this.mode == Constants.DeckEditorMode.FREE_BUILDING) {
|
||||
JMenuItem duplicateSelection = new JMenuItem("Duplicate Selection");
|
||||
duplicateSelection.addActionListener(e2 -> duplicateSelection());
|
||||
menu.add(duplicateSelection);
|
||||
}
|
||||
menu.show(e.getComponent(), e.getX(), e.getY());
|
||||
}
|
||||
|
||||
private void addCardView(final CardView card) {
|
||||
public void addCardView(final CardView card, boolean duplicated) {
|
||||
allCards.add(card);
|
||||
|
||||
// Update counts
|
||||
|
@ -1651,6 +1675,16 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
|||
// And add it
|
||||
cardContent.add(cardPanel);
|
||||
cardViews.put(card.getId(), cardPanel);
|
||||
|
||||
if (duplicated) {
|
||||
sortIntoGrid(card);
|
||||
eventSource.addSpecificCard(card, "add-specific-card");
|
||||
// Update layout
|
||||
layoutGrid();
|
||||
// Update draw
|
||||
cardScroll.revalidate();
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
|
||||
private final ArrayList<DragCardGridListener> listeners = new ArrayList<>();
|
||||
|
|
|
@ -135,6 +135,15 @@ public class DeckArea extends javax.swing.JPanel {
|
|||
hiddenCards.clear();
|
||||
loadDeck(lastDeck, lastBigCard);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void duplicateCards(Collection<CardView> cards) {
|
||||
sideboardList.deselectAll();
|
||||
for (CardView card : cards) {
|
||||
CardView newCard = new CardView(card);
|
||||
deckList.addCardView(newCard, true);
|
||||
}
|
||||
}
|
||||
});
|
||||
sideboardList.addDragCardGridListener(new DragCardGrid.DragCardGridListener() {
|
||||
@Override
|
||||
|
@ -156,6 +165,15 @@ public class DeckArea extends javax.swing.JPanel {
|
|||
hiddenCards.clear();
|
||||
loadDeck(lastDeck, lastBigCard);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void duplicateCards(Collection<CardView> cards) {
|
||||
deckList.deselectAll();
|
||||
for (CardView card : cards) {
|
||||
CardView newCard = new CardView(card);
|
||||
sideboardList.addCardView(newCard, true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -223,9 +241,8 @@ public class DeckArea extends javax.swing.JPanel {
|
|||
}
|
||||
|
||||
public void setDeckEditorMode(DeckEditorMode mode) {
|
||||
// Maybe we need this? Right now it isn't needed. Will add if it is.
|
||||
//this.deckList.setDeckEditorMode(mode);
|
||||
//this.sideboardList.setDeckEditorMode(mode);
|
||||
this.deckList.setDeckEditorMode(mode);
|
||||
this.sideboardList.setDeckEditorMode(mode);
|
||||
}
|
||||
|
||||
private Set<Card> filterHidden(Set<Card> cards) {
|
||||
|
|
|
@ -139,6 +139,79 @@ public class CardView extends SimpleCardView {
|
|||
this.id = cardId;
|
||||
}
|
||||
|
||||
|
||||
public CardView(CardView cardView) {
|
||||
super(cardView.id, cardView.expansionSetCode, cardView.cardNumber, cardView.usesVariousArt, cardView.tokenSetCode, cardView.gameObject, cardView.tokenDescriptor);
|
||||
|
||||
this.id = UUID.randomUUID();
|
||||
this.parentId = cardView.parentId;
|
||||
this.name = cardView.name;
|
||||
this.displayName = cardView.displayName;
|
||||
this.rules = cardView.rules;
|
||||
this.power = cardView.power;
|
||||
this.toughness = cardView.toughness;
|
||||
this.loyalty = cardView.loyalty;
|
||||
this.startingLoyalty = cardView.startingLoyalty;
|
||||
this.cardTypes = cardView.cardTypes;
|
||||
this.subTypes = cardView.subTypes;
|
||||
this.superTypes = cardView.superTypes;
|
||||
this.color = cardView.color;
|
||||
this.frameColor = cardView.frameColor;
|
||||
this.frameStyle = cardView.frameStyle;
|
||||
this.manaCost = cardView.manaCost;
|
||||
this.convertedManaCost = cardView.convertedManaCost;
|
||||
this.rarity = cardView.rarity;
|
||||
|
||||
this.mageObjectType = cardView.mageObjectType;
|
||||
|
||||
this.isAbility = cardView.isAbility;
|
||||
this.abilityType = cardView.abilityType;
|
||||
this.isToken = cardView.isToken;
|
||||
|
||||
this.ability = null;
|
||||
this.type = cardView.type;
|
||||
|
||||
this.transformable = cardView.transformable;
|
||||
if (cardView.secondCardFace != null) {
|
||||
this.secondCardFace = new CardView(cardView.secondCardFace);
|
||||
} else {
|
||||
this.secondCardFace = null;
|
||||
}
|
||||
this.transformed = cardView.transformed;
|
||||
|
||||
this.flipCard = cardView.flipCard;
|
||||
this.faceDown = cardView.faceDown;
|
||||
|
||||
this.alternateName = cardView.alternateName;
|
||||
this.originalName = cardView.originalName;
|
||||
|
||||
this.isSplitCard = cardView.isSplitCard;
|
||||
this.leftSplitName = cardView.leftSplitName;
|
||||
this.leftSplitCosts = cardView.leftSplitCosts;
|
||||
this.leftSplitRules = null;
|
||||
this.rightSplitName = cardView.rightSplitName;
|
||||
this.rightSplitCosts = cardView.rightSplitCosts;
|
||||
this.rightSplitRules = null;
|
||||
|
||||
this.targets = null;
|
||||
|
||||
this.pairedCard = cardView.pairedCard;
|
||||
this.paid = cardView.paid;
|
||||
this.counters = null;
|
||||
|
||||
this.controlledByOwner = cardView.controlledByOwner;
|
||||
|
||||
this.zone = cardView.zone;
|
||||
|
||||
this.rotate = cardView.rotate;
|
||||
this.hideInfo = cardView.hideInfo;
|
||||
|
||||
this.isPlayable = cardView.isPlayable;
|
||||
this.isChoosable = cardView.isChoosable;
|
||||
this.selected = cardView.selected;
|
||||
this.canAttack = cardView.canAttack;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param card
|
||||
|
|
Loading…
Reference in a new issue