- change FControl state from int into an enum

- ensure All Decks and Deck Generation tabs only show up in the Constructed deck editor
This commit is contained in:
myk
2013-02-15 11:32:19 +00:00
parent 87e3894c47
commit d940f2b1a8
24 changed files with 183 additions and 140 deletions

View File

@@ -67,26 +67,21 @@ public enum FControl {
private List<Shortcut> shortcuts; private List<Shortcut> shortcuts;
private JLayeredPane display; private JLayeredPane display;
private int state = -1; private Screens state = Screens.UNKNOWN;
private WindowListener waDefault, waConcede, waLeaveBazaar, waLeaveEditor; private WindowListener waDefault, waConcede, waLeaveBazaar, waLeaveEditor;
/** */ public static enum Screens {
public static final int HOME_SCREEN = 0; UNKNOWN,
/** */ HOME_SCREEN,
public static final int MATCH_SCREEN = 1; MATCH_SCREEN,
/** */ DECK_EDITOR_CONSTRUCTED,
public static final int DECK_EDITOR_CONSTRUCTED = 2; QUEST_BAZAAR,
/** */ DECK_EDITOR_LIMITED,
public static final int QUEST_BAZAAR = 3; DECK_EDITOR_QUEST,
/** */ QUEST_CARD_SHOP,
public static final int DECK_EDITOR_LIMITED = 4; DRAFTING_PROCESS
/** */ }
public static final int DECK_EDITOR_QUEST = 5;
/** */
public static final int QUEST_CARD_SHOP = 6;
/** */
public static final int DRAFTING_PROCESS = 7;
private final SoundSystem soundSystem = new SoundSystem(); private final SoundSystem soundSystem = new SoundSystem();
@@ -127,7 +122,7 @@ public enum FControl {
Singletons.getView().getFrame().setDefaultCloseOperation( Singletons.getView().getFrame().setDefaultCloseOperation(
WindowConstants.DO_NOTHING_ON_CLOSE); WindowConstants.DO_NOTHING_ON_CLOSE);
changeState(FControl.HOME_SCREEN); changeState(Screens.HOME_SCREEN);
} }
}; };
@@ -137,7 +132,7 @@ public enum FControl {
Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
if (CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().exit()) { if (CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().exit()) {
changeState(FControl.HOME_SCREEN); changeState(Screens.HOME_SCREEN);
} }
} }
}; };
@@ -185,17 +180,11 @@ public enum FControl {
} }
/** /**
* <p>
* changeState.
* </p>
* Switches between display states in top level JFrame. * Switches between display states in top level JFrame.
*
* @param i0
* &emsp; State index: 0 for home, 1 for match, etc.
*/ */
public void changeState(final int i0) { public void changeState(Screens screen) {
clearChildren(JLayeredPane.DEFAULT_LAYER); clearChildren(JLayeredPane.DEFAULT_LAYER);
this.state = i0; this.state = screen;
Singletons.getView().getFrame().removeWindowListener(waDefault); Singletons.getView().getFrame().removeWindowListener(waDefault);
Singletons.getView().getFrame().removeWindowListener(waConcede); Singletons.getView().getFrame().removeWindowListener(waConcede);
@@ -203,7 +192,7 @@ public enum FControl {
Singletons.getView().getFrame().removeWindowListener(waLeaveEditor); Singletons.getView().getFrame().removeWindowListener(waLeaveEditor);
// Fire up new state // Fire up new state
switch (i0) { switch (screen) {
case HOME_SCREEN: case HOME_SCREEN:
SOverlayUtils.hideTargetingOverlay(); SOverlayUtils.hideTargetingOverlay();
VHomeUI.SINGLETON_INSTANCE.populate(); VHomeUI.SINGLETON_INSTANCE.populate();
@@ -242,6 +231,7 @@ public enum FControl {
break; break;
default: default:
throw new RuntimeException("unhandled screen: " + screen);
} }
} }
@@ -251,7 +241,7 @@ public enum FControl {
* *
* @return {@link java.lang.Integer} * @return {@link java.lang.Integer}
* */ * */
public int getState() { public Screens getState() {
return this.state; return this.state;
} }
@@ -313,7 +303,6 @@ public enum FControl {
* @return * @return
*/ */
public SoundSystem getSoundSystem() { public SoundSystem getSoundSystem() {
// TODO Auto-generated method stub
return soundSystem; return soundSystem;
} }
} }

View File

@@ -50,7 +50,7 @@ public class KeyboardShortcuts {
final Action actShowStack = new AbstractAction() { final Action actShowStack = new AbstractAction() {
@Override @Override
public void actionPerformed(final ActionEvent e) { public void actionPerformed(final ActionEvent e) {
if (Singletons.getControl().getState() != 1) { return; } if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; }
SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc()); SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc());
} }
}; };
@@ -59,7 +59,7 @@ public class KeyboardShortcuts {
final Action actShowCombat = new AbstractAction() { final Action actShowCombat = new AbstractAction() {
@Override @Override
public void actionPerformed(final ActionEvent e) { public void actionPerformed(final ActionEvent e) {
if (Singletons.getControl().getState() != 1) { return; } if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; }
SDisplayUtil.showTab(EDocID.REPORT_COMBAT.getDoc()); SDisplayUtil.showTab(EDocID.REPORT_COMBAT.getDoc());
} }
}; };
@@ -68,7 +68,7 @@ public class KeyboardShortcuts {
final Action actShowConsole = new AbstractAction() { final Action actShowConsole = new AbstractAction() {
@Override @Override
public void actionPerformed(final ActionEvent e) { public void actionPerformed(final ActionEvent e) {
if (Singletons.getControl().getState() != 1) { return; } if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; }
SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc()); SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc());
} }
}; };
@@ -77,7 +77,7 @@ public class KeyboardShortcuts {
final Action actShowPlayers = new AbstractAction() { final Action actShowPlayers = new AbstractAction() {
@Override @Override
public void actionPerformed(final ActionEvent e) { public void actionPerformed(final ActionEvent e) {
if (Singletons.getControl().getState() != 1) { return; } if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; }
SDisplayUtil.showTab(EDocID.REPORT_PLAYERS.getDoc()); SDisplayUtil.showTab(EDocID.REPORT_PLAYERS.getDoc());
} }
}; };
@@ -86,7 +86,7 @@ public class KeyboardShortcuts {
final Action actShowDev = new AbstractAction() { final Action actShowDev = new AbstractAction() {
@Override @Override
public void actionPerformed(final ActionEvent e) { public void actionPerformed(final ActionEvent e) {
if (Singletons.getControl().getState() != 1) { return; } if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; }
if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_MODE_ENABLED)) { if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_MODE_ENABLED)) {
SDisplayUtil.showTab(EDocID.DEV_MODE.getDoc()); SDisplayUtil.showTab(EDocID.DEV_MODE.getDoc());
} }
@@ -97,7 +97,7 @@ public class KeyboardShortcuts {
final Action actConcede = new AbstractAction() { final Action actConcede = new AbstractAction() {
@Override @Override
public void actionPerformed(final ActionEvent e) { public void actionPerformed(final ActionEvent e) {
if (Singletons.getControl().getState() != 1) { return; } if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; }
CDock.SINGLETON_INSTANCE.concede(); CDock.SINGLETON_INSTANCE.concede();
} }
}; };
@@ -106,7 +106,7 @@ public class KeyboardShortcuts {
final Action actEndTurn = new AbstractAction() { final Action actEndTurn = new AbstractAction() {
@Override @Override
public void actionPerformed(final ActionEvent e) { public void actionPerformed(final ActionEvent e) {
if (Singletons.getControl().getState() != 1) { return; } if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; }
CDock.SINGLETON_INSTANCE.endTurn(); CDock.SINGLETON_INSTANCE.endTurn();
} }
}; };
@@ -115,7 +115,7 @@ public class KeyboardShortcuts {
final Action actAllAttack = new AbstractAction() { final Action actAllAttack = new AbstractAction() {
@Override @Override
public void actionPerformed(final ActionEvent e) { public void actionPerformed(final ActionEvent e) {
if (Singletons.getControl().getState() != 1) { return; } if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; }
CDock.SINGLETON_INSTANCE.alphaStrike(); CDock.SINGLETON_INSTANCE.alphaStrike();
} }
}; };
@@ -124,7 +124,7 @@ public class KeyboardShortcuts {
final Action actTgtOverlay = new AbstractAction() { final Action actTgtOverlay = new AbstractAction() {
@Override @Override
public void actionPerformed(final ActionEvent e) { public void actionPerformed(final ActionEvent e) {
if (Singletons.getControl().getState() != 1) { return; } if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; }
CDock.SINGLETON_INSTANCE.toggleTargeting(); CDock.SINGLETON_INSTANCE.toggleTargeting();
} }
}; };

