diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java index 8e9bd9c9210..a86131d623c 100644 --- a/src/main/java/forge/control/FControl.java +++ b/src/main/java/forge/control/FControl.java @@ -176,10 +176,15 @@ public enum FControl implements KeyEventDispatcher { } }); } + + public CloseAction getCloseAction() { + return this.closeAction; + } public void setCloseAction(CloseAction closeAction0) { if (this.closeAction == closeAction0) { return; } this.closeAction = closeAction0; + Singletons.getView().getNavigationBar().updateBtnCloseTooltip(); final ForgePreferences prefs = Singletons.getModel().getPreferences(); prefs.setPref(FPref.UI_CLOSE_ACTION, closeAction0.toString()); diff --git a/src/main/java/forge/game/Game.java b/src/main/java/forge/game/Game.java index e1224640220..e70954128ec 100644 --- a/src/main/java/forge/game/Game.java +++ b/src/main/java/forge/game/Game.java @@ -617,20 +617,28 @@ public class Game implements INavigationTabData { 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 getTabCloseButtonTooltip() { + public String getCloseButtonTooltip() { return "Concede Game"; } /* (non-Javadoc) - * @see forge.view.FNavigationBar.INavigationTabData#onClosingTab() + * @see forge.view.FNavigationBar.INavigationTabData#onClosing() */ @Override - public boolean onClosingTab() { + public boolean onClosing() { if (!isGameOver()) { Singletons.getControl().stopGame(); return false; //delay hiding tab diff --git a/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java b/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java index fe120c84d98..9abdd311d4b 100644 --- a/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java +++ b/src/main/java/forge/gui/deckeditor/CDeckEditorUI.java @@ -602,19 +602,27 @@ public enum CDeckEditorUI implements ICDoc, IMenuProvider, INavigationTabData { 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 getTabCloseButtonTooltip() { - return null; //return null to indicate not to show close button + public String getCloseButtonTooltip() { + return "Close Editor"; } /* (non-Javadoc) * @see forge.view.FNavigationBar.INavigationTabData#onClosingTab() */ @Override - public boolean onClosingTab() { + public boolean onClosing() { if (canExit()) { Singletons.getControl().changeState(Screens.HOME_SCREEN); } diff --git a/src/main/java/forge/gui/home/CHomeUI.java b/src/main/java/forge/gui/home/CHomeUI.java index 4bc27125386..b7a0a5dd646 100644 --- a/src/main/java/forge/gui/home/CHomeUI.java +++ b/src/main/java/forge/gui/home/CHomeUI.java @@ -176,20 +176,28 @@ public enum CHomeUI implements ICDoc, IMenuProvider, INavigationTabData { 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 getTabCloseButtonTooltip() { - return null; //return null to indicate not to show close button + public String getCloseButtonTooltip() { + return "Exit Forge"; } /* (non-Javadoc) * @see forge.view.FNavigationBar.INavigationTabData#onClosingTab() */ @Override - public boolean onClosingTab() { + public boolean onClosing() { Singletons.getControl().exitForge(); return false; //don't allow closing Home tab } diff --git a/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java b/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java index 6a300319eac..60724b3e115 100644 --- a/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java +++ b/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java @@ -215,8 +215,7 @@ public enum CSubmenuPreferences implements ICDoc { Singletons.getControl().setCloseAction((CloseAction) comboBox.getSelectedItem()); } }); - CloseAction selectedItem = CloseAction.valueOf(this.prefs.getPref(FPref.UI_CLOSE_ACTION)); - panel.setComboBox(comboBox, selectedItem); + panel.setComboBox(comboBox, Singletons.getControl().getCloseAction()); } private void initializeAiProfilesComboBox() { diff --git a/src/main/java/forge/view/FNavigationBar.java b/src/main/java/forge/view/FNavigationBar.java index b14640b96c6..7e7ea4cb499 100644 --- a/src/main/java/forge/view/FNavigationBar.java +++ b/src/main/java/forge/view/FNavigationBar.java @@ -64,7 +64,21 @@ public class FNavigationBar extends FTitleBarBase { FSkin.get(clock).setForeground(foreColor); addControls(); setupPnlReveal(); - btnClose.setToolTipText("Exit Forge"); + updateBtnCloseTooltip(); + } + + public void updateBtnCloseTooltip() { + switch (Singletons.getControl().getCloseAction()) { + case NONE: + btnClose.setToolTipText("Close"); + break; + case CLOSE_SCREEN: + btnClose.setToolTipText(this.selectedTab.data.getCloseButtonTooltip()); + break; + case EXIT_FORGE: + btnClose.setToolTipText("Exit Forge"); + break; + } } @Override @@ -133,6 +147,7 @@ public class FNavigationBar extends FTitleBarBase { } tab.setSelected(true); selectedTab = tab; + updateBtnCloseTooltip(); } } @@ -149,7 +164,7 @@ public class FNavigationBar extends FTitleBarBase { private void closeTab(NavigationTab tab) { if (tab == null) { return; } - if (!tab.data.onClosingTab()) { return; } //give data a chance to perform special close handling and/or cancel closing tab + if (!tab.data.onClosing()) { return; } //give data 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) @@ -333,8 +348,9 @@ public class FNavigationBar extends FTitleBarBase { public String getTabCaption(); public SkinImage getTabIcon(); public Screens getTabDestScreen(); - public String getTabCloseButtonTooltip(); - public boolean onClosingTab(); + public boolean allowTabClose(); + public String getCloseButtonTooltip(); + public boolean onClosing(); } private final class NavigationTab extends JLabel implements ILocalRepaint { @@ -357,10 +373,9 @@ public class FNavigationBar extends FTitleBarBase { skin.setFont(FSkin.getFont(fontSize)); int closeButtonOffset; - String closeButtonTooltip = data.getTabCloseButtonTooltip(); - if (closeButtonTooltip != null) { + if (data.allowTabClose()) { btnClose = new CloseButton(); - btnClose.setToolTipText(closeButtonTooltip); + btnClose.setToolTipText(data.getCloseButtonTooltip()); closeButtonOffset = btnClose.getPreferredSize().width; SpringLayout tabLayout = new SpringLayout(); setLayout(tabLayout); @@ -383,7 +398,7 @@ public class FNavigationBar extends FTitleBarBase { Singletons.getControl().changeStateAutoFixLayout(data.getTabDestScreen(), NavigationTab.this.getText()); } } - else if (SwingUtilities.isMiddleMouseButton(e) && data.getTabCloseButtonTooltip() != null) { + else if (SwingUtilities.isMiddleMouseButton(e) && data.allowTabClose()) { FNavigationBar.this.closeTab(NavigationTab.this); } } diff --git a/src/main/java/forge/view/ViewBazaarUI.java b/src/main/java/forge/view/ViewBazaarUI.java index 0abceaeba39..eb379b90f93 100644 --- a/src/main/java/forge/view/ViewBazaarUI.java +++ b/src/main/java/forge/view/ViewBazaarUI.java @@ -129,12 +129,20 @@ public class ViewBazaarUI extends FPanel implements INavigationTabData { public Screens getTabDestScreen() { return Screens.QUEST_BAZAAR; } + + /* (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 getTabCloseButtonTooltip() { + public String getCloseButtonTooltip() { return "Leave Bazaar"; } @@ -142,7 +150,7 @@ public class ViewBazaarUI extends FPanel implements INavigationTabData { * @see forge.view.FNavigationBar.INavigationTabData#onClosingTab() */ @Override - public boolean onClosingTab() { + public boolean onClosing() { Singletons.getControl().changeState(FControl.Screens.HOME_SCREEN); return true; }