keep the focus on the ok/cancel buttons during a match

restore focus to previous owner when the overlay is hidden
properly handle all the various combinations of hover/focus/button presses in FButton
This commit is contained in:
myk
2013-02-14 21:49:39 +00:00
parent dc2e9a1ca4
commit a42bbdc0ca
22 changed files with 131 additions and 207 deletions

View File

@@ -50,7 +50,7 @@ public class CountersProliferateEffect extends SpellEffect {
@Override @Override
public void showMessage() { public void showMessage() {
ButtonUtil.enableOnlyOK(); ButtonUtil.enableOnlyOk();
CMatchUI.SINGLETON_INSTANCE.showMessage("Proliferate: Choose permanents and/or players"); CMatchUI.SINGLETON_INSTANCE.showMessage("Proliferate: Choose permanents and/or players");
} }

View File

@@ -18,12 +18,12 @@
package forge.card.cardfactory; package forge.card.cardfactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Vector; import java.util.Vector;
import java.util.List;
import java.util.Collections;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
@@ -31,7 +31,6 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import forge.Card; import forge.Card;
import forge.CardLists; import forge.CardLists;
import forge.CardPredicates; import forge.CardPredicates;
import forge.CardPredicates.Presets; import forge.CardPredicates.Presets;
@@ -55,7 +54,6 @@ import forge.game.zone.Zone;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.gui.GuiChoose; import forge.gui.GuiChoose;
import forge.gui.match.CMatchUI; import forge.gui.match.CMatchUI;
import forge.util.Aggregates; import forge.util.Aggregates;
import forge.view.ButtonUtil; import forge.view.ButtonUtil;
@@ -802,7 +800,7 @@ public class CardFactorySorceries {
sb.append(card.getName()).append(" - Select a target creature to gain Fear (up to "); sb.append(card.getName()).append(" - Select a target creature to gain Fear (up to ");
sb.append(this.stop - this.count).append(" more)"); sb.append(this.stop - this.count).append(" more)");
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString()); CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
ButtonUtil.enableAll(); ButtonUtil.enableAllFocusOk();
} }
@Override @Override

View File

@@ -395,11 +395,11 @@ public class TargetSelection {
if (!tgt.isMinTargetsChosen(sa.getSourceCard(), sa) || tgt.isDividedAsYouChoose()) { if (!tgt.isMinTargetsChosen(sa.getSourceCard(), sa) || tgt.isDividedAsYouChoose()) {
ButtonUtil.enableOnlyCancel(); ButtonUtil.enableOnlyCancel();
} else { } else {
ButtonUtil.enableAll(); ButtonUtil.enableAllFocusOk();
} }
if (mandatory && tgt.hasCandidates(sa, true)) { if (mandatory && tgt.hasCandidates(sa, true)) {
ButtonUtil.disableCancel(); ButtonUtil.enableOnlyOk();
} }
} }

View File

