mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 18:28:00 +00:00
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:
@@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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 ");
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ public class InputPayReturnCost extends Input {
|
|||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ButtonUtil.enableAll();
|
ButtonUtil.enableAllFocusOk();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ public class InputPaySacCost extends Input {
|
|||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ButtonUtil.enableAll();
|
ButtonUtil.enableAllFocusOk();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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   {@link java.gui.framework.IVDoc} */
|
/** @param tab0   {@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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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   boolean. */
|
/** @param b0   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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user