Move/rename FControl.Screens to FScreen and make that define the Navigation tab data instead of INavigationTabData

Make it so each Deck Editor type appears in its own tab
Make Bazaar screen act more like other screens
This commit is contained in:
drdev
2013-10-17 04:23:48 +00:00
parent 4dfab45544
commit 8b39b69bb7
45 changed files with 959 additions and 980 deletions

5
.gitattributes vendored
View File

@@ -14916,7 +14916,6 @@ src/main/java/forge/card/trigger/WrappedAbility.java -text
src/main/java/forge/card/trigger/ZCTrigger.java svneol=native#text/plain src/main/java/forge/card/trigger/ZCTrigger.java svneol=native#text/plain
src/main/java/forge/card/trigger/package-info.java svneol=native#text/plain src/main/java/forge/card/trigger/package-info.java svneol=native#text/plain
src/main/java/forge/control/ChatArea.java -text src/main/java/forge/control/ChatArea.java -text
src/main/java/forge/control/ControlBazaarUI.java -text
src/main/java/forge/control/FControl.java -text src/main/java/forge/control/FControl.java -text
src/main/java/forge/control/FControlGameEventHandler.java -text src/main/java/forge/control/FControlGameEventHandler.java -text
src/main/java/forge/control/FControlGamePlayback.java -text src/main/java/forge/control/FControlGamePlayback.java -text
@@ -15085,6 +15084,8 @@ src/main/java/forge/gui/MultiLineLabelUI.java svneol=native#text/plain
src/main/java/forge/gui/SOverlayUtils.java -text src/main/java/forge/gui/SOverlayUtils.java -text
src/main/java/forge/gui/UnsortedListModel.java -text src/main/java/forge/gui/UnsortedListModel.java -text
src/main/java/forge/gui/WrapLayout.java -text src/main/java/forge/gui/WrapLayout.java -text
src/main/java/forge/gui/bazaar/CBazaarUI.java -text
src/main/java/forge/gui/bazaar/VBazaarUI.java -text
src/main/java/forge/gui/deckchooser/DecksComboBox.java -text src/main/java/forge/gui/deckchooser/DecksComboBox.java -text
src/main/java/forge/gui/deckchooser/DecksComboBoxEvent.java -text src/main/java/forge/gui/deckchooser/DecksComboBoxEvent.java -text
src/main/java/forge/gui/deckchooser/FDeckChooser.java -text src/main/java/forge/gui/deckchooser/FDeckChooser.java -text
@@ -15130,6 +15131,7 @@ src/main/java/forge/gui/events/UiEventBlockerAssigned.java -text
src/main/java/forge/gui/framework/DragCell.java -text src/main/java/forge/gui/framework/DragCell.java -text
src/main/java/forge/gui/framework/DragTab.java -text src/main/java/forge/gui/framework/DragTab.java -text
src/main/java/forge/gui/framework/EDocID.java -text src/main/java/forge/gui/framework/EDocID.java -text
src/main/java/forge/gui/framework/FScreen.java -text
src/main/java/forge/gui/framework/ICDoc.java -text src/main/java/forge/gui/framework/ICDoc.java -text
src/main/java/forge/gui/framework/IDocIdList.java -text src/main/java/forge/gui/framework/IDocIdList.java -text
src/main/java/forge/gui/framework/ILocalRepaint.java -text src/main/java/forge/gui/framework/ILocalRepaint.java -text
@@ -15514,7 +15516,6 @@ src/main/java/forge/view/FTitleBarBase.java -text
src/main/java/forge/view/FView.java -text src/main/java/forge/view/FView.java -text
src/main/java/forge/view/Main.java -text src/main/java/forge/view/Main.java -text
src/main/java/forge/view/SplashFrame.java -text src/main/java/forge/view/SplashFrame.java -text
src/main/java/forge/view/ViewBazaarUI.java -text
src/main/java/forge/view/arcane/CardArea.java svneol=native#text/plain src/main/java/forge/view/arcane/CardArea.java svneol=native#text/plain
src/main/java/forge/view/arcane/CardPanel.java svneol=native#text/plain src/main/java/forge/view/arcane/CardPanel.java svneol=native#text/plain
src/main/java/forge/view/arcane/CardPanelContainer.java svneol=native#text/plain src/main/java/forge/view/arcane/CardPanelContainer.java svneol=native#text/plain

View File

@@ -1,65 +0,0 @@
package forge.control;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.SwingUtilities;
import com.google.common.collect.Iterables;
import forge.gui.toolbox.FLabel;
import forge.quest.bazaar.QuestBazaarManager;
import forge.view.ViewBazaarUI;
/**
* TODO: Write javadoc for this type.
*
*/
public class ControlBazaarUI {
private final ViewBazaarUI view;
private final ComponentListener cadResize;
private final QuestBazaarManager model;
/**
* Controls top-level instance of bazaar.
* @param v0   {@link forge.view.ViewBazaarUI}
* @param bazaar
*/
public ControlBazaarUI(ViewBazaarUI v0, QuestBazaarManager bazaar0) {
view = v0;
model = bazaar0;
cadResize = new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
view.revalidate();
}
};
addListeners();
}
private void addListeners() {
this.view.removeComponentListener(cadResize);
this.view.addComponentListener(cadResize);
}
/** Populate all stalls, and select first one. */
public void initBazaar() {
view.populateStalls();
((FLabel) view.getPnlAllStalls().getComponent(0)).setSelected(true);
showStall(Iterables.get(model.getStallNames(), 0));
}
/** @param s0   {@link java.lang.String} */
public void showStall(final String s0) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
view.getPnlSingleStall().setStall(model.getStall(s0));
view.getPnlSingleStall().updateStall();
}
});
}
}

View File

@@ -52,15 +52,13 @@ import forge.game.player.Player;
import forge.gui.GuiDialog; import forge.gui.GuiDialog;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.VDeckEditorUI;
import forge.gui.framework.EDocID; import forge.gui.framework.EDocID;
import forge.gui.framework.FScreen;
import forge.gui.framework.InvalidLayoutFileException; import forge.gui.framework.InvalidLayoutFileException;
import forge.gui.framework.SDisplayUtil; import forge.gui.framework.SDisplayUtil;
import forge.gui.framework.SLayoutIO; import forge.gui.framework.SLayoutIO;
import forge.gui.framework.SOverflowUtil; import forge.gui.framework.SOverflowUtil;
import forge.gui.framework.SResizingUtil; import forge.gui.framework.SResizingUtil;
import forge.gui.home.CHomeUI;
import forge.gui.home.VHomeUI;
import forge.gui.home.settings.GamePlayerUtil; import forge.gui.home.settings.GamePlayerUtil;
import forge.gui.match.CMatchUI; import forge.gui.match.CMatchUI;
import forge.gui.match.VMatchUI; import forge.gui.match.VMatchUI;
@@ -72,7 +70,6 @@ import forge.gui.match.nonsingleton.VField;
import forge.gui.match.views.VAntes; import forge.gui.match.views.VAntes;
import forge.gui.menus.ForgeMenu; import forge.gui.menus.ForgeMenu;
import forge.gui.menus.MenuUtil; import forge.gui.menus.MenuUtil;
import forge.gui.toolbox.FAbsolutePositioner;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.net.FServer; import forge.net.FServer;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
@@ -90,8 +87,8 @@ import forge.view.FView;
* FControl. * FControl.
* </p> * </p>
* Controls all Forge UI functionality inside one JFrame. This class switches * Controls all Forge UI functionality inside one JFrame. This class switches
* between various display states in that JFrame. Controllers are instantiated * between various display screens in that JFrame. Controllers are instantiated
* separately by each state's top level view class. * separately by each screen's top level view class.
*/ */
public enum FControl implements KeyEventDispatcher { public enum FControl implements KeyEventDispatcher {
instance; instance;
@@ -99,22 +96,10 @@ public enum FControl implements KeyEventDispatcher {
private ForgeMenu forgeMenu; private ForgeMenu forgeMenu;
private List<Shortcut> shortcuts; private List<Shortcut> shortcuts;
private JLayeredPane display; private JLayeredPane display;
private Screens state = Screens.UNKNOWN; private FScreen currentScreen;
private boolean altKeyLastDown; private boolean altKeyLastDown;
private CloseAction closeAction; private CloseAction closeAction;
public static enum Screens {
UNKNOWN,
HOME_SCREEN,
MATCH_SCREEN,
DECK_EDITOR_CONSTRUCTED,
QUEST_BAZAAR,
DECK_EDITOR_LIMITED,
DECK_EDITOR_QUEST,
QUEST_CARD_SHOP,
DRAFTING_PROCESS
}
public static enum CloseAction { public static enum CloseAction {
NONE, NONE,
CLOSE_SCREEN, CLOSE_SCREEN,
@@ -128,8 +113,8 @@ public enum FControl implements KeyEventDispatcher {
* FControl. * FControl.
* </p> * </p>
* Controls all Forge UI functionality inside one JFrame. This class * Controls all Forge UI functionality inside one JFrame. This class
* switches between various display states in that JFrame. Controllers are * switches between various display screens in that JFrame. Controllers are
* instantiated separately by each state's top level view class. * instantiated separately by each screen's top level view class.
*/ */
private FControl() { private FControl() {
Singletons.getView().getFrame().addWindowListener(new WindowAdapter() { Singletons.getView().getFrame().addWindowListener(new WindowAdapter() {
@@ -220,8 +205,6 @@ public enum FControl implements KeyEventDispatcher {
// Preloads skin components (using progress bar). // Preloads skin components (using progress bar).
FSkin.loadFull(true); FSkin.loadFull(true);
this.forgeMenu = new ForgeMenu();
this.shortcuts = KeyboardShortcuts.attachKeyboardShortcuts(); this.shortcuts = KeyboardShortcuts.attachKeyboardShortcuts();
this.display = FView.SINGLETON_INSTANCE.getLpnDocument(); this.display = FView.SINGLETON_INSTANCE.getLpnDocument();
@@ -271,95 +254,70 @@ public enum FControl implements KeyEventDispatcher {
} }
public ForgeMenu getForgeMenu() { public ForgeMenu getForgeMenu() {
if (this.forgeMenu == null) {
this.forgeMenu = new ForgeMenu();
}
return this.forgeMenu; return this.forgeMenu;
} }
public FScreen getCurrentScreen() {
return this.currentScreen;
}
/** /**
* Switches between display states in top level JFrame. * Switches between display screens in top level JFrame.
*/ */
public void changeState(Screens screen) { public void setCurrentScreen(FScreen screen) {
//TODO: Uncomment the line below if this function stops being used to refresh //TODO: Uncomment the line below if this function stops being used to refresh
//the current screen in some places (such as Continue and Restart in the match screen) //the current screen in some places (such as Continue and Restart in the match screen)
//if (this.state == screen) { return; } //if (this.currentScreen == screen) { return; }
//give previous screen a chance to perform special switch handling and/or cancel switching away from screen
if (!Singletons.getView().getNavigationBar().canSwitchAway()) { return; }
if (this.currentScreen == FScreen.MATCH_SCREEN) { //hide targeting overlay and reset image if was on match screen
SOverlayUtils.hideTargetingOverlay();
if (isMatchBackgroundImageVisible()) {
FView.SINGLETON_INSTANCE.getPnlInsets().setForegroundImage(new ImageIcon());
}
}
clearChildren(JLayeredPane.DEFAULT_LAYER); clearChildren(JLayeredPane.DEFAULT_LAYER);
this.state = screen; SOverlayUtils.hideOverlay();
// Fire up new state this.currentScreen = screen;
switch (screen) {
case HOME_SCREEN:
SOverlayUtils.hideTargetingOverlay();
VHomeUI.SINGLETON_INSTANCE.populate();
CHomeUI.SINGLETON_INSTANCE.initialize();
FView.SINGLETON_INSTANCE.getPnlInsets().setVisible(true);
FView.SINGLETON_INSTANCE.getPnlInsets().setForegroundImage(new ImageIcon());
break;
case MATCH_SCREEN: //load layout for new current screen
VMatchUI.SINGLETON_INSTANCE.populate(); try {
CMatchUI.SINGLETON_INSTANCE.initialize(); SLayoutIO.loadLayout(null);
FView.SINGLETON_INSTANCE.getPnlInsets().setVisible(true); } catch (InvalidLayoutFileException ex) {
showMatchBackgroundImage(); GuiDialog.message("Your " + screen.getTabCaption() + " layout file could not be read. It will be deleted after you press OK.\nThe game will proceed with default layout.");
SOverlayUtils.showTargetingOverlay(); if (screen.deleteLayoutFile()) {
Singletons.getView().getNavigationBar().setSelectedTab(this.game); SLayoutIO.loadLayout(null); //try again
break;
case DECK_EDITOR_CONSTRUCTED:
case DECK_EDITOR_LIMITED:
case DECK_EDITOR_QUEST:
case QUEST_CARD_SHOP:
case DRAFTING_PROCESS:
SOverlayUtils.hideTargetingOverlay();
VDeckEditorUI.SINGLETON_INSTANCE.populate();
CDeckEditorUI.SINGLETON_INSTANCE.initialize();
FView.SINGLETON_INSTANCE.getPnlInsets().setVisible(true);
FView.SINGLETON_INSTANCE.getPnlInsets().setForegroundImage(new ImageIcon());
break;
case QUEST_BAZAAR:
SOverlayUtils.hideTargetingOverlay();
FAbsolutePositioner.SINGLETON_INSTANCE.hideAll();
display.add(Singletons.getView().getViewBazaar(), JLayeredPane.DEFAULT_LAYER);
FView.SINGLETON_INSTANCE.getPnlInsets().setVisible(false);
sizeChildren();
Singletons.getView().getNavigationBar().setSelectedTab(Singletons.getView().getViewBazaar());
break;
default:
throw new RuntimeException("unhandled screen: " + screen);
} }
} }
private void showMatchBackgroundImage() { screen.getView().populate();
screen.getController().initialize();
if (screen == FScreen.MATCH_SCREEN) {
if (isMatchBackgroundImageVisible()) { if (isMatchBackgroundImageVisible()) {
FView.SINGLETON_INSTANCE.getPnlInsets().setForegroundImage(FSkin.getIcon(FSkin.Backgrounds.BG_MATCH)); FView.SINGLETON_INSTANCE.getPnlInsets().setForegroundImage(FSkin.getIcon(FSkin.Backgrounds.BG_MATCH));
} }
SOverlayUtils.showTargetingOverlay();
}
Singletons.getView().getNavigationBar().updateSelectedTab();
} }
private boolean isMatchBackgroundImageVisible() { private boolean isMatchBackgroundImageVisible() {
return Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_MATCH_IMAGE_VISIBLE); return Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_MATCH_IMAGE_VISIBLE);
} }
public void changeStateAutoFixLayout(Screens newState, String stateName) { public void ensureScreenActive(FScreen screen) {
try { if (this.currentScreen == screen) { return; }
changeState(newState);
} catch (InvalidLayoutFileException ex) {
GuiDialog.message("Your " + stateName + " layout file could not be read. It will be deleted after you press OK.\nThe game will proceed with default layout.");
File fLayout = new File(SLayoutIO.getFilePreferred(newState));
fLayout.delete();
// try again
changeState(newState);
}
}
/** setCurrentScreen(screen);
* Returns the int reflecting the current state of the top level frame
* (see field definitions and class methods for details).
*
* @return {@link java.lang.Integer}
* */
public Screens getState() {
return this.state;
} }
/** @return List<Shortcut> A list of attached keyboard shortcut descriptions and properties. */ /** @return List<Shortcut> A list of attached keyboard shortcut descriptions and properties. */
@@ -455,10 +413,9 @@ public enum FControl implements KeyEventDispatcher {
return inputQueue; return inputQueue;
} }
public final void startGameWithUi(Match match) { public final void startGameWithUi(Match match) {
if (this.game != null) { if (this.game != null) {
this.changeState(Screens.MATCH_SCREEN); this.setCurrentScreen(FScreen.MATCH_SCREEN);
SOverlayUtils.hideOverlay(); SOverlayUtils.hideOverlay();
JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), "Cannot start a new game while another game is already in progress."); JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), "Cannot start a new game while another game is already in progress.");
return; //TODO: See if it's possible to run multiple games at once without crashing return; //TODO: See if it's possible to run multiple games at once without crashing
@@ -471,7 +428,7 @@ public enum FControl implements KeyEventDispatcher {
public final void endCurrentGame() { public final void endCurrentGame() {
if (this.game == null) { return; } if (this.game == null) { return; }
Singletons.getView().getNavigationBar().closeTab(this.game); Singletons.getView().getNavigationBar().closeTab(FScreen.MATCH_SCREEN);
this.game = null; this.game = null;
} }
@@ -502,7 +459,7 @@ public enum FControl implements KeyEventDispatcher {
Singletons.getModel().getPreferences().actuateMatchPreferences(); Singletons.getModel().getPreferences().actuateMatchPreferences();
changeStateAutoFixLayout(Screens.MATCH_SCREEN, "match"); setCurrentScreen(FScreen.MATCH_SCREEN);
SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc()); SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc());
CMessage.SINGLETON_INSTANCE.getInputControl().setGame(game); CMessage.SINGLETON_INSTANCE.getInputControl().setGame(game);

View File

@@ -18,6 +18,7 @@ import org.apache.commons.lang3.StringUtils;
import forge.Singletons; import forge.Singletons;
import forge.gui.framework.EDocID; import forge.gui.framework.EDocID;
import forge.gui.framework.FScreen;
import forge.gui.framework.SDisplayUtil; import forge.gui.framework.SDisplayUtil;
import forge.gui.home.settings.VSubmenuPreferences.KeyboardShortcutField; import forge.gui.home.settings.VSubmenuPreferences.KeyboardShortcutField;
import forge.gui.match.controllers.CDock; import forge.gui.match.controllers.CDock;
@@ -50,7 +51,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() != FControl.Screens.MATCH_SCREEN) { return; } if (Singletons.getControl().getCurrentScreen() != FScreen.MATCH_SCREEN) { return; }
SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc()); SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc());
} }
}; };
@@ -59,7 +60,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() != FControl.Screens.MATCH_SCREEN) { return; } if (Singletons.getControl().getCurrentScreen() != FScreen.MATCH_SCREEN) { return; }
SDisplayUtil.showTab(EDocID.REPORT_COMBAT.getDoc()); SDisplayUtil.showTab(EDocID.REPORT_COMBAT.getDoc());
} }
}; };
@@ -68,7 +69,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() != FControl.Screens.MATCH_SCREEN) { return; } if (Singletons.getControl().getCurrentScreen() != FScreen.MATCH_SCREEN) { return; }
SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc()); SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc());
} }
}; };
@@ -77,7 +78,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() != FControl.Screens.MATCH_SCREEN) { return; } if (Singletons.getControl().getCurrentScreen() != FScreen.MATCH_SCREEN) { return; }
SDisplayUtil.showTab(EDocID.REPORT_PLAYERS.getDoc()); SDisplayUtil.showTab(EDocID.REPORT_PLAYERS.getDoc());
} }
}; };
@@ -86,7 +87,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() != FControl.Screens.MATCH_SCREEN) { return; } if (Singletons.getControl().getCurrentScreen() != FScreen.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 +98,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() != FControl.Screens.MATCH_SCREEN) { return; } if (Singletons.getControl().getCurrentScreen() != FScreen.MATCH_SCREEN) { return; }
CDock.SINGLETON_INSTANCE.concede(); CDock.SINGLETON_INSTANCE.concede();
} }
}; };
@@ -106,7 +107,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() != FControl.Screens.MATCH_SCREEN) { return; } if (Singletons.getControl().getCurrentScreen() != FScreen.MATCH_SCREEN) { return; }
CDock.SINGLETON_INSTANCE.endTurn(); CDock.SINGLETON_INSTANCE.endTurn();
} }
}; };
@@ -115,7 +116,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() != FControl.Screens.MATCH_SCREEN) { return; } if (Singletons.getControl().getCurrentScreen() != FScreen.MATCH_SCREEN) { return; }
CDock.SINGLETON_INSTANCE.alphaStrike(); CDock.SINGLETON_INSTANCE.alphaStrike();
} }
}; };
@@ -124,7 +125,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() != FControl.Screens.MATCH_SCREEN) { return; } if (Singletons.getControl().getCurrentScreen() != FScreen.MATCH_SCREEN) { return; }
CDock.SINGLETON_INSTANCE.toggleTargeting(); CDock.SINGLETON_INSTANCE.toggleTargeting();
} }
}; };