@@ -52,7 +52,7 @@ public class InputAttack extends Input {
public final void showMessage() { public final void showMessage() {
// TODO still seems to have some issues with multiple planeswalkers // TODO still seems to have some issues with multiple planeswalkers
ButtonUtil.enableOnlyOK(); ButtonUtil.enableOnlyOk();
final Object o = Singletons.getModel().getGame().getCombat().nextDefender(); final Object o = Singletons.getModel().getGame().getCombat().nextDefender();
if (o == null) { if (o == null) {

View File

@@ -75,7 +75,7 @@ public class InputBlock extends Input {
@Override @Override
public final void showMessage() { public final void showMessage() {
// could add "Reset Blockers" button // could add "Reset Blockers" button
ButtonUtil.enableOnlyOK(); ButtonUtil.enableOnlyOk();
if (this.currentAttacker == null) { if (this.currentAttacker == null) {

View File

@@ -23,7 +23,6 @@ import java.util.List;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import forge.Card; import forge.Card;
import forge.CardLists; import forge.CardLists;
import forge.CardPredicates; import forge.CardPredicates;
import forge.Singletons; import forge.Singletons;
@@ -61,9 +60,8 @@ public class InputMulligan extends Input {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void showMessage() { public final void showMessage() {
ButtonUtil.enableAll(); ButtonUtil.setButtonText("No", "Yes");
VMatchUI.SINGLETON_INSTANCE.getBtnOK().setText("No"); ButtonUtil.enableAllFocusOk();
VMatchUI.SINGLETON_INSTANCE.getBtnCancel().setText("Yes");
final String str = final String str =
(Singletons.getModel().getGame().getPhaseHandler().getPlayerTurn().equals(Singletons.getControl().getPlayer()) (Singletons.getModel().getGame().getPhaseHandler().getPlayerTurn().equals(Singletons.getControl().getPlayer())
@@ -77,14 +75,10 @@ public class InputMulligan extends Input {
this.end(); this.end();
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final void selectButtonCancel() { public final void selectButtonCancel() {
final Player humanPlayer = Singletons.getControl().getPlayer(); final Player humanPlayer = Singletons.getControl().getPlayer();
final int newHand = humanPlayer.doMulligan(); final int newHand = humanPlayer.doMulligan();
if (newHand == 0) { if (newHand == 0) {

View File

@@ -46,7 +46,7 @@ public class InputPassPriority extends Input {
@Override @Override
public final void showMessage() { public final void showMessage() {
GuiDisplayUtil.updateGUI(); GuiDisplayUtil.updateGUI();
ButtonUtil.enableOnlyOK(); ButtonUtil.enableOnlyOk();
final PhaseType phase = Singletons.getModel().getGame().getPhaseHandler().getPhase(); final PhaseType phase = Singletons.getModel().getGame().getPhaseHandler().getPhase();
final Player player = Singletons.getModel().getGame().getPhaseHandler().getPriorityPlayer(); final Player player = Singletons.getModel().getGame().getPhaseHandler().getPriorityPlayer();

View File

@@ -20,10 +20,9 @@ package forge.control.input;
import java.util.List; import java.util.List;
import forge.Card; import forge.Card;
import forge.Singletons;
import forge.CardLists; import forge.CardLists;
import forge.Command; import forge.Command;
import forge.Singletons;
import forge.card.cardfactory.CardFactoryUtil; import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.CostDiscard; import forge.card.cost.CostDiscard;
import forge.card.spellability.SpellAbility; import forge.card.spellability.SpellAbility;
@@ -108,7 +107,7 @@ public class InputPayDiscardCost extends Input {
ButtonUtil.enableOnlyCancel(); ButtonUtil.enableOnlyCancel();
} }
else { else {
ButtonUtil.enableAll(); ButtonUtil.enableAllFocusOk();
} }
} }

View File

@@ -218,7 +218,7 @@ public class InputPayManaCostAbility extends InputPayMana {
public final void showMessage() { public final void showMessage() {
ButtonUtil.enableOnlyCancel(); ButtonUtil.enableOnlyCancel();
if (this.showOnlyOKButton) { if (this.showOnlyOKButton) {
ButtonUtil.enableOnlyOK(); ButtonUtil.enableOnlyOk();
} }
final StringBuilder msg = new StringBuilder(this.message + "Pay Mana Cost: " + this.manaCost); final StringBuilder msg = new StringBuilder(this.message + "Pay Mana Cost: " + this.manaCost);
if (this.phyLifeToLose > 0) { if (this.phyLifeToLose > 0) {

View File

@@ -42,7 +42,7 @@ public class InputPayManaX extends InputPayMana {
// only cancel if partially paid an X value // only cancel if partially paid an X value
// or X is 0, and x can't be 0 // or X is 0, and x can't be 0
} else { } else {
ButtonUtil.enableAll(); ButtonUtil.enableAllFocusOk();
} }
StringBuilder msg = new StringBuilder("Pay X Mana Cost for "); StringBuilder msg = new StringBuilder("Pay X Mana Cost for ");

View File

@@ -107,7 +107,7 @@ public class InputPayReturnCost extends Input {
ButtonUtil.enableOnlyCancel(); ButtonUtil.enableOnlyCancel();
} }
else { else {
ButtonUtil.enableAll(); ButtonUtil.enableAllFocusOk();
} }
} }

View File

@@ -108,7 +108,7 @@ public class InputPaySacCost extends Input {
ButtonUtil.enableOnlyCancel(); ButtonUtil.enableOnlyCancel();
} }
else { else {
ButtonUtil.enableAll(); ButtonUtil.enableAllFocusOk();
} }
} }

View File

@@ -39,13 +39,13 @@ public abstract class InputSelectMany<T extends GameEntity> extends Input {
boolean canOk = hasEnoughTargets(); boolean canOk = hasEnoughTargets();
if (canOk && canCancel) { if (canOk && canCancel) {
ButtonUtil.enableAll(); ButtonUtil.enableAllFocusOk();
} }
if (!canOk && canCancel) { if (!canOk && canCancel) {
ButtonUtil.enableOnlyCancel(); ButtonUtil.enableOnlyCancel();
} }
if (canOk && !canCancel) { if (canOk && !canCancel) {
ButtonUtil.enableOnlyOK(); ButtonUtil.enableOnlyOk();
} }
if (!canOk && !canCancel) { if (!canOk && !canCancel) {
ButtonUtil.disableAll(); ButtonUtil.disableAll();

View File

@@ -1,11 +1,13 @@
package forge.gui; package forge.gui;
import java.awt.Color; import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import javax.swing.FocusManager;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
@@ -117,7 +119,9 @@ public final class SOverlayUtils {
return overlay; return overlay;
} }
private static Component prevFocusOwner;
public static void showOverlay() { public static void showOverlay() {
prevFocusOwner = FocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner();
FOverlay.SINGLETON_INSTANCE.getPanel().setVisible(true); FOverlay.SINGLETON_INSTANCE.getPanel().setVisible(true);
// ensure no background element has focus // ensure no background element has focus
FOverlay.SINGLETON_INSTANCE.getPanel().requestFocusInWindow(); FOverlay.SINGLETON_INSTANCE.getPanel().requestFocusInWindow();
@@ -129,6 +133,10 @@ public final class SOverlayUtils {
public static void hideOverlay() { public static void hideOverlay() {
FOverlay.SINGLETON_INSTANCE.getPanel().removeAll(); FOverlay.SINGLETON_INSTANCE.getPanel().removeAll();
FOverlay.SINGLETON_INSTANCE.getPanel().setVisible(false); FOverlay.SINGLETON_INSTANCE.getPanel().setVisible(false);
if (null != prevFocusOwner) {
prevFocusOwner.requestFocusInWindow();
prevFocusOwner = null;
}
} }
public static void showTargetingOverlay() { public static void showTargetingOverlay() {

View File

@@ -1,7 +1,5 @@
package forge.gui.deckeditor.controllers; package forge.gui.deckeditor.controllers;
import java.awt.Component;
import java.awt.KeyboardFocusManager;
import java.awt.Toolkit; import java.awt.Toolkit;
import java.awt.event.ItemEvent; import java.awt.event.ItemEvent;
import java.awt.event.ItemListener; import java.awt.event.ItemListener;
@@ -155,7 +153,6 @@ public enum CCardCatalog implements ICDoc {
GuiUtils.addMenuItem(popup, "Sets...", null, new Runnable() { GuiUtils.addMenuItem(popup, "Sets...", null, new Runnable() {
@Override @Override
public void run() { public void run() {
final Component prevFocusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner();
final DialogChooseSets dialog = new DialogChooseSets(null, null, true); final DialogChooseSets dialog = new DialogChooseSets(null, null, true);
dialog.setOkCallback(new Runnable() { dialog.setOkCallback(new Runnable() {
@Override @Override
@@ -187,9 +184,6 @@ public enum CCardCatalog implements ICDoc {
} }
addRestriction(buildSetRestriction(label.toString(), setCodes, dialog.getWantReprints()), null, null); addRestriction(buildSetRestriction(label.toString(), setCodes, dialog.getWantReprints()), null, null);
if (null != prevFocusOwner) {
prevFocusOwner.requestFocusInWindow();
}
} }
}); });
} }

View File

@@ -43,6 +43,7 @@ import javax.swing.JPanel;
import javax.swing.JRadioButton; import javax.swing.JRadioButton;
import javax.swing.JTextField; import javax.swing.JTextField;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker; import javax.swing.SwingWorker;
import javax.swing.border.LineBorder; import javax.swing.border.LineBorder;
import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeEvent;
@@ -190,6 +191,12 @@ public abstract class GuiDownloader extends DefaultBoundedRangeModel implements
btnStart.setVisible(true); btnStart.setVisible(true);
btnStart.addActionListener(actStartDownload); btnStart.addActionListener(actStartDownload);
} }
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
btnStart.requestFocusInWindow();
}
});
} }
private void setCancel(final boolean cancel) { private void setCancel(final boolean cancel) {

View File

@@ -1,6 +1,8 @@
package forge.gui.framework; package forge.gui.framework;
import java.awt.Color; import java.awt.Color;
import java.awt.Component;
import java.awt.KeyboardFocusManager;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
@@ -84,6 +86,11 @@ public class SDisplayUtil {
/** @param tab0 &emsp; {@link java.gui.framework.IVDoc} */ /** @param tab0 &emsp; {@link java.gui.framework.IVDoc} */
public static void showTab(final IVDoc<? extends ICDoc> tab0) { public static void showTab(final IVDoc<? extends ICDoc> tab0) {
Component c = KeyboardFocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner();
tab0.getParentCell().setSelected(tab0); tab0.getParentCell().setSelected(tab0);
// set focus back to previous owner, if any
if (null != c) {
c.requestFocusInWindow();
}
} }
} }

View File

@@ -41,7 +41,6 @@ public enum CMessage implements ICDoc {
@Override @Override
public void actionPerformed(final ActionEvent evt) { public void actionPerformed(final ActionEvent evt) {
inputControl.selectButtonCancel(); inputControl.selectButtonCancel();
VMessage.SINGLETON_INSTANCE.getBtnOK().requestFocusInWindow();
} }
}; };
@@ -49,7 +48,6 @@ public enum CMessage implements ICDoc {
@Override @Override
public void actionPerformed(final ActionEvent evt) { public void actionPerformed(final ActionEvent evt) {
inputControl.selectButtonOK(); inputControl.selectButtonOK();
VMessage.SINGLETON_INSTANCE.getBtnOK().requestFocusInWindow();
} }
}; };

View File

@@ -38,7 +38,6 @@ import forge.game.zone.PlayerZone;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.gui.framework.ICDoc; import forge.gui.framework.ICDoc;
import forge.gui.match.CMatchUI; import forge.gui.match.CMatchUI;
import forge.gui.match.VMatchUI;
import forge.gui.match.controllers.CMessage; import forge.gui.match.controllers.CMessage;
import forge.view.arcane.CardPanel; import forge.view.arcane.CardPanel;
import forge.view.arcane.HandArea; import forge.view.arcane.HandArea;
@@ -186,7 +185,6 @@ public class CHand implements ICDoc {
final Card c = view.getHandArea().getCardFromMouseOverPanel(); final Card c = view.getHandArea().getCardFromMouseOverPanel();
if (c != null) { if (c != null) {
CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(c, Singletons.getControl().getPlayer().getZone(ZoneType.Hand)); CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(c, Singletons.getControl().getPlayer().getZone(ZoneType.Hand));
VMatchUI.SINGLETON_INSTANCE.getBtnOK().requestFocusInWindow();
} }
} }

View File

@@ -41,7 +41,6 @@ import forge.gui.framework.DragTab;
import forge.gui.framework.EDocID; import forge.gui.framework.EDocID;
import forge.gui.framework.IVDoc; import forge.gui.framework.IVDoc;
import forge.gui.match.CMatchUI; import forge.gui.match.CMatchUI;
import forge.gui.match.VMatchUI;
import forge.gui.match.controllers.CStack; import forge.gui.match.controllers.CStack;
import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FSkin;
import forge.properties.NewConstants; import forge.properties.NewConstants;
@@ -203,7 +202,6 @@ public enum VStack implements IVDoc<CStack> {
} }
} }
VMatchUI.SINGLETON_INSTANCE.getBtnOK().requestFocusInWindow();
parentCell.getBody().repaint(); parentCell.getBody().repaint();
} }

View File

@@ -29,6 +29,7 @@ import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent; import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter; import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JButton; import javax.swing.JButton;
@@ -50,6 +51,7 @@ public class FButton extends JButton implements ILocalRepaint {
private int w, h = 0; private int w, h = 0;
private boolean allImagesPresent = false; private boolean allImagesPresent = false;
private boolean toggle = false; private boolean toggle = false;
private boolean hovered = false;
private final AlphaComposite disabledComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.25f); private final AlphaComposite disabledComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.25f);
private KeyAdapter klEnter; private KeyAdapter klEnter;
@@ -60,14 +62,8 @@ public class FButton extends JButton implements ILocalRepaint {
this(""); this("");
} }
/** public FButton(final String label) {
* Instantiates a new FButton. super(label);
*
* @param msg
* the msg
*/
public FButton(final String msg) {
super(msg);
this.setOpaque(false); this.setOpaque(false);
this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT)); this.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT));
this.setBackground(Color.red); this.setBackground(Color.red);
@@ -96,52 +92,35 @@ public class FButton extends JButton implements ILocalRepaint {
// Mouse events // Mouse events
this.addMouseListener(new java.awt.event.MouseAdapter() { this.addMouseListener(new java.awt.event.MouseAdapter() {
@Override @Override
public void mouseEntered(final java.awt.event.MouseEvent evt) { public void mouseEntered(MouseEvent evt) {
if (isToggled()) { return; } hovered = true;
if (isToggled() || !isEnabled()) { return; }
if (FButton.this.isEnabled()) { resetImg();
FButton.this.imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_OVER_LEFT).getImage(); repaintSelf();
FButton.this.imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_OVER_CENTER).getImage();
FButton.this.imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_OVER_RIGHT).getImage();
}
} }
@Override @Override
public void mouseExited(final java.awt.event.MouseEvent evt) { public void mouseExited(MouseEvent evt) {
if (isToggled()) { return; } hovered = false;
if (isToggled() || !isEnabled()) { return; }
if (FButton.this.isEnabled() && !FButton.this.isFocusOwner()) { resetImg();
FButton.this.imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_LEFT).getImage(); repaintSelf();
FButton.this.imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_CENTER).getImage();
FButton.this.imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_RIGHT).getImage();
}
else if (FButton.this.isEnabled() && FButton.this.isFocusOwner()) {
FButton.this.imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_FOCUS_LEFT).getImage();
FButton.this.imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_FOCUS_CENTER).getImage();
FButton.this.imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_FOCUS_RIGHT).getImage();
}
} }
@Override @Override
public void mousePressed(final java.awt.event.MouseEvent evt) { public void mousePressed(MouseEvent evt) {
if (isToggled()) { return; } if (isToggled() || !isEnabled()) { return; }
imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DOWN_LEFT).getImage();
if (FButton.this.isEnabled()) { imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DOWN_CENTER).getImage();
FButton.this.imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DOWN_LEFT).getImage(); imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DOWN_RIGHT).getImage();
FButton.this.imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DOWN_CENTER).getImage(); repaintSelf();
FButton.this.imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DOWN_RIGHT).getImage();
}
} }
@Override @Override
public void mouseReleased(final java.awt.event.MouseEvent evt) { public void mouseReleased(MouseEvent evt) {
if (isToggled()) { return; } if (isToggled() || !isEnabled()) { return; }
resetImg();
if (FButton.this.isEnabled()) { repaintSelf();
FButton.this.imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DOWN_LEFT).getImage();
FButton.this.imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DOWN_CENTER).getImage();
FButton.this.imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DOWN_RIGHT).getImage();
}
} }
}); });
@@ -150,45 +129,51 @@ public class FButton extends JButton implements ILocalRepaint {
@Override @Override
public void focusGained(FocusEvent e) { public void focusGained(FocusEvent e) {
if (isToggled()) { return; } if (isToggled()) { return; }
resetImg();
if (FButton.this.isEnabled()) {
FButton.this.imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_FOCUS_LEFT).getImage();
FButton.this.imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_FOCUS_CENTER).getImage();
FButton.this.imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_FOCUS_RIGHT).getImage();
}
addKeyListener(klEnter); addKeyListener(klEnter);
repaintSelf();
} }
@Override @Override
public void focusLost(FocusEvent e) { public void focusLost(FocusEvent e) {
if (isToggled()) { return; } if (isToggled()) { return; }
resetImg();
if (FButton.this.isEnabled()) {
FButton.this.imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_LEFT).getImage();
FButton.this.imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_CENTER).getImage();
FButton.this.imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_RIGHT).getImage();
}
removeKeyListener(klEnter); removeKeyListener(klEnter);
repaintSelf();
} }
}); });
} }
private void resetImg() {
if (hovered) {
imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_OVER_LEFT).getImage();
imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_OVER_CENTER).getImage();
imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_OVER_RIGHT).getImage();
}
else if (isFocusOwner()) {
imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_FOCUS_LEFT).getImage();
imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_FOCUS_CENTER).getImage();
imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_FOCUS_RIGHT).getImage();
} else {
imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_LEFT).getImage();
imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_CENTER).getImage();
imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_RIGHT).getImage();
}
}
@Override @Override
public void setEnabled(boolean b0) { public void setEnabled(boolean b0) {
if (!b0) { if (!b0) {
FButton.this.imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DISABLED_LEFT).getImage(); imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DISABLED_LEFT).getImage();
FButton.this.imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DISABLED_CENTER).getImage(); imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DISABLED_CENTER).getImage();
FButton.this.imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DISABLED_RIGHT).getImage(); imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DISABLED_RIGHT).getImage();
} }
else { else {
FButton.this.imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_LEFT).getImage(); resetImg();
FButton.this.imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_CENTER).getImage();
FButton.this.imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_RIGHT).getImage();
} }
super.setEnabled(b0); super.setEnabled(b0);
repaintSelf();
} }
/** /**
@@ -203,40 +188,32 @@ public class FButton extends JButton implements ILocalRepaint {
/** @param b0 &emsp; boolean. */ /** @param b0 &emsp; boolean. */
public void setToggled(boolean b0) { public void setToggled(boolean b0) {
if (b0) { if (b0) {
FButton.this.imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_TOGGLE_LEFT).getImage(); imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_TOGGLE_LEFT).getImage();
FButton.this.imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_TOGGLE_CENTER).getImage(); imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_TOGGLE_CENTER).getImage();
FButton.this.imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_TOGGLE_RIGHT).getImage(); imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_TOGGLE_RIGHT).getImage();
} }
else if (isEnabled()) { else if (isEnabled()) {
FButton.this.imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_LEFT).getImage(); resetImg();
FButton.this.imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_CENTER).getImage();
FButton.this.imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_UP_RIGHT).getImage();
repaintSelf();
} }
else { else {
FButton.this.imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DISABLED_LEFT).getImage(); imgL = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DISABLED_LEFT).getImage();
FButton.this.imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DISABLED_CENTER).getImage(); imgM = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DISABLED_CENTER).getImage();
FButton.this.imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DISABLED_RIGHT).getImage(); imgR = FSkin.getIcon(FSkin.ButtonImages.IMG_BTN_DISABLED_RIGHT).getImage();
repaintSelf();
} }
this.toggle = b0; this.toggle = b0;
repaintSelf();
} }
/** Prevent button from repainting the whole screen. */ /** Prevent button from repainting the whole screen. */
@Override @Override
public void repaintSelf() { public void repaintSelf() {
final Dimension d = FButton.this.getSize(); final Dimension d = getSize();
repaint(0, 0, d.width, d.height); repaint(0, 0, d.width, d.height);
} }
/*
* (non-Javadoc)
*
* @see javax.swing.JComponent#paintComponent(java.awt.Graphics)
*/
@Override @Override
protected void paintComponent(final Graphics g) { protected void paintComponent(final Graphics g) {
if (!this.allImagesPresent) { if (!allImagesPresent) {
return; return;
} }
@@ -246,16 +223,16 @@ public class FButton extends JButton implements ILocalRepaint {
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
if (!this.isEnabled()) { if (!isEnabled()) {
g2d.setComposite(this.disabledComposite); g2d.setComposite(this.disabledComposite);
} }
this.w = this.getWidth(); w = getWidth();
this.h = this.getHeight(); h = getHeight();
g2d.drawImage(this.imgL, 0, 0, this.h, this.h, null); g2d.drawImage(imgL, 0, 0, this.h, this.h, null);
g2d.drawImage(this.imgM, this.h, 0, this.w - (2 * this.h), this.h, null); g2d.drawImage(imgM, this.h, 0, this.w - (2 * this.h), this.h, null);
g2d.drawImage(this.imgR, this.w - this.h, 0, this.h, this.h, null); g2d.drawImage(imgR, this.w - this.h, 0, this.h, this.h, null);
super.paintComponent(g); super.paintComponent(g);
} }

View File

@@ -22,103 +22,49 @@ import javax.swing.JButton;
import forge.gui.match.VMatchUI; import forge.gui.match.VMatchUI;
/** /**
* <p> * Manages match UI OK/Cancel button enabling and focus
* ButtonUtil class.
* </p>
*
* @author Forge
* @version $Id$
*/ */
public class ButtonUtil { public class ButtonUtil {
/** public static void setButtonText(String okLabel, String cancelLabel) {
* <p> getOk().setText(okLabel);
* reset. getCancel().setText(cancelLabel);
* </p> }
*/
public static void reset() { public static void reset() {
ButtonUtil.getOK().setText("OK"); disableAll();
ButtonUtil.getCancel().setText("Cancel"); getOk().setText("OK");
getCancel().setText("Cancel");
ButtonUtil.getOK().setEnabled(false);
ButtonUtil.getCancel().setEnabled(false);
} }
/** public static void enableOnlyOk() {
* <p> getCancel().setEnabled(false);
* enableOnlyOK. enableAndFocus(getOk());
* </p>
*/
public static void enableOnlyOK() {
ButtonUtil.getOK().setEnabled(true);
ButtonUtil.getCancel().setEnabled(false);
} }
/**
* <p>
* enableOnlyCancel.
* </p>
*/
public static void enableOnlyCancel() { public static void enableOnlyCancel() {
ButtonUtil.getOK().setEnabled(false); getOk().setEnabled(false);
ButtonUtil.getCancel().setEnabled(true); enableAndFocus(getCancel());
} }
/**
* <p>
* disableAll.
* </p>
*/
public static void disableAll() { public static void disableAll() {
ButtonUtil.getOK().setEnabled(false); getOk().setEnabled(false);
ButtonUtil.getCancel().setEnabled(false); getCancel().setEnabled(false);
} }
/** public static void enableAllFocusOk() {
* <p> enableAndFocus(getOk());
* enableAll. getCancel().setEnabled(true);
* </p>
*/
public static void enableAll() {
ButtonUtil.getOK().setEnabled(true);
ButtonUtil.getCancel().setEnabled(true);
} }
/** private static void enableAndFocus(final JButton button) {
* <p> button.setEnabled(true);
* disableOK. button.requestFocusInWindow();
* </p>
*/
public static void disableOK() {
ButtonUtil.getOK().setEnabled(false);
} }
/** private static JButton getOk() {
* <p>
* disableCancel.
* </p>
*/
public static void disableCancel() {
ButtonUtil.getCancel().setEnabled(false);
}
/**
* <p>
* getOK.
* </p>
*
* @return a {@link forge.MyButton} object.
*/
private static JButton getOK() {
return VMatchUI.SINGLETON_INSTANCE.getBtnOK(); return VMatchUI.SINGLETON_INSTANCE.getBtnOK();
} }
/**
* <p>
* getCancel.
* </p>
*
* @return a {@link forge.MyButton} object.
*/
private static JButton getCancel() { private static JButton getCancel() {
return VMatchUI.SINGLETON_INSTANCE.getBtnCancel(); return VMatchUI.SINGLETON_INSTANCE.getBtnCancel();
} }