Update tooltip for X button based on current screen and close action

This commit is contained in:
drdev
2013-10-11 01:18:39 +00:00
parent 3006cc9431
commit 7eb84bb6a3
7 changed files with 72 additions and 21 deletions

View File

@@ -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());

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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
}

View File

@@ -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() {

View File

@@ -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);
}
}

View File

@@ -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;
}