View File

@@ -30,14 +30,11 @@ import forge.CardLists;
import forge.ColorChanger; import forge.ColorChanger;
import forge.FThreads; import forge.FThreads;
import forge.GameLog; import forge.GameLog;
import forge.Singletons;
import forge.StaticEffects; import forge.StaticEffects;
import forge.card.replacement.ReplacementHandler; import forge.card.replacement.ReplacementHandler;
import forge.card.spellability.SpellAbilityStackInstance; import forge.card.spellability.SpellAbilityStackInstance;
import forge.card.trigger.TriggerHandler; import forge.card.trigger.TriggerHandler;
import forge.card.trigger.TriggerType; import forge.card.trigger.TriggerType;
import forge.control.FControl;
import forge.control.FControl.Screens;
import forge.game.combat.Combat; import forge.game.combat.Combat;
import forge.game.event.GameEvent; import forge.game.event.GameEvent;
import forge.game.event.GameEventGameOutcome; import forge.game.event.GameEventGameOutcome;
@@ -51,15 +48,11 @@ import forge.game.player.Player;
import forge.game.zone.MagicStack; import forge.game.zone.MagicStack;
import forge.game.zone.Zone; import forge.game.zone.Zone;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.gui.SOverlayUtils;
import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FSkin.SkinImage;
import forge.view.FNavigationBar.INavigationTabData;
/** /**
* Represents the state of a <i>single game</i>, a new instance is created for each game. * Represents the state of a <i>single game</i>, a new instance is created for each game.
*/ */
public class Game implements INavigationTabData { public class Game {
private final GameType type; private final GameType type;
private final List<Player> roIngamePlayers; private final List<Player> roIngamePlayers;
private final List<Player> allPlayers; private final List<Player> allPlayers;
@@ -593,58 +586,4 @@ public class Game implements INavigationTabData {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return ++cardIdCounter; return ++cardIdCounter;
} }
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabCaption()
*/
@Override
public String getTabCaption() {
return "Game - " + type.getDecksFormat().name(); //TODO: Consider including more info, such as game number, match record, etc.
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabIcon()
*/
@Override
public SkinImage getTabIcon() {
return FSkin.getIcon(FSkin.DockIcons.ICO_ALPHASTRIKE);
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabDestScreen()
*/
@Override
public Screens getTabDestScreen() {
return Screens.MATCH_SCREEN;
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#allowTabClose()
*/
@Override
public boolean allowTabClose() {
return true;
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#canCloseTab()
*/
@Override
public String getCloseButtonTooltip() {
return "Concede Game";
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#onClosing()
*/
@Override
public boolean onClosing() {
if (!isGameOver()) {
Singletons.getControl().stopGame();
return false; //delay hiding tab
}
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
SOverlayUtils.hideOverlay();
return true;
}
} }

View File

@@ -0,0 +1,71 @@
package forge.gui.bazaar;
import javax.swing.SwingUtilities;
import com.google.common.collect.Iterables;
import forge.Command;
import forge.gui.framework.ICDoc;
import forge.gui.toolbox.FLabel;
import forge.quest.bazaar.QuestBazaarManager;
/**
* TODO: Write javadoc for this type.
*
*/
public enum CBazaarUI implements ICDoc {
SINGLETON_INSTANCE;
/**
* Controls top-level instance of bazaar.
* @param v0 &emsp; {@link forge.gui.bazaar.VBazaarUI}
* @param bazaar
*/
private CBazaarUI() {
}
/** Populate all stalls, and select first one. */
public void initBazaar(QuestBazaarManager bazaar) {
VBazaarUI.SINGLETON_INSTANCE.populateStalls();
((FLabel) VBazaarUI.SINGLETON_INSTANCE.getPnlAllStalls().getComponent(0)).setSelected(true);
showStall(Iterables.get(bazaar.getStallNames(), 0), bazaar);
}
/** @param s0 &emsp; {@link java.lang.String} */
public void showStall(final String s0, final QuestBazaarManager bazaar) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
VBazaarUI.SINGLETON_INSTANCE.getPnlSingleStall().setStall(bazaar.getStall(s0));
VBazaarUI.SINGLETON_INSTANCE.getPnlSingleStall().updateStall();
}
});
}
/* (non-Javadoc)
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
*/
@Override
public Command getCommandOnSelect() {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see forge.gui.framework.ICDoc#initialize()
*/
@Override
public void initialize() {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see forge.gui.framework.ICDoc#update()
*/
@Override
public void update() {
// TODO Auto-generated method stub
}
}

View File

@@ -1,4 +1,4 @@
package forge.view; package forge.gui.bazaar;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
@@ -7,58 +7,35 @@ import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import forge.Command; import forge.Command;
import forge.Singletons; import forge.Singletons;
import forge.control.ControlBazaarUI; import forge.gui.framework.FScreen;
import forge.control.FControl; import forge.gui.framework.IVTopLevelUI;
import forge.control.FControl.Screens;
import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FPanel; import forge.gui.toolbox.FPanel;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FSkin.SkinImage;
import forge.quest.bazaar.QuestBazaarManager; import forge.quest.bazaar.QuestBazaarManager;
import forge.quest.gui.ViewStall; import forge.quest.gui.ViewStall;
import forge.view.FNavigationBar.INavigationTabData; import forge.view.FView;
/** Lays out containers and borders for resizeable layout and /** Lays out containers and borders for resizeable layout and
* instantiates top-level controller for bazaar UI. */ * instantiates top-level controller for bazaar UI. */
@SuppressWarnings("serial") public enum VBazaarUI implements IVTopLevelUI {
public class ViewBazaarUI extends FPanel implements INavigationTabData { /** */
private final JPanel pnlAllStalls; SINGLETON_INSTANCE;
private final ViewStall pnlSingleStall;
private final ControlBazaarUI control; private JPanel pnlAllStalls;
private ViewStall pnlSingleStall;
private FLabel previousSelected; private FLabel previousSelected;
private final QuestBazaarManager bazaar; private QuestBazaarManager bazaar;
/** Lays out containers and borders for resizeable layout and /** Lays out containers and borders for resizeable layout and
* instantiates top-level controller for bazaar UI. * instantiates top-level controller for bazaar UI.
* @param bazaar0 */ * @param bazaar0 */
public ViewBazaarUI(QuestBazaarManager bazaar0) { private VBazaarUI() {
super();
// Final inits
this.pnlAllStalls = new JPanel();
this.pnlSingleStall = new ViewStall(this);
this.bazaar = bazaar0;
// Component styling
this.setCornerDiameter(0);
this.setBorderToggle(false);
this.skin.setBackgroundTexture(FSkin.getIcon(FSkin.Backgrounds.BG_TEXTURE));
this.setLayout(new MigLayout("insets 0, gap 0"));
pnlAllStalls.setOpaque(false);
pnlAllStalls.setLayout(new MigLayout("insets 0, gap 0, wrap, align center"));
// Layout
this.add(pnlAllStalls, "w 25%!, h 100%!");
this.add(pnlSingleStall, "w 75%!, h 100%!");
// Instantiate control
control = new ControlBazaarUI(this, bazaar);
control.initBazaar();
previousSelected = ((FLabel) pnlAllStalls.getComponent(0));
} }
/** */ /** */
@SuppressWarnings("serial")
public void populateStalls() { public void populateStalls() {
for (final String s : bazaar.getStallNames()) { for (final String s : bazaar.getStallNames()) {
@@ -74,7 +51,7 @@ public class ViewBazaarUI extends FPanel implements INavigationTabData {
if (previousSelected != null) { previousSelected.setSelected(false); } if (previousSelected != null) { previousSelected.setSelected(false); }
lbl.setSelected(true); lbl.setSelected(true);
previousSelected = lbl; previousSelected = lbl;
control.showStall(s); CBazaarUI.SINGLETON_INSTANCE.showStall(s, bazaar);
} }
}); });
} }
@@ -107,51 +84,50 @@ public class ViewBazaarUI extends FPanel implements INavigationTabData {
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabCaption() * @see forge.gui.framework.IVTopLevelUI#instantiate()
*/ */
@Override @Override
public String getTabCaption() { public void instantiate() {
return "Bazaar"; // Final inits
this.pnlAllStalls = new JPanel();
this.pnlSingleStall = new ViewStall(this);
this.bazaar = Singletons.getModel().getQuest().getBazaar();
pnlAllStalls.setOpaque(false);
pnlAllStalls.setLayout(new MigLayout("insets 0, gap 0, wrap, align center"));
// Instantiate control
CBazaarUI.SINGLETON_INSTANCE.initBazaar(this.bazaar);
previousSelected = ((FLabel) pnlAllStalls.getComponent(0));
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabIcon() * @see forge.gui.framework.IVTopLevelUI#populate()
*/ */
@Override @Override
public SkinImage getTabIcon() { public void populate() {
return FSkin.getIcon(FSkin.QuestIcons.ICO_BOTTLES); FPanel pnl = FView.SINGLETON_INSTANCE.getPnlInsets();
pnl.setBorder(null);
pnl.setLayout(new MigLayout("insets 0, gap 0"));
FSkin.get(pnl).setBackgroundTexture(FSkin.getIcon(FSkin.Backgrounds.BG_TEXTURE));
pnl.add(pnlAllStalls, "w 25%!, h 100%!");
pnl.add(pnlSingleStall, "w 75%!, h 100%!");
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabDestScreen() * @see forge.gui.framework.IVTopLevelUI#onSwitching(forge.gui.framework.FScreen)
*/ */
@Override @Override
public Screens getTabDestScreen() { public boolean onSwitching(FScreen screen) {
return Screens.QUEST_BAZAAR;
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#allowTabClose()
*/
@Override
public boolean allowTabClose() {
return true; return true;
} }
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#canCloseTab()
*/
@Override
public String getCloseButtonTooltip() {
return "Leave Bazaar";
}
/* (non-Javadoc) /* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#onClosingTab() * @see forge.view.FNavigationBar.INavigationTabData#onClosingTab()
*/ */
@Override @Override
public boolean onClosing() { public boolean onClosing(FScreen screen) {
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
return true; return true;
} }
} }

View File

@@ -29,6 +29,7 @@ import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.HashMap;
import java.util.List; import java.util.List;
import javax.swing.JMenu; import javax.swing.JMenu;
@@ -48,7 +49,6 @@ import com.google.common.primitives.Ints;
import forge.Command; import forge.Command;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl.Screens;
import forge.deck.DeckBase; import forge.deck.DeckBase;
import forge.gui.GuiUtils; import forge.gui.GuiUtils;
import forge.gui.deckeditor.controllers.ACEditorBase; import forge.gui.deckeditor.controllers.ACEditorBase;
@@ -57,19 +57,20 @@ import forge.gui.deckeditor.controllers.CEditorConstructed;
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.views.VCardCatalog; import forge.gui.deckeditor.views.VCardCatalog;
import forge.gui.deckeditor.views.VCurrentDeck;
import forge.gui.framework.FScreen;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.match.controllers.CDetail; import forge.gui.match.controllers.CDetail;
import forge.gui.match.controllers.CPicture; import forge.gui.match.controllers.CPicture;
import forge.gui.menus.IMenuProvider; import forge.gui.menus.IMenuProvider;
import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FSkin.SkinImage;
import forge.gui.toolbox.itemmanager.ItemManager; import forge.gui.toolbox.itemmanager.ItemManager;
import forge.gui.toolbox.itemmanager.SItemManagerIO; import forge.gui.toolbox.itemmanager.SItemManagerIO;
import forge.gui.toolbox.itemmanager.SItemManagerIO.EditorPreference; import forge.gui.toolbox.itemmanager.SItemManagerIO.EditorPreference;
import forge.gui.toolbox.itemmanager.table.ItemTable;
import forge.gui.toolbox.itemmanager.table.ItemTableModel; import forge.gui.toolbox.itemmanager.table.ItemTableModel;
import forge.item.InventoryItem; import forge.item.InventoryItem;
import forge.view.FNavigationBar.INavigationTabData;
/** /**
* Constructs instance of deck editor UI controller, used as a single point of * Constructs instance of deck editor UI controller, used as a single point of
@@ -79,14 +80,16 @@ import forge.view.FNavigationBar.INavigationTabData;
* *
* <br><br><i>(C at beginning of class name denotes a control class.)</i> * <br><br><i>(C at beginning of class name denotes a control class.)</i>
*/ */
public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData { public enum CDeckEditorUI implements ICDoc, IMenuProvider {
/** */ /** */
SINGLETON_INSTANCE; SINGLETON_INSTANCE;
private final HashMap<FScreen, ACEditorBase<? extends InventoryItem, ? extends DeckBase>> screenChildControllers;
private ACEditorBase<? extends InventoryItem, ? extends DeckBase> childController; private ACEditorBase<? extends InventoryItem, ? extends DeckBase> childController;
private boolean isFindingAsYouType = false; private boolean isFindingAsYouType = false;
private CDeckEditorUI() { private CDeckEditorUI() {
screenChildControllers = new HashMap<FScreen, ACEditorBase<? extends InventoryItem, ? extends DeckBase>>();
} }
/** /**
@@ -119,17 +122,10 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData {
* @param editor0 &emsp; {@link forge.gui.deckeditor.controllers.ACEditorBase}<?, ?> * @param editor0 &emsp; {@link forge.gui.deckeditor.controllers.ACEditorBase}<?, ?>
*/ */
public void setCurrentEditorController(ACEditorBase<? extends InventoryItem, ? extends DeckBase> editor0) { public void setCurrentEditorController(ACEditorBase<? extends InventoryItem, ? extends DeckBase> editor0) {
if (this.childController == editor0) { return; }
this.childController = editor0; this.childController = editor0;
screenChildControllers.put(Singletons.getControl().getCurrentScreen(), editor0);
updateController(); updateController();
if (childController != null) {
boolean wantElastic = SItemManagerIO.getPref(EditorPreference.elastic_columns);
boolean wantUnique = SItemManagerIO.getPref(EditorPreference.display_unique_only);
childController.getCatalogManager().getTable().setWantElasticColumns(wantElastic);
childController.getDeckManager().getTable().setWantElasticColumns(wantElastic);
childController.getCatalogManager().setWantUnique(wantUnique);
childController.getDeckManager().setWantUnique(wantUnique);
CCardCatalog.SINGLETON_INSTANCE.applyCurrentFilter();
}
} }
private interface _MoveAction { private interface _MoveAction {
@@ -302,16 +298,20 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData {
} }
/** /**
* Updates listeners for current controller. * Updates UI and listeners for current controller.
*/ */
private void updateController() { private void updateController() {
ItemManager<? extends InventoryItem> catView = childController.getCatalogManager(); if (childController == null) { return; }
ItemManager<? extends InventoryItem> deckView = childController.getDeckManager();
final JTable catTable = catView.getTable();
final JTable deckTable = deckView.getTable();
final _FindAsYouType catFind = new _FindAsYouType(catView);
final _FindAsYouType deckFind = new _FindAsYouType(deckView);
final ItemManager<? extends InventoryItem> catView = childController.getCatalogManager();
final ItemManager<? extends InventoryItem> deckView = childController.getDeckManager();
final ItemTable<? extends InventoryItem> catTable = catView.getTable();
final ItemTable<? extends InventoryItem> deckTable = deckView.getTable();
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catView);
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckView);
if (!childController.listenersHooked) { //hook listeners the first time the controller is updated
catTable.addKeyListener(new KeyAdapter() { catTable.addKeyListener(new KeyAdapter() {
@Override @Override
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
@@ -376,6 +376,9 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData {
} }
}); });
final _FindAsYouType catFind = new _FindAsYouType(catView);
final _FindAsYouType deckFind = new _FindAsYouType(deckView);
catTable.addFocusListener(new FocusAdapter() { catTable.addFocusListener(new FocusAdapter() {
@Override @Override
public void focusLost(FocusEvent arg0) { public void focusLost(FocusEvent arg0) {
@@ -393,7 +396,18 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData {
catTable.addKeyListener(catFind); catTable.addKeyListener(catFind);
deckTable.addKeyListener(deckFind); deckTable.addKeyListener(deckFind);
childController.init(); childController.listenersHooked = true;
}
childController.update();
boolean wantElastic = SItemManagerIO.getPref(EditorPreference.elastic_columns);
boolean wantUnique = SItemManagerIO.getPref(EditorPreference.display_unique_only);
catTable.setWantElasticColumns(wantElastic);
deckTable.setWantElasticColumns(wantElastic);
catView.setWantUnique(wantUnique);
deckView.setWantUnique(wantUnique);
CCardCatalog.SINGLETON_INSTANCE.applyCurrentFilter();
} }
private class _FindAsYouType extends KeyAdapter { private class _FindAsYouType extends KeyAdapter {
@@ -566,10 +580,16 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData {
@Override @Override
public void initialize() { public void initialize() {
Singletons.getControl().getForgeMenu().setProvider(this); Singletons.getControl().getForgeMenu().setProvider(this);
if (this.childController == null) { //ensure child controller set
setCurrentEditorController(new CEditorConstructed()); //change to previously open child controller based on screen
FScreen screen = Singletons.getControl().getCurrentScreen();
ACEditorBase<? extends InventoryItem, ? extends DeckBase> screenChildController = screenChildControllers.get(screen);
if (screenChildController != null) {
setCurrentEditorController(screenChildController);
}
else if (screen == FScreen.DECK_EDITOR_CONSTRUCTED) {
setCurrentEditorController(new CEditorConstructed()); //ensure Constructed deck editor controller initialized
} }
Singletons.getView().getNavigationBar().setSelectedTab(this);
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -577,56 +597,5 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData {
*/ */
@Override @Override
public void update() { } public void update() { }
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabCaption()
*/
@Override
public String getTabCaption() {
return "Deck Editor";
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabIcon()
*/
@Override
public SkinImage getTabIcon() {
return FSkin.getImage(FSkin.EditorImages.IMG_PACK);
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabDestScreen()
*/
@Override
public Screens getTabDestScreen() {
return Screens.DECK_EDITOR_CONSTRUCTED;
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#allowTabClose()
*/
@Override
public boolean allowTabClose() {
return false;
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#canCloseTab()
*/
@Override
public String getCloseButtonTooltip() {
return "Close Editor";
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#onClosingTab()
*/
@Override
public boolean onClosing() {
if (canExit()) {
Singletons.getControl().changeState(Screens.HOME_SCREEN);
}
return false; //don't allow closing Deck Editor tab
}
} }

View File

@@ -8,6 +8,7 @@ import forge.Singletons;
import forge.deck.DeckBase; import forge.deck.DeckBase;
import forge.gui.deckeditor.controllers.DeckController; import forge.gui.deckeditor.controllers.DeckController;
import forge.gui.deckeditor.views.VCurrentDeck; import forge.gui.deckeditor.views.VCurrentDeck;
import forge.gui.framework.FScreen;
/** /**
* Handles editor preferences saving and loading. * Handles editor preferences saving and loading.
@@ -82,9 +83,9 @@ public class SEditorIO {
* @return boolean, true if success * @return boolean, true if success
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static boolean confirmSaveChanges() { public static boolean confirmSaveChanges(FScreen screen) {
if (!((DeckController<DeckBase>) CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckController()).isSaved()) { if (!((DeckController<DeckBase>) CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckController()).isSaved()) {
Singletons.getView().getNavigationBar().ensureTabActive(CDeckEditorUI.SINGLETON_INSTANCE); //ensure Deck Editor is active before showing dialog Singletons.getControl().ensureScreenActive(screen); //ensure Deck Editor is active before showing dialog
final int choice = JOptionPane.showConfirmDialog(JOptionPane.getRootFrame(), final int choice = JOptionPane.showConfirmDialog(JOptionPane.getRootFrame(),
"Save changes to current deck?", "Save changes to current deck?",
"Save Changes?", "Save Changes?",

View File

@@ -2,9 +2,10 @@ package forge.gui.deckeditor;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
import forge.Singletons;
import forge.gui.deckeditor.views.VCardCatalog; import forge.gui.deckeditor.views.VCardCatalog;
import forge.gui.framework.FScreen;
import forge.gui.framework.IVTopLevelUI; import forge.gui.framework.IVTopLevelUI;
import forge.gui.framework.SLayoutIO;
/** /**
/** /**
@@ -32,7 +33,6 @@ public enum VDeckEditorUI implements IVTopLevelUI {
*/ */
@Override @Override
public void populate() { public void populate() {
SLayoutIO.loadLayout(null);
SwingUtilities.invokeLater(new Runnable() { SwingUtilities.invokeLater(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -40,4 +40,25 @@ public enum VDeckEditorUI implements IVTopLevelUI {
} }
}); });
} }
/* (non-Javadoc)
* @see forge.gui.framework.IVTopLevelUI#onSwitching(forge.gui.framework.FScreen)
*/
@Override
public boolean onSwitching(FScreen screen) {
return CDeckEditorUI.SINGLETON_INSTANCE.canExit(); //ensure deck saved before switching away
}
/* (non-Javadoc)
* @see forge.gui.framework.IVTopLevelUI#onClosing()
*/
@Override
public boolean onClosing(FScreen screen) {
if (screen == FScreen.DECK_EDITOR_CONSTRUCTED) {
//don't close tab if Constructed editor, but return to home screen if this called
Singletons.getControl().setCurrentScreen(FScreen.HOME_SCREEN);
return false;
}
return CDeckEditorUI.SINGLETON_INSTANCE.canExit();
}
} }

View File

@@ -58,6 +58,7 @@ public abstract class ACEditorBase<TItem extends InventoryItem, TModel extends D
public void addTextFilterItem (); public void addTextFilterItem ();
} }
public boolean listenersHooked;
private ItemManager<TItem> catalogManager; private ItemManager<TItem> catalogManager;
private ItemManager<TItem> deckManager; private ItemManager<TItem> deckManager;
@@ -97,7 +98,7 @@ public abstract class ACEditorBase<TItem extends InventoryItem, TModel extends D
/** /**
* Resets and initializes the current editor. * Resets and initializes the current editor.
*/ */
public abstract void init(); public abstract void update();
/** /**
* Gets the ItemManager holding the cards in the current deck. * Gets the ItemManager holding the cards in the current deck.

View File

@@ -8,6 +8,7 @@ import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileFilter;
import forge.Command; import forge.Command;
import forge.Singletons;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckBase; import forge.deck.DeckBase;
import forge.deck.io.DeckSerializer; import forge.deck.io.DeckSerializer;
@@ -123,7 +124,7 @@ public enum CCurrentDeck implements ICDoc {
/** */ /** */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private void newDeck() { private void newDeck() {
if (!SEditorIO.confirmSaveChanges()) { return; } if (!SEditorIO.confirmSaveChanges(Singletons.getControl().getCurrentScreen())) { return; }
try { try {
SwingUtilities.invokeLater(new Runnable() { SwingUtilities.invokeLater(new Runnable() {
@@ -143,7 +144,7 @@ public enum CCurrentDeck implements ICDoc {
/** */ /** */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private void openDeck() { private void openDeck() {
if (!SEditorIO.confirmSaveChanges()) { return; } if (!SEditorIO.confirmSaveChanges(Singletons.getControl().getCurrentScreen())) { return; }
final File file = this.getImportFilename(); final File file = this.getImportFilename();

View File

@@ -6,6 +6,7 @@ import com.google.common.collect.Iterables;
import forge.Command; import forge.Command;
import forge.Constant; import forge.Constant;
import forge.Singletons;
import forge.card.CardDb; import forge.card.CardDb;
import forge.card.CardRulesPredicates; import forge.card.CardRulesPredicates;
import forge.deck.Deck; import forge.deck.Deck;
@@ -76,7 +77,7 @@ public enum CDeckgen implements ICDoc {
//========== Other methods //========== Other methods
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private <TItem extends InventoryItem, TModel extends DeckBase> void newRandomConstructed() { private <TItem extends InventoryItem, TModel extends DeckBase> void newRandomConstructed() {
if (!SEditorIO.confirmSaveChanges()) { return; } if (!SEditorIO.confirmSaveChanges(Singletons.getControl().getCurrentScreen())) { return; }
final Deck randomDeck = new Deck(); final Deck randomDeck = new Deck();
@@ -97,7 +98,7 @@ public enum CDeckgen implements ICDoc {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private <TItem extends InventoryItem, TModel extends DeckBase> void newGenerateConstructed(final int colorCount0) { private <TItem extends InventoryItem, TModel extends DeckBase> void newGenerateConstructed(final int colorCount0) {
if (!SEditorIO.confirmSaveChanges()) { return; } if (!SEditorIO.confirmSaveChanges(Singletons.getControl().getCurrentScreen())) { return; }
final Deck genConstructed = new Deck(); final Deck genConstructed = new Deck();

View File

@@ -37,7 +37,7 @@ 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.EDocID; import forge.gui.framework.FScreen;
import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.itemmanager.CardManager; import forge.gui.toolbox.itemmanager.CardManager;
import forge.gui.toolbox.itemmanager.SItemManagerIO; import forge.gui.toolbox.itemmanager.SItemManagerIO;
@@ -50,7 +50,6 @@ import forge.item.ItemPoolView;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.item.InventoryItem; import forge.item.InventoryItem;
import forge.item.ItemPool; import forge.item.ItemPool;
import forge.properties.ForgePreferences.FPref;
/** /**
* Child controller for constructed deck editor UI. * Child controller for constructed deck editor UI.
@@ -89,14 +88,8 @@ public final class CEditorCommander extends ACEditorBase<PaperCard, Deck> {
boolean wantUnique = SItemManagerIO.getPref(EditorPreference.display_unique_only); boolean wantUnique = SItemManagerIO.getPref(EditorPreference.display_unique_only);
final CardManager catalogManager = new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), wantUnique); this.setCatalogManager(new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), wantUnique));
final CardManager deckManager = new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), wantUnique); this.setDeckManager(new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), wantUnique));
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
this.setCatalogManager(catalogManager);
this.setDeckManager(deckManager);
final Supplier<Deck> newCreator = new Supplier<Deck>() { final Supplier<Deck> newCreator = new Supplier<Deck>() {
@Override @Override
@@ -187,7 +180,7 @@ public final class CEditorCommander extends ACEditorBase<PaperCard, Deck> {
* @see forge.gui.deckeditor.ACEditorBase#show(forge.Command) * @see forge.gui.deckeditor.ACEditorBase#show(forge.Command)
*/ */
@Override @Override
public void init() { public void update() {
final List<TableColumnInfo<InventoryItem>> lstCatalogCols = SColumnUtil.getCatalogDefaultColumns(); final List<TableColumnInfo<InventoryItem>> lstCatalogCols = SColumnUtil.getCatalogDefaultColumns();
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY)); lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
@@ -211,7 +204,7 @@ public final class CEditorCommander extends ACEditorBase<PaperCard, Deck> {
deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE); deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE);
allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE); allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE);
this.controller.newModel(); this.controller.refreshModel();
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -219,10 +212,7 @@ public final class CEditorCommander extends ACEditorBase<PaperCard, Deck> {
*/ */
@Override @Override
public boolean exit() { public boolean exit() {
// Override the submenu save choice - tell it to go to "constructed". if (!SEditorIO.confirmSaveChanges(FScreen.DECK_EDITOR_COMMANDER))
Singletons.getModel().getPreferences().setPref(FPref.SUBMENU_CURRENTMENU, EDocID.HOME_COMMANDER.toString());
if (!SEditorIO.confirmSaveChanges())
{ {
return false; return false;
} }

View File

@@ -33,7 +33,7 @@ import forge.deck.DeckSection;
import forge.gui.deckeditor.SEditorIO; import forge.gui.deckeditor.SEditorIO;
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.framework.EDocID; import forge.gui.framework.FScreen;
import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.itemmanager.CardManager; import forge.gui.toolbox.itemmanager.CardManager;
import forge.gui.toolbox.itemmanager.SItemManagerIO; import forge.gui.toolbox.itemmanager.SItemManagerIO;
@@ -46,7 +46,6 @@ import forge.item.PaperCard;
import forge.item.InventoryItem; import forge.item.InventoryItem;
import forge.item.ItemPool; import forge.item.ItemPool;
import forge.item.ItemPoolView; import forge.item.ItemPoolView;
import forge.properties.ForgePreferences.FPref;
/** /**
* Child controller for constructed deck editor UI. * Child controller for constructed deck editor UI.
@@ -85,21 +84,14 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
allSections.add(DeckSection.Planes); allSections.add(DeckSection.Planes);
//allSections.add(DeckSection.Commander); //allSections.add(DeckSection.Commander);
avatarPool = ItemPool.createFrom(CardDb.variants().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_VANGUARD, PaperCard.FN_GET_RULES)),PaperCard.class); avatarPool = ItemPool.createFrom(CardDb.variants().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_VANGUARD, PaperCard.FN_GET_RULES)),PaperCard.class);
planePool = ItemPool.createFrom(CardDb.variants().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_PLANE_OR_PHENOMENON, PaperCard.FN_GET_RULES)),PaperCard.class); planePool = ItemPool.createFrom(CardDb.variants().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_PLANE_OR_PHENOMENON, PaperCard.FN_GET_RULES)),PaperCard.class);
schemePool = ItemPool.createFrom(CardDb.variants().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_SCHEME, PaperCard.FN_GET_RULES)),PaperCard.class); schemePool = ItemPool.createFrom(CardDb.variants().getAllCards(Predicates.compose(CardRulesPredicates.Presets.IS_SCHEME, PaperCard.FN_GET_RULES)),PaperCard.class);
boolean wantUnique = SItemManagerIO.getPref(EditorPreference.display_unique_only); boolean wantUnique = SItemManagerIO.getPref(EditorPreference.display_unique_only);
final CardManager catalogManager = new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), wantUnique); this.setCatalogManager(new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), wantUnique));
final CardManager deckManager = new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), wantUnique); this.setDeckManager(new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), wantUnique));
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
this.setCatalogManager(catalogManager);
this.setDeckManager(deckManager);
final Supplier<Deck> newCreator = new Supplier<Deck>() { final Supplier<Deck> newCreator = new Supplier<Deck>() {
@Override @Override
@@ -181,7 +173,7 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
/* /*
* (non-Javadoc) * (non-Javadoc)
* *
* @see forge.gui.deckeditor.ACEditorBase#updateView() * @see forge.gui.deckeditor.ACEditorBase#resetTables()
*/ */
@Override @Override
public void resetTables() { public void resetTables() {
@@ -214,8 +206,7 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
String title = ""; String title = "";
String tabtext = ""; String tabtext = "";
Boolean showOptions = true; Boolean showOptions = true;
switch(sectionMode) switch(sectionMode) {
{
case Main: case Main:
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY)); lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
this.getCatalogManager().getTable().setAvailableColumns(lstCatalogCols); this.getCatalogManager().getTable().setAvailableColumns(lstCatalogCols);
@@ -275,6 +266,8 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
title = "Scheme"; title = "Scheme";
tabtext = "Card Catalog"; tabtext = "Card Catalog";
break; break;
case Commander:
break; //do nothing for Commander here
} }
VCardCatalog.SINGLETON_INSTANCE.getTabLabel().setText(tabtext); VCardCatalog.SINGLETON_INSTANCE.getTabLabel().setText(tabtext);
@@ -295,7 +288,7 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
*/ */
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Override @Override
public void init() { public void update() {
final List<TableColumnInfo<InventoryItem>> lstCatalogCols = SColumnUtil.getCatalogDefaultColumns(); final List<TableColumnInfo<InventoryItem>> lstCatalogCols = SColumnUtil.getCatalogDefaultColumns();
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY)); lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
@@ -311,7 +304,7 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
cycleEditorMode(); cycleEditorMode();
} }); } });
this.controller.newModel(); this.controller.refreshModel();
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -319,9 +312,6 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
*/ */
@Override @Override
public boolean exit() { public boolean exit() {
// Override the submenu save choice - tell it to go to "constructed". return SEditorIO.confirmSaveChanges(FScreen.DECK_EDITOR_CONSTRUCTED);
Singletons.getModel().getPreferences().setPref(FPref.SUBMENU_CURRENTMENU, EDocID.HOME_CONSTRUCTED.toString());
return SEditorIO.confirmSaveChanges();
} }
} }

View File

@@ -24,7 +24,6 @@ import forge.Constant;
import forge.Singletons; import forge.Singletons;
import forge.card.CardDb; import forge.card.CardDb;
import forge.card.CardEdition; import forge.card.CardEdition;
import forge.control.FControl;
import forge.deck.CardPool; import forge.deck.CardPool;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckGroup; import forge.deck.DeckGroup;
@@ -36,6 +35,7 @@ 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.FScreen;
import forge.gui.home.sanctioned.CSubmenuDraft; import forge.gui.home.sanctioned.CSubmenuDraft;
import forge.gui.toolbox.itemmanager.CardManager; import forge.gui.toolbox.itemmanager.CardManager;
import forge.gui.toolbox.itemmanager.table.SColumnUtil; import forge.gui.toolbox.itemmanager.table.SColumnUtil;
@@ -67,9 +67,6 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
final CardManager catalogManager = new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), false); final CardManager catalogManager = new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), false);
final CardManager deckManager = new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), false); final CardManager deckManager = new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), false);
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
catalogManager.setAlwaysNonUnique(true); catalogManager.setAlwaysNonUnique(true);
deckManager.setAlwaysNonUnique(true); deckManager.setAlwaysNonUnique(true);
@@ -87,19 +84,6 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
this.boosterDraft = inBoosterDraft; this.boosterDraft = inBoosterDraft;
} }
/**
* <p>
* setup.
* </p>
*/
private void setup() {
this.getCatalogManager().getTable().setup(SColumnUtil.getCatalogDefaultColumns());
this.getDeckManager().getTable().setup(SColumnUtil.getDeckDefaultColumns());
ccAddLabel = VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().getText();
VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().setText("Choose Card");
}
/* (non-Javadoc) /* (non-Javadoc)
* @see forge.gui.deckeditor.ACEditorBase#addCard() * @see forge.gui.deckeditor.ACEditorBase#addCard()
*/ */
@@ -230,7 +214,7 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
Singletons.getModel().getDecks().getDraft().add(finishedDraft); Singletons.getModel().getDecks().getDraft().add(finishedDraft);
} }
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN); Singletons.getControl().setCurrentScreen(FScreen.HOME_SCREEN);
} }
//========== Overridden from ACEditorBase //========== Overridden from ACEditorBase
@@ -260,8 +244,13 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
* @see forge.gui.deckeditor.ACEditorBase#show(forge.Command) * @see forge.gui.deckeditor.ACEditorBase#show(forge.Command)
*/ */
@Override @Override
public void init() { public void update() {
this.setup(); this.getCatalogManager().getTable().setup(SColumnUtil.getCatalogDefaultColumns());
this.getDeckManager().getTable().setup(SColumnUtil.getDeckDefaultColumns());
ccAddLabel = VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().getText();
VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().setText("Choose Card");
this.showChoices(this.boosterDraft.nextChoice()); this.showChoices(this.boosterDraft.nextChoice());
this.getDeckManager().setPool((Iterable<InventoryItem>) null); this.getDeckManager().setPool((Iterable<InventoryItem>) null);

View File

@@ -28,6 +28,7 @@ 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.FScreen;
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.gui.toolbox.itemmanager.CardManager; import forge.gui.toolbox.itemmanager.CardManager;
@@ -48,6 +49,7 @@ import forge.util.storage.IStorage;
public final class CEditorLimited extends ACEditorBase<PaperCard, DeckGroup> { public final class CEditorLimited extends ACEditorBase<PaperCard, DeckGroup> {
private final DeckController<DeckGroup> controller; private final DeckController<DeckGroup> controller;
private final FScreen screen;
private DragCell allDecksParent = null; private DragCell allDecksParent = null;
private DragCell deckGenParent = null; private DragCell deckGenParent = null;
@@ -58,13 +60,12 @@ public final class CEditorLimited extends ACEditorBase<PaperCard, DeckGroup> {
* *
* @param deckMap0 &emsp; {@link forge.deck.DeckGroup}<{@link forge.util.storage.IStorage}> * @param deckMap0 &emsp; {@link forge.deck.DeckGroup}<{@link forge.util.storage.IStorage}>
*/ */
public CEditorLimited(final IStorage<DeckGroup> deckMap0) { public CEditorLimited(final IStorage<DeckGroup> deckMap0, FScreen screen0) {
this.screen = screen0;
final CardManager catalogManager = new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), false); final CardManager catalogManager = new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), false);
final CardManager deckManager = new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), false); final CardManager deckManager = new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), false);
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
catalogManager.setAlwaysNonUnique(true); catalogManager.setAlwaysNonUnique(true);
deckManager.setAlwaysNonUnique(true); deckManager.setAlwaysNonUnique(true);
@@ -159,7 +160,7 @@ public final class CEditorLimited extends ACEditorBase<PaperCard, DeckGroup> {
* @see forge.gui.deckeditor.ACEditorBase#show(forge.Command) * @see forge.gui.deckeditor.ACEditorBase#show(forge.Command)
*/ */
@Override @Override
public void init() { public void update() {
this.getCatalogManager().getTable().setup(SColumnUtil.getCatalogDefaultColumns()); this.getCatalogManager().getTable().setup(SColumnUtil.getCatalogDefaultColumns());
this.getDeckManager().getTable().setup(SColumnUtil.getDeckDefaultColumns()); this.getDeckManager().getTable().setup(SColumnUtil.getDeckDefaultColumns());
@@ -183,7 +184,7 @@ public final class CEditorLimited extends ACEditorBase<PaperCard, DeckGroup> {
*/ */
@Override @Override
public boolean exit() { public boolean exit() {
final boolean okToExit = SEditorIO.confirmSaveChanges(); final boolean okToExit = SEditorIO.confirmSaveChanges(this.screen);
if (okToExit) { if (okToExit) {
CSubmenuDraft.SINGLETON_INSTANCE.update(); CSubmenuDraft.SINGLETON_INSTANCE.update();

View File

@@ -36,6 +36,7 @@ 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.FScreen;
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.itemmanager.CardManager; import forge.gui.toolbox.itemmanager.CardManager;
@@ -101,9 +102,6 @@ public final class CEditorQuest extends ACEditorBase<PaperCard, Deck> {
catalogManager.setAlwaysNonUnique(true); catalogManager.setAlwaysNonUnique(true);
deckManager.setAlwaysNonUnique(true); deckManager.setAlwaysNonUnique(true);
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
this.setCatalogManager(catalogManager); this.setCatalogManager(catalogManager);
this.setDeckManager(deckManager); this.setDeckManager(deckManager);
@@ -257,7 +255,7 @@ public final class CEditorQuest extends ACEditorBase<PaperCard, Deck> {
*/ */
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Override @Override
public void init() { public void update() {
final List<TableColumnInfo<InventoryItem>> columnsCatalog = SColumnUtil.getCatalogDefaultColumns(); final List<TableColumnInfo<InventoryItem>> columnsCatalog = SColumnUtil.getCatalogDefaultColumns();
final List<TableColumnInfo<InventoryItem>> columnsDeck = SColumnUtil.getDeckDefaultColumns(); final List<TableColumnInfo<InventoryItem>> columnsDeck = SColumnUtil.getDeckDefaultColumns();
@@ -281,8 +279,6 @@ public final class CEditorQuest extends ACEditorBase<PaperCard, Deck> {
this.getCatalogManager().getTable().setup(columnsCatalog); this.getCatalogManager().getTable().setup(columnsCatalog);
this.getDeckManager().getTable().setup(columnsDeck); this.getDeckManager().getTable().setup(columnsDeck);
Deck deck = new Deck();
SItemManagerUtil.resetUI(); SItemManagerUtil.resetUI();
VCurrentDeck.SINGLETON_INSTANCE.getBtnSave().setVisible(true); VCurrentDeck.SINGLETON_INSTANCE.getBtnSave().setVisible(true);
@@ -297,7 +293,12 @@ public final class CEditorQuest extends ACEditorBase<PaperCard, Deck> {
deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE); deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE);
allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE); allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE);
this.getDeckController().setModel(deck); if (this.controller.getModel() == null) {
this.getDeckController().setModel(new Deck());
}
else {
this.controller.refreshModel();
}
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -305,7 +306,7 @@ public final class CEditorQuest extends ACEditorBase<PaperCard, Deck> {
*/ */
@Override @Override
public boolean exit() { public boolean exit() {
final boolean okToExit = SEditorIO.confirmSaveChanges(); final boolean okToExit = SEditorIO.confirmSaveChanges(FScreen.DECK_EDITOR_QUEST);
if (okToExit) { if (okToExit) {
Singletons.getModel().getQuest().save(); Singletons.getModel().getQuest().save();
CSubmenuQuestDecks.SINGLETON_INSTANCE.update(); CSubmenuQuestDecks.SINGLETON_INSTANCE.update();

View File

@@ -133,9 +133,6 @@ public final class CEditorQuestCardShop extends ACEditorBase<InventoryItem, Deck
catalogManager.setAlwaysNonUnique(true); catalogManager.setAlwaysNonUnique(true);
deckManager.setAlwaysNonUnique(true); deckManager.setAlwaysNonUnique(true);
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
this.setCatalogManager(catalogManager); this.setCatalogManager(catalogManager);
this.setDeckManager(deckManager); this.setDeckManager(deckManager);
} }
@@ -158,62 +155,6 @@ public final class CEditorQuestCardShop extends ACEditorBase<InventoryItem, Deck
} }
} }
private void setup() {
final List<TableColumnInfo<InventoryItem>> columnsCatalog = SColumnUtil.getCatalogDefaultColumns();
final List<TableColumnInfo<InventoryItem>> columnsDeck = SColumnUtil.getDeckDefaultColumns();
// Add spell shop-specific columns
columnsCatalog.add(SColumnUtil.getColumn(ColumnName.CAT_PURCHASE_PRICE));
columnsCatalog.get(columnsCatalog.size() - 1).setSortAndDisplayFunctions(
this.fnPriceCompare, this.fnPriceGet);
columnsCatalog.add(1, SColumnUtil.getColumn(ColumnName.CAT_OWNED));
columnsCatalog.get(1).setSortAndDisplayFunctions(
questData.getCards().getFnOwnedCompare(), questData.getCards().getFnOwnedGet());
columnsDeck.add(SColumnUtil.getColumn(ColumnName.DECK_SALE_PRICE));
columnsDeck.get(columnsDeck.size() - 1).setSortAndDisplayFunctions(
this.fnPriceCompare, this.fnPriceSellGet);
columnsDeck.add(SColumnUtil.getColumn(ColumnName.DECK_NEW));
columnsDeck.get(columnsDeck.size() - 1).setSortAndDisplayFunctions(
this.questData.getCards().getFnNewCompare(), this.questData.getCards().getFnNewGet());
columnsDeck.add(SColumnUtil.getColumn(ColumnName.DECK_DECKS));
columnsDeck.get(columnsDeck.size() - 1).setSortAndDisplayFunctions(
this.fnDeckCompare, this.fnDeckGet);
// don't need AI column for either table
columnsCatalog.remove(SColumnUtil.getColumn(ColumnName.CAT_AI));
columnsDeck.remove(SColumnUtil.getColumn(ColumnName.DECK_AI));
// Setup with current column set
this.getCatalogManager().getTable().setup(columnsCatalog);
this.getDeckManager().getTable().setup(columnsDeck);
SItemManagerUtil.resetUI();
CCTabLabel = VCardCatalog.SINGLETON_INSTANCE.getTabLabel().getText();
VCardCatalog.SINGLETON_INSTANCE.getTabLabel().setText("Cards for sale");
CCAddLabel = VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().getText();
VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().setText("Buy Card");
CDTabLabel = VCurrentDeck.SINGLETON_INSTANCE.getTabLabel().getText();
VCurrentDeck.SINGLETON_INSTANCE.getTabLabel().setText("Your Cards");
CDRemLabel = VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove().getText();
VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove().setText("Sell Card");
VProbabilities.SINGLETON_INSTANCE.getTabLabel().setVisible(false);
prevRem4Label = VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove4().getText();
prevRem4Tooltip = VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove4().getToolTipText();
prevRem4Cmd = VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove4().getCommand();
VCurrentDeck.SINGLETON_INSTANCE.getPnlHeader().setVisible(false);
}
// fills number of decks using each card // fills number of decks using each card
private ItemPool<InventoryItem> countDecksForEachCard() { private ItemPool<InventoryItem> countDecksForEachCard() {
final ItemPool<InventoryItem> result = new ItemPool<InventoryItem>(InventoryItem.class); final ItemPool<InventoryItem> result = new ItemPool<InventoryItem>(InventoryItem.class);
@@ -485,8 +426,60 @@ public final class CEditorQuestCardShop extends ACEditorBase<InventoryItem, Deck
*/ */
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Override @Override
public void init() { public void update() {
setup(); final List<TableColumnInfo<InventoryItem>> columnsCatalog = SColumnUtil.getCatalogDefaultColumns();
final List<TableColumnInfo<InventoryItem>> columnsDeck = SColumnUtil.getDeckDefaultColumns();
// Add spell shop-specific columns
columnsCatalog.add(SColumnUtil.getColumn(ColumnName.CAT_PURCHASE_PRICE));
columnsCatalog.get(columnsCatalog.size() - 1).setSortAndDisplayFunctions(
this.fnPriceCompare, this.fnPriceGet);
columnsCatalog.add(1, SColumnUtil.getColumn(ColumnName.CAT_OWNED));
columnsCatalog.get(1).setSortAndDisplayFunctions(
questData.getCards().getFnOwnedCompare(), questData.getCards().getFnOwnedGet());
columnsDeck.add(SColumnUtil.getColumn(ColumnName.DECK_SALE_PRICE));
columnsDeck.get(columnsDeck.size() - 1).setSortAndDisplayFunctions(
this.fnPriceCompare, this.fnPriceSellGet);
columnsDeck.add(SColumnUtil.getColumn(ColumnName.DECK_NEW));
columnsDeck.get(columnsDeck.size() - 1).setSortAndDisplayFunctions(
this.questData.getCards().getFnNewCompare(), this.questData.getCards().getFnNewGet());
columnsDeck.add(SColumnUtil.getColumn(ColumnName.DECK_DECKS));
columnsDeck.get(columnsDeck.size() - 1).setSortAndDisplayFunctions(
this.fnDeckCompare, this.fnDeckGet);
// don't need AI column for either table
columnsCatalog.remove(SColumnUtil.getColumn(ColumnName.CAT_AI));
columnsDeck.remove(SColumnUtil.getColumn(ColumnName.DECK_AI));
// Setup with current column set
this.getCatalogManager().getTable().setup(columnsCatalog);
this.getDeckManager().getTable().setup(columnsDeck);
SItemManagerUtil.resetUI();
CCTabLabel = VCardCatalog.SINGLETON_INSTANCE.getTabLabel().getText();
VCardCatalog.SINGLETON_INSTANCE.getTabLabel().setText("Cards for sale");
CCAddLabel = VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().getText();
VCardCatalog.SINGLETON_INSTANCE.getBtnAdd().setText("Buy Card");
CDTabLabel = VCurrentDeck.SINGLETON_INSTANCE.getTabLabel().getText();
VCurrentDeck.SINGLETON_INSTANCE.getTabLabel().setText("Your Cards");
CDRemLabel = VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove().getText();
VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove().setText("Sell Card");
VProbabilities.SINGLETON_INSTANCE.getTabLabel().setVisible(false);
prevRem4Label = VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove4().getText();
prevRem4Tooltip = VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove4().getToolTipText();
prevRem4Cmd = VCurrentDeck.SINGLETON_INSTANCE.getBtnRemove4().getCommand();
VCurrentDeck.SINGLETON_INSTANCE.getPnlHeader().setVisible(false);
this.decksUsingMyCards = this.countDecksForEachCard(); this.decksUsingMyCards = this.countDecksForEachCard();
this.multiplier = this.questData.getCards().getSellMultiplier(); this.multiplier = this.questData.getCards().getSellMultiplier();

View File

@@ -23,7 +23,6 @@ import com.google.common.base.Predicate;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import forge.Singletons;
import forge.card.CardDb; import forge.card.CardDb;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckSection; import forge.deck.DeckSection;
@@ -33,7 +32,7 @@ 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.EDocID; import forge.gui.framework.FScreen;
import forge.gui.toolbox.itemmanager.CardManager; import forge.gui.toolbox.itemmanager.CardManager;
import forge.gui.toolbox.itemmanager.SItemManagerUtil; import forge.gui.toolbox.itemmanager.SItemManagerUtil;
import forge.gui.toolbox.itemmanager.table.TableColumnInfo; import forge.gui.toolbox.itemmanager.table.TableColumnInfo;
@@ -42,7 +41,6 @@ import forge.gui.toolbox.itemmanager.table.SColumnUtil.ColumnName;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.item.InventoryItem; import forge.item.InventoryItem;
import forge.item.ItemPool; import forge.item.ItemPool;
import forge.properties.ForgePreferences.FPref;
import forge.util.storage.IStorage; import forge.util.storage.IStorage;
/** /**
@@ -57,10 +55,10 @@ import forge.util.storage.IStorage;
*/ */
public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> { public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> {
private final DeckController<Deck> controller; private final DeckController<Deck> controller;
private final FScreen screen;
private DragCell allDecksParent = null; private DragCell allDecksParent = null;
private DragCell deckGenParent = null; private DragCell deckGenParent = null;
private final Predicate<PaperCard> cardPoolCondition; private final Predicate<PaperCard> cardPoolCondition;
private final EDocID exitToScreen;
//=========== Constructor //=========== Constructor
/** /**
@@ -68,20 +66,14 @@ public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> {
* This is the least restrictive mode; * This is the least restrictive mode;
* all cards are available. * all cards are available.
*/ */
public CEditorVariant(final IStorage<Deck> folder, final Predicate<PaperCard> poolCondition, final EDocID exitTo) { public CEditorVariant(final IStorage<Deck> folder, final Predicate<PaperCard> poolCondition, final FScreen screen0) {
super(); super();
cardPoolCondition = poolCondition; this.cardPoolCondition = poolCondition;
exitToScreen = exitTo; this.screen = screen0;
final CardManager catalogManager = new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), true); this.setCatalogManager(new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), true));
final CardManager deckManager = new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), true); this.setDeckManager(new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), true));
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
this.setCatalogManager(catalogManager);
this.setDeckManager(deckManager);
final Supplier<Deck> newCreator = new Supplier<Deck>() { final Supplier<Deck> newCreator = new Supplier<Deck>() {
@Override @Override
@@ -161,7 +153,7 @@ public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> {
* @see forge.gui.deckeditor.ACEditorBase#show(forge.Command) * @see forge.gui.deckeditor.ACEditorBase#show(forge.Command)
*/ */
@Override @Override
public void init() { public void update() {
final List<TableColumnInfo<InventoryItem>> lstCatalogCols = SColumnUtil.getCatalogDefaultColumns(); final List<TableColumnInfo<InventoryItem>> lstCatalogCols = SColumnUtil.getCatalogDefaultColumns();
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY)); lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
@@ -173,7 +165,7 @@ public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> {
deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE); deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE);
allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE); allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE);
this.controller.newModel(); this.controller.refreshModel();
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -181,10 +173,7 @@ public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> {
*/ */
@Override @Override
public boolean exit() { public boolean exit() {
// Override the submenu save choice - tell it to go to "constructed". if (!SEditorIO.confirmSaveChanges(this.screen))
Singletons.getModel().getPreferences().setPref(FPref.SUBMENU_CURRENTMENU, exitToScreen.toString());
if (!SEditorIO.confirmSaveChanges())
{ {
return false; return false;
} }

View File

@@ -32,6 +32,11 @@ import forge.util.storage.IStorage;
* *
* @param <T> the generic type * @param <T> the generic type
*/ */
/**
* TODO: Write javadoc for this type.
*
* @param <T>
*/
public class DeckController<T extends DeckBase> { public class DeckController<T extends DeckBase> {
private T model; private T model;
@@ -292,11 +297,17 @@ public class DeckController<T extends DeckBase> {
return this.modelInStore; return this.modelInStore;
} }
/* /**
* (non-Javadoc) * Refresh current model or create new one if none
*
* @see forge.gui.deckeditor.IDeckController#newModel()
*/ */
public void refreshModel() {
if (this.model == null) {
newModel();
}
else {
setModel(this.model, this.modelInStore);
}
}
/** /**
* New model. * New model.

View File

@@ -0,0 +1,197 @@
package forge.gui.framework;
import java.io.File;
import javax.swing.JOptionPane;
import forge.gui.bazaar.CBazaarUI;
import forge.gui.bazaar.VBazaarUI;
import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.VDeckEditorUI;
import forge.gui.home.CHomeUI;
import forge.gui.home.VHomeUI;
import forge.gui.match.VMatchUI;
import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FSkin.SkinImage;
import forge.properties.FileLocation;
import forge.properties.NewConstants;
/**
* Definitions for Forge screens
*
*/
public enum FScreen {
HOME_SCREEN(
VHomeUI.SINGLETON_INSTANCE,
CHomeUI.SINGLETON_INSTANCE,
"Home",
FSkin.getIcon(FSkin.InterfaceIcons.ICO_FAVICON),
false,
"Exit Forge",
null),
MATCH_SCREEN(
VMatchUI.SINGLETON_INSTANCE,
CHomeUI.SINGLETON_INSTANCE,
"Game",
FSkin.getIcon(FSkin.DockIcons.ICO_ALPHASTRIKE),
true,
"Concede Game",
NewConstants.MATCH_LAYOUT_FILE),
DECK_EDITOR_CONSTRUCTED(
VDeckEditorUI.SINGLETON_INSTANCE,
CDeckEditorUI.SINGLETON_INSTANCE,
"Deck Editor",
FSkin.getImage(FSkin.EditorImages.IMG_PACK),
false,
"Back to Home",
NewConstants.EDITOR_LAYOUT_FILE),
DECK_EDITOR_ARCHENEMY(
VDeckEditorUI.SINGLETON_INSTANCE,
CDeckEditorUI.SINGLETON_INSTANCE,
"Scheme Deck Editor",
FSkin.getImage(FSkin.EditorImages.IMG_PACK),
true,
"Close Editor",
NewConstants.EDITOR_LAYOUT_FILE),
DECK_EDITOR_COMMANDER(
VDeckEditorUI.SINGLETON_INSTANCE,
CDeckEditorUI.SINGLETON_INSTANCE,
"Commander Deck Editor",
FSkin.getImage(FSkin.EditorImages.IMG_PACK),
true,
"Close Editor",
NewConstants.EDITOR_LAYOUT_FILE),
DECK_EDITOR_PLANECHASE(
VDeckEditorUI.SINGLETON_INSTANCE,
CDeckEditorUI.SINGLETON_INSTANCE,
"Planar Deck Editor",
FSkin.getImage(FSkin.EditorImages.IMG_PACK),
true,
"Close Editor",
NewConstants.EDITOR_LAYOUT_FILE),
DECK_EDITOR_VANGUARD(
VDeckEditorUI.SINGLETON_INSTANCE,
CDeckEditorUI.SINGLETON_INSTANCE,
"Vanguard Deck Editor",
FSkin.getImage(FSkin.EditorImages.IMG_PACK),
true,
"Close Editor",
NewConstants.EDITOR_LAYOUT_FILE),
DECK_EDITOR_DRAFT(
VDeckEditorUI.SINGLETON_INSTANCE,
CDeckEditorUI.SINGLETON_INSTANCE,
"Draft Deck Editor",
FSkin.getImage(FSkin.EditorImages.IMG_PACK),
true,
"Close Editor",
NewConstants.EDITOR_LAYOUT_FILE),
DECK_EDITOR_SEALED(
VDeckEditorUI.SINGLETON_INSTANCE,
CDeckEditorUI.SINGLETON_INSTANCE,
"Sealed Deck Editor",
FSkin.getImage(FSkin.EditorImages.IMG_PACK),
true,
"Close Editor",
NewConstants.EDITOR_LAYOUT_FILE),
DECK_EDITOR_QUEST(
VDeckEditorUI.SINGLETON_INSTANCE,
CDeckEditorUI.SINGLETON_INSTANCE,
"Quest Deck Editor",
FSkin.getImage(FSkin.EditorImages.IMG_PACK),
true,
"Close Editor",
NewConstants.EDITOR_LAYOUT_FILE),
QUEST_CARD_SHOP(
VDeckEditorUI.SINGLETON_INSTANCE,
CDeckEditorUI.SINGLETON_INSTANCE,
"Spell Shop",
FSkin.getIcon(FSkin.QuestIcons.ICO_BOOK),
true,
"Leave Shop",
NewConstants.EDITOR_LAYOUT_FILE),
DRAFTING_PROCESS(
VDeckEditorUI.SINGLETON_INSTANCE,
CDeckEditorUI.SINGLETON_INSTANCE,
"Draft",
FSkin.getImage(FSkin.ZoneImages.ICO_HAND),
true,
"Leave Draft",
NewConstants.EDITOR_LAYOUT_FILE),
QUEST_BAZAAR(
VBazaarUI.SINGLETON_INSTANCE,
CBazaarUI.SINGLETON_INSTANCE,
"Bazaar",
FSkin.getIcon(FSkin.QuestIcons.ICO_BOTTLES),
true,
"Leave Bazaar",
null);
private final IVTopLevelUI view;
private final ICDoc controller;
private final String tabCaption;
private final SkinImage tabIcon;
private final boolean allowTabClose;
private final String closeButtonTooltip;
private final FileLocation layoutFile;
private FScreen(IVTopLevelUI view0, ICDoc controller0, String tabCaption0, SkinImage tabIcon0, boolean allowTabClose0, String closeButtonTooltip0, FileLocation layoutFile0) {
this.view = view0;
this.controller = controller0;
this.tabCaption = tabCaption0;
this.tabIcon = tabIcon0;
this.allowTabClose = allowTabClose0;
this.closeButtonTooltip = closeButtonTooltip0;
this.layoutFile = layoutFile0;
}
public IVTopLevelUI getView() {
return view;
}
public ICDoc getController() {
return controller;
}
public String getTabCaption() {
return tabCaption;
}
public SkinImage getTabIcon() {
return tabIcon;
}
public boolean allowTabClose() {
return allowTabClose;
}
public String getCloseButtonTooltip() {
return closeButtonTooltip;
}
public boolean onSwitching() {
return view.onSwitching(this);
}
public boolean onClosing() {
return view.onClosing(this);
}
public FileLocation getLayoutFile() {
return layoutFile;
}
public boolean deleteLayoutFile() {
if (layoutFile == null) { return false; }
try {
File file = new File(layoutFile.userPrefLoc);
file.delete();
return true;
}
catch (final Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), "Failed to delete layout file.");
}
return false;
}
}

View File

@@ -1,5 +1,7 @@
package forge.gui.framework; package forge.gui.framework;
import forge.gui.framework.FScreen;
/** /**
* This interface provides a unifying type for all top-level * This interface provides a unifying type for all top-level
* UI components. * UI components.
@@ -24,4 +26,16 @@ public interface IVTopLevelUI {
* a completely fresh layout on the component. * a completely fresh layout on the component.
*/ */
void populate(); void populate();
/**
* Fires when this view's tab is being switched away from.
*
* @return true to allow switching away from tab, false otherwise */
boolean onSwitching(FScreen screen);
/**
* Fires when this view's tab is closing.
*
* @return true to allow closing tab, false otherwise */
boolean onClosing(FScreen screen);
} }

View File

@@ -28,7 +28,6 @@ import javax.xml.stream.events.XMLEvent;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl.Screens;
import forge.gui.toolbox.FAbsolutePositioner; import forge.gui.toolbox.FAbsolutePositioner;
import forge.properties.FileLocation; import forge.properties.FileLocation;
import forge.properties.NewConstants; import forge.properties.NewConstants;
@@ -222,14 +221,6 @@ public final class SLayoutIO {
} }
} }
/**
* Gets preferred layout file corresponding to current state of UI.
* @return {@link java.lang.String}
*/
public static String getFilePreferred(Screens mode) {
return SLayoutIO.getFileForState(mode).userPrefLoc;
}
private final static AtomicBoolean saveRequested = new AtomicBoolean(false); private final static AtomicBoolean saveRequested = new AtomicBoolean(false);
/** Publicly-accessible save method, to neatly handle exception handling. /** Publicly-accessible save method, to neatly handle exception handling.
@@ -251,10 +242,10 @@ public final class SLayoutIO {
private synchronized static void save(final File f0) { private synchronized static void save(final File f0) {
final String fWriteTo; final String fWriteTo;
FileLocation file = SLayoutIO.getFileForState(Singletons.getControl().getState()); FileLocation file = Singletons.getControl().getCurrentScreen().getLayoutFile();
if (f0 == null) { if (f0 == null) {
if (null == file) { if (file == null) {
return; return;
} }
fWriteTo = file.userPrefLoc; fWriteTo = file.userPrefLoc;
@@ -318,65 +309,70 @@ public final class SLayoutIO {
public static void loadLayout(final File f) { public static void loadLayout(final File f) {
final FView view = FView.SINGLETON_INSTANCE; final FView view = FView.SINGLETON_INSTANCE;
final XMLInputFactory inputFactory = XMLInputFactory.newInstance();
FileLocation file = SLayoutIO.getFileForState(Singletons.getControl().getState());
FAbsolutePositioner.SINGLETON_INSTANCE.hideAll(); FAbsolutePositioner.SINGLETON_INSTANCE.hideAll();
view.getPnlInsets().removeAll(); view.getPnlInsets().removeAll();
view.getPnlInsets().setLayout(new BorderLayout()); view.getPnlInsets().setLayout(new BorderLayout());
view.getPnlInsets().add(view.getPnlContent(), BorderLayout.CENTER); view.getPnlInsets().add(view.getPnlContent(), BorderLayout.CENTER);
view.getPnlInsets().setBorder(new EmptyBorder(SLayoutConstants.BORDER_T, SLayoutConstants.BORDER_T, 0, 0)); view.getPnlInsets().setBorder(new EmptyBorder(SLayoutConstants.BORDER_T, SLayoutConstants.BORDER_T, 0, 0));
view.removeAllDragCells(); view.removeAllDragCells();
FileLocation file = Singletons.getControl().getCurrentScreen().getLayoutFile();
if (file != null) {
// Read a model for new layout // Read a model for new layout
MapOfLists<LayoutInfo, EDocID> model = null; MapOfLists<LayoutInfo, EDocID> model = null;
boolean usedCustomPrefsFile = false; boolean usedCustomPrefsFile = false;
FileInputStream fis = null; FileInputStream fis = null;
try { try {
if (f != null && f.exists()) if (f != null && f.exists()) {
fis = new FileInputStream(f); fis = new FileInputStream(f);
}
else { else {
File userSetting = new File(file.userPrefLoc); File userSetting = new File(file.userPrefLoc);
if (userSetting.exists()) { if (userSetting.exists()) {
usedCustomPrefsFile = true; usedCustomPrefsFile = true;
fis = new FileInputStream(userSetting); fis = new FileInputStream(userSetting);
} else { }
else {
fis = new FileInputStream(file.defaultLoc); fis = new FileInputStream(file.defaultLoc);
} }
} }
final XMLInputFactory inputFactory = XMLInputFactory.newInstance();
XMLEventReader xer = null; XMLEventReader xer = null;
try { try {
xer = inputFactory.createXMLEventReader(fis); xer = inputFactory.createXMLEventReader(fis);
model = readLayout(xer); model = readLayout(xer);
} catch (final Exception e) { // I don't care what happened inside, the layout is wrong } catch (final Exception e) { // I don't care what happened inside, the layout is wrong
try { try {
if ( xer != null ) xer.close(); if (xer != null) { xer.close(); }
} catch (final XMLStreamException x) { }
e.printStackTrace(); catch (final XMLStreamException x) {
x.printStackTrace();
} }
e.printStackTrace(); e.printStackTrace();
if ( usedCustomPrefsFile ) // the one we can safely delete if (usedCustomPrefsFile) { // the one we can safely delete
throw new InvalidLayoutFileException(); throw new InvalidLayoutFileException();
else }
else {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
}
} catch (FileNotFoundException e) { }
catch (FileNotFoundException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} finally { }
if ( fis != null ) finally {
if (fis != null) {
try { try {
fis.close(); fis.close();
} catch (IOException e) { }
catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
}
// Apply new layout // Apply new layout
for (Entry<LayoutInfo, Collection<EDocID>> kv : model.entrySet()) { for (Entry<LayoutInfo, Collection<EDocID>> kv : model.entrySet()) {
@@ -397,6 +393,7 @@ public final class SLayoutIO {
cell.setSelected(layoutInfo.getSelectedId().getDoc()); cell.setSelected(layoutInfo.getSelectedId().getDoc());
} }
} }
}
// Rough bounds are all in place; resize the window. // Rough bounds are all in place; resize the window.
SResizingUtil.resizeWindow(); SResizingUtil.resizeWindow();
@@ -470,33 +467,5 @@ public final class SLayoutIO {
writer0.add(EF.createEndElement("", "", propertyName)); writer0.add(EF.createEndElement("", "", propertyName));
writer0.add(NEWLINE); writer0.add(NEWLINE);
} }
/**
* Updates preferred / default layout addresses particular to each UI state.
* Always called before a load or a save, to ensure file addresses are correct.
* @return
*/
private static FileLocation getFileForState(Screens state) {
switch(state) {
case HOME_SCREEN:
return NewConstants.HOME_LAYOUT_FILE;
case MATCH_SCREEN:
return NewConstants.MATCH_LAYOUT_FILE;
case DECK_EDITOR_CONSTRUCTED:
case DECK_EDITOR_LIMITED:
case DECK_EDITOR_QUEST:
case DRAFTING_PROCESS:
case QUEST_CARD_SHOP:
return NewConstants.EDITOR_LAYOUT_FILE;
case QUEST_BAZAAR:
return null;
default:
throw new IllegalStateException("Layout load failed; UI state unknown.");
}
}
} }

View File

@@ -6,21 +6,17 @@ import javax.swing.JMenu;
import forge.Command; import forge.Command;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl.Screens;
import forge.gui.FNetOverlay; import forge.gui.FNetOverlay;
import forge.gui.framework.EDocID; import forge.gui.framework.EDocID;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.home.sanctioned.VSubmenuConstructed; import forge.gui.home.sanctioned.VSubmenuConstructed;
import forge.gui.menus.IMenuProvider; import forge.gui.menus.IMenuProvider;
import forge.gui.menus.MenuUtil; import forge.gui.menus.MenuUtil;
import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FSkin.SkinImage;
import forge.net.FServer; import forge.net.FServer;
import forge.net.NetServer; import forge.net.NetServer;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.properties.NewConstants; import forge.properties.NewConstants;
import forge.view.FNavigationBar.INavigationTabData;
/** /**
* Assembles Swing components of exit submenu option singleton. * Assembles Swing components of exit submenu option singleton.
@@ -28,7 +24,7 @@ import forge.view.FNavigationBar.INavigationTabData;
* <br><br><i>(V at beginning of class name denotes a view class.)</i> * <br><br><i>(V at beginning of class name denotes a view class.)</i>
* *
*/ */
public enum CHomeUI implements ICDoc, IMenuProvider, INavigationTabData { public enum CHomeUI implements ICDoc, IMenuProvider {
/** */ /** */
SINGLETON_INSTANCE; SINGLETON_INSTANCE;
@@ -106,8 +102,6 @@ public enum CHomeUI implements ICDoc, IMenuProvider, INavigationTabData {
FNetOverlay.SINGLETON_INSTANCE.getPanel().setVisible(false); FNetOverlay.SINGLETON_INSTANCE.getPanel().setVisible(false);
} }
}); });
Singletons.getView().getNavigationBar().setSelectedTab(this);
} }
/* (non-Javadoc) /* (non-Javadoc)
@@ -152,53 +146,4 @@ public enum CHomeUI implements ICDoc, IMenuProvider, INavigationTabData {
// No specific menus associated with Home screen. // No specific menus associated with Home screen.
return null; return null;
} }
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabCaption()
*/
@Override
public String getTabCaption() {
return "Home";
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabIcon()
*/
@Override
public SkinImage getTabIcon() {
return FSkin.getIcon(FSkin.InterfaceIcons.ICO_FAVICON);
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabDestScreen()
*/
@Override
public Screens getTabDestScreen() {
return Screens.HOME_SCREEN;
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#allowTabClose()
*/
@Override
public boolean allowTabClose() {
return false;
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#getTabCloseButtonTooltip()
*/
@Override
public String getCloseButtonTooltip() {
return "Exit Forge";
}
/* (non-Javadoc)
* @see forge.view.FNavigationBar.INavigationTabData#onClosingTab()
*/
@Override
public boolean onClosing() {
Singletons.getControl().exitForge();
return false; //don't allow closing Home tab
}
} }

View File

@@ -35,6 +35,7 @@ import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import forge.Singletons; import forge.Singletons;
import forge.gui.framework.EDocID; import forge.gui.framework.EDocID;
import forge.gui.framework.FScreen;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.framework.ILocalRepaint; import forge.gui.framework.ILocalRepaint;
import forge.gui.framework.IVTopLevelUI; import forge.gui.framework.IVTopLevelUI;
@@ -320,4 +321,21 @@ public enum VHomeUI implements IVTopLevelUI {
g2d.dispose(); g2d.dispose();
} }
} }
/* (non-Javadoc)
* @see forge.gui.framework.IVTopLevelUI#onSwitching(forge.gui.framework.FScreen)
*/
@Override
public boolean onSwitching(FScreen screen) {
return true;
}
/* (non-Javadoc)
* @see forge.gui.framework.IVTopLevelUI#onClosing(forge.control.FControl.Screens)
*/
@Override
public boolean onClosing(FScreen screen) {
Singletons.getControl().exitForge();
return false; //don't allow closing Home tab
}
} }

View File

@@ -6,11 +6,11 @@ import javax.swing.SwingUtilities;
import forge.Command; import forge.Command;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl;
import forge.deck.Deck; import forge.deck.Deck;
import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.controllers.CEditorQuest; import forge.gui.deckeditor.controllers.CEditorQuest;
import forge.gui.framework.EDocID; import forge.gui.framework.EDocID;
import forge.gui.framework.FScreen;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.home.CHomeUI; import forge.gui.home.CHomeUI;
import forge.quest.QuestController; import forge.quest.QuestController;
@@ -51,7 +51,7 @@ public enum CSubmenuQuestDecks implements ICDoc {
if (!SSubmenuQuestUtil.checkActiveQuest("Create a Deck.")) { if (!SSubmenuQuestUtil.checkActiveQuest("Create a Deck.")) {
return; return;
} }
Singletons.getControl().changeStateAutoFixLayout(FControl.Screens.DECK_EDITOR_QUEST, "deck editor"); Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_QUEST);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorQuest(Singletons.getModel().getQuest())); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(new CEditorQuest(Singletons.getModel().getQuest()));
} }
}); });

