diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java index 8b17e91daff..583f7d6e2f2 100644 --- a/src/main/java/forge/control/FControl.java +++ b/src/main/java/forge/control/FControl.java @@ -67,26 +67,21 @@ public enum FControl { private List shortcuts; private JLayeredPane display; - private int state = -1; + private Screens state = Screens.UNKNOWN; private WindowListener waDefault, waConcede, waLeaveBazaar, waLeaveEditor; - /** */ - public static final int HOME_SCREEN = 0; - /** */ - public static final int MATCH_SCREEN = 1; - /** */ - public static final int DECK_EDITOR_CONSTRUCTED = 2; - /** */ - public static final int QUEST_BAZAAR = 3; - /** */ - public static final int DECK_EDITOR_LIMITED = 4; - /** */ - public static final int DECK_EDITOR_QUEST = 5; - /** */ - public static final int QUEST_CARD_SHOP = 6; - /** */ - public static final int DRAFTING_PROCESS = 7; + public static enum Screens { + UNKNOWN, + HOME_SCREEN, + MATCH_SCREEN, + DECK_EDITOR_CONSTRUCTED, + QUEST_BAZAAR, + DECK_EDITOR_LIMITED, + DECK_EDITOR_QUEST, + QUEST_CARD_SHOP, + DRAFTING_PROCESS + } private final SoundSystem soundSystem = new SoundSystem(); @@ -127,7 +122,7 @@ public enum FControl { Singletons.getView().getFrame().setDefaultCloseOperation( WindowConstants.DO_NOTHING_ON_CLOSE); - changeState(FControl.HOME_SCREEN); + changeState(Screens.HOME_SCREEN); } }; @@ -137,7 +132,7 @@ public enum FControl { Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); if (CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().exit()) { - changeState(FControl.HOME_SCREEN); + changeState(Screens.HOME_SCREEN); } } }; @@ -185,17 +180,11 @@ public enum FControl { } /** - *

- * changeState. - *

* Switches between display states in top level JFrame. - * - * @param i0 - *   State index: 0 for home, 1 for match, etc. */ - public void changeState(final int i0) { + public void changeState(Screens screen) { clearChildren(JLayeredPane.DEFAULT_LAYER); - this.state = i0; + this.state = screen; Singletons.getView().getFrame().removeWindowListener(waDefault); Singletons.getView().getFrame().removeWindowListener(waConcede); @@ -203,7 +192,7 @@ public enum FControl { Singletons.getView().getFrame().removeWindowListener(waLeaveEditor); // Fire up new state - switch (i0) { + switch (screen) { case HOME_SCREEN: SOverlayUtils.hideTargetingOverlay(); VHomeUI.SINGLETON_INSTANCE.populate(); @@ -242,6 +231,7 @@ public enum FControl { break; default: + throw new RuntimeException("unhandled screen: " + screen); } } @@ -251,7 +241,7 @@ public enum FControl { * * @return {@link java.lang.Integer} * */ - public int getState() { + public Screens getState() { return this.state; } @@ -313,7 +303,6 @@ public enum FControl { * @return */ public SoundSystem getSoundSystem() { - // TODO Auto-generated method stub return soundSystem; } } diff --git a/src/main/java/forge/control/KeyboardShortcuts.java b/src/main/java/forge/control/KeyboardShortcuts.java index 1b041e16f88..c8a2e16daff 100644 --- a/src/main/java/forge/control/KeyboardShortcuts.java +++ b/src/main/java/forge/control/KeyboardShortcuts.java @@ -50,7 +50,7 @@ public class KeyboardShortcuts { final Action actShowStack = new AbstractAction() { @Override public void actionPerformed(final ActionEvent e) { - if (Singletons.getControl().getState() != 1) { return; } + if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; } SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc()); } }; @@ -59,7 +59,7 @@ public class KeyboardShortcuts { final Action actShowCombat = new AbstractAction() { @Override public void actionPerformed(final ActionEvent e) { - if (Singletons.getControl().getState() != 1) { return; } + if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; } SDisplayUtil.showTab(EDocID.REPORT_COMBAT.getDoc()); } }; @@ -68,7 +68,7 @@ public class KeyboardShortcuts { final Action actShowConsole = new AbstractAction() { @Override public void actionPerformed(final ActionEvent e) { - if (Singletons.getControl().getState() != 1) { return; } + if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; } SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc()); } }; @@ -77,7 +77,7 @@ public class KeyboardShortcuts { final Action actShowPlayers = new AbstractAction() { @Override public void actionPerformed(final ActionEvent e) { - if (Singletons.getControl().getState() != 1) { return; } + if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; } SDisplayUtil.showTab(EDocID.REPORT_PLAYERS.getDoc()); } }; @@ -86,7 +86,7 @@ public class KeyboardShortcuts { final Action actShowDev = new AbstractAction() { @Override public void actionPerformed(final ActionEvent e) { - if (Singletons.getControl().getState() != 1) { return; } + if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; } if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_MODE_ENABLED)) { SDisplayUtil.showTab(EDocID.DEV_MODE.getDoc()); } @@ -97,7 +97,7 @@ public class KeyboardShortcuts { final Action actConcede = new AbstractAction() { @Override public void actionPerformed(final ActionEvent e) { - if (Singletons.getControl().getState() != 1) { return; } + if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; } CDock.SINGLETON_INSTANCE.concede(); } }; @@ -106,7 +106,7 @@ public class KeyboardShortcuts { final Action actEndTurn = new AbstractAction() { @Override public void actionPerformed(final ActionEvent e) { - if (Singletons.getControl().getState() != 1) { return; } + if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; } CDock.SINGLETON_INSTANCE.endTurn(); } }; @@ -115,7 +115,7 @@ public class KeyboardShortcuts { final Action actAllAttack = new AbstractAction() { @Override public void actionPerformed(final ActionEvent e) { - if (Singletons.getControl().getState() != 1) { return; } + if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; } CDock.SINGLETON_INSTANCE.alphaStrike(); } }; @@ -124,7 +124,7 @@ public class KeyboardShortcuts { final Action actTgtOverlay = new AbstractAction() { @Override public void actionPerformed(final ActionEvent e) { - if (Singletons.getControl().getState() != 1) { return; } + if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; } CDock.SINGLETON_INSTANCE.toggleTargeting(); } }; diff --git a/src/main/java/forge/game/MatchController.java b/src/main/java/forge/game/MatchController.java index 7e5f8ca5caf..0ec2ff3675a 100644 --- a/src/main/java/forge/game/MatchController.java +++ b/src/main/java/forge/game/MatchController.java @@ -146,7 +146,7 @@ public class MatchController { CMatchUI.SINGLETON_INSTANCE.initMatch(currentGame.getRegisteredPlayers(), localHuman); CDock.SINGLETON_INSTANCE.onGameStarts(currentGame, localHuman); Singletons.getModel().getPreferences().actuateMatchPreferences(); - Singletons.getControl().changeState(FControl.MATCH_SCREEN); + Singletons.getControl().changeState(FControl.Screens.MATCH_SCREEN); SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc()); // set all observers diff --git a/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java b/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java index 488f507260e..ca364fb93df 100644 --- a/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java +++ b/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java @@ -51,6 +51,7 @@ import forge.gui.CardContainer; import forge.gui.GuiUtils; import forge.gui.deckeditor.SEditorIO.EditorPreference; import forge.gui.deckeditor.controllers.ACEditorBase; +import forge.gui.deckeditor.controllers.CCardCatalog; import forge.gui.deckeditor.controllers.CProbabilities; import forge.gui.deckeditor.controllers.CStatistics; import forge.gui.deckeditor.tables.EditorTableModel; @@ -125,6 +126,7 @@ public enum CDeckEditorUI implements CardContainer { childController.getTableDeck().setWantElasticColumns(wantElastic); childController.getTableCatalog().setWantUnique(wantUnique); childController.getTableDeck().setWantUnique(wantUnique); + CCardCatalog.SINGLETON_INSTANCE.applyCurrentFilter(); } } diff --git a/src/main/java/forge/gui/deckeditor/VDeckEditorUI.java b/src/main/java/forge/gui/deckeditor/VDeckEditorUI.java index 6f4e7b39532..237fcd961d5 100644 --- a/src/main/java/forge/gui/deckeditor/VDeckEditorUI.java +++ b/src/main/java/forge/gui/deckeditor/VDeckEditorUI.java @@ -1,8 +1,7 @@ package forge.gui.deckeditor; -import javax.swing.SwingWorker; +import javax.swing.SwingUtilities; -import forge.gui.deckeditor.controllers.CCardCatalog; import forge.gui.deckeditor.views.VCardCatalog; import forge.gui.framework.IVTopLevelUI; import forge.gui.framework.SLayoutIO; @@ -33,15 +32,12 @@ public enum VDeckEditorUI implements IVTopLevelUI { */ @Override public void populate() { - final SwingWorker w = new SwingWorker() { + SLayoutIO.loadLayout(null); + SwingUtilities.invokeLater(new Runnable() { @Override - public Void doInBackground() { - SLayoutIO.loadLayout(null); + public void run() { VCardCatalog.SINGLETON_INSTANCE.focusTable(); - return null; } - }; - CCardCatalog.SINGLETON_INSTANCE.applyCurrentFilter(); - w.execute(); + }); } } diff --git a/src/main/java/forge/gui/deckeditor/controllers/ACEditorBase.java b/src/main/java/forge/gui/deckeditor/controllers/ACEditorBase.java index ceb9f8b94ae..ad851e5f17e 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/ACEditorBase.java +++ b/src/main/java/forge/gui/deckeditor/controllers/ACEditorBase.java @@ -17,10 +17,17 @@ */ package forge.gui.deckeditor.controllers; +import javax.swing.SwingUtilities; + import forge.deck.DeckBase; import forge.gui.deckeditor.tables.DeckController; import forge.gui.deckeditor.tables.EditorTableView; +import forge.gui.framework.DragCell; +import forge.gui.framework.ICDoc; +import forge.gui.framework.IVDoc; +import forge.gui.framework.SRearrangingUtil; import forge.item.InventoryItem; +import forge.view.FView; /** * Maintains a generically typed architecture for various editing @@ -38,7 +45,6 @@ import forge.item.InventoryItem; * @param extends {@link forge.deck.DeckBase} */ public abstract class ACEditorBase { - public interface ContextMenuBuilder { /** * Adds move-related items to the context menu @@ -130,4 +136,33 @@ public abstract class ACEditorBase tab) { + final DragCell parent; + if (tab.getParentCell() == null) { + parent = null; + } else { + parent = tab.getParentCell(); + parent.removeDoc(tab); + tab.setParentCell(null); + + if (parent.getDocs().size() > 0) { + // if specified tab was first child of its parent, the new first tab needs re-selecting. + parent.setSelected(parent.getDocs().get(0)); + } else { + // if the parent is now childless, fill in the resultant gap + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + SRearrangingUtil.fillGap(parent); + FView.SINGLETON_INSTANCE.removeDragCell(parent); + } + }); + } + } + + return parent; + } } diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java index fa07eab0d55..69373b036b1 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorDraftingProcess.java @@ -19,7 +19,6 @@ package forge.gui.deckeditor.controllers; import javax.swing.JOptionPane; import javax.swing.ListSelectionModel; -import javax.swing.SwingUtilities; import forge.Singletons; import forge.control.FControl; @@ -37,13 +36,11 @@ import forge.gui.deckeditor.views.VCardCatalog; import forge.gui.deckeditor.views.VCurrentDeck; import forge.gui.deckeditor.views.VDeckgen; import forge.gui.framework.DragCell; -import forge.gui.framework.SRearrangingUtil; import forge.gui.home.sanctioned.CSubmenuDraft; import forge.item.CardDb; import forge.item.CardPrinted; import forge.item.InventoryItem; import forge.item.ItemPoolView; -import forge.view.FView; /** * Updates the deck editor UI as necessary draft selection mode. @@ -98,21 +95,8 @@ public class CEditorDraftingProcess extends ACEditorBase this.getTableCatalog().setup(VCardCatalog.SINGLETON_INSTANCE, SColumnUtil.getCatalogDefaultColumns()); this.getTableDeck().setup(VCurrentDeck.SINGLETON_INSTANCE, SColumnUtil.getDeckDefaultColumns()); - /* - this.getTableCatalog().getTable().addMouseListener(this.pickWithMouse); - this.getTableCatalog().getTable().addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(final KeyEvent e) { - if (e.getKeyChar() == ' ') { - CEditorDraftingProcess.this.addCard(); - } - } - }); - */ - ccAddLabel = VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().getText(); VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().setText("Choose Card"); - } /* (non-Javadoc) @@ -247,7 +231,7 @@ public class CEditorDraftingProcess extends ACEditorBase Singletons.getModel().getDecks().getDraft().add(finishedDraft); } - FControl.SINGLETON_INSTANCE.changeState(FControl.HOME_SCREEN); + FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.HOME_SCREEN); } //========== Overridden from ACEditorBase @@ -291,42 +275,11 @@ public class CEditorDraftingProcess extends ACEditorBase VCurrentDeck.SINGLETON_INSTANCE.getPnlHeader().setVisible(false); - if (VDeckgen.SINGLETON_INSTANCE.getParentCell() != null) { - deckGenParent = VDeckgen.SINGLETON_INSTANCE.getParentCell(); - deckGenParent.removeDoc(VDeckgen.SINGLETON_INSTANCE); - VDeckgen.SINGLETON_INSTANCE.setParentCell(null); - - // If Deck Gen was first tab, the new first tab needs re-selecting. - if (deckGenParent.getDocs().size() > 0) { - deckGenParent.setSelected(deckGenParent.getDocs().get(0)); - } - } - if (VAllDecks.SINGLETON_INSTANCE.getParentCell() != null) { - allDecksParent = VAllDecks.SINGLETON_INSTANCE.getParentCell(); - allDecksParent.removeDoc(VAllDecks.SINGLETON_INSTANCE); - VAllDecks.SINGLETON_INSTANCE.setParentCell(null); - - // If All Decks was first tab, the new first tab needs re-selecting. - if (allDecksParent.getDocs().size() > 0) { - allDecksParent.setSelected(allDecksParent.getDocs().get(0)); - } - } + deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE); + allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE); // set catalog table to single-selection only mode getTableCatalog().getTable().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - - // Fill in gaps - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - for (final DragCell c : FView.SINGLETON_INSTANCE.getDragCells()) { - if (c.getDocs().size() == 0) { - SRearrangingUtil.fillGap(c); - FView.SINGLETON_INSTANCE.removeDragCell(c); - } - } - } - }); } /* (non-Javadoc) @@ -357,7 +310,6 @@ public class CEditorDraftingProcess extends ACEditorBase // set catalog table back to free-selection mode getTableCatalog().getTable().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - return true; } } diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java index 00a49df9a03..0a14696316f 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorLimited.java @@ -27,8 +27,11 @@ import forge.gui.deckeditor.SEditorUtil; import forge.gui.deckeditor.tables.DeckController; import forge.gui.deckeditor.tables.EditorTableView; import forge.gui.deckeditor.tables.SColumnUtil; +import forge.gui.deckeditor.views.VAllDecks; import forge.gui.deckeditor.views.VCardCatalog; import forge.gui.deckeditor.views.VCurrentDeck; +import forge.gui.deckeditor.views.VDeckgen; +import forge.gui.framework.DragCell; import forge.gui.home.sanctioned.CSubmenuDraft; import forge.gui.home.sanctioned.CSubmenuSealed; import forge.item.CardPrinted; @@ -46,6 +49,8 @@ import forge.util.IStorage; public final class CEditorLimited extends ACEditorBase { private final DeckController controller; + private DragCell allDecksParent = null; + private DragCell deckGenParent = null; //========== Constructor @@ -169,6 +174,9 @@ public final class CEditorLimited extends ACEditorBase { VCardCatalog.SINGLETON_INSTANCE.getPnlHeader().setVisible(true); VCardCatalog.SINGLETON_INSTANCE.getLblTitle().setText("Deck Editor: Limited Mode"); + + deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE); + allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE); } /* (non-Javadoc) @@ -181,6 +189,15 @@ public final class CEditorLimited extends ACEditorBase { if (okToExit) { CSubmenuDraft.SINGLETON_INSTANCE.update(); CSubmenuSealed.SINGLETON_INSTANCE.update(); + + //Re-add tabs + if (deckGenParent != null) { + deckGenParent.addDoc(VDeckgen.SINGLETON_INSTANCE); + } + if (allDecksParent != null) { + allDecksParent.addDoc(VAllDecks.SINGLETON_INSTANCE); + } + } return okToExit; diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java index 7e0c0388f3b..7c8e69577f7 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuest.java @@ -37,8 +37,11 @@ import forge.gui.deckeditor.tables.EditorTableView; import forge.gui.deckeditor.tables.SColumnUtil; import forge.gui.deckeditor.tables.SColumnUtil.ColumnName; import forge.gui.deckeditor.tables.TableColumnInfo; +import forge.gui.deckeditor.views.VAllDecks; import forge.gui.deckeditor.views.VCardCatalog; import forge.gui.deckeditor.views.VCurrentDeck; +import forge.gui.deckeditor.views.VDeckgen; +import forge.gui.framework.DragCell; import forge.gui.home.quest.CSubmenuQuestDecks; import forge.gui.toolbox.FLabel; import forge.item.CardPrinted; @@ -61,6 +64,8 @@ import forge.quest.QuestController; public final class CEditorQuest extends ACEditorBase { private final QuestController questData; private final DeckController controller; + private DragCell allDecksParent = null; + private DragCell deckGenParent = null; private boolean sideboardMode = false; private Map decksUsingMyCards; @@ -68,7 +73,7 @@ public final class CEditorQuest extends ACEditorBase { private final Function, Comparable> fnDeckCompare = new Function, Comparable>() { @Override public Comparable apply(final Entry from) { - final Integer iValue = CEditorQuest.this.decksUsingMyCards.get(from.getKey()); + final Integer iValue = decksUsingMyCards.get(from.getKey()); return iValue == null ? Integer.valueOf(0) : iValue; } }; @@ -76,7 +81,7 @@ public final class CEditorQuest extends ACEditorBase { private final Function, Object> fnDeckGet = new Function, Object>() { @Override public Object apply(final Entry from) { - final Integer iValue = CEditorQuest.this.decksUsingMyCards.get(from.getKey()); + final Integer iValue = decksUsingMyCards.get(from.getKey()); return iValue == null ? "" : iValue.toString(); } }; @@ -289,6 +294,9 @@ public final class CEditorQuest extends ACEditorBase { sideboardMode = !sideboardMode; switchEditorMode(sideboardMode); } }); + + deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE); + allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE); this.getDeckController().setModel(deck); } @@ -302,6 +310,14 @@ public final class CEditorQuest extends ACEditorBase { if (okToExit) { Singletons.getModel().getQuest().save(); CSubmenuQuestDecks.SINGLETON_INSTANCE.update(); + //Re-add tabs + if (deckGenParent != null) { + deckGenParent.addDoc(VDeckgen.SINGLETON_INSTANCE); + } + if (allDecksParent != null) { + allDecksParent.addDoc(VAllDecks.SINGLETON_INSTANCE); + } + } return okToExit; } diff --git a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java index 6fba21a8106..0d13c615ef8 100644 --- a/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java +++ b/src/main/java/forge/gui/deckeditor/controllers/CEditorQuestCardShop.java @@ -43,8 +43,11 @@ import forge.gui.deckeditor.tables.EditorTableView; import forge.gui.deckeditor.tables.SColumnUtil; import forge.gui.deckeditor.tables.SColumnUtil.ColumnName; import forge.gui.deckeditor.tables.TableColumnInfo; +import forge.gui.deckeditor.views.VAllDecks; import forge.gui.deckeditor.views.VCardCatalog; import forge.gui.deckeditor.views.VCurrentDeck; +import forge.gui.deckeditor.views.VDeckgen; +import forge.gui.framework.DragCell; import forge.gui.home.quest.CSubmenuQuestDecks; import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FSkin; @@ -95,6 +98,8 @@ public final class CEditorQuestCardShop extends ACEditorBase fullCatalogCards = ItemPool.createFrom(CardDb.instance().getAllTraditionalCards(), InventoryItem.class); private boolean showingFullCatalog = false; + private DragCell allDecksParent = null; + private DragCell deckGenParent = null; // get pricelist: private final ReadPriceList r = new ReadPriceList(); @@ -484,6 +489,9 @@ public final class CEditorQuestCardShop extends ACEditorBase" + maxSellingPrice + ""); VCardCatalog.SINGLETON_INSTANCE.getStatLabel(SEditorUtil.StatTypes.PACK).setVisible(true); + + deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE); + allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE); } /* (non-Javadoc) @@ -516,6 +524,14 @@ public final class CEditorQuestCardShop extends ACEditorBase { private final DeckController controller; + private DragCell allDecksParent = null; + private DragCell deckGenParent = null; private final Predicate cardPoolCondition; private final EDocID exitToScreen; @@ -165,6 +170,9 @@ public final class CEditorVariant extends ACEditorBase { this.getTableDeck().setup(VCurrentDeck.SINGLETON_INSTANCE, SColumnUtil.getDeckDefaultColumns()); SEditorUtil.resetUI(); + + deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE); + allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE); this.controller.newModel(); } @@ -177,6 +185,19 @@ public final class CEditorVariant extends ACEditorBase { // Override the submenu save choice - tell it to go to "constructed". Singletons.getModel().getPreferences().setPref(FPref.SUBMENU_CURRENTMENU, exitToScreen.toString()); - return SEditorIO.confirmSaveChanges(); + if (!SEditorIO.confirmSaveChanges()) + { + return false; + } + + //Re-add tabs + if (deckGenParent != null) { + deckGenParent.addDoc(VDeckgen.SINGLETON_INSTANCE); + } + if (allDecksParent != null) { + allDecksParent.addDoc(VAllDecks.SINGLETON_INSTANCE); + } + + return true; } } diff --git a/src/main/java/forge/gui/framework/SLayoutIO.java b/src/main/java/forge/gui/framework/SLayoutIO.java index cdab42c7924..d46d4d0b686 100644 --- a/src/main/java/forge/gui/framework/SLayoutIO.java +++ b/src/main/java/forge/gui/framework/SLayoutIO.java @@ -220,23 +220,23 @@ public final class SLayoutIO { final String dir = NewConstants.LAYOUT_DIR; switch(FControl.SINGLETON_INSTANCE.getState()) { - case FControl.HOME_SCREEN: + case HOME_SCREEN: fileDefault = dir + "home_default.xml"; filePreferred = dir + "home_preferred.xml"; break; - case FControl.MATCH_SCREEN: + case MATCH_SCREEN: fileDefault = dir + "match_default.xml"; filePreferred = dir + "match_preferred.xml"; break; - case FControl.DECK_EDITOR_CONSTRUCTED: - case FControl.DECK_EDITOR_LIMITED: - case FControl.DECK_EDITOR_QUEST: - case FControl.DRAFTING_PROCESS: - case FControl.QUEST_CARD_SHOP: + case DECK_EDITOR_CONSTRUCTED: + case DECK_EDITOR_LIMITED: + case DECK_EDITOR_QUEST: + case DRAFTING_PROCESS: + case QUEST_CARD_SHOP: fileDefault = dir + "editor_default.xml"; filePreferred = dir + "editor_preferred.xml"; break; - case FControl.QUEST_BAZAAR: + case QUEST_BAZAAR: fileDefault = dir + "bazaar_default.xml"; filePreferred = dir + "bazaar_preferred.xml"; break; diff --git a/src/main/java/forge/gui/home/CHomeUI.java b/src/main/java/forge/gui/home/CHomeUI.java index d59184a338f..3346c406173 100644 --- a/src/main/java/forge/gui/home/CHomeUI.java +++ b/src/main/java/forge/gui/home/CHomeUI.java @@ -62,8 +62,8 @@ public enum CHomeUI implements ICDoc { VHomeUI.SINGLETON_INSTANCE.getLblEditor().setCommand(new Command() { @Override public void execute() { + FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_CONSTRUCTED); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorConstructed()); - FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_CONSTRUCTED); } }); diff --git a/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java b/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java index a3d5695cadb..8605771b330 100644 --- a/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java +++ b/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java @@ -49,8 +49,8 @@ public enum CSubmenuQuestDecks implements ICDoc { if (!SSubmenuQuestUtil.checkActiveQuest("Create a Deck.")) { return; } + FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_QUEST); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorQuest(Singletons.getModel().getQuest())); - FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_QUEST); } }); } diff --git a/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java b/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java index 5d9201a9cb0..8f60e1d9d1b 100644 --- a/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java +++ b/src/main/java/forge/gui/home/quest/SSubmenuQuestUtil.java @@ -250,9 +250,9 @@ public class SSubmenuQuestUtil { if (!checkActiveQuest("visit the Spell Shop.")) { return; } + FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_QUEST); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController( new CEditorQuestCardShop(Singletons.getModel().getQuest())); - FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_QUEST); } /** */ @@ -260,7 +260,7 @@ public class SSubmenuQuestUtil { if (!checkActiveQuest("Visit the Bazzar.")) { return; } - Singletons.getControl().changeState(FControl.QUEST_BAZAAR); + Singletons.getControl().changeState(FControl.Screens.QUEST_BAZAAR); Singletons.getView().getFrame().validate(); } diff --git a/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java b/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java index d0a58fc7fb2..fcdec911146 100644 --- a/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java +++ b/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java @@ -170,7 +170,7 @@ public enum CSubmenuDraft implements ICDoc { draft.showGui(new BoosterDraft(CardPoolLimitation.Custom)); } - FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_LIMITED); + FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DRAFTING_PROCESS); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(draft); } diff --git a/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java b/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java index 015762be4ba..b681d8da952 100644 --- a/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java +++ b/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java @@ -227,8 +227,8 @@ public enum CSubmenuSealed implements ICDoc { final ACEditorBase editor = (ACEditorBase) new CEditorLimited( Singletons.getModel().getDecks().getSealed()); + FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_LIMITED); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(editor); - FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_LIMITED); editor.getDeckController().setModel((T) sealed); } diff --git a/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java b/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java index 6056ae0a490..7a731c1e01c 100644 --- a/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java +++ b/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java @@ -79,8 +79,9 @@ public enum CSubmenuArchenemy implements ICDoc { }; - CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorVariant(Singletons.getModel().getDecks().getScheme(),predSchemes,EDocID.HOME_ARCHENEMY)); - FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_CONSTRUCTED); + FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_CONSTRUCTED); + CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController( + new CEditorVariant(Singletons.getModel().getDecks().getScheme(),predSchemes,EDocID.HOME_ARCHENEMY)); } }); diff --git a/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java b/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java index 9158cab3369..238cbe07f73 100644 --- a/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java +++ b/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java @@ -78,9 +78,9 @@ public enum CSubmenuPlanechase implements ICDoc { }; - CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorVariant(Singletons.getModel().getDecks().getPlane(),predPlanes,EDocID.HOME_PLANECHASE)); - FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_CONSTRUCTED); - + FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_CONSTRUCTED); + CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController( + new CEditorVariant(Singletons.getModel().getDecks().getPlane(), predPlanes, EDocID.HOME_PLANECHASE)); } }); diff --git a/src/main/java/forge/gui/match/ControlWinLose.java b/src/main/java/forge/gui/match/ControlWinLose.java index 2695e8f3ffa..d841ae800ae 100644 --- a/src/main/java/forge/gui/match/ControlWinLose.java +++ b/src/main/java/forge/gui/match/ControlWinLose.java @@ -91,7 +91,7 @@ public class ControlWinLose { public void actionOnQuit() { // Reset other stuff saveOptions(); - Singletons.getControl().changeState(FControl.HOME_SCREEN); + Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN); SOverlayUtils.hideOverlay(); } diff --git a/src/main/java/forge/gui/match/QuestWinLose.java b/src/main/java/forge/gui/match/QuestWinLose.java index db984c67be2..aa6279464ee 100644 --- a/src/main/java/forge/gui/match/QuestWinLose.java +++ b/src/main/java/forge/gui/match/QuestWinLose.java @@ -301,7 +301,7 @@ public class QuestWinLose extends ControlWinLose { Singletons.getModel().getPreferences().writeMatchPreferences(); Singletons.getModel().getPreferences().save(); - Singletons.getControl().changeState(FControl.HOME_SCREEN); + Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN); SOverlayUtils.hideOverlay(); } diff --git a/src/main/java/forge/gui/match/TargetingOverlay.java b/src/main/java/forge/gui/match/TargetingOverlay.java index 204a653a5b0..ece87a6a359 100644 --- a/src/main/java/forge/gui/match/TargetingOverlay.java +++ b/src/main/java/forge/gui/match/TargetingOverlay.java @@ -282,7 +282,7 @@ public enum TargetingOverlay { @Override public void paintComponent(final Graphics g) { // No need for this except in match view - if (FControl.SINGLETON_INSTANCE.getState() != 1) { return; } + if (FControl.SINGLETON_INSTANCE.getState() != FControl.Screens.MATCH_SCREEN) { return; } super.paintComponent(g); diff --git a/src/main/java/forge/gui/toolbox/DeckLister.java b/src/main/java/forge/gui/toolbox/DeckLister.java index ca99fdd00de..6142157219b 100644 --- a/src/main/java/forge/gui/toolbox/DeckLister.java +++ b/src/main/java/forge/gui/toolbox/DeckLister.java @@ -425,31 +425,29 @@ public class DeckLister extends JPanel implements ILocalRepaint { switch (this.gametype) { case Quest: final CEditorQuest qEditor = new CEditorQuest(Singletons.getModel().getQuest()); - CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(qEditor); qEditor.load(d0); - FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_QUEST); + FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_QUEST); + CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(qEditor); break; case Constructed: - CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorConstructed()); - FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_CONSTRUCTED); - CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckController().load(d0.getName()); + FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_CONSTRUCTED); + final CEditorConstructed cEditor = new CEditorConstructed(); + cEditor.getDeckController().load(d0.getName()); + CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(cEditor); break; case Sealed: final ACEditorBase sEditor = (ACEditorBase) new CEditorLimited(Singletons.getModel().getDecks().getSealed()); - - CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(sEditor); - sEditor.getDeckController().load(d0.getName()); - FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_LIMITED); + FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_LIMITED); + CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(sEditor); break; case Draft: final ACEditorBase dEditor = (ACEditorBase) new CEditorLimited(Singletons.getModel().getDecks().getDraft()); - CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(dEditor); - dEditor.getDeckController().load(d0.getName()); - FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_LIMITED); + FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_LIMITED); + CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(dEditor); break; default: break; diff --git a/src/main/java/forge/view/FView.java b/src/main/java/forge/view/FView.java index 68147a21fdd..8f83ddf531b 100644 --- a/src/main/java/forge/view/FView.java +++ b/src/main/java/forge/view/FView.java @@ -107,7 +107,7 @@ public enum FView { } // All is ready to go - fire up home screen and discard splash frame. - Singletons.getControl().changeState(FControl.HOME_SCREEN); + Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN); //CMainMenu.SINGLETON_INSTANCE.selectPrevious(); FView.this.frmSplash.dispose(); @@ -203,7 +203,7 @@ public enum FView { /** @return {@link forge.view.ViewBazaarUI} */ public ViewBazaarUI getViewBazaar() { - if (Singletons.getControl().getState() != FControl.QUEST_BAZAAR) { + if (Singletons.getControl().getState() != FControl.Screens.QUEST_BAZAAR) { throw new IllegalArgumentException("FView$getViewBazaar\n" + "may only be called while the bazaar UI is showing."); }