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
This commit is contained in:
elcnesh
2015-02-20 19:41:06 +00:00
parent 33a9c169fd
commit 377093f23b
30 changed files with 249 additions and 183 deletions

View File

@@ -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

View File

@@ -322,11 +322,12 @@ public class DualListBox<T> 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<T> extends FDialog {
card = ((SpellAbilityView) obj).getHostCard();
} else if (obj instanceof PaperCard) {
card = Card.getCardForUi((IPaperCard) obj).getView();
} else {
card = null;
}
if (matchUI != null) {

View File

@@ -258,7 +258,7 @@ public class GuiChoose {
public static <T extends Comparable<? super T>> List<T> sideboard(final CMatchUI matchUI, final List<T> sideboard, final List<T> 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 <T> List<T> order(final String title, final String top, final int remainingObjectsMin, final int remainingObjectsMax,

View File

@@ -236,7 +236,7 @@ public final class DeckManager extends ItemManager<DeckProxy> 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<DeckProxy> 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:

View File

@@ -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) {

View File

@@ -72,7 +72,7 @@ public abstract class ACEditorBase<TItem extends InventoryItem, TModel extends D
private ItemManager<TItem> catalogManager;
private ItemManager<TItem> 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<TItem extends InventoryItem, TModel extends D
.icon(FSkin.getIcon(FSkinProp.ICO_EDIT))
.iconScaleAuto(false).hoverable().build();
protected ACEditorBase(FScreen screen0) {
protected ACEditorBase(final FScreen screen0, final CDetailPicture cDetailPicture) {
this.screen = screen0;
this.cDetailPicture = cDetailPicture;
}
public FScreen getScreen() {

View File

@@ -33,6 +33,7 @@ import forge.model.FModel;
import forge.screens.deckeditor.SEditorIO;
import forge.screens.deckeditor.views.VAllDecks;
import forge.screens.deckeditor.views.VDeckgen;
import forge.screens.match.controllers.CDetailPicture;
import forge.util.ItemPool;
import java.util.ArrayList;
@@ -64,8 +65,8 @@ public final class CEditorCommander extends ACEditorBase<PaperCard, Deck> {
* 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);

View File

@@ -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<PaperCard, Deck> {
* 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);

View File

@@ -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<PaperCard, DeckGroup> {
/**
* 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<PaperCard, DeckGroup> {
//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);
}

View File

@@ -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<PaperCard, DeckGroup> {
*
* @param deckMap0 &emsp; {@link forge.deck.DeckGroup}<{@link forge.util.storage.IStorage}>
*/
public CEditorLimited(final IStorage<DeckGroup> deckMap0, FScreen screen0) {
super(screen0);
public CEditorLimited(final IStorage<DeckGroup> deckMap0, final FScreen screen0, final CDetailPicture cDetailPicture) {
super(screen0, cDetailPicture);
final CardManager catalogManager = new CardManager(getCDetailPicture(), false);
final CardManager deckManager = new CardManager(getCDetailPicture(), false);

View File

@@ -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<PaperCard, Deck> {
*
* @param questData0 &emsp; {@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");

View File

@@ -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<InventoryItem, Deck
* @param qd
* a {@link forge.quest.data.QuestData} object.
*/
public CEditorQuestCardShop(final QuestController qd) {
super(FScreen.QUEST_CARD_SHOP);
public CEditorQuestCardShop(final QuestController qd, final CDetailPicture cDetailPicture) {
super(FScreen.QUEST_CARD_SHOP, cDetailPicture);
this.questData = qd;

View File

@@ -40,6 +40,7 @@ import forge.screens.deckeditor.views.VCurrentDeck;
import forge.screens.deckeditor.views.VDeckgen;
import forge.screens.home.quest.CSubmenuQuestDraft;
import forge.screens.home.quest.VSubmenuQuestDraft;
import forge.screens.match.controllers.CDetailPicture;
import forge.toolbox.FOptionPane;
import forge.toolbox.FSkin;
import forge.util.ItemPool;
@@ -75,8 +76,8 @@ public class CEditorQuestDraftingProcess extends ACEditorBase<PaperCard, DeckGro
/**
* Updates the deck editor UI as necessary draft selection mode.
*/
public CEditorQuestDraftingProcess() {
super(FScreen.DRAFTING_PROCESS);
public CEditorQuestDraftingProcess(final CDetailPicture cDetailPicture) {
super(FScreen.DRAFTING_PROCESS, cDetailPicture);
final CardManager catalogManager = new CardManager(getCDetailPicture(), false);
final CardManager deckManager = new CardManager(getCDetailPicture(), false);

View File

@@ -46,6 +46,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.quest.data.QuestBoosterPack;
@@ -91,17 +92,16 @@ public final class CEditorQuestLimited extends ACEditorBase<PaperCard, DeckGroup
*
* @param questData0 &emsp; {@link forge.quest.QuestController}
*/
public CEditorQuestLimited(final QuestController questData0) {
super(FScreen.DECK_EDITOR_QUEST_TOURNAMENT);
public CEditorQuestLimited(final QuestController questData0, final CDetailPicture cDetailPicture) {
super(FScreen.DECK_EDITOR_QUEST_TOURNAMENT, 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("Sideboard");

View File

@@ -33,6 +33,7 @@ import forge.properties.ForgePreferences.FPref;
import forge.screens.deckeditor.SEditorIO;
import forge.screens.deckeditor.views.VAllDecks;
import forge.screens.deckeditor.views.VDeckgen;
import forge.screens.match.controllers.CDetailPicture;
import forge.util.ItemPool;
import forge.util.storage.IStorage;
@@ -60,14 +61,14 @@ public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> {
* This is the least restrictive mode;
* all cards are available.
*/
public CEditorVariant(final IStorage<Deck> folder, final Predicate<PaperCard> poolCondition, final DeckSection deckSection0, final FScreen screen0) {
super(screen0);
public CEditorVariant(final IStorage<Deck> folder, final Predicate<PaperCard> 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");

View File

@@ -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<PaperCard, DeckGroup> {
/**
* 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<PaperCard, DeckGroup> {
//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);
}

View File

@@ -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()));
}
});
}

View File

@@ -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);

View File

@@ -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<CSubmenuQuestDecks> {
/** */
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)

View File

@@ -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);

View File

@@ -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<? extends InventoryItem, T> editor = (ACEditorBase<? extends InventoryItem, T>) 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);

View File

@@ -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);

View File

@@ -860,26 +860,26 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
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<CSubmenuConstructed> {
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()));
}
});

View File

@@ -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<CSubmenuDraft> {
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");

View File

@@ -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<CSubmenuSealed> {
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)

View File

@@ -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<CSubmenuWinston> {
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<String> lstAI = new FList<String>();
private final JLabel lblInfo = new FLabel.Builder()

View File

@@ -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

View File

@@ -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();

View File

@@ -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);
}
}
});

View File

@@ -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());