View File

@@ -10,10 +10,10 @@ import javax.swing.SwingUtilities;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.ImmutablePair;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.card.CardEdition; import forge.card.CardEdition;
import forge.control.FControl;
import forge.deck.Deck; import forge.deck.Deck;
import forge.game.GameType; import forge.game.GameType;
import forge.game.Match; import forge.game.Match;
@@ -23,6 +23,7 @@ import forge.gui.GuiChoose;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.controllers.CEditorQuestCardShop; import forge.gui.deckeditor.controllers.CEditorQuestCardShop;
import forge.gui.framework.FScreen;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.net.FServer; import forge.net.FServer;
import forge.net.Lobby; import forge.net.Lobby;
@@ -252,7 +253,7 @@ public class SSubmenuQuestUtil {
if (!checkActiveQuest("Visit the Spell Shop.")) { if (!checkActiveQuest("Visit the Spell Shop.")) {
return; return;
} }
Singletons.getControl().changeState(FControl.Screens.DECK_EDITOR_QUEST); Singletons.getControl().setCurrentScreen(FScreen.QUEST_CARD_SHOP);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController( CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(
new CEditorQuestCardShop(Singletons.getModel().getQuest())); new CEditorQuestCardShop(Singletons.getModel().getQuest()));
} }
@@ -262,7 +263,7 @@ public class SSubmenuQuestUtil {
if (!checkActiveQuest("Visit the Bazaar.")) { if (!checkActiveQuest("Visit the Bazaar.")) {
return; return;
} }
Singletons.getControl().changeState(FControl.Screens.QUEST_BAZAAR); Singletons.getControl().setCurrentScreen(FScreen.QUEST_BAZAAR);
Singletons.getView().getFrame().validate(); Singletons.getView().getFrame().validate();
} }

