From 7a8055172d9371a735e85735025dc315f974bab4 Mon Sep 17 00:00:00 2001 From: spjspj Date: Sun, 8 Jan 2017 01:02:01 +1100 Subject: [PATCH] spjspj - Allow appending from the clipboard in deck editor --- .../client/deckeditor/DeckEditorPanel.java | 32 ++++++++++++++++++- Mage/src/main/java/mage/cards/decks/Deck.java | 23 +++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java index a040df0464c..63f4f7c48f6 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java @@ -71,6 +71,7 @@ import mage.remote.Session; import mage.view.CardView; import mage.view.SimpleCardView; import org.apache.log4j.Logger; + /** * * @author BetaSteward_at_googlemail.com @@ -693,7 +694,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { btnImport.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(java.awt.event.ActionEvent evt) { - Object[] options = {"File", "Clipboard"}; + Object[] options = {"File", "Clipboard", "Append from Clipboard"}; int n = JOptionPane.showOptionDialog(MageFrame.getDesktop(), "Where would you like to import from?", @@ -713,6 +714,8 @@ public class DeckEditorPanel extends javax.swing.JPanel { break; case 1: btnImportFromClipboardActionPerformed(evt); + case 2: + btnImportFromClipboardActionWAppendPerformed(evt); } } }); @@ -865,6 +868,33 @@ public class DeckEditorPanel extends javax.swing.JPanel { }); } + /** + * @param evt ActionEvent + */ + private void btnImportFromClipboardActionWAppendPerformed(ActionEvent evt) { + final DeckImportFromClipboardDialog dialog = new DeckImportFromClipboardDialog(); + dialog.pack(); + dialog.setVisible(true); + + dialog.addWindowListener(new WindowAdapter() { + @Override + public void windowClosed(WindowEvent e) { + Deck deckToAppend = null; + try { + deckToAppend = Deck.load(DeckImporterUtil.importDeck(dialog.getTmpPath()), true, true); + if (deckToAppend != null) { + deck = Deck.append(deckToAppend, deck); + refreshDeck(); + } + } catch (GameException e1) { + JOptionPane.showMessageDialog(MageFrame.getDesktop(), e1.getMessage(), "Error loading deck", JOptionPane.ERROR_MESSAGE); + } + + } + }); + } + + private void btnLoadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLoadActionPerformed //fcSelectDeck.setCurrentDirectory(new File()); String lastFolder = MageFrame.getPreferences().get("lastDeckFolder", ""); diff --git a/Mage/src/main/java/mage/cards/decks/Deck.java b/Mage/src/main/java/mage/cards/decks/Deck.java index 87bcb2f1bd1..7af38ed879c 100644 --- a/Mage/src/main/java/mage/cards/decks/Deck.java +++ b/Mage/src/main/java/mage/cards/decks/Deck.java @@ -56,6 +56,29 @@ public class Deck implements Serializable { public static Deck load(DeckCardLists deckCardLists, boolean ignoreErrors) throws GameException { return Deck.load(deckCardLists, ignoreErrors, true); } + + public static Deck append(Deck deckToAppend, Deck currentDeck) throws GameException { + List deckCardNames = new ArrayList<>(); + + for (Card card : deckToAppend.getCards()) { + if (card != null) { + currentDeck.cards.add(card); + deckCardNames.add(card.getName()); + } + } + List sbCardNames = new ArrayList<>(); + for (Card card : deckToAppend.getSideboard()) { + if (card != null) { + currentDeck.sideboard.add(card); + deckCardNames.add(card.getName()); + } + } + Collections.sort(deckCardNames); + Collections.sort(sbCardNames); + String deckString = deckCardNames.toString() + sbCardNames.toString(); + currentDeck.setDeckHashCode(DeckUtil.fixedHash(deckString)); + return currentDeck; + } public static Deck load(DeckCardLists deckCardLists, boolean ignoreErrors, boolean mockCards) throws GameException { Deck deck = new Deck();