View File

@@ -146,7 +146,7 @@ public class MatchController {
CMatchUI.SINGLETON_INSTANCE.initMatch(currentGame.getRegisteredPlayers(), localHuman); CMatchUI.SINGLETON_INSTANCE.initMatch(currentGame.getRegisteredPlayers(), localHuman);
CDock.SINGLETON_INSTANCE.onGameStarts(currentGame, localHuman); CDock.SINGLETON_INSTANCE.onGameStarts(currentGame, localHuman);
Singletons.getModel().getPreferences().actuateMatchPreferences(); Singletons.getModel().getPreferences().actuateMatchPreferences();
Singletons.getControl().changeState(FControl.MATCH_SCREEN); Singletons.getControl().changeState(FControl.Screens.MATCH_SCREEN);
SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc()); SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc());
// set all observers // set all observers

View File

@@ -51,6 +51,7 @@ import forge.gui.CardContainer;
import forge.gui.GuiUtils; import forge.gui.GuiUtils;
import forge.gui.deckeditor.SEditorIO.EditorPreference; import forge.gui.deckeditor.SEditorIO.EditorPreference;
import forge.gui.deckeditor.controllers.ACEditorBase; import forge.gui.deckeditor.controllers.ACEditorBase;
import forge.gui.deckeditor.controllers.CCardCatalog;
import forge.gui.deckeditor.controllers.CProbabilities; import forge.gui.deckeditor.controllers.CProbabilities;
import forge.gui.deckeditor.controllers.CStatistics; import forge.gui.deckeditor.controllers.CStatistics;
import forge.gui.deckeditor.tables.EditorTableModel; import forge.gui.deckeditor.tables.EditorTableModel;
@@ -125,6 +126,7 @@ public enum CDeckEditorUI implements CardContainer {
childController.getTableDeck().setWantElasticColumns(wantElastic); childController.getTableDeck().setWantElasticColumns(wantElastic);
childController.getTableCatalog().setWantUnique(wantUnique); childController.getTableCatalog().setWantUnique(wantUnique);
childController.getTableDeck().setWantUnique(wantUnique); childController.getTableDeck().setWantUnique(wantUnique);
CCardCatalog.SINGLETON_INSTANCE.applyCurrentFilter();
} }
} }