View File

@@ -12,7 +12,6 @@ import javax.swing.SwingUtilities;
import forge.Command; import forge.Command;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckGroup; import forge.deck.DeckGroup;
import forge.game.GameType; import forge.game.GameType;
@@ -24,6 +23,7 @@ import forge.gui.GuiChoose;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.controllers.CEditorDraftingProcess; import forge.gui.deckeditor.controllers.CEditorDraftingProcess;
import forge.gui.framework.FScreen;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.net.FServer; import forge.net.FServer;
import forge.net.Lobby; import forge.net.Lobby;
@@ -159,7 +159,7 @@ public enum CSubmenuDraft implements ICDoc {
final CEditorDraftingProcess draft = new CEditorDraftingProcess(); final CEditorDraftingProcess draft = new CEditorDraftingProcess();
draft.showGui(new BoosterDraft(o)); draft.showGui(new BoosterDraft(o));
Singletons.getControl().changeState(FControl.Screens.DRAFTING_PROCESS); Singletons.getControl().setCurrentScreen(FScreen.DRAFTING_PROCESS);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(draft); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(draft);
} }

View File

@@ -17,7 +17,6 @@ import org.apache.commons.lang3.StringUtils;
import forge.Command; import forge.Command;
import forge.Constant; import forge.Constant;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckBase; import forge.deck.DeckBase;
import forge.deck.DeckGroup; import forge.deck.DeckGroup;
@@ -31,6 +30,7 @@ import forge.gui.GuiChoose;
import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.controllers.ACEditorBase; import forge.gui.deckeditor.controllers.ACEditorBase;
import forge.gui.deckeditor.controllers.CEditorLimited; import forge.gui.deckeditor.controllers.CEditorLimited;
import forge.gui.framework.FScreen;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.item.InventoryItem; import forge.item.InventoryItem;
@@ -205,9 +205,9 @@ public enum CSubmenuSealed implements ICDoc {
Singletons.getModel().getDecks().getSealed().add(sealed); Singletons.getModel().getDecks().getSealed().add(sealed);
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(), FScreen.DECK_EDITOR_SEALED);
Singletons.getControl().changeStateAutoFixLayout(FControl.Screens.DECK_EDITOR_LIMITED, "deck editor"); Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_SEALED);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(editor); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(editor);
editor.getDeckController().setModel((T) sealed); editor.getDeckController().setModel((T) sealed);
} }

