From 2ecc716b832d71471589fc61aa36f23c5b25ed3c Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Fri, 9 Sep 2011 11:08:29 +0000 Subject: [PATCH] gameType is now a Enum, Deckeditors no longer save all decks on close (there may remain minor bugs) Deckeditors have mostly been cleaned of usage of global variables OldGuiNewGame updates deck comboboxes properly Download deck from tcgplayer feature temporary removed cleaned up some warnings --- src/main/java/forge/Constant.java | 19 +- src/main/java/forge/FileUtil.java | 34 + src/main/java/forge/GameAction.java | 3 +- src/main/java/forge/Gui_WinLose.java | 2 - src/main/java/forge/SetUtils.java | 2 - src/main/java/forge/card/CardBlock.java | 1 - src/main/java/forge/card/CardPrinted.java | 1 - src/main/java/forge/deck/Deck.java | 27 +- src/main/java/forge/deck/DeckManager.java | 167 ++- .../forge/game/limited/BoosterDraftAI.java | 5 +- .../java/forge/game/limited/SealedDeck.java | 3 +- .../forge/gui/deckeditor/DeckDisplay.java | 28 +- .../java/forge/gui/deckeditor/DeckEditor.java | 151 +-- .../forge/gui/deckeditor/DeckEditorBase.java | 26 +- .../forge/gui/deckeditor/DeckEditorDraft.java | 9 +- .../forge/gui/deckeditor/DeckEditorMenu.java | 974 +++--------------- .../forge/gui/deckeditor/DeckEditorQuest.java | 8 +- .../gui/deckeditor/DeckEditorQuestMenu.java | 13 +- .../forge/gui/deckeditor/DeckEditorShop.java | 4 +- .../forge/gui/deckeditor/TableWithCards.java | 4 +- .../forge/view/swing/ApplicationView.java | 3 +- .../java/forge/view/swing/OldGuiNewGame.java | 175 ++-- src/test/java/forge/GuiBoosterDraftTest.java | 5 +- 23 files changed, 474 insertions(+), 1190 deletions(-) diff --git a/src/main/java/forge/Constant.java b/src/main/java/forge/Constant.java index 44282a7c214..050441d36a2 100644 --- a/src/main/java/forge/Constant.java +++ b/src/main/java/forge/Constant.java @@ -2,10 +2,7 @@ package forge; import forge.deck.Deck; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; +import forge.game.GameType; /** @@ -19,11 +16,11 @@ public interface Constant { public static final String ProgramName = "Forge - http://cardforge.org"; //used to pass information between the GUI screens - public interface Runtime { + public abstract class Runtime { public static final Deck[] HumanDeck = new Deck[1]; public static final Deck[] ComputerDeck = new Deck[1]; - public static final String[] GameType = new String[1]; - + public static GameType gameType = GameType.Constructed; + public static final boolean[] Smooth = new boolean[1]; public static final boolean[] Mill = new boolean[1]; public static final boolean[] DevMode = new boolean[1]; // one for normal mode one for quest mode @@ -40,14 +37,6 @@ public interface Constant { public static final int[] stackOffset = new int[1]; } - public interface GameType { - public static final String Constructed = "constructed"; - public static final String Sealed = "sealed"; - public static final String Draft = "draft"; - public static final List GameTypes = Collections.unmodifiableList(Arrays.asList(Constructed, - Sealed, Draft)); - } - //public interface IO { // probably should read this from a file, or set from GUI diff --git a/src/main/java/forge/FileUtil.java b/src/main/java/forge/FileUtil.java index e135c6366ae..9e701923f74 100644 --- a/src/main/java/forge/FileUtil.java +++ b/src/main/java/forge/FileUtil.java @@ -1,12 +1,20 @@ package forge; import forge.error.ErrorViewer; +import forge.properties.ForgeProps; +import forge.properties.NewConstants.LANG.Gui_DownloadPictures.ERRORS; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; +import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; +import java.io.IOException; +import java.net.Proxy; +import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -114,4 +122,30 @@ public final class FileUtil { return list; } //readFile() + + public static void downloadUrlIntoFile(final String url, final File target) + { + try{ + byte[] buf = new byte[1024]; + int len; + + Proxy p = Proxy.NO_PROXY; + BufferedInputStream in = new BufferedInputStream(new URL(url).openConnection(p).getInputStream()); + BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(target)); + + //while - read and write file + while ((len = in.read(buf)) != -1) { + out.write(buf, 0, len); + + }//while - read and write file + in.close(); + out.flush(); + out.close(); + } + catch (IOException ioex) + { + ErrorViewer.showError(ioex, ForgeProps.getLocalized(ERRORS.OTHER), "deck_temp.html", url); + } + + } } diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java index 6ba5530eb5d..6aac8091705 100644 --- a/src/main/java/forge/GameAction.java +++ b/src/main/java/forge/GameAction.java @@ -21,6 +21,7 @@ import forge.card.trigger.Trigger; import forge.deck.Deck; import forge.game.GameEndReason; import forge.game.GameSummary; +import forge.game.GameType; import forge.game.PlayerIndex; import forge.gui.GuiUtils; import forge.gui.input.Input_Mulligan; @@ -1120,7 +1121,7 @@ public class GameAction { Card.resetUniqueNumber(); - boolean canRandomFoil = Constant.Runtime.RndCFoil[0] && Constant.Runtime.GameType[0].equals(Constant.GameType.Constructed); + boolean canRandomFoil = Constant.Runtime.RndCFoil[0] && Constant.Runtime.gameType.equals(GameType.Constructed); Random generator = MyRandom.random; for (Entry stackOfCards : humanDeck.getMain()) { diff --git a/src/main/java/forge/Gui_WinLose.java b/src/main/java/forge/Gui_WinLose.java index 85e9c1e4298..dbe1397b0a4 100644 --- a/src/main/java/forge/Gui_WinLose.java +++ b/src/main/java/forge/Gui_WinLose.java @@ -9,7 +9,6 @@ import forge.game.GamePlayerRating; import forge.game.GameSummary; import forge.game.PlayerIndex; import forge.gui.CardListViewer; -import forge.gui.GuiUtils; import forge.gui.ListChooser; import forge.properties.ForgeProps; import forge.properties.NewConstants; @@ -38,7 +37,6 @@ import java.awt.event.ActionEvent; import java.awt.event.WindowEvent; import java.io.File; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** diff --git a/src/main/java/forge/SetUtils.java b/src/main/java/forge/SetUtils.java index 4607c4e0578..f2bf99d5ba2 100644 --- a/src/main/java/forge/SetUtils.java +++ b/src/main/java/forge/SetUtils.java @@ -9,8 +9,6 @@ import java.util.Map; import org.apache.commons.lang3.StringUtils; -import net.slightlymagic.maxmtg.Predicate; - import forge.card.CardBlock; import forge.card.CardSet; import forge.game.GameFormat; diff --git a/src/main/java/forge/card/CardBlock.java b/src/main/java/forge/card/CardBlock.java index de2d49a3411..5a93f12df10 100644 --- a/src/main/java/forge/card/CardBlock.java +++ b/src/main/java/forge/card/CardBlock.java @@ -1,7 +1,6 @@ package forge.card; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import net.slightlymagic.maxmtg.Predicate; diff --git a/src/main/java/forge/card/CardPrinted.java b/src/main/java/forge/card/CardPrinted.java index 2740ea279ab..5d729ef2780 100644 --- a/src/main/java/forge/card/CardPrinted.java +++ b/src/main/java/forge/card/CardPrinted.java @@ -3,7 +3,6 @@ package forge.card; import java.util.Arrays; import java.util.List; -import org.apache.axis.utils.ArrayUtil; import org.apache.commons.lang3.ArrayUtils; import net.slightlymagic.braids.util.lambda.Lambda1; diff --git a/src/main/java/forge/deck/Deck.java b/src/main/java/forge/deck/Deck.java index c8d8ad0489a..72203155b16 100644 --- a/src/main/java/forge/deck/Deck.java +++ b/src/main/java/forge/deck/Deck.java @@ -1,11 +1,11 @@ package forge.deck; -import forge.Constant; import forge.PlayerType; import forge.card.CardDb; import forge.card.CardPool; import forge.card.CardPoolView; import forge.card.CardPrinted; +import forge.game.GameType; import java.io.Serializable; import java.util.*; @@ -22,10 +22,10 @@ public final class Deck implements Comparable, Serializable { */ private static final long serialVersionUID = -7478025567887481994L; - //gameType is from Constant.GameType, like Constant.GameType.Regular + //gameType is from Constant.GameType, like GameType.Regular private String name; - private String deckType; + private GameType deckType; private String comment = null; private PlayerType playerType = null; @@ -37,7 +37,7 @@ public final class Deck implements Comparable, Serializable { - //gameType is from Constant.GameType, like Constant.GameType.Regular + //gameType is from Constant.GameType, like GameType.Regular /** *

Constructor for Deck.