View File

@@ -1,8 +1,7 @@
package forge.gui.deckeditor; package forge.gui.deckeditor;
import javax.swing.SwingWorker; import javax.swing.SwingUtilities;
import forge.gui.deckeditor.controllers.CCardCatalog;
import forge.gui.deckeditor.views.VCardCatalog; import forge.gui.deckeditor.views.VCardCatalog;
import forge.gui.framework.IVTopLevelUI; import forge.gui.framework.IVTopLevelUI;
import forge.gui.framework.SLayoutIO; import forge.gui.framework.SLayoutIO;
@@ -33,15 +32,12 @@ public enum VDeckEditorUI implements IVTopLevelUI {
*/ */
@Override @Override
public void populate() { public void populate() {
final SwingWorker<Void, Void> w = new SwingWorker<Void, Void>() { SLayoutIO.loadLayout(null);
SwingUtilities.invokeLater(new Runnable() {
@Override @Override
public Void doInBackground() { public void run() {
SLayoutIO.loadLayout(null);
VCardCatalog.SINGLETON_INSTANCE.focusTable(); VCardCatalog.SINGLETON_INSTANCE.focusTable();
return null;
} }
}; });
CCardCatalog.SINGLETON_INSTANCE.applyCurrentFilter();
w.execute();
} }
} }

View File

@@ -17,10 +17,17 @@
*/ */
package forge.gui.deckeditor.controllers; package forge.gui.deckeditor.controllers;
import javax.swing.SwingUtilities;
import forge.deck.DeckBase; import forge.deck.DeckBase;
import forge.gui.deckeditor.tables.DeckController; import forge.gui.deckeditor.tables.DeckController;
import forge.gui.deckeditor.tables.EditorTableView; import forge.gui.deckeditor.tables.EditorTableView;
import forge.gui.framework.DragCell;
import forge.gui.framework.ICDoc;
import forge.gui.framework.IVDoc;
import forge.gui.framework.SRearrangingUtil;
import forge.item.InventoryItem; import forge.item.InventoryItem;
import forge.view.FView;
/** /**
* Maintains a generically typed architecture for various editing * Maintains a generically typed architecture for various editing
@@ -38,7 +45,6 @@ import forge.item.InventoryItem;
* @param <TModel> extends {@link forge.deck.DeckBase} * @param <TModel> extends {@link forge.deck.DeckBase}
*/ */
public abstract class ACEditorBase<TItem extends InventoryItem, TModel extends DeckBase> { public abstract class ACEditorBase<TItem extends InventoryItem, TModel extends DeckBase> {
public interface ContextMenuBuilder { public interface ContextMenuBuilder {
/** /**
* Adds move-related items to the context menu * Adds move-related items to the context menu
@@ -130,4 +136,33 @@ public abstract class ACEditorBase<TItem extends InventoryItem, TModel extends D
this.tblCatalog = table0; this.tblCatalog = table0;
} }
/**
* Removes the specified tab and returns its parent for later re-adding
*/
protected DragCell removeTab (IVDoc<? extends ICDoc> tab) {
final DragCell parent;
if (tab.getParentCell() == null) {
parent = null;
} else {
parent = tab.getParentCell();
parent.removeDoc(tab);
tab.setParentCell(null);
if (parent.getDocs().size() > 0) {
// if specified tab was first child of its parent, the new first tab needs re-selecting.
parent.setSelected(parent.getDocs().get(0));
} else {
// if the parent is now childless, fill in the resultant gap
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SRearrangingUtil.fillGap(parent);
FView.SINGLETON_INSTANCE.removeDragCell(parent);
}
});
}
}
return parent;
}
} }

View File