View File

@@ -2,7 +2,6 @@ package forge.gui.home.settings;
import java.awt.event.ItemEvent; import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import java.awt.event.ItemListener;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -19,11 +18,10 @@ import forge.Constant.Preferences;
import forge.GameLogEntryType; import forge.GameLogEntryType;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl.CloseAction; import forge.control.FControl.CloseAction;
import forge.control.FControl.Screens;
import forge.control.RestartUtil; import forge.control.RestartUtil;
import forge.game.ai.AiProfileUtil; import forge.game.ai.AiProfileUtil;
import forge.gui.framework.FScreen;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.framework.SLayoutIO;
import forge.gui.toolbox.FComboBoxPanel; import forge.gui.toolbox.FComboBoxPanel;
import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FLabel;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
@@ -174,10 +172,11 @@ public enum CSubmenuPreferences implements ICDoc {
"Reset layout?"; "Reset layout?";
int reply = JOptionPane.showConfirmDialog(JOptionPane.getRootFrame(), userPrompt, "Reset Deck Editor Layout", JOptionPane.YES_NO_OPTION); int reply = JOptionPane.showConfirmDialog(JOptionPane.getRootFrame(), userPrompt, "Reset Deck Editor Layout", JOptionPane.YES_NO_OPTION);
if (reply == JOptionPane.YES_OPTION) { if (reply == JOptionPane.YES_OPTION) {
deleteScreenLayoutFile(Screens.DECK_EDITOR_CONSTRUCTED); if (FScreen.DECK_EDITOR_CONSTRUCTED.deleteLayoutFile()) {
JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), "Deck Editor layout has been reset."); JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), "Deck Editor layout has been reset.");
} }
} }
}
private void resetMatchScreenLayout() { private void resetMatchScreenLayout() {
String userPrompt = String userPrompt =
@@ -187,15 +186,10 @@ public enum CSubmenuPreferences implements ICDoc {
"Reset layout?"; "Reset layout?";
int reply = JOptionPane.showConfirmDialog(JOptionPane.getRootFrame(), userPrompt, "Reset Match Screen Layout", JOptionPane.YES_NO_OPTION); int reply = JOptionPane.showConfirmDialog(JOptionPane.getRootFrame(), userPrompt, "Reset Match Screen Layout", JOptionPane.YES_NO_OPTION);
if (reply == JOptionPane.YES_OPTION) { if (reply == JOptionPane.YES_OPTION) {
deleteScreenLayoutFile(Screens.MATCH_SCREEN); if (FScreen.MATCH_SCREEN.deleteLayoutFile()) {
JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), "Match Screen layout has been reset."); JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), "Match Screen layout has been reset.");
} }
} }
private void deleteScreenLayoutFile(Screens screen) {
String fd = SLayoutIO.getFilePreferred(screen);
File f = new File(fd);
f.delete();
} }
private void initializeGameLogVerbosityComboBox() { private void initializeGameLogVerbosityComboBox() {

View File

@@ -13,7 +13,6 @@ import com.google.common.base.Predicate;
import forge.Command; import forge.Command;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckSection; import forge.deck.DeckSection;
import forge.deck.DeckgenUtil; import forge.deck.DeckgenUtil;
@@ -25,7 +24,7 @@ import forge.gui.SOverlayUtils;
import forge.gui.deckchooser.FDeckChooser; import forge.gui.deckchooser.FDeckChooser;
import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.controllers.CEditorVariant; import forge.gui.deckeditor.controllers.CEditorVariant;
import forge.gui.framework.EDocID; import forge.gui.framework.FScreen;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.toolbox.FList; import forge.gui.toolbox.FList;
import forge.item.PaperCard; import forge.item.PaperCard;
@@ -100,9 +99,9 @@ public enum CSubmenuArchenemy implements ICDoc {
} }
}; };
Singletons.getControl().changeStateAutoFixLayout(FControl.Screens.DECK_EDITOR_CONSTRUCTED, "deck editor"); Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_ARCHENEMY);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController( CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(
new CEditorVariant(Singletons.getModel().getDecks().getScheme(),predSchemes,EDocID.HOME_ARCHENEMY)); new CEditorVariant(Singletons.getModel().getDecks().getScheme(), predSchemes, FScreen.DECK_EDITOR_ARCHENEMY));
} }
}); });

