From 377093f23b1e7843fbf942c995f1b12f82a427cf Mon Sep 17 00:00:00 2001 From: elcnesh Date: Fri, 20 Feb 2015 19:41:06 +0000 Subject: [PATCH] Fix some issues with the new GUI code: - Fix cards not showing up in image panel when hovering (both in match and deck editor) - Fix win/lose screen and related parts of the interface --- .../src/main/java/forge/GuiDesktop.java | 2 +- .../src/main/java/forge/gui/DualListBox.java | 7 ++- .../src/main/java/forge/gui/GuiChoose.java | 2 +- .../java/forge/itemmanager/DeckManager.java | 8 +-- .../screens/deckeditor/CDeckEditorUI.java | 6 ++- .../deckeditor/controllers/ACEditorBase.java | 5 +- .../controllers/CEditorCommander.java | 5 +- .../controllers/CEditorConstructed.java | 5 +- .../controllers/CEditorDraftingProcess.java | 7 +-- .../controllers/CEditorLimited.java | 5 +- .../deckeditor/controllers/CEditorQuest.java | 9 ++-- .../controllers/CEditorQuestCardShop.java | 5 +- .../CEditorQuestDraftingProcess.java | 5 +- .../controllers/CEditorQuestLimited.java | 10 ++-- .../controllers/CEditorVariant.java | 9 ++-- .../controllers/CEditorWinstonProcess.java | 11 ++-- .../home/quest/CSubmenuQuestDecks.java | 8 +-- .../home/quest/CSubmenuQuestDraft.java | 38 +++++++------ .../home/quest/VSubmenuQuestDecks.java | 3 +- .../home/sanctioned/CSubmenuDraft.java | 21 ++++---- .../home/sanctioned/CSubmenuSealed.java | 20 +++---- .../home/sanctioned/CSubmenuWinston.java | 53 ++++++++++--------- .../home/sanctioned/VSubmenuConstructed.java | 24 ++++----- .../home/sanctioned/VSubmenuDraft.java | 28 +++++++--- .../home/sanctioned/VSubmenuSealed.java | 34 +++++++----- .../home/sanctioned/VSubmenuWinston.java | 28 +++++++--- .../java/forge/screens/match/CMatchUI.java | 10 ++-- .../screens/match/QuestDraftWinLose.java | 52 +++++++++--------- .../main/java/forge/match/HostedMatch.java | 6 ++- .../forge/player/PlayerControllerHuman.java | 6 ++- 30 files changed, 249 insertions(+), 183 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java index 8fbf0256498..a49ea21b875 100644 --- a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java +++ b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java @@ -259,7 +259,7 @@ public class GuiDesktop implements IGuiBase { public void showSpellShop() { Singletons.getControl().setCurrentScreen(FScreen.QUEST_CARD_SHOP); CDeckEditorUI.SINGLETON_INSTANCE.setEditorController( - new CEditorQuestCardShop(FModel.getQuest())); + new CEditorQuestCardShop(FModel.getQuest(), CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture())); } @Override diff --git a/forge-gui-desktop/src/main/java/forge/gui/DualListBox.java b/forge-gui-desktop/src/main/java/forge/gui/DualListBox.java index 477e313f120..d85a62e6764 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/DualListBox.java +++ b/forge-gui-desktop/src/main/java/forge/gui/DualListBox.java @@ -322,11 +322,12 @@ public class DualListBox extends FDialog { return sourceListModel.model; } - private void showSelectedCard(Object obj) { + private void showSelectedCard(final Object obj) { if (!showCard || null == obj) { return; } - CardView card = null; + + final CardView card; if (obj instanceof CardView) { card = (CardView) obj; } else if (obj instanceof CardStateView) { @@ -335,6 +336,8 @@ public class DualListBox extends FDialog { card = ((SpellAbilityView) obj).getHostCard(); } else if (obj instanceof PaperCard) { card = Card.getCardForUi((IPaperCard) obj).getView(); + } else { + card = null; } if (matchUI != null) { diff --git a/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java b/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java index a868a981372..f31dfb4a4b8 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java +++ b/forge-gui-desktop/src/main/java/forge/gui/GuiChoose.java @@ -258,7 +258,7 @@ public class GuiChoose { public static > List sideboard(final CMatchUI matchUI, final List sideboard, final List deck) { Collections.sort(deck); Collections.sort(sideboard); - return order("Sideboard", "Main Deck", -1, -1, sideboard, deck, null, true); + return order("Sideboard", "Main Deck", -1, -1, sideboard, deck, null, true, matchUI); } public static List order(final String title, final String top, final int remainingObjectsMin, final int remainingObjectsMax, diff --git a/forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java b/forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java index 679e31f4951..d6ae387ec09 100644 --- a/forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java +++ b/forge-gui-desktop/src/main/java/forge/itemmanager/DeckManager.java @@ -236,7 +236,7 @@ public final class DeckManager extends ItemManager implements IHasGam switch (this.gameType) { case Quest: screen = FScreen.DECK_EDITOR_QUEST; - editorCtrl = new CEditorQuest(FModel.getQuest()); + editorCtrl = new CEditorQuest(FModel.getQuest(), getCDetailPicture()); break; case Constructed: screen = FScreen.DECK_EDITOR_CONSTRUCTED; @@ -245,15 +245,15 @@ public final class DeckManager extends ItemManager implements IHasGam break; case Sealed: screen = FScreen.DECK_EDITOR_SEALED; - editorCtrl = new CEditorLimited(FModel.getDecks().getSealed(), screen); + editorCtrl = new CEditorLimited(FModel.getDecks().getSealed(), screen, getCDetailPicture()); break; case Draft: screen = FScreen.DECK_EDITOR_DRAFT; - editorCtrl = new CEditorLimited(FModel.getDecks().getDraft(), screen); + editorCtrl = new CEditorLimited(FModel.getDecks().getDraft(), screen, getCDetailPicture()); break; case Winston: screen = FScreen.DECK_EDITOR_DRAFT; - editorCtrl = new CEditorLimited(FModel.getDecks().getWinston(), screen); + editorCtrl = new CEditorLimited(FModel.getDecks().getWinston(), screen, getCDetailPicture()); break; default: diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/CDeckEditorUI.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/CDeckEditorUI.java index 6f6e8998197..152291e60d1 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/CDeckEditorUI.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/CDeckEditorUI.java @@ -71,6 +71,10 @@ public enum CDeckEditorUI implements ICDoc { this.vAllDecks.setCDetailPicture(cDetailPicture); } + public CDetailPicture getCDetailPicture() { + return cDetailPicture; + } + /** * Set Pack, for when Packs can be shown in the CardPicturePanel. * @param item @@ -318,7 +322,7 @@ public enum CDeckEditorUI implements ICDoc { setCurrentEditorController(screenChildController); } else if (screen == FScreen.DECK_EDITOR_CONSTRUCTED) { - setEditorController(new CEditorConstructed()); //ensure Constructed deck editor controller initialized + setEditorController(new CEditorConstructed(cDetailPicture)); //ensure Constructed deck editor controller initialized String currentDeckStr = DeckPreferences.getCurrentDeck(); if (currentDeckStr != null) { diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java index eb21491881e..079e92e4589 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/ACEditorBase.java @@ -72,7 +72,7 @@ public abstract class ACEditorBase catalogManager; private ItemManager deckManager; protected DeckSection sectionMode = DeckSection.Main; - private final CDetailPicture cDetailPicture = new CDetailPicture(); + private final CDetailPicture cDetailPicture; // card transfer buttons private final FLabel btnAdd = new FLabel.Builder() @@ -109,8 +109,9 @@ public abstract class ACEditorBase { * This is the least restrictive mode; * all cards are available. */ - public CEditorCommander() { - super(FScreen.DECK_EDITOR_COMMANDER); + public CEditorCommander(final CDetailPicture cDetailPicture) { + super(FScreen.DECK_EDITOR_COMMANDER, cDetailPicture); allSections.add(DeckSection.Main); allSections.add(DeckSection.Sideboard); allSections.add(DeckSection.Commander); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java index 9a077a210aa..c262760de8c 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorConstructed.java @@ -31,6 +31,7 @@ import forge.itemmanager.ItemManagerConfig; import forge.model.FModel; import forge.properties.ForgePreferences.FPref; import forge.screens.deckeditor.SEditorIO; +import forge.screens.match.controllers.CDetailPicture; import forge.util.ItemPool; import java.util.ArrayList; @@ -58,8 +59,8 @@ public final class CEditorConstructed extends ACEditorBase { * This is the least restrictive mode; * all cards are available. */ - public CEditorConstructed() { - super(FScreen.DECK_EDITOR_CONSTRUCTED); + public CEditorConstructed(final CDetailPicture cDetailPicture) { + super(FScreen.DECK_EDITOR_CONSTRUCTED, cDetailPicture); allSections.add(DeckSection.Main); allSections.add(DeckSection.Sideboard); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorDraftingProcess.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorDraftingProcess.java index 42e62431ed1..08dbb5591c3 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorDraftingProcess.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorDraftingProcess.java @@ -36,6 +36,7 @@ import forge.screens.deckeditor.views.VAllDecks; import forge.screens.deckeditor.views.VCurrentDeck; import forge.screens.deckeditor.views.VDeckgen; import forge.screens.home.sanctioned.CSubmenuDraft; +import forge.screens.match.controllers.CDetailPicture; import forge.toolbox.FOptionPane; import forge.util.ItemPool; import forge.util.MyRandom; @@ -63,8 +64,8 @@ public class CEditorDraftingProcess extends ACEditorBase { /** * Updates the deck editor UI as necessary draft selection mode. */ - public CEditorDraftingProcess() { - super(FScreen.DRAFTING_PROCESS); + public CEditorDraftingProcess(final CDetailPicture cDetailPicture) { + super(FScreen.DRAFTING_PROCESS, cDetailPicture); final CardManager catalogManager = new CardManager(getCDetailPicture(), false); final CardManager deckManager = new CardManager(getCDetailPicture(), false); @@ -227,7 +228,7 @@ public class CEditorDraftingProcess extends ACEditorBase { //open draft pool in Draft Deck Editor right away Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_DRAFT); - CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorLimited(FModel.getDecks().getDraft(), FScreen.DECK_EDITOR_DRAFT)); + CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorLimited(FModel.getDecks().getDraft(), FScreen.DECK_EDITOR_DRAFT, getCDetailPicture())); CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckController().load(null, s); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorLimited.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorLimited.java index 040927d4328..c6a100a95fe 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorLimited.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorLimited.java @@ -33,6 +33,7 @@ import forge.screens.deckeditor.views.VCurrentDeck; import forge.screens.deckeditor.views.VDeckgen; import forge.screens.home.sanctioned.CSubmenuDraft; import forge.screens.home.sanctioned.CSubmenuSealed; +import forge.screens.match.controllers.CDetailPicture; import forge.util.storage.IStorage; import java.util.Map.Entry; @@ -58,8 +59,8 @@ public final class CEditorLimited extends ACEditorBase { * * @param deckMap0   {@link forge.deck.DeckGroup}<{@link forge.util.storage.IStorage}> */ - public CEditorLimited(final IStorage deckMap0, FScreen screen0) { - super(screen0); + public CEditorLimited(final IStorage deckMap0, final FScreen screen0, final CDetailPicture cDetailPicture) { + super(screen0, cDetailPicture); final CardManager catalogManager = new CardManager(getCDetailPicture(), false); final CardManager deckManager = new CardManager(getCDetailPicture(), false); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuest.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuest.java index c3a6b6f71dd..58df08e3904 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuest.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuest.java @@ -39,6 +39,7 @@ import forge.screens.deckeditor.views.VAllDecks; import forge.screens.deckeditor.views.VCurrentDeck; import forge.screens.deckeditor.views.VDeckgen; import forge.screens.home.quest.CSubmenuQuestDecks; +import forge.screens.match.controllers.CDetailPicture; import forge.util.ItemPool; import java.util.ArrayList; @@ -91,16 +92,16 @@ public final class CEditorQuest extends ACEditorBase { * * @param questData0   {@link forge.quest.QuestController} */ - public CEditorQuest(final QuestController questData0) { - super(FScreen.DECK_EDITOR_QUEST); + public CEditorQuest(final QuestController questData0, final CDetailPicture cDetailPicture) { + super(FScreen.DECK_EDITOR_QUEST, cDetailPicture); allSections.add(DeckSection.Main); allSections.add(DeckSection.Sideboard); this.questData = questData0; - final CardManager catalogManager = new CardManager(getCDetailPicture(), false); - final CardManager deckManager = new CardManager(getCDetailPicture(), false); + final CardManager catalogManager = new CardManager(cDetailPicture, false); + final CardManager deckManager = new CardManager(cDetailPicture, false); catalogManager.setCaption("Quest Inventory"); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestCardShop.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestCardShop.java index 0a55018a032..805bce7120e 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestCardShop.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorQuestCardShop.java @@ -32,6 +32,7 @@ import forge.quest.QuestController; import forge.quest.QuestSpellShop; import forge.screens.deckeditor.views.*; import forge.screens.home.quest.CSubmenuQuestDecks; +import forge.screens.match.controllers.CDetailPicture; import forge.toolbox.FLabel; import forge.toolbox.FSkin; import forge.util.ItemPool; @@ -94,8 +95,8 @@ public final class CEditorQuestCardShop extends ACEditorBase { * This is the least restrictive mode; * all cards are available. */ - public CEditorVariant(final IStorage folder, final Predicate poolCondition, final DeckSection deckSection0, final FScreen screen0) { - super(screen0); + public CEditorVariant(final IStorage folder, final Predicate poolCondition, final DeckSection deckSection0, final FScreen screen0, final CDetailPicture cDetailPicture) { + super(screen0, cDetailPicture); this.cardPoolCondition = poolCondition; this.sectionMode = deckSection0; - CardManager catalogManager = new CardManager(getCDetailPicture(), true); - CardManager deckManager = new CardManager(getCDetailPicture(), true); + final CardManager catalogManager = new CardManager(cDetailPicture, true); + final CardManager deckManager = new CardManager(cDetailPicture, true); catalogManager.setCaption("Catalog"); diff --git a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorWinstonProcess.java b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorWinstonProcess.java index eb9a6a9bbf6..e0d6af01346 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorWinstonProcess.java +++ b/forge-gui-desktop/src/main/java/forge/screens/deckeditor/controllers/CEditorWinstonProcess.java @@ -32,6 +32,7 @@ import forge.screens.deckeditor.views.VDeckgen; import forge.gui.framework.DragCell; import forge.gui.framework.FScreen; import forge.screens.home.sanctioned.CSubmenuWinston; +import forge.screens.match.controllers.CDetailPicture; import forge.toolbox.FOptionPane; import forge.itemmanager.CardManager; import forge.itemmanager.ItemManagerConfig; @@ -73,11 +74,11 @@ public class CEditorWinstonProcess extends ACEditorBase { /** * Updates the deck editor UI as necessary draft selection mode. */ - public CEditorWinstonProcess() { - super(FScreen.DRAFTING_PROCESS); + public CEditorWinstonProcess(final CDetailPicture cDetailPicture) { + super(FScreen.DRAFTING_PROCESS, cDetailPicture); - final CardManager catalogManager = new CardManager(getCDetailPicture(), false); - final CardManager deckManager = new CardManager(getCDetailPicture(), false); + final CardManager catalogManager = new CardManager(cDetailPicture, false); + final CardManager deckManager = new CardManager(cDetailPicture, false); //hide filters and options panel so more of pack is visible by default catalogManager.setHideViewOptions(1, true); @@ -237,7 +238,7 @@ public class CEditorWinstonProcess extends ACEditorBase { //open draft pool in Draft Deck Editor right away Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_DRAFT); - CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorLimited(FModel.getDecks().getWinston(), FScreen.DECK_EDITOR_DRAFT)); + CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorLimited(FModel.getDecks().getWinston(), FScreen.DECK_EDITOR_DRAFT, getCDetailPicture())); CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckController().load(null, s); } 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 95a4e87ff51..c4f972456c5 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 @@ -1,7 +1,9 @@ package forge.screens.home.quest; -import forge.UiCommand; +import javax.swing.SwingUtilities; + import forge.Singletons; +import forge.UiCommand; import forge.deck.DeckProxy; import forge.gui.framework.EDocID; import forge.gui.framework.FScreen; @@ -15,8 +17,6 @@ import forge.screens.deckeditor.CDeckEditorUI; import forge.screens.deckeditor.controllers.CEditorQuest; import forge.screens.home.CHomeUI; -import javax.swing.*; - /** * Controls the quest decks submenu in the home UI. * @@ -64,7 +64,7 @@ public enum CSubmenuQuestDecks implements ICDoc { return; } Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_QUEST); - CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorQuest(FModel.getQuest())); + CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorQuest(FModel.getQuest(), CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture())); } }); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuQuestDraft.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuQuestDraft.java index de436e0431d..876c00c51a8 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuQuestDraft.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/CSubmenuQuestDraft.java @@ -1,5 +1,18 @@ package forge.screens.home.quest; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.JRadioButton; +import javax.swing.SwingUtilities; + import forge.GuiBase; import forge.Singletons; import forge.UiCommand; @@ -33,18 +46,12 @@ import forge.screens.deckeditor.views.VCurrentDeck; import forge.screens.home.CHomeUI; import forge.screens.home.quest.VSubmenuQuestDraft.Mode; import forge.screens.home.sanctioned.CSubmenuDraft; +import forge.screens.match.controllers.CDetailPicture; import forge.toolbox.FOptionPane; import forge.toolbox.FSkin; import forge.toolbox.FSkin.SkinImage; import forge.toolbox.JXButtonPanel; -import javax.swing.*; - -import java.awt.event.*; -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.List; - /** * Controls the quest draft submenu in the home UI. * @@ -486,7 +493,7 @@ public enum CSubmenuQuestDraft implements ICDoc { QuestDraftUtils.completeDraft(finishedDraft); Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_QUEST_TOURNAMENT); - CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorQuestLimited(FModel.getQuest())); + CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorQuestLimited(FModel.getQuest(), CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture())); drafting = false; @@ -496,9 +503,10 @@ public enum CSubmenuQuestDraft implements ICDoc { } private void editDeck() { - VCurrentDeck.SINGLETON_INSTANCE.setItemManager(new DeckManager(GameType.Draft, null)); + final CDetailPicture cDetailPicture = CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture(); + VCurrentDeck.SINGLETON_INSTANCE.setItemManager(new DeckManager(GameType.Draft, cDetailPicture)); Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_QUEST_TOURNAMENT); - CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorQuestLimited(FModel.getQuest())); + CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorQuestLimited(FModel.getQuest(), cDetailPicture)); FModel.getQuest().save(); } @@ -508,15 +516,15 @@ public enum CSubmenuQuestDraft implements ICDoc { return; } - QuestEventDraft draftEvent = QuestUtil.getDraftEvent(); + final QuestEventDraft draftEvent = QuestUtil.getDraftEvent(); - long creditsAvailable = FModel.getQuest().getAssets().getCredits(); + final long creditsAvailable = FModel.getQuest().getAssets().getCredits(); if (draftEvent.canEnter()) { FOptionPane.showMessageDialog("You need " + NUMBER_FORMATTER.format(draftEvent.getEntryFee() - creditsAvailable) + " more credits to enter this tournament.", "Not Enough Credits", FSkin.getImage(FSkinProp.ICO_WARNING).scale(2.0)); return; } - boolean okayToEnter = FOptionPane.showOptionDialog("This tournament costs " + draftEvent.getEntryFee() + " credits to enter.\nAre you sure you wish to enter?", "Enter Draft Tournament?", FSkin.getImage(FSkinProp.ICO_QUEST_GOLD), new String[] { "Yes", "No" }, 1) == 0; + final boolean okayToEnter = FOptionPane.showOptionDialog("This tournament costs " + draftEvent.getEntryFee() + " credits to enter.\nAre you sure you wish to enter?", "Enter Draft Tournament?", FSkin.getImage(FSkinProp.ICO_QUEST_GOLD), new String[] { "Yes", "No" }, 1) == 0; if (!okayToEnter) { return; @@ -524,9 +532,9 @@ public enum CSubmenuQuestDraft implements ICDoc { drafting = true; - BoosterDraft draft = draftEvent.enter(); + final BoosterDraft draft = draftEvent.enter(); - final CEditorQuestDraftingProcess draftController = new CEditorQuestDraftingProcess(); + final CEditorQuestDraftingProcess draftController = new CEditorQuestDraftingProcess(CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture()); draftController.showGui(draft); draftController.setDraftQuest(CSubmenuQuestDraft.this); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestDecks.java b/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestDecks.java index 2672705d696..3b5a66772e8 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestDecks.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/quest/VSubmenuQuestDecks.java @@ -6,6 +6,7 @@ import forge.gui.framework.DragTab; import forge.gui.framework.EDocID; import forge.itemmanager.DeckManager; import forge.itemmanager.ItemManagerContainer; +import forge.screens.deckeditor.CDeckEditorUI; import forge.screens.home.EMenuGroup; import forge.screens.home.IVSubmenu; import forge.screens.home.LblHeader; @@ -36,7 +37,7 @@ public enum VSubmenuQuestDecks implements IVSubmenu { /** */ private final LblHeader lblTitle = new LblHeader("Quest Decks"); - private final DeckManager lstDecks = new DeckManager(GameType.Quest, null); + private final DeckManager lstDecks = new DeckManager(GameType.Quest, CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture()); private final FLabel lblInfo = new FLabel.Builder() .fontAlign(SwingConstants.LEFT).fontSize(16).fontStyle(Font.BOLD) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuDraft.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuDraft.java index ee7dacfebe2..18728b7f9e7 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuDraft.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuDraft.java @@ -1,15 +1,23 @@ package forge.screens.home.sanctioned; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.JButton; +import javax.swing.SwingUtilities; + import forge.GuiBase; -import forge.UiCommand; import forge.Singletons; +import forge.UiCommand; import forge.deck.Deck; import forge.deck.DeckGroup; +import forge.deck.DeckProxy; import forge.game.GameType; import forge.game.player.RegisteredPlayer; import forge.gui.GuiChoose; import forge.gui.SOverlayUtils; -import forge.deck.DeckProxy; import forge.gui.framework.FScreen; import forge.gui.framework.ICDoc; import forge.itemmanager.ItemManagerConfig; @@ -23,13 +31,6 @@ import forge.screens.deckeditor.CDeckEditorUI; import forge.screens.deckeditor.controllers.CEditorDraftingProcess; import forge.toolbox.FOptionPane; -import javax.swing.*; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.List; - /** * Controls the draft submenu in the home UI. * @@ -163,7 +164,7 @@ public enum CSubmenuDraft implements ICDoc { BoosterDraft draft = BoosterDraft.createDraft(poolType); if (draft == null) { return; } - final CEditorDraftingProcess draftController = new CEditorDraftingProcess(); + final CEditorDraftingProcess draftController = new CEditorDraftingProcess(CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture()); draftController.showGui(draft); Singletons.getControl().setCurrentScreen(FScreen.DRAFTING_PROCESS); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuSealed.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuSealed.java index 8ec54d5012e..e96e33fd06a 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuSealed.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuSealed.java @@ -1,10 +1,17 @@ package forge.screens.home.sanctioned; -import forge.UiCommand; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.SwingUtilities; + import forge.Singletons; -import forge.deck.*; -import forge.game.GameType; +import forge.UiCommand; +import forge.deck.DeckBase; +import forge.deck.DeckGroup; import forge.deck.DeckProxy; +import forge.game.GameType; import forge.gui.framework.FScreen; import forge.gui.framework.ICDoc; import forge.item.InventoryItem; @@ -17,11 +24,6 @@ import forge.screens.deckeditor.controllers.ACEditorBase; import forge.screens.deckeditor.controllers.CEditorLimited; import forge.toolbox.FOptionPane; -import javax.swing.*; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - /** * Controls the sealed submenu in the home UI. * @@ -122,7 +124,7 @@ public enum CSubmenuSealed implements ICDoc { if (sealed == null) { return; } final ACEditorBase editor = (ACEditorBase) new CEditorLimited( - FModel.getDecks().getSealed(), FScreen.DECK_EDITOR_SEALED); + FModel.getDecks().getSealed(), FScreen.DECK_EDITOR_SEALED, CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture()); Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_SEALED); CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(editor); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuWinston.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuWinston.java index b758a7e4524..c49a2f99b61 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuWinston.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/CSubmenuWinston.java @@ -1,35 +1,36 @@ package forge.screens.home.sanctioned; -import forge.GuiBase; -import forge.UiCommand; -import forge.Singletons; -import forge.deck.Deck; -import forge.deck.DeckGroup; -import forge.game.GameType; -import forge.game.player.RegisteredPlayer; -import forge.gui.GuiChoose; -import forge.gui.SOverlayUtils; -import forge.match.HostedMatch; -import forge.model.FModel; -import forge.screens.deckeditor.CDeckEditorUI; -import forge.deck.DeckProxy; -import forge.screens.deckeditor.controllers.CEditorWinstonProcess; -import forge.gui.framework.FScreen; -import forge.gui.framework.ICDoc; -import forge.toolbox.FOptionPane; -import forge.itemmanager.ItemManagerConfig; -import forge.limited.LimitedPoolType; -import forge.limited.WinstonDraft; -import forge.player.GamePlayerUtil; -import forge.properties.ForgePreferences.FPref; - -import javax.swing.*; - import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; +import javax.swing.JButton; +import javax.swing.SwingUtilities; + +import forge.GuiBase; +import forge.Singletons; +import forge.UiCommand; +import forge.deck.Deck; +import forge.deck.DeckGroup; +import forge.deck.DeckProxy; +import forge.game.GameType; +import forge.game.player.RegisteredPlayer; +import forge.gui.GuiChoose; +import forge.gui.SOverlayUtils; +import forge.gui.framework.FScreen; +import forge.gui.framework.ICDoc; +import forge.itemmanager.ItemManagerConfig; +import forge.limited.LimitedPoolType; +import forge.limited.WinstonDraft; +import forge.match.HostedMatch; +import forge.model.FModel; +import forge.player.GamePlayerUtil; +import forge.properties.ForgePreferences.FPref; +import forge.screens.deckeditor.CDeckEditorUI; +import forge.screens.deckeditor.controllers.CEditorWinstonProcess; +import forge.toolbox.FOptionPane; + /** * Controls the draft submenu in the home UI. * @@ -151,7 +152,7 @@ public enum CSubmenuWinston implements ICDoc { WinstonDraft draft = WinstonDraft.createDraft(poolType); if (draft == null) { return; } - final CEditorWinstonProcess draftController = new CEditorWinstonProcess(); + final CEditorWinstonProcess draftController = new CEditorWinstonProcess(CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture()); draftController.showGui(draft); Singletons.getControl().setCurrentScreen(FScreen.DRAFTING_PROCESS); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuConstructed.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuConstructed.java index d5fa9e0e06a..25ba40b5314 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuConstructed.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuConstructed.java @@ -860,26 +860,26 @@ public enum VSubmenuConstructed implements IVSubmenu { Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_ARCHENEMY); CDeckEditorUI.SINGLETON_INSTANCE.setEditorController( - new CEditorVariant(FModel.getDecks().getScheme(), predSchemes, DeckSection.Schemes, FScreen.DECK_EDITOR_ARCHENEMY)); + new CEditorVariant(FModel.getDecks().getScheme(), predSchemes, DeckSection.Schemes, FScreen.DECK_EDITOR_ARCHENEMY, CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture())); } }); // Commander buttons cmdDeckSelectorBtn.setCommand(new Runnable() { - @Override - public void run() { - currentGameMode = vntTinyLeaders.isSelected() ? GameType.TinyLeaders : GameType.Commander; - cmdDeckSelectorBtn.requestFocusInWindow(); - changePlayerFocus(index, currentGameMode); - } + @Override + public void run() { + currentGameMode = vntTinyLeaders.isSelected() ? GameType.TinyLeaders : GameType.Commander; + cmdDeckSelectorBtn.requestFocusInWindow(); + changePlayerFocus(index, currentGameMode); + } }); cmdDeckEditor.setCommand(new UiCommand() { - @Override - public void run() { - currentGameMode = vntTinyLeaders.isSelected() ? GameType.TinyLeaders : GameType.Commander; + @Override + public void run() { + currentGameMode = vntTinyLeaders.isSelected() ? GameType.TinyLeaders : GameType.Commander; Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_COMMANDER); - CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorCommander()); + CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(new CEditorCommander(CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture())); } }); @@ -906,7 +906,7 @@ public enum VSubmenuConstructed implements IVSubmenu { Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_PLANECHASE); CDeckEditorUI.SINGLETON_INSTANCE.setEditorController( - new CEditorVariant(FModel.getDecks().getPlane(), predPlanes, DeckSection.Planes, FScreen.DECK_EDITOR_PLANECHASE)); + new CEditorVariant(FModel.getDecks().getPlane(), predPlanes, DeckSection.Planes, FScreen.DECK_EDITOR_PLANECHASE, CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture())); } }); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuDraft.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuDraft.java index e79c8871285..cbc071511aa 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuDraft.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuDraft.java @@ -1,19 +1,31 @@ package forge.screens.home.sanctioned; +import java.awt.Font; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.SwingConstants; + +import net.miginfocom.swing.MigLayout; import forge.game.GameType; import forge.gui.framework.DragCell; import forge.gui.framework.DragTab; import forge.gui.framework.EDocID; import forge.itemmanager.DeckManager; import forge.itemmanager.ItemManagerContainer; -import forge.screens.home.*; +import forge.screens.deckeditor.CDeckEditorUI; +import forge.screens.home.EMenuGroup; +import forge.screens.home.IVSubmenu; +import forge.screens.home.LblHeader; +import forge.screens.home.StartButton; +import forge.screens.home.VHomeUI; import forge.screens.home.VHomeUI.PnlDisplay; -import forge.toolbox.*; -import net.miginfocom.swing.MigLayout; - -import javax.swing.*; - -import java.awt.*; +import forge.toolbox.FLabel; +import forge.toolbox.FRadioButton; +import forge.toolbox.FSkin; +import forge.toolbox.JXButtonPanel; /** * Assembles Swing components of draft submenu singleton. @@ -34,7 +46,7 @@ public enum VSubmenuDraft implements IVSubmenu { private final JPanel pnlStart = new JPanel(); private final StartButton btnStart = new StartButton(); - private final DeckManager lstDecks = new DeckManager(GameType.Draft, null); + private final DeckManager lstDecks = new DeckManager(GameType.Draft, CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture()); private final JRadioButton radSingle = new FRadioButton("Play one opponent"); private final JRadioButton radAll = new FRadioButton("Play all 7 opponents"); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuSealed.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuSealed.java index 8d591270bc8..f567852ee5d 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuSealed.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuSealed.java @@ -1,5 +1,19 @@ package forge.screens.home.sanctioned; +import java.awt.Font; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.border.Border; +import javax.swing.text.SimpleAttributeSet; +import javax.swing.text.StyleConstants; +import javax.swing.text.StyledDocument; + +import net.miginfocom.swing.MigLayout; import forge.assets.FSkinProp; import forge.game.GameType; import forge.gui.SOverlayUtils; @@ -8,24 +22,18 @@ import forge.gui.framework.DragTab; import forge.gui.framework.EDocID; import forge.itemmanager.DeckManager; import forge.itemmanager.ItemManagerContainer; -import forge.screens.home.*; +import forge.screens.deckeditor.CDeckEditorUI; +import forge.screens.home.EMenuGroup; +import forge.screens.home.IVSubmenu; +import forge.screens.home.LblHeader; +import forge.screens.home.StartButton; +import forge.screens.home.VHomeUI; import forge.screens.home.VHomeUI.PnlDisplay; import forge.toolbox.FButton; import forge.toolbox.FLabel; import forge.toolbox.FPanel; import forge.toolbox.FSkin; import forge.toolbox.FSkin.SkinnedTextPane; -import net.miginfocom.swing.MigLayout; - -import javax.swing.*; -import javax.swing.border.Border; -import javax.swing.text.SimpleAttributeSet; -import javax.swing.text.StyleConstants; -import javax.swing.text.StyledDocument; - -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; /** * Assembles Swing components of sealed submenu singleton. @@ -44,7 +52,7 @@ public enum VSubmenuSealed implements IVSubmenu { private final LblHeader lblTitle = new LblHeader("Sanctioned Format: Sealed Deck"); private final StartButton btnStart = new StartButton(); - private final DeckManager lstDecks = new DeckManager(GameType.Sealed, null); + private final DeckManager lstDecks = new DeckManager(GameType.Sealed, CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture()); private final FLabel lblInfo = new FLabel.Builder() .fontAlign(SwingConstants.LEFT).fontSize(16).fontStyle(Font.BOLD) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuWinston.java b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuWinston.java index dddb446964a..bce4aac65ea 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuWinston.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/sanctioned/VSubmenuWinston.java @@ -1,19 +1,31 @@ package forge.screens.home.sanctioned; +import java.awt.Font; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.ListSelectionModel; +import javax.swing.SwingConstants; + +import net.miginfocom.swing.MigLayout; import forge.game.GameType; import forge.gui.framework.DragCell; import forge.gui.framework.DragTab; import forge.gui.framework.EDocID; import forge.itemmanager.DeckManager; import forge.itemmanager.ItemManagerContainer; -import forge.screens.home.*; +import forge.screens.deckeditor.CDeckEditorUI; +import forge.screens.home.EMenuGroup; +import forge.screens.home.IVSubmenu; +import forge.screens.home.LblHeader; +import forge.screens.home.StartButton; +import forge.screens.home.VHomeUI; import forge.screens.home.VHomeUI.PnlDisplay; -import forge.toolbox.*; -import net.miginfocom.swing.MigLayout; - - -import javax.swing.*; -import java.awt.*; +import forge.toolbox.FLabel; +import forge.toolbox.FList; +import forge.toolbox.FSkin; /** * Assembles Swing components of draft submenu singleton. @@ -34,7 +46,7 @@ public enum VSubmenuWinston implements IVSubmenu { private final JPanel pnlStart = new JPanel(); private final StartButton btnStart = new StartButton(); - private final DeckManager lstDecks = new DeckManager(GameType.Winston, null); + private final DeckManager lstDecks = new DeckManager(GameType.Winston, CDeckEditorUI.SINGLETON_INSTANCE.getCDetailPicture()); private final JList lstAI = new FList(); private final JLabel lblInfo = new FLabel.Builder() diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java index 54c3be3d483..1f98de65239 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java @@ -787,7 +787,11 @@ public final class CMatchUI @Override public void afterGameEnd() { - Singletons.getView().getNavigationBar().closeTab(screen); + FThreads.invokeInEdtNowOrLater(new Runnable() { + @Override public void run() { + Singletons.getView().getNavigationBar().closeTab(screen); + } + }); } @Override @@ -814,7 +818,7 @@ public final class CMatchUI System.err.println("Warning: GameObject passed to GUI! Printing stack trace."); Thread.dumpStack(); }*/ - return GuiChoose.getChoices(message, min, max, choices, selected, display); + return GuiChoose.getChoices(message, min, max, choices, selected, display, this); } @Override @@ -825,7 +829,7 @@ public final class CMatchUI System.err.println("Warning: GameObject passed to GUI! Printing stack trace."); Thread.dumpStack(); }*/ - return GuiChoose.order(title, top, remainingObjectsMin, remainingObjectsMax, sourceChoices, destChoices, referenceCard, sideboardingMode); + return GuiChoose.order(title, top, remainingObjectsMin, remainingObjectsMax, sourceChoices, destChoices, referenceCard, sideboardingMode, this); } @Override diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/QuestDraftWinLose.java b/forge-gui-desktop/src/main/java/forge/screens/match/QuestDraftWinLose.java index 90f6755f308..d948b49636f 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/QuestDraftWinLose.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/QuestDraftWinLose.java @@ -109,38 +109,34 @@ public class QuestDraftWinLose extends ControlWinLose { view.getBtnRestart().setEnabled(false); view.getBtnRestart().setVisible(false); - if (lastGame.isMatchOver()) { - view.getBtnQuit().setEnabled(true); - view.getBtnContinue().setEnabled(false); - view.getBtnQuit().setText("Continue Tournament"); - for (final ActionListener listener : view.getBtnQuit().getActionListeners()) { - view.getBtnQuit().removeActionListener(listener); - } - view.getBtnQuit().addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent e) { - matchUI.getGameController().nextGameDecision(NextGameDecision.CONTINUE); + final boolean isMatchOver = lastGame.isMatchOver(); + final String quitString, warningString, warningCaption; + if (isMatchOver) { + quitString = "Continue Tournament"; + warningString = null; + warningCaption = null; + } else { + quitString = "Forfeit Tournament"; + warningString = "Quitting the match now will forfeit the tournament!\n\nReally quit?"; + warningCaption = "Really Quit Tournament?"; + } + view.getBtnQuit().setEnabled(true); + view.getBtnContinue().setEnabled(!isMatchOver); + view.getBtnQuit().setText(quitString); + for (final ActionListener listener : view.getBtnQuit().getActionListeners()) { + view.getBtnQuit().removeActionListener(listener); + } + view.getBtnQuit().addActionListener(new ActionListener() { + @Override + public void actionPerformed(final ActionEvent e) { + if (warningString == null || + FOptionPane.showOptionDialog(warningString, warningCaption, FSkin.getImage(FSkinProp.ICO_WARNING).scale(2), new String[] { "Yes", "No" }, 1) == 0) { + matchUI.getGameController().nextGameDecision(NextGameDecision.QUIT); QuestDraftUtils.matchInProgress = false; QuestDraftUtils.continueMatches(matchUI); } - }); - } else { - view.getBtnQuit().setEnabled(true); - for (final ActionListener listener : view.getBtnQuit().getActionListeners()) { - view.getBtnQuit().removeActionListener(listener); } - view.getBtnQuit().setText("Forfeit Tournament"); - view.getBtnQuit().addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent e) { - if (FOptionPane.showOptionDialog("Quitting the match now will forfeit the tournament!\n\nReally quit?", "Really Quit Tournament?", FSkin.getImage(FSkinProp.ICO_WARNING).scale(2), new String[] { "Yes", "No" }, 1) == 0) { - matchUI.getGameController().nextGameDecision(NextGameDecision.QUIT); - QuestDraftUtils.matchInProgress = false; - QuestDraftUtils.continueMatches(matchUI); - } - } - }); - } + }); CSubmenuQuestDraft.SINGLETON_INSTANCE.update(); VSubmenuQuestDraft.SINGLETON_INSTANCE.populate(); diff --git a/forge-gui/src/main/java/forge/match/HostedMatch.java b/forge-gui/src/main/java/forge/match/HostedMatch.java index 37e6cddb25e..903f96d999a 100644 --- a/forge-gui/src/main/java/forge/match/HostedMatch.java +++ b/forge-gui/src/main/java/forge/match/HostedMatch.java @@ -222,9 +222,11 @@ public class HostedMatch { match.startGame(game); // After game is over... - if (humanCount == 0) { + if (match.isMatchOver()) { + endCurrentGame(); + } else if (humanCount == 0) { // ... if no human players, let AI decide next game - addNextGameDecision(null, match.isMatchOver() ? NextGameDecision.QUIT : NextGameDecision.CONTINUE); + addNextGameDecision(null, NextGameDecision.CONTINUE); } } }); diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 27d7d932e74..96d5139540e 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -1756,8 +1756,10 @@ public class PlayerControllerHuman @Override public void concede() { - this.player.concede(); - getGame().getAction().checkGameOverCondition(); + if (player != null) { + player.concede(); + getGame().getAction().checkGameOverCondition(); + } } public boolean mayAutoPass() { return getGui().mayAutoPass(getLocalPlayerView());