@@ -19,7 +19,6 @@ package forge.gui.deckeditor.controllers;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel; import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl; import forge.control.FControl;
@@ -37,13 +36,11 @@ import forge.gui.deckeditor.views.VCardCatalog;
import forge.gui.deckeditor.views.VCurrentDeck; import forge.gui.deckeditor.views.VCurrentDeck;
import forge.gui.deckeditor.views.VDeckgen; import forge.gui.deckeditor.views.VDeckgen;
import forge.gui.framework.DragCell; import forge.gui.framework.DragCell;
import forge.gui.framework.SRearrangingUtil;
import forge.gui.home.sanctioned.CSubmenuDraft; import forge.gui.home.sanctioned.CSubmenuDraft;
import forge.item.CardDb; import forge.item.CardDb;
import forge.item.CardPrinted; import forge.item.CardPrinted;
import forge.item.InventoryItem; import forge.item.InventoryItem;
import forge.item.ItemPoolView; import forge.item.ItemPoolView;
import forge.view.FView;
/** /**
* Updates the deck editor UI as necessary draft selection mode. * Updates the deck editor UI as necessary draft selection mode.
@@ -98,21 +95,8 @@ public class CEditorDraftingProcess extends ACEditorBase<CardPrinted, DeckGroup>
this.getTableCatalog().setup(VCardCatalog.SINGLETON_INSTANCE, SColumnUtil.getCatalogDefaultColumns()); this.getTableCatalog().setup(VCardCatalog.SINGLETON_INSTANCE, SColumnUtil.getCatalogDefaultColumns());
this.getTableDeck().setup(VCurrentDeck.SINGLETON_INSTANCE, SColumnUtil.getDeckDefaultColumns()); this.getTableDeck().setup(VCurrentDeck.SINGLETON_INSTANCE, SColumnUtil.getDeckDefaultColumns());
/*
this.getTableCatalog().getTable().addMouseListener(this.pickWithMouse);
this.getTableCatalog().getTable().addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(final KeyEvent e) {
if (e.getKeyChar() == ' ') {
CEditorDraftingProcess.this.addCard();
}
}
});
*/
ccAddLabel = VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().getText(); ccAddLabel = VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().getText();
VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().setText("Choose Card"); VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().setText("Choose Card");
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -247,7 +231,7 @@ public class CEditorDraftingProcess extends ACEditorBase<CardPrinted, DeckGroup>
Singletons.getModel().getDecks().getDraft().add(finishedDraft); Singletons.getModel().getDecks().getDraft().add(finishedDraft);
} }
FControl.SINGLETON_INSTANCE.changeState(FControl.HOME_SCREEN); FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.HOME_SCREEN);
} }
//========== Overridden from ACEditorBase //========== Overridden from ACEditorBase
@@ -291,42 +275,11 @@ public class CEditorDraftingProcess extends ACEditorBase<CardPrinted, DeckGroup>
VCurrentDeck.SINGLETON_INSTANCE.getPnlHeader().setVisible(false); VCurrentDeck.SINGLETON_INSTANCE.getPnlHeader().setVisible(false);
if (VDeckgen.SINGLETON_INSTANCE.getParentCell() != null) { deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE);
deckGenParent = VDeckgen.SINGLETON_INSTANCE.getParentCell(); allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE);
deckGenParent.removeDoc(VDeckgen.SINGLETON_INSTANCE);
VDeckgen.SINGLETON_INSTANCE.setParentCell(null);
// If Deck Gen was first tab, the new first tab needs re-selecting.
if (deckGenParent.getDocs().size() > 0) {
deckGenParent.setSelected(deckGenParent.getDocs().get(0));
}
}
if (VAllDecks.SINGLETON_INSTANCE.getParentCell() != null) {
allDecksParent = VAllDecks.SINGLETON_INSTANCE.getParentCell();
allDecksParent.removeDoc(VAllDecks.SINGLETON_INSTANCE);
VAllDecks.SINGLETON_INSTANCE.setParentCell(null);
// If All Decks was first tab, the new first tab needs re-selecting.
if (allDecksParent.getDocs().size() > 0) {
allDecksParent.setSelected(allDecksParent.getDocs().get(0));
}
}
// set catalog table to single-selection only mode // set catalog table to single-selection only mode
getTableCatalog().getTable().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); getTableCatalog().getTable().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// Fill in gaps
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
for (final DragCell c : FView.SINGLETON_INSTANCE.getDragCells()) {
if (c.getDocs().size() == 0) {
SRearrangingUtil.fillGap(c);
FView.SINGLETON_INSTANCE.removeDragCell(c);
}
}
}
});
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -357,7 +310,6 @@ public class CEditorDraftingProcess extends ACEditorBase<CardPrinted, DeckGroup>
// set catalog table back to free-selection mode // set catalog table back to free-selection mode
getTableCatalog().getTable().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); getTableCatalog().getTable().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
return true; return true;
} }
} }

View File