View File

@@ -13,7 +13,6 @@ import javax.swing.SwingUtilities;
import forge.Command; import forge.Command;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl;
import forge.deck.Deck; import forge.deck.Deck;
import forge.game.GameType; import forge.game.GameType;
import forge.game.Match; import forge.game.Match;
@@ -23,6 +22,7 @@ import forge.gui.GuiDialog;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.controllers.CEditorCommander; import forge.gui.deckeditor.controllers.CEditorCommander;
import forge.gui.framework.FScreen;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.toolbox.FList; import forge.gui.toolbox.FList;
import forge.net.FServer; import forge.net.FServer;
@@ -94,7 +94,7 @@ public enum CSubmenuCommander implements ICDoc {
@Override @Override
public void run() { public void run() {
Singletons.getControl().changeStateAutoFixLayout(FControl.Screens.DECK_EDITOR_CONSTRUCTED, "deck editor"); Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_COMMANDER);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController( CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(
new CEditorCommander()); new CEditorCommander());
} }

View File

@@ -13,7 +13,6 @@ import com.google.common.base.Predicate;
import forge.Command; import forge.Command;
import forge.FThreads; import forge.FThreads;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckSection; import forge.deck.DeckSection;
import forge.deck.DeckgenUtil; import forge.deck.DeckgenUtil;
@@ -26,7 +25,7 @@ import forge.gui.SOverlayUtils;
import forge.gui.deckchooser.FDeckChooser; import forge.gui.deckchooser.FDeckChooser;
import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.controllers.CEditorVariant; import forge.gui.deckeditor.controllers.CEditorVariant;
import forge.gui.framework.EDocID; import forge.gui.framework.FScreen;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.toolbox.FList; import forge.gui.toolbox.FList;
import forge.item.PaperCard; import forge.item.PaperCard;
@@ -101,9 +100,9 @@ public enum CSubmenuPlanechase implements ICDoc {
} }
}; };
Singletons.getControl().changeStateAutoFixLayout(FControl.Screens.DECK_EDITOR_CONSTRUCTED, "deck editor"); Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_PLANECHASE);
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController( CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(
new CEditorVariant(Singletons.getModel().getDecks().getPlane(), predPlanes, EDocID.HOME_PLANECHASE)); new CEditorVariant(Singletons.getModel().getDecks().getPlane(), predPlanes, FScreen.DECK_EDITOR_PLANECHASE));
} }
}); });

