From 2c463945fc874b53319786d67d21c1803fcc6a8a Mon Sep 17 00:00:00 2001 From: myk Date: Tue, 26 Feb 2013 04:28:48 +0000 Subject: [PATCH] add semi-intelligent default focus selection for all home submenu screens --- .../home/gauntlet/CSubmenuGauntletBuild.java | 5 ++- .../gauntlet/CSubmenuGauntletContests.java | 4 +- .../home/gauntlet/CSubmenuGauntletLoad.java | 13 ++++++- .../home/gauntlet/CSubmenuGauntletQuick.java | 4 +- .../home/gauntlet/VSubmenuGauntletBuild.java | 4 ++ .../gui/home/quest/CSubmenuQuestData.java | 5 +++ .../gui/home/quest/CSubmenuQuestDecks.java | 6 +++ .../gui/home/quest/CSubmenuQuestPrefs.java | 6 ++- .../gui/home/quest/VSubmenuQuestPrefs.java | 8 +++- .../home/sanctioned/CSubmenuConstructed.java | 7 ++-- .../gui/home/sanctioned/CSubmenuDraft.java | 18 ++++++++- .../gui/home/sanctioned/CSubmenuSealed.java | 39 ++++++++++++------- .../gui/home/settings/CSubmenuAvatars.java | 6 ++- .../home/settings/CSubmenuPreferences.java | 6 +++ .../gui/home/settings/VSubmenuAvatars.java | 5 ++- .../gui/home/variant/CSubmenuArchenemy.java | 6 ++- .../gui/home/variant/CSubmenuPlanechase.java | 6 ++- .../gui/home/variant/CSubmenuVanguard.java | 4 +- 18 files changed, 122 insertions(+), 30 deletions(-) diff --git a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletBuild.java b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletBuild.java index b36746192f1..79b597d6d0f 100644 --- a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletBuild.java +++ b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletBuild.java @@ -13,6 +13,7 @@ import javax.swing.JFileChooser; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.ListSelectionModel; +import javax.swing.SwingUtilities; import javax.swing.filechooser.FileFilter; import org.apache.commons.lang3.ArrayUtils; @@ -109,7 +110,9 @@ public enum CSubmenuGauntletBuild implements ICDoc { */ @Override public void update() { - // Nothing to see here... + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { view.focusName(); } + }); } /* (non-Javadoc) diff --git a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java index 4644c449a7a..3874210f6d2 100644 --- a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java +++ b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletContests.java @@ -84,7 +84,9 @@ public enum CSubmenuGauntletContests implements ICDoc { */ @Override public void update() { - // Nothing to see here... + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { view.getBtnStart().requestFocusInWindow(); } + }); } /* (non-Javadoc) diff --git a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletLoad.java b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletLoad.java index 5b1450625c5..ea3f040680f 100644 --- a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletLoad.java +++ b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletLoad.java @@ -6,6 +6,7 @@ import java.io.File; import java.util.ArrayList; import java.util.List; +import javax.swing.JButton; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; @@ -21,6 +22,7 @@ import forge.gauntlet.GauntletData; import forge.gauntlet.GauntletIO; import forge.gui.SOverlayUtils; import forge.gui.framework.ICDoc; +import forge.gui.home.VHomeUI; import forge.model.FModel; /** @@ -45,7 +47,16 @@ public enum CSubmenuGauntletLoad implements ICDoc { */ @Override public void update() { - // Nothing to see here... + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { + JButton btnStart = view.getBtnStart(); + if (btnStart.isEnabled()) { + view.getBtnStart().requestFocusInWindow(); + } else { + VHomeUI.SINGLETON_INSTANCE.getLblEditor().requestFocusInWindow(); + } + } + }); } /* (non-Javadoc) diff --git a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java index 1c321ad0d6b..4d7ae284856 100644 --- a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java +++ b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java @@ -83,7 +83,9 @@ public enum CSubmenuGauntletQuick implements ICDoc { */ @Override public void update() { - // Nothing to see here... + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { view.getBtnStart().requestFocusInWindow(); } + }); } /* (non-Javadoc) diff --git a/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletBuild.java b/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletBuild.java index 8b10e4b5108..07f58d7bdae 100644 --- a/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletBuild.java +++ b/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletBuild.java @@ -178,6 +178,10 @@ public enum VSubmenuGauntletBuild implements IVSubmenu { pnlButtons.add(btnDown, "h 40px!, w 100%!, ay baseline"); } + public void focusName() { + txfFilename.requestFocusInWindow(); + } + /* (non-Javadoc) * @see forge.gui.home.IVSubmenu#getGroupEnum() */ diff --git a/src/main/java/forge/gui/home/quest/CSubmenuQuestData.java b/src/main/java/forge/gui/home/quest/CSubmenuQuestData.java index d838081f48c..4fe69dbf67d 100644 --- a/src/main/java/forge/gui/home/quest/CSubmenuQuestData.java +++ b/src/main/java/forge/gui/home/quest/CSubmenuQuestData.java @@ -11,6 +11,7 @@ import java.util.Map.Entry; import java.util.Set; import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; import forge.Command; import forge.deck.Deck; @@ -151,6 +152,10 @@ public enum CSubmenuQuestData implements ICDoc { view.getLstQuests().setSelectCommand(cmdQuestSelect); view.getLstQuests().setDeleteCommand(cmdQuestDelete); + + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { view.getBtnEmbark().requestFocusInWindow(); } + }); } /** diff --git a/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java b/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java index 8605771b330..7674ec277d6 100644 --- a/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java +++ b/src/main/java/forge/gui/home/quest/CSubmenuQuestDecks.java @@ -2,6 +2,8 @@ package forge.gui.home.quest; import java.util.ArrayList; +import javax.swing.SwingUtilities; + import forge.Command; import forge.Singletons; import forge.control.FControl; @@ -93,6 +95,10 @@ public enum CSubmenuQuestDecks implements ICDoc { else { Singletons.getModel().getQuestPreferences().setPreference(QPref.CURRENT_DECK, QPref.CURRENT_DECK.getDefault()); } + + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { view.getBtnNewDeck().requestFocusInWindow(); } + }); } /** @return forge.deck.Deck */ diff --git a/src/main/java/forge/gui/home/quest/CSubmenuQuestPrefs.java b/src/main/java/forge/gui/home/quest/CSubmenuQuestPrefs.java index 79e62c76efb..3cb05e041e7 100644 --- a/src/main/java/forge/gui/home/quest/CSubmenuQuestPrefs.java +++ b/src/main/java/forge/gui/home/quest/CSubmenuQuestPrefs.java @@ -1,5 +1,7 @@ package forge.gui.home.quest; +import javax.swing.SwingUtilities; + import forge.Command; import forge.Singletons; import forge.gui.framework.ICDoc; @@ -29,7 +31,9 @@ public enum CSubmenuQuestPrefs implements ICDoc { */ @Override public void update() { - + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { VSubmenuQuestPrefs.SINGLETON_INSTANCE.focusFirstTextbox(); } + }); } /** diff --git a/src/main/java/forge/gui/home/quest/VSubmenuQuestPrefs.java b/src/main/java/forge/gui/home/quest/VSubmenuQuestPrefs.java index 101acc1cdbd..a6482273325 100644 --- a/src/main/java/forge/gui/home/quest/VSubmenuQuestPrefs.java +++ b/src/main/java/forge/gui/home/quest/VSubmenuQuestPrefs.java @@ -62,6 +62,7 @@ public enum VSubmenuQuestPrefs implements IVSubmenu { private final FLabel lblErrShop = new FLabel.Builder().text("Shop Error").fontStyle(Font.BOLD).build(); private final QuestPreferences prefs = Singletons.getModel().getQuestPreferences(); + private PrefInput focusTarget; /** */ public enum QuestPreferencesErrType { /** */ @@ -194,6 +195,10 @@ public enum VSubmenuQuestPrefs implements IVSubmenu { public JLabel getLblErrBooster() { return lblErrBooster; } + + public void focusFirstTextbox() { + focusTarget.requestFocusInWindow(); + } private void populateRewards() { pnlRewards.setOpaque(false); @@ -205,7 +210,8 @@ public enum VSubmenuQuestPrefs implements IVSubmenu { final String constraints2 = "w 150px!, h 26px!"; pnlRewards.add(new FLabel.Builder().text("Base winnings").build(), constraints2); - pnlRewards.add(new PrefInput(QPref.REWARDS_BASE, QuestPreferencesErrType.REWARDS), constraints1); + focusTarget = new PrefInput(QPref.REWARDS_BASE, QuestPreferencesErrType.REWARDS); + pnlRewards.add(focusTarget, constraints1); pnlRewards.add(new FLabel.Builder().text("No losses").build(), constraints2); pnlRewards.add(new PrefInput(QPref.REWARDS_UNDEFEATED, QuestPreferencesErrType.REWARDS), constraints1); diff --git a/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java b/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java index 9ed1e2bc6a1..e6bd57f091c 100644 --- a/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java +++ b/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java @@ -37,7 +37,9 @@ public enum CSubmenuConstructed implements ICDoc { */ @Override public void update() { - // Nothing to see here... + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { view.getBtnStart().requestFocusInWindow(); } + }); } /* (non-Javadoc) @@ -91,8 +93,6 @@ public enum CSubmenuConstructed implements ICDoc { view.getCbRemoveSmall().setSelected(prefs.getPrefBoolean(FPref.DECKGEN_NOSMALL)); } - - /** @param gameType * @param lists0   {@link java.util.List}<{@link javax.swing.JList}> */ private void startGame(final GameType gameType) { @@ -138,7 +138,6 @@ public enum CSubmenuConstructed implements ICDoc { worker.execute(); } - /* (non-Javadoc) * @see forge.gui.framework.ICDoc#getCommandOnSelect() */ diff --git a/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java b/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java index fcdec911146..3aec01996cb 100644 --- a/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java +++ b/src/main/java/forge/gui/home/sanctioned/CSubmenuDraft.java @@ -5,6 +5,7 @@ import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; +import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; @@ -71,11 +72,24 @@ public enum CSubmenuDraft implements ICDoc { human.add(d.getHumanDeck()); } - VSubmenuDraft.SINGLETON_INSTANCE.getLstDecks().setDecks(human); + final VSubmenuDraft view = VSubmenuDraft.SINGLETON_INSTANCE; + final JButton btnStart = view.getBtnStart(); + + view.getLstDecks().setDecks(human); if (human.size() > 1) { - VSubmenuDraft.SINGLETON_INSTANCE.getBtnStart().setEnabled(true); + btnStart.setEnabled(true); } + + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { + if (btnStart.isEnabled()) { + view.getBtnStart().requestFocusInWindow(); + } else { + view.getBtnBuildDeck().requestFocusInWindow(); + } + } + }); } private void startGame(final GameType gameType) { diff --git a/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java b/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java index 36b0563b0b8..2649ce9f776 100644 --- a/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java +++ b/src/main/java/forge/gui/home/sanctioned/CSubmenuSealed.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; @@ -21,8 +22,8 @@ import forge.deck.Deck; import forge.deck.DeckBase; import forge.deck.DeckGroup; import forge.deck.DeckSection; -import forge.game.limited.ReadDraftRankings; import forge.game.GameType; +import forge.game.limited.ReadDraftRankings; import forge.game.limited.SealedDeck; import forge.game.limited.SealedDeckFormat; import forge.gui.GuiChoose; @@ -68,17 +69,17 @@ public enum CSubmenuSealed implements ICDoc { public void mousePressed(final MouseEvent e) { setupSealed(); } }); VSubmenuSealed.SINGLETON_INSTANCE.getBtnStart().addMouseListener( - new MouseAdapter() { - @Override - public void mouseReleased(final MouseEvent e) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - startGame(GameType.Sealed); - } - }); - } - }); + new MouseAdapter() { + @Override + public void mouseReleased(final MouseEvent e) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + startGame(GameType.Sealed); + } + }); + } + }); VSubmenuSealed.SINGLETON_INSTANCE.getBtnDirections().addMouseListener(new MouseAdapter() { @Override @@ -103,7 +104,19 @@ public enum CSubmenuSealed implements ICDoc { humanDecks.add(d.getHumanDeck()); } - VSubmenuSealed.SINGLETON_INSTANCE.getLstDecks().setDecks(humanDecks); + final VSubmenuSealed view = VSubmenuSealed.SINGLETON_INSTANCE; + view.getLstDecks().setDecks(humanDecks); + + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { + JButton btnStart = view.getBtnStart(); + if (btnStart.isEnabled()) { + view.getBtnStart().requestFocusInWindow(); + } else { + view.getBtnBuildDeck().requestFocusInWindow(); + } + } + }); } private void startGame(final GameType gameType) { diff --git a/src/main/java/forge/gui/home/settings/CSubmenuAvatars.java b/src/main/java/forge/gui/home/settings/CSubmenuAvatars.java index df9e74fd16a..81feb5b2b26 100644 --- a/src/main/java/forge/gui/home/settings/CSubmenuAvatars.java +++ b/src/main/java/forge/gui/home/settings/CSubmenuAvatars.java @@ -1,5 +1,7 @@ package forge.gui.home.settings; +import javax.swing.SwingUtilities; + import forge.Command; import forge.gui.framework.ICDoc; @@ -25,7 +27,9 @@ public enum CSubmenuAvatars implements ICDoc { */ @Override public void update() { - + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { VSubmenuAvatars.SINGLETON_INSTANCE.focusHuman(); } + }); } /* (non-Javadoc) diff --git a/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java b/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java index 3be3ec393e2..449b438fef1 100644 --- a/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java +++ b/src/main/java/forge/gui/home/settings/CSubmenuPreferences.java @@ -5,6 +5,8 @@ import java.awt.event.ItemListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import javax.swing.SwingUtilities; + import org.apache.commons.lang3.text.WordUtils; import forge.Command; @@ -201,6 +203,10 @@ public enum CSubmenuPreferences implements ICDoc { view.getCbTextMana().setSelected(prefs.getPrefBoolean(FPref.UI_CARD_OVERLAY)); view.getCbEnableSounds().setSelected(prefs.getPrefBoolean(FPref.UI_ENABLE_SOUNDS)); view.reloadShortcuts(); + + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { view.getCbRemoveSmall().requestFocusInWindow(); } + }); } private void updateSkinNames() { diff --git a/src/main/java/forge/gui/home/settings/VSubmenuAvatars.java b/src/main/java/forge/gui/home/settings/VSubmenuAvatars.java index b0d5dabdde3..974753a6ec1 100644 --- a/src/main/java/forge/gui/home/settings/VSubmenuAvatars.java +++ b/src/main/java/forge/gui/home/settings/VSubmenuAvatars.java @@ -53,9 +53,12 @@ public enum VSubmenuAvatars implements IVSubmenu { private VSubmenuAvatars() { populateAvatars(); scrContent.setBorder(null); - } + public void focusHuman() { + lblAvatarHuman.requestFocusInWindow(); + } + /* (non-Javadoc) * @see forge.view.home.IViewSubmenu#populate() */ diff --git a/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java b/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java index f97d99d1f10..e7fd98d1b2b 100644 --- a/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java +++ b/src/main/java/forge/gui/home/variant/CSubmenuArchenemy.java @@ -54,7 +54,7 @@ public enum CSubmenuArchenemy implements ICDoc { @Override public void update() { // reinit deck list and restore last selections (if any) - FList deckList = VSubmenuArchenemy.SINGLETON_INSTANCE.getArchenemySchemes(); + FList deckList = view.getArchenemySchemes(); Vector listData = new Vector(); listData.add("Random"); listData.add("Generate"); @@ -71,6 +71,10 @@ public enum CSubmenuArchenemy implements ICDoc { if (-1 == deckList.getSelectedIndex()) { deckList.setSelectedIndex(0); } + + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { view.getBtnStart().requestFocusInWindow(); } + }); } /* (non-Javadoc) diff --git a/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java b/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java index 09679eb84c6..a06ad2a2700 100644 --- a/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java +++ b/src/main/java/forge/gui/home/variant/CSubmenuPlanechase.java @@ -54,7 +54,7 @@ public enum CSubmenuPlanechase implements ICDoc { @Override public void update() { // reinit deck lists and restore last selections (if any) - for (FList deckList : VSubmenuPlanechase.SINGLETON_INSTANCE.getPlanarDeckLists()) { + for (FList deckList : view.getPlanarDeckLists()) { Vector listData = new Vector(); listData.add("Random"); listData.add("Generate"); @@ -72,6 +72,10 @@ public enum CSubmenuPlanechase implements ICDoc { deckList.setSelectedIndex(0); } } + + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { view.getBtnStart().requestFocusInWindow(); } + }); } /* (non-Javadoc) diff --git a/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java b/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java index 9896579e1d6..5516c4b7566 100644 --- a/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java +++ b/src/main/java/forge/gui/home/variant/CSubmenuVanguard.java @@ -46,7 +46,9 @@ public enum CSubmenuVanguard implements ICDoc { */ @Override public void update() { - // Nothing to see here... + SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { view.getBtnStart().requestFocusInWindow(); } + }); } /* (non-Javadoc)