From 56983b25534a6caa41d231f29b941b903d1c822d Mon Sep 17 00:00:00 2001 From: Seravy Date: Tue, 13 Feb 2018 01:32:18 +0100 Subject: [PATCH] Moves "Current_Deck" from Quest Preferences to Quest Data. Without this, the selected deck name was global for all quests - switching to another quest retained the deck name from the previous quest and if the new quest had a deck with the identical name, selected that one, otherwise selected nothing. (in one weird case, this resulted in quest data that crashed caused bugs when loading forge - as quest was saved with a selected deck from another quest data.) Preferred behavior is to select the deck that was last selected in THAT QUEST when switching to another quest. --- .../src/main/java/forge/screens/deckeditor/SEditorIO.java | 2 +- .../java/forge/screens/home/quest/CSubmenuQuestDecks.java | 6 +++--- forge-gui-mobile/src/forge/deck/FDeckEditor.java | 4 ++-- .../src/forge/screens/quest/QuestDecksScreen.java | 6 +++--- forge-gui/src/main/java/forge/quest/QuestController.java | 8 ++++++++ forge-gui/src/main/java/forge/quest/QuestUtil.java | 2 +- forge-gui/src/main/java/forge/quest/data/QuestData.java | 4 +++- forge-gui/src/main/java/forge/quest/io/QuestDataIO.java | 5 +++++ 8 files changed, 26 insertions(+), 11 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/SEditorIO.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/SEditorIO.java index 8b1aed79f6c..76431e51b00 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/SEditorIO.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/SEditorIO.java @@ -62,7 +62,7 @@ public class SEditorIO { VAllDecks.SINGLETON_INSTANCE.getLstDecks().setSelectedString(deckStr); // Set current quest deck to selected if (Singletons.getControl().getCurrentScreen() == FScreen.DECK_EDITOR_QUEST) { - FModel.getQuestPreferences().setPref(QPref.CURRENT_DECK, name); + FModel.getQuest().setCurrentDeck(name); } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuQuestDecks.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuQuestDecks.java index 18fdc1d59e2..eeffc007846 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuQuestDecks.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuQuestDecks.java @@ -30,10 +30,10 @@ public enum CSubmenuQuestDecks implements ICDoc { public void run() { final DeckProxy deck = VSubmenuQuestDecks.SINGLETON_INSTANCE.getLstDecks().getSelectedItem(); if (deck != null) { - FModel.getQuestPreferences().setPref(QPref.CURRENT_DECK, deck.toString()); + FModel.getQuest().setCurrentDeck(deck.toString()); } else { - FModel.getQuestPreferences().setPref(QPref.CURRENT_DECK, QPref.CURRENT_DECK.getDefault()); + FModel.getQuest().setCurrentDeck(QPref.CURRENT_DECK.getDefault()); } FModel.getQuestPreferences().save(); } @@ -84,7 +84,7 @@ public enum CSubmenuQuestDecks implements ICDoc { view.getLstDecks().setup(ItemManagerConfig.QUEST_DECKS); // Look through list for preferred deck from prefs - final DeckProxy deck = hasQuest ? view.getLstDecks().stringToItem(FModel.getQuestPreferences().getPref(QPref.CURRENT_DECK)) : null; + final DeckProxy deck = hasQuest ? view.getLstDecks().stringToItem(FModel.getQuest().getCurrentDeck()) : null; if (deck != null) { view.getLstDecks().setSelectedItem(deck); } diff --git a/forge-gui-mobile/src/forge/deck/FDeckEditor.java b/forge-gui-mobile/src/forge/deck/FDeckEditor.java index 3a5101896d3..721fe5775f2 100644 --- a/forge-gui-mobile/src/forge/deck/FDeckEditor.java +++ b/forge-gui-mobile/src/forge/deck/FDeckEditor.java @@ -1620,11 +1620,11 @@ public class FDeckEditor extends TabPageScreen { DeckPreferences.setSealedDeck(deckStr); break; case Quest: - FModel.getQuestPreferences().setPref(QPref.CURRENT_DECK, model.toString()); + FModel.getQuest().setCurrentDeck(model.toString()); FModel.getQuest().save(); break; case QuestDraft: - FModel.getQuestPreferences().setPref(QPref.CURRENT_DECK, model.toString()); + FModel.getQuest().setCurrentDeck(model.toString()); FModel.getQuest().save(); break; default: diff --git a/forge-gui-mobile/src/forge/screens/quest/QuestDecksScreen.java b/forge-gui-mobile/src/forge/screens/quest/QuestDecksScreen.java index 105a557a8c0..8cb0d76c2df 100644 --- a/forge-gui-mobile/src/forge/screens/quest/QuestDecksScreen.java +++ b/forge-gui-mobile/src/forge/screens/quest/QuestDecksScreen.java @@ -42,10 +42,10 @@ public class QuestDecksScreen extends FScreen { public void handleEvent(FEvent e) { DeckProxy deck = lstDecks.getSelectedItem(); if (deck != null) { - FModel.getQuestPreferences().setPref(QPref.CURRENT_DECK, deck.toString()); + FModel.getQuest().setCurrentDeck(deck.toString()); } else { - FModel.getQuestPreferences().setPref(QPref.CURRENT_DECK, QPref.CURRENT_DECK.getDefault()); + FModel.getQuest().setCurrentDeck(QPref.CURRENT_DECK.getDefault()); } FModel.getQuestPreferences().save(); } @@ -135,7 +135,7 @@ public class QuestDecksScreen extends FScreen { lstDecks.setup(ItemManagerConfig.QUEST_DECKS); // Look through list for preferred deck from prefs - final DeckProxy deck = hasQuest ? lstDecks.stringToItem(FModel.getQuestPreferences().getPref(QPref.CURRENT_DECK)) : null; + final DeckProxy deck = hasQuest ? lstDecks.stringToItem(FModel.getQuest().getCurrentDeck()) : null; if (deck != null) { lstDecks.setSelectedItem(deck); } diff --git a/forge-gui/src/main/java/forge/quest/QuestController.java b/forge-gui/src/main/java/forge/quest/QuestController.java index b2f1b074c0d..753e09e7c14 100644 --- a/forge-gui/src/main/java/forge/quest/QuestController.java +++ b/forge-gui/src/main/java/forge/quest/QuestController.java @@ -577,4 +577,12 @@ public class QuestController { CardEdition randomLandSet = CardEdition.Predicates.getRandomSetWithAllBasicLands(availableEditions); return randomLandSet == null ? FModel.getMagicDb().getEditions().get("ZEN") : randomLandSet; } + + public String getCurrentDeck() { + return model.currentDeck; + } + + public void setCurrentDeck(String s) { + model.currentDeck = s; + } } diff --git a/forge-gui/src/main/java/forge/quest/QuestUtil.java b/forge-gui/src/main/java/forge/quest/QuestUtil.java index 647f91f5d6d..14621c8d277 100644 --- a/forge-gui/src/main/java/forge/quest/QuestUtil.java +++ b/forge-gui/src/main/java/forge/quest/QuestUtil.java @@ -443,7 +443,7 @@ public class QuestUtil { if (FModel.getQuest().getAssets() != null) { d = FModel.getQuest().getMyDecks().get( - FModel.getQuestPreferences().getPref(QPref.CURRENT_DECK)); + FModel.getQuest().getCurrentDeck()); } return d; diff --git a/forge-gui/src/main/java/forge/quest/data/QuestData.java b/forge-gui/src/main/java/forge/quest/data/QuestData.java index 50b290f2162..e6a75adef7d 100644 --- a/forge-gui/src/main/java/forge/quest/data/QuestData.java +++ b/forge-gui/src/main/java/forge/quest/data/QuestData.java @@ -42,7 +42,7 @@ import java.util.Map; */ public final class QuestData { /** Holds the latest version of the Quest Data. */ - public static final int CURRENT_VERSION_NUMBER = 11; + public static final int CURRENT_VERSION_NUMBER = 12; // This field places the version number into QD instance, // but only when the object is created through the constructor @@ -68,6 +68,8 @@ public final class QuestData { public HashSet Ratings = new HashSet(); + public String currentDeck = "DEFAULT"; + public QuestData() { //needed for XML serialization } diff --git a/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java b/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java index 003e32ef551..6cb80ddaaa8 100644 --- a/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java +++ b/forge-gui/src/main/java/forge/quest/io/QuestDataIO.java @@ -17,6 +17,7 @@ */ package forge.quest.io; +import forge.quest.data.QuestPreferences.QPref; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; @@ -201,6 +202,10 @@ public class QuestDataIO { newData.Ratings.clear(); } if (saveVersion < 12) { + // Current Deck moved from preferences to quest data - it should not be global for all quests!!! + QuestDataIO.setFinalField(QuestData.class, "currentDeck", newData, FModel.getQuestPreferences().getPref(QPref.CURRENT_DECK)); + } + if (saveVersion < 13) { // Migrate DraftTournaments to use new Tournament class }