mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Boom - it's landed.
Draggable layout for match UI.
This commit is contained in:
75
.gitattributes
vendored
75
.gitattributes
vendored
@@ -10603,6 +10603,7 @@ res/lang/en.properties svneol=native#text/plain
|
|||||||
res/lang/howTo/de.properties svneol=native#text/plain
|
res/lang/howTo/de.properties svneol=native#text/plain
|
||||||
res/lang/howTo/en.properties svneol=native#text/plain
|
res/lang/howTo/en.properties svneol=native#text/plain
|
||||||
res/lang/lang.properties svneol=native#text/plain
|
res/lang/lang.properties svneol=native#text/plain
|
||||||
|
res/layouts/match_default.xml -text
|
||||||
res/licenses/java-yield-license.txt svneol=native#text/plain
|
res/licenses/java-yield-license.txt svneol=native#text/plain
|
||||||
res/licenses/log4j-license.txt svneol=native#text/plain
|
res/licenses/log4j-license.txt svneol=native#text/plain
|
||||||
res/licenses/multiline-label-license.txt svneol=native#text/plain
|
res/licenses/multiline-label-license.txt svneol=native#text/plain
|
||||||
@@ -11538,7 +11539,6 @@ src/main/java/forge/card/trigger/TriggerUntaps.java svneol=native#text/plain
|
|||||||
src/main/java/forge/card/trigger/ZCTrigger.java svneol=native#text/plain
|
src/main/java/forge/card/trigger/ZCTrigger.java svneol=native#text/plain
|
||||||
src/main/java/forge/card/trigger/package-info.java svneol=native#text/plain
|
src/main/java/forge/card/trigger/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/control/ControlBazaarUI.java -text
|
src/main/java/forge/control/ControlBazaarUI.java -text
|
||||||
src/main/java/forge/control/ControlMatchUI.java -text
|
|
||||||
src/main/java/forge/control/FControl.java -text
|
src/main/java/forge/control/FControl.java -text
|
||||||
src/main/java/forge/control/KeyboardShortcuts.java -text
|
src/main/java/forge/control/KeyboardShortcuts.java -text
|
||||||
src/main/java/forge/control/RestartUtil.java -text
|
src/main/java/forge/control/RestartUtil.java -text
|
||||||
@@ -11556,15 +11556,6 @@ src/main/java/forge/control/input/InputPayManaCost.java svneol=native#text/plain
|
|||||||
src/main/java/forge/control/input/InputPayManaCostAbility.java svneol=native#text/plain
|
src/main/java/forge/control/input/InputPayManaCostAbility.java svneol=native#text/plain
|
||||||
src/main/java/forge/control/input/InputPayManaCostUtil.java svneol=native#text/plain
|
src/main/java/forge/control/input/InputPayManaCostUtil.java svneol=native#text/plain
|
||||||
src/main/java/forge/control/input/package-info.java svneol=native#text/plain
|
src/main/java/forge/control/input/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/control/match/ControlDetail.java -text
|
|
||||||
src/main/java/forge/control/match/ControlDock.java -text
|
|
||||||
src/main/java/forge/control/match/ControlField.java -text
|
|
||||||
src/main/java/forge/control/match/ControlHand.java -text
|
|
||||||
src/main/java/forge/control/match/ControlMessage.java -text
|
|
||||||
src/main/java/forge/control/match/ControlPicture.java -text
|
|
||||||
src/main/java/forge/control/match/ControlTabber.java -text
|
|
||||||
src/main/java/forge/control/match/ControlWinLose.java -text
|
|
||||||
src/main/java/forge/control/match/package-info.java -text
|
|
||||||
src/main/java/forge/control/package-info.java -text
|
src/main/java/forge/control/package-info.java -text
|
||||||
src/main/java/forge/deck/CardCollections.java -text
|
src/main/java/forge/deck/CardCollections.java -text
|
||||||
src/main/java/forge/deck/Deck.java svneol=native#text/plain
|
src/main/java/forge/deck/Deck.java svneol=native#text/plain
|
||||||
@@ -11690,11 +11681,26 @@ src/main/java/forge/gui/download/GuiDownloadQuestImages.java -text
|
|||||||
src/main/java/forge/gui/download/GuiDownloadSetPicturesLQ.java svneol=native#text/plain
|
src/main/java/forge/gui/download/GuiDownloadSetPicturesLQ.java svneol=native#text/plain
|
||||||
src/main/java/forge/gui/download/GuiDownloader.java -text
|
src/main/java/forge/gui/download/GuiDownloader.java -text
|
||||||
src/main/java/forge/gui/download/package-info.java -text
|
src/main/java/forge/gui/download/package-info.java -text
|
||||||
|
src/main/java/forge/gui/framework/DragCell.java -text
|
||||||
|
src/main/java/forge/gui/framework/DragTab.java -text
|
||||||
|
src/main/java/forge/gui/framework/EDocID.java -text
|
||||||
|
src/main/java/forge/gui/framework/ICDoc.java -text
|
||||||
|
src/main/java/forge/gui/framework/IDocIdList.java -text
|
||||||
|
src/main/java/forge/gui/framework/ILocalRepaint.java -text
|
||||||
|
src/main/java/forge/gui/framework/IVDoc.java -text
|
||||||
|
src/main/java/forge/gui/framework/IVTopLevelUI.java -text
|
||||||
|
src/main/java/forge/gui/framework/SDisplayUtil.java -text
|
||||||
|
src/main/java/forge/gui/framework/SIOUtil.java -text
|
||||||
|
src/main/java/forge/gui/framework/SLayoutConstants.java -text
|
||||||
|
src/main/java/forge/gui/framework/SOverflowUtil.java -text
|
||||||
|
src/main/java/forge/gui/framework/SRearrangingUtil.java -text
|
||||||
|
src/main/java/forge/gui/framework/SResizingUtil.java -text
|
||||||
src/main/java/forge/gui/home/EMenuGroup.java -text
|
src/main/java/forge/gui/home/EMenuGroup.java -text
|
||||||
src/main/java/forge/gui/home/EMenuItem.java -text
|
src/main/java/forge/gui/home/EMenuItem.java -text
|
||||||
src/main/java/forge/gui/home/ICSubmenu.java -text
|
src/main/java/forge/gui/home/ICSubmenu.java -text
|
||||||
src/main/java/forge/gui/home/IVSubmenu.java -text
|
src/main/java/forge/gui/home/IVSubmenu.java -text
|
||||||
src/main/java/forge/gui/home/StartButton.java -text
|
src/main/java/forge/gui/home/StartButton.java -text
|
||||||
|
src/main/java/forge/gui/home/VHomeUI.java -text
|
||||||
src/main/java/forge/gui/home/package-info.java svneol=native#text/plain
|
src/main/java/forge/gui/home/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/gui/home/quest/CSubmenuChallenges.java -text
|
src/main/java/forge/gui/home/quest/CSubmenuChallenges.java -text
|
||||||
src/main/java/forge/gui/home/quest/CSubmenuDuels.java -text
|
src/main/java/forge/gui/home/quest/CSubmenuDuels.java -text
|
||||||
@@ -11730,24 +11736,30 @@ src/main/java/forge/gui/home/utilities/VSubmenuDeckEditor.java -text
|
|||||||
src/main/java/forge/gui/home/utilities/VSubmenuExit.java -text
|
src/main/java/forge/gui/home/utilities/VSubmenuExit.java -text
|
||||||
src/main/java/forge/gui/home/utilities/VSubmenuUtilities.java -text
|
src/main/java/forge/gui/home/utilities/VSubmenuUtilities.java -text
|
||||||
src/main/java/forge/gui/home/utilities/package-info.java svneol=native#text/plain
|
src/main/java/forge/gui/home/utilities/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/gui/layout/DragCell.java -text
|
src/main/java/forge/gui/match/CMatchUI.java -text
|
||||||
src/main/java/forge/gui/layout/DragTab.java -text
|
src/main/java/forge/gui/match/ControlWinLose.java -text
|
||||||
src/main/java/forge/gui/layout/EDocID.java -text
|
src/main/java/forge/gui/match/QuestWinLoseCardViewer.java -text
|
||||||
src/main/java/forge/gui/layout/FViewNew.java -text
|
src/main/java/forge/gui/match/QuestWinLoseHandler.java -text
|
||||||
src/main/java/forge/gui/layout/ICDoc.java -text
|
src/main/java/forge/gui/match/VMatchUI.java -text
|
||||||
src/main/java/forge/gui/layout/IDocIdList.java -text
|
src/main/java/forge/gui/match/ViewWinLose.java -text
|
||||||
src/main/java/forge/gui/layout/ILocalRepaint.java -text
|
src/main/java/forge/gui/match/controllers/CAntes.java -text
|
||||||
src/main/java/forge/gui/layout/IVDoc.java -text
|
src/main/java/forge/gui/match/controllers/CCombat.java -text
|
||||||
src/main/java/forge/gui/layout/MDragUI.java -text
|
src/main/java/forge/gui/match/controllers/CDetail.java -text
|
||||||
src/main/java/forge/gui/layout/SIOUtil.java -text
|
src/main/java/forge/gui/match/controllers/CDev.java -text
|
||||||
src/main/java/forge/gui/layout/SOverflowUtil.java -text
|
src/main/java/forge/gui/match/controllers/CDock.java -text
|
||||||
src/main/java/forge/gui/layout/SRearrangingUtil.java -text
|
src/main/java/forge/gui/match/controllers/CLog.java -text
|
||||||
src/main/java/forge/gui/layout/SResizingUtil.java -text
|
src/main/java/forge/gui/match/controllers/CMessage.java -text
|
||||||
|
src/main/java/forge/gui/match/controllers/CPicture.java -text
|
||||||
|
src/main/java/forge/gui/match/controllers/CPlayers.java -text
|
||||||
|
src/main/java/forge/gui/match/controllers/CStack.java -text
|
||||||
|
src/main/java/forge/gui/match/nonsingleton/CField.java -text
|
||||||
|
src/main/java/forge/gui/match/nonsingleton/CHand.java -text
|
||||||
src/main/java/forge/gui/match/nonsingleton/VField.java -text
|
src/main/java/forge/gui/match/nonsingleton/VField.java -text
|
||||||
src/main/java/forge/gui/match/nonsingleton/VHand.java -text
|
src/main/java/forge/gui/match/nonsingleton/VHand.java -text
|
||||||
src/main/java/forge/gui/match/views/VAntes.java -text
|
src/main/java/forge/gui/match/views/VAntes.java -text
|
||||||
src/main/java/forge/gui/match/views/VCombat.java -text
|
src/main/java/forge/gui/match/views/VCombat.java -text
|
||||||
src/main/java/forge/gui/match/views/VDetail.java -text
|
src/main/java/forge/gui/match/views/VDetail.java -text
|
||||||
|
src/main/java/forge/gui/match/views/VDev.java -text
|
||||||
src/main/java/forge/gui/match/views/VDock.java -text
|
src/main/java/forge/gui/match/views/VDock.java -text
|
||||||
src/main/java/forge/gui/match/views/VLog.java -text
|
src/main/java/forge/gui/match/views/VLog.java -text
|
||||||
src/main/java/forge/gui/match/views/VMessage.java -text
|
src/main/java/forge/gui/match/views/VMessage.java -text
|
||||||
@@ -11769,7 +11781,6 @@ src/main/java/forge/gui/toolbox/FRadioButton.java -text
|
|||||||
src/main/java/forge/gui/toolbox/FScrollPane.java -text
|
src/main/java/forge/gui/toolbox/FScrollPane.java -text
|
||||||
src/main/java/forge/gui/toolbox/FSkin.java -text
|
src/main/java/forge/gui/toolbox/FSkin.java -text
|
||||||
src/main/java/forge/gui/toolbox/FTextArea.java -text
|
src/main/java/forge/gui/toolbox/FTextArea.java -text
|
||||||
src/main/java/forge/gui/toolbox/FVerticalTabPanel.java -text
|
|
||||||
src/main/java/forge/gui/toolbox/package-info.java svneol=native#text/plain
|
src/main/java/forge/gui/toolbox/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/item/BoosterPack.java -text
|
src/main/java/forge/item/BoosterPack.java -text
|
||||||
src/main/java/forge/item/CardDb.java -text
|
src/main/java/forge/item/CardDb.java -text
|
||||||
@@ -11862,13 +11873,11 @@ src/main/java/forge/util/closures/Predicate.java -text
|
|||||||
src/main/java/forge/util/closures/PredicateString.java -text
|
src/main/java/forge/util/closures/PredicateString.java -text
|
||||||
src/main/java/forge/util/package-info.java -text
|
src/main/java/forge/util/package-info.java -text
|
||||||
src/main/java/forge/view/ButtonUtil.java svneol=native#text/plain
|
src/main/java/forge/view/ButtonUtil.java svneol=native#text/plain
|
||||||
src/main/java/forge/view/FView.java svneol=native#text/plain
|
src/main/java/forge/view/FView.java -text
|
||||||
src/main/java/forge/view/Main.java -text
|
src/main/java/forge/view/Main.java -text
|
||||||
src/main/java/forge/view/SplashFrame.java -text
|
src/main/java/forge/view/SplashFrame.java -text
|
||||||
src/main/java/forge/view/ViewBazaarUI.java -text
|
src/main/java/forge/view/ViewBazaarUI.java -text
|
||||||
src/main/java/forge/view/ViewEditorUI.java -text
|
src/main/java/forge/view/ViewEditorUI.java -text
|
||||||
src/main/java/forge/view/ViewHomeUI.java -text
|
|
||||||
src/main/java/forge/view/ViewMatchUI.java -text
|
|
||||||
src/main/java/forge/view/arcane/CardArea.java svneol=native#text/plain
|
src/main/java/forge/view/arcane/CardArea.java svneol=native#text/plain
|
||||||
src/main/java/forge/view/arcane/CardPanel.java svneol=native#text/plain
|
src/main/java/forge/view/arcane/CardPanel.java svneol=native#text/plain
|
||||||
src/main/java/forge/view/arcane/CardPanelContainer.java svneol=native#text/plain
|
src/main/java/forge/view/arcane/CardPanelContainer.java svneol=native#text/plain
|
||||||
@@ -11886,18 +11895,6 @@ src/main/java/forge/view/arcane/util/package-info.java svneol=native#text/plain
|
|||||||
src/main/java/forge/view/bazaar/ViewItem.java -text
|
src/main/java/forge/view/bazaar/ViewItem.java -text
|
||||||
src/main/java/forge/view/bazaar/ViewStall.java svneol=native#text/plain
|
src/main/java/forge/view/bazaar/ViewStall.java svneol=native#text/plain
|
||||||
src/main/java/forge/view/bazaar/package-info.java svneol=native#text/plain
|
src/main/java/forge/view/bazaar/package-info.java svneol=native#text/plain
|
||||||
src/main/java/forge/view/match/QuestWinLoseCardViewer.java -text
|
|
||||||
src/main/java/forge/view/match/QuestWinLoseHandler.java -text
|
|
||||||
src/main/java/forge/view/match/ViewBattlefield.java -text
|
|
||||||
src/main/java/forge/view/match/ViewDetail.java -text
|
|
||||||
src/main/java/forge/view/match/ViewDock.java -text
|
|
||||||
src/main/java/forge/view/match/ViewField.java -text
|
|
||||||
src/main/java/forge/view/match/ViewHand.java -text
|
|
||||||
src/main/java/forge/view/match/ViewMessage.java -text
|
|
||||||
src/main/java/forge/view/match/ViewPicture.java -text
|
|
||||||
src/main/java/forge/view/match/ViewTabber.java -text
|
|
||||||
src/main/java/forge/view/match/ViewWinLose.java -text
|
|
||||||
src/main/java/forge/view/match/package-info.java svneol=native#text/plain
|
|
||||||
src/main/java/forge/view/package-info.java svneol=native#text/plain
|
src/main/java/forge/view/package-info.java svneol=native#text/plain
|
||||||
src/main/java/net/slightlymagic/braids/BaseProgressMonitor.java svneol=native#text/plain
|
src/main/java/net/slightlymagic/braids/BaseProgressMonitor.java svneol=native#text/plain
|
||||||
src/main/java/net/slightlymagic/braids/BraidsProgressMonitor.java svneol=native#text/plain
|
src/main/java/net/slightlymagic/braids/BraidsProgressMonitor.java svneol=native#text/plain
|
||||||
|
|||||||
30
res/layouts/match_default.xml
Normal file
30
res/layouts/match_default.xml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<layout>
|
||||||
|
<cell x="0.0" y="0.0" w="0.2" h="0.643">
|
||||||
|
<doc>REPORT_STACK</doc>
|
||||||
|
<doc>REPORT_COMBAT</doc>
|
||||||
|
<doc>REPORT_LOG</doc>
|
||||||
|
<doc>REPORT_PLAYERS</doc>
|
||||||
|
</cell>
|
||||||
|
<cell x="0.0" y="0.643" w="0.2" h="0.357">
|
||||||
|
<doc>REPORT_MESSAGE</doc>
|
||||||
|
<doc>DEV_MODE</doc>
|
||||||
|
<doc>CARD_ANTES</doc>
|
||||||
|
<doc>BUTTON_DOCK</doc>
|
||||||
|
</cell>
|
||||||
|
<cell x="0.2" y="0.0" w="0.6" h="0.364">
|
||||||
|
<doc>FIELD_0</doc>
|
||||||
|
</cell>
|
||||||
|
<cell x="0.2" y="0.732" w="0.6" h="0.268">
|
||||||
|
<doc>HAND_1</doc>
|
||||||
|
</cell>
|
||||||
|
<cell x="0.8" y="0.0" w="0.2" h="0.466">
|
||||||
|
<doc>CARD_DETAIL</doc>
|
||||||
|
</cell>
|
||||||
|
<cell x="0.2" y="0.364" w="0.6" h="0.368">
|
||||||
|
<doc>FIELD_1</doc>
|
||||||
|
</cell>
|
||||||
|
<cell x="0.8" y="0.466" w="0.2" h="0.534">
|
||||||
|
<doc>CARD_PICTURE</doc>
|
||||||
|
</cell>
|
||||||
|
</layout>
|
||||||
@@ -55,7 +55,7 @@ import forge.game.zone.PlayerZone;
|
|||||||
import forge.game.zone.PlayerZoneComesIntoPlay;
|
import forge.game.zone.PlayerZoneComesIntoPlay;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
import forge.view.match.ViewWinLose;
|
import forge.gui.match.ViewWinLose;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Methods for common actions performed during a game.
|
* Methods for common actions performed during a game.
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -417,7 +418,7 @@ public final class GameActionUtil {
|
|||||||
* @return a boolean.
|
* @return a boolean.
|
||||||
*/
|
*/
|
||||||
public static boolean showYesNoDialog(final Card c, String question, final boolean defaultNo) {
|
public static boolean showYesNoDialog(final Card c, String question, final boolean defaultNo) {
|
||||||
Singletons.getControl().getControlMatch().setCard(c);
|
CMatchUI.SINGLETON_INSTANCE.setCard(c);
|
||||||
final StringBuilder title = new StringBuilder();
|
final StringBuilder title = new StringBuilder();
|
||||||
title.append(c.getName()).append(" - Ability");
|
title.append(c.getName()).append(" - Ability");
|
||||||
|
|
||||||
@@ -503,7 +504,7 @@ public final class GameActionUtil {
|
|||||||
* @return a boolean.
|
* @return a boolean.
|
||||||
*/
|
*/
|
||||||
private static boolean showLandfallDialog(final Card c) {
|
private static boolean showLandfallDialog(final Card c) {
|
||||||
Singletons.getControl().getControlMatch().setCard(c);
|
CMatchUI.SINGLETON_INSTANCE.setCard(c);
|
||||||
final String[] choices = { "Yes", "No" };
|
final String[] choices = { "Yes", "No" };
|
||||||
|
|
||||||
Object q = null;
|
Object q = null;
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
@@ -1428,7 +1429,7 @@ public class AbilityFactoryCounters {
|
|||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
Singletons.getControl().getControlMatch().showMessage("Proliferate: Choose permanents and/or players");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Proliferate: Choose permanents and/or players");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -145,7 +146,7 @@ class CardFactoryArtifacts {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Discard a land card (or select Mox Diamond to sacrifice it)");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Discard a land card (or select Mox Diamond to sacrifice it)");
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -493,7 +494,7 @@ class CardFactoryArtifacts {
|
|||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(card.getName()).append(" - Exile cards from hand. Currently, ");
|
sb.append(card.getName()).append(" - Exile cards from hand. Currently, ");
|
||||||
sb.append(this.exiled.size()).append(" selected. (Press OK when done.)");
|
sb.append(this.exiled.size()).append(" selected. (Press OK when done.)");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyOK();
|
ButtonUtil.enableOnlyOK();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -528,7 +529,7 @@ class CardFactoryArtifacts {
|
|||||||
|
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(card.getName()).append(" - Returning cards to top of library.");
|
sb.append(card.getName()).append(" - Returning cards to top of library.");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
|
|
||||||
// Then look at the exiled cards and put them on
|
// Then look at the exiled cards and put them on
|
||||||
// top of your library in any order.
|
// top of your library in any order.
|
||||||
@@ -692,7 +693,7 @@ class CardFactoryArtifacts {
|
|||||||
if (AllZone.getHumanPlayer().getZone(ZoneType.Hand).size() == 0) {
|
if (AllZone.getHumanPlayer().getZone(ZoneType.Hand).size() == 0) {
|
||||||
this.stop();
|
this.stop();
|
||||||
}
|
}
|
||||||
Singletons.getControl().getControlMatch().showMessage(prompt);
|
CMatchUI.SINGLETON_INSTANCE.showMessage(prompt);
|
||||||
ButtonUtil.disableAll();
|
ButtonUtil.disableAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -809,7 +810,7 @@ class CardFactoryArtifacts {
|
|||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(cardName).append(" - Select an artifact on the battlefield");
|
sb.append(cardName).append(" - Select an artifact on the battlefield");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
@@ -361,7 +362,7 @@ public class CardFactoryCreatures {
|
|||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
ButtonUtil.disableAll();
|
ButtonUtil.disableAll();
|
||||||
Singletons.getControl().getControlMatch().showMessage("Exile a nonland card from your hand.");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Exile a nonland card from your hand.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -413,9 +414,9 @@ public class CardFactoryCreatures {
|
|||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
if (index[0] == 0) {
|
if (index[0] == 0) {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Select target land you control.");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Select target land you control.");
|
||||||
} else {
|
} else {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Select target land opponent controls.");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Select target land opponent controls.");
|
||||||
}
|
}
|
||||||
|
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
@@ -1039,7 +1040,7 @@ public class CardFactoryCreatures {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage(msg);
|
CMatchUI.SINGLETON_INSTANCE.showMessage(msg);
|
||||||
ButtonUtil.enableOnlyOK();
|
ButtonUtil.enableOnlyOK();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1476,7 +1477,7 @@ public class CardFactoryCreatures {
|
|||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append("Select up to 5 target permanents. Selected (");
|
sb.append("Select up to 5 target permanents. Selected (");
|
||||||
sb.append(targetPerms.size()).append(") so far. Click OK when done.");
|
sb.append(targetPerms.size()).append(") so far. Click OK when done.");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyOK();
|
ButtonUtil.enableOnlyOK();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1518,7 +1519,7 @@ public class CardFactoryCreatures {
|
|||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(card.getName()).append(" - Select target player");
|
sb.append(card.getName()).append(" - Select target player");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1574,7 +1575,7 @@ public class CardFactoryCreatures {
|
|||||||
toDisplay += "Currently, (" + toSac.size() + ") selected with a total power of: "
|
toDisplay += "Currently, (" + toSac.size() + ") selected with a total power of: "
|
||||||
+ getTotalPower();
|
+ getTotalPower();
|
||||||
toDisplay += " Click OK when Done.";
|
toDisplay += " Click OK when Done.";
|
||||||
Singletons.getControl().getControlMatch().showMessage(toDisplay);
|
CMatchUI.SINGLETON_INSTANCE.showMessage(toDisplay);
|
||||||
ButtonUtil.enableAll();
|
ButtonUtil.enableAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1788,7 +1789,7 @@ public class CardFactoryCreatures {
|
|||||||
message += "or artifact ";
|
message += "or artifact ";
|
||||||
}
|
}
|
||||||
message += "on the battlefield";
|
message += "on the battlefield";
|
||||||
Singletons.getControl().getControlMatch().showMessage(cardName + " - " + message);
|
CMatchUI.SINGLETON_INSTANCE.showMessage(cardName + " - " + message);
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import forge.game.GameLossReason;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -294,7 +295,7 @@ class CardFactoryEnchantments {
|
|||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(cardName).append(" - Select an artifact on the battlefield");
|
sb.append(cardName).append(" - Select an artifact on the battlefield");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
@@ -206,7 +207,7 @@ class CardFactoryLands {
|
|||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(cardName).append(" - Select an untapped land to sacrifice");
|
sb.append(cardName).append(" - Select an untapped land to sacrifice");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,7 +225,7 @@ class CardFactoryLands {
|
|||||||
paid[0]++;
|
paid[0]++;
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(cardName).append(" - Select an untapped land to sacrifice");
|
sb.append(cardName).append(" - Select an untapped land to sacrifice");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
} else {
|
} else {
|
||||||
this.stop();
|
this.stop();
|
||||||
}
|
}
|
||||||
@@ -295,7 +296,7 @@ class CardFactoryLands {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage(
|
CMatchUI.SINGLETON_INSTANCE.showMessage(
|
||||||
cardName + " - Select one " + type[0] + " to sacrifice");
|
cardName + " - Select one " + type[0] + " to sacrifice");
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
@@ -388,7 +389,7 @@ class CardFactoryLands {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage(
|
CMatchUI.SINGLETON_INSTANCE.showMessage(
|
||||||
"Scorched Ruins - Select an untapped land to sacrifice");
|
"Scorched Ruins - Select an untapped land to sacrifice");
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
@@ -405,7 +406,7 @@ class CardFactoryLands {
|
|||||||
Singletons.getModel().getGameAction().sacrifice(c);
|
Singletons.getModel().getGameAction().sacrifice(c);
|
||||||
if (paid[0] < 1) {
|
if (paid[0] < 1) {
|
||||||
paid[0]++;
|
paid[0]++;
|
||||||
Singletons.getControl().getControlMatch().showMessage(
|
CMatchUI.SINGLETON_INSTANCE.showMessage(
|
||||||
"Scorched Ruins - Select an untapped land to sacrifice");
|
"Scorched Ruins - Select an untapped land to sacrifice");
|
||||||
} else {
|
} else {
|
||||||
this.stop();
|
this.stop();
|
||||||
@@ -483,7 +484,7 @@ class CardFactoryLands {
|
|||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(card.getName()).append(" - Reveal a card.");
|
sb.append(card.getName()).append(" - Reveal a card.");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -669,7 +670,7 @@ class CardFactoryLands {
|
|||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(cardName);
|
sb.append(cardName);
|
||||||
sb.append(" - Select one non-Lair land to return to your hand");
|
sb.append(" - Select one non-Lair land to return to your hand");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -738,7 +739,7 @@ class CardFactoryLands {
|
|||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(card).append(" - Select one untapped ");
|
sb.append(card).append(" - Select one untapped ");
|
||||||
sb.append(type[0]).append(" to return");
|
sb.append(type[0]).append(" to return");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ import forge.game.player.PlayerUtil;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -116,9 +117,9 @@ public class CardFactorySorceries {
|
|||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
if (index[0] == 0) {
|
if (index[0] == 0) {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Select target land you control.");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Select target land you control.");
|
||||||
} else {
|
} else {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Select target land opponent controls.");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Select target land opponent controls.");
|
||||||
}
|
}
|
||||||
|
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
@@ -608,7 +609,7 @@ public class CardFactorySorceries {
|
|||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append("Select target ").append(humanBasic.get(this.count));
|
sb.append("Select target ").append(humanBasic.get(this.count));
|
||||||
sb.append(" land to not sacrifice");
|
sb.append(" land to not sacrifice");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1068,7 +1069,7 @@ public class CardFactorySorceries {
|
|||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append("Select target creatures and/or players. Currently, ");
|
sb.append("Select target creatures and/or players. Currently, ");
|
||||||
sb.append(this.getNumTargets()).append(" targets. Click OK when done.");
|
sb.append(this.getNumTargets()).append(" targets. Click OK when done.");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getNumTargets() {
|
private int getNumTargets() {
|
||||||
@@ -1102,11 +1103,11 @@ public class CardFactorySorceries {
|
|||||||
@Override
|
@Override
|
||||||
public void selectCard(final Card c, final PlayerZone zone) {
|
public void selectCard(final Card c, final PlayerZone zone) {
|
||||||
if (!c.canBeTargetedBy(spell)) {
|
if (!c.canBeTargetedBy(spell)) {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Cannot target this card.");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Cannot target this card.");
|
||||||
return; // cannot target
|
return; // cannot target
|
||||||
}
|
}
|
||||||
if (targets.contains(c)) {
|
if (targets.contains(c)) {
|
||||||
Singletons.getControl().getControlMatch().showMessage("You have already selected this target.");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("You have already selected this target.");
|
||||||
return; // cannot target the same creature twice.
|
return; // cannot target the same creature twice.
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1119,11 +1120,11 @@ public class CardFactorySorceries {
|
|||||||
@Override
|
@Override
|
||||||
public void selectPlayer(final Player player) {
|
public void selectPlayer(final Player player) {
|
||||||
if (!player.canBeTargetedBy(spell)) {
|
if (!player.canBeTargetedBy(spell)) {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Cannot target this player.");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Cannot target this player.");
|
||||||
return; // cannot target
|
return; // cannot target
|
||||||
}
|
}
|
||||||
if (targetPlayers.contains(player)) {
|
if (targetPlayers.contains(player)) {
|
||||||
Singletons.getControl().getControlMatch().showMessage("You have already selected this player.");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("You have already selected this player.");
|
||||||
return; // cannot target the same player twice.
|
return; // cannot target the same player twice.
|
||||||
}
|
}
|
||||||
targetPlayers.add(player);
|
targetPlayers.add(player);
|
||||||
@@ -1606,7 +1607,7 @@ public class CardFactorySorceries {
|
|||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(cardName).append(" - Select a target creature to gain Fear (up to ");
|
sb.append(cardName).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)");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableAll();
|
ButtonUtil.enableAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1648,7 +1649,7 @@ public class CardFactorySorceries {
|
|||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(cardName).append(" - Select target creature to get -X/-X");
|
sb.append(cardName).append(" - Select target creature to get -X/-X");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1729,7 +1730,7 @@ public class CardFactorySorceries {
|
|||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append(cardName).append(" - Select target player to lose life");
|
sb.append(cardName).append(" - Select target player to lose life");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
@@ -808,7 +809,7 @@ public class CardFactoryUtil {
|
|||||||
if (spell.getTargetCard() != null) {
|
if (spell.getTargetCard() != null) {
|
||||||
this.stop();
|
this.stop();
|
||||||
}
|
}
|
||||||
Singletons.getControl().getControlMatch().showMessage("Select target Spell: ");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Select target Spell: ");
|
||||||
final Card choice = GuiUtils.chooseOneOrNone("Choose a Spell", choices.toArray());
|
final Card choice = GuiUtils.chooseOneOrNone("Choose a Spell", choices.toArray());
|
||||||
if (choice != null) {
|
if (choice != null) {
|
||||||
spell.setTargetCard(choice);
|
spell.setTargetCard(choice);
|
||||||
@@ -856,7 +857,7 @@ public class CardFactoryUtil {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage(message);
|
CMatchUI.SINGLETON_INSTANCE.showMessage(message);
|
||||||
ButtonUtil.disableAll();
|
ButtonUtil.disableAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1752,7 +1753,7 @@ public class CardFactoryUtil {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage(message);
|
CMatchUI.SINGLETON_INSTANCE.showMessage(message);
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1764,7 +1765,7 @@ public class CardFactoryUtil {
|
|||||||
@Override
|
@Override
|
||||||
public void selectCard(final Card card, final PlayerZone zone) {
|
public void selectCard(final Card card, final PlayerZone zone) {
|
||||||
if (targeted && !card.canBeTargetedBy(spell)) {
|
if (targeted && !card.canBeTargetedBy(spell)) {
|
||||||
Singletons.getControl().getControlMatch()
|
CMatchUI.SINGLETON_INSTANCE
|
||||||
.showMessage("Cannot target this card (Shroud? Protection?).");
|
.showMessage("Cannot target this card (Shroud? Protection?).");
|
||||||
} else if (choices.contains(card)) {
|
} else if (choices.contains(card)) {
|
||||||
spell.setTargetCard(card);
|
spell.setTargetCard(card);
|
||||||
@@ -1810,7 +1811,7 @@ public class CardFactoryUtil {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage(message);
|
CMatchUI.SINGLETON_INSTANCE.showMessage(message);
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1890,7 +1891,7 @@ public class CardFactoryUtil {
|
|||||||
* (AllZone.getHumanPlayer().getZone(Zone.Hand).size() == 0) { this.stop();
|
* (AllZone.getHumanPlayer().getZone(Zone.Hand).size() == 0) { this.stop();
|
||||||
* }
|
* }
|
||||||
*
|
*
|
||||||
* Singletons.getControl().getControlMatch().showMessage(
|
* CMatchUI.SINGLETON_INSTANCE.showMessage(
|
||||||
* "Select a card to discard"); ButtonUtil.disableAll(); }
|
* "Select a card to discard"); ButtonUtil.disableAll(); }
|
||||||
*
|
*
|
||||||
* @Override public void selectCard(final Card card, final PlayerZone zone)
|
* @Override public void selectCard(final Card card, final PlayerZone zone)
|
||||||
@@ -1901,7 +1902,7 @@ public class CardFactoryUtil {
|
|||||||
* (AllZone.getHumanPlayer().getZone(Zone.Hand).size() == 0)) { this.done();
|
* (AllZone.getHumanPlayer().getZone(Zone.Hand).size() == 0)) { this.done();
|
||||||
* } else { this.showMessage(); } } }
|
* } else { this.showMessage(); } } }
|
||||||
*
|
*
|
||||||
* void done() { Singletons.getControl().getControlMatch().showMessage(
|
* void done() { CMatchUI.SINGLETON_INSTANCE.showMessage(
|
||||||
* "Returning cards to hand.");
|
* "Returning cards to hand.");
|
||||||
* Singletons.getModel().getGameAction().exile(recall); final CardList grave
|
* Singletons.getModel().getGameAction().exile(recall); final CardList grave
|
||||||
* = AllZone.getHumanPlayer().getCardsIn(Zone.Graveyard); for (int i = 1; i
|
* = AllZone.getHumanPlayer().getCardsIn(Zone.Graveyard); for (int i = 1; i
|
||||||
@@ -1934,7 +1935,7 @@ public class CardFactoryUtil {
|
|||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append("Select target wolf to damage for ").append(spell.getSourceCard());
|
sb.append("Select target wolf to damage for ").append(spell.getSourceCard());
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1976,7 +1977,7 @@ public class CardFactoryUtil {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Select target artifact creature");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Select target artifact creature");
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3549,7 +3550,7 @@ public class CardFactoryUtil {
|
|||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append("Select a ").append(type).append(" to untap");
|
sb.append("Select a ").append(type).append(" to untap");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4699,7 +4700,7 @@ public class CardFactoryUtil {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Choose target creature to haunt.");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Choose target creature to haunt.");
|
||||||
ButtonUtil.disableAll();
|
ButtonUtil.disableAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4713,7 +4714,7 @@ public class CardFactoryUtil {
|
|||||||
AllZone.getStack().add(haunterDiesWork);
|
AllZone.getStack().add(haunterDiesWork);
|
||||||
this.stop();
|
this.stop();
|
||||||
} else {
|
} else {
|
||||||
Singletons.getControl().getControlMatch()
|
CMatchUI.SINGLETON_INSTANCE
|
||||||
.showMessage("Cannot target this card (Shroud? Protection?).");
|
.showMessage("Cannot target this card (Shroud? Protection?).");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import forge.AllZone;
|
|||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
import forge.CardListUtil;
|
import forge.CardListUtil;
|
||||||
import forge.Singletons;
|
|
||||||
import forge.card.abilityfactory.AbilityFactory;
|
import forge.card.abilityfactory.AbilityFactory;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
@@ -29,6 +28,7 @@ import forge.game.player.ComputerUtil;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -325,7 +325,7 @@ public class CostDiscard extends CostPartWithList {
|
|||||||
sb.append(nNeeded - this.nDiscard);
|
sb.append(nNeeded - this.nDiscard);
|
||||||
sb.append(" remaining.");
|
sb.append(" remaining.");
|
||||||
}
|
}
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -408,7 +409,7 @@ public class CostExile extends CostPartWithList {
|
|||||||
this.typeList = sa.getActivatingPlayer().getCardsIn(part.getFrom());
|
this.typeList = sa.getActivatingPlayer().getCardsIn(part.getFrom());
|
||||||
this.typeList = this.typeList.getValidCards(type.split(";"), sa.getActivatingPlayer(),
|
this.typeList = this.typeList.getValidCards(type.split(";"), sa.getActivatingPlayer(),
|
||||||
sa.getSourceCard());
|
sa.getSourceCard());
|
||||||
Singletons.getControl().getControlMatch().showMessage(msg.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(msg.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import com.google.common.base.Strings;
|
|||||||
|
|
||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.Singletons;
|
|
||||||
import forge.card.abilityfactory.AbilityFactory;
|
import forge.card.abilityfactory.AbilityFactory;
|
||||||
import forge.card.mana.ManaCost;
|
import forge.card.mana.ManaCost;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
@@ -34,6 +33,7 @@ import forge.game.player.ComputerUtil;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -277,7 +277,7 @@ public class CostMana extends CostPart {
|
|||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().showMessage(
|
CMatchUI.SINGLETON_INSTANCE.showMessage(
|
||||||
"Pay X Mana Cost for " + sa.getSourceCard().getName() + "\n" + this.xPaid + " Paid so far.");
|
"Pay X Mana Cost for " + sa.getSourceCard().getName() + "\n" + this.xPaid + " Paid so far.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -474,7 +474,7 @@ public class CostMana extends CostPart {
|
|||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
final String displayMana = this.mana.toString().replace("X", "").trim();
|
final String displayMana = this.mana.toString().replace("X", "").trim();
|
||||||
Singletons.getControl().getControlMatch().showMessage("Pay Mana Cost: " + displayMana);
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Pay Mana Cost: " + displayMana);
|
||||||
|
|
||||||
final StringBuilder msg = new StringBuilder("Pay Mana Cost: " + displayMana);
|
final StringBuilder msg = new StringBuilder("Pay Mana Cost: " + displayMana);
|
||||||
if (this.phyLifeToLose > 0) {
|
if (this.phyLifeToLose > 0) {
|
||||||
@@ -487,7 +487,7 @@ public class CostMana extends CostPart {
|
|||||||
msg.append("\n(Click on your life total to pay life for phyrexian mana.)");
|
msg.append("\n(Click on your life total to pay life for phyrexian mana.)");
|
||||||
}
|
}
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().showMessage(msg.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(msg.toString());
|
||||||
if (this.mana.isPaid()) {
|
if (this.mana.isPaid()) {
|
||||||
this.done();
|
this.done();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ package forge.card.cost;
|
|||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
import forge.Counters;
|
import forge.Counters;
|
||||||
import forge.Singletons;
|
|
||||||
import forge.card.abilityfactory.AbilityFactory;
|
import forge.card.abilityfactory.AbilityFactory;
|
||||||
import forge.card.cardfactory.CardFactoryUtil;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
@@ -28,6 +27,7 @@ import forge.control.input.Input;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -271,7 +271,7 @@ public class CostPutCounter extends CostPartWithList {
|
|||||||
this.typeList = sa.getActivatingPlayer().getCardsIn(ZoneType.Battlefield);
|
this.typeList = sa.getActivatingPlayer().getCardsIn(ZoneType.Battlefield);
|
||||||
this.typeList = this.typeList.getValidCards(type.split(";"), sa.getActivatingPlayer(),
|
this.typeList = this.typeList.getValidCards(type.split(";"), sa.getActivatingPlayer(),
|
||||||
sa.getSourceCard());
|
sa.getSourceCard());
|
||||||
Singletons.getControl().getControlMatch().showMessage(msg.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(msg.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import forge.game.player.ComputerUtil;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -231,7 +232,7 @@ public class CostReturn extends CostPartWithList {
|
|||||||
this.typeList = sa.getActivatingPlayer().getCardsIn(ZoneType.Battlefield);
|
this.typeList = sa.getActivatingPlayer().getCardsIn(ZoneType.Battlefield);
|
||||||
this.typeList = this.typeList.getValidCards(type.split(";"), sa.getActivatingPlayer(),
|
this.typeList = this.typeList.getValidCards(type.split(";"), sa.getActivatingPlayer(),
|
||||||
sa.getSourceCard());
|
sa.getSourceCard());
|
||||||
Singletons.getControl().getControlMatch().showMessage(msg.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(msg.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ package forge.card.cost;
|
|||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
import forge.Singletons;
|
|
||||||
import forge.card.abilityfactory.AbilityFactory;
|
import forge.card.abilityfactory.AbilityFactory;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
@@ -29,6 +28,7 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -256,7 +256,7 @@ public class CostReveal extends CostPartWithList {
|
|||||||
sb.append(nNeeded - this.nReveal);
|
sb.append(nNeeded - this.nReveal);
|
||||||
sb.append(" remaining.");
|
sb.append(" remaining.");
|
||||||
}
|
}
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import forge.game.player.ComputerUtil;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -273,7 +274,7 @@ public class CostSacrifice extends CostPartWithList {
|
|||||||
msg.append("s");
|
msg.append("s");
|
||||||
}
|
}
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().showMessage(msg.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(msg.toString());
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ package forge.card.cost;
|
|||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
import forge.CardListFilter;
|
import forge.CardListFilter;
|
||||||
import forge.Singletons;
|
|
||||||
import forge.card.abilityfactory.AbilityFactory;
|
import forge.card.abilityfactory.AbilityFactory;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
@@ -28,6 +27,7 @@ import forge.game.player.ComputerUtil;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -242,7 +242,7 @@ public class CostTapType extends CostPartWithList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final int left = nCards - this.nTapped;
|
final int left = nCards - this.nTapped;
|
||||||
Singletons.getControl().getControlMatch()
|
CMatchUI.SINGLETON_INSTANCE
|
||||||
.showMessage("Select a " + tapType.getDescription() + " to tap (" + left + " left)");
|
.showMessage("Select a " + tapType.getDescription() + " to tap (" + left + " left)");
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,13 +25,13 @@ import forge.AllZone;
|
|||||||
import forge.AllZoneUtil;
|
import forge.AllZoneUtil;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
import forge.Singletons;
|
|
||||||
import forge.card.abilityfactory.AbilityFactory;
|
import forge.card.abilityfactory.AbilityFactory;
|
||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -344,7 +344,7 @@ public class TargetSelection {
|
|||||||
sb.append("\n");
|
sb.append("\n");
|
||||||
sb.append(tgt.getVTSelection());
|
sb.append(tgt.getVTSelection());
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
|
|
||||||
// If reached Minimum targets, enable OK button
|
// If reached Minimum targets, enable OK button
|
||||||
if (!tgt.isMinTargetsChosen(sa.getSourceCard(), sa)) {
|
if (!tgt.isMinTargetsChosen(sa.getSourceCard(), sa)) {
|
||||||
@@ -376,7 +376,7 @@ public class TargetSelection {
|
|||||||
// leave this in temporarily, there some seriously wrong things
|
// leave this in temporarily, there some seriously wrong things
|
||||||
// going on here
|
// going on here
|
||||||
if (targeted && !card.canBeTargetedBy(sa)) {
|
if (targeted && !card.canBeTargetedBy(sa)) {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Cannot target this card (Shroud? Protection? Restrictions?).");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Cannot target this card (Shroud? Protection? Restrictions?).");
|
||||||
} else if (choices.contains(card)) {
|
} else if (choices.contains(card)) {
|
||||||
tgt.addTarget(card);
|
tgt.addTarget(card);
|
||||||
this.done();
|
this.done();
|
||||||
|
|||||||
@@ -31,10 +31,13 @@ import javax.swing.WindowConstants;
|
|||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.control.KeyboardShortcuts.Shortcut;
|
import forge.control.KeyboardShortcuts.Shortcut;
|
||||||
|
import forge.gui.home.VHomeUI;
|
||||||
import forge.gui.home.quest.SubmenuQuestUtil;
|
import forge.gui.home.quest.SubmenuQuestUtil;
|
||||||
|
import forge.gui.match.VMatchUI;
|
||||||
|
import forge.gui.match.controllers.CDock;
|
||||||
import forge.gui.toolbox.CardFaceSymbols;
|
import forge.gui.toolbox.CardFaceSymbols;
|
||||||
import forge.gui.toolbox.FSkin;
|
import forge.gui.toolbox.FSkin;
|
||||||
import forge.view.ViewHomeUI;
|
import forge.view.FView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -77,7 +80,7 @@ public enum FControl {
|
|||||||
@Override
|
@Override
|
||||||
public void windowClosing(final WindowEvent e) {
|
public void windowClosing(final WindowEvent e) {
|
||||||
Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
|
Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
|
||||||
Singletons.getControl().getControlMatch().getDockControl().concede();
|
CDock.SINGLETON_INSTANCE.concede();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -94,7 +97,7 @@ public enum FControl {
|
|||||||
// Default action on window close
|
// Default action on window close
|
||||||
this.waDefault = new WindowAdapter() {
|
this.waDefault = new WindowAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void windowClosing(WindowEvent e) {
|
public void windowClosing(final WindowEvent e) {
|
||||||
Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
Singletons.getView().getFrame().setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -112,7 +115,7 @@ public enum FControl {
|
|||||||
CardFaceSymbols.loadImages();
|
CardFaceSymbols.loadImages();
|
||||||
|
|
||||||
this.shortcuts = KeyboardShortcuts.attachKeyboardShortcuts();
|
this.shortcuts = KeyboardShortcuts.attachKeyboardShortcuts();
|
||||||
this.display = Singletons.getView().getLayeredContentPane();
|
this.display = FView.SINGLETON_INSTANCE.getLpnDocument();
|
||||||
|
|
||||||
//Singletons.getView().initialize();
|
//Singletons.getView().initialize();
|
||||||
|
|
||||||
@@ -146,13 +149,14 @@ public enum FControl {
|
|||||||
// Fire up new state
|
// Fire up new state
|
||||||
switch (i0) {
|
switch (i0) {
|
||||||
case HOME_SCREEN:
|
case HOME_SCREEN:
|
||||||
display.add(ViewHomeUI.SINGLETON_INSTANCE.getPanel(), JLayeredPane.DEFAULT_LAYER);
|
VHomeUI.SINGLETON_INSTANCE.populate();
|
||||||
sizeChildren();
|
FView.SINGLETON_INSTANCE.getPnlInsets().setVisible(false);
|
||||||
|
//sizeChildren();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MATCH_SCREEN:
|
case MATCH_SCREEN:
|
||||||
display.add(Singletons.getView().getViewMatch(), JLayeredPane.DEFAULT_LAYER);
|
VMatchUI.SINGLETON_INSTANCE.populate();
|
||||||
sizeChildren();
|
FView.SINGLETON_INSTANCE.getPnlInsets().setVisible(true);
|
||||||
Singletons.getView().getFrame().addWindowListener(waConcede);
|
Singletons.getView().getFrame().addWindowListener(waConcede);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -170,17 +174,6 @@ public enum FControl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets the match controller.
|
|
||||||
* @return {@link forge.control.match.ControlMatchUI}
|
|
||||||
*/
|
|
||||||
public ControlMatchUI getControlMatch() {
|
|
||||||
if (getState() != FControl.MATCH_SCREEN) {
|
|
||||||
throw new IllegalArgumentException("FControl$getControlMatch\n"
|
|
||||||
+ "may only be called while the match UI is showing.");
|
|
||||||
}
|
|
||||||
return Singletons.getView().getViewMatch().getControl();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the int reflecting the current state of the top level frame
|
* Returns the int reflecting the current state of the top level frame
|
||||||
* (see field definitions and class methods for details).
|
* (see field definitions and class methods for details).
|
||||||
@@ -198,10 +191,10 @@ public enum FControl {
|
|||||||
|
|
||||||
/** Remove all children from a specified layer. */
|
/** Remove all children from a specified layer. */
|
||||||
private void clearChildren(final int layer0) {
|
private void clearChildren(final int layer0) {
|
||||||
final Component[] children = Singletons.getView()
|
final Component[] children = FView.SINGLETON_INSTANCE.getLpnDocument()
|
||||||
.getLayeredContentPane().getComponentsInLayer(layer0);
|
.getComponentsInLayer(layer0);
|
||||||
|
|
||||||
for (Component c : children) {
|
for (final Component c : children) {
|
||||||
display.remove(c);
|
display.remove(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,10 @@ import javax.swing.KeyStroke;
|
|||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
|
import forge.gui.framework.EDocID;
|
||||||
|
import forge.gui.framework.SDisplayUtil;
|
||||||
import forge.gui.home.settings.VSubmenuPreferences.KeyboardShortcutField;
|
import forge.gui.home.settings.VSubmenuPreferences.KeyboardShortcutField;
|
||||||
|
import forge.gui.match.controllers.CDock;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,7 +52,7 @@ public class KeyboardShortcuts {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(final ActionEvent e) {
|
public void actionPerformed(final ActionEvent e) {
|
||||||
if (Singletons.getControl().getState() != 1) { return; }
|
if (Singletons.getControl().getState() != 1) { return; }
|
||||||
Singletons.getControl().getControlMatch().getTabberControl().showPnlStack();
|
SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -58,7 +61,7 @@ public class KeyboardShortcuts {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(final ActionEvent e) {
|
public void actionPerformed(final ActionEvent e) {
|
||||||
if (Singletons.getControl().getState() != 1) { return; }
|
if (Singletons.getControl().getState() != 1) { return; }
|
||||||
Singletons.getControl().getControlMatch().getTabberControl().showPnlCombat();
|
SDisplayUtil.showTab(EDocID.REPORT_COMBAT.getDoc());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -67,7 +70,7 @@ public class KeyboardShortcuts {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(final ActionEvent e) {
|
public void actionPerformed(final ActionEvent e) {
|
||||||
if (Singletons.getControl().getState() != 1) { return; }
|
if (Singletons.getControl().getState() != 1) { return; }
|
||||||
Singletons.getControl().getControlMatch().getTabberControl().showPnlGameLog();
|
SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -76,7 +79,7 @@ public class KeyboardShortcuts {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(final ActionEvent e) {
|
public void actionPerformed(final ActionEvent e) {
|
||||||
if (Singletons.getControl().getState() != 1) { return; }
|
if (Singletons.getControl().getState() != 1) { return; }
|
||||||
Singletons.getControl().getControlMatch().getTabberControl().showPnlPlayers();
|
SDisplayUtil.showTab(EDocID.REPORT_PLAYERS.getDoc());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -85,7 +88,7 @@ public class KeyboardShortcuts {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(final ActionEvent e) {
|
public void actionPerformed(final ActionEvent e) {
|
||||||
if (Singletons.getControl().getState() != 1) { return; }
|
if (Singletons.getControl().getState() != 1) { return; }
|
||||||
Singletons.getControl().getControlMatch().getTabberControl().showPnlDev();
|
SDisplayUtil.showTab(EDocID.DEV_MODE.getDoc());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -94,7 +97,7 @@ public class KeyboardShortcuts {
|
|||||||
@Override
|
@Override
|
||||||
public void actionPerformed(final ActionEvent e) {
|
public void actionPerformed(final ActionEvent e) {
|
||||||
if (Singletons.getControl().getState() != 1) { return; }
|
if (Singletons.getControl().getState() != 1) { return; }
|
||||||
Singletons.getControl().getControlMatch().getDockControl().concede();
|
CDock.SINGLETON_INSTANCE.concede();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import forge.Card;
|
|||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -44,7 +45,7 @@ public abstract class Input implements java.io.Serializable {
|
|||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Blank Input");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Blank Input");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -20,11 +20,14 @@ package forge.control.input;
|
|||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
|
import forge.Singletons;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.framework.SDisplayUtil;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
|
import forge.gui.match.views.VMessage;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
import forge.Singletons;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -54,7 +57,7 @@ public class InputAttack extends Input {
|
|||||||
sb.append("Declare Attackers: Select Creatures to Attack ");
|
sb.append("Declare Attackers: Select Creatures to Attack ");
|
||||||
sb.append(o.toString());
|
sb.append(o.toString());
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
|
|
||||||
if (AllZone.getCombat().getRemainingDefenders() == 0) {
|
if (AllZone.getCombat().getRemainingDefenders() == 0) {
|
||||||
// Nothing left to attack, has to attack this defender
|
// Nothing left to attack, has to attack this defender
|
||||||
@@ -107,7 +110,7 @@ public class InputAttack extends Input {
|
|||||||
CombatUtil.showCombat();
|
CombatUtil.showCombat();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Singletons.getControl().getControlMatch().getMessageControl().remind();
|
SDisplayUtil.remind(VMessage.SINGLETON_INSTANCE);
|
||||||
}
|
}
|
||||||
} // selectCard()
|
} // selectCard()
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ import forge.Singletons;
|
|||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.framework.SDisplayUtil;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
|
import forge.gui.match.views.VMessage;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -65,14 +68,14 @@ public class InputBlock extends Input {
|
|||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append("To Block, click on your Opponents attacker first, then your blocker(s). ");
|
sb.append("To Block, click on your Opponents attacker first, then your blocker(s). ");
|
||||||
sb.append("To cancel a block right-click on your blocker");
|
sb.append("To cancel a block right-click on your blocker");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
} else {
|
} else {
|
||||||
final String attackerName = this.currentAttacker.isFaceDown() ? "Morph" : this.currentAttacker.getName();
|
final String attackerName = this.currentAttacker.isFaceDown() ? "Morph" : this.currentAttacker.getName();
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
sb.append("Select a creature to block ").append(attackerName).append(" (");
|
sb.append("Select a creature to block ").append(attackerName).append(" (");
|
||||||
sb.append(this.currentAttacker.getUniqueNumber()).append("). ");
|
sb.append(this.currentAttacker.getUniqueNumber()).append("). ");
|
||||||
sb.append("To cancel a block right-click on your blocker");
|
sb.append("To cancel a block right-click on your blocker");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
CombatUtil.showCombat();
|
CombatUtil.showCombat();
|
||||||
@@ -102,7 +105,7 @@ public class InputBlock extends Input {
|
|||||||
this.allBlocking.add(card);
|
this.allBlocking.add(card);
|
||||||
AllZone.getCombat().addBlocker(this.currentAttacker, card);
|
AllZone.getCombat().addBlocker(this.currentAttacker, card);
|
||||||
} else {
|
} else {
|
||||||
Singletons.getControl().getControlMatch().getMessageControl().remind();
|
SDisplayUtil.remind(VMessage.SINGLETON_INSTANCE);
|
||||||
}
|
}
|
||||||
this.showMessage();
|
this.showMessage();
|
||||||
} // selectCard()
|
} // selectCard()
|
||||||
|
|||||||
@@ -19,11 +19,12 @@ package forge.control.input;
|
|||||||
|
|
||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
|
import forge.Singletons;
|
||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
import forge.Singletons;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -63,7 +64,7 @@ public class InputCleanup extends Input {
|
|||||||
final StringBuffer sb = new StringBuffer();
|
final StringBuffer sb = new StringBuffer();
|
||||||
sb.append("Cleanup Phase: You can only have a maximum of ").append(max);
|
sb.append("Cleanup Phase: You can only have a maximum of ").append(max);
|
||||||
sb.append(" cards, you currently have ").append(n).append(" cards in your hand - select a card to discard");
|
sb.append(" cards, you currently have ").append(n).append(" cards in your hand - select a card to discard");
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
|
|||||||
@@ -21,11 +21,11 @@ import java.util.LinkedList;
|
|||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
import forge.MyObservable;
|
import forge.MyObservable;
|
||||||
import forge.Singletons;
|
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.ComputerAIInput;
|
import forge.game.player.ComputerAIInput;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -247,7 +247,7 @@ public class InputControl extends MyObservable implements java.io.Serializable {
|
|||||||
final boolean skip = this.model.getGameState().getPhaseHandler().doSkipPhase();
|
final boolean skip = this.model.getGameState().getPhaseHandler().doSkipPhase();
|
||||||
this.model.getGameState().getPhaseHandler().setSkipPhase(false);
|
this.model.getGameState().getPhaseHandler().setSkipPhase(false);
|
||||||
if ((this.model.getGameState().getStack().size() == 0)
|
if ((this.model.getGameState().getStack().size() == 0)
|
||||||
&& !Singletons.getControl().getControlMatch().stopAtPhase(playerTurn, phase) && skip) {
|
&& !CMatchUI.SINGLETON_INSTANCE.stopAtPhase(playerTurn, phase) && skip) {
|
||||||
this.model.getGameState().getPhaseHandler().passPriority();
|
this.model.getGameState().getPhaseHandler().passPriority();
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -35,6 +35,10 @@ import forge.game.player.ComputerUtil;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.framework.SDisplayUtil;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
|
import forge.gui.match.VMatchUI;
|
||||||
|
import forge.gui.match.views.VMessage;
|
||||||
import forge.quest.QuestController;
|
import forge.quest.QuestController;
|
||||||
import forge.quest.bazaar.QuestItemType;
|
import forge.quest.bazaar.QuestItemType;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
@@ -57,9 +61,9 @@ public class InputMulligan extends Input {
|
|||||||
@Override
|
@Override
|
||||||
public final void showMessage() {
|
public final void showMessage() {
|
||||||
ButtonUtil.enableAll();
|
ButtonUtil.enableAll();
|
||||||
Singletons.getView().getViewMatch().getBtnOK().setText("No");
|
VMatchUI.SINGLETON_INSTANCE.getBtnOK().setText("No");
|
||||||
Singletons.getView().getViewMatch().getBtnCancel().setText("Yes");
|
VMatchUI.SINGLETON_INSTANCE.getBtnCancel().setText("Yes");
|
||||||
Singletons.getControl().getControlMatch().showMessage("Do you want to Mulligan?");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Do you want to Mulligan?");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@@ -224,7 +228,7 @@ public class InputMulligan extends Input {
|
|||||||
c0.getController().drawCards(hand.size());
|
c0.getController().drawCards(hand.size());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Singletons.getControl().getControlMatch().getMessageControl().remind();
|
SDisplayUtil.remind(VMessage.SINGLETON_INSTANCE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,9 @@ import forge.game.phase.PhaseType;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.gui.GuiDisplayUtil;
|
import forge.gui.GuiDisplayUtil;
|
||||||
|
import forge.gui.framework.SDisplayUtil;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
|
import forge.gui.match.views.VMessage;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -64,7 +67,7 @@ public class InputPassPriority extends Input implements java.io.Serializable {
|
|||||||
sb.append("\n");
|
sb.append("\n");
|
||||||
sb.append("Priority: ").append(player);
|
sb.append("Priority: ").append(player);
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().showMessage(sb.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@@ -86,7 +89,7 @@ public class InputPassPriority extends Input implements java.io.Serializable {
|
|||||||
Singletons.getModel().getGameState().getPhaseHandler().setPriority(AllZone.getHumanPlayer());
|
Singletons.getModel().getGameState().getPhaseHandler().setPriority(AllZone.getHumanPlayer());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Singletons.getControl().getControlMatch().getMessageControl().remind();
|
SDisplayUtil.remind(VMessage.SINGLETON_INSTANCE);
|
||||||
}
|
}
|
||||||
} // selectCard()
|
} // selectCard()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import forge.game.phase.PhaseHandler;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
//pays the cost of a card played from the player's hand
|
//pays the cost of a card played from the player's hand
|
||||||
@@ -289,7 +290,7 @@ public class InputPayManaCost extends InputMana {
|
|||||||
msg.append("\n(Click on your life total to pay life for phyrexian mana.)");
|
msg.append("\n(Click on your life total to pay life for phyrexian mana.)");
|
||||||
}
|
}
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().showMessage(msg.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(msg.toString());
|
||||||
if (this.manaCost.isPaid() && !new ManaCost(this.originalManaCost).isPaid()) {
|
if (this.manaCost.isPaid() && !new ManaCost(this.originalManaCost).isPaid()) {
|
||||||
this.originalCard.setSunburstValue(this.manaCost.getSunburst());
|
this.originalCard.setSunburstValue(this.manaCost.getSunburst());
|
||||||
this.done();
|
this.done();
|
||||||
|
|||||||
@@ -20,11 +20,13 @@ package forge.control.input;
|
|||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
import forge.Singletons;
|
|
||||||
import forge.card.mana.ManaCost;
|
import forge.card.mana.ManaCost;
|
||||||
import forge.card.spellability.SpellAbility;
|
import forge.card.spellability.SpellAbility;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.framework.SDisplayUtil;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
|
import forge.gui.match.views.VMessage;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
//if cost is paid, Command.execute() is called
|
//if cost is paid, Command.execute() is called
|
||||||
@@ -156,7 +158,7 @@ public class InputPayManaCostAbility extends InputMana {
|
|||||||
this.manaCost = InputPayManaCostUtil.activateManaAbility(this.fakeAbility, card, this.manaCost);
|
this.manaCost = InputPayManaCostUtil.activateManaAbility(this.fakeAbility, card, this.manaCost);
|
||||||
|
|
||||||
if (card.getManaAbility().isEmpty() || card.isInZone(ZoneType.Hand)) {
|
if (card.getManaAbility().isEmpty() || card.isInZone(ZoneType.Hand)) {
|
||||||
Singletons.getControl().getControlMatch().getMessageControl().remind();
|
SDisplayUtil.remind(VMessage.SINGLETON_INSTANCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.manaCost.isPaid()) {
|
if (this.manaCost.isPaid()) {
|
||||||
@@ -194,7 +196,7 @@ public class InputPayManaCostAbility extends InputMana {
|
|||||||
if (this.showOnlyOKButton) {
|
if (this.showOnlyOKButton) {
|
||||||
ButtonUtil.enableOnlyOK();
|
ButtonUtil.enableOnlyOK();
|
||||||
}
|
}
|
||||||
Singletons.getControl().getControlMatch().showMessage(this.message + "Pay Mana Cost: \r\n" + this.manaCost.toString());
|
CMatchUI.SINGLETON_INSTANCE.showMessage(this.message + "Pay Mana Cost: \r\n" + this.manaCost.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
|||||||
@@ -1,604 +0,0 @@
|
|||||||
/*
|
|
||||||
* Forge: Play Magic: the Gathering.
|
|
||||||
* Copyright (C) 2011 Forge Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package forge.control.match;
|
|
||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.MouseAdapter;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import java.awt.event.MouseListener;
|
|
||||||
import java.awt.event.MouseMotionAdapter;
|
|
||||||
import java.awt.event.MouseMotionListener;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Observable;
|
|
||||||
import java.util.Observer;
|
|
||||||
|
|
||||||
import com.google.code.jyield.Generator;
|
|
||||||
import com.google.code.jyield.YieldUtils;
|
|
||||||
|
|
||||||
import forge.AllZone;
|
|
||||||
import forge.Card;
|
|
||||||
import forge.CardList;
|
|
||||||
import forge.Constant;
|
|
||||||
import forge.Singletons;
|
|
||||||
import forge.card.cardfactory.CardFactoryUtil;
|
|
||||||
import forge.control.input.Input;
|
|
||||||
import forge.control.input.InputAttack;
|
|
||||||
import forge.control.input.InputBlock;
|
|
||||||
import forge.control.input.InputMana;
|
|
||||||
import forge.control.input.InputPayManaCost;
|
|
||||||
import forge.control.input.InputPayManaCostAbility;
|
|
||||||
import forge.game.player.Player;
|
|
||||||
import forge.game.zone.PlayerZone;
|
|
||||||
import forge.game.zone.ZoneType;
|
|
||||||
import forge.gui.ForgeAction;
|
|
||||||
import forge.gui.GuiDisplayUtil;
|
|
||||||
import forge.gui.GuiUtils;
|
|
||||||
import forge.gui.toolbox.FLabel;
|
|
||||||
import forge.properties.ForgeProps;
|
|
||||||
import forge.properties.NewConstants;
|
|
||||||
import forge.properties.NewConstants.Lang.GuiDisplay.ComputerHand;
|
|
||||||
import forge.properties.NewConstants.Lang.GuiDisplay.ComputerLibrary;
|
|
||||||
import forge.properties.NewConstants.Lang.GuiDisplay.HumanHand;
|
|
||||||
import forge.properties.NewConstants.Lang.GuiDisplay.HumanLibrary;
|
|
||||||
import forge.view.match.ViewField;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Child controller, applied to single field in battlefield. Manages player view
|
|
||||||
* functions such as card observers, life total changes, graveyard button click,
|
|
||||||
* etc.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class ControlField {
|
|
||||||
private final Player player;
|
|
||||||
private final ViewField view;
|
|
||||||
|
|
||||||
private MouseMotionListener mmlCardOver;
|
|
||||||
private MouseListener madAvatar, madLibrary, madHand, madExiled,
|
|
||||||
madGraveyard, madFlashback, madCardClick, madBlack,
|
|
||||||
madBlue, madGreen, madRed, madWhite, madColorless;
|
|
||||||
|
|
||||||
private Observer observerZones, observerDetails, observerPlay;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Child controller, applied to single field in battlefield. Manages player
|
|
||||||
* view functions such as card observers, life total changes, graveyard
|
|
||||||
* button click, etc.
|
|
||||||
*
|
|
||||||
* @param p
|
|
||||||
*   The Player this field applies to
|
|
||||||
* @param v
|
|
||||||
*   The Swing component for this field
|
|
||||||
*/
|
|
||||||
public ControlField(final Player p, final ViewField v) {
|
|
||||||
this.player = p;
|
|
||||||
this.view = v;
|
|
||||||
|
|
||||||
initMouseAdapters();
|
|
||||||
initObservers();
|
|
||||||
|
|
||||||
addObservers();
|
|
||||||
addListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the player.
|
|
||||||
*
|
|
||||||
* @return Player
|
|
||||||
*/
|
|
||||||
public Player getPlayer() {
|
|
||||||
return this.player;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the view.
|
|
||||||
*
|
|
||||||
* @return ViewField
|
|
||||||
*/
|
|
||||||
public ViewField getView() {
|
|
||||||
return this.view;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds observers to field components where required: card stats, player
|
|
||||||
* stats, etc.
|
|
||||||
*/
|
|
||||||
public void addObservers() {
|
|
||||||
this.player.getZone(ZoneType.Hand).addObserver(observerZones);
|
|
||||||
this.player.addObserver(observerDetails);
|
|
||||||
this.player.getZone(ZoneType.Battlefield).addObserver(observerPlay);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Listeners for user actions on the battlefield.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public void addListeners() {
|
|
||||||
// Battlefield card clicks
|
|
||||||
this.view.getTabletop().removeMouseListener(madCardClick);
|
|
||||||
this.view.getTabletop().addMouseListener(madCardClick);
|
|
||||||
|
|
||||||
// Battlefield card mouseover
|
|
||||||
this.view.getTabletop().removeMouseMotionListener(mmlCardOver);
|
|
||||||
this.view.getTabletop().addMouseMotionListener(mmlCardOver);
|
|
||||||
|
|
||||||
// Player select
|
|
||||||
this.view.getAvatarArea().removeMouseListener(madAvatar);
|
|
||||||
this.view.getAvatarArea().addMouseListener(madAvatar);
|
|
||||||
|
|
||||||
// Graveyard card list button
|
|
||||||
((FLabel) this.view.getLblGraveyard()).setHoverable(true);
|
|
||||||
this.view.getLblGraveyard().removeMouseListener(madGraveyard);
|
|
||||||
this.view.getLblGraveyard().addMouseListener(madGraveyard);
|
|
||||||
// Exile card list button
|
|
||||||
((FLabel) this.view.getLblExile()).setHoverable(true);
|
|
||||||
this.view.getLblExile().removeMouseListener(madExiled);
|
|
||||||
this.view.getLblExile().addMouseListener(madExiled);
|
|
||||||
|
|
||||||
// Library card list button
|
|
||||||
this.view.getLblLibrary().removeMouseListener(madLibrary);
|
|
||||||
this.view.getLblLibrary().addMouseListener(madLibrary);
|
|
||||||
|
|
||||||
this.view.getLblHand().removeMouseListener(madHand);
|
|
||||||
this.view.getLblHand().addMouseListener(madHand);
|
|
||||||
|
|
||||||
// Flashback card list button
|
|
||||||
((FLabel) this.view.getLblFlashback()).setHoverable(true);
|
|
||||||
this.view.getLblFlashback().removeMouseListener(madFlashback);
|
|
||||||
this.view.getLblFlashback().addMouseListener(madFlashback);
|
|
||||||
|
|
||||||
((FLabel) this.view.getLblBlack()).setHoverable(true);
|
|
||||||
this.view.getLblBlack().removeMouseListener(madBlack);
|
|
||||||
this.view.getLblBlack().addMouseListener(madBlack);
|
|
||||||
|
|
||||||
((FLabel) this.view.getLblBlue()).setHoverable(true);
|
|
||||||
this.view.getLblBlue().removeMouseListener(madBlue);
|
|
||||||
this.view.getLblBlue().addMouseListener(madBlue);
|
|
||||||
|
|
||||||
((FLabel) this.view.getLblGreen()).setHoverable(true);
|
|
||||||
this.view.getLblGreen().removeMouseListener(madGreen);
|
|
||||||
this.view.getLblGreen().addMouseListener(madGreen);
|
|
||||||
|
|
||||||
((FLabel) this.view.getLblRed()).setHoverable(true);
|
|
||||||
this.view.getLblRed().removeMouseListener(madRed);
|
|
||||||
this.view.getLblRed().addMouseListener(madRed);
|
|
||||||
|
|
||||||
((FLabel) this.view.getLblWhite()).setHoverable(true);
|
|
||||||
this.view.getLblWhite().removeMouseListener(madWhite);
|
|
||||||
this.view.getLblWhite().addMouseListener(madWhite);
|
|
||||||
|
|
||||||
((FLabel) this.view.getLblColorless()).setHoverable(true);
|
|
||||||
this.view.getLblColorless().removeMouseListener(madColorless);
|
|
||||||
this.view.getLblColorless().addMouseListener(madColorless);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resets all phase buttons to "inactive", so highlight won't be drawn on
|
|
||||||
* them. "Enabled" state remains the same.
|
|
||||||
*/
|
|
||||||
public void resetPhaseButtons() {
|
|
||||||
this.view.getLblUpkeep().setActive(false);
|
|
||||||
this.view.getLblDraw().setActive(false);
|
|
||||||
this.view.getLblMain1().setActive(false);
|
|
||||||
this.view.getLblBeginCombat().setActive(false);
|
|
||||||
this.view.getLblDeclareAttackers().setActive(false);
|
|
||||||
this.view.getLblDeclareBlockers().setActive(false);
|
|
||||||
this.view.getLblFirstStrike().setActive(false);
|
|
||||||
this.view.getLblCombatDamage().setActive(false);
|
|
||||||
this.view.getLblEndCombat().setActive(false);
|
|
||||||
this.view.getLblMain2().setActive(false);
|
|
||||||
this.view.getLblEndTurn().setActive(false);
|
|
||||||
this.view.getLblCleanup().setActive(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Receives click and programmatic requests for viewing data stacks in the
|
|
||||||
* "zones" of a player field: hand, library, etc.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private class ZoneAction extends ForgeAction {
|
|
||||||
private static final long serialVersionUID = -5822976087772388839L;
|
|
||||||
private final PlayerZone zone;
|
|
||||||
private final String title;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Receives click and programmatic requests for viewing data stacks in
|
|
||||||
* the "zones" of a player field: hand, graveyard, etc. The library
|
|
||||||
* "zone" is an exception to the rule; it's handled in DeckListAction.
|
|
||||||
*
|
|
||||||
* @param zone
|
|
||||||
*   PlayerZone obj
|
|
||||||
* @param property
|
|
||||||
*   String obj
|
|
||||||
*/
|
|
||||||
public ZoneAction(final PlayerZone zone, final String property) {
|
|
||||||
super(property);
|
|
||||||
this.title = ForgeProps.getLocalized(property + "/title");
|
|
||||||
this.zone = zone;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param e
|
|
||||||
*   ActionEvent obj
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(final ActionEvent e) {
|
|
||||||
Generator<Card> c = YieldUtils.toGenerator(this.getCardsAsIterable());
|
|
||||||
|
|
||||||
if (AllZone.getNameChanger().shouldChangeCardName()) {
|
|
||||||
c = AllZone.getNameChanger().changeCard(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
final Iterable<Card> myIterable = YieldUtils.toIterable(c);
|
|
||||||
final ArrayList<Card> choices = YieldUtils.toArrayList(myIterable);
|
|
||||||
|
|
||||||
final ArrayList<Card> choices2 = new ArrayList<Card>();
|
|
||||||
|
|
||||||
if (choices.isEmpty()) {
|
|
||||||
GuiUtils.chooseOneOrNone(this.title, new String[] { "no cards" });
|
|
||||||
} else {
|
|
||||||
for (int i = 0; i < choices.size(); i++) {
|
|
||||||
final Card crd = choices.get(i);
|
|
||||||
if (crd.isFaceDown()) {
|
|
||||||
if (crd.getController().isComputer() || !crd.hasKeyword("You may look at this card.")) {
|
|
||||||
final Card faceDown = new Card();
|
|
||||||
faceDown.setName("Face Down");
|
|
||||||
choices2.add(faceDown);
|
|
||||||
} else {
|
|
||||||
final Card faceDown = AllZone.getCardFactory().copyCard(crd);
|
|
||||||
faceDown.turnFaceUp();
|
|
||||||
choices2.add(faceDown);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
choices2.add(crd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
final Card choice = (Card) GuiUtils.chooseOneOrNone(this.title, choices2.toArray());
|
|
||||||
if (choice != null) {
|
|
||||||
this.doAction(choice);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Iterable<Card> getCardsAsIterable() {
|
|
||||||
return this.zone.getCards();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void doAction(final Card c) {
|
|
||||||
}
|
|
||||||
} // End ZoneAction
|
|
||||||
|
|
||||||
private void initObservers() {
|
|
||||||
// Hand, Graveyard, Library, Flashback, Exile zones, attached to hand.
|
|
||||||
observerZones = new Observer() {
|
|
||||||
@Override
|
|
||||||
public void update(final Observable a, final Object b) {
|
|
||||||
ControlField.this.view.updateZones(ControlField.this.player);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Life total, poison total, and keywords, attached directly to Player.
|
|
||||||
observerDetails = new Observer() {
|
|
||||||
@Override
|
|
||||||
public void update(final Observable a, final Object b) {
|
|
||||||
ControlField.this.view.updateDetails(ControlField.this.player);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Card play area, attached to battlefield zone.
|
|
||||||
observerPlay = new Observer() {
|
|
||||||
@Override
|
|
||||||
public void update(final Observable a, final Object b) {
|
|
||||||
final PlayerZone pZone = (PlayerZone) a;
|
|
||||||
GuiDisplayUtil.setupPlayZone(ControlField.this.view.getTabletop(), pZone.getCards(false));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Simple method that inits the mouse adapters for listeners,
|
|
||||||
* here to simplify life in the constructor.
|
|
||||||
*/
|
|
||||||
private void initMouseAdapters() {
|
|
||||||
// Hand listener
|
|
||||||
madHand = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (!ControlField.this.player.isComputer()) {
|
|
||||||
new ZoneAction(ControlField.this.player.getZone(ZoneType.Hand), HumanHand.BASE)
|
|
||||||
.actionPerformed(null);
|
|
||||||
} else if (Constant.Runtime.DEV_MODE[0]
|
|
||||||
|| ControlField.this.player.hasKeyword("Play with your hand revealed.")) {
|
|
||||||
new ZoneAction(ControlField.this.player.getZone(ZoneType.Hand), ComputerHand.BASE)
|
|
||||||
.actionPerformed(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Flashback listener
|
|
||||||
madFlashback = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (!ControlField.this.player.isComputer()) {
|
|
||||||
new ZoneAction(AllZone.getHumanPlayer().getZone(ZoneType.Graveyard),
|
|
||||||
NewConstants.Lang.GuiDisplay.HUMAN_FLASHBACK) {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 8120331222693706164L;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Iterable<Card> getCardsAsIterable() {
|
|
||||||
return CardFactoryUtil.getExternalZoneActivationCards(AllZone.getHumanPlayer());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void doAction(final Card c) {
|
|
||||||
Singletons.getModel().getGameAction().playCard(c);
|
|
||||||
}
|
|
||||||
} .actionPerformed(null);
|
|
||||||
} else {
|
|
||||||
new ZoneAction(ControlField.this.player.getZone(ZoneType.Graveyard),
|
|
||||||
NewConstants.Lang.GuiDisplay.COMPUTER_FLASHBACK) {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 8120331222693706164L;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Iterable<Card> getCardsAsIterable() {
|
|
||||||
return CardFactoryUtil.getExternalZoneActivationCards(AllZone.getComputerPlayer());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void doAction(final Card c) {
|
|
||||||
Singletons.getModel().getGameAction().playCard(c);
|
|
||||||
}
|
|
||||||
} .actionPerformed(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Library listener
|
|
||||||
madLibrary = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (!Constant.Runtime.DEV_MODE[0]) { return; }
|
|
||||||
|
|
||||||
if (!ControlField.this.player.isComputer()) {
|
|
||||||
new ZoneAction(ControlField.this.player.getZone(ZoneType.Library), HumanLibrary.BASE)
|
|
||||||
.actionPerformed(null);
|
|
||||||
} else {
|
|
||||||
new ZoneAction(ControlField.this.player.getZone(ZoneType.Library), ComputerLibrary.BASE)
|
|
||||||
.actionPerformed(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Exiled adapter
|
|
||||||
madExiled = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (ControlField.this.player.isComputer()) {
|
|
||||||
new ZoneAction(ControlField.this.player.getZone(ZoneType.Exile),
|
|
||||||
NewConstants.Lang.GuiDisplay.COMPUTER_EXILED).actionPerformed(null);
|
|
||||||
} else {
|
|
||||||
new ZoneAction(ControlField.this.player.getZone(ZoneType.Exile),
|
|
||||||
NewConstants.Lang.GuiDisplay.HUMAN_EXILED).actionPerformed(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Graveyard adapter
|
|
||||||
madGraveyard = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (ControlField.this.player.isComputer()) {
|
|
||||||
new ZoneAction(ControlField.this.player.getZone(ZoneType.Graveyard),
|
|
||||||
NewConstants.Lang.GuiDisplay.COMPUTER_GRAVEYARD).actionPerformed(null);
|
|
||||||
} else {
|
|
||||||
new ZoneAction(ControlField.this.player.getZone(ZoneType.Graveyard),
|
|
||||||
NewConstants.Lang.GuiDisplay.HUMAN_GRAVEYARD).actionPerformed(null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Avatar
|
|
||||||
madAvatar = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (ControlField.this.player.isComputer()) {
|
|
||||||
Singletons.getControl().getControlMatch().getMessageControl()
|
|
||||||
.getInputControl().selectPlayer(AllZone.getComputerPlayer());
|
|
||||||
} else {
|
|
||||||
Singletons.getControl().getControlMatch().getMessageControl()
|
|
||||||
.getInputControl().selectPlayer(AllZone.getHumanPlayer());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Battlefield card mouse over
|
|
||||||
mmlCardOver = new MouseMotionAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mouseMoved(final MouseEvent me) {
|
|
||||||
final Card c = ControlField.this.view.getTabletop().getCardFromMouseOverPanel();
|
|
||||||
if (c != null) {
|
|
||||||
Singletons.getControl().getControlMatch().setCard(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Battlefield card
|
|
||||||
madCardClick = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
|
|
||||||
// original version:
|
|
||||||
// final Card c = t.getDetailController().getCurrentCard();
|
|
||||||
// Roujin's bug fix version dated 2-12-2012
|
|
||||||
final Card c = ControlField.this.view.getTabletop().getCardFromMouseOverPanel();
|
|
||||||
|
|
||||||
final Input input = Singletons.getControl().getControlMatch().getMessageControl().getInputControl().getInput();
|
|
||||||
|
|
||||||
if (c != null && c.isInZone(ZoneType.Battlefield)) {
|
|
||||||
if (c.isTapped()
|
|
||||||
&& ((input instanceof InputPayManaCost) || (input instanceof InputPayManaCostAbility))) {
|
|
||||||
final forge.view.arcane.CardPanel cardPanel = ControlField.this.view.getTabletop().getCardPanel(
|
|
||||||
c.getUniqueNumber());
|
|
||||||
for (final forge.view.arcane.CardPanel cp : cardPanel.getAttachedPanels()) {
|
|
||||||
if (cp.getCard().isUntapped()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final CardList att = AllZone.getCombat().getAttackerList();
|
|
||||||
if ((c.isTapped() || c.hasSickness() || ((c.hasKeyword("Vigilance")) && att.contains(c)))
|
|
||||||
&& (input instanceof InputAttack)) {
|
|
||||||
final forge.view.arcane.CardPanel cardPanel = ControlField.this.view.getTabletop().getCardPanel(
|
|
||||||
c.getUniqueNumber());
|
|
||||||
for (final forge.view.arcane.CardPanel cp : cardPanel.getAttachedPanels()) {
|
|
||||||
if (cp.getCard().isUntapped() && !cp.getCard().hasSickness()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.isMetaDown()) {
|
|
||||||
if (att.contains(c) && (input instanceof InputAttack)
|
|
||||||
&& !c.hasKeyword("CARDNAME attacks each turn if able.")) {
|
|
||||||
c.untap();
|
|
||||||
AllZone.getCombat().removeFromCombat(c);
|
|
||||||
} else if (input instanceof InputBlock) {
|
|
||||||
if (c.getController().isHuman()) {
|
|
||||||
AllZone.getCombat().removeFromCombat(c);
|
|
||||||
}
|
|
||||||
((InputBlock) input).removeFromAllBlocking(c);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
//Yosei, the Morning Star required cards to be chosen on computer side
|
|
||||||
//earlier it was enforced that cards must be in player zone
|
|
||||||
//this can potentially break some other functionality
|
|
||||||
//(tapping lands works ok but some custom cards may not...)
|
|
||||||
if (c.getController() != null) {
|
|
||||||
Singletons.getControl().getControlMatch().getMessageControl()
|
|
||||||
.getInputControl().selectCard(c,
|
|
||||||
c.getController().getZone(ZoneType.Battlefield));
|
|
||||||
} else {
|
|
||||||
//in weird case card has no controller revert to default behaviour
|
|
||||||
Singletons.getControl().getControlMatch().getMessageControl()
|
|
||||||
.getInputControl().selectCard(c,
|
|
||||||
AllZone.getHumanPlayer().getZone(ZoneType.Battlefield));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
madBlack = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (ControlField.this.player.isComputer()) {
|
|
||||||
System.out.println("Stop trying to spend the AI's mana");
|
|
||||||
// TODO: Mindslaver might need to add changes here
|
|
||||||
} else {
|
|
||||||
Input in = AllZone.getInputControl().getInput();
|
|
||||||
if (in instanceof InputMana) {
|
|
||||||
// Do something
|
|
||||||
((InputMana) in).selectManaPool(Constant.Color.BLACK);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
madBlue = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (ControlField.this.player.isComputer()) {
|
|
||||||
System.out.println("Stop trying to spend the AI's mana");
|
|
||||||
// TODO: Mindslaver might need to add changes here
|
|
||||||
} else {
|
|
||||||
Input in = AllZone.getInputControl().getInput();
|
|
||||||
if (in instanceof InputMana) {
|
|
||||||
// Do something
|
|
||||||
((InputMana) in).selectManaPool(Constant.Color.BLUE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
madGreen = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (ControlField.this.player.isComputer()) {
|
|
||||||
System.out.println("Stop trying to spend the AI's mana");
|
|
||||||
// TODO: Mindslaver might need to add changes here
|
|
||||||
} else {
|
|
||||||
Input in = AllZone.getInputControl().getInput();
|
|
||||||
if (in instanceof InputMana) {
|
|
||||||
// Do something
|
|
||||||
((InputMana) in).selectManaPool(Constant.Color.GREEN);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
madRed = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (ControlField.this.player.isComputer()) {
|
|
||||||
System.out.println("Stop trying to spend the AI's mana");
|
|
||||||
// TODO: Mindslaver might need to add changes here
|
|
||||||
} else {
|
|
||||||
Input in = AllZone.getInputControl().getInput();
|
|
||||||
if (in instanceof InputMana) {
|
|
||||||
// Do something
|
|
||||||
((InputMana) in).selectManaPool(Constant.Color.RED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
madWhite = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (ControlField.this.player.isComputer()) {
|
|
||||||
System.out.println("Stop trying to spend the AI's mana");
|
|
||||||
// TODO: Mindslaver might need to add changes here
|
|
||||||
} else {
|
|
||||||
Input in = AllZone.getInputControl().getInput();
|
|
||||||
if (in instanceof InputMana) {
|
|
||||||
// Do something
|
|
||||||
((InputMana) in).selectManaPool(Constant.Color.WHITE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
madColorless = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (ControlField.this.player.isComputer()) {
|
|
||||||
System.out.println("Stop trying to spend the AI's mana");
|
|
||||||
// TODO: Mindslaver might need to add changes here
|
|
||||||
} else {
|
|
||||||
Input in = AllZone.getInputControl().getInput();
|
|
||||||
if (in instanceof InputMana) {
|
|
||||||
// Do something
|
|
||||||
((InputMana) in).selectManaPool(Constant.Color.COLORLESS);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
} // End initMouseAdapters()
|
|
||||||
} // End class ControlField
|
|
||||||
@@ -1,281 +0,0 @@
|
|||||||
/*
|
|
||||||
* Forge: Play Magic: the Gathering.
|
|
||||||
* Copyright (C) 2011 Forge Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package forge.control.match;
|
|
||||||
|
|
||||||
import java.awt.Point;
|
|
||||||
import java.awt.Rectangle;
|
|
||||||
import java.awt.event.MouseAdapter;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import java.awt.event.MouseListener;
|
|
||||||
import java.awt.event.MouseMotionAdapter;
|
|
||||||
import java.awt.event.MouseMotionListener;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Observable;
|
|
||||||
import java.util.Observer;
|
|
||||||
|
|
||||||
import javax.swing.JLayeredPane;
|
|
||||||
import javax.swing.SwingUtilities;
|
|
||||||
|
|
||||||
import forge.AllZone;
|
|
||||||
import forge.Card;
|
|
||||||
import forge.Singletons;
|
|
||||||
import forge.game.zone.PlayerZone;
|
|
||||||
import forge.game.zone.ZoneType;
|
|
||||||
import forge.view.arcane.CardPanel;
|
|
||||||
import forge.view.arcane.HandArea;
|
|
||||||
import forge.view.arcane.util.Animation;
|
|
||||||
import forge.view.match.ViewHand;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Child controller - handles operations related to cards in user's hand and
|
|
||||||
* their Swing components, which are assembled in ViewHand.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class ControlHand {
|
|
||||||
private final List<Card> cardsInPanel;
|
|
||||||
private final ViewHand view;
|
|
||||||
|
|
||||||
private final MouseListener madCardClick;
|
|
||||||
private final MouseMotionListener madCardMove;
|
|
||||||
|
|
||||||
/** The o1. */
|
|
||||||
private Observer o1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Child controller - handles operations related to cards in user's hand and
|
|
||||||
* their Swing components, which are assembled in ViewHand.
|
|
||||||
*
|
|
||||||
* @param v
|
|
||||||
*   The Swing component for user hand
|
|
||||||
*/
|
|
||||||
public ControlHand(final ViewHand v) {
|
|
||||||
this.view = v;
|
|
||||||
this.cardsInPanel = new ArrayList<Card>();
|
|
||||||
|
|
||||||
madCardClick = new MouseAdapter() {
|
|
||||||
// Card click
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
if (e.getButton() != MouseEvent.BUTTON1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final Card c = view.getHandArea().getCardFromMouseOverPanel();
|
|
||||||
if (c != null) {
|
|
||||||
Singletons.getControl().getControlMatch().getMessageControl().getInputControl().selectCard(c, AllZone.getHumanPlayer().getZone(ZoneType.Hand));
|
|
||||||
Singletons.getView().getViewMatch().getBtnOK().requestFocusInWindow();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
madCardMove = new MouseMotionAdapter() {
|
|
||||||
// Card mouseover
|
|
||||||
@Override
|
|
||||||
public void mouseMoved(final MouseEvent me) {
|
|
||||||
final Card c = view.getHandArea().getCardFromMouseOverPanel();
|
|
||||||
if (c != null) {
|
|
||||||
Singletons.getControl().getControlMatch().setCard(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
o1 = new Observer() {
|
|
||||||
@Override
|
|
||||||
public void update(final Observable a, final Object b) {
|
|
||||||
final PlayerZone pZone = (PlayerZone) a;
|
|
||||||
final HandArea p = view.getHandArea();
|
|
||||||
final Rectangle rctLibraryLabel = Singletons.getControl()
|
|
||||||
.getControlMatch().getFieldControls().get(1)
|
|
||||||
.getView().getLblLibrary().getBounds();
|
|
||||||
final List<Card> c = pZone.getCards();
|
|
||||||
|
|
||||||
// Animation starts from the library label.
|
|
||||||
// This check prevents animation running if label hasn't been realised yet.
|
|
||||||
if (rctLibraryLabel.isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Card> tmp, diff;
|
|
||||||
tmp = new ArrayList<Card>();
|
|
||||||
for (final forge.view.arcane.CardPanel cpa : p.getCardPanels()) {
|
|
||||||
tmp.add(cpa.getGameCard());
|
|
||||||
}
|
|
||||||
diff = new ArrayList<Card>(tmp);
|
|
||||||
diff.removeAll(c);
|
|
||||||
if (diff.size() == p.getCardPanels().size()) {
|
|
||||||
p.clear();
|
|
||||||
} else {
|
|
||||||
for (final Card card : diff) {
|
|
||||||
p.removeCardPanel(p.getCardPanel(card.getUniqueNumber()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff = new ArrayList<Card>(c);
|
|
||||||
diff.removeAll(tmp);
|
|
||||||
|
|
||||||
JLayeredPane layeredPane = Singletons.getView().getFrame().getLayeredPane();
|
|
||||||
int fromZoneX = 0, fromZoneY = 0;
|
|
||||||
|
|
||||||
final Point zoneLocation = SwingUtilities.convertPoint(Singletons
|
|
||||||
.getControl().getControlMatch().getFieldControls()
|
|
||||||
.get(1).getView().getLblLibrary(),
|
|
||||||
Math.round(rctLibraryLabel.width / 2.0f), Math.round(rctLibraryLabel.height / 2.0f), layeredPane);
|
|
||||||
fromZoneX = zoneLocation.x;
|
|
||||||
fromZoneY = zoneLocation.y;
|
|
||||||
int startWidth, startX, startY;
|
|
||||||
startWidth = 10;
|
|
||||||
startX = fromZoneX - Math.round(startWidth / 2.0f);
|
|
||||||
startY = fromZoneY - Math.round(Math.round(startWidth * forge.view.arcane.CardPanel.ASPECT_RATIO) / 2.0f);
|
|
||||||
|
|
||||||
int endWidth, endX, endY;
|
|
||||||
forge.view.arcane.CardPanel toPanel = null;
|
|
||||||
|
|
||||||
for (final Card card : diff) {
|
|
||||||
toPanel = p.addCard(card);
|
|
||||||
endWidth = toPanel.getCardWidth();
|
|
||||||
final Point toPos = SwingUtilities.convertPoint(view.getHandArea(),
|
|
||||||
toPanel.getCardLocation(), layeredPane);
|
|
||||||
endX = toPos.x;
|
|
||||||
endY = toPos.y;
|
|
||||||
final forge.view.arcane.CardPanel animationPanel = new forge.view.arcane.CardPanel(card);
|
|
||||||
if (Singletons.getView().getFrame().isShowing()) {
|
|
||||||
Animation.moveCard(startX, startY, startWidth, endX, endY, endWidth, animationPanel, toPanel,
|
|
||||||
layeredPane, 500);
|
|
||||||
} else {
|
|
||||||
Animation.moveCard(toPanel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
addObservers();
|
|
||||||
addListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Adds observers to hand panel. */
|
|
||||||
public void addObservers() {
|
|
||||||
AllZone.getHumanPlayer().getZone(ZoneType.Hand).addObserver(o1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Adds listeners to hand panel: clicks, mouseover, etc. */
|
|
||||||
public void addListeners() {
|
|
||||||
view.getHandArea().removeMouseListener(madCardClick);
|
|
||||||
view.getHandArea().addMouseListener(madCardClick);
|
|
||||||
|
|
||||||
view.getHandArea().removeMouseMotionListener(madCardMove);
|
|
||||||
view.getHandArea().addMouseMotionListener(madCardMove);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds various listeners for cards in hand. Uses CardPanel instance from
|
|
||||||
* ViewHand.
|
|
||||||
*
|
|
||||||
* @param c
|
|
||||||
*   CardPanel object
|
|
||||||
*/
|
|
||||||
public void addCardPanelListeners(final CardPanel c) {
|
|
||||||
// Grab top level controller to facilitate interaction between children
|
|
||||||
final Card cardobj = c.getCard();
|
|
||||||
|
|
||||||
// Sidebar pic/detail on card hover
|
|
||||||
c.addMouseListener(new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mouseEntered(final MouseEvent e) {
|
|
||||||
Singletons.getControl().getControlMatch().getDetailControl().showCard(cardobj);
|
|
||||||
Singletons.getControl().getControlMatch().getPictureControl().showCard(cardobj);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Mouse press
|
|
||||||
c.addMouseListener(new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
|
|
||||||
if (e.getButton() != MouseEvent.BUTTON1) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().getMessageControl().getInputControl()
|
|
||||||
.selectCard(cardobj, AllZone.getHumanPlayer().getZone(ZoneType.Hand));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds the card.
|
|
||||||
*
|
|
||||||
* @param c
|
|
||||||
*   Card object
|
|
||||||
*/
|
|
||||||
public void addCard(final Card c) {
|
|
||||||
this.cardsInPanel.add(c);
|
|
||||||
//this.view.refreshLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds the cards.
|
|
||||||
*
|
|
||||||
* @param c
|
|
||||||
*   List of Card objects
|
|
||||||
*/
|
|
||||||
public void addCards(final List<Card> c) {
|
|
||||||
this.cardsInPanel.addAll(c);
|
|
||||||
//this.view.refreshLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the cards.
|
|
||||||
*
|
|
||||||
* @return List<Card>
|
|
||||||
*/
|
|
||||||
public List<Card> getCards() {
|
|
||||||
return this.cardsInPanel;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes the card.
|
|
||||||
*
|
|
||||||
* @param c
|
|
||||||
*   Card object
|
|
||||||
*/
|
|
||||||
public void removeCard(final Card c) {
|
|
||||||
this.cardsInPanel.remove(c);
|
|
||||||
//this.view.refreshLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes the cards.
|
|
||||||
*
|
|
||||||
* @param c
|
|
||||||
*   List of Card objects
|
|
||||||
*/
|
|
||||||
public void removeCards(final List<Card> c) {
|
|
||||||
this.cardsInPanel.removeAll(c);
|
|
||||||
//this.view.refreshLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset cards.
|
|
||||||
*
|
|
||||||
* @param c
|
|
||||||
*   List of Card objects
|
|
||||||
*/
|
|
||||||
public void resetCards(final List<Card> c) {
|
|
||||||
this.cardsInPanel.clear();
|
|
||||||
this.addCards(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,136 +0,0 @@
|
|||||||
/*
|
|
||||||
* Forge: Play Magic: the Gathering.
|
|
||||||
* Copyright (C) 2011 Forge Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package forge.control.match;
|
|
||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
|
||||||
import java.awt.event.ActionListener;
|
|
||||||
|
|
||||||
import forge.Constant;
|
|
||||||
import forge.Singletons;
|
|
||||||
import forge.gui.GuiInput;
|
|
||||||
import forge.view.match.ViewMessage;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Child controller - handles operations related to message panel.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class ControlMessage {
|
|
||||||
private final ViewMessage view;
|
|
||||||
|
|
||||||
private final GuiInput inputControl;
|
|
||||||
|
|
||||||
private final ActionListener actCancel, actOK;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Child controller - handles operations related to input panel.
|
|
||||||
*
|
|
||||||
* @param v
|
|
||||||
*   The Swing component for the input area
|
|
||||||
*/
|
|
||||||
public ControlMessage(final ViewMessage v) {
|
|
||||||
this.view = v;
|
|
||||||
this.inputControl = new GuiInput();
|
|
||||||
|
|
||||||
this.actOK = new ActionListener() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(final ActionEvent evt) {
|
|
||||||
ControlMessage.this.btnOKActionPerformed(evt);
|
|
||||||
|
|
||||||
if (Singletons.getModel().getGameState().getPhaseHandler().isNeedToNextPhase()) {
|
|
||||||
// moves to next turn
|
|
||||||
Singletons.getModel().getGameState().getPhaseHandler().setNeedToNextPhase(false);
|
|
||||||
Singletons.getModel().getGameState().getPhaseHandler().nextPhase();
|
|
||||||
}
|
|
||||||
ControlMessage.this.view.getBtnOK().requestFocusInWindow();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
this.actCancel = new ActionListener() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(final ActionEvent evt) {
|
|
||||||
ControlMessage.this.btnCancelActionPerformed(evt);
|
|
||||||
ControlMessage.this.view.getBtnOK().requestFocusInWindow();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
addListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Adds listeners to input area. */
|
|
||||||
public void addListeners() {
|
|
||||||
this.view.getBtnCancel().removeActionListener(actCancel);
|
|
||||||
this.view.getBtnCancel().addActionListener(actCancel);
|
|
||||||
|
|
||||||
this.view.getBtnOK().removeActionListener(actOK);
|
|
||||||
this.view.getBtnOK().addActionListener(actOK);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* btnCancelActionPerformed.
|
|
||||||
* </p>
|
|
||||||
* Triggers current cancel action from whichever input controller is being
|
|
||||||
* used.
|
|
||||||
*
|
|
||||||
* @param evt
|
|
||||||
* a {@link java.awt.event.ActionEvent} object.
|
|
||||||
*/
|
|
||||||
private void btnCancelActionPerformed(final ActionEvent evt) {
|
|
||||||
this.inputControl.selectButtonCancel();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* btnOKActionPerformed.
|
|
||||||
* </p>
|
|
||||||
* Triggers current OK action from whichever input controller is being used.
|
|
||||||
*
|
|
||||||
* @param evt
|
|
||||||
* a {@link java.awt.event.ActionEvent} object.
|
|
||||||
*/
|
|
||||||
private void btnOKActionPerformed(final ActionEvent evt) {
|
|
||||||
this.inputControl.selectButtonOK();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the input control.
|
|
||||||
*
|
|
||||||
* @return GuiInput
|
|
||||||
*/
|
|
||||||
public GuiInput getInputControl() {
|
|
||||||
return this.inputControl;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @param s0   {@link java.lang.String} */
|
|
||||||
public void setMessage(String s0) {
|
|
||||||
view.getTarMessage().setText(s0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Updates count label in input area. */
|
|
||||||
public void updateGameCount() {
|
|
||||||
view.getLblGames().setText("<html>Game #"
|
|
||||||
+ (Singletons.getModel().getMatchState().getGamesPlayedCount() + 1)
|
|
||||||
+ " of " + Singletons.getModel().getMatchState().getGamesPerMatch()
|
|
||||||
+ "<br>" + Constant.Runtime.getGameType().toString() + " mode</html>");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Flashes animation on input panel if play is currently waiting on input. */
|
|
||||||
public void remind() {
|
|
||||||
view.remind();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,226 +0,0 @@
|
|||||||
/*
|
|
||||||
* Forge: Play Magic: the Gathering.
|
|
||||||
* Copyright (C) 2011 Forge Team
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package forge.control.match;
|
|
||||||
|
|
||||||
import java.awt.event.MouseAdapter;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import java.awt.event.MouseListener;
|
|
||||||
import java.util.Observable;
|
|
||||||
import java.util.Observer;
|
|
||||||
|
|
||||||
import forge.AllZone;
|
|
||||||
import forge.MyObservable;
|
|
||||||
import forge.Singletons;
|
|
||||||
import forge.gui.GuiDisplayUtil;
|
|
||||||
import forge.properties.ForgePreferences.FPref;
|
|
||||||
import forge.view.match.ViewTabber;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Controls the vertical tabber in sidebar used for viewing gameplay data:
|
|
||||||
* stack, combat, etc.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class ControlTabber extends MyObservable {
|
|
||||||
private final ViewTabber view;
|
|
||||||
private final MouseListener madMilling, madUnlimited, madAddAnyCard,
|
|
||||||
madMana, madSetup, madTutor, madCounter, madTap, madUntap, madLife;
|
|
||||||
|
|
||||||
private Observer obsStack, obsLog;
|
|
||||||
|
|
||||||
/** */
|
|
||||||
public static final int STACK_PANEL = 0;
|
|
||||||
/** */
|
|
||||||
public static final int COMBAT_PANEL = 1;
|
|
||||||
/** */
|
|
||||||
public static final int LOG_PANEL = 2;
|
|
||||||
/** */
|
|
||||||
public static final int PLAYERS_PANEL = 3;
|
|
||||||
/** */
|
|
||||||
public static final int DEV_PANEL = 4;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Controls the vertical tabber in sidebar used for viewing gameplay data:
|
|
||||||
* stack, combat, etc.
|
|
||||||
*
|
|
||||||
* @param v
|
|
||||||
*   The tabber Swing component
|
|
||||||
*/
|
|
||||||
public ControlTabber(final ViewTabber v) {
|
|
||||||
this.view = v;
|
|
||||||
|
|
||||||
if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_MILLING_LOSS)) {
|
|
||||||
this.view.getLblMilling().setEnabled(true);
|
|
||||||
} else {
|
|
||||||
this.view.getLblMilling().setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_UNLIMITED_LAND)) {
|
|
||||||
this.view.getLblUnlimitedLands().setEnabled(true);
|
|
||||||
} else {
|
|
||||||
this.view.getLblUnlimitedLands().setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Observers and listeners
|
|
||||||
obsStack = new Observer() { @Override
|
|
||||||
public void update(final Observable a, final Object b) {
|
|
||||||
ControlTabber.this.view.updateStack(); } };
|
|
||||||
|
|
||||||
obsLog = new Observer() { @Override
|
|
||||||
public void update(final Observable a, final Object b) {
|
|
||||||
ControlTabber.this.view.updateConsole(); } };
|
|
||||||
|
|
||||||
madMilling = new MouseAdapter() { @Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
ControlTabber.this.view.getLblMilling().toggleEnabled(); } };
|
|
||||||
|
|
||||||
madUnlimited = new MouseAdapter() { @Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
ControlTabber.this.view.getLblUnlimitedLands().toggleEnabled(); } };
|
|
||||||
|
|
||||||
madMana = new MouseAdapter() { @Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
GuiDisplayUtil.devModeGenerateMana(); } };
|
|
||||||
|
|
||||||
madSetup = new MouseAdapter() { @Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
GuiDisplayUtil.devSetupGameState(); } };
|
|
||||||
|
|
||||||
madTutor = new MouseAdapter() { @Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
GuiDisplayUtil.devModeTutor(); } };
|
|
||||||
|
|
||||||
madAddAnyCard = new MouseAdapter() { @Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
GuiDisplayUtil.devModeAddAnyCard(); } };
|
|
||||||
|
|
||||||
madCounter = new MouseAdapter() { @Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
GuiDisplayUtil.devModeAddCounter(); } };
|
|
||||||
|
|
||||||
madTap = new MouseAdapter() { @Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
GuiDisplayUtil.devModeTapPerm(); } };
|
|
||||||
|
|
||||||
madUntap = new MouseAdapter() { @Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
GuiDisplayUtil.devModeUntapPerm(); } };
|
|
||||||
|
|
||||||
madLife = new MouseAdapter() { @Override
|
|
||||||
public void mousePressed(final MouseEvent e) {
|
|
||||||
GuiDisplayUtil.devModeSetLife(); } };
|
|
||||||
|
|
||||||
addListeners();
|
|
||||||
addObservers();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Adds observers to tabber. */
|
|
||||||
public void addObservers() {
|
|
||||||
AllZone.getStack().addObserver(obsStack);
|
|
||||||
AllZone.getGameLog().addObserver(obsLog);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Adds listeners to various components in tabber. */
|
|
||||||
public void addListeners() {
|
|
||||||
// Milling enable toggle
|
|
||||||
this.view.getLblMilling().removeMouseListener(madMilling);
|
|
||||||
this.view.getLblMilling().addMouseListener(madMilling);
|
|
||||||
|
|
||||||
// DevMode: Play unlimited land this turn toggle
|
|
||||||
this.view.getLblUnlimitedLands().removeMouseListener(madUnlimited);
|
|
||||||
this.view.getLblUnlimitedLands().addMouseListener(madUnlimited);
|
|
||||||
|
|
||||||
// DevMode: Generate mana
|
|
||||||
this.view.getLblGenerateMana().removeMouseListener(madMana);
|
|
||||||
this.view.getLblGenerateMana().addMouseListener(madMana);
|
|
||||||
|
|
||||||
// DevMode: Battlefield setup
|
|
||||||
this.view.getLblSetupGame().removeMouseListener(madSetup);
|
|
||||||
this.view.getLblSetupGame().addMouseListener(madSetup);
|
|
||||||
|
|
||||||
// DevMode: Tutor for card
|
|
||||||
this.view.getLblTutor().removeMouseListener(madTutor);
|
|
||||||
this.view.getLblTutor().addMouseListener(madTutor);
|
|
||||||
|
|
||||||
this.view.getAnyCard().removeMouseListener(madAddAnyCard);
|
|
||||||
this.view.getAnyCard().addMouseListener(madAddAnyCard);
|
|
||||||
|
|
||||||
// DevMode: Add counter to permanent
|
|
||||||
this.view.getLblCounterPermanent().removeMouseListener(madCounter);
|
|
||||||
this.view.getLblCounterPermanent().addMouseListener(madCounter);
|
|
||||||
|
|
||||||
// DevMode: Tap permanent
|
|
||||||
this.view.getLblTapPermanent().removeMouseListener(madTap);
|
|
||||||
this.view.getLblTapPermanent().addMouseListener(madTap);
|
|
||||||
|
|
||||||
// DevMode: Untap permanent
|
|
||||||
this.view.getLblUntapPermanent().removeMouseListener(madUntap);
|
|
||||||
this.view.getLblUntapPermanent().addMouseListener(madUntap);
|
|
||||||
|
|
||||||
// DevMode: Set life
|
|
||||||
this.view.getLblSetLife().removeMouseListener(madLife);
|
|
||||||
this.view.getLblSetLife().addMouseListener(madLife);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the view.
|
|
||||||
*
|
|
||||||
* @return ViewTabber
|
|
||||||
*/
|
|
||||||
public ViewTabber getView() {
|
|
||||||
return this.view;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Programatically forces card layout of sidebar tabber to show "Dev" panel.
|
|
||||||
*/
|
|
||||||
public void showPnlDev() {
|
|
||||||
this.view.getVtpTabber().showTab(DEV_PANEL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Programatically forces card layout of sidebar tabber to show "Players"
|
|
||||||
* panel.
|
|
||||||
*/
|
|
||||||
public void showPnlPlayers() {
|
|
||||||
this.view.getVtpTabber().showTab(PLAYERS_PANEL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Programatically forces card layout of sidebar tabber to show "Log"
|
|
||||||
* panel.
|
|
||||||
*/
|
|
||||||
public void showPnlGameLog() {
|
|
||||||
this.view.getVtpTabber().showTab(LOG_PANEL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Programatically forces card layout of sidebar tabber to show "Combat"
|
|
||||||
* panel.
|
|
||||||
*/
|
|
||||||
public void showPnlCombat() {
|
|
||||||
this.view.getVtpTabber().showTab(COMBAT_PANEL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Programatically forces card layout of sidebar tabber to show "Stack"
|
|
||||||
* panel.
|
|
||||||
*/
|
|
||||||
public void showPnlStack() {
|
|
||||||
this.view.getVtpTabber().showTab(STACK_PANEL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
/** Child controllers used in match UI. */
|
|
||||||
package forge.control.match;
|
|
||||||
|
|
||||||
@@ -20,15 +20,20 @@ import forge.card.trigger.TriggerType;
|
|||||||
import forge.control.FControl;
|
import forge.control.FControl;
|
||||||
import forge.control.input.InputMulligan;
|
import forge.control.input.InputMulligan;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
|
import forge.gui.match.VMatchUI;
|
||||||
|
import forge.gui.match.controllers.CMessage;
|
||||||
|
import forge.gui.match.nonsingleton.VField;
|
||||||
|
import forge.gui.match.views.VAntes;
|
||||||
import forge.gui.toolbox.FLabel;
|
import forge.gui.toolbox.FLabel;
|
||||||
import forge.item.CardPrinted;
|
import forge.item.CardPrinted;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.properties.ForgeProps;
|
import forge.properties.ForgeProps;
|
||||||
import forge.properties.NewConstants.Lang.GameAction.GameActionText;
|
import forge.properties.NewConstants.Lang.GameAction.GameActionText;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
import forge.view.match.ViewField;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Methods for all things related to starting a new game.
|
* Methods for all things related to starting a new game.
|
||||||
@@ -52,12 +57,12 @@ public class GameNew {
|
|||||||
* @param computerLife
|
* @param computerLife
|
||||||
*   int.
|
*   int.
|
||||||
* @param iconEnemy
|
* @param iconEnemy
|
||||||
*   String.
|
*   {@link java.lang.String}
|
||||||
*/
|
*/
|
||||||
public static void newGame(final Deck humanDeck, final Deck computerDeck, final CardList human,
|
public static void newGame(final Deck humanDeck, final Deck computerDeck, final CardList human,
|
||||||
final CardList computer, final int humanLife, final int computerLife, String iconEnemy) {
|
final CardList computer, final int humanLife, final int computerLife, String iconEnemy) {
|
||||||
Singletons.getControl().changeState(FControl.MATCH_SCREEN);
|
Singletons.getControl().changeState(FControl.MATCH_SCREEN);
|
||||||
Singletons.getControl().getControlMatch().initMatch(iconEnemy);
|
CMatchUI.SINGLETON_INSTANCE.initMatch(iconEnemy);
|
||||||
|
|
||||||
GameNew.newGameCleanup();
|
GameNew.newGameCleanup();
|
||||||
GameNew.newMatchCleanup();
|
GameNew.newMatchCleanup();
|
||||||
@@ -89,7 +94,7 @@ public class GameNew {
|
|||||||
*/
|
*/
|
||||||
public static void newGame(final Deck humanDeck, final Deck computerDeck) {
|
public static void newGame(final Deck humanDeck, final Deck computerDeck) {
|
||||||
Singletons.getControl().changeState(FControl.MATCH_SCREEN);
|
Singletons.getControl().changeState(FControl.MATCH_SCREEN);
|
||||||
Singletons.getControl().getControlMatch().initMatch(null);
|
CMatchUI.SINGLETON_INSTANCE.initMatch(null);
|
||||||
|
|
||||||
GameNew.newGameCleanup();
|
GameNew.newGameCleanup();
|
||||||
GameNew.newMatchCleanup();
|
GameNew.newMatchCleanup();
|
||||||
@@ -111,7 +116,7 @@ public class GameNew {
|
|||||||
forge.card.trigger.Trigger.resetIDs();
|
forge.card.trigger.Trigger.resetIDs();
|
||||||
AllZone.getTriggerHandler().clearTriggerSettings();
|
AllZone.getTriggerHandler().clearTriggerSettings();
|
||||||
AllZone.getTriggerHandler().clearDelayedTrigger();
|
AllZone.getTriggerHandler().clearDelayedTrigger();
|
||||||
Singletons.getControl().getControlMatch().getMessageControl().updateGameCount();
|
CMessage.SINGLETON_INSTANCE.updateGameCount();
|
||||||
|
|
||||||
// friendliness
|
// friendliness
|
||||||
Card.resetUniqueNumber();
|
Card.resetUniqueNumber();
|
||||||
@@ -270,6 +275,7 @@ public class GameNew {
|
|||||||
throw new RuntimeException(p + " library is empty.");
|
throw new RuntimeException(p + " library is empty.");
|
||||||
}
|
}
|
||||||
AllZone.getGameLog().add("Ante", p + " anted " + ante, 0);
|
AllZone.getGameLog().add("Ante", p + " anted " + ante, 0);
|
||||||
|
VAntes.SINGLETON_INSTANCE.setAnteCard(p, ante);
|
||||||
Singletons.getModel().getGameAction().moveTo(ZoneType.Ante, ante);
|
Singletons.getModel().getGameAction().moveTo(ZoneType.Ante, ante);
|
||||||
msg.append(p.getName()).append(" ante: ").append(ante).append(nl);
|
msg.append(p.getName()).append(" ante: ").append(ante).append(nl);
|
||||||
}
|
}
|
||||||
@@ -281,10 +287,10 @@ public class GameNew {
|
|||||||
AllZone.getComputerPlayer().drawCard();
|
AllZone.getComputerPlayer().drawCard();
|
||||||
}
|
}
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().setCard(AllZone.getHumanPlayer().getCardsIn(ZoneType.Hand).get(0));
|
CMatchUI.SINGLETON_INSTANCE.setCard(AllZone.getHumanPlayer().getCardsIn(ZoneType.Hand).get(0));
|
||||||
|
|
||||||
AllZone.getInputControl().setInput(new InputMulligan());
|
AllZone.getInputControl().setInput(new InputMulligan());
|
||||||
// PhaseHandler.setGameBegins(1); // is this needed? It's already in InputMulligan...
|
PhaseHandler.setGameBegins(1); // is this needed? It's already in InputMulligan...
|
||||||
|
|
||||||
AllZone.getGameLog().add("Turn",
|
AllZone.getGameLog().add("Turn",
|
||||||
"Turn " + Singletons.getModel().getGameState().getPhaseHandler().getTurn()
|
"Turn " + Singletons.getModel().getGameState().getPhaseHandler().getTurn()
|
||||||
@@ -323,26 +329,28 @@ public class GameNew {
|
|||||||
|
|
||||||
// Update mouse events in case of dev mode toggle
|
// Update mouse events in case of dev mode toggle
|
||||||
if (Constant.Runtime.DEV_MODE[0]) {
|
if (Constant.Runtime.DEV_MODE[0]) {
|
||||||
Singletons.getView().getViewMatch()
|
// TODO restore this functionality!!!
|
||||||
.getViewTabber().getVtpTabber().getAllVTabs().get(4).setVisible(true);
|
//VMatchUI.SINGLETON_INSTANCE.getViewDevMode().getDocument().setVisible(true);
|
||||||
final List<ViewField> allFields = Singletons.getView().getViewMatch().getFieldViews();
|
final List<VField> allFields = VMatchUI.SINGLETON_INSTANCE.getFieldViews();
|
||||||
|
|
||||||
for (final ViewField field : allFields) {
|
for (final VField field : allFields) {
|
||||||
((FLabel) field.getLblHand()).setHoverable(true);
|
((FLabel) field.getLblHand()).setHoverable(true);
|
||||||
((FLabel) field.getLblLibrary()).setHoverable(true);
|
((FLabel) field.getLblLibrary()).setHoverable(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Singletons.getView().getViewMatch()
|
// TODO restore this functionality!!!
|
||||||
.getViewTabber().getVtpTabber().getAllVTabs().get(4).setVisible(false);
|
//VMatchUI.SINGLETON_INSTANCE.getViewDevMode().getDocument().setVisible(false);
|
||||||
final List<ViewField> allFields = Singletons.getView().getViewMatch().getFieldViews();
|
final List<VField> allFields = VMatchUI.SINGLETON_INSTANCE.getFieldViews();
|
||||||
|
|
||||||
for (final ViewField field : allFields) {
|
for (final VField field : allFields) {
|
||||||
((FLabel) field.getLblHand()).setHoverable(false);
|
((FLabel) field.getLblHand()).setHoverable(false);
|
||||||
((FLabel) field.getLblLibrary()).setHoverable(false);
|
((FLabel) field.getLblLibrary()).setHoverable(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VAntes.SINGLETON_INSTANCE.setAnteCard(AllZone.getComputerPlayer(), null);
|
||||||
|
VAntes.SINGLETON_INSTANCE.setAnteCard(AllZone.getHumanPlayer(), null);
|
||||||
AllZone.getInputControl().resetInput();
|
AllZone.getInputControl().resetInput();
|
||||||
Singletons.getModel().getMatchState().reset();
|
Singletons.getModel().getMatchState().reset();
|
||||||
Singletons.getModel().loadPrefs();
|
Singletons.getModel().loadPrefs();
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import forge.Singletons;
|
|||||||
import forge.card.trigger.TriggerType;
|
import forge.card.trigger.TriggerType;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -729,7 +730,7 @@ public class Combat {
|
|||||||
this.addDefendingDamage(damageDealt, attacker);
|
this.addDefendingDamage(damageDealt, attacker);
|
||||||
} else {
|
} else {
|
||||||
if (attacker.hasKeyword("Trample") || (block.size() > 1)) {
|
if (attacker.hasKeyword("Trample") || (block.size() > 1)) {
|
||||||
Singletons.getControl().getControlMatch().assignDamage(attacker, block, damageDealt);
|
CMatchUI.SINGLETON_INSTANCE.assignDamage(attacker, block, damageDealt);
|
||||||
} else {
|
} else {
|
||||||
block.get(0).addAssignedDamage(damageDealt, attacking.get(i));
|
block.get(0).addAssignedDamage(damageDealt, attacking.get(i));
|
||||||
}
|
}
|
||||||
@@ -782,7 +783,7 @@ public class Combat {
|
|||||||
this.addDefendingDamage(damageDealt, attacker);
|
this.addDefendingDamage(damageDealt, attacker);
|
||||||
} else {
|
} else {
|
||||||
if (attacker.hasKeyword("Trample") || (block.size() > 1)) {
|
if (attacker.hasKeyword("Trample") || (block.size() > 1)) {
|
||||||
Singletons.getControl().getControlMatch().assignDamage(attacker, block, damageDealt);
|
CMatchUI.SINGLETON_INSTANCE.assignDamage(attacker, block, damageDealt);
|
||||||
} else {
|
} else {
|
||||||
block.get(0).addAssignedDamage(damageDealt, attacking.get(i));
|
block.get(0).addAssignedDamage(damageDealt, attacking.get(i));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,9 @@ import forge.game.player.PlayerUtil;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.framework.EDocID;
|
||||||
|
import forge.gui.framework.SDisplayUtil;
|
||||||
|
import forge.gui.match.views.VCombat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -2431,8 +2434,6 @@ public class CombatUtil {
|
|||||||
* </p>
|
* </p>
|
||||||
*/
|
*/
|
||||||
public static void showCombat() {
|
public static void showCombat() {
|
||||||
Singletons.getControl().getControlMatch().showCombat("");
|
|
||||||
|
|
||||||
Card[] defend = null;
|
Card[] defend = null;
|
||||||
final StringBuilder display = new StringBuilder();
|
final StringBuilder display = new StringBuilder();
|
||||||
|
|
||||||
@@ -2471,8 +2472,9 @@ public class CombatUtil {
|
|||||||
}
|
}
|
||||||
} // loop through attackers
|
} // loop through attackers
|
||||||
}
|
}
|
||||||
Singletons.getControl().getControlMatch().showCombat(display.toString().trim());
|
|
||||||
|
|
||||||
|
SDisplayUtil.showTab(EDocID.REPORT_COMBAT.getDoc());
|
||||||
|
VCombat.SINGLETON_INSTANCE.updateCombat(display.toString().trim());
|
||||||
} // showBlockers()
|
} // showBlockers()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ import forge.Singletons;
|
|||||||
import forge.card.trigger.TriggerType;
|
import forge.card.trigger.TriggerType;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.framework.EDocID;
|
||||||
|
import forge.gui.framework.SDisplayUtil;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -321,7 +323,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
|
|
||||||
switch(phase) {
|
switch(phase) {
|
||||||
case UNTAP:
|
case UNTAP:
|
||||||
Singletons.getControl().getControlMatch().showStack();
|
SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc());
|
||||||
PhaseUtil.handleUntap();
|
PhaseUtil.handleUntap();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -406,12 +408,12 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
AllZone.getEndOfCombat().executeUntil();
|
AllZone.getEndOfCombat().executeUntil();
|
||||||
AllZone.getEndOfCombat().executeAt();
|
AllZone.getEndOfCombat().executeAt();
|
||||||
CombatUtil.showCombat();
|
CombatUtil.showCombat();
|
||||||
Singletons.getControl().getControlMatch().showStack();
|
SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MAIN2:
|
case MAIN2:
|
||||||
CombatUtil.showCombat();
|
CombatUtil.showCombat();
|
||||||
Singletons.getControl().getControlMatch().showStack();
|
SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case END_OF_TURN:
|
case END_OF_TURN:
|
||||||
@@ -526,7 +528,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.getPhase() == PhaseType.COMBAT_END) {
|
if (this.getPhase() == PhaseType.COMBAT_END) {
|
||||||
Singletons.getControl().getControlMatch().showStack();
|
SDisplayUtil.showTab(EDocID.REPORT_STACK.getDoc());
|
||||||
AllZone.getCombat().reset();
|
AllZone.getCombat().reset();
|
||||||
this.resetAttackedThisCombat(this.getPlayerTurn());
|
this.resetAttackedThisCombat(this.getPlayerTurn());
|
||||||
this.bCombat = false;
|
this.bCombat = false;
|
||||||
|
|||||||
@@ -26,11 +26,10 @@ import forge.CardList;
|
|||||||
import forge.CardListFilter;
|
import forge.CardListFilter;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.card.trigger.TriggerType;
|
import forge.card.trigger.TriggerType;
|
||||||
import forge.control.ControlMatchUI;
|
|
||||||
import forge.game.phase.PhaseType;
|
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.view.match.ViewField.PhaseLabel;
|
import forge.gui.match.CMatchUI;
|
||||||
|
import forge.gui.match.nonsingleton.VField.PhaseLabel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -386,13 +385,12 @@ public class PhaseUtil {
|
|||||||
public static void visuallyActivatePhase(final PhaseType s) {
|
public static void visuallyActivatePhase(final PhaseType s) {
|
||||||
PhaseLabel lbl = null;
|
PhaseLabel lbl = null;
|
||||||
final Player p = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn();
|
final Player p = Singletons.getModel().getGameState().getPhaseHandler().getPlayerTurn();
|
||||||
final ControlMatchUI t = Singletons.getControl().getControlMatch();
|
final CMatchUI t = CMatchUI.SINGLETON_INSTANCE;
|
||||||
|
|
||||||
// Index of field; computer is 0, human is 1
|
// Index of field; computer is 0, human is 1
|
||||||
int i = p.isComputer() ? 0 : 1;
|
int i = p.isComputer() ? 0 : 1;
|
||||||
|
|
||||||
switch(s) {
|
switch(s) {
|
||||||
|
|
||||||
case UPKEEP:
|
case UPKEEP:
|
||||||
lbl = t.getFieldControls().get(i).getView().getLblUpkeep();
|
lbl = t.getFieldControls().get(i).getView().getLblUpkeep();
|
||||||
break;
|
break;
|
||||||
@@ -434,7 +432,6 @@ public class PhaseUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
t.resetAllPhaseButtons();
|
t.resetAllPhaseButtons();
|
||||||
Singletons.getView().getViewMatch().repaint();
|
|
||||||
lbl.setActive(true);
|
lbl.setActive(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import forge.control.input.Input;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -208,7 +209,7 @@ public class Untap extends Phase implements java.io.Serializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Select one tapped land to untap");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Select one tapped land to untap");
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,7 +257,7 @@ public class Untap extends Phase implements java.io.Serializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Select one tapped artifact to untap");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Select one tapped artifact to untap");
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -305,7 +306,7 @@ public class Untap extends Phase implements java.io.Serializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Select one creature to untap");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Select one creature to untap");
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ import forge.game.player.PlayerUtil;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -495,9 +496,7 @@ public class Upkeep extends Phase implements java.io.Serializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons
|
CMatchUI.SINGLETON_INSTANCE
|
||||||
.getControl()
|
|
||||||
.getControlMatch()
|
|
||||||
.showMessage(
|
.showMessage(
|
||||||
abyss.getName() + " - Select one nonartifact creature to destroy");
|
abyss.getName() + " - Select one nonartifact creature to destroy");
|
||||||
ButtonUtil.disableAll();
|
ButtonUtil.disableAll();
|
||||||
@@ -566,9 +565,7 @@ public class Upkeep extends Phase implements java.io.Serializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons
|
CMatchUI.SINGLETON_INSTANCE
|
||||||
.getControl()
|
|
||||||
.getControlMatch()
|
|
||||||
.showMessage(
|
.showMessage(
|
||||||
"Yawgmoth Demon - Select one artifact to sacrifice or be dealt 2 damage");
|
"Yawgmoth Demon - Select one artifact to sacrifice or be dealt 2 damage");
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
@@ -2285,7 +2282,7 @@ public class Upkeep extends Phase implements java.io.Serializable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch()
|
CMatchUI.SINGLETON_INSTANCE
|
||||||
.showMessage(c.getName() + " - Select target creature.");
|
.showMessage(c.getName() + " - Select target creature.");
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
@@ -2359,9 +2356,7 @@ public class Upkeep extends Phase implements java.io.Serializable {
|
|||||||
this.stop();
|
this.stop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Singletons
|
CMatchUI.SINGLETON_INSTANCE
|
||||||
.getControl()
|
|
||||||
.getControlMatch()
|
|
||||||
.showMessage(
|
.showMessage(
|
||||||
source.getName()
|
source.getName()
|
||||||
+ " - Select "
|
+ " - Select "
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import forge.card.spellability.SpellAbility;
|
|||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -250,7 +251,7 @@ public class HumanPlayer extends Player {
|
|||||||
protected final void clashMoveToTopOrBottom(final Card c) {
|
protected final void clashMoveToTopOrBottom(final Card c) {
|
||||||
String choice = "";
|
String choice = "";
|
||||||
final String[] choices = { "top", "bottom" };
|
final String[] choices = { "top", "bottom" };
|
||||||
Singletons.getControl().getControlMatch().setCard(c);
|
CMatchUI.SINGLETON_INSTANCE.setCard(c);
|
||||||
choice = GuiUtils.chooseOne(c.getName() + " - Top or bottom of Library", choices);
|
choice = GuiUtils.chooseOne(c.getName() + " - Top or bottom of Library", choices);
|
||||||
|
|
||||||
if (choice.equals("bottom")) {
|
if (choice.equals("bottom")) {
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ import forge.game.zone.PlayerZone;
|
|||||||
import forge.game.zone.PlayerZoneComesIntoPlay;
|
import forge.game.zone.PlayerZoneComesIntoPlay;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.VMatchUI;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1854,7 +1855,7 @@ public abstract class Player extends GameEntity {
|
|||||||
* @return a boolean.
|
* @return a boolean.
|
||||||
*/
|
*/
|
||||||
public final boolean canPlayLand() {
|
public final boolean canPlayLand() {
|
||||||
if (Singletons.getView().getViewMatch().getViewTabber().getLblUnlimitedLands().getEnabled() && this.isHuman()
|
if (VMatchUI.SINGLETON_INSTANCE.getViewDevMode().getLblUnlimitedLands().getEnabled() && this.isHuman()
|
||||||
&& Constant.Runtime.DEV_MODE[0]) {
|
&& Constant.Runtime.DEV_MODE[0]) {
|
||||||
return PhaseHandler.canCastSorcery(this);
|
return PhaseHandler.canCastSorcery(this);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import forge.card.spellability.SpellAbility;
|
|||||||
import forge.control.input.Input;
|
import forge.control.input.Input;
|
||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -91,7 +92,7 @@ public final class PlayerUtil {
|
|||||||
if (AllZone.getHumanPlayer().getZone(ZoneType.Hand).size() == 0) {
|
if (AllZone.getHumanPlayer().getZone(ZoneType.Hand).size() == 0) {
|
||||||
this.stop();
|
this.stop();
|
||||||
}
|
}
|
||||||
Singletons.getControl().getControlMatch().showMessage(
|
CMatchUI.SINGLETON_INSTANCE.showMessage(
|
||||||
"Select " + (nCards - this.n) + " cards to discard, unless you discard a " + uType + ".");
|
"Select " + (nCards - this.n) + " cards to discard, unless you discard a " + uType + ".");
|
||||||
ButtonUtil.disableAll();
|
ButtonUtil.disableAll();
|
||||||
}
|
}
|
||||||
@@ -151,7 +152,7 @@ public final class PlayerUtil {
|
|||||||
this.stop();
|
this.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().showMessage("Select a card to discard");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Select a card to discard");
|
||||||
ButtonUtil.disableAll();
|
ButtonUtil.disableAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +191,7 @@ public final class PlayerUtil {
|
|||||||
this.stop();
|
this.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().showMessage("Chains of Mephistopheles:\n" + "Select a card to discard");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Chains of Mephistopheles:\n" + "Select a card to discard");
|
||||||
ButtonUtil.disableAll();
|
ButtonUtil.disableAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,7 +289,7 @@ public final class PlayerUtil {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().showMessage(message + " (" + (nCards - this.n) + " left)");
|
CMatchUI.SINGLETON_INSTANCE.showMessage(message + " (" + (nCards - this.n) + " left)");
|
||||||
ButtonUtil.disableAll();
|
ButtonUtil.disableAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -331,7 +332,7 @@ public final class PlayerUtil {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Select a card to put on the " + topOrBottom + " of your library.");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Select a card to put on the " + topOrBottom + " of your library.");
|
||||||
ButtonUtil.disableAll();
|
ButtonUtil.disableAll();
|
||||||
|
|
||||||
if ((this.n == num) || (AllZone.getHumanPlayer().getZone(ZoneType.Hand).size() == 0)) {
|
if ((this.n == num) || (AllZone.getHumanPlayer().getZone(ZoneType.Hand).size() == 0)) {
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ import forge.game.player.ComputerUtil;
|
|||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.gui.GuiDisplayUtil;
|
import forge.gui.GuiDisplayUtil;
|
||||||
import forge.gui.GuiUtils;
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -761,7 +762,7 @@ public class MagicStack extends MyObservable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Mana Vortex - select a land to sacrifice");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Mana Vortex - select a land to sacrifice");
|
||||||
ButtonUtil.enableOnlyCancel();
|
ButtonUtil.enableOnlyCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -953,7 +954,7 @@ public class MagicStack extends MyObservable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showMessage() {
|
public void showMessage() {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Choose target creature to haunt.");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Choose target creature to haunt.");
|
||||||
ButtonUtil.disableAll();
|
ButtonUtil.disableAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -967,7 +968,7 @@ public class MagicStack extends MyObservable {
|
|||||||
MagicStack.this.add(haunterDiesWork);
|
MagicStack.this.add(haunterDiesWork);
|
||||||
this.stop();
|
this.stop();
|
||||||
} else {
|
} else {
|
||||||
Singletons.getControl().getControlMatch().showMessage("Cannot target this card (Shroud? Protection?).");
|
CMatchUI.SINGLETON_INSTANCE.showMessage("Cannot target this card (Shroud? Protection?).");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -327,7 +327,7 @@ public final class GuiDisplayUtil {
|
|||||||
public static void updateGUI() {
|
public static void updateGUI() {
|
||||||
AllZone.getComputerPlayer().getZone(ZoneType.Battlefield).updateObservers();
|
AllZone.getComputerPlayer().getZone(ZoneType.Battlefield).updateObservers();
|
||||||
AllZone.getHumanPlayer().getZone(ZoneType.Battlefield).updateObservers();
|
AllZone.getHumanPlayer().getZone(ZoneType.Battlefield).updateObservers();
|
||||||
//AllZone.getHumanPlayer().getZone(Zone.Hand).updateObservers();
|
//AllZone.getHumanPlayer().getZone(ZoneType.Hand).updateObservers();
|
||||||
AllZone.getComputerPlayer().updateObservers();
|
AllZone.getComputerPlayer().updateObservers();
|
||||||
AllZone.getHumanPlayer().updateObservers();
|
AllZone.getHumanPlayer().updateObservers();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,11 +133,7 @@ public class GuiInput extends MyObservable implements Observer {
|
|||||||
return this.getInput().toString();
|
return this.getInput().toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/** @return {@link forge.gui.GuiInput.Input} */
|
||||||
* Gets the input.
|
|
||||||
*
|
|
||||||
* @return the input
|
|
||||||
*/
|
|
||||||
public Input getInput() {
|
public Input getInput() {
|
||||||
return this.input;
|
return this.input;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ import javax.swing.SwingConstants;
|
|||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
import forge.Singletons;
|
|
||||||
import forge.error.ErrorViewer;
|
import forge.error.ErrorViewer;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Constructor for Gui_MultipleBlockers4.</p>
|
* <p>Constructor for Gui_MultipleBlockers4.</p>
|
||||||
@@ -241,7 +241,7 @@ public class GuiMultipleBlockers extends JFrame {
|
|||||||
final CardContainer cardPanel = (CardContainer) o;
|
final CardContainer cardPanel = (CardContainer) o;
|
||||||
final Card c = cardPanel.getCard();
|
final Card c = cardPanel.getCard();
|
||||||
|
|
||||||
Singletons.getControl().getControlMatch().setCard(c);
|
CMatchUI.SINGLETON_INSTANCE.setCard(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import javax.swing.event.ListSelectionEvent;
|
|||||||
import javax.swing.event.ListSelectionListener;
|
import javax.swing.event.ListSelectionListener;
|
||||||
|
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.Singletons;
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.properties.ForgeProps;
|
import forge.properties.ForgeProps;
|
||||||
import forge.properties.NewConstants;
|
import forge.properties.NewConstants;
|
||||||
|
|
||||||
@@ -343,7 +343,7 @@ public final class GuiUtils {
|
|||||||
@Override
|
@Override
|
||||||
public void valueChanged(final ListSelectionEvent ev) {
|
public void valueChanged(final ListSelectionEvent ev) {
|
||||||
if (list.getSelectedValue() instanceof Card) {
|
if (list.getSelectedValue() instanceof Card) {
|
||||||
Singletons.getControl().getControlMatch().setCard((Card) list.getSelectedValue());
|
CMatchUI.SINGLETON_INSTANCE.setCard((Card) list.getSelectedValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package forge.gui.layout;
|
package forge.gui.framework;
|
||||||
|
|
||||||
import java.awt.CardLayout;
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
@@ -17,6 +16,7 @@ import javax.swing.JPanel;
|
|||||||
import javax.swing.SwingConstants;
|
import javax.swing.SwingConstants;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
import forge.gui.toolbox.FPanel;
|
||||||
import forge.gui.toolbox.FSkin;
|
import forge.gui.toolbox.FSkin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -26,7 +26,7 @@ import forge.gui.toolbox.FSkin;
|
|||||||
* for resizing.
|
* for resizing.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("serial")
|
@SuppressWarnings("serial")
|
||||||
final class DragCell extends JPanel implements ILocalRepaint {
|
public final class DragCell extends JPanel implements ILocalRepaint {
|
||||||
// Layout creation worker vars
|
// Layout creation worker vars
|
||||||
private double roughX = 0;
|
private double roughX = 0;
|
||||||
private double roughY = 0;
|
private double roughY = 0;
|
||||||
@@ -38,9 +38,8 @@ final class DragCell extends JPanel implements ILocalRepaint {
|
|||||||
private int smoothH = 0;
|
private int smoothH = 0;
|
||||||
|
|
||||||
// Core layout stuff
|
// Core layout stuff
|
||||||
private final CardLayout cards = new CardLayout();
|
|
||||||
private final JPanel pnlHead = new JPanel(new MigLayout("insets 0, gap 0, hidemode 3"));
|
private final JPanel pnlHead = new JPanel(new MigLayout("insets 0, gap 0, hidemode 3"));
|
||||||
private final JPanel pnlBody = new JPanel(cards);
|
private final JPanel pnlBody = new FPanel();
|
||||||
private final JPanel pnlBorderRight = new JPanel();
|
private final JPanel pnlBorderRight = new JPanel();
|
||||||
private final JPanel pnlBorderBottom = new JPanel();
|
private final JPanel pnlBorderBottom = new JPanel();
|
||||||
private final int tabPaddingPx = 2;
|
private final int tabPaddingPx = 2;
|
||||||
@@ -58,18 +57,19 @@ final class DragCell extends JPanel implements ILocalRepaint {
|
|||||||
public DragCell() {
|
public DragCell() {
|
||||||
super(new MigLayout("insets 0, gap 0, wrap 2"));
|
super(new MigLayout("insets 0, gap 0, wrap 2"));
|
||||||
|
|
||||||
this.add(pnlHead, "w 100% - " + FViewNew.BORDER_T + "px!, "
|
this.add(pnlHead, "w 100% - " + SLayoutConstants.BORDER_T + "px!, "
|
||||||
+ "h " + FViewNew.HEAD_H + "px!");
|
+ "h " + SLayoutConstants.HEAD_H + "px!");
|
||||||
this.add(pnlBorderRight, "w " + FViewNew.BORDER_T + "px!, "
|
this.add(pnlBorderRight, "w " + SLayoutConstants.BORDER_T + "px!, "
|
||||||
+ "h 100% - " + FViewNew.BORDER_T + "px!, span 1 2");
|
+ "h 100% - " + SLayoutConstants.BORDER_T + "px!, span 1 2");
|
||||||
this.add(pnlBody, "w 100% - " + FViewNew.BORDER_T + "px!, "
|
this.add(pnlBody, "w 100% - " + SLayoutConstants.BORDER_T + "px!, "
|
||||||
+ "h 100% - " + (FViewNew.HEAD_H + FViewNew.BORDER_T) + "px!");
|
+ "h 100% - " + (SLayoutConstants.HEAD_H + SLayoutConstants.BORDER_T) + "px!");
|
||||||
this.add(pnlBorderBottom, "w 100% - " + FViewNew.BORDER_T + "px!, "
|
this.add(pnlBorderBottom, "w 100% - " + SLayoutConstants.BORDER_T + "px!, "
|
||||||
+ "h " + FViewNew.BORDER_T + "px!");
|
+ "h " + SLayoutConstants.BORDER_T + "px!");
|
||||||
|
|
||||||
|
this.setOpaque(false);
|
||||||
|
pnlHead.setOpaque(false);
|
||||||
|
|
||||||
this.setBackground(Color.black);
|
|
||||||
pnlHead.setBackground(Color.DARK_GRAY);
|
pnlHead.setBackground(Color.DARK_GRAY);
|
||||||
pnlBody.setBackground(Color.LIGHT_GRAY);
|
|
||||||
|
|
||||||
lblOverflow.setForeground(Color.white);
|
lblOverflow.setForeground(Color.white);
|
||||||
lblOverflow.setHorizontalAlignment(SwingConstants.CENTER);
|
lblOverflow.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
@@ -117,7 +117,7 @@ final class DragCell extends JPanel implements ILocalRepaint {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a defensive copy list of all documents in this cell.
|
* Returns a defensive copy list of all documents in this cell.
|
||||||
* @return {@link java.util.List}<{@link forge.gui.layout.IVDoc}>
|
* @return {@link java.util.List}<{@link forge.gui.framework.IVDoc}>
|
||||||
*/
|
*/
|
||||||
public List<IVDoc> getDocs() {
|
public List<IVDoc> getDocs() {
|
||||||
final List<IVDoc> clone = new ArrayList<IVDoc>();
|
final List<IVDoc> clone = new ArrayList<IVDoc>();
|
||||||
@@ -237,11 +237,11 @@ final class DragCell extends JPanel implements ILocalRepaint {
|
|||||||
this.smoothH = h0;
|
this.smoothH = h0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Adds a document to the layout and tabs.
|
/** Adds a document to the tabs.
|
||||||
* @param doc0   {@link forge.gui.layout.IVDoc} */
|
* @param doc0   {@link forge.gui.framework.IVDoc} */
|
||||||
public void addDoc(final IVDoc doc0) {
|
public void addDoc(final IVDoc doc0) {
|
||||||
pnlBody.add(doc0.getDocumentID().toString(), doc0.getDocument());
|
|
||||||
allDocs.add(doc0);
|
allDocs.add(doc0);
|
||||||
|
doc0.setParentCell(this);
|
||||||
pnlHead.add(doc0.getTabLabel(), "h 100%!, gap " + tabPaddingPx + "px " + tabPaddingPx + "px 0 0", allDocs.size() - 1);
|
pnlHead.add(doc0.getTabLabel(), "h 100%!, gap " + tabPaddingPx + "px " + tabPaddingPx + "px 0 0", allDocs.size() - 1);
|
||||||
|
|
||||||
// Ensure that a tab is selected
|
// Ensure that a tab is selected
|
||||||
@@ -249,44 +249,52 @@ final class DragCell extends JPanel implements ILocalRepaint {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Removes a document from the layout and tabs.
|
/** Removes a document from the layout and tabs.
|
||||||
* @param doc0   {@link forge.gui.layout.IVDoc} */
|
* @param doc0   {@link forge.gui.framework.IVDoc} */
|
||||||
public void removeDoc(final IVDoc doc0) {
|
public void removeDoc(final IVDoc doc0) {
|
||||||
pnlBody.remove(doc0.getDocument());
|
|
||||||
allDocs.remove(doc0);
|
allDocs.remove(doc0);
|
||||||
pnlHead.remove(doc0.getTabLabel());
|
pnlHead.remove(doc0.getTabLabel());
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Deselects previous selection, if exists, and then
|
/** - Deselects previous selection, if there is one<br>
|
||||||
* selects a tab in the title bar. <br><br><b>null</b> will reset
|
* - Decrements the priorities of all other tabs<br>
|
||||||
|
* - Sets selected as priority 1<br>
|
||||||
|
*
|
||||||
|
* <br><b>null</b> will reset
|
||||||
* (deselect all tabs, and then select the first in the group).
|
* (deselect all tabs, and then select the first in the group).
|
||||||
|
*
|
||||||
* <br><br>Unless there are no tab docs in this cell, there
|
* <br><br>Unless there are no tab docs in this cell, there
|
||||||
* will always be a selection.
|
* will always be a selection.
|
||||||
*
|
*
|
||||||
* @param doc0   {@link forge.gui.layout.IVDoc} tab document.
|
* @param doc0   {@link forge.gui.framework.IVDoc} tab document.
|
||||||
*/
|
*/
|
||||||
public void setSelected(final IVDoc doc0) {
|
public void setSelected(final IVDoc doc0) {
|
||||||
docSelected = null;
|
docSelected = null;
|
||||||
|
pnlBody.removeAll();
|
||||||
|
|
||||||
// Priorities are used to "remember" tab selection history.
|
// Priorities are used to "remember" tab selection history.
|
||||||
for (final IVDoc t : allDocs) {
|
for (final IVDoc doc : allDocs) {
|
||||||
if (t.equals(doc0)) {
|
if (doc.equals(doc0)) {
|
||||||
docSelected = doc0;
|
docSelected = doc0;
|
||||||
t.getTabLabel().priorityOne();
|
doc.getTabLabel().priorityOne();
|
||||||
docSelected.getTabLabel().setSelected(true);
|
doc.getTabLabel().setSelected(true);
|
||||||
cards.show(pnlBody, docSelected.getDocumentID().toString());
|
doc.populate();
|
||||||
|
doc.getControl().update();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
t.getTabLabel().setSelected(false);
|
doc.getTabLabel().setSelected(false);
|
||||||
t.getTabLabel().priorityDecrease();
|
doc.getTabLabel().priorityDecrease();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pnlBody.revalidate();
|
||||||
|
pnlBody.repaint();
|
||||||
|
|
||||||
// Reached the end without a selection? Select the first in the group.
|
// Reached the end without a selection? Select the first in the group.
|
||||||
if (docSelected == null && allDocs.size() > 0) { setSelected(allDocs.get(0)); }
|
if (docSelected == null && allDocs.size() > 0) { setSelected(allDocs.get(0)); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns currently selected document in this cell.
|
/** Returns currently selected document in this cell.
|
||||||
* @return {@link forge.gui.layout.IVDoc} */
|
* @return {@link forge.gui.framework.IVDoc} */
|
||||||
public IVDoc getSelected() {
|
public IVDoc getSelected() {
|
||||||
return docSelected;
|
return docSelected;
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,13 @@
|
|||||||
package forge.gui.layout;
|
package forge.gui.framework;
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
|
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.border.EmptyBorder;
|
import javax.swing.border.EmptyBorder;
|
||||||
|
|
||||||
|
import forge.gui.toolbox.FSkin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The tab label object in drag layout.
|
* The tab label object in drag layout.
|
||||||
* No modification should be necessary to this object.
|
* No modification should be necessary to this object.
|
||||||
@@ -68,15 +69,15 @@ public final class DragTab extends JLabel implements ILocalRepaint {
|
|||||||
@Override
|
@Override
|
||||||
public void paintComponent(final Graphics g) {
|
public void paintComponent(final Graphics g) {
|
||||||
if (!selected) {
|
if (!selected) {
|
||||||
g.setColor(Color.white);
|
g.setColor(FSkin.getColor(FSkin.Colors.CLR_BORDERS));
|
||||||
g.fillRoundRect(0, 0, getWidth() - 1, getHeight() * 2, 6, 6);
|
g.fillRoundRect(0, 0, getWidth() - 1, getHeight() * 2, 6, 6);
|
||||||
g.setColor(Color.LIGHT_GRAY);
|
g.setColor(FSkin.getColor(FSkin.Colors.CLR_INACTIVE));
|
||||||
g.drawRoundRect(0, 0, getWidth() - 1, getHeight() * 2, 6, 6);
|
g.drawRoundRect(0, 0, getWidth() - 1, getHeight() * 2, 6, 6);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
g.setColor(Color.orange);
|
g.setColor(FSkin.getColor(FSkin.Colors.CLR_ACTIVE));
|
||||||
g.fillRoundRect(0, 0, getWidth() - 1, getHeight() * 2, 6, 6);
|
g.fillRoundRect(0, 0, getWidth() - 1, getHeight() * 2, 6, 6);
|
||||||
g.setColor(Color.red);
|
g.setColor(FSkin.getColor(FSkin.Colors.CLR_BORDERS));
|
||||||
g.drawRoundRect(0, 0, getWidth() - 1, getHeight() * 2, 6, 6);
|
g.drawRoundRect(0, 0, getWidth() - 1, getHeight() * 2, 6, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,13 +1,12 @@
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package forge.gui.layout;
|
package forge.gui.framework;
|
||||||
|
|
||||||
import forge.gui.match.nonsingleton.VField;
|
|
||||||
import forge.gui.match.nonsingleton.VHand;
|
|
||||||
import forge.gui.match.views.VAntes;
|
import forge.gui.match.views.VAntes;
|
||||||
import forge.gui.match.views.VCombat;
|
import forge.gui.match.views.VCombat;
|
||||||
import forge.gui.match.views.VDetail;
|
import forge.gui.match.views.VDetail;
|
||||||
|
import forge.gui.match.views.VDev;
|
||||||
import forge.gui.match.views.VDock;
|
import forge.gui.match.views.VDock;
|
||||||
import forge.gui.match.views.VLog;
|
import forge.gui.match.views.VLog;
|
||||||
import forge.gui.match.views.VMessage;
|
import forge.gui.match.views.VMessage;
|
||||||
@@ -15,10 +14,8 @@ import forge.gui.match.views.VPicture;
|
|||||||
import forge.gui.match.views.VPlayers;
|
import forge.gui.match.views.VPlayers;
|
||||||
import forge.gui.match.views.VStack;
|
import forge.gui.match.views.VStack;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* These are the identifiers for tabs found in the Drag3 layout.
|
* These are the identifiers for tabs found in the drag layout.
|
||||||
* These IDs are used in the save XML and card layouts.
|
* These IDs are used in the save XML and card layouts.
|
||||||
*
|
*
|
||||||
* <br><br><i>(E at beginning of class name denotes an enum.)</i>
|
* <br><br><i>(E at beginning of class name denotes an enum.)</i>
|
||||||
@@ -34,17 +31,17 @@ public enum EDocID { /** */
|
|||||||
REPORT_LOG (VLog.SINGLETON_INSTANCE), /** */
|
REPORT_LOG (VLog.SINGLETON_INSTANCE), /** */
|
||||||
REPORT_PLAYERS (VPlayers.SINGLETON_INSTANCE), /** */
|
REPORT_PLAYERS (VPlayers.SINGLETON_INSTANCE), /** */
|
||||||
|
|
||||||
// Current user's panels
|
DEV_MODE (VDev.SINGLETON_INSTANCE), /** */
|
||||||
YOUR_HAND (VHand.SINGLETON_INSTANCE), /** */
|
BUTTON_DOCK (VDock.SINGLETON_INSTANCE), /** */
|
||||||
YOUR_BATTLEFIELD (VField.SINGLETON_INSTANCE), /** */
|
|
||||||
YOUR_DOCK (VDock.SINGLETON_INSTANCE), /** */
|
|
||||||
|
|
||||||
// Non-user battlefields (AI or teammate), use setDoc to activate.
|
// Non-user battlefields (AI or teammate), use setDoc to register.
|
||||||
BATTLEFIELD_1 (null), /** */
|
FIELD_0 (null), /** */
|
||||||
BATTLEFIELD_2 (null), /** */
|
FIELD_1 (null), /** */
|
||||||
BATTLEFIELD_3 (null), /** */
|
FIELD_2 (null), /** */
|
||||||
|
FIELD_3 (null), /** */
|
||||||
|
|
||||||
// Non-user hands (AI or teammate), use setDoc to activate.
|
// Non-user hands (AI or teammate), use setDoc to register.
|
||||||
|
HAND_0 (null), /** */
|
||||||
HAND_1 (null), /** */
|
HAND_1 (null), /** */
|
||||||
HAND_2 (null), /** */
|
HAND_2 (null), /** */
|
||||||
HAND_3 (null); /** */
|
HAND_3 (null); /** */
|
||||||
@@ -52,23 +49,19 @@ public enum EDocID { /** */
|
|||||||
// End enum declarations, start enum methods.
|
// End enum declarations, start enum methods.
|
||||||
private IVDoc vDoc;
|
private IVDoc vDoc;
|
||||||
|
|
||||||
/** @param doc0   {@link forge.gui.layout.IVDoc} */
|
/** @param doc0   {@link forge.gui.framework.IVDoc} */
|
||||||
EDocID(final IVDoc doc0) {
|
EDocID(final IVDoc doc0) {
|
||||||
this.vDoc = doc0;
|
this.vDoc = doc0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return {@link forge.gui.layout.IVDoc} */
|
/** @param doc0   {@link forge.gui.framework.IVDoc} */
|
||||||
public IVDoc getDoc() {
|
public void setDoc(final IVDoc doc0) {
|
||||||
return vDoc;
|
this.vDoc = doc0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/** @return {@link forge.gui.framework.IVDoc} */
|
||||||
* Register non-singleton tab instances using this method.
|
public IVDoc getDoc() {
|
||||||
*
|
if (vDoc == null) { throw new NullPointerException("No document found!"); }
|
||||||
* @param id0   {@link forge.gui.layout.EDocID}
|
return vDoc;
|
||||||
* @param doc0   {@link forge.gui.layout.IVDoc}
|
|
||||||
*/
|
|
||||||
public void setDoc(EDocID id0, IVDoc doc0) {
|
|
||||||
id0.vDoc = doc0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package forge.gui.layout;
|
package forge.gui.framework;
|
||||||
|
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dictates methods required for any controller
|
* Dictates methods required for any controller
|
||||||
* of an {@link forge.gui.layout.IVDoc}.
|
* of an {@link forge.gui.framework.IVDoc}.
|
||||||
*
|
*
|
||||||
* <br><br><i>(I at beginning of class name denotes an interface.)</i>
|
* <br><br><i>(I at beginning of class name denotes an interface.)</i>
|
||||||
* <br><i>(C at beginning of class name denotes a controller class.)</i>
|
* <br><i>(C at beginning of class name denotes a controller class.)</i>
|
||||||
@@ -14,14 +14,17 @@ public interface ICDoc {
|
|||||||
* Fires when this controller's view tab is selected.
|
* Fires when this controller's view tab is selected.
|
||||||
* Since this method is fired when all tabs are first
|
* Since this method is fired when all tabs are first
|
||||||
* initialized, be wary of NPEs created by referring to
|
* initialized, be wary of NPEs created by referring to
|
||||||
* non-existing components.
|
* non-existent components.
|
||||||
*
|
*
|
||||||
* @return {@link forge.Command} */
|
* @return {@link forge.Command} */
|
||||||
Command getCommandOnSelect();
|
Command getCommandOnSelect();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Call this method after the view singleton has been fully realized
|
* Call this method after the view singleton has been fully realized
|
||||||
* for the first time. This method should ideally only be called once.
|
* for the first time. It should execute operations which should only
|
||||||
|
* be done once, but require non-null view components.<br><br>
|
||||||
|
*
|
||||||
|
* This method should only be called once, in FView, after singletons are populated.
|
||||||
*/
|
*/
|
||||||
void initialize();
|
void initialize();
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package forge.gui.layout;
|
package forge.gui.framework;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This interface provides a unifying type to all enums
|
* This interface provides a unifying type to all enums
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package forge.gui.layout;
|
package forge.gui.framework;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This interface requires a repaintThis() method, which
|
* This interface requires a repaintThis() method, which
|
||||||
62
src/main/java/forge/gui/framework/IVDoc.java
Normal file
62
src/main/java/forge/gui/framework/IVDoc.java
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
package forge.gui.framework;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface provides a unifying type to any component
|
||||||
|
* (usually JPanels or JScrollPanes) which could be used as
|
||||||
|
* a tab. A single one of these components is referred to as
|
||||||
|
* a "document" throughout the codebase. The tabs and their
|
||||||
|
* documents are contained in "cells" for resizing and dragging.
|
||||||
|
*
|
||||||
|
* <br><br><i>(I at beginning of class name denotes an interface.)</i>
|
||||||
|
* <br><i>(V at beginning of class name denotes a view class.)</i>
|
||||||
|
*/
|
||||||
|
public interface IVDoc {
|
||||||
|
/**
|
||||||
|
* Returns the ID used to identify this tab in save XML and card layouts.
|
||||||
|
*
|
||||||
|
* @return {@link forge.gui.framework.EDocID}
|
||||||
|
*/
|
||||||
|
EDocID getDocumentID();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns tab label object used in title bars.
|
||||||
|
*
|
||||||
|
* @return {@link forge.gui.framework.DragTab}
|
||||||
|
*/
|
||||||
|
DragTab getTabLabel();
|
||||||
|
|
||||||
|
/** Retrieves control object associated with this document.
|
||||||
|
* @return {@link forge.gui.home.ICSubmenu}
|
||||||
|
*/
|
||||||
|
ICDoc getControl();
|
||||||
|
|
||||||
|
/** Sets the current parent cell of this view,
|
||||||
|
* allowing access to its body and head sections.
|
||||||
|
*
|
||||||
|
* @param cell0   {@link forge.gui.framework.DragCell}
|
||||||
|
*/
|
||||||
|
void setParentCell(DragCell cell0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets parent cell for this view.
|
||||||
|
*
|
||||||
|
* @return {@link forge.gui.framework.DragCell}
|
||||||
|
*/
|
||||||
|
DragCell getParentCell();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Targets the drag cell body (use <code>parentCell.getBody()</code>).
|
||||||
|
* Populates panel components, independent of constructor.
|
||||||
|
* Expected to provide a completely fresh layout to the body panel.
|
||||||
|
* <br><br>
|
||||||
|
* Styling and adding of lower-level components for this view
|
||||||
|
* should happen once, in constructor. This method is
|
||||||
|
* only for removing / adding top-level components.
|
||||||
|
* <br><br>
|
||||||
|
* The body panel will be empty when this method is called.
|
||||||
|
* However, its layout may need to be redefined as required.
|
||||||
|
*/
|
||||||
|
void populate();
|
||||||
|
}
|
||||||
23
src/main/java/forge/gui/framework/IVTopLevelUI.java
Normal file
23
src/main/java/forge/gui/framework/IVTopLevelUI.java
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package forge.gui.framework;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface provides a unifying type for all top-level
|
||||||
|
* UI components.
|
||||||
|
*
|
||||||
|
* <br><br><i>(I at beginning of class name denotes an interface.)</i>
|
||||||
|
* <br><i>(V at beginning of class name denotes a view class.)</i>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface IVTopLevelUI {
|
||||||
|
/** Called during the preload sequence, this method caches
|
||||||
|
* all of the children singletons and instances. */
|
||||||
|
void instantiate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes all children and (re)populates top level content,
|
||||||
|
* independent of constructor. Expected to provide
|
||||||
|
* a completely fresh layout on the component.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void populate();
|
||||||
|
}
|
||||||
87
src/main/java/forge/gui/framework/SDisplayUtil.java
Normal file
87
src/main/java/forge/gui/framework/SDisplayUtil.java
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
package forge.gui.framework;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Experimental static factory for generic operations carried out
|
||||||
|
* onto specific members of the framework. Doublestrike 11-04-12
|
||||||
|
*
|
||||||
|
* <br><br><i>(S at beginning of class name denotes a static factory.)</i>
|
||||||
|
*/
|
||||||
|
public class SDisplayUtil {
|
||||||
|
private static boolean remindIsRunning = false;
|
||||||
|
private static int counter = 0;
|
||||||
|
private static int[] newA = null, newR = null, newG = null, newB = null;
|
||||||
|
private static Timer timer1 = null;
|
||||||
|
|
||||||
|
/** Flashes animation on input panel if play is currently waiting on input.
|
||||||
|
*
|
||||||
|
* @param tab0   {@link java.gui.framework.IVDoc}
|
||||||
|
*/
|
||||||
|
public static void remind(final IVDoc tab0) {
|
||||||
|
showTab(tab0);
|
||||||
|
final JPanel pnl = tab0.getParentCell().getBody();
|
||||||
|
|
||||||
|
// To adjust, only touch these two values.
|
||||||
|
final int steps = 5; // Number of delays
|
||||||
|
final int delay = 80; // Milliseconds between steps
|
||||||
|
|
||||||
|
if (remindIsRunning) { return; }
|
||||||
|
if (pnl.equals(null)) { return; }
|
||||||
|
|
||||||
|
remindIsRunning = true;
|
||||||
|
final int oldR = pnl.getBackground().getRed();
|
||||||
|
final int oldG = pnl.getBackground().getGreen();
|
||||||
|
final int oldB = pnl.getBackground().getBlue();
|
||||||
|
final int oldA = pnl.getBackground().getAlpha();
|
||||||
|
counter = 0;
|
||||||
|
newR = new int[steps];
|
||||||
|
newG = new int[steps];
|
||||||
|
newB = new int[steps];
|
||||||
|
newA = new int[steps];
|
||||||
|
|
||||||
|
for (int i = 0; i < steps; i++) {
|
||||||
|
newR[i] = (int) ((255 - oldR) / steps * i);
|
||||||
|
newG[i] = (int) (oldG / steps * i);
|
||||||
|
newB[i] = (int) (oldB / steps * i);
|
||||||
|
newA[i] = (int) ((255 - oldA) / steps * i);
|
||||||
|
}
|
||||||
|
|
||||||
|
final TimerTask tt = new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
counter++;
|
||||||
|
if (counter != (steps - 1)) {
|
||||||
|
SwingUtilities.invokeLater(new Runnable() { @Override
|
||||||
|
public void run() {
|
||||||
|
pnl.setBackground(new Color(newR[counter], oldG, oldB, newA[counter]));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
SwingUtilities.invokeLater(new Runnable() { @Override
|
||||||
|
public void run() { pnl.setBackground(new Color(oldR, oldG, oldB, oldA)); } });
|
||||||
|
remindIsRunning = false;
|
||||||
|
timer1.cancel();
|
||||||
|
newR = null;
|
||||||
|
newG = null;
|
||||||
|
newB = null;
|
||||||
|
newA = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
timer1 = new Timer();
|
||||||
|
timer1.scheduleAtFixedRate(tt, 0, delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param tab0   {@link java.gui.framework.IVDoc} */
|
||||||
|
public static void showTab(final IVDoc tab0) {
|
||||||
|
tab0.getParentCell().setSelected(tab0);
|
||||||
|
}
|
||||||
|
}
|
||||||
173
src/main/java/forge/gui/framework/SIOUtil.java
Normal file
173
src/main/java/forge/gui/framework/SIOUtil.java
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
package forge.gui.framework;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
import javax.xml.stream.XMLEventFactory;
|
||||||
|
import javax.xml.stream.XMLEventReader;
|
||||||
|
import javax.xml.stream.XMLEventWriter;
|
||||||
|
import javax.xml.stream.XMLInputFactory;
|
||||||
|
import javax.xml.stream.XMLOutputFactory;
|
||||||
|
import javax.xml.stream.XMLStreamException;
|
||||||
|
import javax.xml.stream.events.Attribute;
|
||||||
|
import javax.xml.stream.events.StartElement;
|
||||||
|
import javax.xml.stream.events.XMLEvent;
|
||||||
|
|
||||||
|
import forge.view.FView;
|
||||||
|
|
||||||
|
|
||||||
|
/** Package-private class for handling layout saving and loading. */
|
||||||
|
public final class SIOUtil {
|
||||||
|
/** Each cell must save these elements of its display. */
|
||||||
|
private enum Property {
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
w,
|
||||||
|
h,
|
||||||
|
doc
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final String FILE_DEFAULT = "res/layouts/match_default.xml";
|
||||||
|
private static final String FILE_PREFERRED = "res/layouts/match_preferred.xml";
|
||||||
|
private static final XMLEventFactory EF = XMLEventFactory.newInstance();
|
||||||
|
private static final XMLEvent NEWLINE = EF.createDTD("\n");
|
||||||
|
private static final XMLEvent TAB = EF.createDTD("\t");
|
||||||
|
|
||||||
|
/** Publicly-accessible save method, to neatly handle exception handling. */
|
||||||
|
public static void saveLayout() {
|
||||||
|
if (SwingUtilities.isEventDispatchThread()) {
|
||||||
|
throw new IllegalThreadStateException("This operation should be independent of the EDT.");
|
||||||
|
}
|
||||||
|
|
||||||
|
try { save(); }
|
||||||
|
catch (final Exception e) { e.printStackTrace(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Publicly-accessible load method, to neatly handle exception handling. */
|
||||||
|
public static void loadLayout() {
|
||||||
|
if (SwingUtilities.isEventDispatchThread()) {
|
||||||
|
throw new IllegalThreadStateException("This operation should be independent of the EDT.");
|
||||||
|
}
|
||||||
|
|
||||||
|
try { load(); }
|
||||||
|
catch (final Exception e) { e.printStackTrace(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void save() throws Exception {
|
||||||
|
final XMLOutputFactory out = XMLOutputFactory.newInstance();
|
||||||
|
final XMLEventWriter writer = out.createXMLEventWriter(new FileOutputStream(FILE_PREFERRED));
|
||||||
|
final List<DragCell> cells = FView.SINGLETON_INSTANCE.getDragCells();
|
||||||
|
final JPanel pnl = FView.SINGLETON_INSTANCE.getPnlContent();
|
||||||
|
double x0, y0, w0, h0;
|
||||||
|
|
||||||
|
writer.add(EF.createStartDocument());
|
||||||
|
writer.add(NEWLINE);
|
||||||
|
writer.add(EF.createStartElement("", "", "layout"));
|
||||||
|
writer.add(NEWLINE);
|
||||||
|
|
||||||
|
for (final DragCell cell : cells) {
|
||||||
|
x0 = ((double) Math.round(((double) cell.getX() / (double) pnl.getWidth()) * 1000)) / 1000;
|
||||||
|
y0 = ((double) Math.round(((double) cell.getY() / (double) pnl.getHeight()) * 1000)) / 1000;
|
||||||
|
w0 = ((double) Math.round(((double) cell.getW() / (double) pnl.getWidth()) * 1000)) / 1000;
|
||||||
|
h0 = ((double) Math.round(((double) cell.getH() / (double) pnl.getHeight()) * 1000)) / 1000;
|
||||||
|
|
||||||
|
//cell.setRoughBounds(x, y, w, h);
|
||||||
|
|
||||||
|
writer.add(TAB);
|
||||||
|
writer.add(EF.createStartElement("", "", "cell"));
|
||||||
|
writer.add(EF.createAttribute(Property.x.toString(), String.valueOf(x0)));
|
||||||
|
writer.add(EF.createAttribute(Property.y.toString(), String.valueOf(y0)));
|
||||||
|
writer.add(EF.createAttribute(Property.w.toString(), String.valueOf(w0)));
|
||||||
|
writer.add(EF.createAttribute(Property.h.toString(), String.valueOf(h0)));
|
||||||
|
writer.add(NEWLINE);
|
||||||
|
|
||||||
|
for (final IVDoc vDoc : cell.getDocs()) {
|
||||||
|
createNode(writer, Property.doc, vDoc.getDocumentID().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.add(TAB);
|
||||||
|
writer.add(EF.createEndElement("", "", "cell"));
|
||||||
|
writer.add(NEWLINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.add(EF.createEndDocument());
|
||||||
|
writer.flush();
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void load() throws Exception {
|
||||||
|
final FView view = FView.SINGLETON_INSTANCE;
|
||||||
|
final XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
||||||
|
|
||||||
|
final XMLEventReader reader;
|
||||||
|
if (new File(FILE_PREFERRED).exists()) {
|
||||||
|
reader = inputFactory.createXMLEventReader(new FileInputStream(FILE_PREFERRED));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
reader = inputFactory.createXMLEventReader(new FileInputStream(FILE_DEFAULT));
|
||||||
|
}
|
||||||
|
|
||||||
|
view.removeAllDragCells();
|
||||||
|
XMLEvent event;
|
||||||
|
StartElement element;
|
||||||
|
Iterator<?> attributes;
|
||||||
|
Attribute attribute;
|
||||||
|
DragCell cell = null;
|
||||||
|
double x0 = 0, y0 = 0, w0 = 0, h0 = 0;
|
||||||
|
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
event = reader.nextEvent();
|
||||||
|
|
||||||
|
if (event.isStartElement()) {
|
||||||
|
//&& event.asStartElement().getName().getLocalPart().equals("cell")) {
|
||||||
|
element = event.asStartElement();
|
||||||
|
|
||||||
|
if (element.getName().getLocalPart().equals("cell")) {
|
||||||
|
attributes = element.getAttributes();
|
||||||
|
while (attributes.hasNext()) {
|
||||||
|
attribute = (Attribute) attributes.next();
|
||||||
|
if (attribute.getName().toString().equals(Property.x.toString())) {
|
||||||
|
x0 = Double.valueOf(attribute.getValue());
|
||||||
|
}
|
||||||
|
else if (attribute.getName().toString().equals(Property.y.toString())) {
|
||||||
|
y0 = Double.valueOf(attribute.getValue());
|
||||||
|
}
|
||||||
|
else if (attribute.getName().toString().equals(Property.w.toString())) {
|
||||||
|
w0 = Double.valueOf(attribute.getValue());
|
||||||
|
}
|
||||||
|
else if (attribute.getName().toString().equals(Property.h.toString())) {
|
||||||
|
h0 = Double.valueOf(attribute.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cell = new DragCell();
|
||||||
|
cell.setRoughBounds(x0, y0, w0, h0);
|
||||||
|
FView.SINGLETON_INSTANCE.addDragCell(cell);
|
||||||
|
}
|
||||||
|
else if (element.getName().getLocalPart().equals("doc")) {
|
||||||
|
event = reader.nextEvent();
|
||||||
|
cell.addDoc(EDocID.valueOf(event.asCharacters().getData()).getDoc());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rough bounds are all in place; resize the window.
|
||||||
|
SResizingUtil.resizeWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void createNode(final XMLEventWriter writer0, final Property name0,
|
||||||
|
final String val0) throws XMLStreamException {
|
||||||
|
|
||||||
|
writer0.add(TAB);
|
||||||
|
writer0.add(TAB);
|
||||||
|
writer0.add(EF.createStartElement("", "", name0.toString()));
|
||||||
|
writer0.add(EF.createCharacters(val0));
|
||||||
|
writer0.add(EF.createEndElement("", "", name0.toString()));
|
||||||
|
writer0.add(NEWLINE);
|
||||||
|
}
|
||||||
|
}
|
||||||
14
src/main/java/forge/gui/framework/SLayoutConstants.java
Normal file
14
src/main/java/forge/gui/framework/SLayoutConstants.java
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
package forge.gui.framework;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds static constants used throughout layout.
|
||||||
|
*
|
||||||
|
* <br><br><i>(S at beginning of class name denotes a static factory.)</i>
|
||||||
|
*/
|
||||||
|
public class SLayoutConstants {
|
||||||
|
/** Height of head area in drag panel. */
|
||||||
|
public static final int HEAD_H = 20;
|
||||||
|
|
||||||
|
/** Thickness of resize border in drag panel. */
|
||||||
|
public static final int BORDER_T = 5;
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package forge.gui.layout;
|
package forge.gui.framework;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
@@ -9,19 +9,21 @@ import java.awt.event.MouseListener;
|
|||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
import forge.view.FView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Package-private utilities for generic overflow behavior
|
* Package-private utilities for generic overflow behavior
|
||||||
* in title bar for any cell in layout.
|
* in title bar for any cell in layout.
|
||||||
*
|
*
|
||||||
* <br><br><i>(S at beginning of class name denotes a static factory.)</i>
|
* <br><br><i>(S at beginning of class name denotes a static factory.)</i>
|
||||||
*/
|
*/
|
||||||
final class SOverflowUtil {
|
public final class SOverflowUtil {
|
||||||
private static final MouseListener MAD_OVERFLOW_SELECT = new MouseAdapter() {
|
private static final MouseListener MAD_OVERFLOW_SELECT = new MouseAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void mouseReleased(final MouseEvent e) {
|
public void mouseReleased(final MouseEvent e) {
|
||||||
final JLabel src = ((JLabel) e.getSource());
|
final JLabel src = ((JLabel) e.getSource());
|
||||||
final DragCell pnlParent = ((DragCell) src.getParent().getParent());
|
final DragCell pnlParent = ((DragCell) src.getParent().getParent());
|
||||||
final JPanel pnlOverflow = FViewNew.SINGLETON_INSTANCE.getPnlTabOverflow();
|
final JPanel pnlOverflow = FView.SINGLETON_INSTANCE.getPnlTabOverflow();
|
||||||
final String constraints = "w 150px!, h 20px!, gap 5px 5px 2px 2px";
|
final String constraints = "w 150px!, h 20px!, gap 5px 5px 2px 2px";
|
||||||
final int w = 160;
|
final int w = 160;
|
||||||
int h = 0;
|
int h = 0;
|
||||||
@@ -36,11 +38,11 @@ final class SOverflowUtil {
|
|||||||
pnlOverflow.revalidate();
|
pnlOverflow.revalidate();
|
||||||
pnlOverflow.setVisible(true);
|
pnlOverflow.setVisible(true);
|
||||||
|
|
||||||
int x = src.getParent().getParent().getX() + src.getX() + FViewNew.BORDER_T;
|
int x = src.getParent().getParent().getX() + src.getX() + SLayoutConstants.BORDER_T;
|
||||||
final int y = src.getParent().getParent().getY() + src.getY() + FViewNew.BORDER_T + src.getHeight() + 3;
|
final int y = src.getParent().getParent().getY() + src.getY() + SLayoutConstants.BORDER_T + src.getHeight() + 3;
|
||||||
|
|
||||||
// If overflow will appear offscreen, offset.
|
// If overflow will appear offscreen, offset.
|
||||||
if (x + w > FViewNew.SINGLETON_INSTANCE.getPnlContent().getWidth()) {
|
if (x + w > FView.SINGLETON_INSTANCE.getPnlContent().getWidth()) {
|
||||||
x += src.getWidth() - w;
|
x += src.getWidth() - w;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,7 +66,7 @@ final class SOverflowUtil {
|
|||||||
private static final MouseListener MAD_HIDE_OVERFLOW = new MouseAdapter() {
|
private static final MouseListener MAD_HIDE_OVERFLOW = new MouseAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(final MouseEvent e) {
|
public void mouseClicked(final MouseEvent e) {
|
||||||
final JPanel pnl = FViewNew.SINGLETON_INSTANCE.getPnlTabOverflow();
|
final JPanel pnl = FView.SINGLETON_INSTANCE.getPnlTabOverflow();
|
||||||
if (pnl != null) {
|
if (pnl != null) {
|
||||||
pnl.setVisible(pnl.isVisible() ? false : true);
|
pnl.setVisible(pnl.isVisible() ? false : true);
|
||||||
}
|
}
|
||||||
@@ -103,7 +105,7 @@ final class SOverflowUtil {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed(final MouseEvent e) {
|
public void mousePressed(final MouseEvent e) {
|
||||||
FViewNew.SINGLETON_INSTANCE.getPnlTabOverflow().setVisible(false);
|
FView.SINGLETON_INSTANCE.getPnlTabOverflow().setVisible(false);
|
||||||
parent0.setSelected(tab0);
|
parent0.setSelected(tab0);
|
||||||
parent0.refresh();
|
parent0.refresh();
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package forge.gui.layout;
|
package forge.gui.framework;
|
||||||
|
|
||||||
import java.awt.Container;
|
import java.awt.Container;
|
||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
@@ -16,14 +16,15 @@ import javax.swing.JLayeredPane;
|
|||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
import forge.gui.toolbox.FSkin;
|
import forge.gui.toolbox.FSkin;
|
||||||
|
import forge.view.FView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Package-private utilities for rearranging drag behavior using
|
* Package-private utilities for rearranging drag behavior using
|
||||||
* the draggable panels registered in FViewNew.
|
* the draggable panels registered in FView.
|
||||||
*
|
*
|
||||||
* <br><br><i>(S at beginning of class name denotes a static factory.)</i>
|
* <br><br><i>(S at beginning of class name denotes a static factory.)</i>
|
||||||
*/
|
*/
|
||||||
final class SRearrangingUtil {
|
public final class SRearrangingUtil {
|
||||||
|
|
||||||
private enum Dropzone {
|
private enum Dropzone {
|
||||||
BODY,
|
BODY,
|
||||||
@@ -42,8 +43,8 @@ final class SRearrangingUtil {
|
|||||||
private static int tempW;
|
private static int tempW;
|
||||||
private static int tempH;
|
private static int tempH;
|
||||||
|
|
||||||
private static JPanel pnlPreview = FViewNew.SINGLETON_INSTANCE.getPnlPreview();
|
private static JPanel pnlPreview = FView.SINGLETON_INSTANCE.getPnlPreview();
|
||||||
private static JLayeredPane pnlDocument = FViewNew.SINGLETON_INSTANCE.getLpnDocument();
|
private static JLayeredPane pnlDocument = FView.SINGLETON_INSTANCE.getLpnDocument();
|
||||||
private static DragCell cellTarget = null;
|
private static DragCell cellTarget = null;
|
||||||
private static DragCell cellSrc = null;
|
private static DragCell cellSrc = null;
|
||||||
private static DragCell cellNew = null;
|
private static DragCell cellNew = null;
|
||||||
@@ -134,7 +135,7 @@ final class SRearrangingUtil {
|
|||||||
evtY = (int) e.getLocationOnScreen().getY();
|
evtY = (int) e.getLocationOnScreen().getY();
|
||||||
|
|
||||||
// Find out over which panel the event occurred.
|
// Find out over which panel the event occurred.
|
||||||
for (final DragCell t : FViewNew.SINGLETON_INSTANCE.getDragCells()) {
|
for (final DragCell t : FView.SINGLETON_INSTANCE.getDragCells()) {
|
||||||
tempX = t.getAbsX();
|
tempX = t.getAbsX();
|
||||||
tempY = t.getAbsY();
|
tempY = t.getAbsY();
|
||||||
tempW = t.getW();
|
tempW = t.getW();
|
||||||
@@ -154,10 +155,10 @@ final class SRearrangingUtil {
|
|||||||
dropzone = Dropzone.LEFT;
|
dropzone = Dropzone.LEFT;
|
||||||
pnlDocument.setCursor(CUR_L);
|
pnlDocument.setCursor(CUR_L);
|
||||||
pnlPreview.setBounds(
|
pnlPreview.setBounds(
|
||||||
cellTarget.getX() + FViewNew.BORDER_T,
|
cellTarget.getX() + SLayoutConstants.BORDER_T,
|
||||||
cellTarget.getY() + FViewNew.BORDER_T,
|
cellTarget.getY() + SLayoutConstants.BORDER_T,
|
||||||
(int) ((tempW - FViewNew.BORDER_T) / 2),
|
(int) ((tempW - SLayoutConstants.BORDER_T) / 2),
|
||||||
tempH - FViewNew.BORDER_T
|
tempH - SLayoutConstants.BORDER_T
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -169,20 +170,20 @@ final class SRearrangingUtil {
|
|||||||
|
|
||||||
pnlPreview.setBounds(
|
pnlPreview.setBounds(
|
||||||
cellTarget.getX() + cellTarget.getW() - tempW,
|
cellTarget.getX() + cellTarget.getW() - tempW,
|
||||||
cellTarget.getY() + FViewNew.BORDER_T,
|
cellTarget.getY() + SLayoutConstants.BORDER_T,
|
||||||
tempW,
|
tempW,
|
||||||
tempH - FViewNew.BORDER_T
|
tempH - SLayoutConstants.BORDER_T
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (evtY < (tempY + nestingMargin + FViewNew.HEAD_H) && evtY > tempY + FViewNew.HEAD_H
|
else if (evtY < (tempY + nestingMargin + SLayoutConstants.HEAD_H) && evtY > tempY + SLayoutConstants.HEAD_H
|
||||||
&& (cellTarget.getH() / 2) > SResizingUtil.H_MIN) {
|
&& (cellTarget.getH() / 2) > SResizingUtil.H_MIN) {
|
||||||
dropzone = Dropzone.TOP;
|
dropzone = Dropzone.TOP;
|
||||||
pnlDocument.setCursor(CUR_T);
|
pnlDocument.setCursor(CUR_T);
|
||||||
|
|
||||||
pnlPreview.setBounds(
|
pnlPreview.setBounds(
|
||||||
cellTarget.getX() + FViewNew.BORDER_T,
|
cellTarget.getX() + SLayoutConstants.BORDER_T,
|
||||||
cellTarget.getY() + FViewNew.BORDER_T,
|
cellTarget.getY() + SLayoutConstants.BORDER_T,
|
||||||
tempW - FViewNew.BORDER_T,
|
tempW - SLayoutConstants.BORDER_T,
|
||||||
(int) (tempH / 2)
|
(int) (tempH / 2)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -193,9 +194,9 @@ final class SRearrangingUtil {
|
|||||||
tempH = (int) Math.round(cellTarget.getH() / 2);
|
tempH = (int) Math.round(cellTarget.getH() / 2);
|
||||||
|
|
||||||
pnlPreview.setBounds(
|
pnlPreview.setBounds(
|
||||||
cellTarget.getX() + FViewNew.BORDER_T,
|
cellTarget.getX() + SLayoutConstants.BORDER_T,
|
||||||
cellTarget.getY() + cellTarget.getH() - tempH,
|
cellTarget.getY() + cellTarget.getH() - tempH,
|
||||||
tempW - FViewNew.BORDER_T,
|
tempW - SLayoutConstants.BORDER_T,
|
||||||
tempH
|
tempH
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -209,10 +210,10 @@ final class SRearrangingUtil {
|
|||||||
pnlDocument.setCursor(CUR_TAB);
|
pnlDocument.setCursor(CUR_TAB);
|
||||||
|
|
||||||
pnlPreview.setBounds(
|
pnlPreview.setBounds(
|
||||||
cellTarget.getX() + FViewNew.BORDER_T,
|
cellTarget.getX() + SLayoutConstants.BORDER_T,
|
||||||
cellTarget.getY() + FViewNew.BORDER_T,
|
cellTarget.getY() + SLayoutConstants.BORDER_T,
|
||||||
tempW - FViewNew.BORDER_T,
|
tempW - SLayoutConstants.BORDER_T,
|
||||||
tempH - FViewNew.BORDER_T
|
tempH - SLayoutConstants.BORDER_T
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -247,7 +248,7 @@ final class SRearrangingUtil {
|
|||||||
cellTarget.setBounds(
|
cellTarget.setBounds(
|
||||||
tempX + cellNew.getW(), tempY,
|
tempX + cellNew.getW(), tempY,
|
||||||
tempW - cellNew.getW(), tempH);
|
tempW - cellNew.getW(), tempH);
|
||||||
FViewNew.SINGLETON_INSTANCE.addDragCell(cellNew);
|
FView.SINGLETON_INSTANCE.addDragCell(cellNew);
|
||||||
break;
|
break;
|
||||||
case RIGHT:
|
case RIGHT:
|
||||||
cellTarget.setBounds(
|
cellTarget.setBounds(
|
||||||
@@ -256,7 +257,7 @@ final class SRearrangingUtil {
|
|||||||
cellNew.setBounds(
|
cellNew.setBounds(
|
||||||
cellTarget.getX() + cellTarget.getW(), tempY ,
|
cellTarget.getX() + cellTarget.getW(), tempY ,
|
||||||
tempW - cellTarget.getW(), tempH);
|
tempW - cellTarget.getW(), tempH);
|
||||||
FViewNew.SINGLETON_INSTANCE.addDragCell(cellNew);
|
FView.SINGLETON_INSTANCE.addDragCell(cellNew);
|
||||||
break;
|
break;
|
||||||
case TOP:
|
case TOP:
|
||||||
cellNew.setBounds(
|
cellNew.setBounds(
|
||||||
@@ -265,7 +266,7 @@ final class SRearrangingUtil {
|
|||||||
cellTarget.setBounds(
|
cellTarget.setBounds(
|
||||||
tempX, tempY + cellNew.getH(),
|
tempX, tempY + cellNew.getH(),
|
||||||
tempW, tempH - cellNew.getH());
|
tempW, tempH - cellNew.getH());
|
||||||
FViewNew.SINGLETON_INSTANCE.addDragCell(cellNew);
|
FView.SINGLETON_INSTANCE.addDragCell(cellNew);
|
||||||
break;
|
break;
|
||||||
case BOTTOM:
|
case BOTTOM:
|
||||||
cellTarget.setBounds(
|
cellTarget.setBounds(
|
||||||
@@ -275,7 +276,7 @@ final class SRearrangingUtil {
|
|||||||
cellNew.setBounds(
|
cellNew.setBounds(
|
||||||
tempX, cellTarget.getY() + cellTarget.getH(),
|
tempX, cellTarget.getY() + cellTarget.getH(),
|
||||||
tempW, tempH - cellTarget.getH());
|
tempW, tempH - cellTarget.getH());
|
||||||
FViewNew.SINGLETON_INSTANCE.addDragCell(cellNew);
|
FView.SINGLETON_INSTANCE.addDragCell(cellNew);
|
||||||
break;
|
break;
|
||||||
case BODY:
|
case BODY:
|
||||||
cellNew = cellTarget;
|
cellNew = cellTarget;
|
||||||
@@ -292,7 +293,7 @@ final class SRearrangingUtil {
|
|||||||
// Remove old cell if necessary
|
// Remove old cell if necessary
|
||||||
if (cellSrc.getDocs().size() == 0) {
|
if (cellSrc.getDocs().size() == 0) {
|
||||||
fillGap();
|
fillGap();
|
||||||
FViewNew.SINGLETON_INSTANCE.removeDragCell(cellSrc);
|
FView.SINGLETON_INSTANCE.removeDragCell(cellSrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
cellSrc.setSelected(srcSelectedDoc);
|
cellSrc.setSelected(srcSelectedDoc);
|
||||||
@@ -301,7 +302,10 @@ final class SRearrangingUtil {
|
|||||||
cellNew.validate();
|
cellNew.validate();
|
||||||
cellNew.refresh();
|
cellNew.refresh();
|
||||||
updateBorders();
|
updateBorders();
|
||||||
SIOUtil.saveLayout();
|
|
||||||
|
final Thread t = new Thread() { @Override
|
||||||
|
public void run() { SIOUtil.saveLayout(); } };
|
||||||
|
t.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The gap created by displaced panels must be filled.
|
/** The gap created by displaced panels must be filled.
|
||||||
@@ -324,7 +328,7 @@ final class SRearrangingUtil {
|
|||||||
foundT = false;
|
foundT = false;
|
||||||
foundB = false;
|
foundB = false;
|
||||||
// Look for matching panels to left of source, expand them to the right.
|
// Look for matching panels to left of source, expand them to the right.
|
||||||
for (final DragCell cell : FViewNew.SINGLETON_INSTANCE.getDragCells()) {
|
for (final DragCell cell : FView.SINGLETON_INSTANCE.getDragCells()) {
|
||||||
if (cell.getAbsX2() != srcX) { continue; }
|
if (cell.getAbsX2() != srcX) { continue; }
|
||||||
|
|
||||||
if (cell.getAbsY() == srcY) {
|
if (cell.getAbsY() == srcY) {
|
||||||
@@ -349,7 +353,7 @@ final class SRearrangingUtil {
|
|||||||
foundT = false;
|
foundT = false;
|
||||||
foundB = false;
|
foundB = false;
|
||||||
// Look for matching panels to right of source, expand them to the left.
|
// Look for matching panels to right of source, expand them to the left.
|
||||||
for (final DragCell cell : FViewNew.SINGLETON_INSTANCE.getDragCells()) {
|
for (final DragCell cell : FView.SINGLETON_INSTANCE.getDragCells()) {
|
||||||
if (cell.getAbsX() != srcX2) { continue; }
|
if (cell.getAbsX() != srcX2) { continue; }
|
||||||
|
|
||||||
if (cell.getAbsY() == srcY) {
|
if (cell.getAbsY() == srcY) {
|
||||||
@@ -374,7 +378,7 @@ final class SRearrangingUtil {
|
|||||||
foundL = false;
|
foundL = false;
|
||||||
foundR = false;
|
foundR = false;
|
||||||
// Look for matching panels below source, expand them upwards.
|
// Look for matching panels below source, expand them upwards.
|
||||||
for (final DragCell cell : FViewNew.SINGLETON_INSTANCE.getDragCells()) {
|
for (final DragCell cell : FView.SINGLETON_INSTANCE.getDragCells()) {
|
||||||
if (cell.getAbsY() != srcY2) { continue; }
|
if (cell.getAbsY() != srcY2) { continue; }
|
||||||
|
|
||||||
if (cell.getAbsX() == srcX) {
|
if (cell.getAbsX() == srcX) {
|
||||||
@@ -399,7 +403,7 @@ final class SRearrangingUtil {
|
|||||||
foundL = false;
|
foundL = false;
|
||||||
foundR = false;
|
foundR = false;
|
||||||
// Look for matching panels above source, expand them downwards.
|
// Look for matching panels above source, expand them downwards.
|
||||||
for (final DragCell cell : FViewNew.SINGLETON_INSTANCE.getDragCells()) {
|
for (final DragCell cell : FView.SINGLETON_INSTANCE.getDragCells()) {
|
||||||
if (cell.getAbsY2() != srcY) { continue; }
|
if (cell.getAbsY2() != srcY) { continue; }
|
||||||
|
|
||||||
if (cell.getAbsX() == srcX) {
|
if (cell.getAbsX() == srcX) {
|
||||||
@@ -426,8 +430,8 @@ final class SRearrangingUtil {
|
|||||||
/** Hides outer borders for components on edges,
|
/** Hides outer borders for components on edges,
|
||||||
* preventing illegal resizing (and misleading cursor). */
|
* preventing illegal resizing (and misleading cursor). */
|
||||||
public static void updateBorders() {
|
public static void updateBorders() {
|
||||||
final List<DragCell> cells = FViewNew.SINGLETON_INSTANCE.getDragCells();
|
final List<DragCell> cells = FView.SINGLETON_INSTANCE.getDragCells();
|
||||||
final JPanel pnlContent = FViewNew.SINGLETON_INSTANCE.getPnlContent();
|
final JPanel pnlContent = FView.SINGLETON_INSTANCE.getPnlContent();
|
||||||
|
|
||||||
for (final DragCell t : cells) {
|
for (final DragCell t : cells) {
|
||||||
if (t.getAbsX2() == (pnlContent.getLocationOnScreen().getX() + pnlContent.getWidth())) {
|
if (t.getAbsX2() == (pnlContent.getLocationOnScreen().getX() + pnlContent.getWidth())) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package forge.gui.layout;
|
package forge.gui.framework;
|
||||||
|
|
||||||
import java.awt.event.ComponentAdapter;
|
import java.awt.event.ComponentAdapter;
|
||||||
import java.awt.event.ComponentEvent;
|
import java.awt.event.ComponentEvent;
|
||||||
@@ -13,15 +13,16 @@ import java.util.Iterator;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.SwingWorker;
|
|
||||||
|
import forge.view.FView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Package-private utilities for resizing drag behavior using
|
* Package-private utilities for resizing drag behavior using
|
||||||
* the draggable panels registered in FViewNew.
|
* the draggable panels registered in FView.
|
||||||
*
|
*
|
||||||
* <br><br><i>(S at beginning of class name denotes a static factory.)</i>
|
* <br><br><i>(S at beginning of class name denotes a static factory.)</i>
|
||||||
*/
|
*/
|
||||||
final class SResizingUtil {
|
public final class SResizingUtil {
|
||||||
private static final List<DragCell> LEFT_PANELS = new ArrayList<DragCell>();
|
private static final List<DragCell> LEFT_PANELS = new ArrayList<DragCell>();
|
||||||
private static final List<DragCell> RIGHT_PANELS = new ArrayList<DragCell>();
|
private static final List<DragCell> RIGHT_PANELS = new ArrayList<DragCell>();
|
||||||
private static final List<DragCell> TOP_PANELS = new ArrayList<DragCell>();
|
private static final List<DragCell> TOP_PANELS = new ArrayList<DragCell>();
|
||||||
@@ -45,7 +46,7 @@ final class SResizingUtil {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseReleased(final MouseEvent e) {
|
public void mouseReleased(final MouseEvent e) {
|
||||||
SResizingUtil.endResizeX();
|
SResizingUtil.endResize();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -57,7 +58,7 @@ final class SResizingUtil {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseReleased(final MouseEvent e) {
|
public void mouseReleased(final MouseEvent e) {
|
||||||
SResizingUtil.endResizeY();
|
SResizingUtil.endResize();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -85,11 +86,11 @@ final class SResizingUtil {
|
|||||||
|
|
||||||
/** */
|
/** */
|
||||||
public static void resizeWindow() {
|
public static void resizeWindow() {
|
||||||
final List<DragCell> cells = FViewNew.SINGLETON_INSTANCE.getDragCells();
|
final List<DragCell> cells = FView.SINGLETON_INSTANCE.getDragCells();
|
||||||
final JPanel pnlContent = FViewNew.SINGLETON_INSTANCE.getPnlContent();
|
final JPanel pnlContent = FView.SINGLETON_INSTANCE.getPnlContent();
|
||||||
final JPanel pnlInsets = FViewNew.SINGLETON_INSTANCE.getPnlInsets();
|
final JPanel pnlInsets = FView.SINGLETON_INSTANCE.getPnlInsets();
|
||||||
|
|
||||||
pnlInsets.setBounds(FViewNew.SINGLETON_INSTANCE.getFrame().getContentPane().getBounds());
|
pnlInsets.setBounds(FView.SINGLETON_INSTANCE.getFrame().getContentPane().getBounds());
|
||||||
pnlInsets.validate();
|
pnlInsets.validate();
|
||||||
|
|
||||||
final int w = pnlContent.getWidth();
|
final int w = pnlContent.getWidth();
|
||||||
@@ -218,7 +219,7 @@ final class SResizingUtil {
|
|||||||
|
|
||||||
// Add all panels who share a left or right edge with the
|
// Add all panels who share a left or right edge with the
|
||||||
// same coordinate as the right edge of the source panel.
|
// same coordinate as the right edge of the source panel.
|
||||||
for (final DragCell t : FViewNew.SINGLETON_INSTANCE.getDragCells()) {
|
for (final DragCell t : FView.SINGLETON_INSTANCE.getDragCells()) {
|
||||||
tempX = t.getAbsX();
|
tempX = t.getAbsX();
|
||||||
tempX2 = t.getAbsX2();
|
tempX2 = t.getAbsX2();
|
||||||
|
|
||||||
@@ -283,7 +284,7 @@ final class SResizingUtil {
|
|||||||
|
|
||||||
// Add all panels who share a top or bottom edge with the
|
// Add all panels who share a top or bottom edge with the
|
||||||
// same coordinate as the bottom edge of the source panel.
|
// same coordinate as the bottom edge of the source panel.
|
||||||
for (final DragCell t : FViewNew.SINGLETON_INSTANCE.getDragCells()) {
|
for (final DragCell t : FView.SINGLETON_INSTANCE.getDragCells()) {
|
||||||
tempY = t.getAbsY();
|
tempY = t.getAbsY();
|
||||||
tempY2 = t.getAbsY2();
|
tempY2 = t.getAbsY2();
|
||||||
|
|
||||||
@@ -329,27 +330,10 @@ final class SResizingUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
public static void endResizeX() {
|
public static void endResize() {
|
||||||
final SwingWorker<Object, Void> w = new SwingWorker<Object, Void>() {
|
final Thread t = new Thread() { @Override
|
||||||
@Override
|
public void run() { SIOUtil.saveLayout(); } };
|
||||||
public Object doInBackground() {
|
t.start();
|
||||||
SIOUtil.saveLayout();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
w.execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
public static void endResizeY() {
|
|
||||||
final SwingWorker<Object, Void> w = new SwingWorker<Object, Void>() {
|
|
||||||
@Override
|
|
||||||
public Object doInBackground() {
|
|
||||||
SIOUtil.saveLayout();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
w.execute();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return {@link java.awt.event.MouseListener} */
|
/** @return {@link java.awt.event.MouseListener} */
|
||||||
@@ -4,6 +4,8 @@ package forge.gui.home;
|
|||||||
* Submenus each belong to a menu group, which
|
* Submenus each belong to a menu group, which
|
||||||
* is used for several functions, such as expanding
|
* is used for several functions, such as expanding
|
||||||
* and collapsing in the menu.
|
* and collapsing in the menu.
|
||||||
|
*
|
||||||
|
* <br><br><i>(E at beginning of class name denotes an enum.)</i>
|
||||||
*/
|
*/
|
||||||
public enum EMenuGroup { /** */
|
public enum EMenuGroup { /** */
|
||||||
SANCTIONED ("Sanctioned Game Formats"), /** */
|
SANCTIONED ("Sanctioned Game Formats"), /** */
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package forge.gui.home;
|
package forge.gui.home;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Write javadoc for this type.
|
* These are the identifiers for topics found in home screen submenus.
|
||||||
|
*
|
||||||
|
* <br><br><i>(E at beginning of class name denotes an enum.)</i>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public enum EMenuItem { /** */
|
public enum EMenuItem { /** */
|
||||||
|
|||||||
@@ -2,12 +2,16 @@ package forge.gui.home;
|
|||||||
|
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
|
|
||||||
|
/**
|
||||||
/** Dictates methods required for a submenu controller. */
|
* Dictates methods required for a submenu controller.
|
||||||
|
*
|
||||||
|
* <br><br><i>(I at beginning of class name denotes an interface.)</i>
|
||||||
|
* <br><i>(C at beginning of class name denotes a controller class.)</i>
|
||||||
|
*/
|
||||||
public interface ICSubmenu {
|
public interface ICSubmenu {
|
||||||
/** Fires when a menu is selected. Avoid any reference
|
/** Fires when a menu is selected. Avoid any reference
|
||||||
* referring to ViewHomeUI in this method, because
|
* referring to VHomeUI in this method, because
|
||||||
* it is triggered when ViewHomeUI is initialized, which
|
* it is triggered when VHomeUI is initialized, which
|
||||||
* will create an NPE.
|
* will create an NPE.
|
||||||
*
|
*
|
||||||
* @return {@link forge.Command} */
|
* @return {@link forge.Command} */
|
||||||
|
|||||||
@@ -2,7 +2,12 @@ package forge.gui.home;
|
|||||||
|
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
/** Dictates methods required for a submenu view. */
|
/**
|
||||||
|
* Dictates methods required for a submenu view.
|
||||||
|
*
|
||||||
|
* <br><br><i>(I at beginning of class name denotes an interface.)</i>
|
||||||
|
* <br><i>(V at beginning of class name denotes a view class.)</i>
|
||||||
|
*/
|
||||||
public interface IVSubmenu {
|
public interface IVSubmenu {
|
||||||
/** Allows static factory creation by decoupling UI components.
|
/** Allows static factory creation by decoupling UI components.
|
||||||
* @return {@link javax.swing.JPanel} */
|
* @return {@link javax.swing.JPanel} */
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package forge.view;
|
package forge.gui.home;
|
||||||
|
|
||||||
import java.awt.CardLayout;
|
import java.awt.CardLayout;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
@@ -32,6 +32,7 @@ import java.util.TreeMap;
|
|||||||
|
|
||||||
import javax.swing.BorderFactory;
|
import javax.swing.BorderFactory;
|
||||||
import javax.swing.JLabel;
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JLayeredPane;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
import javax.swing.SwingConstants;
|
import javax.swing.SwingConstants;
|
||||||
@@ -43,9 +44,7 @@ import net.miginfocom.swing.MigLayout;
|
|||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.gui.home.EMenuGroup;
|
import forge.gui.framework.IVTopLevelUI;
|
||||||
import forge.gui.home.EMenuItem;
|
|
||||||
import forge.gui.home.IVSubmenu;
|
|
||||||
import forge.gui.home.quest.VSubmenuChallenges;
|
import forge.gui.home.quest.VSubmenuChallenges;
|
||||||
import forge.gui.home.quest.VSubmenuDuels;
|
import forge.gui.home.quest.VSubmenuDuels;
|
||||||
import forge.gui.home.quest.VSubmenuQuestData;
|
import forge.gui.home.quest.VSubmenuQuestData;
|
||||||
@@ -69,6 +68,7 @@ import forge.properties.ForgeProps;
|
|||||||
import forge.properties.NewConstants;
|
import forge.properties.NewConstants;
|
||||||
import forge.quest.data.QuestPreferences.QPref;
|
import forge.quest.data.QuestPreferences.QPref;
|
||||||
import forge.quest.io.QuestDataIO;
|
import forge.quest.io.QuestDataIO;
|
||||||
|
import forge.view.FView;
|
||||||
|
|
||||||
/** Singleton instance of home screen UI.
|
/** Singleton instance of home screen UI.
|
||||||
* Use "getPanel()" to work with the main container.
|
* Use "getPanel()" to work with the main container.
|
||||||
@@ -79,9 +79,11 @@ import forge.quest.io.QuestDataIO;
|
|||||||
* - Build a view implementing IVSubmenu<br>
|
* - Build a view implementing IVSubmenu<br>
|
||||||
* - Build a controller impelementing ICSubmenu<br>
|
* - Build a controller impelementing ICSubmenu<br>
|
||||||
* - Add its singleton instance to the map storing the views for the card layout.
|
* - Add its singleton instance to the map storing the views for the card layout.
|
||||||
|
*
|
||||||
|
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public enum ViewHomeUI {
|
public enum VHomeUI implements IVTopLevelUI {
|
||||||
/** */
|
/** */
|
||||||
SINGLETON_INSTANCE;
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
@@ -90,6 +92,9 @@ public enum ViewHomeUI {
|
|||||||
private final FPanel pnlLeft = new FPanel();
|
private final FPanel pnlLeft = new FPanel();
|
||||||
private final FPanel pnlRight = new FPanel(cards);
|
private final FPanel pnlRight = new FPanel(cards);
|
||||||
private final JPanel pnlMenu = new JPanel();
|
private final JPanel pnlMenu = new JPanel();
|
||||||
|
private final FScrollPane scrMenu = new FScrollPane(pnlMenu,
|
||||||
|
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
|
||||||
|
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
||||||
|
|
||||||
private final int insets = 10;
|
private final int insets = 10;
|
||||||
private final int leftWidthPx = 250;
|
private final int leftWidthPx = 250;
|
||||||
@@ -97,20 +102,15 @@ public enum ViewHomeUI {
|
|||||||
private final Map<EMenuItem, FLabel> allSubmenuLabels = new HashMap<EMenuItem, FLabel>();
|
private final Map<EMenuItem, FLabel> allSubmenuLabels = new HashMap<EMenuItem, FLabel>();
|
||||||
private FLabel lblPreviousSelected;
|
private FLabel lblPreviousSelected;
|
||||||
|
|
||||||
/** Mostly, assembles child singletons for the home screen UI. */
|
@Override
|
||||||
public void initialize() {
|
public void instantiate() {
|
||||||
// There's d a better home for this (model?)
|
// There'd a better home for this (model?)
|
||||||
final File dirQuests = ForgeProps.getFile(NewConstants.Quest.DATA_DIR);
|
final File dirQuests = ForgeProps.getFile(NewConstants.Quest.DATA_DIR);
|
||||||
final String questname = Singletons.getModel().getQuestPreferences().getPreference(QPref.CURRENT_QUEST);
|
final String questname = Singletons.getModel().getQuestPreferences().getPreference(QPref.CURRENT_QUEST);
|
||||||
final File data = new File(dirQuests.getPath(), questname);
|
final File data = new File(dirQuests.getPath(), questname);
|
||||||
|
if (data.exists()) { AllZone.getQuest().load(QuestDataIO.loadData(data)); }
|
||||||
if (data.exists()) {
|
|
||||||
AllZone.getQuest().load(QuestDataIO.loadData(data));
|
|
||||||
}
//////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
// Add new menu items here (order doesn't matter).
|
// Add new menu items here (order doesn't matter).
|
||||||
allSubmenus.clear();
|
|
||||||
allSubmenus.add(VSubmenuConstructed.SINGLETON_INSTANCE);
|
allSubmenus.add(VSubmenuConstructed.SINGLETON_INSTANCE);
|
||||||
allSubmenus.add(VSubmenuDraft.SINGLETON_INSTANCE);
|
allSubmenus.add(VSubmenuDraft.SINGLETON_INSTANCE);
|
||||||
allSubmenus.add(VSubmenuSealed.SINGLETON_INSTANCE);
|
allSubmenus.add(VSubmenuSealed.SINGLETON_INSTANCE);
|
||||||
@@ -133,13 +133,12 @@ public enum ViewHomeUI {
|
|||||||
pnlParent.setBorderToggle(false);
|
pnlParent.setBorderToggle(false);
|
||||||
pnlParent.setBackgroundTexture(FSkin.getIcon(FSkin.Backgrounds.BG_TEXTURE));
|
pnlParent.setBackgroundTexture(FSkin.getIcon(FSkin.Backgrounds.BG_TEXTURE));
|
||||||
pnlParent.setLayout(null);
|
pnlParent.setLayout(null);
|
||||||
|
|
||||||
pnlParent.add(pnlLeft);
|
pnlParent.add(pnlLeft);
|
||||||
pnlParent.add(pnlRight);
|
pnlParent.add(pnlRight);
|
||||||
|
|
||||||
// Left pane holds scroller with menu panel.
|
// Left pane holds scroller with menu panel.
|
||||||
final FScrollPane scrMenu = new FScrollPane(pnlMenu,
|
pnlMenu.setLayout(new MigLayout("insets 0, gap 0, wrap, hidemode 3"));
|
||||||
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
pnlMenu.setOpaque(false);
|
||||||
scrMenu.setBorder(null);
|
scrMenu.setBorder(null);
|
||||||
|
|
||||||
pnlLeft.setLayout(new MigLayout("insets 0, gap 0, align center, wrap"));
|
pnlLeft.setLayout(new MigLayout("insets 0, gap 0, align center, wrap"));
|
||||||
@@ -148,7 +147,42 @@ public enum ViewHomeUI {
|
|||||||
|
|
||||||
pnlLeft.add(scrMenu, "pushy, growy, w 98%!, gap 1% 0 1% 0");
|
pnlLeft.add(scrMenu, "pushy, growy, w 98%!, gap 1% 0 1% 0");
|
||||||
|
|
||||||
populateMenu();
|
final Map<EMenuGroup, JLabel> allGroupLabels = new HashMap<EMenuGroup, JLabel>();
|
||||||
|
|
||||||
|
final String strTitleConstraints = "w 90%!, gap 5% 0 5px 10px";
|
||||||
|
final String strGroupConstraints = "w 85%!, gap 10% 0 0 0";
|
||||||
|
final String strItemConstraints = "w 100%!, h 26px!, gap 0 0 1px 1px";
|
||||||
|
|
||||||
|
// For each group: init its panel
|
||||||
|
final SortedMap<EMenuGroup, JPanel> allGroupPanels = new TreeMap<EMenuGroup, JPanel>();
|
||||||
|
for (final EMenuGroup e : EMenuGroup.values()) {
|
||||||
|
allGroupPanels.put(e, new JPanel());
|
||||||
|
allGroupPanels.get(e).setOpaque(false);
|
||||||
|
allGroupPanels.get(e).setVisible(false);
|
||||||
|
allGroupPanels.get(e).setLayout(new MigLayout("insets 0, gap 0, wrap"));
|
||||||
|
allGroupPanels.get(e).setName(e.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// For each item: Add to its group, and add to the card layout in right panel.
|
||||||
|
for (final IVSubmenu item : allSubmenus) {
|
||||||
|
allSubmenuLabels.put(EMenuItem.valueOf(item.getItemEnum()), makeItemLabel(item));
|
||||||
|
pnlRight.add(item.getItemEnum(), item.getPanel());
|
||||||
|
allGroupPanels.get(item.getGroupEnum()).add(
|
||||||
|
allSubmenuLabels.get(EMenuItem.valueOf(item.getItemEnum())), strItemConstraints);
|
||||||
|
item.getControl().initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
// For each group: add its title, then its panel, then "click" if necessary.
|
||||||
|
for (final EMenuGroup e : allGroupPanels.keySet()) {
|
||||||
|
allGroupLabels.put(e, makeTitleLabel(e));
|
||||||
|
pnlMenu.add(allGroupLabels.get(e), strTitleConstraints);
|
||||||
|
pnlMenu.add(allGroupPanels.get(e), strGroupConstraints);
|
||||||
|
|
||||||
|
// Expand groups expanded from previous session
|
||||||
|
if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.valueOf("SUBMENU_" + e.toString()))) {
|
||||||
|
groupClick(e, allGroupLabels.get(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Select previous
|
// Select previous
|
||||||
EMenuItem selected = null;
|
EMenuItem selected = null;
|
||||||
@@ -164,6 +198,7 @@ public enum ViewHomeUI {
|
|||||||
itemClick(EMenuItem.CONSTRUCTED);
|
itemClick(EMenuItem.CONSTRUCTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO this shouldn't be here; should perhaps be an interface method in controller.
|
||||||
pnlParent.addComponentListener(new ComponentAdapter() {
|
pnlParent.addComponentListener(new ComponentAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void componentResized(final ComponentEvent e) {
|
public void componentResized(final ComponentEvent e) {
|
||||||
@@ -181,51 +216,9 @@ public enum ViewHomeUI {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Generates expand/collapse menu using cards in layout, and EMenuGroup enum.
|
@Override
|
||||||
* No further hardcoding should be required in this method. */
|
public void populate() {
|
||||||
private void populateMenu() {
|
FView.SINGLETON_INSTANCE.getLpnDocument().add(pnlParent, JLayeredPane.DEFAULT_LAYER);
|
||||||
final SortedMap<EMenuGroup, JPanel> allGroupPanels = new TreeMap<EMenuGroup, JPanel>();
|
|
||||||
final Map<EMenuGroup, JLabel> allGroupLabels = new HashMap<EMenuGroup, JLabel>();
|
|
||||||
|
|
||||||
final ForgePreferences prefs = Singletons.getModel().getPreferences();
|
|
||||||
final String strTitleConstraints = "w 90%!, gap 5% 0 5px 10px";
|
|
||||||
final String strGroupConstraints = "w 85%!, gap 10% 0 0 0";
|
|
||||||
final String strItemConstraints = "w 100%!, h 26px!, gap 0 0 1px 1px";
|
|
||||||
|
|
||||||
pnlMenu.removeAll();
|
|
||||||
pnlMenu.setLayout(new MigLayout("insets 0, gap 0, wrap, hidemode 3"));
|
|
||||||
pnlMenu.setOpaque(false);
|
|
||||||
|
|
||||||
// For each group: init its panel
|
|
||||||
for (final EMenuGroup e : EMenuGroup.values()) {
|
|
||||||
allGroupPanels.put(e, new JPanel());
|
|
||||||
allGroupPanels.get(e).setOpaque(false);
|
|
||||||
allGroupPanels.get(e).setVisible(false);
|
|
||||||
allGroupPanels.get(e).setLayout(new MigLayout("insets 0, gap 0, wrap"));
|
|
||||||
allGroupPanels.get(e).setName(e.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
// For each item: Add to its group, and add to the card layout in right panel.
|
|
||||||
allSubmenuLabels.clear();
|
|
||||||
for (final IVSubmenu item : allSubmenus) {
|
|
||||||
allSubmenuLabels.put(EMenuItem.valueOf(item.getItemEnum()), makeItemLabel(item));
|
|
||||||
pnlRight.add(item.getItemEnum(), item.getPanel());
|
|
||||||
allGroupPanels.get(item.getGroupEnum()).add(
|
|
||||||
allSubmenuLabels.get(EMenuItem.valueOf(item.getItemEnum())), strItemConstraints);
|
|
||||||
item.getControl().initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
// For each group: add its title, then its panel, then "click" if necessary.
|
|
||||||
for (final EMenuGroup e : allGroupPanels.keySet()) {
|
|
||||||
allGroupLabels.put(e, makeTitleLabel(e));
|
|
||||||
pnlMenu.add(allGroupLabels.get(e), strTitleConstraints);
|
|
||||||
pnlMenu.add(allGroupPanels.get(e), strGroupConstraints);
|
|
||||||
|
|
||||||
// Expand groups expanded from previous session
|
|
||||||
if (prefs.getPrefBoolean(FPref.valueOf("SUBMENU_" + e.toString()))) {
|
|
||||||
groupClick(e, allGroupLabels.get(e));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void groupClick(final EMenuGroup e0, final JLabel lbl0) {
|
private void groupClick(final EMenuGroup e0, final JLabel lbl0) {
|
||||||
@@ -12,13 +12,13 @@ import forge.AllZone;
|
|||||||
import forge.Command;
|
import forge.Command;
|
||||||
import forge.gui.home.EMenuItem;
|
import forge.gui.home.EMenuItem;
|
||||||
import forge.gui.home.ICSubmenu;
|
import forge.gui.home.ICSubmenu;
|
||||||
|
import forge.gui.home.VHomeUI;
|
||||||
import forge.gui.home.quest.SubmenuQuestUtil.SelectablePanel;
|
import forge.gui.home.quest.SubmenuQuestUtil.SelectablePanel;
|
||||||
import forge.gui.toolbox.FLabel;
|
import forge.gui.toolbox.FLabel;
|
||||||
import forge.quest.QuestController;
|
import forge.quest.QuestController;
|
||||||
import forge.quest.QuestEventChallenge;
|
import forge.quest.QuestEventChallenge;
|
||||||
import forge.quest.bazaar.QuestItemType;
|
import forge.quest.bazaar.QuestItemType;
|
||||||
import forge.quest.bazaar.QuestPetController;
|
import forge.quest.bazaar.QuestPetController;
|
||||||
import forge.view.ViewHomeUI;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Write javadoc for this type.
|
* TODO: Write javadoc for this type.
|
||||||
@@ -39,7 +39,7 @@ public enum CSubmenuChallenges implements ICSubmenu {
|
|||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
if (qc.getAchievements() == null) {
|
if (qc.getAchievements() == null) {
|
||||||
ViewHomeUI.SINGLETON_INSTANCE.itemClick(EMenuItem.QUEST_DATA);
|
VHomeUI.SINGLETON_INSTANCE.itemClick(EMenuItem.QUEST_DATA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -80,7 +80,7 @@ public enum CSubmenuChallenges implements ICSubmenu {
|
|||||||
view.getBtnCurrentDeck().setCommand(
|
view.getBtnCurrentDeck().setCommand(
|
||||||
new Command() { @Override
|
new Command() { @Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
ViewHomeUI.SINGLETON_INSTANCE.itemClick(EMenuItem.QUEST_DECKS);
|
VHomeUI.SINGLETON_INSTANCE.itemClick(EMenuItem.QUEST_DECKS);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -8,11 +8,11 @@ import forge.AllZone;
|
|||||||
import forge.Command;
|
import forge.Command;
|
||||||
import forge.gui.home.EMenuItem;
|
import forge.gui.home.EMenuItem;
|
||||||
import forge.gui.home.ICSubmenu;
|
import forge.gui.home.ICSubmenu;
|
||||||
|
import forge.gui.home.VHomeUI;
|
||||||
import forge.gui.home.quest.SubmenuQuestUtil.SelectablePanel;
|
import forge.gui.home.quest.SubmenuQuestUtil.SelectablePanel;
|
||||||
import forge.quest.QuestController;
|
import forge.quest.QuestController;
|
||||||
import forge.quest.QuestEventDuel;
|
import forge.quest.QuestEventDuel;
|
||||||
import forge.quest.bazaar.QuestPetController;
|
import forge.quest.bazaar.QuestPetController;
|
||||||
import forge.view.ViewHomeUI;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Write javadoc for this type.
|
* TODO: Write javadoc for this type.
|
||||||
@@ -32,7 +32,7 @@ public enum CSubmenuDuels implements ICSubmenu {
|
|||||||
return new Command() {
|
return new Command() {
|
||||||
public void execute() {
|
public void execute() {
|
||||||
if (qc.getAchievements() == null) {
|
if (qc.getAchievements() == null) {
|
||||||
ViewHomeUI.SINGLETON_INSTANCE.itemClick(EMenuItem.QUEST_DATA);
|
VHomeUI.SINGLETON_INSTANCE.itemClick(EMenuItem.QUEST_DATA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -63,7 +63,7 @@ public enum CSubmenuDuels implements ICSubmenu {
|
|||||||
view.getBtnCurrentDeck().setCommand(
|
view.getBtnCurrentDeck().setCommand(
|
||||||
new Command() { @Override
|
new Command() { @Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
ViewHomeUI.SINGLETON_INSTANCE.itemClick(EMenuItem.QUEST_DECKS);
|
VHomeUI.SINGLETON_INSTANCE.itemClick(EMenuItem.QUEST_DECKS);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ import forge.gui.OverlayUtils;
|
|||||||
import forge.gui.deckeditor.DeckEditorQuest;
|
import forge.gui.deckeditor.DeckEditorQuest;
|
||||||
import forge.gui.home.EMenuItem;
|
import forge.gui.home.EMenuItem;
|
||||||
import forge.gui.home.ICSubmenu;
|
import forge.gui.home.ICSubmenu;
|
||||||
|
import forge.gui.home.VHomeUI;
|
||||||
import forge.quest.QuestController;
|
import forge.quest.QuestController;
|
||||||
import forge.quest.data.QuestPreferences.QPref;
|
import forge.quest.data.QuestPreferences.QPref;
|
||||||
import forge.view.ViewHomeUI;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Write javadoc for this type.
|
* TODO: Write javadoc for this type.
|
||||||
@@ -57,7 +57,7 @@ public enum CSubmenuQuestDecks implements ICSubmenu {
|
|||||||
@Override
|
@Override
|
||||||
public void execute() {
|
public void execute() {
|
||||||
if (qc.getAchievements() == null) {
|
if (qc.getAchievements() == null) {
|
||||||
ViewHomeUI.SINGLETON_INSTANCE.itemClick(EMenuItem.QUEST_DATA);
|
VHomeUI.SINGLETON_INSTANCE.itemClick(EMenuItem.QUEST_DATA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,181 +0,0 @@
|
|||||||
package forge.gui.layout;
|
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.Graphics;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.swing.JFrame;
|
|
||||||
import javax.swing.JLayeredPane;
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
import javax.swing.border.EmptyBorder;
|
|
||||||
import javax.swing.border.LineBorder;
|
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
|
||||||
import forge.Singletons;
|
|
||||||
|
|
||||||
/** */
|
|
||||||
public enum FViewNew {
|
|
||||||
/** */
|
|
||||||
SINGLETON_INSTANCE;
|
|
||||||
|
|
||||||
// Layout vars
|
|
||||||
private final JFrame frmDocument = new JFrame();
|
|
||||||
private final JPanel pnlContent = new JPanel();
|
|
||||||
private final JPanel pnlInsets = new JPanel(new BorderLayout());
|
|
||||||
private final JPanel pnlPreview = new PreviewPanel();
|
|
||||||
private final JPanel pnlTabOverflow = new JPanel(new MigLayout("insets 0, gap 0, wrap"));
|
|
||||||
private final JLayeredPane lpnDocument = new JLayeredPane();
|
|
||||||
private static final List<DragCell> CELLS = new ArrayList<DragCell>();
|
|
||||||
|
|
||||||
/** Height of head area in drag panel. */
|
|
||||||
public static final int HEAD_H = 20;
|
|
||||||
/** Thickness of resize border in drag panel. */
|
|
||||||
public static final int BORDER_T = 5;
|
|
||||||
|
|
||||||
private FViewNew() {
|
|
||||||
frmDocument.setMinimumSize(new Dimension(800, 600));
|
|
||||||
frmDocument.setLocationRelativeTo(null);
|
|
||||||
frmDocument.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
||||||
frmDocument.setContentPane(lpnDocument);
|
|
||||||
frmDocument.setTitle("Forge: " + Singletons.getModel().getBuildInfo().getVersion());
|
|
||||||
|
|
||||||
pnlInsets.add(pnlContent, BorderLayout.CENTER);
|
|
||||||
pnlInsets.setBackground(Color.black);
|
|
||||||
pnlInsets.setBorder(new EmptyBorder(
|
|
||||||
FViewNew.BORDER_T, FViewNew.BORDER_T, 0, 0));
|
|
||||||
|
|
||||||
pnlContent.setBackground(Color.black);
|
|
||||||
pnlContent.setLayout(null);
|
|
||||||
|
|
||||||
lpnDocument.addMouseListener(SOverflowUtil.getHideOverflowListener());
|
|
||||||
lpnDocument.addComponentListener(SResizingUtil.getWindowResizeListener());
|
|
||||||
|
|
||||||
lpnDocument.add(pnlInsets, (Integer) 0);
|
|
||||||
lpnDocument.add(pnlPreview, (Integer) 1);
|
|
||||||
lpnDocument.add(pnlTabOverflow, (Integer) 2);
|
|
||||||
|
|
||||||
frmDocument.setVisible(true);
|
|
||||||
pnlInsets.setBounds(lpnDocument.getBounds());
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
public void populate() {
|
|
||||||
DragCell cell0 = new DragCell();
|
|
||||||
DragCell cell1 = new DragCell();
|
|
||||||
DragCell cell2 = new DragCell();
|
|
||||||
DragCell cell3 = new DragCell();
|
|
||||||
DragCell cell4 = new DragCell();
|
|
||||||
DragCell cell5 = new DragCell();
|
|
||||||
|
|
||||||
cell0.addDoc(EDocID.REPORT_STACK.getDoc());
|
|
||||||
cell0.addDoc(EDocID.REPORT_COMBAT.getDoc());
|
|
||||||
cell0.addDoc(EDocID.REPORT_LOG.getDoc());
|
|
||||||
cell0.addDoc(EDocID.REPORT_PLAYERS.getDoc());
|
|
||||||
cell1.addDoc(EDocID.REPORT_MESSAGE.getDoc());
|
|
||||||
cell2.addDoc(EDocID.YOUR_BATTLEFIELD.getDoc());
|
|
||||||
cell3.addDoc(EDocID.YOUR_HAND.getDoc());
|
|
||||||
cell4.addDoc(EDocID.YOUR_DOCK.getDoc());
|
|
||||||
cell5.addDoc(EDocID.CARD_DETAIL.getDoc());
|
|
||||||
cell5.addDoc(EDocID.CARD_PICTURE.getDoc());
|
|
||||||
cell5.addDoc(EDocID.CARD_ANTES.getDoc());
|
|
||||||
|
|
||||||
addDragCell(cell0);
|
|
||||||
addDragCell(cell1);
|
|
||||||
addDragCell(cell2);
|
|
||||||
addDragCell(cell3);
|
|
||||||
addDragCell(cell4);
|
|
||||||
addDragCell(cell5);
|
|
||||||
|
|
||||||
cell0.setRoughBounds(0, 0, 0.2, 0.7);
|
|
||||||
cell1.setRoughBounds(0, 0.7, 0.2, 0.3);
|
|
||||||
cell2.setRoughBounds(0.2, 0, 0.6, 0.5);
|
|
||||||
cell3.setRoughBounds(0.2, 0.5, 0.6, 0.5);
|
|
||||||
cell4.setRoughBounds(0.8, 0, 0.2, 0.25);
|
|
||||||
cell5.setRoughBounds(0.8, 0.25, 0.2, 0.75);
|
|
||||||
|
|
||||||
// TODO save a default layout, and then remove these lines and load it every time.
|
|
||||||
//SIOUtil.saveLayout();
|
|
||||||
//SIOUtil.loadLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JFrame} */
|
|
||||||
public JFrame getFrame() {
|
|
||||||
return frmDocument;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JLayeredPane} */
|
|
||||||
public JLayeredPane getLpnDocument() {
|
|
||||||
return lpnDocument;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JPanel} */
|
|
||||||
public JPanel getPnlInsets() {
|
|
||||||
return pnlInsets;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JPanel} */
|
|
||||||
public JPanel getPnlContent() {
|
|
||||||
return pnlContent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JPanel} */
|
|
||||||
public JPanel getPnlPreview() {
|
|
||||||
return pnlPreview;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JPanel} */
|
|
||||||
public JPanel getPnlTabOverflow() {
|
|
||||||
return pnlTabOverflow;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link java.util.List}<{@link forge.gui.layout.DragCell}> */
|
|
||||||
public List<DragCell> getDragCells() {
|
|
||||||
final List<DragCell> clone = new ArrayList<DragCell>();
|
|
||||||
clone.addAll(CELLS);
|
|
||||||
return clone;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @param pnl0   {@link forge.gui.layout.DragCell} */
|
|
||||||
public void addDragCell(final DragCell pnl0) {
|
|
||||||
CELLS.add(pnl0);
|
|
||||||
pnlContent.add(pnl0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @param pnl0   {@link forge.gui.layout.DragCell} */
|
|
||||||
public void removeDragCell(final DragCell pnl0) {
|
|
||||||
CELLS.remove(pnl0);
|
|
||||||
pnlContent.remove(pnl0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
public void removeAllDragCells() {
|
|
||||||
CELLS.clear();
|
|
||||||
pnlContent.removeAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** PreviewPanel shows where a dragged component could
|
|
||||||
* come to rest when the mouse is released.<br>
|
|
||||||
* This class is an unfortunate necessity to overcome
|
|
||||||
* translucency issues for preview panel. */
|
|
||||||
@SuppressWarnings("serial")
|
|
||||||
class PreviewPanel extends JPanel {
|
|
||||||
/** PreviewPanel shows where a dragged component could
|
|
||||||
* come to rest when the mouse is released. */
|
|
||||||
public PreviewPanel() {
|
|
||||||
super();
|
|
||||||
setOpaque(false);
|
|
||||||
setVisible(false);
|
|
||||||
setBorder(new LineBorder(Color.DARK_GRAY, 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void paintComponent(final Graphics g) {
|
|
||||||
super.paintComponent(g);
|
|
||||||
g.setColor(new Color(0, 0, 0, 50));
|
|
||||||
g.fillRect(0, 0, getWidth(), getHeight());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
package forge.gui.layout;
|
|
||||||
|
|
||||||
import java.awt.Component;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This interface provides a unifying type to any component
|
|
||||||
* (usually JPanels or JScrollPanes) which could be used as
|
|
||||||
* a tab. A single one of these components is referred to as
|
|
||||||
* a "document" throughout the codebase. The tabs and their
|
|
||||||
* documents are contained in "cells" for resizing and dragging.
|
|
||||||
*
|
|
||||||
* <br><br><i>(I at beginning of class name denotes an interface.)</i>
|
|
||||||
* <br><i>(V at beginning of class name denotes a view class.)</i>
|
|
||||||
*/
|
|
||||||
public interface IVDoc {
|
|
||||||
/**
|
|
||||||
* Returns the ID used to identify this tab in save XML and card layouts.
|
|
||||||
*
|
|
||||||
* @return {@link forge.gui.layout.EDocID}
|
|
||||||
*/
|
|
||||||
EDocID getDocumentID();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns top-level component containing all of the content in this tab.
|
|
||||||
* This is used to attach the component to the card layout of its parent.
|
|
||||||
*
|
|
||||||
* @return {@link java.awt.Component}
|
|
||||||
*/
|
|
||||||
Component getDocument();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns tab label object used in title bars.
|
|
||||||
*
|
|
||||||
* @return {@link forge.gui.layout.DragTab}
|
|
||||||
*/
|
|
||||||
DragTab getTabLabel();
|
|
||||||
|
|
||||||
/** Retrieves control object associated with this document.
|
|
||||||
* @return {@link forge.gui.home.ICSubmenu}
|
|
||||||
*/
|
|
||||||
ICDoc getControl();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes all children and (re)populates panel components,
|
|
||||||
* independent of constructor. Expected to provide
|
|
||||||
* a completely fresh layout on the component.
|
|
||||||
*/
|
|
||||||
void populate();
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
package forge.gui.layout;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <br><br><i>(M at beginning of class name denotes a class
|
|
||||||
* containing the <b>main</b> method).</i>
|
|
||||||
*/
|
|
||||||
final class MDragUI {
|
|
||||||
/** @param args   {@link java.lang.String}[] */
|
|
||||||
public static void main(String[] args) {
|
|
||||||
FViewNew.SINGLETON_INSTANCE.populate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,114 +0,0 @@
|
|||||||
package forge.gui.layout;
|
|
||||||
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.swing.SwingUtilities;
|
|
||||||
import javax.xml.stream.XMLEventFactory;
|
|
||||||
import javax.xml.stream.XMLEventReader;
|
|
||||||
import javax.xml.stream.XMLEventWriter;
|
|
||||||
import javax.xml.stream.XMLInputFactory;
|
|
||||||
import javax.xml.stream.XMLOutputFactory;
|
|
||||||
import javax.xml.stream.XMLStreamException;
|
|
||||||
import javax.xml.stream.events.XMLEvent;
|
|
||||||
|
|
||||||
|
|
||||||
/** Package-private class for handling layout saving and loading. */
|
|
||||||
final class SIOUtil {
|
|
||||||
/** Each cell must save these elements of its display. */
|
|
||||||
private enum Element {
|
|
||||||
x,
|
|
||||||
y,
|
|
||||||
w,
|
|
||||||
h,
|
|
||||||
doc
|
|
||||||
};
|
|
||||||
|
|
||||||
private static final String FILE = "layout_default.xml";
|
|
||||||
private static final XMLEventFactory EF = XMLEventFactory.newInstance();
|
|
||||||
private static final XMLEvent NEWLINE = EF.createDTD("\n");
|
|
||||||
private static final XMLEvent TAB = EF.createDTD("\t");
|
|
||||||
|
|
||||||
/** Publicly-accessible save method, to neatly handle exception handling. */
|
|
||||||
public static void saveLayout() {
|
|
||||||
if (SwingUtilities.isEventDispatchThread()) {
|
|
||||||
throw new IllegalThreadStateException("This operation should be independent of the EDT.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// try { save(); }
|
|
||||||
// catch (final Exception e) { e.printStackTrace(); }
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Publicly-accessible load method, to neatly handle exception handling. */
|
|
||||||
public static void loadLayout() {
|
|
||||||
if (SwingUtilities.isEventDispatchThread()) {
|
|
||||||
throw new IllegalThreadStateException("This operation should be independent of the EDT.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// try { load(); }
|
|
||||||
// catch (final Exception e) { e.printStackTrace(); }
|
|
||||||
// TODO save layout after resize / rearrange
|
|
||||||
// TODO layout save
|
|
||||||
int todo = 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void save() throws Exception {
|
|
||||||
final XMLOutputFactory out = XMLOutputFactory.newInstance();
|
|
||||||
final XMLEventWriter writer = out.createXMLEventWriter(new FileOutputStream(FILE));
|
|
||||||
final List<DragCell> cells = FViewNew.SINGLETON_INSTANCE.getDragCells();
|
|
||||||
|
|
||||||
writer.add(EF.createStartDocument());
|
|
||||||
writer.add(EF.createStartElement("", "", "layout"));
|
|
||||||
|
|
||||||
for (final DragCell cell : cells) {
|
|
||||||
writer.add(EF.createStartElement("", "", "cell"));
|
|
||||||
|
|
||||||
createNode(writer, Element.x, String.valueOf(cell.getRoughX()));
|
|
||||||
createNode(writer, Element.y, String.valueOf(cell.getRoughY()));
|
|
||||||
createNode(writer, Element.w, String.valueOf(cell.getRoughW()));
|
|
||||||
createNode(writer, Element.h, String.valueOf(cell.getRoughH()));
|
|
||||||
|
|
||||||
for (final IVDoc vDoc : cell.getDocs()) {
|
|
||||||
createNode(writer, Element.doc, vDoc.getDocumentID().toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.add(EF.createEndElement("", "", "cell"));
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.add(EF.createEndDocument());
|
|
||||||
writer.flush();
|
|
||||||
writer.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void load() throws Exception {
|
|
||||||
final FViewNew view = FViewNew.SINGLETON_INSTANCE;
|
|
||||||
final XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
|
||||||
final XMLEventReader reader = inputFactory.createXMLEventReader(new FileInputStream(FILE));
|
|
||||||
|
|
||||||
view.removeAllDragCells();
|
|
||||||
/*while (reader.hasNext()) {
|
|
||||||
XMLEvent event = reader.nextEvent();
|
|
||||||
|
|
||||||
if (event.isStartElement()) {
|
|
||||||
/*StartElement startElement = event.asStartElement();
|
|
||||||
|
|
||||||
if (startElement.getName().getLocalPart() == (ITEM)) {
|
|
||||||
|
|
||||||
}*
|
|
||||||
|
|
||||||
//System.err.println(event.isStartElement());
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void createNode(final XMLEventWriter writer0, final Element name0,
|
|
||||||
final String val0) throws XMLStreamException {
|
|
||||||
|
|
||||||
writer0.add(TAB);
|
|
||||||
writer0.add(EF.createStartElement("", "", name0.toString()));
|
|
||||||
writer0.add(EF.createCharacters(val0));
|
|
||||||
writer0.add(EF.createEndElement("", "", name0.toString()));
|
|
||||||
writer0.add(NEWLINE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package forge.control;
|
package forge.gui.match;
|
||||||
|
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -29,57 +29,36 @@ import forge.Card;
|
|||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
import forge.Constant;
|
import forge.Constant;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.control.match.ControlDetail;
|
|
||||||
import forge.control.match.ControlDock;
|
|
||||||
import forge.control.match.ControlField;
|
|
||||||
import forge.control.match.ControlHand;
|
|
||||||
import forge.control.match.ControlMessage;
|
|
||||||
import forge.control.match.ControlPicture;
|
|
||||||
import forge.control.match.ControlTabber;
|
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.CardContainer;
|
import forge.gui.CardContainer;
|
||||||
import forge.gui.GuiMultipleBlockers;
|
import forge.gui.GuiMultipleBlockers;
|
||||||
|
import forge.gui.framework.EDocID;
|
||||||
|
import forge.gui.framework.SDisplayUtil;
|
||||||
|
import forge.gui.match.controllers.CDetail;
|
||||||
|
import forge.gui.match.controllers.CMessage;
|
||||||
|
import forge.gui.match.controllers.CPicture;
|
||||||
|
import forge.gui.match.nonsingleton.CField;
|
||||||
|
import forge.gui.match.nonsingleton.VField;
|
||||||
import forge.gui.toolbox.FLabel;
|
import forge.gui.toolbox.FLabel;
|
||||||
import forge.gui.toolbox.FSkin;
|
import forge.gui.toolbox.FSkin;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.properties.ForgeProps;
|
import forge.properties.ForgeProps;
|
||||||
import forge.properties.NewConstants;
|
import forge.properties.NewConstants;
|
||||||
import forge.view.ViewMatchUI;
|
|
||||||
import forge.view.match.ViewField;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
|
||||||
* ControlMatchUI
|
|
||||||
* </p>
|
|
||||||
* Top-level controller for matches.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class ControlMatchUI implements CardContainer {
|
|
||||||
private final ViewMatchUI view;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* ControlMatchUI
|
|
||||||
* </p>
|
|
||||||
* Constructs instance of match UI controller, used as a single point of
|
* Constructs instance of match UI controller, used as a single point of
|
||||||
* top-level control for child UIs - in other words, this class controls the
|
* top-level control for child UIs. Tasks targeting the view of individual
|
||||||
* controllers. Tasks targeting the view of individual components are found
|
* components are found in a separate controller for that component and
|
||||||
* in a separate controller for that component and should not be included
|
* should not be included here.
|
||||||
* here.
|
|
||||||
*
|
*
|
||||||
* This constructor is called after child components have been instantiated.
|
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||||
* When children are instantiated, they also instantiate their controller.
|
|
||||||
* So, this class must be called after everything is already in place.
|
|
||||||
*
|
|
||||||
* @param v
|
|
||||||
*   A ViewMatchUI object
|
|
||||||
*/
|
*/
|
||||||
public ControlMatchUI(final ViewMatchUI v) {
|
public enum CMatchUI implements CardContainer {
|
||||||
this.view = v;
|
/** */
|
||||||
}
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fires up controllers for each component of UI.
|
* Fires up controllers for each component of UI.
|
||||||
@@ -88,12 +67,11 @@ public class ControlMatchUI implements CardContainer {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void initMatch(final String strAvatarIcon) {
|
public void initMatch(final String strAvatarIcon) {
|
||||||
ControlMatchUI.this.showCombat("");
|
SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc());
|
||||||
ControlMatchUI.this.showStack();
|
|
||||||
|
|
||||||
// Update avatars
|
// Update avatars
|
||||||
final String[] indices = Singletons.getModel().getPreferences().getPref(FPref.UI_AVATARS).split(",");
|
final String[] indices = Singletons.getModel().getPreferences().getPref(FPref.UI_AVATARS).split(",");
|
||||||
final Object[] views = Singletons.getView().getViewMatch().getFieldViews().toArray();
|
final Object[] views = VMatchUI.SINGLETON_INSTANCE.getFieldViews().toArray();
|
||||||
for (int i = 0; i < views.length; i++) {
|
for (int i = 0; i < views.length; i++) {
|
||||||
final Image img;
|
final Image img;
|
||||||
// Update AI quest icon
|
// Update AI quest icon
|
||||||
@@ -115,8 +93,8 @@ public class ControlMatchUI implements CardContainer {
|
|||||||
img = FSkin.getAvatars().get(Integer.parseInt(indices[i]));
|
img = FSkin.getAvatars().get(Integer.parseInt(indices[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
((ViewField) views[i]).getLblAvatar().setIcon(new ImageIcon(img));
|
((VField) views[i]).getLblAvatar().setIcon(new ImageIcon(img));
|
||||||
((FLabel) ((ViewField) views[i]).getLblAvatar()).getResizeTimer().start();
|
((FLabel) ((VField) views[i]).getLblAvatar()).getResizeTimer().start();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update observers
|
// Update observers
|
||||||
@@ -126,11 +104,11 @@ public class ControlMatchUI implements CardContainer {
|
|||||||
|
|
||||||
AllZone.getComputerPlayer().updateObservers();
|
AllZone.getComputerPlayer().updateObservers();
|
||||||
AllZone.getComputerPlayer().getZone(ZoneType.Hand).updateObservers();
|
AllZone.getComputerPlayer().getZone(ZoneType.Hand).updateObservers();
|
||||||
AllZone.getHumanPlayer().getZone(ZoneType.Battlefield).updateObservers();
|
AllZone.getComputerPlayer().getZone(ZoneType.Battlefield).updateObservers();
|
||||||
|
|
||||||
AllZone.getStack().updateObservers();
|
AllZone.getStack().updateObservers();
|
||||||
AllZone.getInputControl().updateObservers();
|
AllZone.getInputControl().updateObservers();
|
||||||
ControlMatchUI.this.getTabberControl().updateObservers();
|
AllZone.getGameLog().updateObservers();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -140,91 +118,27 @@ public class ControlMatchUI implements CardContainer {
|
|||||||
// This method is in the top-level controller because it affects ALL fields
|
// This method is in the top-level controller because it affects ALL fields
|
||||||
// (not just one).
|
// (not just one).
|
||||||
public void resetAllPhaseButtons() {
|
public void resetAllPhaseButtons() {
|
||||||
for (final ControlField c : ControlMatchUI.this.getFieldControls()) {
|
for (final CField c : CMatchUI.this.getFieldControls()) {
|
||||||
c.resetPhaseButtons();
|
c.resetPhaseButtons();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @param s0   {@link java.lang.String} */
|
/** @param s0   {@link java.lang.String} */
|
||||||
public void showMessage(final String s0) {
|
public void showMessage(final String s0) {
|
||||||
getMessageControl().setMessage(s0);
|
CMessage.SINGLETON_INSTANCE.setMessage(s0);
|
||||||
}
|
|
||||||
|
|
||||||
/** */
|
|
||||||
public void showStack() {
|
|
||||||
ControlMatchUI.this.getTabberControl().showPnlStack();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @param s0   {@link java.lang.String} */
|
|
||||||
public void showCombat(final String s0) {
|
|
||||||
ControlMatchUI.this.getTabberControl().getView().updateCombat(s0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the detail controller.
|
|
||||||
*
|
|
||||||
* @return ControlDetail
|
|
||||||
*/
|
|
||||||
public ControlDetail getDetailControl() {
|
|
||||||
return view.getViewDetail().getControl();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the picture controller.
|
|
||||||
*
|
|
||||||
* @return ControlPicture
|
|
||||||
*/
|
|
||||||
public ControlPicture getPictureControl() {
|
|
||||||
return view.getViewPicture().getControl();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the tabber controller.
|
|
||||||
*
|
|
||||||
* @return ControlTabber
|
|
||||||
*/
|
|
||||||
public ControlTabber getTabberControl() {
|
|
||||||
return view.getViewTabber().getControl();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the input controller.
|
|
||||||
*
|
|
||||||
* @return ControlMessage
|
|
||||||
*/
|
|
||||||
public ControlMessage getMessageControl() {
|
|
||||||
return view.getViewMessage().getControl();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the hand controller.
|
|
||||||
*
|
|
||||||
* @return ControlHand
|
|
||||||
*/
|
|
||||||
public ControlHand getHandControl() {
|
|
||||||
return view.getViewHand().getControl();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the dock controller.
|
|
||||||
*
|
|
||||||
* @return ControlDock
|
|
||||||
*/
|
|
||||||
public ControlDock getDockControl() {
|
|
||||||
return view.getDockView().getControl();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the field controllers.
|
* Gets the field controllers.
|
||||||
*
|
*
|
||||||
* @return List<ControlField>
|
* @return List<CField>
|
||||||
*/
|
*/
|
||||||
public List<ControlField> getFieldControls() {
|
public List<CField> getFieldControls() {
|
||||||
final List<ViewField> fields = view.getViewBattlefield().getFields();
|
final List<VField> fields = VMatchUI.SINGLETON_INSTANCE.getFieldViews();
|
||||||
final List<ControlField> controllers = new ArrayList<ControlField>();
|
final List<CField> controllers = new ArrayList<CField>();
|
||||||
|
|
||||||
for (final ViewField f : fields) {
|
for (final VField f : fields) {
|
||||||
controllers.add(f.getControl());
|
controllers.add((CField) f.getControl());
|
||||||
}
|
}
|
||||||
|
|
||||||
return controllers;
|
return controllers;
|
||||||
@@ -255,11 +169,11 @@ public class ControlMatchUI implements CardContainer {
|
|||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
public final boolean stopAtPhase(final Player turn, final PhaseType phase) {
|
public final boolean stopAtPhase(final Player turn, final PhaseType phase) {
|
||||||
final List<ControlField> fieldControllers = ControlMatchUI.this.getFieldControls();
|
final List<CField> fieldControllers = CMatchUI.this.getFieldControls();
|
||||||
|
|
||||||
// AI field is at index [0]
|
// AI field is at index [0]
|
||||||
int index = turn.isComputer() ? 0 : 1;
|
int index = turn.isComputer() ? 0 : 1;
|
||||||
ViewField vf = fieldControllers.get(index).getView();
|
VField vf = fieldControllers.get(index).getView();
|
||||||
|
|
||||||
switch (phase) {
|
switch (phase) {
|
||||||
case UPKEEP: return vf.getLblUpkeep().getEnabled();
|
case UPKEEP: return vf.getLblUpkeep().getEnabled();
|
||||||
@@ -273,6 +187,7 @@ public class ControlMatchUI implements CardContainer {
|
|||||||
case COMBAT_END: return vf.getLblEndCombat().getEnabled();
|
case COMBAT_END: return vf.getLblEndCombat().getEnabled();
|
||||||
case MAIN2: return vf.getLblMain2().getEnabled();
|
case MAIN2: return vf.getLblMain2().getEnabled();
|
||||||
case END_OF_TURN: return vf.getLblEndTurn().getEnabled();
|
case END_OF_TURN: return vf.getLblEndTurn().getEnabled();
|
||||||
|
default:
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -280,12 +195,12 @@ public class ControlMatchUI implements CardContainer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCard(final Card c) {
|
public void setCard(final Card c) {
|
||||||
Singletons.getControl().getControlMatch().getDetailControl().showCard(c);
|
CDetail.SINGLETON_INSTANCE.showCard(c);
|
||||||
Singletons.getControl().getControlMatch().getPictureControl().showCard(c);
|
CPicture.SINGLETON_INSTANCE.showCard(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Card getCard() {
|
public Card getCard() {
|
||||||
return Singletons.getControl().getControlMatch().getDetailControl().getCurrentCard();
|
return CDetail.SINGLETON_INSTANCE.getCurrentCard();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package forge.control.match;
|
package forge.gui.match;
|
||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
@@ -19,7 +19,6 @@ import forge.gui.OverlayUtils;
|
|||||||
import forge.item.CardDb;
|
import forge.item.CardDb;
|
||||||
import forge.item.CardPrinted;
|
import forge.item.CardPrinted;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.view.match.ViewWinLose;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default controller for a ViewWinLose object. This class can
|
* Default controller for a ViewWinLose object. This class can
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package forge.view.match;
|
package forge.gui.match;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -14,14 +14,13 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package forge.view.match;
|
package forge.gui.match;
|
||||||
|
|
||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.CardList;
|
import forge.CardList;
|
||||||
import forge.Constant;
|
import forge.Constant;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.control.FControl;
|
import forge.control.FControl;
|
||||||
import forge.control.match.ControlWinLose;
|
|
||||||
|
|
||||||
import forge.game.GameEndReason;
|
import forge.game.GameEndReason;
|
||||||
import forge.game.GameFormat;
|
import forge.game.GameFormat;
|
||||||
@@ -49,6 +48,7 @@ import forge.quest.bazaar.QuestItemType;
|
|||||||
import forge.quest.data.QuestAssets;
|
import forge.quest.data.QuestAssets;
|
||||||
import forge.quest.data.QuestPreferences.QPref;
|
import forge.quest.data.QuestPreferences.QPref;
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
168
src/main/java/forge/gui/match/VMatchUI.java
Normal file
168
src/main/java/forge/gui/match/VMatchUI.java
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
package forge.gui.match;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.swing.JButton;
|
||||||
|
|
||||||
|
import forge.AllZone;
|
||||||
|
import forge.gui.framework.DragCell;
|
||||||
|
import forge.gui.framework.EDocID;
|
||||||
|
import forge.gui.framework.IVDoc;
|
||||||
|
import forge.gui.framework.IVTopLevelUI;
|
||||||
|
import forge.gui.framework.SIOUtil;
|
||||||
|
import forge.gui.framework.SResizingUtil;
|
||||||
|
import forge.gui.match.nonsingleton.VField;
|
||||||
|
import forge.gui.match.nonsingleton.VHand;
|
||||||
|
import forge.gui.match.views.VDetail;
|
||||||
|
import forge.gui.match.views.VDev;
|
||||||
|
import forge.gui.match.views.VMessage;
|
||||||
|
import forge.gui.match.views.VPicture;
|
||||||
|
import forge.view.FView;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Top level view class for match UI drag layout.<br>
|
||||||
|
* Has access methods for all draggable documents.<br>
|
||||||
|
* Uses singleton pattern.<br>
|
||||||
|
*
|
||||||
|
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
||||||
|
*/
|
||||||
|
public enum VMatchUI implements IVTopLevelUI {
|
||||||
|
/** */
|
||||||
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
|
// Instantiate non-singleton tab instances
|
||||||
|
private final IVDoc field0 = new VField(EDocID.FIELD_0, AllZone.getComputerPlayer());
|
||||||
|
private final IVDoc field1 = new VField(EDocID.FIELD_1, AllZone.getHumanPlayer());
|
||||||
|
private final IVDoc field2 = new VField(EDocID.FIELD_2, AllZone.getComputerPlayer());
|
||||||
|
private final IVDoc field3 = new VField(EDocID.FIELD_3, AllZone.getComputerPlayer());
|
||||||
|
|
||||||
|
private final IVDoc hand0 = new VHand(EDocID.HAND_0, AllZone.getComputerPlayer());
|
||||||
|
private final IVDoc hand1 = new VHand(EDocID.HAND_1, AllZone.getHumanPlayer());
|
||||||
|
private final IVDoc hand2 = new VHand(EDocID.HAND_2, AllZone.getComputerPlayer());
|
||||||
|
private final IVDoc hand3 = new VHand(EDocID.HAND_3, AllZone.getComputerPlayer());
|
||||||
|
|
||||||
|
// Instantiate singleton tab instances
|
||||||
|
private final IVDoc stack = EDocID.REPORT_STACK.getDoc();
|
||||||
|
private final IVDoc combat = EDocID.REPORT_COMBAT.getDoc();
|
||||||
|
private final IVDoc log = EDocID.REPORT_LOG.getDoc();
|
||||||
|
private final IVDoc players = EDocID.REPORT_PLAYERS.getDoc();
|
||||||
|
private final IVDoc message = EDocID.REPORT_MESSAGE.getDoc();
|
||||||
|
|
||||||
|
private final IVDoc dock = EDocID.BUTTON_DOCK.getDoc();
|
||||||
|
private final IVDoc detail = EDocID.CARD_DETAIL.getDoc();
|
||||||
|
private final IVDoc picture = EDocID.CARD_PICTURE.getDoc();
|
||||||
|
private final IVDoc antes = EDocID.CARD_ANTES.getDoc();
|
||||||
|
private final IVDoc devmode = EDocID.DEV_MODE.getDoc();
|
||||||
|
|
||||||
|
// Other instantiations
|
||||||
|
private final CMatchUI control = null;
|
||||||
|
private boolean isPopulated = false;
|
||||||
|
|
||||||
|
/** */
|
||||||
|
public void instantiate() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
public void populate() {
|
||||||
|
if (isPopulated) { return; }
|
||||||
|
else { isPopulated = true; }
|
||||||
|
|
||||||
|
SIOUtil.loadLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
public void defaultLayout() {
|
||||||
|
final DragCell cell0 = new DragCell();
|
||||||
|
final DragCell cell1 = new DragCell();
|
||||||
|
final DragCell cell2 = new DragCell();
|
||||||
|
final DragCell cell3 = new DragCell();
|
||||||
|
final DragCell cell4 = new DragCell();
|
||||||
|
final DragCell cell5 = new DragCell();
|
||||||
|
final DragCell cell6 = new DragCell();
|
||||||
|
|
||||||
|
cell0.addDoc(stack);
|
||||||
|
cell0.addDoc(combat);
|
||||||
|
cell0.addDoc(log);
|
||||||
|
cell0.addDoc(players);
|
||||||
|
|
||||||
|
cell1.addDoc(message);
|
||||||
|
cell1.addDoc(devmode);
|
||||||
|
|
||||||
|
cell2.addDoc(field0);
|
||||||
|
cell6.addDoc(field1);
|
||||||
|
if (AllZone.getPlayersInGame().size() > 2) { cell2.addDoc(field2); }
|
||||||
|
if (AllZone.getPlayersInGame().size() > 3) { cell2.addDoc(field3); }
|
||||||
|
|
||||||
|
if (AllZone.getPlayersInGame().size() > 1000) { cell3.addDoc(hand0); }
|
||||||
|
cell3.addDoc(hand1);
|
||||||
|
if (AllZone.getPlayersInGame().size() > 2) { cell2.addDoc(hand2); }
|
||||||
|
if (AllZone.getPlayersInGame().size() > 3) { cell2.addDoc(hand3); }
|
||||||
|
|
||||||
|
cell4.addDoc(dock);
|
||||||
|
cell5.addDoc(detail);
|
||||||
|
cell5.addDoc(picture);
|
||||||
|
cell5.addDoc(antes);
|
||||||
|
|
||||||
|
FView.SINGLETON_INSTANCE.addDragCell(cell0);
|
||||||
|
FView.SINGLETON_INSTANCE.addDragCell(cell1);
|
||||||
|
FView.SINGLETON_INSTANCE.addDragCell(cell2);
|
||||||
|
FView.SINGLETON_INSTANCE.addDragCell(cell3);
|
||||||
|
FView.SINGLETON_INSTANCE.addDragCell(cell4);
|
||||||
|
FView.SINGLETON_INSTANCE.addDragCell(cell5);
|
||||||
|
FView.SINGLETON_INSTANCE.addDragCell(cell6);
|
||||||
|
|
||||||
|
cell0.setRoughBounds(0, 0, 0.2, 0.7);
|
||||||
|
cell1.setRoughBounds(0, 0.7, 0.2, 0.3);
|
||||||
|
cell2.setRoughBounds(0.2, 0, 0.6, 0.33);
|
||||||
|
cell3.setRoughBounds(0.2, 0.66, 0.6, 0.34);
|
||||||
|
cell4.setRoughBounds(0.8, 0, 0.2, 0.25);
|
||||||
|
cell5.setRoughBounds(0.8, 0.25, 0.2, 0.75);
|
||||||
|
cell6.setRoughBounds(0.2, 0.33, 0.6, 0.33);
|
||||||
|
|
||||||
|
SResizingUtil.resizeWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
//========== Retrieval methods
|
||||||
|
|
||||||
|
/** @return {@link forge.gui.match.CMatchUI} */
|
||||||
|
public CMatchUI getControl() {
|
||||||
|
return this.control;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link forge.gui.match.views.VDetail} */
|
||||||
|
public VDetail getViewDetail() {
|
||||||
|
return ((VDetail) this.detail);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link forge.gui.match.views.VPicture} */
|
||||||
|
public VPicture getViewPicture() {
|
||||||
|
return ((VPicture) this.picture);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link forge.gui.match.views.VDev} */
|
||||||
|
public VDev getViewDevMode() {
|
||||||
|
return ((VDev) this.devmode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link java.util.List}<{@link forge.gui.match.nonsigleton.VField}> */
|
||||||
|
public List<VField> getFieldViews() {
|
||||||
|
final List<VField> lst = new ArrayList<VField>();
|
||||||
|
lst.add((VField) field0);
|
||||||
|
lst.add((VField) field1);
|
||||||
|
//lst.add((VField) field2);
|
||||||
|
//lst.add((VField) field3);
|
||||||
|
return lst;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link javax.swing.JButton} */
|
||||||
|
public JButton getBtnCancel() {
|
||||||
|
return ((VMessage) this.message).getBtnCancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link javax.swing.JButton} */
|
||||||
|
public JButton getBtnOK() {
|
||||||
|
return ((VMessage) this.message).getBtnOK();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package forge.view.match;
|
package forge.gui.match;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
@@ -13,7 +13,6 @@ import net.miginfocom.swing.MigLayout;
|
|||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
import forge.Constant;
|
import forge.Constant;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.control.match.ControlWinLose;
|
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
38
src/main/java/forge/gui/match/controllers/CAntes.java
Normal file
38
src/main/java/forge/gui/match/controllers/CAntes.java
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package forge.gui.match.controllers;
|
||||||
|
|
||||||
|
import forge.Command;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls the ante panel in the match UI.
|
||||||
|
*
|
||||||
|
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum CAntes implements ICDoc {
|
||||||
|
/** */
|
||||||
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Command getCommandOnSelect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#initialize()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#update()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
40
src/main/java/forge/gui/match/controllers/CCombat.java
Normal file
40
src/main/java/forge/gui/match/controllers/CCombat.java
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
package forge.gui.match.controllers;
|
||||||
|
|
||||||
|
import forge.Command;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.match.views.VCombat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls the combat panel in the match UI.
|
||||||
|
*
|
||||||
|
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum CCombat implements ICDoc {
|
||||||
|
/** */
|
||||||
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Command getCommandOnSelect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#initialize()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#update()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
VCombat.SINGLETON_INSTANCE.updateCombat("");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -15,29 +15,25 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package forge.control.match;
|
package forge.gui.match.controllers;
|
||||||
|
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.view.match.ViewDetail;
|
import forge.Command;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.match.views.VDetail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Controls the card detail area in the match UI.
|
* Controls the card detail area in the match UI.
|
||||||
*
|
*
|
||||||
|
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||||
*/
|
*/
|
||||||
public class ControlDetail {
|
public enum CDetail implements ICDoc {
|
||||||
private final ViewDetail view;
|
/** */
|
||||||
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
private Card currentCard = null;
|
private Card currentCard = null;
|
||||||
|
|
||||||
/**
|
|
||||||
* Controls the card detail area in the match UI.
|
|
||||||
*
|
|
||||||
* @param v   The CardViewer Swing component.
|
|
||||||
*/
|
|
||||||
public ControlDetail(final ViewDetail v) {
|
|
||||||
this.view = v;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows card details and/or picture in sidebar cardview tabber.
|
* Shows card details and/or picture in sidebar cardview tabber.
|
||||||
*
|
*
|
||||||
@@ -45,7 +41,7 @@ public class ControlDetail {
|
|||||||
*/
|
*/
|
||||||
public void showCard(final Card c) {
|
public void showCard(final Card c) {
|
||||||
this.currentCard = c;
|
this.currentCard = c;
|
||||||
this.view.getPnlDetail().setCard(c);
|
VDetail.SINGLETON_INSTANCE.getPnlDetail().setCard(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -56,4 +52,26 @@ public class ControlDetail {
|
|||||||
public Card getCurrentCard() {
|
public Card getCurrentCard() {
|
||||||
return this.currentCard;
|
return this.currentCard;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Command getCommandOnSelect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#initialize()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#update()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
110
src/main/java/forge/gui/match/controllers/CDev.java
Normal file
110
src/main/java/forge/gui/match/controllers/CDev.java
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
package forge.gui.match.controllers;
|
||||||
|
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseListener;
|
||||||
|
|
||||||
|
import forge.Command;
|
||||||
|
import forge.Singletons;
|
||||||
|
import forge.gui.GuiDisplayUtil;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.match.views.VDev;
|
||||||
|
import forge.properties.ForgePreferences.FPref;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls the combat panel in the match UI.
|
||||||
|
*
|
||||||
|
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum CDev implements ICDoc {
|
||||||
|
/** */
|
||||||
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
|
//========= Start mouse listener inits
|
||||||
|
private final MouseListener madMilling = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblMilling().toggleEnabled(); } };
|
||||||
|
|
||||||
|
private final MouseListener madUnlimited = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblUnlimitedLands().toggleEnabled(); } };
|
||||||
|
|
||||||
|
private final MouseListener madMana = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
GuiDisplayUtil.devModeGenerateMana(); } };
|
||||||
|
|
||||||
|
private final MouseListener madSetup = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
GuiDisplayUtil.devSetupGameState(); } };
|
||||||
|
|
||||||
|
private final MouseListener madTutor = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
GuiDisplayUtil.devModeTutor(); } };
|
||||||
|
|
||||||
|
private final MouseListener madAddAnyCard = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
GuiDisplayUtil.devModeAddAnyCard(); } };
|
||||||
|
|
||||||
|
private final MouseListener madCounter = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
GuiDisplayUtil.devModeAddCounter(); } };
|
||||||
|
|
||||||
|
private final MouseListener madTap = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
GuiDisplayUtil.devModeTapPerm(); } };
|
||||||
|
|
||||||
|
private final MouseListener madUntap = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
GuiDisplayUtil.devModeUntapPerm(); } };
|
||||||
|
|
||||||
|
private final MouseListener madLife = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
GuiDisplayUtil.devModeSetLife(); } };
|
||||||
|
|
||||||
|
//========== End mouse listener inits
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Command getCommandOnSelect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#initialize()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblMilling().addMouseListener(madMilling);
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblUnlimitedLands().addMouseListener(madUnlimited);
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblGenerateMana().addMouseListener(madMana);
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblSetupGame().addMouseListener(madSetup);
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblTutor().addMouseListener(madTutor);
|
||||||
|
VDev.SINGLETON_INSTANCE.getAnyCard().addMouseListener(madAddAnyCard);
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblCounterPermanent().addMouseListener(madCounter);
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblTapPermanent().addMouseListener(madTap);
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblUntapPermanent().addMouseListener(madUntap);
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblSetLife().addMouseListener(madLife);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#update()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_MILLING_LOSS)) {
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblMilling().setEnabled(true);
|
||||||
|
} else {
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblMilling().setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.DEV_UNLIMITED_LAND)) {
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblUnlimitedLands().setEnabled(true);
|
||||||
|
} else {
|
||||||
|
VDev.SINGLETON_INSTANCE.getLblUnlimitedLands().setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -15,11 +15,13 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package forge.control.match;
|
package forge.gui.match.controllers;
|
||||||
|
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.datatransfer.StringSelection;
|
import java.awt.datatransfer.StringSelection;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -28,30 +30,25 @@ import java.util.Map.Entry;
|
|||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
|
|
||||||
import forge.AllZone;
|
import forge.AllZone;
|
||||||
|
import forge.Command;
|
||||||
import forge.Constant;
|
import forge.Constant;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.gui.ForgeAction;
|
import forge.gui.ForgeAction;
|
||||||
|
import forge.gui.OverlayUtils;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.match.views.VDock;
|
||||||
import forge.item.CardPrinted;
|
import forge.item.CardPrinted;
|
||||||
import forge.properties.NewConstants;
|
import forge.properties.NewConstants;
|
||||||
import forge.view.match.ViewDock;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Child controller, handles dock button operations.
|
* Controls the dock panel in the match UI.
|
||||||
*
|
*
|
||||||
|
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||||
*/
|
*/
|
||||||
public class ControlDock {
|
public enum CDock implements ICDoc {
|
||||||
private final ViewDock view;
|
/** */
|
||||||
|
SINGLETON_INSTANCE;
|
||||||
/**
|
|
||||||
* Child controller, handles dock button operations.
|
|
||||||
*
|
|
||||||
* @param v
|
|
||||||
*   ViewDock obj
|
|
||||||
*/
|
|
||||||
public ControlDock(final ViewDock v) {
|
|
||||||
this.view = v;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Concede game, bring up WinLose UI. */
|
/** Concede game, bring up WinLose UI. */
|
||||||
public void concede() {
|
public void concede() {
|
||||||
@@ -59,22 +56,14 @@ public class ControlDock {
|
|||||||
Singletons.getModel().getGameAction().checkStateEffects();
|
Singletons.getModel().getGameAction().checkStateEffects();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the view.
|
|
||||||
*
|
|
||||||
* @return ViewDock
|
|
||||||
*/
|
|
||||||
public ViewDock getView() {
|
|
||||||
return this.view;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* End turn.
|
* End turn.
|
||||||
*/
|
*/
|
||||||
public void endTurn() {
|
public void endTurn() {
|
||||||
// Big thanks to you, Gameplay Guru, since I was too lazy to figure this
|
// Big thanks to you, Gameplay Guru, since I was too lazy to figure this
|
||||||
// out before release. Doublestrike 24-11-11
|
// out before release. Doublestrike 24-11-11
|
||||||
System.err.println("forge.control.match > ControlDock > endTurn()");
|
//
|
||||||
|
System.err.println("forge.control.match > CDock > endTurn()");
|
||||||
System.out.println("Should skip to the end of turn, or entire turn.");
|
System.out.println("Should skip to the end of turn, or entire turn.");
|
||||||
System.err.println("If some gameplay guru could implement this, that would be great...");
|
System.err.println("If some gameplay guru could implement this, that would be great...");
|
||||||
}
|
}
|
||||||
@@ -160,4 +149,45 @@ public class ControlDock {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // End DeckListAction
|
} // End DeckListAction
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Command getCommandOnSelect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#initialize()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
VDock.SINGLETON_INSTANCE.getBtnConcede()
|
||||||
|
.addMouseListener(new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
concede(); } });
|
||||||
|
|
||||||
|
VDock.SINGLETON_INSTANCE.getBtnSettings()
|
||||||
|
.addMouseListener(new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
OverlayUtils.showOverlay(); } });
|
||||||
|
|
||||||
|
VDock.SINGLETON_INSTANCE.getBtnEndTurn()
|
||||||
|
.addMouseListener(new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
endTurn(); } });
|
||||||
|
|
||||||
|
VDock.SINGLETON_INSTANCE.getBtnViewDeckList()
|
||||||
|
.addMouseListener(new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
viewDeckList(); } });
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#update()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
53
src/main/java/forge/gui/match/controllers/CLog.java
Normal file
53
src/main/java/forge/gui/match/controllers/CLog.java
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
package forge.gui.match.controllers;
|
||||||
|
|
||||||
|
import java.util.Observable;
|
||||||
|
import java.util.Observer;
|
||||||
|
|
||||||
|
import forge.AllZone;
|
||||||
|
import forge.Command;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.match.views.VLog;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls the combat panel in the match UI.
|
||||||
|
*
|
||||||
|
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum CLog implements ICDoc, Observer {
|
||||||
|
/** */
|
||||||
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Command getCommandOnSelect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#initialize()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
AllZone.getGameLog().addObserver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#update()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
VLog.SINGLETON_INSTANCE.updateConsole();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update(Observable arg0, Object arg1) {
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
114
src/main/java/forge/gui/match/controllers/CMessage.java
Normal file
114
src/main/java/forge/gui/match/controllers/CMessage.java
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
* Forge: Play Magic: the Gathering.
|
||||||
|
* Copyright (C) 2011 Forge Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package forge.gui.match.controllers;
|
||||||
|
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
import forge.Command;
|
||||||
|
import forge.Constant;
|
||||||
|
import forge.Singletons;
|
||||||
|
import forge.gui.GuiInput;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.framework.SDisplayUtil;
|
||||||
|
import forge.gui.match.views.VMessage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls the message panel in the match UI.
|
||||||
|
*
|
||||||
|
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||||
|
*/
|
||||||
|
public enum CMessage implements ICDoc {
|
||||||
|
/** */
|
||||||
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
|
private final GuiInput inputControl = new GuiInput();
|
||||||
|
private final ActionListener actCancel = new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(final ActionEvent evt) {
|
||||||
|
inputControl.selectButtonCancel();
|
||||||
|
VMessage.SINGLETON_INSTANCE.getBtnOK().requestFocusInWindow();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private final ActionListener actOK = new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(final ActionEvent evt) {
|
||||||
|
inputControl.selectButtonOK();
|
||||||
|
|
||||||
|
if (Singletons.getModel().getGameState().getPhaseHandler().isNeedToNextPhase()) {
|
||||||
|
// moves to next turn
|
||||||
|
Singletons.getModel().getGameState().getPhaseHandler().setNeedToNextPhase(false);
|
||||||
|
Singletons.getModel().getGameState().getPhaseHandler().nextPhase();
|
||||||
|
}
|
||||||
|
VMessage.SINGLETON_INSTANCE.getBtnOK().requestFocusInWindow();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
VMessage.SINGLETON_INSTANCE.getBtnCancel().removeActionListener(actCancel);
|
||||||
|
VMessage.SINGLETON_INSTANCE.getBtnCancel().addActionListener(actCancel);
|
||||||
|
|
||||||
|
VMessage.SINGLETON_INSTANCE.getBtnOK().removeActionListener(actOK);
|
||||||
|
VMessage.SINGLETON_INSTANCE.getBtnOK().addActionListener(actOK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the input control.
|
||||||
|
*
|
||||||
|
* @return GuiInput
|
||||||
|
*/
|
||||||
|
public GuiInput getInputControl() {
|
||||||
|
return this.inputControl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param s0   {@link java.lang.String} */
|
||||||
|
public void setMessage(String s0) {
|
||||||
|
VMessage.SINGLETON_INSTANCE.getTarMessage().setText(s0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Updates count label in input area. */
|
||||||
|
public void updateGameCount() {
|
||||||
|
VMessage.SINGLETON_INSTANCE.getLblGames().setText("<html>Game #"
|
||||||
|
+ (Singletons.getModel().getMatchState().getGamesPlayedCount() + 1)
|
||||||
|
+ " of " + Singletons.getModel().getMatchState().getGamesPerMatch()
|
||||||
|
+ "<br>" + Constant.Runtime.getGameType().toString() + " mode</html>");
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Flashes animation on input panel if play is currently waiting on input. */
|
||||||
|
public void remind() {
|
||||||
|
SDisplayUtil.remind(VMessage.SINGLETON_INSTANCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Command getCommandOnSelect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#update()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,36 +15,23 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
package forge.control.match;
|
package forge.gui.match.controllers;
|
||||||
import forge.Card;
|
import forge.Card;
|
||||||
import forge.view.match.ViewPicture;
|
import forge.Command;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.match.views.VPicture;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Controls the card picture panel in the match UI.
|
||||||
*
|
*
|
||||||
* Controls the vertical tabber in sidebar used for viewing card details and
|
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||||
* picture.
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class ControlPicture {
|
public enum CPicture implements ICDoc {
|
||||||
private final ViewPicture view;
|
/** */
|
||||||
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
private Card currentCard = null;
|
private Card currentCard = null;
|
||||||
|
|
||||||
/**
|
|
||||||
* Controls the vertical tabber in sidebar used for viewing card details and
|
|
||||||
* picture.
|
|
||||||
*
|
|
||||||
* @param v
|
|
||||||
*   The CardViewer Swing component.
|
|
||||||
*/
|
|
||||||
public ControlPicture(final ViewPicture v) {
|
|
||||||
this.view = v;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return ViewPicture */
|
|
||||||
public ViewPicture getView() {
|
|
||||||
return view;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows card details and/or picture in sidebar cardview tabber.
|
* Shows card details and/or picture in sidebar cardview tabber.
|
||||||
*
|
*
|
||||||
@@ -53,7 +40,7 @@ public class ControlPicture {
|
|||||||
*/
|
*/
|
||||||
public void showCard(final Card c) {
|
public void showCard(final Card c) {
|
||||||
this.currentCard = c;
|
this.currentCard = c;
|
||||||
this.view.getPnlPicture().setCard(c);
|
VPicture.SINGLETON_INSTANCE.getPnlPicture().setCard(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -64,4 +51,26 @@ public class ControlPicture {
|
|||||||
public Card getCurrentCard() {
|
public Card getCurrentCard() {
|
||||||
return this.currentCard;
|
return this.currentCard;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Command getCommandOnSelect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#initialize()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#update()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
42
src/main/java/forge/gui/match/controllers/CPlayers.java
Normal file
42
src/main/java/forge/gui/match/controllers/CPlayers.java
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
package forge.gui.match.controllers;
|
||||||
|
|
||||||
|
import forge.AllZone;
|
||||||
|
import forge.Command;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.match.views.VPlayers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls the combat panel in the match UI.
|
||||||
|
*
|
||||||
|
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum CPlayers implements ICDoc {
|
||||||
|
/** */
|
||||||
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Command getCommandOnSelect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#initialize()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#update()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
VPlayers.SINGLETON_INSTANCE.updatePlayerLabels(AllZone.getComputerPlayer());
|
||||||
|
VPlayers.SINGLETON_INSTANCE.updatePlayerLabels(AllZone.getHumanPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
52
src/main/java/forge/gui/match/controllers/CStack.java
Normal file
52
src/main/java/forge/gui/match/controllers/CStack.java
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
package forge.gui.match.controllers;
|
||||||
|
|
||||||
|
import java.util.Observable;
|
||||||
|
import java.util.Observer;
|
||||||
|
|
||||||
|
import forge.AllZone;
|
||||||
|
import forge.Command;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.match.views.VStack;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls the combat panel in the match UI.
|
||||||
|
*
|
||||||
|
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public enum CStack implements ICDoc, Observer {
|
||||||
|
/** */
|
||||||
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Command getCommandOnSelect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#initialize()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
AllZone.getStack().addObserver(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#update()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
VStack.SINGLETON_INSTANCE.updateStack();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update(Observable arg0, Object arg1) {
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
579
src/main/java/forge/gui/match/nonsingleton/CField.java
Normal file
579
src/main/java/forge/gui/match/nonsingleton/CField.java
Normal file
@@ -0,0 +1,579 @@
|
|||||||
|
/*
|
||||||
|
* Forge: Play Magic: the Gathering.
|
||||||
|
* Copyright (C) 2011 Forge Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package forge.gui.match.nonsingleton;
|
||||||
|
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseListener;
|
||||||
|
import java.awt.event.MouseMotionAdapter;
|
||||||
|
import java.awt.event.MouseMotionListener;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Observable;
|
||||||
|
import java.util.Observer;
|
||||||
|
|
||||||
|
import com.google.code.jyield.Generator;
|
||||||
|
import com.google.code.jyield.YieldUtils;
|
||||||
|
|
||||||
|
import forge.AllZone;
|
||||||
|
import forge.Card;
|
||||||
|
import forge.CardList;
|
||||||
|
import forge.Command;
|
||||||
|
import forge.Constant;
|
||||||
|
import forge.Singletons;
|
||||||
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
|
import forge.control.input.Input;
|
||||||
|
import forge.control.input.InputAttack;
|
||||||
|
import forge.control.input.InputBlock;
|
||||||
|
import forge.control.input.InputMana;
|
||||||
|
import forge.control.input.InputPayManaCost;
|
||||||
|
import forge.control.input.InputPayManaCostAbility;
|
||||||
|
import forge.game.player.Player;
|
||||||
|
import forge.game.zone.PlayerZone;
|
||||||
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.ForgeAction;
|
||||||
|
import forge.gui.GuiDisplayUtil;
|
||||||
|
import forge.gui.GuiUtils;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
|
import forge.gui.match.controllers.CMessage;
|
||||||
|
import forge.gui.toolbox.FLabel;
|
||||||
|
import forge.properties.ForgeProps;
|
||||||
|
import forge.properties.NewConstants;
|
||||||
|
import forge.properties.NewConstants.Lang.GuiDisplay.ComputerHand;
|
||||||
|
import forge.properties.NewConstants.Lang.GuiDisplay.ComputerLibrary;
|
||||||
|
import forge.properties.NewConstants.Lang.GuiDisplay.HumanHand;
|
||||||
|
import forge.properties.NewConstants.Lang.GuiDisplay.HumanLibrary;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls Swing components of a player's field instance.
|
||||||
|
*/
|
||||||
|
public class CField implements ICDoc {
|
||||||
|
private final Player player;
|
||||||
|
private final VField view;
|
||||||
|
private boolean initializedAlready = false;
|
||||||
|
|
||||||
|
private MouseMotionListener mmlCardOver = new MouseMotionAdapter() { @Override
|
||||||
|
public void mouseMoved(final MouseEvent e) {
|
||||||
|
cardoverAction(); } };
|
||||||
|
|
||||||
|
private final MouseListener madHand = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
handAction(); } };
|
||||||
|
|
||||||
|
private final MouseListener madAvatar = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
avatarAction(); } };
|
||||||
|
|
||||||
|
private final MouseListener madExiled = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
exiledAction(); } };
|
||||||
|
|
||||||
|
private final MouseListener madLibrary = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
libraryAction(); } };
|
||||||
|
|
||||||
|
private final MouseListener madGraveyard = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
graveyardAction(); } };
|
||||||
|
|
||||||
|
private final MouseListener madFlashback = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
flashbackAction(); } };
|
||||||
|
|
||||||
|
private final MouseListener madCardClick = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
cardclickAction(e); } };
|
||||||
|
|
||||||
|
private final MouseListener madBlack = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
blackAction(); } };
|
||||||
|
|
||||||
|
private final MouseListener madBlue = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
blueAction(); } };
|
||||||
|
|
||||||
|
private final MouseListener madGreen = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
greenAction(); } };
|
||||||
|
|
||||||
|
private final MouseListener madRed = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
redAction(); } };
|
||||||
|
|
||||||
|
private final MouseListener madWhite = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
whiteAction(); } };
|
||||||
|
|
||||||
|
private final MouseListener madColorless = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
colorlessAction(); } };
|
||||||
|
|
||||||
|
// Hand, Graveyard, Library, Flashback, Exile zones, attached to hand.
|
||||||
|
private final Observer observerZones = new Observer() {
|
||||||
|
@Override
|
||||||
|
public void update(final Observable a, final Object b) {
|
||||||
|
CField.this.view.updateZones(CField.this.player);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Life total, poison total, and keywords, attached directly to Player.
|
||||||
|
private final Observer observerDetails = new Observer() {
|
||||||
|
@Override
|
||||||
|
public void update(final Observable a, final Object b) {
|
||||||
|
CField.this.view.updateDetails(CField.this.player);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Card play area, attached to battlefield zone.
|
||||||
|
private final Observer observerPlay = new Observer() {
|
||||||
|
@Override
|
||||||
|
public void update(final Observable a, final Object b) {
|
||||||
|
final PlayerZone pZone = (PlayerZone) a;
|
||||||
|
GuiDisplayUtil.setupPlayZone(CField.this.view.getTabletop(), pZone.getCards(false));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls Swing components of a player's field instance.
|
||||||
|
*
|
||||||
|
* @param p0   {@link forge.game.player.Player}
|
||||||
|
* @param v0   {@link forge.gui.match.nonsingleton.VField}
|
||||||
|
*/
|
||||||
|
public CField(final Player p0, final VField v0) {
|
||||||
|
this.player = p0;
|
||||||
|
this.view = v0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
if (initializedAlready) { return; }
|
||||||
|
else { initializedAlready = true; }
|
||||||
|
|
||||||
|
// Observers
|
||||||
|
CField.this.player.getZone(ZoneType.Hand).addObserver(observerZones);
|
||||||
|
CField.this.player.getZone(ZoneType.Battlefield).addObserver(observerPlay);
|
||||||
|
CField.this.player.addObserver(observerDetails);
|
||||||
|
|
||||||
|
// Listeners
|
||||||
|
// Battlefield card clicks
|
||||||
|
this.view.getTabletop().addMouseListener(madCardClick);
|
||||||
|
|
||||||
|
// Battlefield card mouseover
|
||||||
|
this.view.getTabletop().addMouseMotionListener(mmlCardOver);
|
||||||
|
|
||||||
|
// Player select
|
||||||
|
this.view.getAvatarArea().addMouseListener(madAvatar);
|
||||||
|
|
||||||
|
// Detail label listeners
|
||||||
|
((FLabel) this.view.getLblGraveyard()).setHoverable(true);
|
||||||
|
this.view.getLblGraveyard().addMouseListener(madGraveyard);
|
||||||
|
|
||||||
|
((FLabel) this.view.getLblExile()).setHoverable(true);
|
||||||
|
this.view.getLblExile().addMouseListener(madExiled);
|
||||||
|
|
||||||
|
this.view.getLblLibrary().addMouseListener(madLibrary);
|
||||||
|
this.view.getLblHand().addMouseListener(madHand);
|
||||||
|
|
||||||
|
((FLabel) this.view.getLblFlashback()).setHoverable(true);
|
||||||
|
this.view.getLblFlashback().addMouseListener(madFlashback);
|
||||||
|
|
||||||
|
((FLabel) this.view.getLblBlack()).setHoverable(true);
|
||||||
|
this.view.getLblBlack().addMouseListener(madBlack);
|
||||||
|
|
||||||
|
((FLabel) this.view.getLblBlue()).setHoverable(true);
|
||||||
|
this.view.getLblBlue().addMouseListener(madBlue);
|
||||||
|
|
||||||
|
((FLabel) this.view.getLblGreen()).setHoverable(true);
|
||||||
|
this.view.getLblGreen().addMouseListener(madGreen);
|
||||||
|
|
||||||
|
((FLabel) this.view.getLblRed()).setHoverable(true);
|
||||||
|
this.view.getLblRed().removeMouseListener(madRed);
|
||||||
|
this.view.getLblRed().addMouseListener(madRed);
|
||||||
|
|
||||||
|
((FLabel) this.view.getLblWhite()).setHoverable(true);
|
||||||
|
this.view.getLblWhite().removeMouseListener(madWhite);
|
||||||
|
this.view.getLblWhite().addMouseListener(madWhite);
|
||||||
|
|
||||||
|
((FLabel) this.view.getLblColorless()).setHoverable(true);
|
||||||
|
this.view.getLblColorless().addMouseListener(madColorless);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link forge.game.player.Player} */
|
||||||
|
public Player getPlayer() {
|
||||||
|
return this.player;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link forge.gui.nonsingleton.VField} */
|
||||||
|
public VField getView() {
|
||||||
|
return this.view;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets all phase buttons to "inactive", so highlight won't be drawn on
|
||||||
|
* them. "Enabled" state remains the same.
|
||||||
|
*/
|
||||||
|
public void resetPhaseButtons() {
|
||||||
|
this.view.getLblUpkeep().setActive(false);
|
||||||
|
this.view.getLblDraw().setActive(false);
|
||||||
|
this.view.getLblMain1().setActive(false);
|
||||||
|
this.view.getLblBeginCombat().setActive(false);
|
||||||
|
this.view.getLblDeclareAttackers().setActive(false);
|
||||||
|
this.view.getLblDeclareBlockers().setActive(false);
|
||||||
|
this.view.getLblFirstStrike().setActive(false);
|
||||||
|
this.view.getLblCombatDamage().setActive(false);
|
||||||
|
this.view.getLblEndCombat().setActive(false);
|
||||||
|
this.view.getLblMain2().setActive(false);
|
||||||
|
this.view.getLblEndTurn().setActive(false);
|
||||||
|
this.view.getLblCleanup().setActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receives click and programmatic requests for viewing data stacks in the
|
||||||
|
* "zones" of a player field: hand, library, etc.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private class ZoneAction extends ForgeAction {
|
||||||
|
private static final long serialVersionUID = -5822976087772388839L;
|
||||||
|
private final PlayerZone zone;
|
||||||
|
private final String title;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Receives click and programmatic requests for viewing data stacks in
|
||||||
|
* the "zones" of a player field: hand, graveyard, etc. The library
|
||||||
|
* "zone" is an exception to the rule; it's handled in DeckListAction.
|
||||||
|
*
|
||||||
|
* @param zone
|
||||||
|
*   PlayerZone obj
|
||||||
|
* @param property
|
||||||
|
*   String obj
|
||||||
|
*/
|
||||||
|
public ZoneAction(final PlayerZone zone, final String property) {
|
||||||
|
super(property);
|
||||||
|
this.title = ForgeProps.getLocalized(property + "/title");
|
||||||
|
this.zone = zone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param e
|
||||||
|
*   ActionEvent obj
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(final ActionEvent e) {
|
||||||
|
Generator<Card> c = YieldUtils.toGenerator(this.getCardsAsIterable());
|
||||||
|
|
||||||
|
if (AllZone.getNameChanger().shouldChangeCardName()) {
|
||||||
|
c = AllZone.getNameChanger().changeCard(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
final Iterable<Card> myIterable = YieldUtils.toIterable(c);
|
||||||
|
final ArrayList<Card> choices = YieldUtils.toArrayList(myIterable);
|
||||||
|
|
||||||
|
final ArrayList<Card> choices2 = new ArrayList<Card>();
|
||||||
|
|
||||||
|
if (choices.isEmpty()) {
|
||||||
|
GuiUtils.chooseOneOrNone(this.title, new String[] { "no cards" });
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < choices.size(); i++) {
|
||||||
|
final Card crd = choices.get(i);
|
||||||
|
if (crd.isFaceDown()) {
|
||||||
|
if (crd.getController().isComputer() || !crd.hasKeyword("You may look at this card.")) {
|
||||||
|
final Card faceDown = new Card();
|
||||||
|
faceDown.setName("Face Down");
|
||||||
|
choices2.add(faceDown);
|
||||||
|
} else {
|
||||||
|
final Card faceDown = AllZone.getCardFactory().copyCard(crd);
|
||||||
|
faceDown.turnFaceUp();
|
||||||
|
choices2.add(faceDown);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
choices2.add(crd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final Card choice = (Card) GuiUtils.chooseOneOrNone(this.title, choices2.toArray());
|
||||||
|
if (choice != null) {
|
||||||
|
this.doAction(choice);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Iterable<Card> getCardsAsIterable() {
|
||||||
|
return this.zone.getCards();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doAction(final Card c) {
|
||||||
|
}
|
||||||
|
} // End ZoneAction
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private void handAction() {
|
||||||
|
if (!CField.this.player.isComputer()) {
|
||||||
|
new ZoneAction(CField.this.player.getZone(ZoneType.Hand), HumanHand.BASE)
|
||||||
|
.actionPerformed(null);
|
||||||
|
} else if (Constant.Runtime.DEV_MODE[0]
|
||||||
|
|| CField.this.player.hasKeyword("Play with your hand revealed.")) {
|
||||||
|
new ZoneAction(CField.this.player.getZone(ZoneType.Hand), ComputerHand.BASE)
|
||||||
|
.actionPerformed(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private void flashbackAction() {
|
||||||
|
if (!CField.this.player.isComputer()) {
|
||||||
|
new ZoneAction(AllZone.getHumanPlayer().getZone(ZoneType.Graveyard),
|
||||||
|
NewConstants.Lang.GuiDisplay.HUMAN_FLASHBACK) {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 8120331222693706164L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Iterable<Card> getCardsAsIterable() {
|
||||||
|
return CardFactoryUtil.getExternalZoneActivationCards(AllZone.getHumanPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doAction(final Card c) {
|
||||||
|
Singletons.getModel().getGameAction().playCard(c);
|
||||||
|
}
|
||||||
|
} .actionPerformed(null);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
new ZoneAction(CField.this.player.getZone(ZoneType.Graveyard),
|
||||||
|
NewConstants.Lang.GuiDisplay.COMPUTER_FLASHBACK) {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 8120331222693706164L;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Iterable<Card> getCardsAsIterable() {
|
||||||
|
return CardFactoryUtil.getExternalZoneActivationCards(AllZone.getComputerPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void doAction(final Card c) {
|
||||||
|
Singletons.getModel().getGameAction().playCard(c);
|
||||||
|
}
|
||||||
|
} .actionPerformed(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private void libraryAction() {
|
||||||
|
if (!Constant.Runtime.DEV_MODE[0]) { return; }
|
||||||
|
|
||||||
|
if (!CField.this.player.isComputer()) {
|
||||||
|
new ZoneAction(CField.this.player.getZone(ZoneType.Library), HumanLibrary.BASE)
|
||||||
|
.actionPerformed(null);
|
||||||
|
} else {
|
||||||
|
new ZoneAction(CField.this.player.getZone(ZoneType.Library), ComputerLibrary.BASE)
|
||||||
|
.actionPerformed(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private void exiledAction() {
|
||||||
|
if (CField.this.player.isComputer()) {
|
||||||
|
new ZoneAction(CField.this.player.getZone(ZoneType.Exile),
|
||||||
|
NewConstants.Lang.GuiDisplay.COMPUTER_EXILED).actionPerformed(null);
|
||||||
|
} else {
|
||||||
|
new ZoneAction(CField.this.player.getZone(ZoneType.Exile),
|
||||||
|
NewConstants.Lang.GuiDisplay.HUMAN_EXILED).actionPerformed(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void graveyardAction() {
|
||||||
|
if (CField.this.player.isComputer()) {
|
||||||
|
new ZoneAction(CField.this.player.getZone(ZoneType.Graveyard),
|
||||||
|
NewConstants.Lang.GuiDisplay.COMPUTER_GRAVEYARD).actionPerformed(null);
|
||||||
|
} else {
|
||||||
|
new ZoneAction(CField.this.player.getZone(ZoneType.Graveyard),
|
||||||
|
NewConstants.Lang.GuiDisplay.HUMAN_GRAVEYARD).actionPerformed(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void avatarAction() {
|
||||||
|
if (CField.this.player.isComputer()) {
|
||||||
|
CMessage.SINGLETON_INSTANCE
|
||||||
|
.getInputControl().selectPlayer(AllZone.getComputerPlayer());
|
||||||
|
} else {
|
||||||
|
CMessage.SINGLETON_INSTANCE
|
||||||
|
.getInputControl().selectPlayer(AllZone.getHumanPlayer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private void cardoverAction() {
|
||||||
|
final Card c = CField.this.view.getTabletop().getCardFromMouseOverPanel();
|
||||||
|
if (c != null) {
|
||||||
|
CMatchUI.SINGLETON_INSTANCE.setCard(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private void cardclickAction(final MouseEvent e) {
|
||||||
|
// original version:
|
||||||
|
// final Card c = t.getDetailController().getCurrentCard();
|
||||||
|
// Roujin's bug fix version dated 2-12-2012
|
||||||
|
final Card c = CField.this.view.getTabletop().getCardFromMouseOverPanel();
|
||||||
|
|
||||||
|
final Input input = CMessage.SINGLETON_INSTANCE.getInputControl().getInput();
|
||||||
|
|
||||||
|
if (c != null && c.isInZone(ZoneType.Battlefield)) {
|
||||||
|
if (c.isTapped()
|
||||||
|
&& ((input instanceof InputPayManaCost) || (input instanceof InputPayManaCostAbility))) {
|
||||||
|
final forge.view.arcane.CardPanel cardPanel = CField.this.view.getTabletop().getCardPanel(
|
||||||
|
c.getUniqueNumber());
|
||||||
|
for (final forge.view.arcane.CardPanel cp : cardPanel.getAttachedPanels()) {
|
||||||
|
if (cp.getCard().isUntapped()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final CardList att = AllZone.getCombat().getAttackerList();
|
||||||
|
if ((c.isTapped() || c.hasSickness() || ((c.hasKeyword("Vigilance")) && att.contains(c)))
|
||||||
|
&& (input instanceof InputAttack)) {
|
||||||
|
final forge.view.arcane.CardPanel cardPanel = CField.this.view.getTabletop().getCardPanel(
|
||||||
|
c.getUniqueNumber());
|
||||||
|
for (final forge.view.arcane.CardPanel cp : cardPanel.getAttachedPanels()) {
|
||||||
|
if (cp.getCard().isUntapped() && !cp.getCard().hasSickness()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.isMetaDown()) {
|
||||||
|
if (att.contains(c) && (input instanceof InputAttack)
|
||||||
|
&& !c.hasKeyword("CARDNAME attacks each turn if able.")) {
|
||||||
|
c.untap();
|
||||||
|
AllZone.getCombat().removeFromCombat(c);
|
||||||
|
} else if (input instanceof InputBlock) {
|
||||||
|
if (c.getController().isHuman()) {
|
||||||
|
AllZone.getCombat().removeFromCombat(c);
|
||||||
|
}
|
||||||
|
((InputBlock) input).removeFromAllBlocking(c);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//Yosei, the Morning Star required cards to be chosen on computer side
|
||||||
|
//earlier it was enforced that cards must be in player zone
|
||||||
|
//this can potentially break some other functionality
|
||||||
|
//(tapping lands works ok but some custom cards may not...)
|
||||||
|
if (c.getController() != null) {
|
||||||
|
input.selectCard(c, c.getController().getZone(ZoneType.Battlefield));
|
||||||
|
} else {
|
||||||
|
//in weird case card has no controller revert to default behaviour
|
||||||
|
input.selectCard(c, AllZone.getHumanPlayer().getZone(ZoneType.Battlefield));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private void blackAction() {
|
||||||
|
if (CField.this.player.isComputer()) {
|
||||||
|
System.out.println("Stop trying to spend the AI's mana");
|
||||||
|
// TODO: Mindslaver might need to add changes here
|
||||||
|
} else {
|
||||||
|
final Input in = AllZone.getInputControl().getInput();
|
||||||
|
if (in instanceof InputMana) {
|
||||||
|
// Do something
|
||||||
|
((InputMana) in).selectManaPool(Constant.Color.BLACK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private void blueAction() {
|
||||||
|
if (CField.this.player.isComputer()) {
|
||||||
|
System.out.println("Stop trying to spend the AI's mana");
|
||||||
|
// TODO: Mindslaver might need to add changes here
|
||||||
|
} else {
|
||||||
|
final Input in = AllZone.getInputControl().getInput();
|
||||||
|
if (in instanceof InputMana) {
|
||||||
|
// Do something
|
||||||
|
((InputMana) in).selectManaPool(Constant.Color.BLUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private void greenAction() {
|
||||||
|
if (CField.this.player.isComputer()) {
|
||||||
|
System.out.println("Stop trying to spend the AI's mana");
|
||||||
|
// TODO: Mindslaver might need to add changes here
|
||||||
|
} else {
|
||||||
|
final Input in = AllZone.getInputControl().getInput();
|
||||||
|
if (in instanceof InputMana) {
|
||||||
|
// Do something
|
||||||
|
((InputMana) in).selectManaPool(Constant.Color.GREEN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private void redAction() {
|
||||||
|
if (CField.this.player.isComputer()) {
|
||||||
|
System.out.println("Stop trying to spend the AI's mana");
|
||||||
|
// TODO: Mindslaver might need to add changes here
|
||||||
|
} else {
|
||||||
|
final Input in = AllZone.getInputControl().getInput();
|
||||||
|
if (in instanceof InputMana) {
|
||||||
|
// Do something
|
||||||
|
((InputMana) in).selectManaPool(Constant.Color.RED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private void whiteAction() {
|
||||||
|
if (CField.this.player.isComputer()) {
|
||||||
|
System.out.println("Stop trying to spend the AI's mana");
|
||||||
|
// TODO: Mindslaver might need to add changes here
|
||||||
|
} else {
|
||||||
|
final Input in = AllZone.getInputControl().getInput();
|
||||||
|
if (in instanceof InputMana) {
|
||||||
|
// Do something
|
||||||
|
((InputMana) in).selectManaPool(Constant.Color.WHITE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** */
|
||||||
|
private void colorlessAction() {
|
||||||
|
if (CField.this.player.isComputer()) {
|
||||||
|
System.out.println("Stop trying to spend the AI's mana");
|
||||||
|
// TODO: Mindslaver might need to add changes here
|
||||||
|
} else {
|
||||||
|
final Input in = AllZone.getInputControl().getInput();
|
||||||
|
if (in instanceof InputMana) {
|
||||||
|
// Do something
|
||||||
|
((InputMana) in).selectManaPool(Constant.Color.COLORLESS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Command getCommandOnSelect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} // End class CField
|
||||||
288
src/main/java/forge/gui/match/nonsingleton/CHand.java
Normal file
288
src/main/java/forge/gui/match/nonsingleton/CHand.java
Normal file
@@ -0,0 +1,288 @@
|
|||||||
|
/*
|
||||||
|
* Forge: Play Magic: the Gathering.
|
||||||
|
* Copyright (C) 2011 Forge Team
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package forge.gui.match.nonsingleton;
|
||||||
|
|
||||||
|
import java.awt.Point;
|
||||||
|
import java.awt.Rectangle;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseListener;
|
||||||
|
import java.awt.event.MouseMotionAdapter;
|
||||||
|
import java.awt.event.MouseMotionListener;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Observable;
|
||||||
|
import java.util.Observer;
|
||||||
|
|
||||||
|
import javax.swing.JLayeredPane;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
|
||||||
|
import forge.AllZone;
|
||||||
|
import forge.Card;
|
||||||
|
import forge.Command;
|
||||||
|
import forge.Singletons;
|
||||||
|
import forge.game.player.Player;
|
||||||
|
import forge.game.zone.PlayerZone;
|
||||||
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
|
import forge.gui.match.VMatchUI;
|
||||||
|
import forge.gui.match.controllers.CMessage;
|
||||||
|
import forge.view.arcane.CardPanel;
|
||||||
|
import forge.view.arcane.HandArea;
|
||||||
|
import forge.view.arcane.util.Animation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls Swing components of a player's hand instance.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class CHand implements ICDoc {
|
||||||
|
private final Player player;
|
||||||
|
private final VHand view;
|
||||||
|
private boolean initializedAlready = false;
|
||||||
|
|
||||||
|
private final List<Card> cardsInPanel = new ArrayList<Card>();;
|
||||||
|
|
||||||
|
private final MouseListener madCardClick = new MouseAdapter() { @Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
cardclickAction(e); } };
|
||||||
|
|
||||||
|
private final MouseMotionListener madCardMove = new MouseMotionAdapter() { @Override
|
||||||
|
public void mouseMoved(final MouseEvent me) {
|
||||||
|
cardmoveAction(); } };
|
||||||
|
|
||||||
|
private final Observer o1 = new Observer() { @Override
|
||||||
|
public void update(final Observable a, final Object b) {
|
||||||
|
observerAction(a); } };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controls Swing components of a player's hand instance.
|
||||||
|
*
|
||||||
|
* @param p0   {@link forge.game.player.Player}
|
||||||
|
* @param v0   {@link forge.gui.match.nonsingleton.VHand}
|
||||||
|
*/
|
||||||
|
public CHand(final Player p0, final VHand v0) {
|
||||||
|
this.player = p0;
|
||||||
|
this.view = v0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initialize() {
|
||||||
|
if (initializedAlready) { return; }
|
||||||
|
else { initializedAlready = true; }
|
||||||
|
|
||||||
|
player.getZone(ZoneType.Hand).addObserver(o1);
|
||||||
|
|
||||||
|
view.getHandArea().addMouseListener(madCardClick);
|
||||||
|
view.getHandArea().addMouseMotionListener(madCardMove);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds various listeners for cards in hand. Uses CardPanel instance from
|
||||||
|
* ViewHand.
|
||||||
|
*
|
||||||
|
* @param c
|
||||||
|
*   CardPanel object
|
||||||
|
*/
|
||||||
|
public void addCardPanelListeners(final CardPanel c) {
|
||||||
|
// Grab top level controller to facilitate interaction between children
|
||||||
|
final Card cardobj = c.getCard();
|
||||||
|
|
||||||
|
// Sidebar pic/detail on card hover
|
||||||
|
c.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseEntered(final MouseEvent e) {
|
||||||
|
CMatchUI.SINGLETON_INSTANCE.setCard(cardobj);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Mouse press
|
||||||
|
c.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mousePressed(final MouseEvent e) {
|
||||||
|
if (e.getButton() != MouseEvent.BUTTON1) { return; }
|
||||||
|
|
||||||
|
CMessage.SINGLETON_INSTANCE.getInputControl()
|
||||||
|
.selectCard(cardobj, AllZone.getHumanPlayer().getZone(ZoneType.Hand));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the card.
|
||||||
|
*
|
||||||
|
* @param c
|
||||||
|
*   Card object
|
||||||
|
*/
|
||||||
|
public void addCard(final Card c) {
|
||||||
|
this.cardsInPanel.add(c);
|
||||||
|
//this.view.refreshLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the cards.
|
||||||
|
*
|
||||||
|
* @param c
|
||||||
|
*   List of Card objects
|
||||||
|
*/
|
||||||
|
public void addCards(final List<Card> c) {
|
||||||
|
this.cardsInPanel.addAll(c);
|
||||||
|
//this.view.refreshLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the cards.
|
||||||
|
*
|
||||||
|
* @return List<Card>
|
||||||
|
*/
|
||||||
|
public List<Card> getCards() {
|
||||||
|
return this.cardsInPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the card.
|
||||||
|
*
|
||||||
|
* @param c
|
||||||
|
*   Card object
|
||||||
|
*/
|
||||||
|
public void removeCard(final Card c) {
|
||||||
|
this.cardsInPanel.remove(c);
|
||||||
|
//this.view.refreshLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the cards.
|
||||||
|
*
|
||||||
|
* @param c
|
||||||
|
*   List of Card objects
|
||||||
|
*/
|
||||||
|
public void removeCards(final List<Card> c) {
|
||||||
|
this.cardsInPanel.removeAll(c);
|
||||||
|
//this.view.refreshLayout();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset cards.
|
||||||
|
*
|
||||||
|
* @param c
|
||||||
|
*   List of Card objects
|
||||||
|
*/
|
||||||
|
public void resetCards(final List<Card> c) {
|
||||||
|
this.cardsInPanel.clear();
|
||||||
|
this.addCards(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cardmoveAction() {
|
||||||
|
final Card c = view.getHandArea().getCardFromMouseOverPanel();
|
||||||
|
if (c != null) {
|
||||||
|
CMatchUI.SINGLETON_INSTANCE.setCard(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cardclickAction(final MouseEvent e) {
|
||||||
|
if (e.getButton() != MouseEvent.BUTTON1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final Card c = view.getHandArea().getCardFromMouseOverPanel();
|
||||||
|
if (c != null) {
|
||||||
|
CMessage.SINGLETON_INSTANCE.getInputControl().selectCard(c, AllZone.getHumanPlayer().getZone(ZoneType.Hand));
|
||||||
|
VMatchUI.SINGLETON_INSTANCE.getBtnOK().requestFocusInWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void observerAction(final Observable a) {
|
||||||
|
final PlayerZone pZone = (PlayerZone) a;
|
||||||
|
final HandArea p = view.getHandArea();
|
||||||
|
final Rectangle rctLibraryLabel = CMatchUI.SINGLETON_INSTANCE
|
||||||
|
.getFieldControls().get(1)
|
||||||
|
.getView().getLblLibrary().getBounds();
|
||||||
|
final List<Card> c = pZone.getCards();
|
||||||
|
|
||||||
|
// Animation starts from the library label and runs to the hand panel.
|
||||||
|
// This check prevents animation running if label hasn't been realized yet.
|
||||||
|
if (rctLibraryLabel.isEmpty() || p.getWidth() <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Card> tmp, diff;
|
||||||
|
tmp = new ArrayList<Card>();
|
||||||
|
for (final forge.view.arcane.CardPanel cpa : p.getCardPanels()) {
|
||||||
|
tmp.add(cpa.getGameCard());
|
||||||
|
}
|
||||||
|
diff = new ArrayList<Card>(tmp);
|
||||||
|
diff.removeAll(c);
|
||||||
|
if (diff.size() == p.getCardPanels().size()) {
|
||||||
|
p.clear();
|
||||||
|
} else {
|
||||||
|
for (final Card card : diff) {
|
||||||
|
p.removeCardPanel(p.getCardPanel(card.getUniqueNumber()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff = new ArrayList<Card>(c);
|
||||||
|
diff.removeAll(tmp);
|
||||||
|
|
||||||
|
JLayeredPane layeredPane = Singletons.getView().getFrame().getLayeredPane();
|
||||||
|
int fromZoneX = 0, fromZoneY = 0;
|
||||||
|
|
||||||
|
final Point zoneLocation = SwingUtilities.convertPoint(CMatchUI.SINGLETON_INSTANCE
|
||||||
|
.getFieldControls()
|
||||||
|
.get(1).getView().getLblLibrary(),
|
||||||
|
Math.round(rctLibraryLabel.width / 2.0f), Math.round(rctLibraryLabel.height / 2.0f), layeredPane);
|
||||||
|
fromZoneX = zoneLocation.x;
|
||||||
|
fromZoneY = zoneLocation.y;
|
||||||
|
int startWidth, startX, startY;
|
||||||
|
startWidth = 10;
|
||||||
|
startX = fromZoneX - Math.round(startWidth / 2.0f);
|
||||||
|
startY = fromZoneY - Math.round(Math.round(startWidth * forge.view.arcane.CardPanel.ASPECT_RATIO) / 2.0f);
|
||||||
|
|
||||||
|
int endWidth, endX, endY;
|
||||||
|
forge.view.arcane.CardPanel toPanel = null;
|
||||||
|
|
||||||
|
for (final Card card : diff) {
|
||||||
|
toPanel = p.addCard(card);
|
||||||
|
endWidth = toPanel.getCardWidth();
|
||||||
|
final Point toPos = SwingUtilities.convertPoint(view.getHandArea(),
|
||||||
|
toPanel.getCardLocation(), layeredPane);
|
||||||
|
endX = toPos.x;
|
||||||
|
endY = toPos.y;
|
||||||
|
|
||||||
|
final forge.view.arcane.CardPanel animationPanel = new forge.view.arcane.CardPanel(card);
|
||||||
|
if (Singletons.getView().getFrame().isShowing()) {
|
||||||
|
Animation.moveCard(startX, startY, startWidth, endX, endY, endWidth, animationPanel, toPanel,
|
||||||
|
layeredPane, 500);
|
||||||
|
} else {
|
||||||
|
Animation.moveCard(toPanel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Command getCommandOnSelect() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.ICDoc#update()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,7 +18,6 @@
|
|||||||
package forge.gui.match.nonsingleton;
|
package forge.gui.match.nonsingleton;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
@@ -30,15 +29,21 @@ import javax.swing.JLabel;
|
|||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
import javax.swing.SwingConstants;
|
import javax.swing.SwingConstants;
|
||||||
import javax.swing.border.Border;
|
|
||||||
import javax.swing.border.LineBorder;
|
import javax.swing.border.LineBorder;
|
||||||
import javax.swing.border.MatteBorder;
|
import javax.swing.border.MatteBorder;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import forge.gui.layout.DragTab;
|
import forge.AllZone;
|
||||||
import forge.gui.layout.EDocID;
|
import forge.card.cardfactory.CardFactoryUtil;
|
||||||
import forge.gui.layout.ICDoc;
|
import forge.card.mana.ManaPool;
|
||||||
import forge.gui.layout.IVDoc;
|
import forge.game.player.Player;
|
||||||
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.framework.DragCell;
|
||||||
|
import forge.gui.framework.DragTab;
|
||||||
|
import forge.gui.framework.EDocID;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.framework.IVDoc;
|
||||||
|
import forge.gui.match.controllers.CPlayers;
|
||||||
import forge.gui.toolbox.FLabel;
|
import forge.gui.toolbox.FLabel;
|
||||||
import forge.gui.toolbox.FSkin;
|
import forge.gui.toolbox.FSkin;
|
||||||
import forge.gui.toolbox.FSkin.SkinProp;
|
import forge.gui.toolbox.FSkin.SkinProp;
|
||||||
@@ -49,18 +54,30 @@ import forge.view.arcane.PlayArea;
|
|||||||
*
|
*
|
||||||
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
||||||
*/
|
*/
|
||||||
public enum VField implements IVDoc {
|
public class VField implements IVDoc {
|
||||||
/** */
|
// Fields used with interface IVDoc
|
||||||
SINGLETON_INSTANCE;
|
private final CField control;
|
||||||
|
private DragCell parentCell;
|
||||||
|
private final EDocID docID;
|
||||||
|
private final DragTab tab = new DragTab("Field");
|
||||||
|
|
||||||
private final JPanel pnl = new JPanel();
|
// Other fields
|
||||||
private final DragTab tab = new DragTab("Your Battlefield");
|
private Player player = null;
|
||||||
|
|
||||||
|
// Top-level containers
|
||||||
private final JScrollPane scroller = new JScrollPane();
|
private final JScrollPane scroller = new JScrollPane();
|
||||||
private final PlayArea tabletop = new PlayArea(scroller, true);
|
private final PlayArea tabletop;
|
||||||
|
private final JPanel avatarArea = new JPanel();
|
||||||
|
private final JPanel phaseArea = new JPanel();
|
||||||
|
private final JPanel pnlDetails = new JPanel();
|
||||||
|
|
||||||
private final Border inactiveBorder = new LineBorder(new Color(0, 0, 0, 0), 1);
|
// Avatar area
|
||||||
private final Border hoverBorder = new LineBorder(FSkin.getColor(FSkin.Colors.CLR_BORDERS), 1);
|
private final JLabel lblAvatar = new FLabel.Builder().fontAlign(SwingConstants.CENTER)
|
||||||
|
.iconScaleFactor(1.0f).build();
|
||||||
|
private final JLabel lblLife = new FLabel.Builder().fontAlign(SwingConstants.CENTER)
|
||||||
|
.fontStyle(Font.BOLD).build();
|
||||||
|
|
||||||
|
// Info labels
|
||||||
private FLabel lblHand = getBuiltFLabel(FSkin.ZoneImages.ICO_HAND, "99", "Cards in hand");
|
private FLabel lblHand = getBuiltFLabel(FSkin.ZoneImages.ICO_HAND, "99", "Cards in hand");
|
||||||
private FLabel lblGraveyard = getBuiltFLabel(FSkin.ZoneImages.ICO_GRAVEYARD, "99", "Cards in graveyard");
|
private FLabel lblGraveyard = getBuiltFLabel(FSkin.ZoneImages.ICO_GRAVEYARD, "99", "Cards in graveyard");
|
||||||
private FLabel lblLibrary = getBuiltFLabel(FSkin.ZoneImages.ICO_LIBRARY, "99", "Cards in library");
|
private FLabel lblLibrary = getBuiltFLabel(FSkin.ZoneImages.ICO_LIBRARY, "99", "Cards in library");
|
||||||
@@ -74,6 +91,7 @@ public enum VField implements IVDoc {
|
|||||||
private FLabel lblWhite = getBuiltFLabel(FSkin.ManaImages.IMG_WHITE, "99", "White mana");
|
private FLabel lblWhite = getBuiltFLabel(FSkin.ManaImages.IMG_WHITE, "99", "White mana");
|
||||||
private FLabel lblColorless = getBuiltFLabel(FSkin.ManaImages.IMG_COLORLESS, "99", "Colorless mana");
|
private FLabel lblColorless = getBuiltFLabel(FSkin.ManaImages.IMG_COLORLESS, "99", "Colorless mana");
|
||||||
|
|
||||||
|
// Phase labels
|
||||||
private PhaseLabel lblUpkeep = new PhaseLabel("UP");
|
private PhaseLabel lblUpkeep = new PhaseLabel("UP");
|
||||||
private PhaseLabel lblDraw = new PhaseLabel("DR");
|
private PhaseLabel lblDraw = new PhaseLabel("DR");
|
||||||
private PhaseLabel lblMain1 = new PhaseLabel("M1");
|
private PhaseLabel lblMain1 = new PhaseLabel("M1");
|
||||||
@@ -87,44 +105,55 @@ public enum VField implements IVDoc {
|
|||||||
private PhaseLabel lblEndTurn = new PhaseLabel("ET");
|
private PhaseLabel lblEndTurn = new PhaseLabel("ET");
|
||||||
private PhaseLabel lblCleanup = new PhaseLabel("CL");
|
private PhaseLabel lblCleanup = new PhaseLabel("CL");
|
||||||
|
|
||||||
private final JPanel avatarArea = new JPanel();
|
//========= Constructor
|
||||||
private final JPanel phaseArea = new JPanel();
|
/**
|
||||||
private final JPanel pnlDetails = new JPanel();
|
* Assembles Swing components of a player field instance.
|
||||||
private final JLabel lblAvatar = new FLabel.Builder().fontAlign(SwingConstants.CENTER)
|
*
|
||||||
.iconScaleFactor(1.0f).build();
|
* @param player0   {@link forge.game.player.Player}
|
||||||
private final JLabel lblLife = new FLabel.Builder().fontAlign(SwingConstants.CENTER)
|
* @param id0   {@link forge.gui.framework.EDocID}
|
||||||
.fontStyle(Font.BOLD).build();
|
|
||||||
|
|
||||||
private final Color clrHover
|
|
||||||
= FSkin.getColor(FSkin.Colors.CLR_HOVER);
|
|
||||||
private final Color clrPhaseActiveEnabled
|
|
||||||
= FSkin.getColor(FSkin.Colors.CLR_PHASE_ACTIVE_ENABLED);
|
|
||||||
private final Color clrPhaseActiveDisabled
|
|
||||||
= FSkin.getColor(FSkin.Colors.CLR_PHASE_ACTIVE_DISABLED);
|
|
||||||
private final Color clrPhaseInactiveEnabled
|
|
||||||
= FSkin.getColor(FSkin.Colors.CLR_PHASE_INACTIVE_ENABLED);
|
|
||||||
private final Color clrPhaseInactiveDisabled
|
|
||||||
= FSkin.getColor(FSkin.Colors.CLR_PHASE_INACTIVE_DISABLED);
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.layout.IVDoc#populate()
|
|
||||||
*/
|
*/
|
||||||
@Override
|
public VField(final EDocID id0, final Player player0) {
|
||||||
public void populate() {
|
this.docID = id0;
|
||||||
// Avatar and life
|
id0.setDoc(this);
|
||||||
|
|
||||||
|
this.player = player0;
|
||||||
|
if (player0 != null) { tab.setText(player0.getName() + " Field"); }
|
||||||
|
else { tab.setText("NO PLAYER FOR " + docID.toString()); }
|
||||||
|
|
||||||
|
// TODO player is hard-coded into tabletop...should be dynamic
|
||||||
|
// (haven't looked into it too deeply). Doublestrike 12-04-12
|
||||||
|
tabletop = new PlayArea(scroller,
|
||||||
|
player.equals(AllZone.getComputerPlayer()) ? true : false);
|
||||||
|
|
||||||
|
control = new CField(player, this);
|
||||||
|
|
||||||
avatarArea.setOpaque(false);
|
avatarArea.setOpaque(false);
|
||||||
avatarArea.setBackground(FSkin.getColor(FSkin.Colors.CLR_HOVER));
|
avatarArea.setBackground(FSkin.getColor(FSkin.Colors.CLR_HOVER));
|
||||||
avatarArea.setLayout(new MigLayout("insets 0, gap 0"));
|
avatarArea.setLayout(new MigLayout("insets 0, gap 0"));
|
||||||
avatarArea.add(lblAvatar, "w 100%!, h 70%!, wrap, gaptop 4%");
|
avatarArea.add(lblAvatar, "w 100%!, h 70%!, wrap, gaptop 4%");
|
||||||
avatarArea.add(lblLife, "w 100%!, h 30%!, gaptop 4%");
|
avatarArea.add(lblLife, "w 100%!, h 30%!, gaptop 4%");
|
||||||
|
|
||||||
// Phases
|
// Player area hover effect
|
||||||
|
avatarArea.addMouseListener(new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseEntered(final MouseEvent e) {
|
||||||
|
avatarArea.setOpaque(true);
|
||||||
|
avatarArea.setBorder(new LineBorder(FSkin.getColor(FSkin.Colors.CLR_BORDERS), 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mouseExited(final MouseEvent e) {
|
||||||
|
avatarArea.setOpaque(false);
|
||||||
|
avatarArea.setBorder(new LineBorder(new Color(0, 0, 0, 0), 1));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
phaseArea.setOpaque(false);
|
phaseArea.setOpaque(false);
|
||||||
phaseArea.setLayout(new MigLayout("insets 0 0 1% 0, gap 0, wrap"));
|
phaseArea.setLayout(new MigLayout("insets 0 0 1% 0, gap 0, wrap"));
|
||||||
populatePhase();
|
populatePhase();
|
||||||
|
|
||||||
// Play area
|
tabletop.setBorder(new MatteBorder(0, 1, 0, 0,
|
||||||
tabletop.setBorder(new MatteBorder(0, 1, 0, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS)));
|
FSkin.getColor(FSkin.Colors.CLR_BORDERS)));
|
||||||
tabletop.setOpaque(false);
|
tabletop.setOpaque(false);
|
||||||
|
|
||||||
scroller.setViewportView(this.tabletop);
|
scroller.setViewportView(this.tabletop);
|
||||||
@@ -132,56 +161,37 @@ public enum VField implements IVDoc {
|
|||||||
scroller.getViewport().setOpaque(false);
|
scroller.getViewport().setOpaque(false);
|
||||||
scroller.setBorder(null);
|
scroller.setBorder(null);
|
||||||
|
|
||||||
// Pool info
|
|
||||||
pnlDetails.setOpaque(false);
|
pnlDetails.setOpaque(false);
|
||||||
pnlDetails.setLayout(new MigLayout("insets 0, gap 0, wrap"));
|
pnlDetails.setLayout(new MigLayout("insets 0, gap 0, wrap"));
|
||||||
populateDetails();
|
populateDetails();
|
||||||
|
}
|
||||||
|
|
||||||
// Final layout
|
//========= Overridden methods
|
||||||
pnl.removeAll();
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#populate()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void populate() {
|
||||||
|
final JPanel pnl = parentCell.getBody();
|
||||||
pnl.setLayout(new MigLayout("insets 0, gap 0"));
|
pnl.setLayout(new MigLayout("insets 0, gap 0"));
|
||||||
|
|
||||||
pnl.add(avatarArea, "w 10%!, h 30%!");
|
pnl.add(avatarArea, "w 10%!, h 30%!");
|
||||||
pnl.add(phaseArea, "w 5%!, h 100%!, span 1 2");
|
pnl.add(phaseArea, "w 5%!, h 100%!, span 1 2");
|
||||||
pnl.add(scroller, "w 85%!, h 100%!, span 1 2, wrap");
|
pnl.add(scroller, "w 85%!, h 100%!, span 1 2, wrap");
|
||||||
pnl.add(pnlDetails, "w 10%!, h 69%!, gapleft 1px");
|
pnl.add(pnlDetails, "w 10%!, h 69%!, gapleft 1px");
|
||||||
|
|
||||||
// TODO Player hover effect
|
|
||||||
/*
|
|
||||||
avatarArea.addMouseListener(new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mouseEntered(final MouseEvent e) {
|
|
||||||
VField.this.avatarArea.setOpaque(true);
|
|
||||||
VField.this.avatarArea.setBorder(VField.this.hoverBorder);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void mouseExited(final MouseEvent e) {
|
|
||||||
VField.this.avatarArea.setOpaque(false);
|
|
||||||
VField.this.avatarArea.setBorder(VField.this.inactiveBorder);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getDocumentID()
|
* @see forge.gui.framework.IVDoc#getDocumentID()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public EDocID getDocumentID() {
|
public EDocID getDocumentID() {
|
||||||
return EDocID.YOUR_BATTLEFIELD;
|
return docID;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getDocument()
|
* @see forge.gui.framework.IVDoc#getTabLabel()
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Component getDocument() {
|
|
||||||
return pnl;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.layout.IVDoc#getTabLabel()
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public DragTab getTabLabel() {
|
public DragTab getTabLabel() {
|
||||||
@@ -189,13 +199,31 @@ public enum VField implements IVDoc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getControl()
|
* @see forge.gui.framework.IVDoc#getControl()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ICDoc getControl() {
|
public ICDoc getControl() {
|
||||||
return null;
|
return control;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#setParentCell()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setParentCell(final DragCell cell0) {
|
||||||
|
this.parentCell = cell0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#getParentCell()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public DragCell getParentCell() {
|
||||||
|
return this.parentCell;
|
||||||
|
}
|
||||||
|
|
||||||
|
//========= Populate helper methods
|
||||||
|
|
||||||
/** Adds phase indicator labels to phase area JPanel container. */
|
/** Adds phase indicator labels to phase area JPanel container. */
|
||||||
private void populatePhase() {
|
private void populatePhase() {
|
||||||
// Constraints string, set once
|
// Constraints string, set once
|
||||||
@@ -284,32 +312,39 @@ public enum VField implements IVDoc {
|
|||||||
pnlDetails.add(row6, constraintsRow);
|
pnlDetails.add(row6, constraintsRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private FLabel getBuiltFLabel(SkinProp p0, String s0, String s1) {
|
||||||
|
return new FLabel.Builder().icon(new ImageIcon(FSkin.getImage(p0)))
|
||||||
|
.opaque(false).fontScaleAuto(false).fontSize(14)
|
||||||
|
.fontStyle(Font.BOLD).iconAlpha(0.6f).iconInBackground(true)
|
||||||
|
.text(s0).tooltip(s1).fontAlign(SwingConstants.RIGHT).build();
|
||||||
|
}
|
||||||
|
|
||||||
// ========== Observer update methods
|
// ========== Observer update methods
|
||||||
/**
|
/**
|
||||||
* Handles observer update of player Zones - hand, graveyard, etc.
|
* Handles observer update of player Zones - hand, graveyard, etc.
|
||||||
*
|
*
|
||||||
* @p aram p0
|
* @param p0   {@link forge.game.player.Player}
|
||||||
*   Player obj
|
*/
|
||||||
*
|
|
||||||
public void updateZones(final Player p0) {
|
public void updateZones(final Player p0) {
|
||||||
this.getLblHand().setText("" + p0.getZone(Zone.Hand).size());
|
this.getLblHand().setText("" + p0.getZone(ZoneType.Hand).size());
|
||||||
this.getLblGraveyard().setText("" + p0.getZone(Zone.Graveyard).size());
|
this.getLblGraveyard().setText("" + p0.getZone(ZoneType.Graveyard).size());
|
||||||
this.getLblLibrary().setText("" + p0.getZone(Zone.Library).size());
|
this.getLblLibrary().setText("" + p0.getZone(ZoneType.Library).size());
|
||||||
this.getLblFlashback().setText("" + CardFactoryUtil.getExternalZoneActivationCards(p0).size());
|
this.getLblFlashback().setText("" + CardFactoryUtil.getExternalZoneActivationCards(p0).size());
|
||||||
this.getLblExile().setText("" + p0.getZone(Zone.Exile).size());
|
this.getLblExile().setText("" + p0.getZone(ZoneType.Exile).size());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles observer update of non-Zone details - life, poison, etc. Also
|
* Handles observer update of non-Zone details - life, poison, etc. Also
|
||||||
* updates "players" panel in tabber for this player.
|
* updates "players" panel in tabber for this player.
|
||||||
*
|
*
|
||||||
* @p aram p0
|
* @param p0   {@link forge.game.player.Player}
|
||||||
*   Player obj
|
*/
|
||||||
*
|
|
||||||
public void updateDetails(final Player p0) {
|
public void updateDetails(final Player p0) {
|
||||||
// "Players" panel update
|
// "Players" panel update
|
||||||
Singletons.getControl().getControlMatch()
|
CPlayers.SINGLETON_INSTANCE.update();
|
||||||
.getTabberControl().getView().updatePlayerLabels(p0);
|
|
||||||
|
// Mana pool update
|
||||||
|
updateManaPool(p0);
|
||||||
|
|
||||||
// Poison/life
|
// Poison/life
|
||||||
this.getLblLife().setText("" + p0.getLife());
|
this.getLblLife().setText("" + p0.getLife());
|
||||||
@@ -328,28 +363,32 @@ public enum VField implements IVDoc {
|
|||||||
else {
|
else {
|
||||||
this.getLblPoison().setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT));
|
this.getLblPoison().setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT));
|
||||||
}
|
}
|
||||||
|
|
||||||
//mana pool
|
|
||||||
updateManaPool(p0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles observer update of the mana pool.
|
* Handles observer update of the mana pool.
|
||||||
*
|
*
|
||||||
* @p aram p0
|
* @param p0   {@link forge.game.player.Player}
|
||||||
*   Player obj
|
*/
|
||||||
*
|
|
||||||
public void updateManaPool(final Player p0) {
|
public void updateManaPool(final Player p0) {
|
||||||
ManaPool m = p0.getManaPool();
|
ManaPool m = p0.getManaPool();
|
||||||
getLblBlack().setText("" + m.getAmountOfColor(forge.Constant.Color.BLACK));
|
this.lblBlack.setText("" + m.getAmountOfColor(forge.Constant.Color.BLACK));
|
||||||
getLblBlue().setText("" + m.getAmountOfColor(forge.Constant.Color.BLUE));
|
this.lblBlue.setText("" + m.getAmountOfColor(forge.Constant.Color.BLUE));
|
||||||
getLblGreen().setText("" + m.getAmountOfColor(forge.Constant.Color.GREEN));
|
this.lblGreen.setText("" + m.getAmountOfColor(forge.Constant.Color.GREEN));
|
||||||
getLblRed().setText("" + m.getAmountOfColor(forge.Constant.Color.RED));
|
this.lblRed.setText("" + m.getAmountOfColor(forge.Constant.Color.RED));
|
||||||
getLblWhite().setText("" + m.getAmountOfColor(forge.Constant.Color.WHITE));
|
this.lblWhite.setText("" + m.getAmountOfColor(forge.Constant.Color.WHITE));
|
||||||
getLblColorless().setText("" + m.getAmountOfColor(forge.Constant.Color.COLORLESS));
|
this.lblColorless.setText("" + m.getAmountOfColor(forge.Constant.Color.COLORLESS));
|
||||||
}
|
}
|
||||||
|
|
||||||
//========= Retrieval methods
|
//========= Retrieval methods
|
||||||
|
/**
|
||||||
|
* Gets the player currently associated with this field.
|
||||||
|
* @return {@link forge.game.player.Player}
|
||||||
|
*/
|
||||||
|
public Player getPlayer() {
|
||||||
|
return this.player;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the tabletop.
|
* Gets the tabletop.
|
||||||
*
|
*
|
||||||
@@ -501,17 +540,12 @@ public enum VField implements IVDoc {
|
|||||||
|
|
||||||
//========== Custom class handling
|
//========== Custom class handling
|
||||||
|
|
||||||
private FLabel getBuiltFLabel(SkinProp p0, String s0, String s1) {
|
|
||||||
return new FLabel.Builder().icon(new ImageIcon(FSkin.getImage(p0)))
|
|
||||||
.opaque(false).fontScaleFactor(0.5).iconAlpha(0.6f).iconInBackground(true)
|
|
||||||
.text(s0).tooltip(s1).fontAlign(SwingConstants.RIGHT).build();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows phase labels, handles repainting and on/off states. A PhaseLabel
|
* Shows phase labels, handles repainting and on/off states. A PhaseLabel
|
||||||
* has "skip" and "active" states, meaning "this phase is (not) skipped" and
|
* has "skip" and "active" states, meaning "this phase is (not) skipped" and
|
||||||
* "this is the current phase".
|
* "this is the current phase".
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
public class PhaseLabel extends JLabel {
|
public class PhaseLabel extends JLabel {
|
||||||
private boolean enabled = true;
|
private boolean enabled = true;
|
||||||
private boolean active = false;
|
private boolean active = false;
|
||||||
@@ -613,15 +647,15 @@ public enum VField implements IVDoc {
|
|||||||
|
|
||||||
// Set color according to skip or active or hover state of label
|
// Set color according to skip or active or hover state of label
|
||||||
if (this.hover) {
|
if (this.hover) {
|
||||||
c = clrHover;
|
c = FSkin.getColor(FSkin.Colors.CLR_HOVER);
|
||||||
} else if (this.active && this.enabled) {
|
} else if (this.active && this.enabled) {
|
||||||
c = clrPhaseActiveEnabled;
|
c = FSkin.getColor(FSkin.Colors.CLR_PHASE_ACTIVE_ENABLED);
|
||||||
} else if (!this.active && this.enabled) {
|
} else if (!this.active && this.enabled) {
|
||||||
c = clrPhaseInactiveEnabled;
|
c = FSkin.getColor(FSkin.Colors.CLR_PHASE_INACTIVE_ENABLED);
|
||||||
} else if (this.active && !this.enabled) {
|
} else if (this.active && !this.enabled) {
|
||||||
c = clrPhaseActiveDisabled;
|
c = FSkin.getColor(FSkin.Colors.CLR_PHASE_ACTIVE_DISABLED);
|
||||||
} else {
|
} else {
|
||||||
c = clrPhaseInactiveDisabled;
|
c = FSkin.getColor(FSkin.Colors.CLR_PHASE_INACTIVE_DISABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Center vertically and horizontally. Show border if active.
|
// Center vertically and horizontally. Show border if active.
|
||||||
|
|||||||
@@ -17,16 +17,16 @@
|
|||||||
*/
|
*/
|
||||||
package forge.gui.match.nonsingleton;
|
package forge.gui.match.nonsingleton;
|
||||||
|
|
||||||
import java.awt.Component;
|
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JScrollPane;
|
import javax.swing.JScrollPane;
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import forge.gui.layout.DragTab;
|
import forge.game.player.Player;
|
||||||
import forge.gui.layout.EDocID;
|
import forge.gui.framework.DragCell;
|
||||||
import forge.gui.layout.ICDoc;
|
import forge.gui.framework.DragTab;
|
||||||
import forge.gui.layout.IVDoc;
|
import forge.gui.framework.EDocID;
|
||||||
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.framework.IVDoc;
|
||||||
import forge.view.arcane.HandArea;
|
import forge.view.arcane.HandArea;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -34,56 +34,98 @@ import forge.view.arcane.HandArea;
|
|||||||
*
|
*
|
||||||
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
* <br><br><i>(V at beginning of class name denotes a view class.)</i>
|
||||||
*/
|
*/
|
||||||
public enum VHand implements IVDoc {
|
public class VHand implements IVDoc {
|
||||||
/** */
|
// Fields used with interface IVDoc
|
||||||
SINGLETON_INSTANCE;
|
private final CHand control;
|
||||||
|
private DragCell parentCell;
|
||||||
private final JPanel pnl = new JPanel();
|
private final EDocID docID;
|
||||||
private final DragTab tab = new DragTab("Your Hand");
|
private final DragTab tab = new DragTab("Your Hand");
|
||||||
|
|
||||||
|
// Other fields
|
||||||
|
private Player player = null;
|
||||||
|
|
||||||
|
// Top-level containers
|
||||||
private final JScrollPane scroller = new JScrollPane();
|
private final JScrollPane scroller = new JScrollPane();
|
||||||
private final HandArea hand = new HandArea(scroller);
|
private final HandArea hand = new HandArea(scroller);
|
||||||
|
|
||||||
/* (non-Javadoc)
|
//========= Constructor
|
||||||
* @see forge.gui.layout.IVDoc#populate()
|
/**
|
||||||
|
* Assembles Swing components of a player hand instance.
|
||||||
|
*
|
||||||
|
* @param id0   {@link forge.gui.framework.EDocID}
|
||||||
|
* @param player0   {@link forge.game.player.Player}
|
||||||
*/
|
*/
|
||||||
@Override
|
public VHand(final EDocID id0, final Player player0) {
|
||||||
public void populate() {
|
docID = id0;
|
||||||
|
id0.setDoc(this);
|
||||||
|
tab.setText(player0.getName() + " Hand");
|
||||||
|
|
||||||
|
player = player0;
|
||||||
|
|
||||||
|
scroller.setBorder(null);
|
||||||
scroller.setViewportView(VHand.this.hand);
|
scroller.setViewportView(VHand.this.hand);
|
||||||
scroller.setOpaque(false);
|
scroller.setOpaque(false);
|
||||||
scroller.getViewport().setOpaque(false);
|
scroller.getViewport().setOpaque(false);
|
||||||
scroller.setBorder(null);
|
|
||||||
hand.setOpaque(false);
|
hand.setOpaque(false);
|
||||||
|
|
||||||
pnl.removeAll();
|
control = new CHand(player, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
//========= Overridden methods
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#populate()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void populate() {
|
||||||
|
final JPanel pnl = parentCell.getBody();
|
||||||
pnl.setLayout(new MigLayout("insets 0, gap 0"));
|
pnl.setLayout(new MigLayout("insets 0, gap 0"));
|
||||||
|
|
||||||
pnl.add(scroller, "w 100%, h 100%!");
|
pnl.add(scroller, "w 100%, h 100%!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getDocumentID()
|
* @see forge.gui.framework.IVDoc#getDocumentID()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public EDocID getDocumentID() {
|
public EDocID getDocumentID() {
|
||||||
return EDocID.YOUR_HAND;
|
return docID;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getDocument()
|
* @see forge.gui.framework.IVDoc#setParentCell()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Component getDocument() {
|
public void setParentCell(final DragCell cell0) {
|
||||||
return pnl;
|
this.parentCell = cell0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getTabLabel()
|
* @see forge.gui.framework.IVDoc#getParentCell()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public DragCell getParentCell() {
|
||||||
|
return this.parentCell;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#getTabLabel()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public DragTab getTabLabel() {
|
public DragTab getTabLabel() {
|
||||||
return tab;
|
return tab;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#getControl()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public ICDoc getControl() {
|
||||||
|
return control;
|
||||||
|
}
|
||||||
|
|
||||||
|
//========= Retrieval methods
|
||||||
/**
|
/**
|
||||||
* Gets the hand area.
|
* Gets the hand area.
|
||||||
*
|
*
|
||||||
@@ -93,11 +135,20 @@ public enum VHand implements IVDoc {
|
|||||||
return VHand.this.hand;
|
return VHand.this.hand;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/**
|
||||||
* @see forge.gui.layout.IVDoc#getControl()
|
* Gets the player currently associated with this hand.
|
||||||
|
* @return {@link forge.game.player.Player}
|
||||||
*/
|
*/
|
||||||
@Override
|
public Player getPlayer() {
|
||||||
public ICDoc getControl() {
|
return this.player;
|
||||||
return null;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the player currently associated with this field.
|
||||||
|
* @param player0   {@link forge.game.player.Player}
|
||||||
|
*/
|
||||||
|
public void setPlayer(final Player player0) {
|
||||||
|
this.player = player0;
|
||||||
|
if (player0 != null) { tab.setText(player0.getName() + " Field"); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,15 +17,17 @@
|
|||||||
*/
|
*/
|
||||||
package forge.gui.match.views;
|
package forge.gui.match.views;
|
||||||
|
|
||||||
import java.awt.Component;
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
import forge.AllZone;
|
||||||
import javax.swing.JPanel;
|
import forge.Card;
|
||||||
|
import forge.game.player.Player;
|
||||||
import forge.gui.layout.DragTab;
|
import forge.gui.CardPicturePanel;
|
||||||
import forge.gui.layout.EDocID;
|
import forge.gui.framework.DragCell;
|
||||||
import forge.gui.layout.ICDoc;
|
import forge.gui.framework.DragTab;
|
||||||
import forge.gui.layout.IVDoc;
|
import forge.gui.framework.EDocID;
|
||||||
import forge.gui.toolbox.FSkin;
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.framework.IVDoc;
|
||||||
|
import forge.gui.match.controllers.CAntes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assembles Swing components of card ante area.
|
* Assembles Swing components of card ante area.
|
||||||
@@ -36,36 +38,56 @@ public enum VAntes implements IVDoc {
|
|||||||
/** */
|
/** */
|
||||||
SINGLETON_INSTANCE;
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
private final JPanel pnl = new JPanel();
|
// Fields used with interface IVDoc
|
||||||
|
private DragCell parentCell;
|
||||||
private final DragTab tab = new DragTab("Ante");
|
private final DragTab tab = new DragTab("Ante");
|
||||||
|
private CardPicturePanel humanAnte = new CardPicturePanel(null);
|
||||||
|
private CardPicturePanel computerAnte = new CardPicturePanel(null);
|
||||||
|
|
||||||
|
//========== Constructor
|
||||||
|
private VAntes() {
|
||||||
|
humanAnte.setOpaque(false);
|
||||||
|
computerAnte.setOpaque(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//========== Overridden methods
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#populate()
|
* @see forge.gui.framework.IVDoc#populate()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void populate() {
|
public void populate() {
|
||||||
pnl.removeAll();
|
parentCell.getBody().setLayout(new MigLayout("insets 1%, gap 1%"));
|
||||||
pnl.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME));
|
parentCell.getBody().add(humanAnte, "w 47%!, h 100%!");
|
||||||
|
parentCell.getBody().add(computerAnte, "w 47%!, h 100%!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getDocumentID()
|
* @see forge.gui.framework.IVDoc#setParentCell()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setParentCell(final DragCell cell0) {
|
||||||
|
this.parentCell = cell0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#getParentCell()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public DragCell getParentCell() {
|
||||||
|
return this.parentCell;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#getDocumentID()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public EDocID getDocumentID() {
|
public EDocID getDocumentID() {
|
||||||
return EDocID.REPORT_STACK;
|
return EDocID.CARD_ANTES;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getDocument()
|
* @see forge.gui.framework.IVDoc#getTabLabel()
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Component getDocument() {
|
|
||||||
return pnl;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.layout.IVDoc#getTabLabel()
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public DragTab getTabLabel() {
|
public DragTab getTabLabel() {
|
||||||
@@ -73,10 +95,26 @@ public enum VAntes implements IVDoc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getControl()
|
* @see forge.gui.framework.IVDoc#getControl()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ICDoc getControl() {
|
public ICDoc getControl() {
|
||||||
return null;
|
return CAntes.SINGLETON_INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//========== Setters / getters
|
||||||
|
/**
|
||||||
|
* @param p0   {@link forge.game.player.Player}
|
||||||
|
* @param c0   {@link forge.Card}
|
||||||
|
*/
|
||||||
|
public void setAnteCard(final Player p0, final Card c0) {
|
||||||
|
if (p0.equals(AllZone.getComputerPlayer())) {
|
||||||
|
computerAnte.setCard(c0);
|
||||||
|
computerAnte.revalidate();
|
||||||
|
}
|
||||||
|
else if (p0.equals(AllZone.getHumanPlayer())) {
|
||||||
|
humanAnte.setCard(c0);
|
||||||
|
humanAnte.revalidate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,14 +17,18 @@
|
|||||||
*/
|
*/
|
||||||
package forge.gui.match.views;
|
package forge.gui.match.views;
|
||||||
|
|
||||||
import java.awt.Component;
|
import javax.swing.JTextArea;
|
||||||
|
import javax.swing.border.Border;
|
||||||
|
import javax.swing.border.MatteBorder;
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
import forge.AllZone;
|
||||||
import forge.gui.layout.DragTab;
|
import forge.gui.framework.DragCell;
|
||||||
import forge.gui.layout.EDocID;
|
import forge.gui.framework.DragTab;
|
||||||
import forge.gui.layout.ICDoc;
|
import forge.gui.framework.EDocID;
|
||||||
import forge.gui.layout.IVDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
|
import forge.gui.framework.IVDoc;
|
||||||
|
import forge.gui.match.controllers.CCombat;
|
||||||
import forge.gui.toolbox.FSkin;
|
import forge.gui.toolbox.FSkin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,36 +40,46 @@ public enum VCombat implements IVDoc {
|
|||||||
/** */
|
/** */
|
||||||
SINGLETON_INSTANCE;
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
private final JPanel pnl = new JPanel();
|
// Fields used with interface IVDoc
|
||||||
private final DragTab tab = new DragTab("Combat Report");
|
private DragCell parentCell;
|
||||||
|
private final DragTab tab = new DragTab("Combat");
|
||||||
|
|
||||||
|
//========== Overridden methods
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#populate()
|
* @see forge.gui.framework.IVDoc#populate()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void populate() {
|
public void populate() {
|
||||||
pnl.removeAll();
|
// (Panel uses observers to update, no permanent components here.)
|
||||||
pnl.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getDocumentID()
|
* @see forge.gui.framework.IVDoc#setParentCell()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setParentCell(final DragCell cell0) {
|
||||||
|
this.parentCell = cell0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#getParentCell()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public DragCell getParentCell() {
|
||||||
|
return this.parentCell;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#getDocumentID()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public EDocID getDocumentID() {
|
public EDocID getDocumentID() {
|
||||||
return EDocID.REPORT_STACK;
|
return EDocID.REPORT_COMBAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getDocument()
|
* @see forge.gui.framework.IVDoc#getTabLabel()
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Component getDocument() {
|
|
||||||
return pnl;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.layout.IVDoc#getTabLabel()
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public DragTab getTabLabel() {
|
public DragTab getTabLabel() {
|
||||||
@@ -73,10 +87,33 @@ public enum VCombat implements IVDoc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getControl()
|
* @see forge.gui.framework.IVDoc#getControl()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ICDoc getControl() {
|
public ICDoc getControl() {
|
||||||
return null;
|
return CCombat.SINGLETON_INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//========= Observer update methods
|
||||||
|
|
||||||
|
/** @param s0   {@link java.lang.String} */
|
||||||
|
public void updateCombat(final String s0) {
|
||||||
|
// No need to update this unless it's showing
|
||||||
|
if (!parentCell.getSelected().equals(this)) { return; }
|
||||||
|
|
||||||
|
parentCell.getBody().removeAll();
|
||||||
|
parentCell.getBody().setLayout(new MigLayout("insets 0, gap 0, wrap"));
|
||||||
|
|
||||||
|
final Border border = new MatteBorder(0, 0, 0, 0, FSkin.getColor(FSkin.Colors.CLR_BORDERS));
|
||||||
|
|
||||||
|
tab.setText("Combat : " + AllZone.getCombat().getAttackers().size());
|
||||||
|
|
||||||
|
final JTextArea tar = new JTextArea(s0);
|
||||||
|
tar.setOpaque(false);
|
||||||
|
tar.setBorder(border);
|
||||||
|
tar.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT));
|
||||||
|
tar.setFocusable(false);
|
||||||
|
tar.setLineWrap(true);
|
||||||
|
parentCell.getBody().add(tar, "w 95%!, gapleft 3%, gaptop 1%, h 95%");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,17 +17,14 @@
|
|||||||
*/
|
*/
|
||||||
package forge.gui.match.views;
|
package forge.gui.match.views;
|
||||||
|
|
||||||
import java.awt.Component;
|
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
import forge.gui.CardDetailPanel;
|
import forge.gui.CardDetailPanel;
|
||||||
import forge.gui.layout.DragTab;
|
import forge.gui.framework.DragCell;
|
||||||
import forge.gui.layout.EDocID;
|
import forge.gui.framework.DragTab;
|
||||||
import forge.gui.layout.ICDoc;
|
import forge.gui.framework.EDocID;
|
||||||
import forge.gui.layout.IVDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
import forge.gui.toolbox.FSkin;
|
import forge.gui.framework.IVDoc;
|
||||||
|
import forge.gui.match.controllers.CDetail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assembles Swing components of card detail area.
|
* Assembles Swing components of card detail area.
|
||||||
@@ -38,32 +35,41 @@ public enum VDetail implements IVDoc {
|
|||||||
/** */
|
/** */
|
||||||
SINGLETON_INSTANCE;
|
SINGLETON_INSTANCE;
|
||||||
|
|
||||||
private final JPanel pnl = new JPanel();
|
// Fields used with interface IVDoc
|
||||||
|
private DragCell parentCell;
|
||||||
private final DragTab tab = new DragTab("Card Detail");
|
private final DragTab tab = new DragTab("Card Detail");
|
||||||
|
|
||||||
|
// Top-level containers
|
||||||
private final CardDetailPanel pnlDetail = new CardDetailPanel(null);
|
private final CardDetailPanel pnlDetail = new CardDetailPanel(null);
|
||||||
|
|
||||||
|
//========= Overridden methods
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#populate()
|
* @see forge.gui.framework.IVDoc#populate()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void populate() {
|
public void populate() {
|
||||||
pnlDetail.setOpaque(false);
|
parentCell.getBody().setLayout(new MigLayout("insets 0, gap 0"));
|
||||||
|
parentCell.getBody().add(pnlDetail, "w 100%!, h 100%!");
|
||||||
pnl.removeAll();
|
|
||||||
pnl.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME));
|
|
||||||
pnl.setLayout(new MigLayout("insets 0, gap 0"));
|
|
||||||
|
|
||||||
pnl.add(pnlDetail, "w 100%!, h 100%!");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link forge.gui.CardDetailPanel} */
|
|
||||||
public CardDetailPanel getPnlDetail() {
|
|
||||||
return pnlDetail;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getDocumentID()
|
* @see forge.gui.framework.IVDoc#setParentCell()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setParentCell(final DragCell cell0) {
|
||||||
|
this.parentCell = cell0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#getParentCell()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public DragCell getParentCell() {
|
||||||
|
return this.parentCell;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see forge.gui.framework.IVDoc#getDocumentID()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public EDocID getDocumentID() {
|
public EDocID getDocumentID() {
|
||||||
@@ -71,15 +77,7 @@ public enum VDetail implements IVDoc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getDocument()
|
* @see forge.gui.framework.IVDoc#getTabLabel()
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public Component getDocument() {
|
|
||||||
return pnl;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see forge.gui.layout.IVDoc#getTabLabel()
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public DragTab getTabLabel() {
|
public DragTab getTabLabel() {
|
||||||
@@ -87,10 +85,17 @@ public enum VDetail implements IVDoc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.layout.IVDoc#getControl()
|
* @see forge.gui.framework.IVDoc#getControl()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ICDoc getControl() {
|
public ICDoc getControl() {
|
||||||
return null;
|
return CDetail.SINGLETON_INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//========= Retrieval methods
|
||||||
|
|
||||||
|
/** @return {@link forge.gui.CardDetailPanel} */
|
||||||
|
public CardDetailPanel getPnlDetail() {
|
||||||
|
return pnlDetail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user