diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java index ba546bce796..05d74e4b7c3 100644 --- a/src/main/java/forge/control/FControl.java +++ b/src/main/java/forge/control/FControl.java @@ -263,6 +263,18 @@ public enum FControl { throw new RuntimeException("unhandled screen: " + screen); } } + + public void changeStateAutoFixLayout(Screens newState, String stateName) { + try { + changeState(newState); + } catch (InvalidLayoutFileException ex) { + GuiDialog.message("Your " + stateName + " layout file could not be read. It will be deleted after you press OK.\nThe game will proceed with default layout."); + File fLayout = new File(SLayoutIO.getFilePreferred(newState)); + fLayout.delete(); + // try again + changeState(newState); + } + } /** * Returns the int reflecting the current state of the top level frame @@ -409,15 +421,7 @@ public enum FControl { Singletons.getModel().getPreferences().actuateMatchPreferences(); - try { - Singletons.getControl().changeState(Screens.MATCH_SCREEN); - } catch (InvalidLayoutFileException ex) { - GuiDialog.message("Your match layout file could not be read. It will be deleted after you press OK.\nThe game will proceed with default layout."); - File fLayout = new File(SLayoutIO.getFilePreferred(Screens.MATCH_SCREEN)); - fLayout.delete(); - // try again - Singletons.getControl().changeState(Screens.MATCH_SCREEN); - } + changeStateAutoFixLayout(Screens.MATCH_SCREEN, "match"); SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc()); CMessage.SINGLETON_INSTANCE.getInputControl().setGame(game); diff --git a/src/main/java/forge/gui/home/CHomeUI.java b/src/main/java/forge/gui/home/CHomeUI.java index ab6d4692774..b0d472e84c6 100644 --- a/src/main/java/forge/gui/home/CHomeUI.java +++ b/src/main/java/forge/gui/home/CHomeUI.java @@ -66,7 +66,7 @@ public enum CHomeUI implements ICDoc { VHomeUI.SINGLETON_INSTANCE.getLblEditor().setCommand(new Command() { @Override public void run() { - Singletons.getControl().changeState(FControl.Screens.DECK_EDITOR_CONSTRUCTED); + Singletons.getControl().changeStateAutoFixLayout(FControl.Screens.DECK_EDITOR_CONSTRUCTED, "deck editor"); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorConstructed()); } }); diff --git a/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java b/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java index 9ce3abc17a5..6cf0f6f3150 100644 --- a/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java +++ b/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java @@ -51,7 +51,7 @@ public enum CSubmenuQuestDecks implements ICDoc { if (!SSubmenuQuestUtil.checkActiveQuest("Create a Deck.")) { return; } - Singletons.getControl().changeState(FControl.Screens.DECK_EDITOR_QUEST); + Singletons.getControl().changeStateAutoFixLayout(FControl.Screens.DECK_EDITOR_QUEST, "deck editor"); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorQuest(Singletons.getModel().getQuest())); } }); diff --git a/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java b/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java index bfc457891eb..ad1ef5b92f1 100644 --- a/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java +++ b/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java @@ -207,7 +207,7 @@ public enum CSubmenuSealed implements ICDoc { final ACEditorBase editor = (ACEditorBase) new CEditorLimited( Singletons.getModel().getDecks().getSealed()); - Singletons.getControl().changeState(FControl.Screens.DECK_EDITOR_LIMITED); + Singletons.getControl().changeStateAutoFixLayout(FControl.Screens.DECK_EDITOR_LIMITED, "deck editor"); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(editor); 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 848a682008f..1ddac1a11f3 100644 --- a/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java +++ b/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java @@ -99,7 +99,7 @@ public enum CSubmenuArchenemy implements ICDoc { } }; - Singletons.getControl().changeState(FControl.Screens.DECK_EDITOR_CONSTRUCTED); + Singletons.getControl().changeStateAutoFixLayout(FControl.Screens.DECK_EDITOR_CONSTRUCTED, "deck editor"); 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 664666b241f..9497ee400b1 100644 --- a/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java +++ b/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java @@ -93,7 +93,7 @@ public enum CSubmenuPlanechase implements ICDoc { } }; - Singletons.getControl().changeState(FControl.Screens.DECK_EDITOR_CONSTRUCTED); + Singletons.getControl().changeStateAutoFixLayout(FControl.Screens.DECK_EDITOR_CONSTRUCTED, "deck editor"); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController( new CEditorVariant(Singletons.getModel().getDecks().getPlane(), predPlanes, EDocID.HOME_PLANECHASE)); } diff --git a/src/main/java/forge/gui/toolbox/DeckLister.java b/src/main/java/forge/gui/toolbox/DeckLister.java index c37b9c1bade..cb70ba67309 100644 --- a/src/main/java/forge/gui/toolbox/DeckLister.java +++ b/src/main/java/forge/gui/toolbox/DeckLister.java @@ -45,10 +45,12 @@ import forge.deck.DeckBase; import forge.deck.DeckSection; import forge.game.GameType; import forge.gui.deckeditor.CDeckEditorUI; +import forge.gui.deckeditor.controllers.ACEditorBase; import forge.gui.deckeditor.controllers.CEditorConstructed; import forge.gui.deckeditor.controllers.CEditorLimited; import forge.gui.deckeditor.controllers.CEditorQuest; import forge.gui.framework.ILocalRepaint; +import forge.item.InventoryItem; /** * Creates deck list for selected decks for quick deleting, editing, and basic @@ -420,35 +422,35 @@ public class DeckLister extends JPanel implements ILocalRepaint { } } private void editDeck(final Deck d0) { + + ACEditorBase editorCtrl = null; + FControl.Screens newState = null; + switch (this.gametype) { case Quest: - final CEditorQuest qEditor = new CEditorQuest(Singletons.getModel().getQuest()); - Singletons.getControl().changeState(FControl.Screens.DECK_EDITOR_QUEST); - CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(qEditor); - qEditor.getDeckController().load(d0.getName()); + editorCtrl = new CEditorQuest(Singletons.getModel().getQuest()); + newState = FControl.Screens.DECK_EDITOR_QUEST; break; case Constructed: - Singletons.getControl().changeState(FControl.Screens.DECK_EDITOR_CONSTRUCTED); - final CEditorConstructed cEditor = new CEditorConstructed(); - CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(cEditor); - cEditor.getDeckController().load(d0.getName()); + newState = FControl.Screens.DECK_EDITOR_CONSTRUCTED; + editorCtrl = new CEditorConstructed(); break; case Sealed: - final CEditorLimited sEditor = new CEditorLimited(Singletons.getModel().getDecks().getSealed()); - Singletons.getControl().changeState(FControl.Screens.DECK_EDITOR_LIMITED); - CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(sEditor); - sEditor.getDeckController().load(d0.getName()); + editorCtrl = new CEditorLimited(Singletons.getModel().getDecks().getSealed()); + newState = FControl.Screens.DECK_EDITOR_LIMITED; break; case Draft: - final CEditorLimited dEditor = new CEditorLimited(Singletons.getModel().getDecks().getDraft()); - Singletons.getControl().changeState(FControl.Screens.DECK_EDITOR_LIMITED); - CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(dEditor); - dEditor.getDeckController().load(d0.getName()); + editorCtrl = new CEditorLimited(Singletons.getModel().getDecks().getDraft()); + newState = FControl.Screens.DECK_EDITOR_LIMITED; break; - + default: - break; + return; } + + Singletons.getControl().changeStateAutoFixLayout(newState, "deck editor"); + CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(editorCtrl); + editorCtrl.getDeckController().load(d0.getName()); } private void deleteDeck(final RowPanel r0) {