*/ @@ -54,7 +54,7 @@ public final class Deck implements Comparable, Serializable { * @param sideboard a {@link java.util.List} object. * @param name a {@link java.lang.String} object. */ - public Deck(String deckType, List main, List sideboard, String name) { + public Deck(GameType deckType, List main, List sideboard, String name) { setDeckType(deckType); setName(name); @@ -67,7 +67,7 @@ public final class Deck implements Comparable, Serializable { * * @param type a {@link java.lang.String} object. */ - public Deck(final String type) { + public Deck(final GameType type) { this(); setDeckType(type); } @@ -95,7 +95,7 @@ public final class Deck implements Comparable, Serializable { * * @return a {@link java.lang.String} object. */ - public String getDeckType() { + public GameType getDeckType() { return deckType; } @@ -105,17 +105,12 @@ public final class Deck implements Comparable, Serializable { * * @param deckType a {@link java.lang.String} object. */ - void setDeckType(String deckType) { + void setDeckType(GameType deckType) { if (this.getDeckType() != null) { throw new IllegalStateException( "Deck : setDeckType() error, deck type has already been set"); } - if (!Constant.GameType.GameTypes.contains(deckType)) { - throw new RuntimeException( - "Deck : setDeckType() error, invalid deck type - " + deckType); - } - this.deckType = deckType; } @@ -202,7 +197,7 @@ public final class Deck implements Comparable, Serializable { * @return a boolean. */ public boolean isDraft() { - return getDeckType().equals(Constant.GameType.Draft); + return getDeckType().equals(GameType.Draft); } /** @@ -211,7 +206,7 @@ public final class Deck implements Comparable, Serializable { * @return a boolean. */ public boolean isSealed() { - return getDeckType().equals(Constant.GameType.Sealed); + return getDeckType().equals(GameType.Sealed); } /** @@ -220,7 +215,7 @@ public final class Deck implements Comparable, Serializable { * @return a boolean. */ public boolean isRegular() { - return getDeckType().equals(Constant.GameType.Constructed); + return getDeckType().equals(GameType.Constructed); } /** diff --git a/src/main/java/forge/deck/DeckManager.java b/src/main/java/forge/deck/DeckManager.java index f6b413a92bc..e92335f73ac 100644 --- a/src/main/java/forge/deck/DeckManager.java +++ b/src/main/java/forge/deck/DeckManager.java @@ -1,10 +1,12 @@ package forge.deck; -import forge.Constant; import forge.PlayerType; import forge.card.CardPrinted; import forge.error.ErrorViewer; +import forge.game.GameType; +import forge.properties.ForgeProps; +import forge.properties.NewConstants; import java.io.*; import java.util.*; @@ -13,12 +15,12 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JOptionPane; +import javax.swing.filechooser.FileFilter; import org.apache.commons.lang3.StringUtils; import static java.lang.Integer.parseInt; import static java.lang.String.format; -import static java.util.Arrays.asList; //reads and writeDeck Deck objects @@ -42,6 +44,18 @@ public class DeckManager { return name.endsWith(".dck"); } }; + + public static final FileFilter dckFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return f.getName().endsWith(".dck") || f.isDirectory(); + } + + @Override + public String getDescription() { + return "Simple Deck File .dck"; + } + }; private static final String NAME = "Name"; private static final String DECK_TYPE = "Deck Type"; @@ -119,7 +133,7 @@ public class DeckManager { * @param deck a {@link forge.deck.Deck} object. */ public void addDeck(Deck deck) { - if (deck.getDeckType().equals(Constant.GameType.Draft)) { + if (deck.getDeckType().equals(GameType.Draft)) { throw new RuntimeException( "DeckManager : addDeck() error, deck type is Draft"); } @@ -174,6 +188,9 @@ public class DeckManager { } draftMap.remove(deckName); + // delete from disk as well + File f = makeFileName(deckName, GameType.Draft); + f.delete(); } /** @@ -183,37 +200,41 @@ public class DeckManager { */ private void checkDraftDeck(Deck[] deck) { if (deck == null || deck.length != 8 || deck[0].getName().equals("") - || (!deck[0].getDeckType().equals(Constant.GameType.Draft))) { + || (!deck[0].getDeckType().equals(GameType.Draft))) { throw new RuntimeException("DeckManager : checkDraftDeck() error, invalid deck"); } } - /** - *

getDecks.

- * - * @return a {@link java.util.Collection} object. - */ public Collection getDecks() { return deckMap.values(); } - /** - *

getDraftDecks.

- * - * @return a {@link java.util.Map} object. - */ + public Map getDraftDecks() { return new HashMap(draftMap); } + - /** - *

close.

- */ - public void close() { - writeAllDecks(); - } + public ArrayList getDeckNames(final GameType deckType) { + ArrayList list = new ArrayList(); + //only get decks according to the OldGuiNewGame screen option + if (deckType.equals(GameType.Draft)) { + for (String s : getDraftDecks().keySet()) { + list.add(s); + } + } else { + for (Deck deck : getDecks()) { + if (deckType.equals(deck.getDeckType())) { + list.add(deck.toString()); + } + } + } + + Collections.sort(list); + return list; + } /** *

readAllDecks.

@@ -305,7 +326,7 @@ public class DeckManager { } else if (COMMENT.equalsIgnoreCase(field)) { d.setComment(linedata[1]); } else if (DECK_TYPE.equalsIgnoreCase(field)) { - d.setDeckType(linedata[1]); + d.setDeckType(GameType.smartValueOf(linedata[1])); } else if (PLAYER.equalsIgnoreCase(field)) { if ("human".equalsIgnoreCase(linedata[1])) { d.setPlayerType(PlayerType.HUMAN); @@ -344,7 +365,7 @@ public class DeckManager { } //readDeck deck type - String deckType = iterator.next(); + GameType deckType = GameType.smartValueOf(iterator.next()); Deck d = new Deck(); d.setName(name); @@ -404,61 +425,52 @@ public class DeckManager { return result; } - /** - *

deriveFileName.

- * - * @param deckName a {@link java.lang.String} object. - * @return a {@link java.lang.String} object. - */ - private String deriveFileName(String deckName) { + private static String deriveFileName(String deckName) { //skips all but the listed characters return deckName.replaceAll("[^-_$#@.{[()]} a-zA-Z0-9]", ""); } + //only accepts numbers, letters or dashes up to 20 characters in length + public static String cleanDeckName(String in) + { + char[] c = in.toCharArray(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < c.length && i < 20; i++) { + if (Character.isLetterOrDigit(c[i]) || c[i] == '-') { + sb.append(c[i]); + } + } + return sb.toString(); + } + + public static File makeFileName(String deckName, GameType deckType) + { + File path = ForgeProps.getFile(NewConstants.NEW_DECKS); + if (deckType == GameType.Draft) + return new File(path, deriveFileName(deckName) + ".bdk"); + else + return new File(path, deriveFileName(deckName) + ".dck"); + } + + public static File makeFileName(Deck deck) + { + return makeFileName(deck.getName(), deck.getDeckType()); + } + /** *

writeAllDecks.

*/ - public void writeAllDecks() { + public static void writeDraftDecks(Deck[] drafts) { try { - //store the files that do exist - List files = new ArrayList(); - files.addAll(asList(deckDir.listFiles(DCKFileFilter))); - - //save the files and remove them from the list - for (Deck deck : deckMap.values()) { - File f = new File(deckDir, deriveFileName(deck.getName()) + ".dck"); - files.remove(f); - BufferedWriter out = new BufferedWriter(new FileWriter(f)); - writeDeck(deck, out); + File f = makeFileName(drafts[0]); + f.mkdir(); + for (int i = 0; i < drafts.length; i++) { + BufferedWriter out = new BufferedWriter(new FileWriter(new File(f, i + ".dck"))); + writeDeck(drafts[i], out); out.close(); } - //delete the files that were not written out: the decks that were deleted - for (File file : files) { - file.delete(); - } - //store the files that do exist - files.clear(); - files.addAll(asList(deckDir.listFiles(BDKFileFilter))); - //save the files and remove them from the list - for (Entry e : draftMap.entrySet()) { - File f = new File(deckDir, deriveFileName(e.getValue()[0].getName()) + ".bdk"); - f.mkdir(); - for (int i = 0; i < e.getValue().length; i++) { - BufferedWriter out = new BufferedWriter(new FileWriter(new File(f, i + ".dck"))); - writeDeck(e.getValue()[i], out); - out.close(); - } - } - /* - //delete the files that were not written out: the decks that were deleted - for(File file:files) { - for(int i = 0; i < 8; i++) - new File(file, i + ".dck").delete(); - file.delete(); - } - */ } catch (IOException ex) { ErrorViewer.showError(ex); throw new RuntimeException("DeckManager : writeDeck() error, " + ex.getMessage()); @@ -473,10 +485,10 @@ public class DeckManager { * @throws java.io.IOException if any. */ private static void writeDeck(final Deck d, final BufferedWriter out) throws IOException { - out.write("[metadata]\n"); + out.write(format("[metadata]%n")); out.write(format("%s=%s%n", NAME, d.getName().replaceAll("\n", ""))); - out.write(format("%s=%s%n", DECK_TYPE, d.getDeckType().replaceAll("\n", ""))); + out.write(format("%s=%s%n", DECK_TYPE, d.getDeckType())); // these are optional if (d.getComment() != null) { out.write(format("%s=%s%n", COMMENT, d.getComment().replaceAll("\n", ""))); } if (d.getPlayerType() != null) { out.write(format("%s=%s%n", PLAYER, d.getPlayerType())); } @@ -491,26 +503,6 @@ public class DeckManager { } } - /** - *

count.

- * - * @param src a {@link java.util.List} object. - * @return a {@link java.util.Map} object. - */ - /* - private static Map count(List src) { - Map result = new HashMap(); - for (String s : src) { - Integer dstValue = result.get(s); - if (dstValue == null) { - result.put(s, 1); - } else { - result.put(s, dstValue + 1); - } - } - return result; - } - */ /** *

writeDeck.

@@ -522,7 +514,6 @@ public class DeckManager { try { BufferedWriter writer = new BufferedWriter(new FileWriter(f)); writeDeck(d, writer); - writer.close(); } catch (IOException e) { throw new RuntimeException(e); diff --git a/src/main/java/forge/game/limited/BoosterDraftAI.java b/src/main/java/forge/game/limited/BoosterDraftAI.java index a5784471840..b7fabd2fd42 100644 --- a/src/main/java/forge/game/limited/BoosterDraftAI.java +++ b/src/main/java/forge/game/limited/BoosterDraftAI.java @@ -9,6 +9,7 @@ import forge.Constant; import forge.MyRandom; import forge.card.spellability.Ability_Mana; import forge.deck.Deck; +import forge.game.GameType; import java.util.*; @@ -295,7 +296,7 @@ public class BoosterDraftAI { * @return a {@link forge.deck.Deck} object. */ private Deck buildDeck(CardList dList, DeckColors pClrs) { - Deck out = new Deck(Constant.GameType.Draft); + Deck out = new Deck(GameType.Draft); CardList outList = new CardList(); int cardsNeeded = 22; int landsNeeded = 18; @@ -496,7 +497,7 @@ public class BoosterDraftAI { /* private Deck getDeck(CardList list) { - Deck out = new Deck(Constant.GameType.Draft); + Deck out = new Deck(GameType.Draft); for(int i = 0; i < list.size(); i++) out.addMain(list.get(i).getName()); diff --git a/src/main/java/forge/game/limited/SealedDeck.java b/src/main/java/forge/game/limited/SealedDeck.java index 94b4666a80c..704c410e59d 100644 --- a/src/main/java/forge/game/limited/SealedDeck.java +++ b/src/main/java/forge/game/limited/SealedDeck.java @@ -16,6 +16,7 @@ import forge.card.CardPool; import forge.card.CardSet; import forge.card.spellability.Ability_Mana; import forge.deck.Deck; +import forge.game.GameType; import forge.gui.GuiUtils; import javax.swing.*; @@ -397,7 +398,7 @@ public class SealedDeck { } } - Deck aiDeck = new Deck(Constant.GameType.Sealed); + Deck aiDeck = new Deck(GameType.Sealed); for (i = 0; i < deck.size(); i++) aiDeck.addMain(deck.get(i).getName() + "|" + deck.get(i).getCurSetCode()); diff --git a/src/main/java/forge/gui/deckeditor/DeckDisplay.java b/src/main/java/forge/gui/deckeditor/DeckDisplay.java index 2525b4bc234..5d1c3ae11a6 100644 --- a/src/main/java/forge/gui/deckeditor/DeckDisplay.java +++ b/src/main/java/forge/gui/deckeditor/DeckDisplay.java @@ -1,6 +1,8 @@ package forge.gui.deckeditor; import forge.card.CardPoolView; +import forge.deck.Deck; +import forge.game.GameType; /** * Created by IntelliJ IDEA. @@ -11,37 +13,19 @@ import forge.card.CardPoolView; * @version $Id$ */ public interface DeckDisplay { - /** - *

updateDisplay.

- * - * @param top a {@link forge.CardList} object. - * @param bottom a {@link forge.CardList} object. - */ - void setDecks(CardPoolView top, CardPoolView bottom); + void setDeck(CardPoolView top, CardPoolView bottom, GameType gameType); //top shows available card pool //if constructed, top shows all cards //if sealed, top shows 5 booster packs //if draft, top shows cards that were chosen - /** - *

getTop.

- * - * @return a {@link forge.CardList} object. - */ CardPoolView getTop(); //bottom shows cards that the user has chosen for his library - /** - *

getBottom.

- * - * @return a {@link forge.CardList} object. - */ CardPoolView getBottom(); - /** - *

setTitle.

- * - * @param message a {@link java.lang.String} object. - */ void setTitle(String message); + + Deck getDeck(); + GameType getGameType(); } diff --git a/src/main/java/forge/gui/deckeditor/DeckEditor.java b/src/main/java/forge/gui/deckeditor/DeckEditor.java index 83f4b15aa17..0c794d5ede7 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditor.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditor.java @@ -4,6 +4,8 @@ import java.awt.Container; import java.awt.Font; import java.awt.Frame; import java.awt.event.ActionEvent; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; @@ -16,13 +18,14 @@ import javax.swing.JCheckBox; import javax.swing.JLabel; import net.miginfocom.swing.MigLayout; import net.slightlymagic.maxmtg.Predicate; +import forge.AllZone; import forge.Command; -import forge.Constant; import forge.card.CardDb; +import forge.card.CardPool; +import forge.card.CardPoolView; import forge.card.CardPrinted; -import forge.deck.Deck; import forge.error.ErrorViewer; -import forge.properties.NewConstants; +import forge.game.GameType; import forge.view.swing.OldGuiNewGame; /** @@ -33,7 +36,7 @@ import forge.view.swing.OldGuiNewGame; * @author Forge * @version $Id$ */ -public final class DeckEditor extends DeckEditorBase implements NewConstants { +public final class DeckEditor extends DeckEditorBase { /** Constant serialVersionUID=130339644136746796L */ private static final long serialVersionUID = 130339644136746796L; @@ -44,17 +47,9 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants { private JButton analysisButton = new JButton(); private JButton clearFilterButton = new JButton(); - private JLabel jLabelAnalysisGap = new JLabel(); + private JLabel jLabelAnalysisGap = new JLabel(""); private FilterNameTypeSetPanel filterNameTypeSet; - private boolean isConstructed = false; - - /** {@inheritDoc} */ - @Override - public void setTitle(final String message) { - super.setTitle(message); - } - public void show(final Command exitCommand) { final Command exit = new Command() { private static final long serialVersionUID = 5210924838133689758L; @@ -65,7 +60,7 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants { } }; - customMenu = new DeckEditorMenu(this, exit); + customMenu = new DeckEditorMenu(this, AllZone.getDeckManager(), exit); this.setJMenuBar(customMenu); // do not change this!!!! @@ -78,11 +73,11 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants { setup(); - isConstructed = Constant.Runtime.GameType[0].equals(Constant.GameType.Constructed); + // show cards, makes this user friendly - if (isConstructed) { - customMenu.newConstructed(); + if (!getGameType().isLimited()) { + customMenu.newConstructed(false); } top.sort(1, true); @@ -115,12 +110,8 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants { } - /** - *

- * Constructor for Gui_DeckEditor. - *

- */ - public DeckEditor() { + public DeckEditor(GameType gameType) { + super(gameType); try { filterBoxes = new FilterCheckBoxes(true); top = new TableWithCards("Avaliable Cards", true, true); @@ -136,44 +127,28 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants { private void jbInit() { - // removeButton.setIcon(upIcon); + if (!OldGuiNewGame.useLAFFonts.isSelected()) { - removeButton.setFont(new java.awt.Font("Dialog", 0, 13)); + Font fButtons = new java.awt.Font("Dialog", 0, 13); + removeButton.setFont(fButtons); + addButton.setFont(fButtons); + clearFilterButton.setFont(fButtons); + analysisButton.setFont(fButtons); } + + addButton.setText("Add to Deck"); removeButton.setText("Remove from Deck"); - removeButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(final ActionEvent e) { - removeButtonClicked(e); - } - }); - addButton.setText("Add to Deck"); - addButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(final ActionEvent e) { - addButton_actionPerformed(e); - } - }); - // addButton.setIcon(downIcon); - if (!OldGuiNewGame.useLAFFonts.isSelected()) { - addButton.setFont(new java.awt.Font("Dialog", 0, 13)); - } clearFilterButton.setText("Clear Filter"); - clearFilterButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(final ActionEvent e) { - clearFilterButton_actionPerformed(e); - } - }); - if (!OldGuiNewGame.useLAFFonts.isSelected()) { - clearFilterButton.setFont(new java.awt.Font("Dialog", 0, 13)); - } analysisButton.setText("Deck Analysis"); + + removeButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(final ActionEvent e) { removeButtonClicked(e); } }); + addButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(final ActionEvent e) { addButton_actionPerformed(e); } }); + clearFilterButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(final ActionEvent e) { clearFilterButton_actionPerformed(e); } }); analysisButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(final ActionEvent e) { - analysisButton_actionPerformed(e); - } - }); - if (!OldGuiNewGame.useLAFFonts.isSelected()) { - analysisButton.setFont(new java.awt.Font("Dialog", 0, 13)); - } + public void actionPerformed(final ActionEvent e) { analysisButton_actionPerformed(e); } }); // Type filtering Font f = new Font("Tahoma", Font.PLAIN, 10); @@ -195,10 +170,7 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants { MigLayout layout = new MigLayout("fill"); pane.setLayout(layout); - // this.getContentPane().add(landCheckBox, - // "cell 0 0, egx checkbox, split 16"); boolean isFirst = true; - for (JCheckBox box : filterBoxes.allTypes) { String growParameter = "grow"; if (isFirst) { @@ -214,36 +186,27 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants { box.addItemListener(itemListenerUpdatesDisplay); } - //this.getContentPane().add(filterButton, "wmin 100, hmin 25, wmax 140, hmax 25, grow"); this.getContentPane().add(clearFilterButton, "wmin 100, hmin 25, wmax 140, hmax 25, grow"); this.getContentPane().add(filterNameTypeSet, "cell 0 1, grow"); this.getContentPane().add(top.getTableDecorated(), "cell 0 2 1 2, pushy, grow"); - - this.getContentPane().add(cardView, "cell 1 0 1 8, flowy, grow"); - - - this.getContentPane().add(top.getLabel(), "cell 0 4"); this.getContentPane().add(addButton, "w 100, h 49, sg button, cell 0 5, split 4"); this.getContentPane().add(removeButton, "w 100, h 49, sg button"); - - // jLabel4 is used to push the analysis button to the right - // This will separate this button from the add and remove card buttons - jLabelAnalysisGap.setText(""); + // Label is used to push the analysis button to the right to separate analysis button from add/remove card ones this.getContentPane().add(jLabelAnalysisGap, "wmin 100, grow"); - this.getContentPane().add(analysisButton, "w 100, h 49, wrap"); this.getContentPane().add(bottom.getTableDecorated(), "cell 0 6, grow"); this.getContentPane().add(bottom.getLabel(), "cell 0 7"); + this.getContentPane().add(cardView, "cell 1 0 1 8, flowy, grow"); + top.getTable().addMouseListener(new MouseAdapter() { - @Override public void mouseClicked(final MouseEvent e) { - if (e.getClickCount() == 2) { addCardToDeck(); } - } - }); + @Override public void mouseClicked(final MouseEvent e) { if (e.getClickCount() == 2) { addCardToDeck(); } } }); + top.getTable().addKeyListener(new KeyAdapter() { + @Override public void keyPressed(final KeyEvent e) { if (e.getKeyChar() == ' ') { addCardToDeck(); } } }); //javax.swing.JRootPane rootPane = this.getRootPane(); //rootPane.setDefaultButton(filterButton); @@ -254,6 +217,17 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants { return Predicate.and(filterBoxes.buildFilter(), filterNameTypeSet.buildFilter()); } + @Override + public void setDeck(CardPoolView topParam, CardPoolView bottomParam, GameType gt) + { + boolean keepRecievedCards = gt.isLimited() || topParam != null; + // if constructed, can add the all cards above + CardPoolView top = keepRecievedCards ? topParam : new CardPool( CardDb.instance().getAllCards() ); + + super.setDeck(top, bottomParam, gt); + + } + void clearFilterButton_actionPerformed(ActionEvent e) { // disable automatic update triggered by listeners isFiltersChangeFiringUpdate = false; @@ -279,9 +253,11 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants { setTitle("Deck Editor : " + customMenu.getDeckName() + " : unsaved"); bottom.addCard(card); - if (!isConstructed) { + if (getGameType().isLimited()) { top.removeCard(card); } + + customMenu.notifyDeckChange(); } void removeButtonClicked(ActionEvent e) { @@ -291,31 +267,10 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants { setTitle("Deck Editor : " + customMenu.getDeckName() + " : unsaved"); bottom.removeCard(card); - if (!isConstructed) { + if (getGameType().isLimited()) { top.addCard(card); } + + customMenu.notifyDeckChange(); } - - // refresh Gui from deck, Gui shows the cards in the deck - /** - *

- * refreshGui. - *

- */ - @SuppressWarnings("unused") - // refreshGui - private void refreshGui() { - Deck deck = Constant.Runtime.HumanDeck[0]; - if (deck == null) // this is just a patch, i know - deck = new Deck(Constant.Runtime.GameType[0]); - - bottom.setDeck(deck.getMain()); - - if (deck.isSealed() || deck.isDraft()) { - top.setDeck(deck.getSideboard()); // add sideboard to GUI - } else { - top.setDeck(CardDb.instance().getAllUniqueCards()); - } - } - } diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorBase.java b/src/main/java/forge/gui/deckeditor/DeckEditorBase.java index 79583c6ea24..0c7c4680205 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditorBase.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditorBase.java @@ -14,6 +14,8 @@ import net.slightlymagic.maxmtg.Predicate; import forge.GUI_DeckAnalysis; import forge.card.CardPrinted; import forge.card.CardPoolView; +import forge.deck.Deck; +import forge.game.GameType; public abstract class DeckEditorBase extends JFrame implements DeckDisplay { private static final long serialVersionUID = -401223933343539977L; @@ -28,6 +30,10 @@ public abstract class DeckEditorBase extends JFrame implements DeckDisplay { // CardPools and Table data for top and bottom lists protected TableWithCards top; protected TableWithCards bottom; + + + private GameType gameType; + public GameType getGameType() { return gameType; } // top shows available card pool // if constructed, top shows all cards @@ -55,7 +61,13 @@ public abstract class DeckEditorBase extends JFrame implements DeckDisplay { } } - public void setDecks(CardPoolView topParam, CardPoolView bottomParam) { + public DeckEditorBase(GameType gametype) + { + gameType = gametype; + } + + public void setDeck(CardPoolView topParam, CardPoolView bottomParam, GameType gt) { + gameType = gt; top.setDeck(topParam); bottom.setDeck(bottomParam); } @@ -76,4 +88,16 @@ public abstract class DeckEditorBase extends JFrame implements DeckDisplay { @Override public void removeUpdate(DocumentEvent e) { onChange(); } @Override public void changedUpdate(DocumentEvent e) { } // Happend only on ENTER pressed } + + public Deck getDeck() { + Deck deck = new Deck(gameType); + deck.addMain(getBottom()); + + //if sealed or draft, move "top" to sideboard + if (gameType.isLimited() && gameType != GameType.Quest) { + deck.addSideboard(getTop()); + } + return deck; + }//getDeck() + } diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorDraft.java b/src/main/java/forge/gui/deckeditor/DeckEditorDraft.java index 62fca031a96..69b6bb13e0b 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditorDraft.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditorDraft.java @@ -10,6 +10,7 @@ import forge.card.CardPrinted; import forge.deck.Deck; import forge.deck.DeckManager; import forge.error.ErrorViewer; +import forge.game.GameType; import forge.game.limited.BoosterDraft; import forge.gui.GuiUtils; import forge.properties.ForgeProps; @@ -106,8 +107,7 @@ public class DeckEditorDraft extends DeckEditorBase implements NewConstants, New this.setResizable(false); top.getTable().addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(final KeyEvent e) { + @Override public void keyPressed(final KeyEvent e) { if (e.getKeyChar() == ' ') { jButton1_actionPerformed(null); } } }); @@ -115,6 +115,7 @@ public class DeckEditorDraft extends DeckEditorBase implements NewConstants, New } public DeckEditorDraft() { + super(GameType.Draft); try { top = new TableWithCards("Choose one card", false); bottom = new TableWithCards("Previously picked cards", true); @@ -217,7 +218,7 @@ public class DeckEditorDraft extends DeckEditorBase implements NewConstants, New * @return a {@link forge.deck.Deck} object. */ private Deck getPlayersDeck() { - Deck deck = new Deck(Constant.GameType.Draft); + Deck deck = new Deck(GameType.Draft); Constant.Runtime.HumanDeck[0] = deck; //add sideboard to deck @@ -265,7 +266,7 @@ public class DeckEditorDraft extends DeckEditorBase implements NewConstants, New deckManager.addDraftDeck(all); //write file - deckManager.close(); + DeckManager.writeDraftDecks(all); //close and open next screen dispose(); diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorMenu.java b/src/main/java/forge/gui/deckeditor/DeckEditorMenu.java index 7c957ff9e1e..17479d55a44 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditorMenu.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditorMenu.java @@ -1,37 +1,33 @@ package forge.gui.deckeditor; - -import forge.AllZone; import forge.Card; import forge.CardList; import forge.Command; -import forge.Constant; import forge.card.CardDb; import forge.card.CardPool; -import forge.card.CardPoolView; import forge.deck.Deck; import forge.deck.DeckManager; -import forge.deck.DownloadDeck; import forge.deck.generate.GenerateConstructedDeck; -import forge.error.BugzReporter; import forge.error.ErrorViewer; +import forge.game.GameType; import forge.gui.GuiUtils; import forge.properties.ForgeProps; import forge.properties.NewConstants; -import forge.properties.NewConstants.LANG.Gui_DownloadPictures.ERRORS; - -import javax.swing.*; -import javax.swing.filechooser.FileFilter; +import org.apache.commons.lang3.StringUtils; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; -import java.net.Proxy; -import java.net.URL; import java.nio.channels.FileChannel; import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; + +import javax.swing.JFileChooser; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; /** *

Gui_DeckEditor_Menu class.

@@ -44,69 +40,31 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { /** Constant serialVersionUID=-4037993759604768755L */ private static final long serialVersionUID = -4037993759604768755L; - //used by importConstructed() and exportConstructected() /** Constant previousDirectory */ private static File previousDirectory = null; - - /** Constant debugPrint=false */ - private static final boolean debugPrint = false; - - //private final DeckManager deckManager = new DeckManager(ForgeProps.getFile(NEW_DECKS)); - private DeckManager deckManager = AllZone.getDeckManager(); + private DeckManager deckManager; - //with the new IO, there's no reason to use different instances - - private boolean isDeckSaved; + private boolean isDeckSaved = true; private String currentDeckName; - private String currentGameType; - //private String currentDeckPlayerType; - - /** - *

Setter for the field currentGameType.

- * - * @param gameType a {@link java.lang.String} object. - * @since 1.0.15 - */ - public final void setCurrentGameType(final String gameType) { - currentGameType = gameType; - } - - //private JMenuItem newDraftItem; private DeckDisplay deckDisplay; private Command exitCommand; - /** - *

Constructor for Gui_DeckEditor_Menu.

- * - * @param in_display a {@link forge.gui.deckeditor.DeckDisplay} object. - * @param exit a {@link forge.Command} object. - */ - public DeckEditorMenu(final DeckDisplay in_display, final Command exit) { + + public DeckEditorMenu(final DeckDisplay in_display, final DeckManager dckManager, final Command exit) { deckDisplay = in_display; exitCommand = exit; - + deckManager = dckManager; + //this is added just to make save() and saveAs() work ok //when first started up, just a silly patch - currentGameType = Constant.GameType.Constructed; - setDeckData("", false); + setDeckData("", true); setupMenu(); setupSortMenu(); - - JMenu bugMenu = new JMenu("Report Bug"); - JMenuItem bugReport = new JMenuItem("Report Bug"); - bugReport.addActionListener(new ActionListener() { - public void actionPerformed(final ActionEvent ev) { - BugzReporter br = new BugzReporter(); - br.setVisible(true); - } - }); - bugMenu.add(bugReport); - this.add(bugMenu); } @@ -120,7 +78,6 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { JMenuItem type = new JMenuItem("Type"); JMenuItem stats = new JMenuItem("Power/Toughness"); JMenuItem rarity = new JMenuItem("Rarity"); - JMenuItem newFirst = new JMenuItem("Most recently added"); JMenu menu = new JMenu("Sort By"); menu.add(name); @@ -130,262 +87,94 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { menu.add(stats); menu.add(rarity); - // menu.add(newFirst); - /* - * The "Most recently added" menu now causes an error exception. This will prevent - * this option from appearing in the "Sort By" menu. There may be a way (or not) - * to sort the indivudual card files by the date created or the date last modified. - */ - this.add(menu); - //add listeners - - name.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { - //index 1 sorts by card name - for more info see TableSorter - // 0 1 2 3 4 5 6 - //private String column[] = {"Qty", "Name", "Cost", "Color", "Type", "Stats", "Rarity"}; - DeckEditor g = (DeckEditor) deckDisplay; - g.getTopTableModel().sort(1, true); - + ((DeckEditor) deckDisplay).getTopTableModel().sort(1, true); } }); + // 0 1 2 3 4 5 6 + //private String column[] = {"Qty", "Name", "Cost", "Color", "Type", "Stats", "Rarity"}; cost.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { - // 0 1 2 3 4 5 6 - //private String column[] = {"Qty", "Name", "Cost", "Color", "Type", "Stats", "Rarity"}; - DeckEditor g = (DeckEditor) deckDisplay; - - //sort by type, color, cost - g.getTopTableModel().sort(4, true); - g.getTopTableModel().sort(3, true); - g.getTopTableModel().sort(2, true); + ((DeckEditor) deckDisplay).getTopTableModel().sort(4).sort(3).sort(2); } }); color.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { - // 0 1 2 3 4 5 6 - //private String column[] = {"Qty", "Name", "Cost", "Color", "Type", "Stats", "Rarity"}; - DeckEditor g = (DeckEditor) deckDisplay; - - //sort by type, cost, color - g.getTopTableModel().sort(4, true); - g.getTopTableModel().sort(2, true); - g.getTopTableModel().sort(3, true); + ((DeckEditor) deckDisplay).getTopTableModel().sort(4).sort(2).sort(3); } }); type.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { - // 0 1 2 3 4 5 6 - //private String column[] = {"Qty", "Name", "Cost", "Color", "Type", "Stats", "Rarity"}; - DeckEditor g = (DeckEditor) deckDisplay; - - //sort by cost, color, type - g.getTopTableModel().sort(2, true); - g.getTopTableModel().sort(3, true); - g.getTopTableModel().sort(4, true); + ((DeckEditor) deckDisplay).getTopTableModel().sort(2).sort(3).sort(4); } }); stats.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { - // 0 1 2 3 4 5 6 - //private String column[] = {"Qty", "Name", "Cost", "Color", "Type", "Stats", "Rarity"}; - DeckEditor g = (DeckEditor) deckDisplay; - - g.getTopTableModel().sort(4, true); - g.getTopTableModel().sort(2, true); - g.getTopTableModel().sort(3, true); - g.getTopTableModel().sort(5, true); + ((DeckEditor) deckDisplay).getTopTableModel().sort(4).sort(2).sort(3).sort(5); } }); rarity.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { - // 0 1 2 3 4 5 6 - //private String column[] = {"Qty", "Name", "Cost", "Color", "Type", "Stats", "Rarity"}; - DeckEditor g = (DeckEditor) deckDisplay; - //sort by cost, type, color, rarity - g.getTopTableModel().sort(2, true); - g.getTopTableModel().sort(4, true); - g.getTopTableModel().sort(3, true); - g.getTopTableModel().sort(6, true); + ((DeckEditor) deckDisplay).getTopTableModel().sort(2).sort(4).sort(3).sort(6); } }); - - newFirst.addActionListener(new ActionListener() { - public void actionPerformed(final ActionEvent ev) { - // 0 1 2 3 4 5 6 - //private String column[] = {"Qty", "Name", "Cost", "Color", "Type", "Stats", "Rarity"}; - DeckEditor g = (DeckEditor) deckDisplay; - - g.getTopTableModel().sort(99, true); - } - }); - - }//setupSortMenu() + } //setupSortMenu() - /** - *

newConstructed.

- */ - public void newConstructed() { - if (debugPrint) { - System.out.println("New Constructed"); - } + public void newConstructed(boolean careAboutOldDeck) { + if (careAboutOldDeck && !canLeaveCurrentDeck()) return; -// if(! isDeckSaved) -// save(); + setDeckData("", true); - currentGameType = Constant.GameType.Constructed; - setDeckData("", false); + deckDisplay.setDeck(null, null, GameType.Constructed); + } - CardPool allCards = new CardPool(); - allCards.addAllCards(CardDb.instance().getAllCards()); - - deckDisplay.setDecks(allCards, null); - }//new constructed - - /** - *

newRandomConstructed.

- */ private void newRandomConstructed() { - if (debugPrint) { - System.out.println("Random Constructed"); - } + if (!canLeaveCurrentDeck()) return; -// if(! isDeckSaved) -// save(); - - currentGameType = Constant.GameType.Constructed; setDeckData("", false); - CardList random = new CardList(AllZone.getCardFactory().getRandomCombinationWithoutRepetition(15 * 5)); - random.add(AllZone.getCardFactory().getCard("Forest", AllZone.getHumanPlayer())); - random.add(AllZone.getCardFactory().getCard("Island", AllZone.getHumanPlayer())); - random.add(AllZone.getCardFactory().getCard("Plains", AllZone.getHumanPlayer())); - random.add(AllZone.getCardFactory().getCard("Mountain", AllZone.getHumanPlayer())); - random.add(AllZone.getCardFactory().getCard("Swamp", AllZone.getHumanPlayer())); - random.add(AllZone.getCardFactory().getCard("Terramorphic Expanse", AllZone.getHumanPlayer())); + // The only remaining reference to global variable! + CardList random = new CardList(forge.AllZone.getCardFactory().getRandomCombinationWithoutRepetition(15 * 5)); CardPool cpRandom = new CardPool(); for (Card c : random) { cpRandom.add(CardDb.instance().getCard(c)); } + cpRandom.add(CardDb.instance().getCard("Forest")); + cpRandom.add(CardDb.instance().getCard("Island")); + cpRandom.add(CardDb.instance().getCard("Plains")); + cpRandom.add(CardDb.instance().getCard("Swamp")); + cpRandom.add(CardDb.instance().getCard("Mountain")); + cpRandom.add(CardDb.instance().getCard("Terramorphic Expanse")); + deckDisplay.setDeck(cpRandom, null, GameType.Constructed); + } - deckDisplay.setDecks(cpRandom, new CardPoolView()); - }//new sealed - - - /** - *

newGenerateConstructed.

- */ private void newGenerateConstructed() { - if (debugPrint) { - System.out.println("Generate Constructed"); - } + if (!canLeaveCurrentDeck()) return; -// if(! isDeckSaved) -// save(); - - currentGameType = Constant.GameType.Constructed; setDeckData("", false); GenerateConstructedDeck gen = new GenerateConstructedDeck(); - // This is an expensive heap operation. - CardPool allCards = new CardPool( CardDb.instance().getAllCards() ); - CardPool generated = new CardPool(); for (Card c : gen.generateDeck()) { generated.add( CardDb.instance().getCard(c)); } - deckDisplay.setDecks(allCards, generated); - }//new sealed + deckDisplay.setDeck(null, generated, GameType.Constructed); + } -/* private void newSealed() { - if (debugPrint) { - System.out.println("New Sealed"); - } - -// if(! isDeckSaved) -// save(); - - currentGameType = Constant.GameType.Sealed; - setDeckData("", false); - - deckDisplay.updateDisplay(new ReadBoosterPack().getBoosterPack5(), new CardList()); - }//new sealed -*/ -/* private void newDraft() { - if (debugPrint) { - System.out.println("New Draft"); - } - -// if(! isDeckSaved) -// save(); - - currentGameType = Constant.GameType.Draft; - - //move all cards from deck main and sideboard to CardList - Deck deck = deckManager.getDraftDeck(currentDeckName)[0]; - setDeckData("", false); - - CardList top = new CardList(); - - for (int i = 0; i < deck.countMain(); i++) { - String cardName = deck.getMain(i); - - if (cardName.contains("|")) { - String s[] = cardName.split("\\|", 2); - cardName = s[0]; - } - - top.add(AllZone.getCardFactory().getCard(cardName, AllZone.getHumanPlayer())); - } - - for (int i = 0; i < deck.countSideboard(); i++) { - String cardName = deck.getMain(i); - String setCode = ""; - if (cardName.contains("|")) { - String s[] = cardName.split("\\|", 2); - cardName = s[0]; - setCode = s[1]; - } - - top.add(AllZone.getCardFactory().getCard(cardName, AllZone.getHumanPlayer())); - } - - deckDisplay.updateDisplay(top, new CardList()); - }//new draft -*/ - - private FileFilter dckFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return f.getName().endsWith(".dck") || f.isDirectory(); - } - - @Override - public String getDescription() { - return "Simple Deck File .dck"; - } - }; - - - /** - *

getImportFilename.

- * - * @return a {@link java.io.File} object. - */ private File getImportFilename() { JFileChooser chooser = new JFileChooser(previousDirectory); - chooser.addChoosableFileFilter(dckFilter); + chooser.addChoosableFileFilter(DeckManager.dckFilter); int returnVal = chooser.showOpenDialog(null); if (returnVal == JFileChooser.APPROVE_OPTION) { @@ -393,36 +182,10 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { previousDirectory = file.getParentFile(); return file; } - - return null; + } //openFileDialog() - }//openFileDialog() - /** - *

showDeck.

- * - * @param deck a {@link forge.deck.Deck} object. - */ - private void showDeck(Deck deck) { - String gameType = deck.getDeckType(); - - if (gameType.equals(Constant.GameType.Constructed)) { - showConstructedDeck(deck); - } - - if (gameType.equals(Constant.GameType.Draft)) { - showDraftDeck(deck); - } - - if (gameType.equals(Constant.GameType.Sealed)) { - showSealedDeck(deck); - } - }//showDeck() - - /** - *

importDeck.

- */ private void importDeck() { File file = getImportFilename(); @@ -430,8 +193,7 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { } else if (file.getName().endsWith(".dck")) { try { FileChannel srcChannel = new FileInputStream(file).getChannel(); - File dst = new File(ForgeProps.getFile(NEW_DECKS).getAbsolutePath() + java.io.File.separator - + (file.getName())); + File dst = new File(ForgeProps.getFile(NEW_DECKS).getAbsolutePath(), file.getName()); if (!dst.createNewFile()) { JOptionPane.showMessageDialog(null, "Cannot import deck " + file.getName() + ", a deck currently has that name."); @@ -444,7 +206,7 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { Deck newDeck = DeckManager.readDeck(file); deckManager.addDeck(newDeck); - showDeck(newDeck); + showDeck(newDeck, newDeck.getDeckType()); } catch (Exception ex) { ErrorViewer.showError(ex); @@ -452,431 +214,157 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { } } - }//importDeck() - - /** - *

downloadDeck.

- */ - private void downloadDeck() { - - Object o = JOptionPane.showInputDialog(null, "URL(only from http://magic.tcgplayer.com):", - "Download Deck", JOptionPane.OK_CANCEL_OPTION); - if (o == null) { - return; - } - String url = o.toString(); - - if ((url.length() < 37) - || (url.substring(0, 39).equalsIgnoreCase("http://magic.tcgplayer.com/db/deck.asp"))) { - JOptionPane.showMessageDialog(null, "Bad URL." + "\n" - + "Support only deck from http://magic.tcgplayer.com" + "\n" - + "Example: http://magic.tcgplayer.com/db/deck.asp?deck_id=474146", "Information", - JOptionPane.INFORMATION_MESSAGE); - return; - } - Proxy p = null; - p = Proxy.NO_PROXY; - BufferedInputStream in; - BufferedOutputStream out; - try { - byte[] buf = new byte[1024]; - int len; - File f = new File("deck_temp.html"); - in = new BufferedInputStream(new URL(url).openConnection(p).getInputStream()); - out = new BufferedOutputStream(new FileOutputStream(f)); - //while - read and write file - while ((len = in.read(buf)) != -1) { - out.write(buf, 0, len); - - }//while - read and write file - in.close(); - out.flush(); - out.close(); - String fileName = "deck_temp.html"; - FileReader fr = new FileReader(fileName); - BufferedReader br = new BufferedReader(fr); - String s = ""; - String z = ""; - StringBuffer sb = new StringBuffer(); - while ((z = br.readLine()) != null) { - sb.append(z); - } - s = sb.toString(); - br.close(); - int start = s.indexOf("MAIN DECK"); - int finish = s.indexOf("SIDEBOARD"); - String rStr = ""; - rStr = s.substring(start + 9, finish); - int first; - int second; - while (rStr.indexOf("<") != -1) { - first = rStr.indexOf("<"); - second = rStr.indexOf(">", first); - if (first == 0) { - rStr = rStr.substring(second + 1); - } else { - rStr = rStr.substring(0, first) + " " + rStr.substring(second + 1); - } - } - first = rStr.indexOf("Creatures ["); - second = rStr.indexOf("]", first); - if (first != -1) { - rStr = rStr.substring(0, first) + rStr.substring(second + 1); - } - first = rStr.indexOf("Spells ["); - second = rStr.indexOf("]", first); - if (first != -1) { - rStr = rStr.substring(0, first) + rStr.substring(second + 1); - } - first = rStr.indexOf("Lands ["); - second = rStr.indexOf("]", first); - if (first != -1) { - rStr = rStr.substring(0, first) + rStr.substring(second + 1); - } - String number[] = new String[59]; - String name[] = new String[59]; - int count = 0; - DownloadDeck download = new DownloadDeck(); - while (rStr.length() != 0) { - rStr = download.removeSpace(rStr); - number[count] = download.foundNumberCard(rStr); - rStr = download.removeFoundNumberCard(rStr, number[count]); - rStr = download.removeSpace(rStr); - name[count] = download.foundNameCard(rStr); - name[count] = download.removeSpaceBack(name[count]); - rStr = download.removeFoundNameCard(rStr, name[count]); - rStr = download.removeSpace(rStr); - count = count + 1; - } - String trueName[] = new String[59]; - String trueNumber[] = new String[59]; - String falseName[] = new String[59]; - int trueCount = 0; - int falseCount = 0; - for (int i = 0; i < count; i++) { - if (download.isCardSupport(name[i]) == true) { - trueName[trueCount] = name[i]; - trueNumber[trueCount] = number[i]; - trueCount = trueCount + 1; - } else { - falseName[falseCount] = name[i]; - falseCount = falseCount + 1; - } - - } - - CardPool trueList = new CardPool(); - for (int i = 0; i < trueCount; i++) { - trueList.add(CardDb.instance().getCard(trueName[i]), Integer.parseInt(trueNumber[i])); - } - - StringBuffer falseCards = new StringBuffer(); - for (int i = 0; i < falseCount; i++) { - falseCards.append("\n").append(falseName[i]).append(","); - } - - - deckDisplay.setDecks(deckDisplay.getTop(), trueList); - - if (falseCount == 0) { - JOptionPane.showMessageDialog(null, "Deck downloads.", "Information", - JOptionPane.INFORMATION_MESSAGE); - } else { - JOptionPane.showMessageDialog(null, "Sorry, cards:" + falseCards - + "\nnot supported in this version MTGForge. \nDeck downloads without this cards.", - "Information", JOptionPane.INFORMATION_MESSAGE); - } - - f.delete(); - - } catch (Exception ex) { - ErrorViewer.showError(ex, ForgeProps.getLocalized(ERRORS.OTHER), "deck_temp.html", url); - - } - - } - /** *

exportDeck.

*/ private void exportDeck() { File filename = getExportFilename(); + if (filename == null) { return; } - if (filename == null) { - return; - } - - //write is an Object variable because you might just - //write one Deck object or - //many Deck objects if it is a draft deck Deck deck = getDeck(); - - deck.setName(filename.getName().substring(0, filename.getName().length() - 4)); - - //export Draft decks, this is a little hacky - //a Draft deck holds 8 decks, [0] is the player's deck - //and the other 7 are the computer's deck - if (currentGameType.equals(Constant.GameType.Draft)) { - //read all draft decks - Deck[] d = deckManager.getDraftDeck(currentDeckName); - - //replace your deck - d[0] = deck; - } - try { DeckManager.writeDeck(deck, filename); } catch (Exception ex) { ErrorViewer.showError(ex); throw new RuntimeException("Gui_DeckEditor_Menu : exportDeck() error, " + ex); } + } - }//exportDeck() - - /** - *

getExportFilename.

- * - * @return a {@link java.io.File} object. - */ private File getExportFilename() { - //Object o = null; // unused - JFileChooser save = new JFileChooser(previousDirectory); - save.setDialogTitle("Export Deck Filename"); save.setDialogType(JFileChooser.SAVE_DIALOG); - save.setFileFilter(dckFilter); + save.setFileFilter(DeckManager.dckFilter); - int returnVal = save.showSaveDialog(null); - - if (returnVal == JFileChooser.APPROVE_OPTION) { + if (save.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { File file = save.getSelectedFile(); String check = file.getAbsolutePath(); previousDirectory = file.getParentFile(); - if (check.endsWith(".dck")) { - return file; - } else { - return new File(check + ".dck"); - } + return check.endsWith(".dck") ? file : new File(check + ".dck"); } - return null; } - /** - *

openConstructed.

- */ - private void openConstructed() { - if (debugPrint) { - System.out.println("Open Constructed"); - } + private void openDeck(GameType gameType) { + if (!canLeaveCurrentDeck()) { return; } + + String name = getUserInput_OpenDeck(gameType); -// if(! isDeckSaved) -// save(); + if (StringUtils.isBlank(name)) { return; } - String name = getUserInput_OpenDeck(Constant.GameType.Constructed); - - if (name.equals("")) { - return; - } - - //must be AFTER get user input, since user could cancel - currentGameType = Constant.GameType.Constructed; - //newDraftItem.setEnabled(false); - - Deck deck = deckManager.getDeck(name); - showConstructedDeck(deck); - }//open constructed - - /** - *

showConstructedDeck.

- * - * @param deck a {@link forge.deck.Deck} object. - */ - private void showConstructedDeck(final Deck deck) { + Deck deck = gameType == GameType.Draft ? deckManager.getDraftDeck(name)[0] : deckManager.getDeck(name); + showDeck(deck, gameType); + } + + public final void showDeck(final Deck deck, final GameType gameType) { setDeckData(deck.getName(), true); - - CardPool allCards = new CardPool(CardDb.instance().getAllUniqueCards()); - deckDisplay.setDecks(allCards, deck.getMain()); - }//showConstructedDeck() - - /** - *

openSealed.

- */ - private void openSealed() { - if (debugPrint) { - System.out.println("Open Sealed"); + if (gameType.isLimited()) { + deckDisplay.setDeck(deck.getSideboard(), deck.getMain(), gameType); + } else { + deckDisplay.setDeck(null, deck.getMain(), gameType); } + } + -// if(! isDeckSaved) -// save(); - String name = getUserInput_OpenDeck(Constant.GameType.Sealed); - - if (name.equals("")) { - return; - } - - //must be AFTER get user input, since user could cancel - currentGameType = Constant.GameType.Sealed; - - //newDraftItem.setEnabled(false); - - Deck deck = deckManager.getDeck(name); - showSealedDeck(deck); - }//open sealed - - /** - *

showSealedDeck.

- * - * @param deck a {@link forge.deck.Deck} object. - */ - public final void showSealedDeck(final Deck deck) { - setDeckData(deck.getName(), true); - //currentDeckPlayerType = deck.getMetadata("PlayerType"); - deckDisplay.setDecks(deck.getSideboard(), deck.getMain()); - }//showSealedDeck() - - /** - *

openDraft.

- */ - private void openDraft() { - if (debugPrint) { - System.out.println("Open Draft"); - } - - String name = getUserInput_OpenDeck(Constant.GameType.Draft); - - if (name.equals("")) { - return; - } - - //must be AFTER get user input, since user could cancel - currentGameType = Constant.GameType.Draft; - //newDraftItem.setEnabled(true); - - Deck deck = deckManager.getDraftDeck(name)[0]; - showDraftDeck(deck); - }//open draft - - /** - *

showDraftDeck.

- * - * @param deck a {@link forge.deck.Deck} object. - */ - private void showDraftDeck(final Deck deck) { - setDeckData(deck.getName(), true); - deckDisplay.setDecks(deck.getSideboard(), deck.getMain()); - }//showDraftDeck() - - /** - *

save.

- */ private void save() { - if (debugPrint) { - System.out.println("Save"); - } if (currentDeckName.equals("")) { saveAs(); - } else if (currentGameType.equals(Constant.GameType.Draft)) { + return; + } + + Deck deck = getDeck(); + if (deckDisplay.getGameType().equals(GameType.Draft)) { setDeckData(currentDeckName, true); //write booster deck Deck[] all = deckManager.getDraftDeck(currentDeckName); - all[0] = getDeck(); + all[0] = deck; deckManager.addDraftDeck(all); - } else//constructed or sealed - { + DeckManager.writeDraftDecks(all); + } else { //constructed or sealed setDeckData(currentDeckName, true); - deckManager.deleteDeck(currentDeckName); - deckManager.addDeck(getDeck()); + deckManager.addDeck(deck); + DeckManager.writeDeck(deck, DeckManager.makeFileName(deck)); } - }//save + isDeckSaved = true; + } - /** - *

saveAs.

- */ private void saveAs() { - if (debugPrint) { - System.out.println("Save As"); - } - String name = getUserInput_GetDeckName(); - if (name.equals("")) { - return; - } else if (currentGameType.equals(Constant.GameType.Draft)) { + if (name.equals("")) { return; } + setDeckData(name, true); + + Deck deck = getDeck(); + if (deckDisplay.getGameType().equals(GameType.Draft)) { //MUST copy array Deck[] read = deckManager.getDraftDeck(currentDeckName); Deck[] all = new Deck[read.length]; System.arraycopy(read, 0, all, 0, read.length); - setDeckData(name, true); - - all[0] = getDeck(); + all[0] = deck; deckManager.addDraftDeck(all); + DeckManager.writeDraftDecks(all); } else//constructed and sealed { - setDeckData(name, true); - deckManager.addDeck(getDeck()); + deckManager.addDeck(deck); + DeckManager.writeDeck(deck, DeckManager.makeFileName(deck)); } - }//save as + isDeckSaved = true; + } + - /** - *

delete.

- */ private void delete() { - if (debugPrint) { - System.out.println("Delete"); - } - - if (currentGameType.equals("") || currentDeckName.equals("")) { - return; - } + if (StringUtils.isBlank(currentDeckName)) { return; } int n = JOptionPane.showConfirmDialog(null, "Do you want to delete this deck " + currentDeckName + " ?", "Delete", JOptionPane.YES_NO_OPTION); - if (n == JOptionPane.NO_OPTION) { - return; - } + + if (n == JOptionPane.NO_OPTION) { return; } - if (currentGameType.equals(Constant.GameType.Draft)) { + if (deckDisplay.getGameType().equals(GameType.Draft)) { deckManager.deleteDraftDeck(currentDeckName); } else { deckManager.deleteDeck(currentDeckName); } setDeckData("", true); - deckDisplay.setDecks(new CardPoolView(), new CardPoolView()); - }//delete + deckDisplay.setDeck(null, null, deckDisplay.getGameType()); + } - /** - *

close.

- */ public final void close() { - if (debugPrint) { - System.out.println("Close"); - } - -// if(! isDeckSaved) -// save(); - - deckManager.close(); + if (!canLeaveCurrentDeck()) { return; } exitCommand.execute(); - }//close + } + + private boolean canLeaveCurrentDeck() { + if (isSaved()) return true; + String message = String.format("Do you wish to save changes you made to your current deck '%s'?", currentDeckName); + int choice = JOptionPane.showConfirmDialog((Component) deckDisplay, message, + "You have unsaved changes in your deck", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); + if (JOptionPane.CANCEL_OPTION == choice) { return false; } + if (JOptionPane.NO_OPTION == choice) { return true; } + + Deck deck = getDeck(); + deck.setName(currentDeckName); + DeckManager.writeDeck(deck, DeckManager.makeFileName(deck)); + return true; + } + + private Deck getDeck() + { + Deck deck = deckDisplay.getDeck(); + deck.setName(currentDeckName); + return deck; + } - /** - *

setDeckData.

- * - * @param deckName a {@link java.lang.String} object. - * @param in_isDeckSaved a boolean. - */ private void setDeckData(final String deckName, final boolean in_isDeckSaved) { currentDeckName = deckName; isDeckSaved = in_isDeckSaved; @@ -884,41 +372,8 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { deckDisplay.setTitle("Deck Editor : " + currentDeckName); } - /** - *

setTitle.

- * - * @param s a {@link java.lang.String} object. - */ - public final void setTitle(final String s) { - deckDisplay.setTitle(s); - } - - /** - *

getDeckName.

- * - * @return a {@link java.lang.String} object. - */ - public final String getDeckName() { - return currentDeckName; - } - - /** - *

getGameType.

- * - * @return a {@link java.lang.String} object. - */ - public final String getGameType() { - return currentGameType; - } - - /** - *

isDeckSaved.

- * - * @return a boolean. - */ - public final boolean isDeckSaved() { - return isDeckSaved; - } + public final String getDeckName() { return currentDeckName; } + public final boolean isSaved() { return isDeckSaved; } /** *

getUserInput_GetDeckName.

@@ -928,119 +383,37 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { private String getUserInput_GetDeckName() { Object o = JOptionPane.showInputDialog(null, "Save As", "Deck Name", JOptionPane.OK_CANCEL_OPTION); - if (o == null) { - return ""; + if (o == null) { return ""; } + + String deckName = DeckManager.cleanDeckName(o.toString()); + boolean isDraft = deckDisplay.getGameType() == GameType.Draft; + boolean isUniqueName = isDraft ? deckManager.isUniqueDraft(deckName) : deckManager.isUnique(deckName); + boolean isGoodName = isUniqueName && StringUtils.isNotBlank(deckName); + + if (isGoodName) { return deckName; } + + JOptionPane.showMessageDialog(null, "Please pick another deck name, another deck currently has that name."); + return getUserInput_GetDeckName(); + } + + private String getUserInput_OpenDeck(final GameType deckType) { + ArrayList choices = deckManager.getDeckNames(deckType); + if (choices.isEmpty()) { + JOptionPane.showMessageDialog(null, "No decks found", "Open Deck", JOptionPane.PLAIN_MESSAGE); + return null; } - String deckName = cleanString(o.toString()); - - boolean isUniqueName; - if (currentGameType.equals(Constant.GameType.Draft)) { - isUniqueName = deckManager.isUniqueDraft(deckName); - } else { - isUniqueName = deckManager.isUnique(deckName); - } - - if ((!isUniqueName) || deckName.equals("")) { - JOptionPane.showMessageDialog(null, "Please pick another deck name, a deck currently has that name."); - return getUserInput_GetDeckName(); - } - - return deckName; - }//getUserInput_GetDeckName() - - //only accepts numbers, letters or dashes up to 10 characters in length - /** - *

cleanString.

- * - * @param in a {@link java.lang.String} object. - * @return a {@link java.lang.String} object. - */ - private String cleanString(final String in) { - char[] c = in.toCharArray(); - - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < c.length && i < 20; i++) { - if (Character.isLetterOrDigit(c[i]) || c[i] == '-') { - sb.append(c[i]); - } - } - return sb.toString(); + Object o = GuiUtils.getChoiceOptional("Open Deck", choices.toArray()); + return o == null ? null : o.toString(); } - /** - *

getUserInput_OpenDeck.

- * - * @param deckType a {@link java.lang.String} object. - * @return a {@link java.lang.String} object. - */ - private String getUserInput_OpenDeck(final String deckType) { - ArrayList choices = getDeckNames(deckType); - if (choices.size() == 0) { - JOptionPane.showMessageDialog(null, "No decks found", "Open Deck", JOptionPane.PLAIN_MESSAGE); - return ""; - } - //Object o = JOptionPane.showInputDialog(null, "Deck Name", "Open Deck", JOptionPane.OK_CANCEL_OPTION, null, - // choices.toArray(), choices.toArray()[0]); - Object o = GuiUtils.getChoiceOptional("Open Deck", choices.toArray()); + // deck.setName(currentDeckName); + + public void notifyDeckChange() { + isDeckSaved = false; + } - if (o == null) { - return ""; - } - - return o.toString(); - }//getUserInput_OpenDeck() - - - /** - *

getDeckNames.

- * - * @param deckType a {@link java.lang.String} object. - * @return a {@link java.util.ArrayList} object. - */ - private ArrayList getDeckNames(final String deckType) { - ArrayList list = new ArrayList(); - - //only get decks according to the OldGuiNewGame screen option - if (deckType.equals(Constant.GameType.Draft)) { - - for (String s : deckManager.getDraftDecks().keySet()) { - list.add(s); - } - } else { - Collection decks = deckManager.getDecks(); - for (Deck deck : decks) { - if (deckType.equals(deck.getDeckType())) { - list.add(deck.toString()); - } - } - } - - Collections.sort(list); - return list; - }//getDecks() - - /** - *

getDeck.

- * - * @return a {@link forge.deck.Deck} object. - */ - private Deck getDeck() { - Deck deck = new Deck(currentGameType); - deck.setName(currentDeckName); - deck.addMain(deckDisplay.getBottom()); - - //if sealed or draft, move "top" to sideboard - if (!currentGameType.equals(Constant.GameType.Constructed)) { - deck.addSideboard(deckDisplay.getTop()); - } - return deck; - }//getDeck() - - /** - *

setupMenu.

- */ private void setupMenu() { JMenuItem newConstructed = new JMenuItem("New Deck - Constructed"); @@ -1053,7 +426,7 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { JMenuItem importDeck = new JMenuItem("Import Deck"); JMenuItem exportDeck = new JMenuItem("Export Deck"); - JMenuItem downloadDeck = new JMenuItem("Download Deck"); + // JMenuItem downloadDeck = new JMenuItem("Download Deck"); JMenuItem openConstructed = new JMenuItem("Open Deck - Constructed"); @@ -1082,7 +455,7 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { fileMenu.add(importDeck); fileMenu.add(exportDeck); - fileMenu.add(downloadDeck); + //fileMenu.add(downloadDeck); fileMenu.addSeparator(); fileMenu.add(newRandomConstructed); @@ -1130,7 +503,7 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { } }); - downloadDeck.addActionListener(new ActionListener() { +/* downloadDeck.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { try { SwingUtilities.invokeLater(new Runnable() { @@ -1144,13 +517,13 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { } } }); - +*/ newConstructed.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { try { SwingUtilities.invokeLater(new Runnable() { public void run() { - newConstructed(); + newConstructed(true); } }); } catch (Exception ex) { @@ -1192,43 +565,12 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { } }); - -/* newSealed.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ev) { - try { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - newSealed(); - } - }); - } catch (Exception ex) { - ErrorViewer.showError(ex); - throw new RuntimeException("Gui_DeckEditor_Menu : newSealed() error - " + ex); - } - } - }); -*/ -/* newDraft.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ev) { - try { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - newDraft(); - } - }); - } catch (Exception ex) { - ErrorViewer.showError(ex); - throw new RuntimeException("Gui_DeckEditor_Menu : newDraft() error - " + ex); - } - } - }); -*/ openConstructed.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent ev) { try { SwingUtilities.invokeLater(new Runnable() { public void run() { - openConstructed(); + openDeck(GameType.Constructed); } }); } catch (Exception ex) { @@ -1243,7 +585,7 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { try { SwingUtilities.invokeLater(new Runnable() { public void run() { - openSealed(); + openDeck(GameType.Sealed); } }); } catch (Exception ex) { @@ -1258,7 +600,7 @@ public class DeckEditorMenu extends JMenuBar implements NewConstants { try { SwingUtilities.invokeLater(new Runnable() { public void run() { - openDraft(); + openDeck(GameType.Draft); } }); } catch (Exception ex) { diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java b/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java index 6e0524ee6c7..c93be6e9191 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java @@ -7,6 +7,7 @@ import forge.card.CardPoolView; import forge.card.CardPrinted; import forge.deck.Deck; import forge.error.ErrorViewer; +import forge.game.GameType; import forge.gui.GuiUtils; import forge.properties.NewConstants; import forge.quest.data.QuestData; @@ -26,8 +27,6 @@ import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JCheckBox; -import javax.swing.JLabel; - import net.slightlymagic.maxmtg.Predicate; //import forge.quest.data.QuestBoosterPack; @@ -90,7 +89,7 @@ public final class DeckEditorQuest extends DeckEditorBase implements NewConstant && questData.getDeckNames().contains(Constant.Runtime.HumanDeck[0].getName())) { deck = questData.getDeck(Constant.Runtime.HumanDeck[0].getName()); } else { - deck = new Deck(Constant.GameType.Sealed); + deck = new Deck(GameType.Sealed); deck.setName(""); } @@ -105,7 +104,7 @@ public final class DeckEditorQuest extends DeckEditorBase implements NewConstant cardpool.removeAll(bottomPool); // show cards, makes this user friendly, lol, well may, ha - setDecks(cardpool, bottomPool); + setDeck(cardpool, bottomPool, GameType.Quest); // this affects the card pool top.sort(4, true);// sort by type @@ -152,6 +151,7 @@ public final class DeckEditorQuest extends DeckEditorBase implements NewConstant } // setupAndDisplay() public DeckEditorQuest(QuestData questData2) { + super(GameType.Quest); questData = questData2; try { filterBoxes = new FilterCheckBoxes(false); diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorQuestMenu.java b/src/main/java/forge/gui/deckeditor/DeckEditorQuestMenu.java index ca8ed22049f..a18078f9295 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditorQuestMenu.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditorQuestMenu.java @@ -11,6 +11,7 @@ import forge.card.CardPrinted; import forge.deck.Deck; import forge.deck.DeckManager; import forge.error.ErrorViewer; +import forge.game.GameType; import forge.gui.GuiUtils; import forge.gui.ListChooser; import forge.quest.data.QuestData; @@ -275,7 +276,7 @@ public class DeckEditorQuestMenu extends JMenuBar { cardpool.add(cp, s.getValue()); questData.getCards().getCardpool().add(cp, s.getValue()); } - deckDisplay.setDecks(cardpool, decklist); + deckDisplay.setDeck(cardpool, decklist, GameType.Quest); } catch (Exception ex) { ErrorViewer.showError(ex); @@ -339,13 +340,13 @@ public class DeckEditorQuestMenu extends JMenuBar { // show in pool all cards except ones used in deck cards.removeAll(deck); - deckDisplay.setDecks(cards, deck); + deckDisplay.setDeck(cards, deck, GameType.Quest); } }; private final ActionListener newDeckActionListener = new ActionListener() { public void actionPerformed(final ActionEvent a) { - deckDisplay.setDecks(questData.getCards().getCardpool().getView(), new CardPool()); + deckDisplay.setDeck(questData.getCards().getCardpool().getView(), new CardPool(), GameType.Quest); setPlayerDeckName(""); } }; @@ -428,7 +429,7 @@ public class DeckEditorQuestMenu extends JMenuBar { questData.removeDeck(currentDeck.getName()); //show card pool - deckDisplay.setDecks(questData.getCards().getCardpool().getView(), new CardPool()); + deckDisplay.setDeck(questData.getCards().getCardpool().getView(), new CardPool(), GameType.Quest); setPlayerDeckName(""); } @@ -498,7 +499,7 @@ public class DeckEditorQuestMenu extends JMenuBar { */ private Deck cardPoolToDeck(final CardPoolView list) { //put CardPool into Deck main - Deck deck = new Deck(Constant.GameType.Sealed); + Deck deck = new Deck(GameType.Sealed); deck.addMain(list); return deck; } @@ -511,7 +512,7 @@ public class DeckEditorQuestMenu extends JMenuBar { */ public final void setPlayerDeckName(final String deckName) { //the gui uses this, Gui_Quest_DeckEditor - currentDeck = new Deck(Constant.GameType.Sealed); + currentDeck = new Deck(GameType.Sealed); currentDeck.setName(deckName); deckDisplay.setTitle(deckEditorName + " - " + deckName); diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorShop.java b/src/main/java/forge/gui/deckeditor/DeckEditorShop.java index 010bd2b87b9..87e096927e6 100644 --- a/src/main/java/forge/gui/deckeditor/DeckEditorShop.java +++ b/src/main/java/forge/gui/deckeditor/DeckEditorShop.java @@ -25,6 +25,7 @@ import forge.card.CardPoolView; import forge.card.CardPrinted; import forge.deck.Deck; import forge.error.ErrorViewer; +import forge.game.GameType; import forge.gui.GuiUtils; import forge.quest.data.QuestData; import forge.view.swing.OldGuiNewGame; @@ -93,7 +94,7 @@ public final class DeckEditorShop extends DeckEditorBase { CardPoolView owned = questData.getCards().getCardpool().getView(); //newCardsList = questData.getCards().getNewCards(); - setDecks(forSale, owned); + setDeck(forSale, owned, GameType.Quest); double multiPercent = multiplier * 100; NumberFormat formatter = new DecimalFormat("#0.00"); @@ -162,6 +163,7 @@ public final class DeckEditorShop extends DeckEditorBase { * a {@link forge.quest.data.QuestData} object. */ public DeckEditorShop(final QuestData qd) { + super(GameType.Quest); questData = qd; try { filterBoxes = null; diff --git a/src/main/java/forge/gui/deckeditor/TableWithCards.java b/src/main/java/forge/gui/deckeditor/TableWithCards.java index f8c8bc3d66d..432c841fb4f 100644 --- a/src/main/java/forge/gui/deckeditor/TableWithCards.java +++ b/src/main/java/forge/gui/deckeditor/TableWithCards.java @@ -105,8 +105,10 @@ public final class TableWithCards { return show.toString(); } // getStats() - public void sort(final int iCol, final boolean isAsc) { + public TableWithCards sort(final int iCol) { return sort(iCol, true); } + public TableWithCards sort(final int iCol, final boolean isAsc) { model.sort(iCol, isAsc); + return this; } // Call this after deleting an item from table diff --git a/src/main/java/forge/view/swing/ApplicationView.java b/src/main/java/forge/view/swing/ApplicationView.java index ee7dd1f1f37..8cf580f3d5f 100644 --- a/src/main/java/forge/view/swing/ApplicationView.java +++ b/src/main/java/forge/view/swing/ApplicationView.java @@ -14,6 +14,7 @@ import forge.ComputerAI_Input; import forge.Constant; import forge.ImageCache; import forge.error.ErrorViewer; +import forge.game.GameType; import forge.model.FModel; import forge.properties.ForgePreferences; import forge.view.FView; @@ -123,7 +124,7 @@ public class ApplicationView implements FView { if(!splashFrame.getSplashHasBeenClosed()) { try { - Constant.Runtime.GameType[0] = Constant.GameType.Constructed; + Constant.Runtime.gameType = GameType.Constructed; SwingUtilities.invokeLater(new Runnable() { // NOPMD by Braids on 8/7/11 1:07 PM: this isn't a web app public void run() { AllZone.setComputer(new ComputerAI_Input(new ComputerAI_General())); diff --git a/src/main/java/forge/view/swing/OldGuiNewGame.java b/src/main/java/forge/view/swing/OldGuiNewGame.java index d747a82cb4a..d32c6db56a3 100644 --- a/src/main/java/forge/view/swing/OldGuiNewGame.java +++ b/src/main/java/forge/view/swing/OldGuiNewGame.java @@ -9,6 +9,7 @@ import forge.deck.DeckManager; import forge.deck.generate.*; import forge.error.BugzReporter; import forge.error.ErrorViewer; +import forge.game.GameType; import forge.game.limited.BoosterDraft_1; import forge.game.limited.SealedDeck; import forge.gui.GuiUtils; @@ -58,8 +59,6 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. private final DeckManager deckManager = AllZone.getDeckManager(); // with the new IO, there's no reason to use different instances private List allDecks; - /** Constant editor. */ - private static DeckEditor editor; private JLabel titleLabel = new JLabel(); private JLabel jLabel2 = new JLabel(); @@ -131,7 +130,6 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. public OldGuiNewGame() { AllZone.setQuestData(null); - allDecks = getDecks(); if (Constant.Runtime.width[0] == 0) { Constant.Runtime.width[0] = 70; @@ -155,15 +153,15 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. ErrorViewer.showError(ex); } - if (Constant.Runtime.GameType[0].equals(Constant.GameType.Constructed)) { + if (Constant.Runtime.gameType.equals(GameType.Constructed)) { singleRadioButton.setSelected(true); updateDeckComboBoxes(); } - if (Constant.Runtime.GameType[0].equals(Constant.GameType.Sealed)) { + if (Constant.Runtime.gameType.equals(GameType.Sealed)) { sealedRadioButton.setSelected(true); updateDeckComboBoxes(); } - if (Constant.Runtime.GameType[0].equals(Constant.GameType.Draft)) { + if (Constant.Runtime.gameType.equals(GameType.Draft)) { draftRadioButton.setSelected(true); draftRadioButtonActionPerformed(null); } @@ -291,7 +289,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. *

*/ private void setupSealed() { - Deck deck = new Deck(Constant.GameType.Sealed); + Deck deck = new Deck(GameType.Sealed); // ReadBoosterPack booster = new ReadBoosterPack(); // CardList pack = booster.getBoosterPack5(); @@ -338,23 +336,22 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. String sDeckName = JOptionPane.showInputDialog(null, ForgeProps.getLocalized(NEW_GAME_TEXT.SAVE_SEALED_MSG), ForgeProps.getLocalized(NEW_GAME_TEXT.SAVE_SEALED_TTL), JOptionPane.QUESTION_MESSAGE); + deck.setName(sDeckName); deck.setPlayerType(PlayerType.HUMAN); Constant.Runtime.HumanDeck[0] = deck; - Constant.Runtime.GameType[0] = Constant.GameType.Sealed; + Constant.Runtime.gameType = GameType.Sealed; Deck aiDeck = sd.buildAIDeck(sDeck.toForgeCardList()); aiDeck.setName("AI_" + sDeckName); aiDeck.setPlayerType(PlayerType.COMPUTER); deckManager.addDeck(aiDeck); - deckManager.writeAllDecks(); - deckManager.readAllDecks(); + DeckManager.writeDeck(aiDeck, DeckManager.makeFileName(aiDeck)); updateDeckComboBoxes(); - deckEditorButtonActionPerformed(null); - editor.customMenu.setCurrentGameType(Constant.GameType.Sealed); - editor.customMenu.showSealedDeck(deck); + deckEditorButtonActionPerformed(GameType.Sealed, deck); + Constant.Runtime.ComputerDeck[0] = aiDeck; } else { @@ -456,12 +453,6 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. jLabel2.setText(ForgeProps.getLocalized(NEW_GAME_TEXT.YOURDECK)); jLabel3.setText(ForgeProps.getLocalized(NEW_GAME_TEXT.OPPONENT)); - humanComboBox.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(final ActionEvent e) { - humanComboBoxActionPerformed(e); - } - }); - /* * Settings Panel */ @@ -511,7 +502,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. deckEditorButton.setText(ForgeProps.getLocalized(NEW_GAME_TEXT.DECK_EDITOR)); deckEditorButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(final ActionEvent e) { - deckEditorButtonActionPerformed(e); + deckEditorButtonActionPerformed(GameType.Constructed, null); } }); @@ -626,35 +617,28 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. * @param e * a {@link java.awt.event.ActionEvent} object. */ - final void deckEditorButtonActionPerformed(final ActionEvent e) { - if (editor == null) { + final void deckEditorButtonActionPerformed(final GameType gt, final Deck deck) { - editor = new DeckEditor(); + DeckEditor editor = new DeckEditor(gt); - Command exit = new Command() { - private static final long serialVersionUID = -9133358399503226853L; - - public void execute() { - new OldGuiNewGame(); - } - }; - editor.show(exit); - editor.setVisible(true); - } // if - - // refresh decks: - allDecks = getDecks(); - - // TODO (TO have DOne) - this seems hacky. If someone knows how to do - // this for real, feel free. - // This make it so the second time you open the Deck Editor, typing a - // card name and pressing enter will filter - //javax.swing.JRootPane rootPane = editor.getRootPane(); - //rootPane.setDefaultButton(editor.filterButton); + Command exit = new Command() { + private static final long serialVersionUID = -9133358399503226853L; + public void execute() { + + updateDeckComboBoxes(); + OldGuiNewGame.this.setVisible(true); + } + }; + + editor.show(exit); + + if (deck != null) { + editor.customMenu.showDeck(deck, gt); + } + + this.setVisible(false); editor.setVisible(true); - - dispose(); } /** @@ -697,9 +681,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. if (draftRadioButton.isSelected()) { if (human.equals("New Draft")) { dispose(); - setupDraft(); - return; } else { @@ -732,9 +714,9 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. } } else { // non-draft decks - String format = Constant.Runtime.GameType[0]; - // boolean sealed = Constant.GameType.Sealed.equals(format); - boolean constructed = Constant.GameType.Constructed.equals(format); + GameType format = Constant.Runtime.gameType; + // boolean sealed = GameType.Sealed.equals(format); + boolean constructed = GameType.Constructed.equals(format); boolean humanGenerate = human.equals("Generate Deck"); boolean humanRandom = human.equals("Random"); @@ -857,7 +839,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. private Deck generateConstructedDeck() { GenerateConstructedDeck gen = new GenerateConstructedDeck(); CardList name = gen.generateDeck(); - Deck deck = new Deck(Constant.GameType.Constructed); + Deck deck = new Deck(GameType.Constructed); for (int i = 0; i < 60; i++) { deck.addMain(name.get(i).getName()); @@ -875,7 +857,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. private Deck generateConstructed3ColorDeck() { GenerateConstructedMultiColorDeck gen = new GenerateConstructedMultiColorDeck(); CardList name = gen.generate3ColorDeck(); - Deck deck = new Deck(Constant.GameType.Constructed); + Deck deck = new Deck(GameType.Constructed); for (int i = 0; i < 60; i++) { deck.addMain(name.get(i).getName()); @@ -893,7 +875,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. private Deck generateConstructed5ColorDeck() { GenerateConstructedMultiColorDeck gen = new GenerateConstructedMultiColorDeck(); CardList name = gen.generate5ColorDeck(); - Deck deck = new Deck(Constant.GameType.Constructed); + Deck deck = new Deck(GameType.Constructed); for (int i = 0; i < 60; i++) { deck.addMain(name.get(i).getName()); @@ -923,7 +905,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. } CardList td = gen.getThemeDeck(stDeck, 60); - Deck deck = new Deck(Constant.GameType.Constructed); + Deck deck = new Deck(GameType.Constructed); for (int i = 0; i < td.size(); i++) { deck.addMain(td.get(i).getName()); @@ -977,7 +959,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. Generate2ColorDeck gen = new Generate2ColorDeck(c1, c2); CardList d = gen.get2ColorDeck(60, p); - Deck deck = new Deck(Constant.GameType.Constructed); + Deck deck = new Deck(GameType.Constructed); for (int i = 0; i < d.size(); i++) { deck.addMain(d.get(i).getName()); @@ -1043,7 +1025,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. Generate3ColorDeck gen = new Generate3ColorDeck(c1, c2, c3); CardList d = gen.get3ColorDeck(60, p); - Deck deck = new Deck(Constant.GameType.Constructed); + Deck deck = new Deck(GameType.Constructed); for (int i = 0; i < d.size(); i++) { deck.addMain(d.get(i).getName()); @@ -1077,7 +1059,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. Generate5ColorDeck gen = new Generate5ColorDeck("white", "blue", "black", "red", "green"); CardList d = gen.get5ColorDeck(60, p); - Deck deck = new Deck(Constant.GameType.Constructed); + Deck deck = new Deck(GameType.Constructed); for (int i = 0; i < d.size(); i++) { deck.addMain(d.get(i).getName()); @@ -1096,7 +1078,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. * a {@link java.awt.event.ActionEvent} object. */ final void singleRadioButtonActionPerformed(final ActionEvent e) { - Constant.Runtime.GameType[0] = Constant.GameType.Constructed; + Constant.Runtime.gameType = GameType.Constructed; updateDeckComboBoxes(); } @@ -1109,7 +1091,7 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. * a {@link java.awt.event.ActionEvent} object. */ final void sealedRadioButtonActionPerformed(final ActionEvent e) { - Constant.Runtime.GameType[0] = Constant.GameType.Sealed; + Constant.Runtime.gameType = GameType.Sealed; updateDeckComboBoxes(); } @@ -1122,20 +1104,21 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. humanComboBox.removeAllItems(); computerComboBox.removeAllItems(); - if (Constant.GameType.Sealed.equals(Constant.Runtime.GameType[0])) { + allDecks = getDecks(); + switch(Constant.Runtime.gameType) + { + case Sealed: humanComboBox.addItem("New Sealed"); computerComboBox.addItem("New Sealed"); for (Deck allDeck : allDecks) { - if (allDeck.getDeckType().equals(Constant.GameType.Sealed)) { - if (allDeck.getPlayerType() == PlayerType.HUMAN) { - humanComboBox.addItem(allDeck.getName()); - } else if (allDeck.getPlayerType() == PlayerType.COMPUTER) { - computerComboBox.addItem(allDeck.getName()); - } + if (allDeck.getDeckType().equals(GameType.Sealed)) { + JComboBox boxToAdd = allDeck.getPlayerType() == PlayerType.COMPUTER ? computerComboBox : humanComboBox; + boxToAdd.addItem(allDeck.getName()); } } // for - } else if (Constant.GameType.Constructed.equals(Constant.Runtime.GameType[0])) { + break; + case Constructed: humanComboBox.addItem("Generate Deck"); computerComboBox.addItem("Generate Deck"); @@ -1143,11 +1126,25 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. computerComboBox.addItem("Random"); for (Deck allDeck : allDecks) { - if (allDeck.getDeckType().equals(Constant.GameType.Constructed)) { + if (allDeck.getDeckType().equals(GameType.Constructed)) { humanComboBox.addItem(allDeck.getName()); computerComboBox.addItem(allDeck.getName()); } } // for + break; + case Draft: + humanComboBox.addItem("New Draft"); + Object[] key = deckManager.getDraftDecks().keySet().toArray(); + Arrays.sort(key); + + for (Object aKey : key) { + humanComboBox.addItem(aKey); + } + + for (int i = 0; i < 7; i++) { + computerComboBox.addItem("" + (i + 1)); + } + break; } // not sure if the code below is useful or not // this will select the deck that you previously used @@ -1166,11 +1163,11 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. * a {@link java.lang.String} object. * @return an array of {@link forge.deck.Deck} objects. */ - final Deck[] getDecks(final String gameType) { + final Deck[] getDecks(final GameType gameType) { ArrayList list = new ArrayList(); Deck d; - for (Deck allDeck : allDecks) { + for (Deck allDeck : deckManager.getDecks()) { d = allDeck; if (d.getDeckType().equals(gameType)) { @@ -1185,44 +1182,12 @@ public class OldGuiNewGame extends JFrame implements NewConstants, NewConstants. return out; } // getDecks() - /** - *

- * draftRadioButton_actionPerformed. - *

- * - * @param e - * a {@link java.awt.event.ActionEvent} object. - */ + final void draftRadioButtonActionPerformed(final ActionEvent e) { - Constant.Runtime.GameType[0] = Constant.GameType.Draft; - humanComboBox.removeAllItems(); - computerComboBox.removeAllItems(); - - humanComboBox.addItem("New Draft"); - Object[] key = deckManager.getDraftDecks().keySet().toArray(); - Arrays.sort(key); - - for (Object aKey : key) { - humanComboBox.addItem(aKey); - } - - for (int i = 0; i < 7; i++) { - computerComboBox.addItem("" + (i + 1)); - } + Constant.Runtime.gameType = GameType.Draft; + updateDeckComboBoxes(); } - /** - *

- * humanComboBox_actionPerformed. - *

- * - * @param e - * a {@link java.awt.event.ActionEvent} object. - */ - void humanComboBoxActionPerformed(final ActionEvent e) { - - } /* draftRadioButton_actionPerformed() */ - /** * * @author dhudson diff --git a/src/test/java/forge/GuiBoosterDraftTest.java b/src/test/java/forge/GuiBoosterDraftTest.java index 733b1340302..07fb1b7bca3 100644 --- a/src/test/java/forge/GuiBoosterDraftTest.java +++ b/src/test/java/forge/GuiBoosterDraftTest.java @@ -1,6 +1,7 @@ package forge; import forge.deck.Deck; +import forge.game.GameType; import forge.game.limited.BoosterDraft_1; import forge.gui.deckeditor.DeckEditorDraft; @@ -20,8 +21,8 @@ public class GuiBoosterDraftTest { */ @Test(groups = {"UnitTest", "fast"}) public void GuiBoosterDraftTest1() { - Constant.Runtime.GameType[0] = Constant.GameType.Draft; - Constant.Runtime.HumanDeck[0] = new Deck(Constant.GameType.Sealed); + Constant.Runtime.gameType = GameType.Draft; + Constant.Runtime.HumanDeck[0] = new Deck(GameType.Sealed); DeckEditorDraft g = new DeckEditorDraft(); g.showGui(new BoosterDraft_1());