View File

@@ -10,7 +10,6 @@ import javax.swing.JButton;
import forge.Card; import forge.Card;
import forge.Singletons; import forge.Singletons;
import forge.card.CardDb; import forge.card.CardDb;
import forge.control.FControl;
import forge.deck.Deck; import forge.deck.Deck;
import forge.game.Game; import forge.game.Game;
import forge.game.GameOutcome; import forge.game.GameOutcome;
@@ -21,6 +20,7 @@ import forge.game.player.Player;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.gui.GuiChoose; import forge.gui.GuiChoose;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.framework.FScreen;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.net.FServer; import forge.net.FServer;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
@@ -98,7 +98,7 @@ public class ControlWinLose {
// Reset other stuff // Reset other stuff
saveOptions(); saveOptions();
Singletons.getControl().endCurrentGame(); Singletons.getControl().endCurrentGame();
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN); Singletons.getControl().setCurrentScreen(FScreen.HOME_SCREEN);
SOverlayUtils.hideOverlay(); SOverlayUtils.hideOverlay();
} }

View File

@@ -37,7 +37,6 @@ import forge.card.CardEdition;
import forge.card.IUnOpenedProduct; import forge.card.IUnOpenedProduct;
import forge.card.SealedProductTemplate; import forge.card.SealedProductTemplate;
import forge.card.UnOpenedProduct; import forge.card.UnOpenedProduct;
import forge.control.FControl;
import forge.game.Game; import forge.game.Game;
import forge.game.GameEndReason; import forge.game.GameEndReason;
import forge.game.GameFormat; import forge.game.GameFormat;
@@ -50,6 +49,7 @@ import forge.game.player.PlayerStatistics;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.gui.GuiChoose; import forge.gui.GuiChoose;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.framework.FScreen;
import forge.gui.home.quest.CSubmenuChallenges; import forge.gui.home.quest.CSubmenuChallenges;
import forge.gui.home.quest.CSubmenuDuels; import forge.gui.home.quest.CSubmenuDuels;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
@@ -300,7 +300,7 @@ public class QuestWinLose extends ControlWinLose {
Singletons.getModel().getPreferences().save(); Singletons.getModel().getPreferences().save();
Singletons.getControl().endCurrentGame(); Singletons.getControl().endCurrentGame();
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN); Singletons.getControl().setCurrentScreen(FScreen.HOME_SCREEN);
SOverlayUtils.hideOverlay(); SOverlayUtils.hideOverlay();
} }

View File