@@ -27,8 +27,11 @@ import forge.gui.deckeditor.SEditorUtil;
import forge.gui.deckeditor.tables.DeckController; import forge.gui.deckeditor.tables.DeckController;
import forge.gui.deckeditor.tables.EditorTableView; import forge.gui.deckeditor.tables.EditorTableView;
import forge.gui.deckeditor.tables.SColumnUtil; import forge.gui.deckeditor.tables.SColumnUtil;
import forge.gui.deckeditor.views.VAllDecks;
import forge.gui.deckeditor.views.VCardCatalog; import forge.gui.deckeditor.views.VCardCatalog;
import forge.gui.deckeditor.views.VCurrentDeck; import forge.gui.deckeditor.views.VCurrentDeck;
import forge.gui.deckeditor.views.VDeckgen;
import forge.gui.framework.DragCell;
import forge.gui.home.sanctioned.CSubmenuDraft; import forge.gui.home.sanctioned.CSubmenuDraft;
import forge.gui.home.sanctioned.CSubmenuSealed; import forge.gui.home.sanctioned.CSubmenuSealed;
import forge.item.CardPrinted; import forge.item.CardPrinted;
@@ -46,6 +49,8 @@ import forge.util.IStorage;
public final class CEditorLimited extends ACEditorBase<CardPrinted, DeckGroup> { public final class CEditorLimited extends ACEditorBase<CardPrinted, DeckGroup> {
private final DeckController<DeckGroup> controller; private final DeckController<DeckGroup> controller;
private DragCell allDecksParent = null;
private DragCell deckGenParent = null;
//========== Constructor //========== Constructor
@@ -169,6 +174,9 @@ public final class CEditorLimited extends ACEditorBase<CardPrinted, DeckGroup> {
VCardCatalog.SINGLETON_INSTANCE.getPnlHeader().setVisible(true); VCardCatalog.SINGLETON_INSTANCE.getPnlHeader().setVisible(true);
VCardCatalog.SINGLETON_INSTANCE.getLblTitle().setText("Deck Editor: Limited Mode"); VCardCatalog.SINGLETON_INSTANCE.getLblTitle().setText("Deck Editor: Limited Mode");
deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE);
allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE);
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -181,6 +189,15 @@ public final class CEditorLimited extends ACEditorBase<CardPrinted, DeckGroup> {
if (okToExit) { if (okToExit) {
CSubmenuDraft.SINGLETON_INSTANCE.update(); CSubmenuDraft.SINGLETON_INSTANCE.update();
CSubmenuSealed.SINGLETON_INSTANCE.update(); CSubmenuSealed.SINGLETON_INSTANCE.update();
//Re-add tabs
if (deckGenParent != null) {
deckGenParent.addDoc(VDeckgen.SINGLETON_INSTANCE);
}
if (allDecksParent != null) {
allDecksParent.addDoc(VAllDecks.SINGLETON_INSTANCE);
}
} }
return okToExit; return okToExit;

View File

@@ -37,8 +37,11 @@ import forge.gui.deckeditor.tables.EditorTableView;
import forge.gui.deckeditor.tables.SColumnUtil; import forge.gui.deckeditor.tables.SColumnUtil;
import forge.gui.deckeditor.tables.SColumnUtil.ColumnName; import forge.gui.deckeditor.tables.SColumnUtil.ColumnName;
import forge.gui.deckeditor.tables.TableColumnInfo; import forge.gui.deckeditor.tables.TableColumnInfo;
import forge.gui.deckeditor.views.VAllDecks;
import forge.gui.deckeditor.views.VCardCatalog; import forge.gui.deckeditor.views.VCardCatalog;
import forge.gui.deckeditor.views.VCurrentDeck; import forge.gui.deckeditor.views.VCurrentDeck;
import forge.gui.deckeditor.views.VDeckgen;
import forge.gui.framework.DragCell;
import forge.gui.home.quest.CSubmenuQuestDecks; import forge.gui.home.quest.CSubmenuQuestDecks;
import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FLabel;
import forge.item.CardPrinted; import forge.item.CardPrinted;
@@ -61,6 +64,8 @@ import forge.quest.QuestController;
public final class CEditorQuest extends ACEditorBase<CardPrinted, Deck> { public final class CEditorQuest extends ACEditorBase<CardPrinted, Deck> {
private final QuestController questData; private final QuestController questData;
private final DeckController<Deck> controller; private final DeckController<Deck> controller;
private DragCell allDecksParent = null;
private DragCell deckGenParent = null;
private boolean sideboardMode = false; private boolean sideboardMode = false;
private Map<CardPrinted, Integer> decksUsingMyCards; private Map<CardPrinted, Integer> decksUsingMyCards;
@@ -68,7 +73,7 @@ public final class CEditorQuest extends ACEditorBase<CardPrinted, Deck> {
private final Function<Entry<InventoryItem, Integer>, Comparable<?>> fnDeckCompare = new Function<Entry<InventoryItem, Integer>, Comparable<?>>() { private final Function<Entry<InventoryItem, Integer>, Comparable<?>> fnDeckCompare = new Function<Entry<InventoryItem, Integer>, Comparable<?>>() {
@Override @Override
public Comparable<?> apply(final Entry<InventoryItem, Integer> from) { public Comparable<?> apply(final Entry<InventoryItem, Integer> from) {
final Integer iValue = CEditorQuest.this.decksUsingMyCards.get(from.getKey()); final Integer iValue = decksUsingMyCards.get(from.getKey());
return iValue == null ? Integer.valueOf(0) : iValue; return iValue == null ? Integer.valueOf(0) : iValue;
} }
}; };
@@ -76,7 +81,7 @@ public final class CEditorQuest extends ACEditorBase<CardPrinted, Deck> {
private final Function<Entry<InventoryItem, Integer>, Object> fnDeckGet = new Function<Entry<InventoryItem, Integer>, Object>() { private final Function<Entry<InventoryItem, Integer>, Object> fnDeckGet = new Function<Entry<InventoryItem, Integer>, Object>() {
@Override @Override
public Object apply(final Entry<InventoryItem, Integer> from) { public Object apply(final Entry<InventoryItem, Integer> from) {
final Integer iValue = CEditorQuest.this.decksUsingMyCards.get(from.getKey()); final Integer iValue = decksUsingMyCards.get(from.getKey());
return iValue == null ? "" : iValue.toString(); return iValue == null ? "" : iValue.toString();
} }
}; };
@@ -290,6 +295,9 @@ public final class CEditorQuest extends ACEditorBase<CardPrinted, Deck> {
switchEditorMode(sideboardMode); switchEditorMode(sideboardMode);
} }); } });
deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE);
allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE);
this.getDeckController().setModel(deck); this.getDeckController().setModel(deck);
} }
@@ -302,6 +310,14 @@ public final class CEditorQuest extends ACEditorBase<CardPrinted, Deck> {
if (okToExit) { if (okToExit) {
Singletons.getModel().getQuest().save(); Singletons.getModel().getQuest().save();
CSubmenuQuestDecks.SINGLETON_INSTANCE.update(); CSubmenuQuestDecks.SINGLETON_INSTANCE.update();
//Re-add tabs
if (deckGenParent != null) {
deckGenParent.addDoc(VDeckgen.SINGLETON_INSTANCE);
}
if (allDecksParent != null) {
allDecksParent.addDoc(VAllDecks.SINGLETON_INSTANCE);
}
} }
return okToExit; return okToExit;
} }

