mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
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:
5
.gitattributes
vendored
5
.gitattributes
vendored
@@ -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/package-info.java svneol=native#text/plain
|
||||
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/FControlGameEventHandler.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/UnsortedListModel.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/DecksComboBoxEvent.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/DragTab.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/IDocIdList.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/Main.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/CardPanel.java svneol=native#text/plain
|
||||
src/main/java/forge/view/arcane/CardPanelContainer.java svneol=native#text/plain
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -52,15 +52,13 @@ import forge.game.player.Player;
|
||||
import forge.gui.GuiDialog;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.VDeckEditorUI;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.InvalidLayoutFileException;
|
||||
import forge.gui.framework.SDisplayUtil;
|
||||
import forge.gui.framework.SLayoutIO;
|
||||
import forge.gui.framework.SOverflowUtil;
|
||||
import forge.gui.framework.SResizingUtil;
|
||||
import forge.gui.home.CHomeUI;
|
||||
import forge.gui.home.VHomeUI;
|
||||
import forge.gui.home.settings.GamePlayerUtil;
|
||||
import forge.gui.match.CMatchUI;
|
||||
import forge.gui.match.VMatchUI;
|
||||
@@ -72,7 +70,6 @@ import forge.gui.match.nonsingleton.VField;
|
||||
import forge.gui.match.views.VAntes;
|
||||
import forge.gui.menus.ForgeMenu;
|
||||
import forge.gui.menus.MenuUtil;
|
||||
import forge.gui.toolbox.FAbsolutePositioner;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
import forge.net.FServer;
|
||||
import forge.properties.ForgePreferences;
|
||||
@@ -90,8 +87,8 @@ import forge.view.FView;
|
||||
* FControl.
|
||||
* </p>
|
||||
* Controls all Forge UI functionality inside one JFrame. This class switches
|
||||
* between various display states in that JFrame. Controllers are instantiated
|
||||
* separately by each state's top level view class.
|
||||
* between various display screens in that JFrame. Controllers are instantiated
|
||||
* separately by each screen's top level view class.
|
||||
*/
|
||||
public enum FControl implements KeyEventDispatcher {
|
||||
instance;
|
||||
@@ -99,22 +96,10 @@ public enum FControl implements KeyEventDispatcher {
|
||||
private ForgeMenu forgeMenu;
|
||||
private List<Shortcut> shortcuts;
|
||||
private JLayeredPane display;
|
||||
private Screens state = Screens.UNKNOWN;
|
||||
private FScreen currentScreen;
|
||||
private boolean altKeyLastDown;
|
||||
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 {
|
||||
NONE,
|
||||
CLOSE_SCREEN,
|
||||
@@ -128,8 +113,8 @@ public enum FControl implements KeyEventDispatcher {
|
||||
* FControl.
|
||||
* </p>
|
||||
* Controls all Forge UI functionality inside one JFrame. This class
|
||||
* switches between various display states in that JFrame. Controllers are
|
||||
* instantiated separately by each state's top level view class.
|
||||
* switches between various display screens in that JFrame. Controllers are
|
||||
* instantiated separately by each screen's top level view class.
|
||||
*/
|
||||
private FControl() {
|
||||
Singletons.getView().getFrame().addWindowListener(new WindowAdapter() {
|
||||
@@ -220,8 +205,6 @@ public enum FControl implements KeyEventDispatcher {
|
||||
// Preloads skin components (using progress bar).
|
||||
FSkin.loadFull(true);
|
||||
|
||||
this.forgeMenu = new ForgeMenu();
|
||||
|
||||
this.shortcuts = KeyboardShortcuts.attachKeyboardShortcuts();
|
||||
this.display = FView.SINGLETON_INSTANCE.getLpnDocument();
|
||||
|
||||
@@ -271,95 +254,70 @@ public enum FControl implements KeyEventDispatcher {
|
||||
}
|
||||
|
||||
public ForgeMenu getForgeMenu() {
|
||||
if (this.forgeMenu == null) {
|
||||
this.forgeMenu = new ForgeMenu();
|
||||
}
|
||||
return this.forgeMenu;
|
||||
}
|
||||
|
||||
/**
|
||||
* Switches between display states in top level JFrame.
|
||||
*/
|
||||
public void changeState(Screens screen) {
|
||||
//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)
|
||||
//if (this.state == screen) { return; }
|
||||
|
||||
clearChildren(JLayeredPane.DEFAULT_LAYER);
|
||||
this.state = screen;
|
||||
|
||||
// Fire up new state
|
||||
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:
|
||||
VMatchUI.SINGLETON_INSTANCE.populate();
|
||||
CMatchUI.SINGLETON_INSTANCE.initialize();
|
||||
FView.SINGLETON_INSTANCE.getPnlInsets().setVisible(true);
|
||||
showMatchBackgroundImage();
|
||||
SOverlayUtils.showTargetingOverlay();
|
||||
Singletons.getView().getNavigationBar().setSelectedTab(this.game);
|
||||
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);
|
||||
}
|
||||
public FScreen getCurrentScreen() {
|
||||
return this.currentScreen;
|
||||
}
|
||||
|
||||
private void showMatchBackgroundImage() {
|
||||
if (isMatchBackgroundImageVisible()) {
|
||||
FView.SINGLETON_INSTANCE.getPnlInsets().setForegroundImage(FSkin.getIcon(FSkin.Backgrounds.BG_MATCH));
|
||||
/**
|
||||
* Switches between display screens in top level JFrame.
|
||||
*/
|
||||
public void setCurrentScreen(FScreen screen) {
|
||||
//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)
|
||||
//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);
|
||||
SOverlayUtils.hideOverlay();
|
||||
|
||||
this.currentScreen = screen;
|
||||
|
||||
//load layout for new current screen
|
||||
try {
|
||||
SLayoutIO.loadLayout(null);
|
||||
} catch (InvalidLayoutFileException ex) {
|
||||
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.");
|
||||
if (screen.deleteLayoutFile()) {
|
||||
SLayoutIO.loadLayout(null); //try again
|
||||
}
|
||||
}
|
||||
|
||||
screen.getView().populate();
|
||||
screen.getController().initialize();
|
||||
|
||||
if (screen == FScreen.MATCH_SCREEN) {
|
||||
if (isMatchBackgroundImageVisible()) {
|
||||
FView.SINGLETON_INSTANCE.getPnlInsets().setForegroundImage(FSkin.getIcon(FSkin.Backgrounds.BG_MATCH));
|
||||
}
|
||||
SOverlayUtils.showTargetingOverlay();
|
||||
}
|
||||
|
||||
Singletons.getView().getNavigationBar().updateSelectedTab();
|
||||
}
|
||||
|
||||
private boolean isMatchBackgroundImageVisible() {
|
||||
return Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_MATCH_IMAGE_VISIBLE);
|
||||
}
|
||||
|
||||
public void changeStateAutoFixLayout(Screens newState, String stateName) {
|
||||
try {
|
||||
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);
|
||||
}
|
||||
}
|
||||
public void ensureScreenActive(FScreen screen) {
|
||||
if (this.currentScreen == screen) { return; }
|
||||
|
||||
/**
|
||||
* 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;
|
||||
setCurrentScreen(screen);
|
||||
}
|
||||
|
||||
/** @return List<Shortcut> A list of attached keyboard shortcut descriptions and properties. */
|
||||
@@ -455,10 +413,9 @@ public enum FControl implements KeyEventDispatcher {
|
||||
return inputQueue;
|
||||
}
|
||||
|
||||
|
||||
public final void startGameWithUi(Match match) {
|
||||
if (this.game != null) {
|
||||
this.changeState(Screens.MATCH_SCREEN);
|
||||
this.setCurrentScreen(FScreen.MATCH_SCREEN);
|
||||
SOverlayUtils.hideOverlay();
|
||||
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
|
||||
@@ -471,7 +428,7 @@ public enum FControl implements KeyEventDispatcher {
|
||||
|
||||
public final void endCurrentGame() {
|
||||
if (this.game == null) { return; }
|
||||
Singletons.getView().getNavigationBar().closeTab(this.game);
|
||||
Singletons.getView().getNavigationBar().closeTab(FScreen.MATCH_SCREEN);
|
||||
this.game = null;
|
||||
}
|
||||
|
||||
@@ -502,7 +459,7 @@ public enum FControl implements KeyEventDispatcher {
|
||||
|
||||
Singletons.getModel().getPreferences().actuateMatchPreferences();
|
||||
|
||||
changeStateAutoFixLayout(Screens.MATCH_SCREEN, "match");
|
||||
setCurrentScreen(FScreen.MATCH_SCREEN);
|
||||
SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc());
|
||||
|
||||
CMessage.SINGLETON_INSTANCE.getInputControl().setGame(game);
|
||||
|
||||
@@ -18,6 +18,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.SDisplayUtil;
|
||||
import forge.gui.home.settings.VSubmenuPreferences.KeyboardShortcutField;
|
||||
import forge.gui.match.controllers.CDock;
|
||||
@@ -50,7 +51,7 @@ public class KeyboardShortcuts {
|
||||
final Action actShowStack = new AbstractAction() {
|
||||
@Override
|
||||
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());
|
||||
}
|
||||
};
|
||||
@@ -59,7 +60,7 @@ public class KeyboardShortcuts {
|
||||
final Action actShowCombat = new AbstractAction() {
|
||||
@Override
|
||||
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());
|
||||
}
|
||||
};
|
||||
@@ -68,7 +69,7 @@ public class KeyboardShortcuts {
|
||||
final Action actShowConsole = new AbstractAction() {
|
||||
@Override
|
||||
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());
|
||||
}
|
||||
};
|
||||
@@ -77,7 +78,7 @@ public class KeyboardShortcuts {
|
||||
final Action actShowPlayers = new AbstractAction() {
|
||||
@Override
|
||||
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());
|
||||
}
|
||||
};
|
||||
@@ -86,7 +87,7 @@ public class KeyboardShortcuts {
|
||||
final Action actShowDev = new AbstractAction() {
|
||||
@Override
|
||||
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)) {
|
||||
SDisplayUtil.showTab(EDocID.DEV_MODE.getDoc());
|
||||
}
|
||||
@@ -97,7 +98,7 @@ public class KeyboardShortcuts {
|
||||
final Action actConcede = new AbstractAction() {
|
||||
@Override
|
||||
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();
|
||||
}
|
||||
};
|
||||
@@ -106,7 +107,7 @@ public class KeyboardShortcuts {
|
||||
final Action actEndTurn = new AbstractAction() {
|
||||
@Override
|
||||
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();
|
||||
}
|
||||
};
|
||||
@@ -115,7 +116,7 @@ public class KeyboardShortcuts {
|
||||
final Action actAllAttack = new AbstractAction() {
|
||||
@Override
|
||||
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();
|
||||
}
|
||||
};
|
||||
@@ -124,7 +125,7 @@ public class KeyboardShortcuts {
|
||||
final Action actTgtOverlay = new AbstractAction() {
|
||||
@Override
|
||||
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();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -30,14 +30,11 @@ import forge.CardLists;
|
||||
import forge.ColorChanger;
|
||||
import forge.FThreads;
|
||||
import forge.GameLog;
|
||||
import forge.Singletons;
|
||||
import forge.StaticEffects;
|
||||
import forge.card.replacement.ReplacementHandler;
|
||||
import forge.card.spellability.SpellAbilityStackInstance;
|
||||
import forge.card.trigger.TriggerHandler;
|
||||
import forge.card.trigger.TriggerType;
|
||||
import forge.control.FControl;
|
||||
import forge.control.FControl.Screens;
|
||||
import forge.game.combat.Combat;
|
||||
import forge.game.event.GameEvent;
|
||||
import forge.game.event.GameEventGameOutcome;
|
||||
@@ -51,15 +48,11 @@ import forge.game.player.Player;
|
||||
import forge.game.zone.MagicStack;
|
||||
import forge.game.zone.Zone;
|
||||
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.
|
||||
*/
|
||||
public class Game implements INavigationTabData {
|
||||
public class Game {
|
||||
private final GameType type;
|
||||
private final List<Player> roIngamePlayers;
|
||||
private final List<Player> allPlayers;
|
||||
@@ -593,58 +586,4 @@ public class Game implements INavigationTabData {
|
||||
// TODO Auto-generated method stub
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
71
src/main/java/forge/gui/bazaar/CBazaarUI.java
Normal file
71
src/main/java/forge/gui/bazaar/CBazaarUI.java
Normal 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   {@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   {@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
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package forge.view;
|
||||
package forge.gui.bazaar;
|
||||
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.SwingConstants;
|
||||
@@ -7,58 +7,35 @@ import javax.swing.SwingUtilities;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.control.ControlBazaarUI;
|
||||
import forge.control.FControl;
|
||||
import forge.control.FControl.Screens;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.IVTopLevelUI;
|
||||
import forge.gui.toolbox.FLabel;
|
||||
import forge.gui.toolbox.FPanel;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
import forge.gui.toolbox.FSkin.SkinImage;
|
||||
import forge.quest.bazaar.QuestBazaarManager;
|
||||
import forge.quest.gui.ViewStall;
|
||||
import forge.view.FNavigationBar.INavigationTabData;
|
||||
import forge.view.FView;
|
||||
|
||||
|
||||
/** Lays out containers and borders for resizeable layout and
|
||||
* instantiates top-level controller for bazaar UI. */
|
||||
@SuppressWarnings("serial")
|
||||
public class ViewBazaarUI extends FPanel implements INavigationTabData {
|
||||
private final JPanel pnlAllStalls;
|
||||
private final ViewStall pnlSingleStall;
|
||||
private final ControlBazaarUI control;
|
||||
public enum VBazaarUI implements IVTopLevelUI {
|
||||
/** */
|
||||
SINGLETON_INSTANCE;
|
||||
|
||||
private JPanel pnlAllStalls;
|
||||
private ViewStall pnlSingleStall;
|
||||
private FLabel previousSelected;
|
||||
private final QuestBazaarManager bazaar;
|
||||
private QuestBazaarManager bazaar;
|
||||
|
||||
/** Lays out containers and borders for resizeable layout and
|
||||
* instantiates top-level controller for bazaar UI.
|
||||
* @param bazaar0 */
|
||||
public ViewBazaarUI(QuestBazaarManager bazaar0) {
|
||||
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));
|
||||
private VBazaarUI() {
|
||||
}
|
||||
|
||||
/** */
|
||||
@SuppressWarnings("serial")
|
||||
public void populateStalls() {
|
||||
for (final String s : bazaar.getStallNames()) {
|
||||
|
||||
@@ -74,7 +51,7 @@ public class ViewBazaarUI extends FPanel implements INavigationTabData {
|
||||
if (previousSelected != null) { previousSelected.setSelected(false); }
|
||||
lbl.setSelected(true);
|
||||
previousSelected = lbl;
|
||||
control.showStall(s);
|
||||
CBazaarUI.SINGLETON_INSTANCE.showStall(s, bazaar);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -105,53 +82,52 @@ public class ViewBazaarUI extends FPanel implements INavigationTabData {
|
||||
public ViewStall getPnlSingleStall() {
|
||||
return this.pnlSingleStall;
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.view.FNavigationBar.INavigationTabData#getTabCaption()
|
||||
* @see forge.gui.framework.IVTopLevelUI#instantiate()
|
||||
*/
|
||||
@Override
|
||||
public String getTabCaption() {
|
||||
return "Bazaar";
|
||||
public void instantiate() {
|
||||
// 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)
|
||||
* @see forge.view.FNavigationBar.INavigationTabData#getTabIcon()
|
||||
* @see forge.gui.framework.IVTopLevelUI#populate()
|
||||
*/
|
||||
@Override
|
||||
public SkinImage getTabIcon() {
|
||||
return FSkin.getIcon(FSkin.QuestIcons.ICO_BOTTLES);
|
||||
public void populate() {
|
||||
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)
|
||||
* @see forge.view.FNavigationBar.INavigationTabData#getTabDestScreen()
|
||||
* @see forge.gui.framework.IVTopLevelUI#onSwitching(forge.gui.framework.FScreen)
|
||||
*/
|
||||
@Override
|
||||
public Screens getTabDestScreen() {
|
||||
return Screens.QUEST_BAZAAR;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.view.FNavigationBar.INavigationTabData#allowTabClose()
|
||||
*/
|
||||
@Override
|
||||
public boolean allowTabClose() {
|
||||
public boolean onSwitching(FScreen screen) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.view.FNavigationBar.INavigationTabData#canCloseTab()
|
||||
*/
|
||||
@Override
|
||||
public String getCloseButtonTooltip() {
|
||||
return "Leave Bazaar";
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see forge.view.FNavigationBar.INavigationTabData#onClosingTab()
|
||||
*/
|
||||
@Override
|
||||
public boolean onClosing() {
|
||||
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
|
||||
public boolean onClosing(FScreen screen) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,7 @@ import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.JMenu;
|
||||
@@ -48,7 +49,6 @@ import com.google.common.primitives.Ints;
|
||||
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl.Screens;
|
||||
import forge.deck.DeckBase;
|
||||
import forge.gui.GuiUtils;
|
||||
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.CStatistics;
|
||||
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.match.controllers.CDetail;
|
||||
import forge.gui.match.controllers.CPicture;
|
||||
import forge.gui.menus.IMenuProvider;
|
||||
import forge.gui.toolbox.FLabel;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
import forge.gui.toolbox.FSkin.SkinImage;
|
||||
import forge.gui.toolbox.itemmanager.ItemManager;
|
||||
import forge.gui.toolbox.itemmanager.SItemManagerIO;
|
||||
import forge.gui.toolbox.itemmanager.SItemManagerIO.EditorPreference;
|
||||
import forge.gui.toolbox.itemmanager.table.ItemTable;
|
||||
import forge.gui.toolbox.itemmanager.table.ItemTableModel;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.view.FNavigationBar.INavigationTabData;
|
||||
|
||||
/**
|
||||
* 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>
|
||||
*/
|
||||
public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData {
|
||||
public enum CDeckEditorUI implements ICDoc, IMenuProvider {
|
||||
/** */
|
||||
SINGLETON_INSTANCE;
|
||||
|
||||
private final HashMap<FScreen, ACEditorBase<? extends InventoryItem, ? extends DeckBase>> screenChildControllers;
|
||||
private ACEditorBase<? extends InventoryItem, ? extends DeckBase> childController;
|
||||
private boolean isFindingAsYouType = false;
|
||||
|
||||
private CDeckEditorUI() {
|
||||
screenChildControllers = new HashMap<FScreen, ACEditorBase<? extends InventoryItem, ? extends DeckBase>>();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -119,17 +122,10 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData {
|
||||
* @param editor0   {@link forge.gui.deckeditor.controllers.ACEditorBase}<?, ?>
|
||||
*/
|
||||
public void setCurrentEditorController(ACEditorBase<? extends InventoryItem, ? extends DeckBase> editor0) {
|
||||
if (this.childController == editor0) { return; }
|
||||
this.childController = editor0;
|
||||
screenChildControllers.put(Singletons.getControl().getCurrentScreen(), editor0);
|
||||
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 {
|
||||
@@ -302,98 +298,116 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData {
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates listeners for current controller.
|
||||
* Updates UI and listeners for current controller.
|
||||
*/
|
||||
private void updateController() {
|
||||
ItemManager<? extends InventoryItem> catView = childController.getCatalogManager();
|
||||
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);
|
||||
if (childController == null) { return; }
|
||||
|
||||
catTable.addKeyListener(new KeyAdapter() {
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if (!isFindingAsYouType && KeyEvent.VK_SPACE == e.getKeyCode()) {
|
||||
addSelectedCards(e.isControlDown() || e.isMetaDown(), e.isShiftDown() ? 4: 1);
|
||||
} else if (KeyEvent.VK_LEFT == e.getKeyCode() || KeyEvent.VK_RIGHT == e.getKeyCode()) {
|
||||
deckTable.requestFocusInWindow();
|
||||
} else if (KeyEvent.VK_F == e.getKeyCode()) {
|
||||
// let ctrl/cmd-F set focus to the text filter box
|
||||
if (e.isControlDown() || e.isMetaDown()) {
|
||||
VCardCatalog.SINGLETON_INSTANCE.getTxfSearch().requestFocusInWindow();
|
||||
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() {
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if (!isFindingAsYouType && KeyEvent.VK_SPACE == e.getKeyCode()) {
|
||||
addSelectedCards(e.isControlDown() || e.isMetaDown(), e.isShiftDown() ? 4: 1);
|
||||
} else if (KeyEvent.VK_LEFT == e.getKeyCode() || KeyEvent.VK_RIGHT == e.getKeyCode()) {
|
||||
deckTable.requestFocusInWindow();
|
||||
} else if (KeyEvent.VK_F == e.getKeyCode()) {
|
||||
// let ctrl/cmd-F set focus to the text filter box
|
||||
if (e.isControlDown() || e.isMetaDown()) {
|
||||
VCardCatalog.SINGLETON_INSTANCE.getTxfSearch().requestFocusInWindow();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
deckTable.addKeyListener(new KeyAdapter() {
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if (!isFindingAsYouType && KeyEvent.VK_SPACE == e.getKeyCode()) {
|
||||
removeSelectedCards(e.isControlDown() || e.isMetaDown(), e.isShiftDown() ? 4: 1);
|
||||
} else if (KeyEvent.VK_LEFT == e.getKeyCode() || KeyEvent.VK_RIGHT == e.getKeyCode()) {
|
||||
catTable.requestFocusInWindow();
|
||||
});
|
||||
|
||||
deckTable.addKeyListener(new KeyAdapter() {
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if (!isFindingAsYouType && KeyEvent.VK_SPACE == e.getKeyCode()) {
|
||||
removeSelectedCards(e.isControlDown() || e.isMetaDown(), e.isShiftDown() ? 4: 1);
|
||||
} else if (KeyEvent.VK_LEFT == e.getKeyCode() || KeyEvent.VK_RIGHT == e.getKeyCode()) {
|
||||
catTable.requestFocusInWindow();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
final _MoveCard onAdd = new _MoveCard() {
|
||||
@Override
|
||||
public void moveCard(boolean toAlternate, int qty) {
|
||||
addSelectedCards(toAlternate, qty);
|
||||
}
|
||||
};
|
||||
final _MoveCard onRemove = new _MoveCard() {
|
||||
@Override
|
||||
public void moveCard(boolean toAlternate, int qty) {
|
||||
removeSelectedCards(toAlternate, qty);
|
||||
}
|
||||
};
|
||||
|
||||
catTable.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if (MouseEvent.BUTTON1 == e.getButton() && 2 == e.getClickCount()) { addSelectedCards(false, 1); }
|
||||
else if (MouseEvent.BUTTON3 == e.getButton()) {
|
||||
_ContextMenuBuilder cmb = new _ContextMenuBuilder(e, catTable, deckTable, onAdd);
|
||||
childController.buildAddContextMenu(cmb);
|
||||
cmb.show();
|
||||
});
|
||||
|
||||
final _MoveCard onAdd = new _MoveCard() {
|
||||
@Override
|
||||
public void moveCard(boolean toAlternate, int qty) {
|
||||
addSelectedCards(toAlternate, qty);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
deckTable.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if (MouseEvent.BUTTON1 == e.getButton() && 2 == e.getClickCount()) { removeSelectedCards(false, 1); }
|
||||
else if (MouseEvent.BUTTON3 == e.getButton()) {
|
||||
_ContextMenuBuilder cmb = new _ContextMenuBuilder(e, deckTable, catTable, onRemove);
|
||||
childController.buildRemoveContextMenu(cmb);
|
||||
cmb.show();
|
||||
};
|
||||
final _MoveCard onRemove = new _MoveCard() {
|
||||
@Override
|
||||
public void moveCard(boolean toAlternate, int qty) {
|
||||
removeSelectedCards(toAlternate, qty);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
catTable.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if (MouseEvent.BUTTON1 == e.getButton() && 2 == e.getClickCount()) { addSelectedCards(false, 1); }
|
||||
else if (MouseEvent.BUTTON3 == e.getButton()) {
|
||||
_ContextMenuBuilder cmb = new _ContextMenuBuilder(e, catTable, deckTable, onAdd);
|
||||
childController.buildAddContextMenu(cmb);
|
||||
cmb.show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
deckTable.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if (MouseEvent.BUTTON1 == e.getButton() && 2 == e.getClickCount()) { removeSelectedCards(false, 1); }
|
||||
else if (MouseEvent.BUTTON3 == e.getButton()) {
|
||||
_ContextMenuBuilder cmb = new _ContextMenuBuilder(e, deckTable, catTable, onRemove);
|
||||
childController.buildRemoveContextMenu(cmb);
|
||||
cmb.show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
catTable.addFocusListener(new FocusAdapter() {
|
||||
@Override
|
||||
public void focusLost(FocusEvent arg0) {
|
||||
catFind.cancel();
|
||||
}
|
||||
});
|
||||
deckTable.addFocusListener(new FocusAdapter() {
|
||||
@Override
|
||||
public void focusLost(FocusEvent arg0) {
|
||||
deckFind.cancel();
|
||||
}
|
||||
});
|
||||
|
||||
// highlight items as the user types a portion of their names
|
||||
catTable.addKeyListener(catFind);
|
||||
deckTable.addKeyListener(deckFind);
|
||||
|
||||
childController.init();
|
||||
final _FindAsYouType catFind = new _FindAsYouType(catView);
|
||||
final _FindAsYouType deckFind = new _FindAsYouType(deckView);
|
||||
|
||||
catTable.addFocusListener(new FocusAdapter() {
|
||||
@Override
|
||||
public void focusLost(FocusEvent arg0) {
|
||||
catFind.cancel();
|
||||
}
|
||||
});
|
||||
deckTable.addFocusListener(new FocusAdapter() {
|
||||
@Override
|
||||
public void focusLost(FocusEvent arg0) {
|
||||
deckFind.cancel();
|
||||
}
|
||||
});
|
||||
|
||||
// highlight items as the user types a portion of their names
|
||||
catTable.addKeyListener(catFind);
|
||||
deckTable.addKeyListener(deckFind);
|
||||
|
||||
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 {
|
||||
@@ -566,10 +580,16 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData {
|
||||
@Override
|
||||
public void initialize() {
|
||||
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)
|
||||
@@ -577,56 +597,5 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData {
|
||||
*/
|
||||
@Override
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import forge.Singletons;
|
||||
import forge.deck.DeckBase;
|
||||
import forge.gui.deckeditor.controllers.DeckController;
|
||||
import forge.gui.deckeditor.views.VCurrentDeck;
|
||||
import forge.gui.framework.FScreen;
|
||||
|
||||
/**
|
||||
* Handles editor preferences saving and loading.
|
||||
@@ -82,9 +83,9 @@ public class SEditorIO {
|
||||
* @return boolean, true if success
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static boolean confirmSaveChanges() {
|
||||
public static boolean confirmSaveChanges(FScreen screen) {
|
||||
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(),
|
||||
"Save changes to current deck?",
|
||||
"Save Changes?",
|
||||
|
||||
@@ -2,9 +2,10 @@ package forge.gui.deckeditor;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.gui.deckeditor.views.VCardCatalog;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.IVTopLevelUI;
|
||||
import forge.gui.framework.SLayoutIO;
|
||||
|
||||
/**
|
||||
/**
|
||||
@@ -32,7 +33,6 @@ public enum VDeckEditorUI implements IVTopLevelUI {
|
||||
*/
|
||||
@Override
|
||||
public void populate() {
|
||||
SLayoutIO.loadLayout(null);
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +57,8 @@ public abstract class ACEditorBase<TItem extends InventoryItem, TModel extends D
|
||||
public void addMoveAlternateItems (String verb, String nounSingular, String nounPlural, String destination);
|
||||
public void addTextFilterItem ();
|
||||
}
|
||||
|
||||
|
||||
public boolean listenersHooked;
|
||||
private ItemManager<TItem> catalogManager;
|
||||
private ItemManager<TItem> deckManager;
|
||||
|
||||
@@ -97,7 +98,7 @@ public abstract class ACEditorBase<TItem extends InventoryItem, TModel extends D
|
||||
/**
|
||||
* Resets and initializes the current editor.
|
||||
*/
|
||||
public abstract void init();
|
||||
public abstract void update();
|
||||
|
||||
/**
|
||||
* Gets the ItemManager holding the cards in the current deck.
|
||||
|
||||
@@ -8,6 +8,7 @@ import javax.swing.SwingUtilities;
|
||||
import javax.swing.filechooser.FileFilter;
|
||||
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckBase;
|
||||
import forge.deck.io.DeckSerializer;
|
||||
@@ -123,7 +124,7 @@ public enum CCurrentDeck implements ICDoc {
|
||||
/** */
|
||||
@SuppressWarnings("unchecked")
|
||||
private void newDeck() {
|
||||
if (!SEditorIO.confirmSaveChanges()) { return; }
|
||||
if (!SEditorIO.confirmSaveChanges(Singletons.getControl().getCurrentScreen())) { return; }
|
||||
|
||||
try {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@@ -143,7 +144,7 @@ public enum CCurrentDeck implements ICDoc {
|
||||
/** */
|
||||
@SuppressWarnings("unchecked")
|
||||
private void openDeck() {
|
||||
if (!SEditorIO.confirmSaveChanges()) { return; }
|
||||
if (!SEditorIO.confirmSaveChanges(Singletons.getControl().getCurrentScreen())) { return; }
|
||||
|
||||
final File file = this.getImportFilename();
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.google.common.collect.Iterables;
|
||||
|
||||
import forge.Command;
|
||||
import forge.Constant;
|
||||
import forge.Singletons;
|
||||
import forge.card.CardDb;
|
||||
import forge.card.CardRulesPredicates;
|
||||
import forge.deck.Deck;
|
||||
@@ -76,7 +77,7 @@ public enum CDeckgen implements ICDoc {
|
||||
//========== Other methods
|
||||
@SuppressWarnings("unchecked")
|
||||
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();
|
||||
|
||||
@@ -97,7 +98,7 @@ public enum CDeckgen implements ICDoc {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
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();
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ import forge.gui.deckeditor.views.VCardCatalog;
|
||||
import forge.gui.deckeditor.views.VCurrentDeck;
|
||||
import forge.gui.deckeditor.views.VDeckgen;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.toolbox.FLabel;
|
||||
import forge.gui.toolbox.itemmanager.CardManager;
|
||||
import forge.gui.toolbox.itemmanager.SItemManagerIO;
|
||||
@@ -50,7 +50,6 @@ import forge.item.ItemPoolView;
|
||||
import forge.item.PaperCard;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.item.ItemPool;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
|
||||
/**
|
||||
* 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);
|
||||
|
||||
final CardManager catalogManager = new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), wantUnique);
|
||||
final CardManager deckManager = new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), wantUnique);
|
||||
|
||||
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
|
||||
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
|
||||
|
||||
this.setCatalogManager(catalogManager);
|
||||
this.setDeckManager(deckManager);
|
||||
this.setCatalogManager(new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), wantUnique));
|
||||
this.setDeckManager(new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), wantUnique));
|
||||
|
||||
final Supplier<Deck> newCreator = new Supplier<Deck>() {
|
||||
@Override
|
||||
@@ -187,7 +180,7 @@ public final class CEditorCommander extends ACEditorBase<PaperCard, Deck> {
|
||||
* @see forge.gui.deckeditor.ACEditorBase#show(forge.Command)
|
||||
*/
|
||||
@Override
|
||||
public void init() {
|
||||
public void update() {
|
||||
|
||||
final List<TableColumnInfo<InventoryItem>> lstCatalogCols = SColumnUtil.getCatalogDefaultColumns();
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
|
||||
@@ -209,9 +202,9 @@ public final class CEditorCommander extends ACEditorBase<PaperCard, Deck> {
|
||||
} });
|
||||
|
||||
deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE);
|
||||
allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE);
|
||||
|
||||
this.controller.newModel();
|
||||
allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE);
|
||||
|
||||
this.controller.refreshModel();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -219,10 +212,7 @@ public final class CEditorCommander extends ACEditorBase<PaperCard, Deck> {
|
||||
*/
|
||||
@Override
|
||||
public boolean exit() {
|
||||
// Override the submenu save choice - tell it to go to "constructed".
|
||||
Singletons.getModel().getPreferences().setPref(FPref.SUBMENU_CURRENTMENU, EDocID.HOME_COMMANDER.toString());
|
||||
|
||||
if (!SEditorIO.confirmSaveChanges())
|
||||
if (!SEditorIO.confirmSaveChanges(FScreen.DECK_EDITOR_COMMANDER))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ import forge.deck.DeckSection;
|
||||
import forge.gui.deckeditor.SEditorIO;
|
||||
import forge.gui.deckeditor.views.VCardCatalog;
|
||||
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.itemmanager.CardManager;
|
||||
import forge.gui.toolbox.itemmanager.SItemManagerIO;
|
||||
@@ -46,7 +46,6 @@ import forge.item.PaperCard;
|
||||
import forge.item.InventoryItem;
|
||||
import forge.item.ItemPool;
|
||||
import forge.item.ItemPoolView;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
|
||||
/**
|
||||
* Child controller for constructed deck editor UI.
|
||||
@@ -84,22 +83,15 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
|
||||
allSections.add(DeckSection.Schemes);
|
||||
allSections.add(DeckSection.Planes);
|
||||
//allSections.add(DeckSection.Commander);
|
||||
|
||||
|
||||
|
||||
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);
|
||||
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);
|
||||
|
||||
final CardManager catalogManager = new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), wantUnique);
|
||||
final CardManager deckManager = new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), wantUnique);
|
||||
|
||||
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
|
||||
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
|
||||
|
||||
this.setCatalogManager(catalogManager);
|
||||
this.setDeckManager(deckManager);
|
||||
this.setCatalogManager(new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), wantUnique));
|
||||
this.setDeckManager(new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), wantUnique));
|
||||
|
||||
final Supplier<Deck> newCreator = new Supplier<Deck>() {
|
||||
@Override
|
||||
@@ -181,7 +173,7 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see forge.gui.deckeditor.ACEditorBase#updateView()
|
||||
* @see forge.gui.deckeditor.ACEditorBase#resetTables()
|
||||
*/
|
||||
@Override
|
||||
public void resetTables() {
|
||||
@@ -214,67 +206,68 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
|
||||
String title = "";
|
||||
String tabtext = "";
|
||||
Boolean showOptions = true;
|
||||
switch(sectionMode)
|
||||
{
|
||||
case Main:
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
|
||||
this.getCatalogManager().getTable().setAvailableColumns(lstCatalogCols);
|
||||
this.getCatalogManager().setPool(ItemPool.createFrom(CardDb.instance().getAllCards(), PaperCard.class), true);
|
||||
this.getDeckManager().setPool(this.controller.getModel().getMain());
|
||||
showOptions = true;
|
||||
title = "Title: ";
|
||||
tabtext = "Main Deck";
|
||||
break;
|
||||
case Sideboard:
|
||||
this.getCatalogManager().getTable().setAvailableColumns(lstCatalogCols);
|
||||
this.getCatalogManager().setPool(this.controller.getModel().getMain());
|
||||
this.getDeckManager().setPool(this.controller.getModel().getOrCreate(DeckSection.Sideboard));
|
||||
showOptions = false;
|
||||
title = "Sideboard";
|
||||
tabtext = "Card Catalog";
|
||||
break;
|
||||
case Avatar:
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_COST));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_COLOR));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_CMC));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_POWER));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_TOUGHNESS));
|
||||
this.getCatalogManager().getTable().setAvailableColumns(lstCatalogCols);
|
||||
this.getCatalogManager().setPool(avatarPool, true);
|
||||
this.getDeckManager().setPool(this.controller.getModel().getOrCreate(DeckSection.Avatar));
|
||||
showOptions = false;
|
||||
title = "Vanguard";
|
||||
tabtext = "Card Catalog";
|
||||
break;
|
||||
case Planes:
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_COST));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_CMC));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_COLOR));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_POWER));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_TOUGHNESS));
|
||||
this.getCatalogManager().getTable().setAvailableColumns(lstCatalogCols);
|
||||
this.getCatalogManager().setPool(planePool,true);
|
||||
this.getDeckManager().setPool(this.controller.getModel().getOrCreate(DeckSection.Planes));
|
||||
showOptions = false;
|
||||
title = "Planar";
|
||||
tabtext = "Card Catalog";
|
||||
break;
|
||||
case Schemes:
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_CMC));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_COST));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_COLOR));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_POWER));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_TOUGHNESS));
|
||||
this.getCatalogManager().getTable().setAvailableColumns(lstCatalogCols);
|
||||
this.getCatalogManager().setPool(schemePool,true);
|
||||
this.getDeckManager().setPool(this.controller.getModel().getOrCreate(DeckSection.Schemes));
|
||||
showOptions = false;
|
||||
title = "Scheme";
|
||||
tabtext = "Card Catalog";
|
||||
break;
|
||||
switch(sectionMode) {
|
||||
case Main:
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
|
||||
this.getCatalogManager().getTable().setAvailableColumns(lstCatalogCols);
|
||||
this.getCatalogManager().setPool(ItemPool.createFrom(CardDb.instance().getAllCards(), PaperCard.class), true);
|
||||
this.getDeckManager().setPool(this.controller.getModel().getMain());
|
||||
showOptions = true;
|
||||
title = "Title: ";
|
||||
tabtext = "Main Deck";
|
||||
break;
|
||||
case Sideboard:
|
||||
this.getCatalogManager().getTable().setAvailableColumns(lstCatalogCols);
|
||||
this.getCatalogManager().setPool(this.controller.getModel().getMain());
|
||||
this.getDeckManager().setPool(this.controller.getModel().getOrCreate(DeckSection.Sideboard));
|
||||
showOptions = false;
|
||||
title = "Sideboard";
|
||||
tabtext = "Card Catalog";
|
||||
break;
|
||||
case Avatar:
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_COST));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_COLOR));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_CMC));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_POWER));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_TOUGHNESS));
|
||||
this.getCatalogManager().getTable().setAvailableColumns(lstCatalogCols);
|
||||
this.getCatalogManager().setPool(avatarPool, true);
|
||||
this.getDeckManager().setPool(this.controller.getModel().getOrCreate(DeckSection.Avatar));
|
||||
showOptions = false;
|
||||
title = "Vanguard";
|
||||
tabtext = "Card Catalog";
|
||||
break;
|
||||
case Planes:
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_COST));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_CMC));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_COLOR));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_POWER));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_TOUGHNESS));
|
||||
this.getCatalogManager().getTable().setAvailableColumns(lstCatalogCols);
|
||||
this.getCatalogManager().setPool(planePool,true);
|
||||
this.getDeckManager().setPool(this.controller.getModel().getOrCreate(DeckSection.Planes));
|
||||
showOptions = false;
|
||||
title = "Planar";
|
||||
tabtext = "Card Catalog";
|
||||
break;
|
||||
case Schemes:
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_CMC));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_COST));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_COLOR));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_POWER));
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_TOUGHNESS));
|
||||
this.getCatalogManager().getTable().setAvailableColumns(lstCatalogCols);
|
||||
this.getCatalogManager().setPool(schemePool,true);
|
||||
this.getDeckManager().setPool(this.controller.getModel().getOrCreate(DeckSection.Schemes));
|
||||
showOptions = false;
|
||||
title = "Scheme";
|
||||
tabtext = "Card Catalog";
|
||||
break;
|
||||
case Commander:
|
||||
break; //do nothing for Commander here
|
||||
}
|
||||
|
||||
VCardCatalog.SINGLETON_INSTANCE.getTabLabel().setText(tabtext);
|
||||
@@ -295,7 +288,7 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
@Override
|
||||
public void init() {
|
||||
public void update() {
|
||||
final List<TableColumnInfo<InventoryItem>> lstCatalogCols = SColumnUtil.getCatalogDefaultColumns();
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
|
||||
|
||||
@@ -310,8 +303,8 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
|
||||
public void run() {
|
||||
cycleEditorMode();
|
||||
} });
|
||||
|
||||
this.controller.newModel();
|
||||
|
||||
this.controller.refreshModel();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -319,9 +312,6 @@ public final class CEditorConstructed extends ACEditorBase<PaperCard, Deck> {
|
||||
*/
|
||||
@Override
|
||||
public boolean exit() {
|
||||
// Override the submenu save choice - tell it to go to "constructed".
|
||||
Singletons.getModel().getPreferences().setPref(FPref.SUBMENU_CURRENTMENU, EDocID.HOME_CONSTRUCTED.toString());
|
||||
|
||||
return SEditorIO.confirmSaveChanges();
|
||||
return SEditorIO.confirmSaveChanges(FScreen.DECK_EDITOR_CONSTRUCTED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,6 @@ import forge.Constant;
|
||||
import forge.Singletons;
|
||||
import forge.card.CardDb;
|
||||
import forge.card.CardEdition;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.CardPool;
|
||||
import forge.deck.Deck;
|
||||
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.VDeckgen;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.home.sanctioned.CSubmenuDraft;
|
||||
import forge.gui.toolbox.itemmanager.CardManager;
|
||||
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 deckManager = new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), false);
|
||||
|
||||
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
|
||||
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
|
||||
|
||||
catalogManager.setAlwaysNonUnique(true);
|
||||
deckManager.setAlwaysNonUnique(true);
|
||||
|
||||
@@ -87,19 +84,6 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
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)
|
||||
* @see forge.gui.deckeditor.ACEditorBase#addCard()
|
||||
*/
|
||||
@@ -230,7 +214,7 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
Singletons.getModel().getDecks().getDraft().add(finishedDraft);
|
||||
}
|
||||
|
||||
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
|
||||
Singletons.getControl().setCurrentScreen(FScreen.HOME_SCREEN);
|
||||
}
|
||||
|
||||
//========== Overridden from ACEditorBase
|
||||
@@ -260,8 +244,13 @@ public class CEditorDraftingProcess extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
* @see forge.gui.deckeditor.ACEditorBase#show(forge.Command)
|
||||
*/
|
||||
@Override
|
||||
public void init() {
|
||||
this.setup();
|
||||
public void update() {
|
||||
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.getDeckManager().setPool((Iterable<InventoryItem>) null);
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ import forge.gui.deckeditor.views.VCardCatalog;
|
||||
import forge.gui.deckeditor.views.VCurrentDeck;
|
||||
import forge.gui.deckeditor.views.VDeckgen;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.home.sanctioned.CSubmenuDraft;
|
||||
import forge.gui.home.sanctioned.CSubmenuSealed;
|
||||
import forge.gui.toolbox.itemmanager.CardManager;
|
||||
@@ -48,6 +49,7 @@ import forge.util.storage.IStorage;
|
||||
public final class CEditorLimited extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
|
||||
private final DeckController<DeckGroup> controller;
|
||||
private final FScreen screen;
|
||||
private DragCell allDecksParent = null;
|
||||
private DragCell deckGenParent = null;
|
||||
|
||||
@@ -58,13 +60,12 @@ public final class CEditorLimited extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
*
|
||||
* @param deckMap0   {@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 deckManager = new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), false);
|
||||
|
||||
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
|
||||
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
|
||||
|
||||
catalogManager.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)
|
||||
*/
|
||||
@Override
|
||||
public void init() {
|
||||
public void update() {
|
||||
this.getCatalogManager().getTable().setup(SColumnUtil.getCatalogDefaultColumns());
|
||||
this.getDeckManager().getTable().setup(SColumnUtil.getDeckDefaultColumns());
|
||||
|
||||
@@ -183,7 +184,7 @@ public final class CEditorLimited extends ACEditorBase<PaperCard, DeckGroup> {
|
||||
*/
|
||||
@Override
|
||||
public boolean exit() {
|
||||
final boolean okToExit = SEditorIO.confirmSaveChanges();
|
||||
final boolean okToExit = SEditorIO.confirmSaveChanges(this.screen);
|
||||
|
||||
if (okToExit) {
|
||||
CSubmenuDraft.SINGLETON_INSTANCE.update();
|
||||
|
||||
@@ -36,6 +36,7 @@ import forge.gui.deckeditor.views.VCardCatalog;
|
||||
import forge.gui.deckeditor.views.VCurrentDeck;
|
||||
import forge.gui.deckeditor.views.VDeckgen;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.home.quest.CSubmenuQuestDecks;
|
||||
import forge.gui.toolbox.FLabel;
|
||||
import forge.gui.toolbox.itemmanager.CardManager;
|
||||
@@ -101,9 +102,6 @@ public final class CEditorQuest extends ACEditorBase<PaperCard, Deck> {
|
||||
catalogManager.setAlwaysNonUnique(true);
|
||||
deckManager.setAlwaysNonUnique(true);
|
||||
|
||||
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
|
||||
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
|
||||
|
||||
this.setCatalogManager(catalogManager);
|
||||
this.setDeckManager(deckManager);
|
||||
|
||||
@@ -257,7 +255,7 @@ public final class CEditorQuest extends ACEditorBase<PaperCard, Deck> {
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
@Override
|
||||
public void init() {
|
||||
public void update() {
|
||||
final List<TableColumnInfo<InventoryItem>> columnsCatalog = SColumnUtil.getCatalogDefaultColumns();
|
||||
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.getDeckManager().getTable().setup(columnsDeck);
|
||||
|
||||
Deck deck = new Deck();
|
||||
|
||||
SItemManagerUtil.resetUI();
|
||||
|
||||
VCurrentDeck.SINGLETON_INSTANCE.getBtnSave().setVisible(true);
|
||||
@@ -297,7 +293,12 @@ public final class CEditorQuest extends ACEditorBase<PaperCard, Deck> {
|
||||
deckGenParent = removeTab(VDeckgen.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)
|
||||
@@ -305,7 +306,7 @@ public final class CEditorQuest extends ACEditorBase<PaperCard, Deck> {
|
||||
*/
|
||||
@Override
|
||||
public boolean exit() {
|
||||
final boolean okToExit = SEditorIO.confirmSaveChanges();
|
||||
final boolean okToExit = SEditorIO.confirmSaveChanges(FScreen.DECK_EDITOR_QUEST);
|
||||
if (okToExit) {
|
||||
Singletons.getModel().getQuest().save();
|
||||
CSubmenuQuestDecks.SINGLETON_INSTANCE.update();
|
||||
|
||||
@@ -133,9 +133,6 @@ public final class CEditorQuestCardShop extends ACEditorBase<InventoryItem, Deck
|
||||
catalogManager.setAlwaysNonUnique(true);
|
||||
deckManager.setAlwaysNonUnique(true);
|
||||
|
||||
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
|
||||
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
|
||||
|
||||
this.setCatalogManager(catalogManager);
|
||||
this.setDeckManager(deckManager);
|
||||
}
|
||||
@@ -157,62 +154,6 @@ public final class CEditorQuestCardShop extends ACEditorBase<InventoryItem, Deck
|
||||
fullCatalogToggle.setText("See full catalog");
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
private ItemPool<InventoryItem> countDecksForEachCard() {
|
||||
@@ -485,8 +426,60 @@ public final class CEditorQuestCardShop extends ACEditorBase<InventoryItem, Deck
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
@Override
|
||||
public void init() {
|
||||
setup();
|
||||
public void update() {
|
||||
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.multiplier = this.questData.getCards().getSellMultiplier();
|
||||
|
||||
@@ -23,7 +23,6 @@ import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.card.CardDb;
|
||||
import forge.deck.Deck;
|
||||
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.VDeckgen;
|
||||
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.SItemManagerUtil;
|
||||
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.InventoryItem;
|
||||
import forge.item.ItemPool;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.util.storage.IStorage;
|
||||
|
||||
/**
|
||||
@@ -57,10 +55,10 @@ import forge.util.storage.IStorage;
|
||||
*/
|
||||
public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> {
|
||||
private final DeckController<Deck> controller;
|
||||
private final FScreen screen;
|
||||
private DragCell allDecksParent = null;
|
||||
private DragCell deckGenParent = null;
|
||||
private final Predicate<PaperCard> cardPoolCondition;
|
||||
private final EDocID exitToScreen;
|
||||
|
||||
//=========== Constructor
|
||||
/**
|
||||
@@ -68,20 +66,14 @@ public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> {
|
||||
* This is the least restrictive mode;
|
||||
* all cards are available.
|
||||
*/
|
||||
public CEditorVariant(final IStorage<Deck> folder, final Predicate<PaperCard> poolCondition, final EDocID exitTo) {
|
||||
public CEditorVariant(final IStorage<Deck> folder, final Predicate<PaperCard> poolCondition, final FScreen screen0) {
|
||||
super();
|
||||
|
||||
cardPoolCondition = poolCondition;
|
||||
exitToScreen = exitTo;
|
||||
this.cardPoolCondition = poolCondition;
|
||||
this.screen = screen0;
|
||||
|
||||
final CardManager catalogManager = new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), true);
|
||||
final CardManager deckManager = new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), true);
|
||||
|
||||
VCardCatalog.SINGLETON_INSTANCE.setItemManager(catalogManager);
|
||||
VCurrentDeck.SINGLETON_INSTANCE.setItemManager(deckManager);
|
||||
|
||||
this.setCatalogManager(catalogManager);
|
||||
this.setDeckManager(deckManager);
|
||||
this.setCatalogManager(new CardManager(VCardCatalog.SINGLETON_INSTANCE.getStatLabels(), true));
|
||||
this.setDeckManager(new CardManager(VCurrentDeck.SINGLETON_INSTANCE.getStatLabels(), true));
|
||||
|
||||
final Supplier<Deck> newCreator = new Supplier<Deck>() {
|
||||
@Override
|
||||
@@ -161,7 +153,7 @@ public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> {
|
||||
* @see forge.gui.deckeditor.ACEditorBase#show(forge.Command)
|
||||
*/
|
||||
@Override
|
||||
public void init() {
|
||||
public void update() {
|
||||
final List<TableColumnInfo<InventoryItem>> lstCatalogCols = SColumnUtil.getCatalogDefaultColumns();
|
||||
lstCatalogCols.remove(SColumnUtil.getColumn(ColumnName.CAT_QUANTITY));
|
||||
|
||||
@@ -171,9 +163,9 @@ public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> {
|
||||
SItemManagerUtil.resetUI();
|
||||
|
||||
deckGenParent = removeTab(VDeckgen.SINGLETON_INSTANCE);
|
||||
allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE);
|
||||
|
||||
this.controller.newModel();
|
||||
allDecksParent = removeTab(VAllDecks.SINGLETON_INSTANCE);
|
||||
|
||||
this.controller.refreshModel();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -181,10 +173,7 @@ public final class CEditorVariant extends ACEditorBase<PaperCard, Deck> {
|
||||
*/
|
||||
@Override
|
||||
public boolean exit() {
|
||||
// Override the submenu save choice - tell it to go to "constructed".
|
||||
Singletons.getModel().getPreferences().setPref(FPref.SUBMENU_CURRENTMENU, exitToScreen.toString());
|
||||
|
||||
if (!SEditorIO.confirmSaveChanges())
|
||||
if (!SEditorIO.confirmSaveChanges(this.screen))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -32,6 +32,11 @@ import forge.util.storage.IStorage;
|
||||
*
|
||||
* @param <T> the generic type
|
||||
*/
|
||||
/**
|
||||
* TODO: Write javadoc for this type.
|
||||
*
|
||||
* @param <T>
|
||||
*/
|
||||
public class DeckController<T extends DeckBase> {
|
||||
|
||||
private T model;
|
||||
@@ -291,12 +296,18 @@ public class DeckController<T extends DeckBase> {
|
||||
public boolean isModelInStore() {
|
||||
return this.modelInStore;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see forge.gui.deckeditor.IDeckController#newModel()
|
||||
|
||||
/**
|
||||
* Refresh current model or create new one if none
|
||||
*/
|
||||
public void refreshModel() {
|
||||
if (this.model == null) {
|
||||
newModel();
|
||||
}
|
||||
else {
|
||||
setModel(this.model, this.modelInStore);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* New model.
|
||||
|
||||
197
src/main/java/forge/gui/framework/FScreen.java
Normal file
197
src/main/java/forge/gui/framework/FScreen.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package forge.gui.framework;
|
||||
|
||||
import forge.gui.framework.FScreen;
|
||||
|
||||
/**
|
||||
* This interface provides a unifying type for all top-level
|
||||
* UI components.
|
||||
@@ -24,4 +26,16 @@ public interface IVTopLevelUI {
|
||||
* a completely fresh layout on the component.
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -28,7 +28,6 @@ import javax.xml.stream.events.XMLEvent;
|
||||
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl.Screens;
|
||||
import forge.gui.toolbox.FAbsolutePositioner;
|
||||
import forge.properties.FileLocation;
|
||||
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);
|
||||
/** 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) {
|
||||
final String fWriteTo;
|
||||
FileLocation file = SLayoutIO.getFileForState(Singletons.getControl().getState());
|
||||
FileLocation file = Singletons.getControl().getCurrentScreen().getLayoutFile();
|
||||
|
||||
if (f0 == null) {
|
||||
if (null == file) {
|
||||
if (file == null) {
|
||||
return;
|
||||
}
|
||||
fWriteTo = file.userPrefLoc;
|
||||
@@ -318,83 +309,89 @@ public final class SLayoutIO {
|
||||
|
||||
public static void loadLayout(final File f) {
|
||||
final FView view = FView.SINGLETON_INSTANCE;
|
||||
final XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
||||
FileLocation file = SLayoutIO.getFileForState(Singletons.getControl().getState());
|
||||
|
||||
FAbsolutePositioner.SINGLETON_INSTANCE.hideAll();
|
||||
view.getPnlInsets().removeAll();
|
||||
view.getPnlInsets().setLayout(new BorderLayout());
|
||||
view.getPnlInsets().add(view.getPnlContent(), BorderLayout.CENTER);
|
||||
view.getPnlInsets().setBorder(new EmptyBorder(SLayoutConstants.BORDER_T, SLayoutConstants.BORDER_T, 0, 0));
|
||||
|
||||
view.removeAllDragCells();
|
||||
|
||||
// Read a model for new layout
|
||||
MapOfLists<LayoutInfo, EDocID> model = null;
|
||||
|
||||
boolean usedCustomPrefsFile = false;
|
||||
|
||||
FileInputStream fis = null;
|
||||
|
||||
try {
|
||||
if (f != null && f.exists())
|
||||
fis = new FileInputStream(f);
|
||||
else {
|
||||
File userSetting = new File(file.userPrefLoc);
|
||||
if ( userSetting.exists() ) {
|
||||
usedCustomPrefsFile = true;
|
||||
fis = new FileInputStream(userSetting);
|
||||
} else {
|
||||
fis = new FileInputStream(file.defaultLoc);
|
||||
}
|
||||
}
|
||||
|
||||
XMLEventReader xer = null;
|
||||
FileLocation file = Singletons.getControl().getCurrentScreen().getLayoutFile();
|
||||
if (file != null) {
|
||||
// Read a model for new layout
|
||||
MapOfLists<LayoutInfo, EDocID> model = null;
|
||||
boolean usedCustomPrefsFile = false;
|
||||
FileInputStream fis = null;
|
||||
|
||||
try {
|
||||
xer = inputFactory.createXMLEventReader(fis);
|
||||
model = readLayout(xer);
|
||||
} catch (final Exception e) { // I don't care what happened inside, the layout is wrong
|
||||
try {
|
||||
if ( xer != null ) xer.close();
|
||||
} catch (final XMLStreamException x) {
|
||||
e.printStackTrace();
|
||||
if (f != null && f.exists()) {
|
||||
fis = new FileInputStream(f);
|
||||
}
|
||||
e.printStackTrace();
|
||||
if ( usedCustomPrefsFile ) // the one we can safely delete
|
||||
throw new InvalidLayoutFileException();
|
||||
else
|
||||
throw new RuntimeException(e);
|
||||
else {
|
||||
File userSetting = new File(file.userPrefLoc);
|
||||
if (userSetting.exists()) {
|
||||
usedCustomPrefsFile = true;
|
||||
fis = new FileInputStream(userSetting);
|
||||
}
|
||||
else {
|
||||
fis = new FileInputStream(file.defaultLoc);
|
||||
}
|
||||
}
|
||||
|
||||
final XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
||||
XMLEventReader xer = null;
|
||||
try {
|
||||
xer = inputFactory.createXMLEventReader(fis);
|
||||
model = readLayout(xer);
|
||||
} catch (final Exception e) { // I don't care what happened inside, the layout is wrong
|
||||
try {
|
||||
if (xer != null) { xer.close(); }
|
||||
}
|
||||
catch (final XMLStreamException x) {
|
||||
x.printStackTrace();
|
||||
}
|
||||
e.printStackTrace();
|
||||
if (usedCustomPrefsFile) { // the one we can safely delete
|
||||
throw new InvalidLayoutFileException();
|
||||
}
|
||||
else {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (FileNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
if ( fis != null )
|
||||
try {
|
||||
fis.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Apply new layout
|
||||
for(Entry<LayoutInfo, Collection<EDocID>> kv : model.entrySet()) {
|
||||
LayoutInfo layoutInfo = kv.getKey();
|
||||
DragCell cell = new DragCell();
|
||||
cell.setRoughBounds(layoutInfo.getBounds());
|
||||
FView.SINGLETON_INSTANCE.addDragCell(cell);
|
||||
for(EDocID edoc : kv.getValue()) {
|
||||
try {
|
||||
//System.out.println(String.format("adding doc %s -> %s", edoc, edoc.getDoc()));
|
||||
cell.addDoc(edoc.getDoc());
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
System.err.println("Failed to get doc for " + edoc);
|
||||
catch (FileNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
finally {
|
||||
if (fis != null) {
|
||||
try {
|
||||
fis.close();
|
||||
}
|
||||
catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (layoutInfo.getSelectedId() != null) {
|
||||
cell.setSelected(layoutInfo.getSelectedId().getDoc());
|
||||
|
||||
// Apply new layout
|
||||
for (Entry<LayoutInfo, Collection<EDocID>> kv : model.entrySet()) {
|
||||
LayoutInfo layoutInfo = kv.getKey();
|
||||
DragCell cell = new DragCell();
|
||||
cell.setRoughBounds(layoutInfo.getBounds());
|
||||
FView.SINGLETON_INSTANCE.addDragCell(cell);
|
||||
for(EDocID edoc : kv.getValue()) {
|
||||
try {
|
||||
//System.out.println(String.format("adding doc %s -> %s", edoc, edoc.getDoc()));
|
||||
cell.addDoc(edoc.getDoc());
|
||||
}
|
||||
catch (IllegalArgumentException e) {
|
||||
System.err.println("Failed to get doc for " + edoc);
|
||||
}
|
||||
}
|
||||
if (layoutInfo.getSelectedId() != null) {
|
||||
cell.setSelected(layoutInfo.getSelectedId().getDoc());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -470,33 +467,5 @@ public final class SLayoutIO {
|
||||
writer0.add(EF.createEndElement("", "", propertyName));
|
||||
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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,21 +6,17 @@ import javax.swing.JMenu;
|
||||
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl.Screens;
|
||||
import forge.gui.FNetOverlay;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.home.sanctioned.VSubmenuConstructed;
|
||||
import forge.gui.menus.IMenuProvider;
|
||||
import forge.gui.menus.MenuUtil;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
import forge.gui.toolbox.FSkin.SkinImage;
|
||||
import forge.net.FServer;
|
||||
import forge.net.NetServer;
|
||||
import forge.properties.ForgePreferences;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.properties.NewConstants;
|
||||
import forge.view.FNavigationBar.INavigationTabData;
|
||||
|
||||
/**
|
||||
* 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>
|
||||
*
|
||||
*/
|
||||
public enum CHomeUI implements ICDoc, IMenuProvider, INavigationTabData {
|
||||
public enum CHomeUI implements ICDoc, IMenuProvider {
|
||||
/** */
|
||||
SINGLETON_INSTANCE;
|
||||
|
||||
@@ -106,8 +102,6 @@ public enum CHomeUI implements ICDoc, IMenuProvider, INavigationTabData {
|
||||
FNetOverlay.SINGLETON_INSTANCE.getPanel().setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
Singletons.getView().getNavigationBar().setSelectedTab(this);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
@@ -152,53 +146,4 @@ public enum CHomeUI implements ICDoc, IMenuProvider, INavigationTabData {
|
||||
// No specific menus associated with Home screen.
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ import javax.swing.SwingConstants;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import forge.Singletons;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.framework.ILocalRepaint;
|
||||
import forge.gui.framework.IVTopLevelUI;
|
||||
@@ -320,4 +321,21 @@ public enum VHomeUI implements IVTopLevelUI {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,11 +6,11 @@ import javax.swing.SwingUtilities;
|
||||
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.Deck;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.controllers.CEditorQuest;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.home.CHomeUI;
|
||||
import forge.quest.QuestController;
|
||||
@@ -51,7 +51,7 @@ public enum CSubmenuQuestDecks implements ICDoc {
|
||||
if (!SSubmenuQuestUtil.checkActiveQuest("Create a Deck.")) {
|
||||
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()));
|
||||
}
|
||||
});
|
||||
|
||||
@@ -10,10 +10,10 @@ import javax.swing.SwingUtilities;
|
||||
import javax.swing.SwingWorker;
|
||||
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
import forge.card.CardEdition;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.Deck;
|
||||
import forge.game.GameType;
|
||||
import forge.game.Match;
|
||||
@@ -23,6 +23,7 @@ import forge.gui.GuiChoose;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.controllers.CEditorQuestCardShop;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
import forge.net.FServer;
|
||||
import forge.net.Lobby;
|
||||
@@ -252,7 +253,7 @@ public class SSubmenuQuestUtil {
|
||||
if (!checkActiveQuest("Visit the Spell Shop.")) {
|
||||
return;
|
||||
}
|
||||
Singletons.getControl().changeState(FControl.Screens.DECK_EDITOR_QUEST);
|
||||
Singletons.getControl().setCurrentScreen(FScreen.QUEST_CARD_SHOP);
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(
|
||||
new CEditorQuestCardShop(Singletons.getModel().getQuest()));
|
||||
}
|
||||
@@ -262,7 +263,7 @@ public class SSubmenuQuestUtil {
|
||||
if (!checkActiveQuest("Visit the Bazaar.")) {
|
||||
return;
|
||||
}
|
||||
Singletons.getControl().changeState(FControl.Screens.QUEST_BAZAAR);
|
||||
Singletons.getControl().setCurrentScreen(FScreen.QUEST_BAZAAR);
|
||||
Singletons.getView().getFrame().validate();
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import javax.swing.SwingUtilities;
|
||||
import forge.Command;
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckGroup;
|
||||
import forge.game.GameType;
|
||||
@@ -24,6 +23,7 @@ import forge.gui.GuiChoose;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.controllers.CEditorDraftingProcess;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.net.FServer;
|
||||
import forge.net.Lobby;
|
||||
@@ -159,7 +159,7 @@ public enum CSubmenuDraft implements ICDoc {
|
||||
final CEditorDraftingProcess draft = new CEditorDraftingProcess();
|
||||
draft.showGui(new BoosterDraft(o));
|
||||
|
||||
Singletons.getControl().changeState(FControl.Screens.DRAFTING_PROCESS);
|
||||
Singletons.getControl().setCurrentScreen(FScreen.DRAFTING_PROCESS);
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(draft);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import forge.Command;
|
||||
import forge.Constant;
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckBase;
|
||||
import forge.deck.DeckGroup;
|
||||
@@ -31,6 +30,7 @@ import forge.gui.GuiChoose;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.controllers.ACEditorBase;
|
||||
import forge.gui.deckeditor.controllers.CEditorLimited;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.item.PaperCard;
|
||||
import forge.item.InventoryItem;
|
||||
@@ -205,9 +205,9 @@ public enum CSubmenuSealed implements ICDoc {
|
||||
Singletons.getModel().getDecks().getSealed().add(sealed);
|
||||
|
||||
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);
|
||||
editor.getDeckController().setModel((T) sealed);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ package forge.gui.home.settings;
|
||||
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -19,11 +18,10 @@ import forge.Constant.Preferences;
|
||||
import forge.GameLogEntryType;
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl.CloseAction;
|
||||
import forge.control.FControl.Screens;
|
||||
import forge.control.RestartUtil;
|
||||
import forge.game.ai.AiProfileUtil;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.framework.SLayoutIO;
|
||||
import forge.gui.toolbox.FComboBoxPanel;
|
||||
import forge.gui.toolbox.FLabel;
|
||||
import forge.properties.ForgePreferences;
|
||||
@@ -174,8 +172,9 @@ public enum CSubmenuPreferences implements ICDoc {
|
||||
"Reset layout?";
|
||||
int reply = JOptionPane.showConfirmDialog(JOptionPane.getRootFrame(), userPrompt, "Reset Deck Editor Layout", JOptionPane.YES_NO_OPTION);
|
||||
if (reply == JOptionPane.YES_OPTION) {
|
||||
deleteScreenLayoutFile(Screens.DECK_EDITOR_CONSTRUCTED);
|
||||
JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), "Deck Editor layout has been reset.");
|
||||
if (FScreen.DECK_EDITOR_CONSTRUCTED.deleteLayoutFile()) {
|
||||
JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), "Deck Editor layout has been reset.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,17 +186,12 @@ public enum CSubmenuPreferences implements ICDoc {
|
||||
"Reset layout?";
|
||||
int reply = JOptionPane.showConfirmDialog(JOptionPane.getRootFrame(), userPrompt, "Reset Match Screen Layout", JOptionPane.YES_NO_OPTION);
|
||||
if (reply == JOptionPane.YES_OPTION) {
|
||||
deleteScreenLayoutFile(Screens.MATCH_SCREEN);
|
||||
JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), "Match Screen layout has been reset.");
|
||||
if (FScreen.MATCH_SCREEN.deleteLayoutFile()) {
|
||||
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() {
|
||||
FPref userSetting = FPref.DEV_LOG_ENTRY_TYPE;
|
||||
FComboBoxPanel<GameLogEntryType> panel = this.view.getGameLogVerbosityComboBoxPanel();
|
||||
|
||||
@@ -13,7 +13,6 @@ import com.google.common.base.Predicate;
|
||||
import forge.Command;
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckSection;
|
||||
import forge.deck.DeckgenUtil;
|
||||
@@ -25,7 +24,7 @@ import forge.gui.SOverlayUtils;
|
||||
import forge.gui.deckchooser.FDeckChooser;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.controllers.CEditorVariant;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.toolbox.FList;
|
||||
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(
|
||||
new CEditorVariant(Singletons.getModel().getDecks().getScheme(),predSchemes,EDocID.HOME_ARCHENEMY));
|
||||
new CEditorVariant(Singletons.getModel().getDecks().getScheme(), predSchemes, FScreen.DECK_EDITOR_ARCHENEMY));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@ import javax.swing.SwingUtilities;
|
||||
import forge.Command;
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.Deck;
|
||||
import forge.game.GameType;
|
||||
import forge.game.Match;
|
||||
@@ -23,6 +22,7 @@ import forge.gui.GuiDialog;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.controllers.CEditorCommander;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.toolbox.FList;
|
||||
import forge.net.FServer;
|
||||
@@ -94,7 +94,7 @@ public enum CSubmenuCommander implements ICDoc {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
Singletons.getControl().changeStateAutoFixLayout(FControl.Screens.DECK_EDITOR_CONSTRUCTED, "deck editor");
|
||||
Singletons.getControl().setCurrentScreen(FScreen.DECK_EDITOR_COMMANDER);
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(
|
||||
new CEditorCommander());
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ import com.google.common.base.Predicate;
|
||||
import forge.Command;
|
||||
import forge.FThreads;
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckSection;
|
||||
import forge.deck.DeckgenUtil;
|
||||
@@ -26,7 +25,7 @@ import forge.gui.SOverlayUtils;
|
||||
import forge.gui.deckchooser.FDeckChooser;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.controllers.CEditorVariant;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.toolbox.FList;
|
||||
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(
|
||||
new CEditorVariant(Singletons.getModel().getDecks().getPlane(), predPlanes, EDocID.HOME_PLANECHASE));
|
||||
new CEditorVariant(Singletons.getModel().getDecks().getPlane(), predPlanes, FScreen.DECK_EDITOR_PLANECHASE));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ import javax.swing.JButton;
|
||||
import forge.Card;
|
||||
import forge.Singletons;
|
||||
import forge.card.CardDb;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.Deck;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameOutcome;
|
||||
@@ -21,6 +20,7 @@ import forge.game.player.Player;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.gui.GuiChoose;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.item.PaperCard;
|
||||
import forge.net.FServer;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
@@ -98,7 +98,7 @@ public class ControlWinLose {
|
||||
// Reset other stuff
|
||||
saveOptions();
|
||||
Singletons.getControl().endCurrentGame();
|
||||
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
|
||||
Singletons.getControl().setCurrentScreen(FScreen.HOME_SCREEN);
|
||||
SOverlayUtils.hideOverlay();
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@ import forge.card.CardEdition;
|
||||
import forge.card.IUnOpenedProduct;
|
||||
import forge.card.SealedProductTemplate;
|
||||
import forge.card.UnOpenedProduct;
|
||||
import forge.control.FControl;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEndReason;
|
||||
import forge.game.GameFormat;
|
||||
@@ -50,6 +49,7 @@ import forge.game.player.PlayerStatistics;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.gui.GuiChoose;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.home.quest.CSubmenuChallenges;
|
||||
import forge.gui.home.quest.CSubmenuDuels;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
@@ -300,7 +300,7 @@ public class QuestWinLose extends ControlWinLose {
|
||||
Singletons.getModel().getPreferences().save();
|
||||
|
||||
Singletons.getControl().endCurrentGame();
|
||||
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
|
||||
Singletons.getControl().setCurrentScreen(FScreen.HOME_SCREEN);
|
||||
|
||||
SOverlayUtils.hideOverlay();
|
||||
}
|
||||
|
||||
@@ -35,8 +35,8 @@ import javax.swing.JPanel;
|
||||
|
||||
import forge.Card;
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl;
|
||||
import forge.game.combat.Combat;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.match.controllers.CDock;
|
||||
import forge.gui.match.nonsingleton.VField;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
@@ -330,7 +330,7 @@ public enum TargetingOverlay {
|
||||
public void paintComponent(final Graphics g) {
|
||||
final Combat combat = Singletons.getControl().getObservedGame().getCombat(); // this will get deprecated too
|
||||
// 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);
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@ import javax.swing.SwingUtilities;
|
||||
import forge.Singletons;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.IVTopLevelUI;
|
||||
import forge.gui.framework.SLayoutIO;
|
||||
import forge.gui.framework.SRearrangingUtil;
|
||||
import forge.gui.framework.VEmptyDoc;
|
||||
import forge.gui.match.nonsingleton.VCommand;
|
||||
@@ -54,8 +54,6 @@ public enum VMatchUI implements IVTopLevelUI {
|
||||
/** */
|
||||
@Override
|
||||
public void populate() {
|
||||
SLayoutIO.loadLayout(null);
|
||||
|
||||
// Dev mode disabled? Remove from parent cell if exists.
|
||||
if (!Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_MODE_ENABLED)) {
|
||||
if (VDev.SINGLETON_INSTANCE.getParentCell() != null) {
|
||||
@@ -166,4 +164,24 @@ public enum VMatchUI implements IVTopLevelUI {
|
||||
public List<VHand> getHands() {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ import forge.gui.toolbox.FSkin;
|
||||
import forge.gui.toolbox.SaveOpenDialog;
|
||||
import forge.gui.toolbox.SaveOpenDialog.Filetypes;
|
||||
import forge.item.PaperCard;
|
||||
import forge.properties.FileLocation;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
import forge.view.FView;
|
||||
|
||||
@@ -109,7 +110,8 @@ public enum CDock implements ICDoc {
|
||||
|
||||
public void saveLayout() {
|
||||
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);
|
||||
if (saveFile != null) {
|
||||
SLayoutIO.saveLayout(saveFile);
|
||||
@@ -120,7 +122,8 @@ public enum CDock implements ICDoc {
|
||||
SOverlayUtils.genericOverlay();
|
||||
|
||||
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);
|
||||
|
||||
if (loadFile != null) {
|
||||
|
||||
@@ -13,10 +13,10 @@ import javax.swing.JRadioButtonMenuItem;
|
||||
import javax.swing.KeyStroke;
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl.Screens;
|
||||
import forge.gui.GuiChoose;
|
||||
import forge.gui.MouseUtil;
|
||||
import forge.gui.MouseUtil.MouseCursor;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.match.controllers.CDock;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
import forge.properties.ForgePreferences;
|
||||
@@ -33,16 +33,16 @@ public final class LayoutMenu {
|
||||
private LayoutMenu() { }
|
||||
|
||||
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 boolean showIcons = false;
|
||||
|
||||
public static JMenu getMenu() {
|
||||
currentScreen = Singletons.getControl().getState();
|
||||
currentScreen = Singletons.getControl().getCurrentScreen();
|
||||
|
||||
JMenu menu = new JMenu("Layout");
|
||||
menu.setMnemonic(KeyEvent.VK_L);
|
||||
if (currentScreen != Screens.HOME_SCREEN) {
|
||||
if (currentScreen != FScreen.HOME_SCREEN) {
|
||||
menu.add(getMenu_ViewOptions());
|
||||
menu.add(getMenu_FileOptions());
|
||||
}
|
||||
@@ -50,7 +50,7 @@ public final class LayoutMenu {
|
||||
menu.addSeparator();
|
||||
menu.add(getMenuItem_FullScreen());
|
||||
menu.add(getMenuItem_SetWindowSize());
|
||||
if (currentScreen != Screens.HOME_SCREEN) {
|
||||
if (currentScreen != FScreen.HOME_SCREEN) {
|
||||
menu.add(getMenuItem_RevertLayout());
|
||||
}
|
||||
return menu;
|
||||
@@ -59,7 +59,7 @@ public final class LayoutMenu {
|
||||
private static JMenu getMenu_ViewOptions() {
|
||||
JMenu menu = new JMenu("View");
|
||||
menu.add(getMenuItem_ShowTabs());
|
||||
if (currentScreen == Screens.MATCH_SCREEN) {
|
||||
if (currentScreen == FScreen.MATCH_SCREEN) {
|
||||
menu.add(getMenuItem_ShowBackgroundImage());
|
||||
}
|
||||
return menu;
|
||||
|
||||
@@ -36,7 +36,6 @@ import javax.swing.SwingConstants;
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import forge.Command;
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl;
|
||||
import forge.deck.CardCollections;
|
||||
import forge.deck.Deck;
|
||||
import forge.deck.DeckBase;
|
||||
@@ -44,9 +43,9 @@ import forge.deck.DeckSection;
|
||||
import forge.game.GameType;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.deckeditor.controllers.ACEditorBase;
|
||||
import forge.gui.deckeditor.controllers.CEditorConstructed;
|
||||
import forge.gui.deckeditor.controllers.CEditorLimited;
|
||||
import forge.gui.deckeditor.controllers.CEditorQuest;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ILocalRepaint;
|
||||
import forge.gui.toolbox.FLabel;
|
||||
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) {
|
||||
|
||||
ACEditorBase<? extends InventoryItem, ? extends DeckBase> editorCtrl = null;
|
||||
FControl.Screens newState = null;
|
||||
FScreen screen = null;
|
||||
|
||||
switch (this.gametype) {
|
||||
case Quest:
|
||||
screen = FScreen.DECK_EDITOR_QUEST;
|
||||
editorCtrl = new CEditorQuest(Singletons.getModel().getQuest());
|
||||
newState = FControl.Screens.DECK_EDITOR_QUEST;
|
||||
break;
|
||||
case Constructed:
|
||||
newState = FControl.Screens.DECK_EDITOR_CONSTRUCTED;
|
||||
editorCtrl = new CEditorConstructed();
|
||||
screen = FScreen.DECK_EDITOR_CONSTRUCTED;
|
||||
//re-use constructed controller
|
||||
break;
|
||||
case Sealed:
|
||||
editorCtrl = new CEditorLimited(Singletons.getModel().getDecks().getSealed());
|
||||
newState = FControl.Screens.DECK_EDITOR_LIMITED;
|
||||
screen = FScreen.DECK_EDITOR_SEALED;
|
||||
editorCtrl = new CEditorLimited(Singletons.getModel().getDecks().getSealed(), screen);
|
||||
break;
|
||||
case Draft:
|
||||
editorCtrl = new CEditorLimited(Singletons.getModel().getDecks().getDraft());
|
||||
newState = FControl.Screens.DECK_EDITOR_LIMITED;
|
||||
screen = FScreen.DECK_EDITOR_DRAFT;
|
||||
editorCtrl = new CEditorLimited(Singletons.getModel().getDecks().getDraft(), screen);
|
||||
break;
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
Singletons.getControl().changeStateAutoFixLayout(newState, "deck editor");
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(editorCtrl);
|
||||
editorCtrl.getDeckController().load(d0.getName());
|
||||
Singletons.getControl().setCurrentScreen(screen);
|
||||
if (editorCtrl != null) {
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.setCurrentEditorController(editorCtrl);
|
||||
}
|
||||
CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckController().load(d0.getName());
|
||||
}
|
||||
|
||||
private void deleteDeck(final RowPanel r0) {
|
||||
|
||||
@@ -87,7 +87,6 @@ public final class NewConstants {
|
||||
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 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 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/");
|
||||
|
||||
@@ -31,6 +31,7 @@ import javax.swing.text.StyledDocument;
|
||||
|
||||
import net.miginfocom.swing.MigLayout;
|
||||
import forge.Singletons;
|
||||
import forge.gui.bazaar.VBazaarUI;
|
||||
import forge.gui.toolbox.FLabel;
|
||||
import forge.gui.toolbox.FScrollPane;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
@@ -39,7 +40,6 @@ import forge.quest.QuestController;
|
||||
import forge.quest.bazaar.IQuestBazaarItem;
|
||||
import forge.quest.bazaar.QuestStallDefinition;
|
||||
import forge.quest.data.QuestAssets;
|
||||
import forge.view.ViewBazaarUI;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -55,15 +55,15 @@ public class ViewStall extends JPanel {
|
||||
private final JTextPane tpnFluff;
|
||||
private final JPanel pnlInventory;
|
||||
private final FScrollPane scrInventory;
|
||||
private final ViewBazaarUI parentView;
|
||||
private final VBazaarUI parentView;
|
||||
private final List<ViewItem> lstItemPanels;
|
||||
private QuestStallDefinition stall;
|
||||
|
||||
/**
|
||||
* @param v0
|
||||
* {@link forge.view.ViewBazaarUI}
|
||||
* {@link forge.gui.bazaar.VBazaarUI}
|
||||
*/
|
||||
public ViewStall(final ViewBazaarUI v0) {
|
||||
public ViewStall(final VBazaarUI v0) {
|
||||
// Final/component inits
|
||||
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.")
|
||||
@@ -179,8 +179,8 @@ public class ViewStall extends JPanel {
|
||||
}
|
||||
}
|
||||
|
||||
/** @return {@link forge.view.ViewBazaarUI} */
|
||||
public ViewBazaarUI getParentView() {
|
||||
/** @return {@link forge.gui.bazaar.VBazaarUI} */
|
||||
public VBazaarUI getParentView() {
|
||||
return this.parentView;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,10 +24,8 @@ import javax.swing.Timer;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl.Screens;
|
||||
import forge.gui.deckeditor.CDeckEditorUI;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ILocalRepaint;
|
||||
import forge.gui.home.CHomeUI;
|
||||
import forge.gui.menus.ForgeMenu;
|
||||
import forge.gui.menus.LayoutMenu;
|
||||
import forge.gui.toolbox.FButton;
|
||||
@@ -35,7 +33,6 @@ import forge.gui.toolbox.FDigitalClock;
|
||||
import forge.gui.toolbox.FSkin;
|
||||
import forge.gui.toolbox.FSkin.JLabelSkin;
|
||||
import forge.gui.toolbox.FSkin.SkinColor;
|
||||
import forge.gui.toolbox.FSkin.SkinImage;
|
||||
import forge.util.TypeUtil;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@@ -75,7 +72,7 @@ public class FNavigationBar extends FTitleBarBase {
|
||||
btnClose.setToolTipText("Close");
|
||||
break;
|
||||
case CLOSE_SCREEN:
|
||||
btnClose.setToolTipText(this.selectedTab.data.getCloseButtonTooltip());
|
||||
btnClose.setToolTipText(this.selectedTab.screen.getCloseButtonTooltip());
|
||||
break;
|
||||
case EXIT_FORGE:
|
||||
btnClose.setToolTipText("Exit Forge");
|
||||
@@ -90,8 +87,8 @@ public class FNavigationBar extends FTitleBarBase {
|
||||
layout.putConstraint(SpringLayout.SOUTH, btnForge, -1, SpringLayout.SOUTH, this);
|
||||
addForgeButtonListeners();
|
||||
|
||||
addNavigationTab(CHomeUI.SINGLETON_INSTANCE);
|
||||
addNavigationTab(CDeckEditorUI.SINGLETON_INSTANCE);
|
||||
addNavigationTab(FScreen.HOME_SCREEN);
|
||||
addNavigationTab(FScreen.DECK_EDITOR_CONSTRUCTED);
|
||||
|
||||
super.addControls();
|
||||
|
||||
@@ -101,8 +98,8 @@ public class FNavigationBar extends FTitleBarBase {
|
||||
updateClockVisibility();
|
||||
}
|
||||
|
||||
private NavigationTab addNavigationTab(INavigationTabData data) {
|
||||
NavigationTab tab = new NavigationTab(data);
|
||||
private NavigationTab addNavigationTab(FScreen screen) {
|
||||
NavigationTab tab = new NavigationTab(screen);
|
||||
if (tabs.size() == 0) {
|
||||
tab.setSelected(true);
|
||||
selectedTab = tab;
|
||||
@@ -117,48 +114,41 @@ public class FNavigationBar extends FTitleBarBase {
|
||||
return tab;
|
||||
}
|
||||
|
||||
private NavigationTab getTab(INavigationTabData data) {
|
||||
private NavigationTab getTab(FScreen screen) {
|
||||
for (NavigationTab tab : tabs) {
|
||||
if (tab.data == data) {
|
||||
if (tab.screen == screen) {
|
||||
return tab;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void ensureTabActive(INavigationTabData data) {
|
||||
NavigationTab tab = getTab(data);
|
||||
if (tab != null && !tab.selected) {
|
||||
setSelectedTab(tab);
|
||||
Singletons.getControl().changeStateAutoFixLayout(data.getTabDestScreen(), tab.getText());
|
||||
}
|
||||
|
||||
public boolean canSwitchAway() {
|
||||
return (selectedTab == null || selectedTab.screen.onSwitching());
|
||||
}
|
||||
|
||||
public void setSelectedTab(INavigationTabData data) {
|
||||
NavigationTab tab = getTab(data);
|
||||
public void updateSelectedTab() {
|
||||
FScreen screen = Singletons.getControl().getCurrentScreen();
|
||||
NavigationTab tab = getTab(screen);
|
||||
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);
|
||||
}
|
||||
|
||||
private void setSelectedTab(NavigationTab tab) {
|
||||
if (tab != null && tab != selectedTab) {
|
||||
if (selectedTab != null) {
|
||||
selectedTab.setSelected(false);
|
||||
}
|
||||
tab.setSelected(true);
|
||||
selectedTab = tab;
|
||||
updateBtnCloseTooltip();
|
||||
else if (tab == selectedTab) { return; }
|
||||
|
||||
if (selectedTab != null) {
|
||||
selectedTab.setSelected(false);
|
||||
}
|
||||
tab.setSelected(true);
|
||||
selectedTab = tab;
|
||||
updateBtnCloseTooltip();
|
||||
}
|
||||
|
||||
public void closeSelectedTab() {
|
||||
closeTab(selectedTab);
|
||||
}
|
||||
|
||||
public void closeTab(INavigationTabData data) {
|
||||
NavigationTab tab = getTab(data);
|
||||
public void closeTab(FScreen screen) {
|
||||
NavigationTab tab = getTab(screen);
|
||||
if (tab != null) {
|
||||
closeTab(tab);
|
||||
}
|
||||
@@ -166,10 +156,13 @@ public class FNavigationBar extends FTitleBarBase {
|
||||
|
||||
private void closeTab(NavigationTab tab) {
|
||||
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) {
|
||||
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);
|
||||
if (index != -1) {
|
||||
@@ -350,39 +343,30 @@ public class FNavigationBar extends FTitleBarBase {
|
||||
@Override
|
||||
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 static final int fontSize = 14;
|
||||
private static final int unhoveredAlpha = 150;
|
||||
private final FSkin.JLabelSkin<NavigationTab> skin;
|
||||
private final INavigationTabData data;
|
||||
private final FScreen screen;
|
||||
private final CloseButton btnClose;
|
||||
private SkinColor backColor;
|
||||
private boolean selected = false;
|
||||
private boolean hovered = false;
|
||||
|
||||
private NavigationTab(final INavigationTabData data0) {
|
||||
super(data0.getTabCaption());
|
||||
this.data = data0;
|
||||
private NavigationTab(final FScreen screen0) {
|
||||
super(screen0.getTabCaption());
|
||||
this.screen = screen0;
|
||||
setOpaque(false);
|
||||
skin = FSkin.get(this);
|
||||
skin.setIcon(data0.getTabIcon());
|
||||
skin.setIcon(screen0.getTabIcon());
|
||||
skin.setForeground(foreColor.alphaColor(unhoveredAlpha));
|
||||
skin.setFont(FSkin.getFont(fontSize));
|
||||
|
||||
int closeButtonOffset;
|
||||
if (data.allowTabClose()) {
|
||||
if (screen.allowTabClose()) {
|
||||
btnClose = new CloseButton();
|
||||
btnClose.setToolTipText(data.getCloseButtonTooltip());
|
||||
btnClose.setToolTipText(screen.getCloseButtonTooltip());
|
||||
closeButtonOffset = btnClose.getPreferredSize().width;
|
||||
SpringLayout tabLayout = new SpringLayout();
|
||||
setLayout(tabLayout);
|
||||
@@ -402,11 +386,10 @@ public class FNavigationBar extends FTitleBarBase {
|
||||
if (!NavigationTab.this.isEnabled()) { return; }
|
||||
if (SwingUtilities.isLeftMouseButton(e)) {
|
||||
if (!selected) {
|
||||
FNavigationBar.this.setSelectedTab(NavigationTab.this);
|
||||
Singletons.getControl().changeStateAutoFixLayout(data.getTabDestScreen(), NavigationTab.this.getText());
|
||||
Singletons.getControl().setCurrentScreen(screen);
|
||||
}
|
||||
}
|
||||
else if (SwingUtilities.isMiddleMouseButton(e) && data.allowTabClose()) {
|
||||
else if (SwingUtilities.isMiddleMouseButton(e) && screen.allowTabClose()) {
|
||||
FNavigationBar.this.closeTab(NavigationTab.this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,14 +33,15 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.Singletons;
|
||||
import forge.control.FControl;
|
||||
import forge.control.RestartUtil;
|
||||
import forge.gui.FNetOverlay;
|
||||
import forge.gui.ImportDialog;
|
||||
import forge.gui.SOverlayUtils;
|
||||
import forge.gui.bazaar.VBazaarUI;
|
||||
import forge.gui.deckeditor.VDeckEditorUI;
|
||||
import forge.gui.framework.DragCell;
|
||||
import forge.gui.framework.EDocID;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.SLayoutConstants;
|
||||
import forge.gui.framework.SLayoutIO;
|
||||
import forge.gui.home.VHomeUI;
|
||||
@@ -74,7 +75,7 @@ public enum FView {
|
||||
private SplashFrame frmSplash;
|
||||
|
||||
// Non-singleton instances (deprecated, but not updated yet)
|
||||
private ViewBazaarUI bazaar = null;
|
||||
private VBazaarUI bazaar = null;
|
||||
|
||||
// Top-level UI components; all have getters.
|
||||
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.
|
||||
Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN);
|
||||
Singletons.getControl().setCurrentScreen(FScreen.HOME_SCREEN);
|
||||
|
||||
FView.this.frmSplash.dispose();
|
||||
FView.this.frmSplash = null;
|
||||
@@ -408,9 +409,9 @@ public enum FView {
|
||||
}
|
||||
}
|
||||
|
||||
/** @return {@link forge.view.ViewBazaarUI} */
|
||||
public ViewBazaarUI getViewBazaar() {
|
||||
if (Singletons.getControl().getState() != FControl.Screens.QUEST_BAZAAR) {
|
||||
/** @return {@link forge.gui.bazaar.VBazaarUI} */
|
||||
public VBazaarUI getViewBazaar() {
|
||||
if (Singletons.getControl().getCurrentScreen() != FScreen.QUEST_BAZAAR) {
|
||||
throw new IllegalArgumentException("FView$getViewBazaar\n"
|
||||
+ "may only be called while the bazaar UI is showing.");
|
||||
}
|
||||
@@ -420,10 +421,10 @@ public enum FView {
|
||||
|
||||
/** */
|
||||
private void cacheUIStates() {
|
||||
FView.this.bazaar = new ViewBazaarUI(Singletons.getModel().getQuest().getBazaar());
|
||||
VMatchUI.SINGLETON_INSTANCE.instantiate();
|
||||
VHomeUI.SINGLETON_INSTANCE.instantiate();
|
||||
VDeckEditorUI.SINGLETON_INSTANCE.instantiate();
|
||||
VBazaarUI.SINGLETON_INSTANCE.instantiate();
|
||||
}
|
||||
|
||||
public void incrementSplashProgessBar() {
|
||||
|
||||
Reference in New Issue
Block a user