@@ -35,8 +35,8 @@ import javax.swing.JPanel;
import forge.Card; import forge.Card;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl;
import forge.game.combat.Combat; import forge.game.combat.Combat;
import forge.gui.framework.FScreen;
import forge.gui.match.controllers.CDock; import forge.gui.match.controllers.CDock;
import forge.gui.match.nonsingleton.VField; import forge.gui.match.nonsingleton.VField;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
@@ -330,7 +330,7 @@ public enum TargetingOverlay {
public void paintComponent(final Graphics g) { public void paintComponent(final Graphics g) {
final Combat combat = Singletons.getControl().getObservedGame().getCombat(); // this will get deprecated too final Combat combat = Singletons.getControl().getObservedGame().getCombat(); // this will get deprecated too
// No need for this except in match view // No need for this except in match view
if (Singletons.getControl().getState() != FControl.Screens.MATCH_SCREEN) { return; } if (Singletons.getControl().getCurrentScreen() != FScreen.MATCH_SCREEN) { return; }
super.paintComponent(g); super.paintComponent(g);

View File

@@ -9,8 +9,8 @@ import javax.swing.SwingUtilities;
import forge.Singletons; import forge.Singletons;
import forge.gui.framework.DragCell; import forge.gui.framework.DragCell;
import forge.gui.framework.EDocID; import forge.gui.framework.EDocID;
import forge.gui.framework.FScreen;
import forge.gui.framework.IVTopLevelUI; import forge.gui.framework.IVTopLevelUI;
import forge.gui.framework.SLayoutIO;
import forge.gui.framework.SRearrangingUtil; import forge.gui.framework.SRearrangingUtil;
import forge.gui.framework.VEmptyDoc; import forge.gui.framework.VEmptyDoc;
import forge.gui.match.nonsingleton.VCommand; import forge.gui.match.nonsingleton.VCommand;
@@ -54,8 +54,6 @@ public enum VMatchUI implements IVTopLevelUI {
/** */ /** */
@Override @Override
public void populate() { public void populate() {
SLayoutIO.loadLayout(null);
// Dev mode disabled? Remove from parent cell if exists. // Dev mode disabled? Remove from parent cell if exists.
if (!Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_MODE_ENABLED)) { if (!Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_MODE_ENABLED)) {
if (VDev.SINGLETON_INSTANCE.getParentCell() != null) { if (VDev.SINGLETON_INSTANCE.getParentCell() != null) {
@@ -166,4 +164,24 @@ public enum VMatchUI implements IVTopLevelUI {
public List<VHand> getHands() { public List<VHand> getHands() {
return lstHands; return lstHands;
} }
/* (non-Javadoc)
* @see forge.gui.framework.IVTopLevelUI#onSwitching(forge.gui.framework.FScreen)
*/
@Override
public boolean onSwitching(FScreen screen) {
return true;
}
/* (non-Javadoc)
* @see forge.gui.framework.IVTopLevelUI#onClosing(forge.control.FControl.Screens)
*/
@Override
public boolean onClosing(FScreen screen) {
if (!Singletons.getControl().getObservedGame().isGameOver()) {
Singletons.getControl().stopGame();
return false; //delay hiding tab
}
return true;
}
} }

View File

@@ -52,6 +52,7 @@ import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.SaveOpenDialog; import forge.gui.toolbox.SaveOpenDialog;
import forge.gui.toolbox.SaveOpenDialog.Filetypes; import forge.gui.toolbox.SaveOpenDialog.Filetypes;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.properties.FileLocation;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.view.FView; import forge.view.FView;
@@ -109,7 +110,8 @@ public enum CDock implements ICDoc {
public void saveLayout() { public void saveLayout() {
final SaveOpenDialog dlgSave = new SaveOpenDialog(); final SaveOpenDialog dlgSave = new SaveOpenDialog();
final File defFile = new File(SLayoutIO.getFilePreferred(Singletons.getControl().getState())); final FileLocation layoutFile = Singletons.getControl().getCurrentScreen().getLayoutFile();
final File defFile = layoutFile != null ? new File(layoutFile.userPrefLoc) : null;
final File saveFile = dlgSave.SaveDialog(defFile, Filetypes.LAYOUT); final File saveFile = dlgSave.SaveDialog(defFile, Filetypes.LAYOUT);
if (saveFile != null) { if (saveFile != null) {
SLayoutIO.saveLayout(saveFile); SLayoutIO.saveLayout(saveFile);
@@ -120,7 +122,8 @@ public enum CDock implements ICDoc {
SOverlayUtils.genericOverlay(); SOverlayUtils.genericOverlay();
final SaveOpenDialog dlgOpen = new SaveOpenDialog(); final SaveOpenDialog dlgOpen = new SaveOpenDialog();
final File defFile = new File(SLayoutIO.getFilePreferred(Singletons.getControl().getState())); final FileLocation layoutFile = Singletons.getControl().getCurrentScreen().getLayoutFile();
final File defFile = layoutFile != null ? new File(layoutFile.userPrefLoc) : null;
final File loadFile = dlgOpen.OpenDialog(defFile, Filetypes.LAYOUT); final File loadFile = dlgOpen.OpenDialog(defFile, Filetypes.LAYOUT);
if (loadFile != null) { if (loadFile != null) {

View File

@@ -13,10 +13,10 @@ import javax.swing.JRadioButtonMenuItem;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl.Screens;
import forge.gui.GuiChoose; import forge.gui.GuiChoose;
import forge.gui.MouseUtil; import forge.gui.MouseUtil;
import forge.gui.MouseUtil.MouseCursor; import forge.gui.MouseUtil.MouseCursor;
import forge.gui.framework.FScreen;
import forge.gui.match.controllers.CDock; import forge.gui.match.controllers.CDock;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.properties.ForgePreferences; import forge.properties.ForgePreferences;
@@ -33,16 +33,16 @@ public final class LayoutMenu {
private LayoutMenu() { } private LayoutMenu() { }
private static final CDock controller = CDock.SINGLETON_INSTANCE; private static final CDock controller = CDock.SINGLETON_INSTANCE;
private static Screens currentScreen; private static FScreen currentScreen;
private static final ForgePreferences prefs = Singletons.getModel().getPreferences(); private static final ForgePreferences prefs = Singletons.getModel().getPreferences();
private static boolean showIcons = false; private static boolean showIcons = false;
public static JMenu getMenu() { public static JMenu getMenu() {
currentScreen = Singletons.getControl().getState(); currentScreen = Singletons.getControl().getCurrentScreen();
JMenu menu = new JMenu("Layout"); JMenu menu = new JMenu("Layout");
menu.setMnemonic(KeyEvent.VK_L); menu.setMnemonic(KeyEvent.VK_L);
if (currentScreen != Screens.HOME_SCREEN) { if (currentScreen != FScreen.HOME_SCREEN) {
menu.add(getMenu_ViewOptions()); menu.add(getMenu_ViewOptions());
menu.add(getMenu_FileOptions()); menu.add(getMenu_FileOptions());
} }
@@ -50,7 +50,7 @@ public final class LayoutMenu {
menu.addSeparator(); menu.addSeparator();
menu.add(getMenuItem_FullScreen()); menu.add(getMenuItem_FullScreen());
menu.add(getMenuItem_SetWindowSize()); menu.add(getMenuItem_SetWindowSize());
if (currentScreen != Screens.HOME_SCREEN) { if (currentScreen != FScreen.HOME_SCREEN) {
menu.add(getMenuItem_RevertLayout()); menu.add(getMenuItem_RevertLayout());
} }
return menu; return menu;
@@ -59,7 +59,7 @@ public final class LayoutMenu {
private static JMenu getMenu_ViewOptions() { private static JMenu getMenu_ViewOptions() {
JMenu menu = new JMenu("View"); JMenu menu = new JMenu("View");
menu.add(getMenuItem_ShowTabs()); menu.add(getMenuItem_ShowTabs());
if (currentScreen == Screens.MATCH_SCREEN) { if (currentScreen == FScreen.MATCH_SCREEN) {
menu.add(getMenuItem_ShowBackgroundImage()); menu.add(getMenuItem_ShowBackgroundImage());
} }
return menu; return menu;

View File

@@ -36,7 +36,6 @@ import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import forge.Command; import forge.Command;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl;
import forge.deck.CardCollections; import forge.deck.CardCollections;
import forge.deck.Deck; import forge.deck.Deck;
import forge.deck.DeckBase; import forge.deck.DeckBase;
@@ -44,9 +43,9 @@ import forge.deck.DeckSection;
import forge.game.GameType; import forge.game.GameType;
import forge.gui.deckeditor.CDeckEditorUI; import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.deckeditor.controllers.ACEditorBase; import forge.gui.deckeditor.controllers.ACEditorBase;
import forge.gui.deckeditor.controllers.CEditorConstructed;
import forge.gui.deckeditor.controllers.CEditorLimited; import forge.gui.deckeditor.controllers.CEditorLimited;
import forge.gui.deckeditor.controllers.CEditorQuest; import forge.gui.deckeditor.controllers.CEditorQuest;
import forge.gui.framework.FScreen;
import forge.gui.framework.ILocalRepaint; import forge.gui.framework.ILocalRepaint;
import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
@@ -436,33 +435,35 @@ public class DeckLister extends JPanel implements ILocalRepaint {
private <T extends DeckBase> void editDeck(final Deck d0) { private <T extends DeckBase> void editDeck(final Deck d0) {
ACEditorBase<? extends InventoryItem, ? extends DeckBase> editorCtrl = null; ACEditorBase<? extends InventoryItem, ? extends DeckBase> editorCtrl = null;
FControl.Screens newState = null; FScreen screen = null;
switch (this.gametype) { switch (this.gametype) {
case Quest: case Quest:
screen = FScreen.DECK_EDITOR_QUEST;
editorCtrl = new CEditorQuest(Singletons.getModel().getQuest()); editorCtrl = new CEditorQuest(Singletons.getModel().getQuest());
newState = FControl.Screens.DECK_EDITOR_QUEST;
break; break;
case Constructed: case Constructed:
newState = FControl.Screens.DECK_EDITOR_CONSTRUCTED; screen = FScreen.DECK_EDITOR_CONSTRUCTED;
editorCtrl = new CEditorConstructed(); //re-use constructed controller
break; break;
case Sealed: case Sealed:
editorCtrl = new CEditorLimited(Singletons.getModel().getDecks().getSealed()); screen = FScreen.DECK_EDITOR_SEALED;
newState = FControl.Screens.DECK_EDITOR_LIMITED; editorCtrl = new CEditorLimited(Singletons.getModel().getDecks().getSealed(), screen);
break; break;
case Draft: case Draft:
editorCtrl = new CEditorLimited(Singletons.getModel().getDecks().getDraft()); screen = FScreen.DECK_EDITOR_DRAFT;
newState = FControl.Screens.DECK_EDITOR_LIMITED; editorCtrl = new CEditorLimited(Singletons.getModel().getDecks().getDraft(), screen);
break; break;
default: default:
return; return;
} }
Singletons.getControl().changeStateAutoFixLayout(newState, "deck editor"); Singletons.getControl().setCurrentScreen(screen);
if (editorCtrl != null) {
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(editorCtrl); CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(editorCtrl);
editorCtrl.getDeckController().load(d0.getName()); }
CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckController().load(d0.getName());
} }
private void deleteDeck(final RowPanel r0) { private void deleteDeck(final RowPanel r0) {

View File

@@ -87,7 +87,6 @@ public final class NewConstants {
private static final String _DEFAULTS_DIR = _RES_ROOT + "defaults/"; private static final String _DEFAULTS_DIR = _RES_ROOT + "defaults/";
public static final FileLocation EDITOR_PREFERENCES_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "editor.preferences"); public static final FileLocation EDITOR_PREFERENCES_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "editor.preferences");
public static final FileLocation WINDOW_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "window.xml"); public static final FileLocation WINDOW_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "window.xml");
public static final FileLocation HOME_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "home.xml");
public static final FileLocation MATCH_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "match.xml"); public static final FileLocation MATCH_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "match.xml");
public static final FileLocation EDITOR_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "editor.xml"); public static final FileLocation EDITOR_LAYOUT_FILE = new FileLocation(_DEFAULTS_DIR, USER_PREFS_DIR, "editor.xml");
public static final FileLocation GAUNTLET_DIR = new FileLocation(_DEFAULTS_DIR, USER_DIR, "gauntlet/"); public static final FileLocation GAUNTLET_DIR = new FileLocation(_DEFAULTS_DIR, USER_DIR, "gauntlet/");

View File

@@ -31,6 +31,7 @@ import javax.swing.text.StyledDocument;
import net.miginfocom.swing.MigLayout; import net.miginfocom.swing.MigLayout;
import forge.Singletons; import forge.Singletons;
import forge.gui.bazaar.VBazaarUI;
import forge.gui.toolbox.FLabel; import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FScrollPane; import forge.gui.toolbox.FScrollPane;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
@@ -39,7 +40,6 @@ import forge.quest.QuestController;
import forge.quest.bazaar.IQuestBazaarItem; import forge.quest.bazaar.IQuestBazaarItem;
import forge.quest.bazaar.QuestStallDefinition; import forge.quest.bazaar.QuestStallDefinition;
import forge.quest.data.QuestAssets; import forge.quest.data.QuestAssets;
import forge.view.ViewBazaarUI;
/** /**
* <p> * <p>
@@ -55,15 +55,15 @@ public class ViewStall extends JPanel {
private final JTextPane tpnFluff; private final JTextPane tpnFluff;
private final JPanel pnlInventory; private final JPanel pnlInventory;
private final FScrollPane scrInventory; private final FScrollPane scrInventory;
private final ViewBazaarUI parentView; private final VBazaarUI parentView;
private final List<ViewItem> lstItemPanels; private final List<ViewItem> lstItemPanels;
private QuestStallDefinition stall; private QuestStallDefinition stall;
/** /**
* @param v0 * @param v0
* {@link forge.view.ViewBazaarUI} * {@link forge.gui.bazaar.VBazaarUI}
*/ */
public ViewStall(final ViewBazaarUI v0) { public ViewStall(final VBazaarUI v0) {
// Final/component inits // Final/component inits
this.lblStallName = new FLabel.Builder().text("").fontAlign(SwingConstants.CENTER).build(); this.lblStallName = new FLabel.Builder().text("").fontAlign(SwingConstants.CENTER).build();
this.lblEmpty = new FLabel.Builder().text("The merchant does not have anything useful for sale.") this.lblEmpty = new FLabel.Builder().text("The merchant does not have anything useful for sale.")
@@ -179,8 +179,8 @@ public class ViewStall extends JPanel {
} }
} }
/** @return {@link forge.view.ViewBazaarUI} */ /** @return {@link forge.gui.bazaar.VBazaarUI} */
public ViewBazaarUI getParentView() { public VBazaarUI getParentView() {
return this.parentView; return this.parentView;
} }
} }

View File

@@ -24,10 +24,8 @@ import javax.swing.Timer;
import javax.swing.border.EmptyBorder; import javax.swing.border.EmptyBorder;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl.Screens; import forge.gui.framework.FScreen;
import forge.gui.deckeditor.CDeckEditorUI;
import forge.gui.framework.ILocalRepaint; import forge.gui.framework.ILocalRepaint;
import forge.gui.home.CHomeUI;
import forge.gui.menus.ForgeMenu; import forge.gui.menus.ForgeMenu;
import forge.gui.menus.LayoutMenu; import forge.gui.menus.LayoutMenu;
import forge.gui.toolbox.FButton; import forge.gui.toolbox.FButton;
@@ -35,7 +33,6 @@ import forge.gui.toolbox.FDigitalClock;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.gui.toolbox.FSkin.JLabelSkin; import forge.gui.toolbox.FSkin.JLabelSkin;
import forge.gui.toolbox.FSkin.SkinColor; import forge.gui.toolbox.FSkin.SkinColor;
import forge.gui.toolbox.FSkin.SkinImage;
import forge.util.TypeUtil; import forge.util.TypeUtil;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@@ -75,7 +72,7 @@ public class FNavigationBar extends FTitleBarBase {
btnClose.setToolTipText("Close"); btnClose.setToolTipText("Close");
break; break;
case CLOSE_SCREEN: case CLOSE_SCREEN:
btnClose.setToolTipText(this.selectedTab.data.getCloseButtonTooltip()); btnClose.setToolTipText(this.selectedTab.screen.getCloseButtonTooltip());
break; break;
case EXIT_FORGE: case EXIT_FORGE:
btnClose.setToolTipText("Exit Forge"); btnClose.setToolTipText("Exit Forge");
@@ -90,8 +87,8 @@ public class FNavigationBar extends FTitleBarBase {
layout.putConstraint(SpringLayout.SOUTH, btnForge, -1, SpringLayout.SOUTH, this); layout.putConstraint(SpringLayout.SOUTH, btnForge, -1, SpringLayout.SOUTH, this);
addForgeButtonListeners(); addForgeButtonListeners();
addNavigationTab(CHomeUI.SINGLETON_INSTANCE); addNavigationTab(FScreen.HOME_SCREEN);
addNavigationTab(CDeckEditorUI.SINGLETON_INSTANCE); addNavigationTab(FScreen.DECK_EDITOR_CONSTRUCTED);
super.addControls(); super.addControls();
@@ -101,8 +98,8 @@ public class FNavigationBar extends FTitleBarBase {
updateClockVisibility(); updateClockVisibility();
} }
private NavigationTab addNavigationTab(INavigationTabData data) { private NavigationTab addNavigationTab(FScreen screen) {
NavigationTab tab = new NavigationTab(data); NavigationTab tab = new NavigationTab(screen);
if (tabs.size() == 0) { if (tabs.size() == 0) {
tab.setSelected(true); tab.setSelected(true);
selectedTab = tab; selectedTab = tab;
@@ -117,33 +114,27 @@ public class FNavigationBar extends FTitleBarBase {
return tab; return tab;
} }
private NavigationTab getTab(INavigationTabData data) { private NavigationTab getTab(FScreen screen) {
for (NavigationTab tab : tabs) { for (NavigationTab tab : tabs) {
if (tab.data == data) { if (tab.screen == screen) {
return tab; return tab;
} }
} }
return null; return null;
} }
public void ensureTabActive(INavigationTabData data) { public boolean canSwitchAway() {
NavigationTab tab = getTab(data); return (selectedTab == null || selectedTab.screen.onSwitching());
if (tab != null && !tab.selected) {
setSelectedTab(tab);
Singletons.getControl().changeStateAutoFixLayout(data.getTabDestScreen(), tab.getText());
}
} }
public void setSelectedTab(INavigationTabData data) { public void updateSelectedTab() {
NavigationTab tab = getTab(data); FScreen screen = Singletons.getControl().getCurrentScreen();
NavigationTab tab = getTab(screen);
if (tab == null) { if (tab == null) {
tab = addNavigationTab(data); //if tab not found, add and select it tab = addNavigationTab(screen); //if tab not found, add and select it
}
setSelectedTab(tab);
} }
else if (tab == selectedTab) { return; }
private void setSelectedTab(NavigationTab tab) {
if (tab != null && tab != selectedTab) {
if (selectedTab != null) { if (selectedTab != null) {
selectedTab.setSelected(false); selectedTab.setSelected(false);
} }
@@ -151,14 +142,13 @@ public class FNavigationBar extends FTitleBarBase {
selectedTab = tab; selectedTab = tab;
updateBtnCloseTooltip(); updateBtnCloseTooltip();
} }
}
public void closeSelectedTab() { public void closeSelectedTab() {
closeTab(selectedTab); closeTab(selectedTab);
} }
public void closeTab(INavigationTabData data) { public void closeTab(FScreen screen) {
NavigationTab tab = getTab(data); NavigationTab tab = getTab(screen);
if (tab != null) { if (tab != null) {
closeTab(tab); closeTab(tab);
} }
@@ -166,10 +156,13 @@ public class FNavigationBar extends FTitleBarBase {
private void closeTab(NavigationTab tab) { private void closeTab(NavigationTab tab) {
if (tab == null) { return; } if (tab == null) { return; }
if (!tab.data.onClosing()) { return; } //give data a chance to perform special close handling and/or cancel closing tab if (!tab.screen.onClosing()) { return; } //give screen a chance to perform special close handling and/or cancel closing tab
if (tab.selected) { if (tab.selected) {
setSelectedTab(tabs.get(0)); //select home tab if selected tab closed (TODO: support navigation history and go to previous tab instead) //return to Home screen if selected tab closed
//TODO: support navigation history and go to previous tab instead
this.selectedTab = null; //prevent raising onSwitching for tab being closed
Singletons.getControl().setCurrentScreen(FScreen.HOME_SCREEN);
} }
int index = tabs.indexOf(tab); int index = tabs.indexOf(tab);
if (index != -1) { if (index != -1) {
@@ -351,38 +344,29 @@ public class FNavigationBar extends FTitleBarBase {
public void setIconImage(Image image) { public void setIconImage(Image image) {
} }
public interface INavigationTabData {
public String getTabCaption();
public SkinImage getTabIcon();
public Screens getTabDestScreen();
public boolean allowTabClose();
public String getCloseButtonTooltip();
public boolean onClosing();
}
private final class NavigationTab extends JLabel implements ILocalRepaint { private final class NavigationTab extends JLabel implements ILocalRepaint {
private static final int fontSize = 14; private static final int fontSize = 14;
private static final int unhoveredAlpha = 150; private static final int unhoveredAlpha = 150;
private final FSkin.JLabelSkin<NavigationTab> skin; private final FSkin.JLabelSkin<NavigationTab> skin;
private final INavigationTabData data; private final FScreen screen;
private final CloseButton btnClose; private final CloseButton btnClose;
private SkinColor backColor; private SkinColor backColor;
private boolean selected = false; private boolean selected = false;
private boolean hovered = false; private boolean hovered = false;
private NavigationTab(final INavigationTabData data0) { private NavigationTab(final FScreen screen0) {
super(data0.getTabCaption()); super(screen0.getTabCaption());
this.data = data0; this.screen = screen0;
setOpaque(false); setOpaque(false);
skin = FSkin.get(this); skin = FSkin.get(this);
skin.setIcon(data0.getTabIcon()); skin.setIcon(screen0.getTabIcon());
skin.setForeground(foreColor.alphaColor(unhoveredAlpha)); skin.setForeground(foreColor.alphaColor(unhoveredAlpha));
skin.setFont(FSkin.getFont(fontSize)); skin.setFont(FSkin.getFont(fontSize));
int closeButtonOffset; int closeButtonOffset;
if (data.allowTabClose()) { if (screen.allowTabClose()) {
btnClose = new CloseButton(); btnClose = new CloseButton();
btnClose.setToolTipText(data.getCloseButtonTooltip()); btnClose.setToolTipText(screen.getCloseButtonTooltip());
closeButtonOffset = btnClose.getPreferredSize().width; closeButtonOffset = btnClose.getPreferredSize().width;
SpringLayout tabLayout = new SpringLayout(); SpringLayout tabLayout = new SpringLayout();
setLayout(tabLayout); setLayout(tabLayout);
@@ -402,11 +386,10 @@ public class FNavigationBar extends FTitleBarBase {
if (!NavigationTab.this.isEnabled()) { return; } if (!NavigationTab.this.isEnabled()) { return; }
if (SwingUtilities.isLeftMouseButton(e)) { if (SwingUtilities.isLeftMouseButton(e)) {
if (!selected) { if (!selected) {
FNavigationBar.this.setSelectedTab(NavigationTab.this); Singletons.getControl().setCurrentScreen(screen);
Singletons.getControl().changeStateAutoFixLayout(data.getTabDestScreen(), NavigationTab.this.getText());
} }
} }
else if (SwingUtilities.isMiddleMouseButton(e) && data.allowTabClose()) { else if (SwingUtilities.isMiddleMouseButton(e) && screen.allowTabClose()) {
FNavigationBar.this.closeTab(NavigationTab.this); FNavigationBar.this.closeTab(NavigationTab.this);
} }
} }

View File

@@ -33,14 +33,15 @@ import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import forge.Singletons; import forge.Singletons;
import forge.control.FControl;
import forge.control.RestartUtil; import forge.control.RestartUtil;
import forge.gui.FNetOverlay; import forge.gui.FNetOverlay;
import forge.gui.ImportDialog; import forge.gui.ImportDialog;
import forge.gui.SOverlayUtils; import forge.gui.SOverlayUtils;
import forge.gui.bazaar.VBazaarUI;
import forge.gui.deckeditor.VDeckEditorUI; import forge.gui.deckeditor.VDeckEditorUI;
import forge.gui.framework.DragCell; import forge.gui.framework.DragCell;
import forge.gui.framework.EDocID; import forge.gui.framework.EDocID;
import forge.gui.framework.FScreen;
import forge.gui.framework.SLayoutConstants; import forge.gui.framework.SLayoutConstants;
import forge.gui.framework.SLayoutIO; import forge.gui.framework.SLayoutIO;
import forge.gui.home.VHomeUI; import forge.gui.home.VHomeUI;
@@ -74,7 +75,7 @@ public enum FView {
private SplashFrame frmSplash; private SplashFrame frmSplash;
// Non-singleton instances (deprecated, but not updated yet) // Non-singleton instances (deprecated, but not updated yet)
private ViewBazaarUI bazaar = null; private VBazaarUI bazaar = null;
// Top-level UI components; all have getters. // Top-level UI components; all have getters.
private final FFrame frmDocument = new FFrame(); private final FFrame frmDocument = new FFrame();
@@ -152,7 +153,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.Screens.HOME_SCREEN); Singletons.getControl().setCurrentScreen(FScreen.HOME_SCREEN);
FView.this.frmSplash.dispose(); FView.this.frmSplash.dispose();
FView.this.frmSplash = null; FView.this.frmSplash = null;
@@ -408,9 +409,9 @@ public enum FView {
} }
} }
/** @return {@link forge.view.ViewBazaarUI} */ /** @return {@link forge.gui.bazaar.VBazaarUI} */
public ViewBazaarUI getViewBazaar() { public VBazaarUI getViewBazaar() {
if (Singletons.getControl().getState() != FControl.Screens.QUEST_BAZAAR) { if (Singletons.getControl().getCurrentScreen() != FScreen.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.");
} }
@@ -420,10 +421,10 @@ public enum FView {
/** */ /** */
private void cacheUIStates() { private void cacheUIStates() {
FView.this.bazaar = new ViewBazaarUI(Singletons.getModel().getQuest().getBazaar());
VMatchUI.SINGLETON_INSTANCE.instantiate(); VMatchUI.SINGLETON_INSTANCE.instantiate();
VHomeUI.SINGLETON_INSTANCE.instantiate(); VHomeUI.SINGLETON_INSTANCE.instantiate();
VDeckEditorUI.SINGLETON_INSTANCE.instantiate(); VDeckEditorUI.SINGLETON_INSTANCE.instantiate();
VBazaarUI.SINGLETON_INSTANCE.instantiate();
} }
public void incrementSplashProgessBar() { public void incrementSplashProgessBar() {