View File

@@ -43,8 +43,11 @@ import forge.gui.deckeditor.tables.EditorTableView;
import forge.gui.deckeditor.tables.SColumnUtil; import forge.gui.deckeditor.tables.SColumnUtil;
import forge.gui.deckeditor.tables.SColumnUtil.ColumnName; import forge.gui.deckeditor.tables.SColumnUtil.ColumnName;
import forge.gui.deckeditor.tables.TableColumnInfo; import forge.gui.deckeditor.tables.TableColumnInfo;
import forge.gui.deckeditor.views.VAllDecks;
import forge.gui.deckeditor.views.VCardCatalog; import forge.gui.deckeditor.views.VCardCatalog;
import forge.gui.deckeditor.views.VCurrentDeck; import forge.gui.deckeditor.views.VCurrentDeck;
import forge.gui.deckeditor.views.VDeckgen;
import forge.gui.framework.DragCell;
import forge.gui.home.quest.CSubmenuQuestDecks; import forge.gui.home.quest.CSubmenuQuestDecks;
import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
@@ -95,6 +98,8 @@ public final class CEditorQuestCardShop extends ACEditorBase<InventoryItem, Deck
private final ItemPool<InventoryItem> fullCatalogCards = private final ItemPool<InventoryItem> fullCatalogCards =
ItemPool.createFrom(CardDb.instance().getAllTraditionalCards(), InventoryItem.class); ItemPool.createFrom(CardDb.instance().getAllTraditionalCards(), InventoryItem.class);
private boolean showingFullCatalog = false; private boolean showingFullCatalog = false;
private DragCell allDecksParent = null;
private DragCell deckGenParent = null;
// get pricelist: // get pricelist:
private final ReadPriceList r = new ReadPriceList(); private final ReadPriceList r = new ReadPriceList();
@@ -484,6 +489,9 @@ public final class CEditorQuestCardShop extends ACEditorBase<InventoryItem, Deck
+ "% of their value.<br>" + maxSellingPrice + "</html>"); + "% of their value.<br>" + maxSellingPrice + "</html>");
VCardCatalog.SINGLETON_INSTANCE.getStatLabel(SEditorUtil.StatTypes.PACK).setVisible(true); VCardCatalog.SINGLETON_INSTANCE.getStatLabel(SEditorUtil.StatTypes.PACK).setVisible(true);
deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE);
allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE);
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -516,6 +524,14 @@ public final class CEditorQuestCardShop extends ACEditorBase<InventoryItem, Deck
VCardCatalog.SINGLETON_INSTANCE.getStatLabel(SEditorUtil.StatTypes.PACK).setVisible(false); VCardCatalog.SINGLETON_INSTANCE.getStatLabel(SEditorUtil.StatTypes.PACK).setVisible(false);
//Re-add tabs
if (deckGenParent != null) {
deckGenParent.addDoc(VDeckgen.SINGLETON_INSTANCE);
}
if (allDecksParent != null) {
allDecksParent.addDoc(VAllDecks.SINGLETON_INSTANCE);
}
return true; return true;
} }
} }

View File

@@ -33,8 +33,11 @@ import forge.gui.deckeditor.tables.EditorTableView;
import forge.gui.deckeditor.tables.SColumnUtil; import forge.gui.deckeditor.tables.SColumnUtil;
import forge.gui.deckeditor.tables.SColumnUtil.ColumnName; import forge.gui.deckeditor.tables.SColumnUtil.ColumnName;
import forge.gui.deckeditor.tables.TableColumnInfo; import forge.gui.deckeditor.tables.TableColumnInfo;
import forge.gui.deckeditor.views.VAllDecks;
import forge.gui.deckeditor.views.VCardCatalog; import forge.gui.deckeditor.views.VCardCatalog;
import forge.gui.deckeditor.views.VCurrentDeck; import forge.gui.deckeditor.views.VCurrentDeck;
import forge.gui.deckeditor.views.VDeckgen;
import forge.gui.framework.DragCell;
import forge.gui.framework.EDocID; import forge.gui.framework.EDocID;
import forge.item.CardDb; import forge.item.CardDb;
import forge.item.CardPrinted; import forge.item.CardPrinted;
@@ -55,6 +58,8 @@ import forge.util.IStorage;
*/ */
public final class CEditorVariant extends ACEditorBase<CardPrinted, Deck> { public final class CEditorVariant extends ACEditorBase<CardPrinted, Deck> {
private final DeckController<Deck> controller; private final DeckController<Deck> controller;
private DragCell allDecksParent = null;
private DragCell deckGenParent = null;
private final Predicate<CardPrinted> cardPoolCondition; private final Predicate<CardPrinted> cardPoolCondition;
private final EDocID exitToScreen; private final EDocID exitToScreen;
@@ -166,6 +171,9 @@ public final class CEditorVariant extends ACEditorBase<CardPrinted, Deck> {
SEditorUtil.resetUI(); SEditorUtil.resetUI();
deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE);
allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE);
this.controller.newModel(); this.controller.newModel();
} }
@@ -177,6 +185,19 @@ public final class CEditorVariant extends ACEditorBase<CardPrinted, Deck> {
// Override the submenu save choice - tell it to go to "constructed". // Override the submenu save choice - tell it to go to "constructed".
Singletons.getModel().getPreferences().setPref(FPref.SUBMENU_CURRENTMENU, exitToScreen.toString()); Singletons.getModel().getPreferences().setPref(FPref.SUBMENU_CURRENTMENU, exitToScreen.toString());
return SEditorIO.confirmSaveChanges(); if (!SEditorIO.confirmSaveChanges())
{
return false;
}
//Re-add tabs
if (deckGenParent != null) {
deckGenParent.addDoc(VDeckgen.SINGLETON_INSTANCE);
}
if (allDecksParent != null) {
allDecksParent.addDoc(VAllDecks.SINGLETON_INSTANCE);
}
return true;
} }
} }

