diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java index 3d00f22e0e5..9cdbfe749fa 100644 --- a/src/main/java/forge/control/FControl.java +++ b/src/main/java/forge/control/FControl.java @@ -25,7 +25,6 @@ import java.awt.event.ComponentEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; import java.io.File; import java.util.ArrayList; import java.util.List; @@ -73,6 +72,7 @@ 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; @@ -102,8 +102,6 @@ public enum FControl implements KeyEventDispatcher { private Screens state = Screens.UNKNOWN; private boolean altKeyLastDown; - private WindowListener waDefault, waLeaveBazaar; - public static enum Screens { UNKNOWN, HOME_SCREEN, @@ -127,23 +125,14 @@ public enum FControl implements KeyEventDispatcher { * instantiated separately by each state's top level view class. */ private FControl() { - this.waDefault = new WindowAdapter() { + Singletons.getView().getFrame().addWindowListener(new WindowAdapter() { @Override public void windowClosing(final WindowEvent e) { if (!exitForge()) { Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); } } - }; - - // "Close" button override while inside bazaar (will probably be used later for other things) - this.waLeaveBazaar = new WindowAdapter() { - @Override - public void windowClosing(final WindowEvent e) { - Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); - changeState(Screens.HOME_SCREEN); - } - }; + }); } public boolean canExitForge(boolean forRestart) { @@ -235,9 +224,6 @@ public enum FControl implements KeyEventDispatcher { clearChildren(JLayeredPane.DEFAULT_LAYER); this.state = screen; - Singletons.getView().getFrame().removeWindowListener(waDefault); - Singletons.getView().getFrame().removeWindowListener(waLeaveBazaar); - // Fire up new state switch (screen) { case HOME_SCREEN: @@ -246,7 +232,6 @@ public enum FControl implements KeyEventDispatcher { CHomeUI.SINGLETON_INSTANCE.initialize(); FView.SINGLETON_INSTANCE.getPnlInsets().setVisible(true); FView.SINGLETON_INSTANCE.getPnlInsets().setForegroundImage(new ImageIcon()); - Singletons.getView().getFrame().addWindowListener(waDefault); break; case MATCH_SCREEN: @@ -256,7 +241,6 @@ public enum FControl implements KeyEventDispatcher { showMatchBackgroundImage(); SOverlayUtils.showTargetingOverlay(); Singletons.getView().getNavigationBar().setSelectedTab(this.game); - Singletons.getView().getFrame().addWindowListener(waDefault); break; case DECK_EDITOR_CONSTRUCTED: @@ -269,15 +253,15 @@ public enum FControl implements KeyEventDispatcher { CDeckEditorUI.SINGLETON_INSTANCE.initialize(); FView.SINGLETON_INSTANCE.getPnlInsets().setVisible(true); FView.SINGLETON_INSTANCE.getPnlInsets().setForegroundImage(new ImageIcon()); - Singletons.getView().getFrame().addWindowListener(waDefault); 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().getFrame().addWindowListener(waLeaveBazaar); + Singletons.getView().getNavigationBar().setSelectedTab(Singletons.getView().getViewBazaar()); break; default: diff --git a/src/main/java/forge/view/FNavigationBar.java b/src/main/java/forge/view/FNavigationBar.java index 893720768f9..6a7ff4a2906 100644 --- a/src/main/java/forge/view/FNavigationBar.java +++ b/src/main/java/forge/view/FNavigationBar.java @@ -110,6 +110,7 @@ public class FNavigationBar extends FTitleBarBase { return; } } + addNavigationTab(data, true); //if tab not found, add and select it } private void setSelectedTab(NavigationTab tab) { diff --git a/src/main/java/forge/view/ViewBazaarUI.java b/src/main/java/forge/view/ViewBazaarUI.java index ea4070f9b14..0abceaeba39 100644 --- a/src/main/java/forge/view/ViewBazaarUI.java +++ b/src/main/java/forge/view/ViewBazaarUI.java @@ -6,18 +6,23 @@ 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.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; /** Lays out containers and borders for resizeable layout and * instantiates top-level controller for bazaar UI. */ @SuppressWarnings("serial") -public class ViewBazaarUI extends FPanel { +public class ViewBazaarUI extends FPanel implements INavigationTabData { private final JPanel pnlAllStalls; private final ViewStall pnlSingleStall; private final ControlBazaarUI control; @@ -100,4 +105,45 @@ public class ViewBazaarUI extends FPanel { public ViewStall getPnlSingleStall() { return this.pnlSingleStall; } + + /* (non-Javadoc) + * @see forge.view.FNavigationBar.INavigationTabData#getTabCaption() + */ + @Override + public String getTabCaption() { + return "Bazaar"; + } + + /* (non-Javadoc) + * @see forge.view.FNavigationBar.INavigationTabData#getTabIcon() + */ + @Override + public SkinImage getTabIcon() { + return FSkin.getIcon(FSkin.QuestIcons.ICO_BOTTLES); + } + + /* (non-Javadoc) + * @see forge.view.FNavigationBar.INavigationTabData#getTabDestScreen() + */ + @Override + public Screens getTabDestScreen() { + return Screens.QUEST_BAZAAR; + } + + /* (non-Javadoc) + * @see forge.view.FNavigationBar.INavigationTabData#canCloseTab() + */ + @Override + public String getTabCloseButtonTooltip() { + return "Leave Bazaar"; + } + + /* (non-Javadoc) + * @see forge.view.FNavigationBar.INavigationTabData#onClosingTab() + */ + @Override + public boolean onClosingTab() { + Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN); + return true; + } }