View File

@@ -220,23 +220,23 @@ public final class SLayoutIO {
final String dir = NewConstants.LAYOUT_DIR; final String dir = NewConstants.LAYOUT_DIR;
switch(FControl.SINGLETON_INSTANCE.getState()) { switch(FControl.SINGLETON_INSTANCE.getState()) {
case FControl.HOME_SCREEN: case HOME_SCREEN:
fileDefault = dir + "home_default.xml"; fileDefault = dir + "home_default.xml";
filePreferred = dir + "home_preferred.xml"; filePreferred = dir + "home_preferred.xml";
break; break;
case FControl.MATCH_SCREEN: case MATCH_SCREEN:
fileDefault = dir + "match_default.xml"; fileDefault = dir + "match_default.xml";
filePreferred = dir + "match_preferred.xml"; filePreferred = dir + "match_preferred.xml";
break; break;
case FControl.DECK_EDITOR_CONSTRUCTED: case DECK_EDITOR_CONSTRUCTED:
case FControl.DECK_EDITOR_LIMITED: case DECK_EDITOR_LIMITED:
case FControl.DECK_EDITOR_QUEST: case DECK_EDITOR_QUEST:
case FControl.DRAFTING_PROCESS: case DRAFTING_PROCESS:
case FControl.QUEST_CARD_SHOP: case QUEST_CARD_SHOP:
fileDefault = dir + "editor_default.xml"; fileDefault = dir + "editor_default.xml";
filePreferred = dir + "editor_preferred.xml"; filePreferred = dir + "editor_preferred.xml";
break; break;
case FControl.QUEST_BAZAAR: case QUEST_BAZAAR:
fileDefault = dir + "bazaar_default.xml"; fileDefault = dir + "bazaar_default.xml";
filePreferred = dir + "bazaar_preferred.xml"; filePreferred = dir + "bazaar_preferred.xml";
break; break;

View File

@@ -62,8 +62,8 @@ public enum CHomeUI implements ICDoc {
VHomeUI.SINGLETON_INSTANCE.getLblEditor().setCommand(new Command() { VHomeUI.SINGLETON_INSTANCE.getLblEditor().setCommand(new Command() {
@Override @Override
public void execute() { public void execute() {
FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_CONSTRUCTED);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorConstructed()); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorConstructed());
FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_CONSTRUCTED);
} }
}); });

View File

@@ -49,8 +49,8 @@ public enum CSubmenuQuestDecks implements ICDoc {
if (!SSubmenuQuestUtil.checkActiveQuest("Create a Deck.")) { if (!SSubmenuQuestUtil.checkActiveQuest("Create a Deck.")) {
return; return;
} }
FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_QUEST);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorQuest(Singletons.getModel().getQuest())); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorQuest(Singletons.getModel().getQuest()));
FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_QUEST);
} }
}); });
} }

View File

@@ -250,9 +250,9 @@ public class SSubmenuQuestUtil {
if (!checkActiveQuest("visit the Spell Shop.")) { if (!checkActiveQuest("visit the Spell Shop.")) {
return; return;
} }
FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_QUEST);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController( CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(
new CEditorQuestCardShop(Singletons.getModel().getQuest())); new CEditorQuestCardShop(Singletons.getModel().getQuest()));
FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_QUEST);
} }
/** */ /** */
@@ -260,7 +260,7 @@ public class SSubmenuQuestUtil {
if (!checkActiveQuest("Visit the Bazzar.")) { if (!checkActiveQuest("Visit the Bazzar.")) {
return; return;
} }
Singletons.getControl().changeState(FControl.QUEST_BAZAAR); Singletons.getControl().changeState(FControl.Screens.QUEST_BAZAAR);
Singletons.getView().getFrame().validate(); Singletons.getView().getFrame().validate();
} }

View File

@@ -170,7 +170,7 @@ public enum CSubmenuDraft implements ICDoc {
draft.showGui(new BoosterDraft(CardPoolLimitation.Custom)); draft.showGui(new BoosterDraft(CardPoolLimitation.Custom));
} }
FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_LIMITED); FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DRAFTING_PROCESS);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(draft); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(draft);
} }

View File

@@ -227,8 +227,8 @@ public enum CSubmenuSealed implements ICDoc {
final ACEditorBase<? extends InventoryItem, T> editor = (ACEditorBase<? extends InventoryItem, T>) new CEditorLimited( final ACEditorBase<? extends InventoryItem, T> editor = (ACEditorBase<? extends InventoryItem, T>) new CEditorLimited(
Singletons.getModel().getDecks().getSealed()); Singletons.getModel().getDecks().getSealed());
FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_LIMITED);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(editor); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(editor);
FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_LIMITED);
editor.getDeckController().setModel((T) sealed); editor.getDeckController().setModel((T) sealed);
} }

View File

@@ -79,8 +79,9 @@ public enum CSubmenuArchenemy implements ICDoc {
}; };
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorVariant(Singletons.getModel().getDecks().getScheme(),predSchemes,EDocID.HOME_ARCHENEMY)); FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_CONSTRUCTED);
FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_CONSTRUCTED); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(
new CEditorVariant(Singletons.getModel().getDecks().getScheme(),predSchemes,EDocID.HOME_ARCHENEMY));
} }
}); });

View File

@@ -78,9 +78,9 @@ public enum CSubmenuPlanechase implements ICDoc {
}; };
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorVariant(Singletons.getModel().getDecks().getPlane(),predPlanes,EDocID.HOME_PLANECHASE)); FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_CONSTRUCTED);
FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_CONSTRUCTED); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(
new CEditorVariant(Singletons.getModel().getDecks().getPlane(), predPlanes, EDocID.HOME_PLANECHASE));
} }
}); });

View File

@@ -91,7 +91,7 @@ public class ControlWinLose {
public void actionOnQuit() { public void actionOnQuit() {
// Reset other stuff // Reset other stuff
saveOptions(); saveOptions();
Singletons.getControl().changeState(FControl.HOME_SCREEN); Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
SOverlayUtils.hideOverlay(); SOverlayUtils.hideOverlay();
} }

View File

@@ -301,7 +301,7 @@ public class QuestWinLose extends ControlWinLose {
Singletons.getModel().getPreferences().writeMatchPreferences(); Singletons.getModel().getPreferences().writeMatchPreferences();
Singletons.getModel().getPreferences().save(); Singletons.getModel().getPreferences().save();
Singletons.getControl().changeState(FControl.HOME_SCREEN); Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
SOverlayUtils.hideOverlay(); SOverlayUtils.hideOverlay();
} }

View File

@@ -282,7 +282,7 @@ public enum TargetingOverlay {
@Override @Override
public void paintComponent(final Graphics g) { public void paintComponent(final Graphics g) {
// No need for this except in match view // No need for this except in match view
if (FControl.SINGLETON_INSTANCE.getState() != 1) { return; } if (FControl.SINGLETON_INSTANCE.getState() != FControl.Screens.MATCH_SCREEN) { return; }
super.paintComponent(g); super.paintComponent(g);

View File

@@ -425,31 +425,29 @@ public class DeckLister extends JPanel implements ILocalRepaint {
switch (this.gametype) { switch (this.gametype) {
case Quest: case Quest:
final CEditorQuest qEditor = new CEditorQuest(Singletons.getModel().getQuest()); final CEditorQuest qEditor = new CEditorQuest(Singletons.getModel().getQuest());
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(qEditor);
qEditor.load(d0); qEditor.load(d0);
FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_QUEST); FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_QUEST);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(qEditor);
break; break;
case Constructed: case Constructed:
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorConstructed()); FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_CONSTRUCTED);
FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_CONSTRUCTED); final CEditorConstructed cEditor = new CEditorConstructed();
CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckController().load(d0.getName()); cEditor.getDeckController().load(d0.getName());
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(cEditor);
break; break;
case Sealed: case Sealed:
final ACEditorBase<?, T> sEditor = (ACEditorBase<?, T>) final ACEditorBase<?, T> sEditor = (ACEditorBase<?, T>)
new CEditorLimited(Singletons.getModel().getDecks().getSealed()); new CEditorLimited(Singletons.getModel().getDecks().getSealed());
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(sEditor);
sEditor.getDeckController().load(d0.getName()); sEditor.getDeckController().load(d0.getName());
FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_LIMITED); FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_LIMITED);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(sEditor);
break; break;
case Draft: case Draft:
final ACEditorBase<?, T> dEditor = (ACEditorBase<?, T>) final ACEditorBase<?, T> dEditor = (ACEditorBase<?, T>)
new CEditorLimited(Singletons.getModel().getDecks().getDraft()); new CEditorLimited(Singletons.getModel().getDecks().getDraft());
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(dEditor);
dEditor.getDeckController().load(d0.getName()); dEditor.getDeckController().load(d0.getName());
FControl.SINGLETON_INSTANCE.changeState(FControl.DECK_EDITOR_LIMITED); FControl.SINGLETON_INSTANCE.changeState(FControl.Screens.DECK_EDITOR_LIMITED);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(dEditor);
break; break;
default: default:
break; break;

View File

@@ -107,7 +107,7 @@ public enum FView {
} }
// All is ready to go - fire up home screen and discard splash frame. // All is ready to go - fire up home screen and discard splash frame.
Singletons.getControl().changeState(FControl.HOME_SCREEN); Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
//CMainMenu.SINGLETON_INSTANCE.selectPrevious(); //CMainMenu.SINGLETON_INSTANCE.selectPrevious();
FView.this.frmSplash.dispose(); FView.this.frmSplash.dispose();
@@ -203,7 +203,7 @@ public enum FView {
/** @return {@link forge.view.ViewBazaarUI} */ /** @return {@link forge.view.ViewBazaarUI} */
public ViewBazaarUI getViewBazaar() { public ViewBazaarUI getViewBazaar() {
if (Singletons.getControl().getState() != FControl.QUEST_BAZAAR) { if (Singletons.getControl().getState() != FControl.Screens.QUEST_BAZAAR) {
throw new IllegalArgumentException("FView$getViewBazaar\n" throw new IllegalArgumentException("FView$getViewBazaar\n"
+ "may only be called while the bazaar UI is showing."); + "may only be called while the bazaar UI is showing.");
} }