mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
Add AutoYields dialog
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -925,6 +925,7 @@ forge-gui-desktop/src/main/java/forge/screens/match/QuestWinLose.java -text
|
|||||||
forge-gui-desktop/src/main/java/forge/screens/match/QuestWinLoseCardViewer.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/QuestWinLoseCardViewer.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/TargetingOverlay.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/TargetingOverlay.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/VAssignDamage.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/VAssignDamage.java -text
|
||||||
|
forge-gui-desktop/src/main/java/forge/screens/match/VAutoYields.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/VMatchUI.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/VMatchUI.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/ViewWinLose.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/ViewWinLose.java -text
|
||||||
forge-gui-desktop/src/main/java/forge/screens/match/ZoneAction.java -text
|
forge-gui-desktop/src/main/java/forge/screens/match/ZoneAction.java -text
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ public enum FControl implements KeyEventDispatcher {
|
|||||||
private FScreen currentScreen;
|
private FScreen currentScreen;
|
||||||
private boolean altKeyLastDown;
|
private boolean altKeyLastDown;
|
||||||
private CloseAction closeAction;
|
private CloseAction closeAction;
|
||||||
|
private Player localPlayer;
|
||||||
|
|
||||||
public static enum CloseAction {
|
public static enum CloseAction {
|
||||||
NONE,
|
NONE,
|
||||||
@@ -387,6 +388,10 @@ public enum FControl implements KeyEventDispatcher {
|
|||||||
return game;
|
return game;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Player getLocalPlayer() {
|
||||||
|
return localPlayer;
|
||||||
|
}
|
||||||
|
|
||||||
public final void stopGame() {
|
public final void stopGame() {
|
||||||
List<Player> pp = new ArrayList<Player>();
|
List<Player> pp = new ArrayList<Player>();
|
||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
@@ -476,7 +481,7 @@ public enum FControl implements KeyEventDispatcher {
|
|||||||
// The UI controls should use these game data as models
|
// The UI controls should use these game data as models
|
||||||
CMatchUI.SINGLETON_INSTANCE.initMatch(game.getRegisteredPlayers(), humanLobbyPlayer);
|
CMatchUI.SINGLETON_INSTANCE.initMatch(game.getRegisteredPlayers(), humanLobbyPlayer);
|
||||||
|
|
||||||
Player localPlayer = null;
|
localPlayer = null;
|
||||||
for (Player p : game.getPlayers()) {
|
for (Player p : game.getPlayers()) {
|
||||||
if (p.getLobbyPlayer() == humanLobbyPlayer) {
|
if (p.getLobbyPlayer() == humanLobbyPlayer) {
|
||||||
localPlayer = p;
|
localPlayer = p;
|
||||||
|
|||||||
@@ -0,0 +1,103 @@
|
|||||||
|
package forge.screens.match;
|
||||||
|
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.swing.event.ChangeEvent;
|
||||||
|
import javax.swing.event.ChangeListener;
|
||||||
|
|
||||||
|
import forge.Singletons;
|
||||||
|
import forge.UiCommand;
|
||||||
|
import forge.game.Game;
|
||||||
|
import forge.game.player.Player;
|
||||||
|
import forge.toolbox.FButton;
|
||||||
|
import forge.toolbox.FCheckBox;
|
||||||
|
import forge.toolbox.FList;
|
||||||
|
import forge.toolbox.FOptionPane;
|
||||||
|
import forge.toolbox.FScrollPane;
|
||||||
|
import forge.view.FDialog;
|
||||||
|
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public class VAutoYields extends FDialog {
|
||||||
|
private static final int PADDING = 10;
|
||||||
|
private static final int BUTTON_WIDTH = 140;
|
||||||
|
private static final int BUTTON_HEIGHT = 26;
|
||||||
|
|
||||||
|
private final FButton btnOk;
|
||||||
|
private final FButton btnRemove;
|
||||||
|
private final FList<String> lstAutoYields;
|
||||||
|
private final FScrollPane listScroller;
|
||||||
|
private final FCheckBox chkDisableAll;
|
||||||
|
|
||||||
|
public VAutoYields(final Game game, final Player player) {
|
||||||
|
super(true);
|
||||||
|
setTitle("Auto-Yields");
|
||||||
|
|
||||||
|
List<String> autoYields = new ArrayList<String>();
|
||||||
|
for (String autoYield : player.getController().getAutoYields()) {
|
||||||
|
autoYields.add(autoYield);
|
||||||
|
}
|
||||||
|
lstAutoYields = new FList<String>(autoYields.toArray(new String[]{}));
|
||||||
|
|
||||||
|
int x = PADDING;
|
||||||
|
int y = PADDING;
|
||||||
|
int width = Singletons.getView().getFrame().getWidth() * 2 / 3;
|
||||||
|
int w = width - 2 * PADDING;
|
||||||
|
|
||||||
|
listScroller = new FScrollPane(lstAutoYields, true);
|
||||||
|
|
||||||
|
chkDisableAll = new FCheckBox("Disable All Auto Yields", game.getDisableAutoYields());
|
||||||
|
chkDisableAll.addChangeListener(new ChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void stateChanged(ChangeEvent e) {
|
||||||
|
game.setDisableAutoYields(chkDisableAll.isSelected());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
btnOk = new FButton("OK");
|
||||||
|
btnOk.setCommand(new UiCommand() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
setVisible(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
btnRemove = new FButton("Remove Yield");
|
||||||
|
btnRemove.setCommand(new UiCommand() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
String selected = lstAutoYields.getSelectedValue();
|
||||||
|
if (selected != null) {
|
||||||
|
lstAutoYields.removeItem(selected);
|
||||||
|
player.getController().setShouldAutoYield(selected, false);
|
||||||
|
VAutoYields.this.revalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
btnRemove.setEnabled(autoYields.size() > 0);
|
||||||
|
|
||||||
|
Dimension checkBoxSize = chkDisableAll.getPreferredSize();
|
||||||
|
int listHeight = lstAutoYields.getMinimumSize().height + 2 * PADDING;
|
||||||
|
|
||||||
|
add(listScroller, x, y, w, listHeight);
|
||||||
|
y += listHeight + PADDING;
|
||||||
|
add(chkDisableAll, x, y, checkBoxSize.width, checkBoxSize.height);
|
||||||
|
x = w - 2 * BUTTON_WIDTH - PADDING;
|
||||||
|
add(btnOk, x, y, BUTTON_WIDTH, BUTTON_HEIGHT);
|
||||||
|
x += BUTTON_WIDTH + PADDING;
|
||||||
|
add(btnRemove, x, y, BUTTON_WIDTH, BUTTON_HEIGHT);
|
||||||
|
|
||||||
|
this.pack();
|
||||||
|
this.setSize(width, getHeight());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void showAutoYields() {
|
||||||
|
if (lstAutoYields.getCount() > 0) {
|
||||||
|
setVisible(true);
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
FOptionPane.showMessageDialog("There are no active auto-yields.", "No Auto-Yields", FOptionPane.INFORMATION_ICON);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,15 @@
|
|||||||
package forge.screens.match.menus;
|
package forge.screens.match.menus;
|
||||||
|
|
||||||
|
import forge.Singletons;
|
||||||
import forge.assets.FSkinProp;
|
import forge.assets.FSkinProp;
|
||||||
|
import forge.control.FControl;
|
||||||
import forge.match.MatchUtil;
|
import forge.match.MatchUtil;
|
||||||
import forge.menus.MenuUtil;
|
import forge.menus.MenuUtil;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.properties.ForgePreferences;
|
import forge.properties.ForgePreferences;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.screens.match.CMatchUI;
|
import forge.screens.match.CMatchUI;
|
||||||
|
import forge.screens.match.VAutoYields;
|
||||||
import forge.screens.match.controllers.CDock;
|
import forge.screens.match.controllers.CDock;
|
||||||
import forge.toolbox.FSkin.*;
|
import forge.toolbox.FSkin.*;
|
||||||
|
|
||||||
@@ -38,10 +41,11 @@ public final class GameMenu {
|
|||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
menu.add(getMenuItem_TargetingArcs());
|
menu.add(getMenuItem_TargetingArcs());
|
||||||
menu.add(CardOverlaysMenu.getMenu(showMenuIcons));
|
menu.add(CardOverlaysMenu.getMenu(showMenuIcons));
|
||||||
menu.addSeparator();
|
menu.add(getMenuItem_AutoYields());
|
||||||
menu.add(getMenuItem_GameSoundEffects());
|
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
menu.add(getMenuItem_ViewDeckList());
|
menu.add(getMenuItem_ViewDeckList());
|
||||||
|
menu.addSeparator();
|
||||||
|
menu.add(getMenuItem_GameSoundEffects());
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,6 +187,24 @@ public final class GameMenu {
|
|||||||
menu.setIcon(item.getIcon());
|
menu.setIcon(item.getIcon());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static SkinnedMenuItem getMenuItem_AutoYields() {
|
||||||
|
SkinnedMenuItem menuItem = new SkinnedMenuItem("Auto-Yields");
|
||||||
|
menuItem.setIcon((showIcons ? MenuUtil.getMenuIcon(FSkinProp.ICO_WARNING) : null));
|
||||||
|
menuItem.addActionListener(getAutoYieldsAction());
|
||||||
|
return menuItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ActionListener getAutoYieldsAction() {
|
||||||
|
return new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
FControl control = Singletons.getControl();
|
||||||
|
VAutoYields autoYields = new VAutoYields(control.getObservedGame(), control.getLocalPlayer());
|
||||||
|
autoYields.showAutoYields();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private static SkinnedMenuItem getMenuItem_ViewDeckList() {
|
private static SkinnedMenuItem getMenuItem_ViewDeckList() {
|
||||||
SkinnedMenuItem menuItem = new SkinnedMenuItem("Deck List");
|
SkinnedMenuItem menuItem = new SkinnedMenuItem("Deck List");
|
||||||
menuItem.setIcon((showIcons ? MenuUtil.getMenuIcon(FSkinProp.ICO_DECKLIST) : null));
|
menuItem.setIcon((showIcons ? MenuUtil.getMenuIcon(FSkinProp.ICO_DECKLIST) : null));
|
||||||
@@ -198,5 +220,4 @@ public final class GameMenu {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,6 +93,15 @@ public class FList<E> extends SkinnedList<E> {
|
|||||||
return width;
|
return width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getCount() {
|
||||||
|
return getModel().getSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
public void removeItem(E item) {
|
||||||
|
((DefaultListModel)getModel()).removeElement(item);
|
||||||
|
}
|
||||||
|
|
||||||
private class ComplexCellRenderer<E1> implements ListCellRenderer<E1> {
|
private class ComplexCellRenderer<E1> implements ListCellRenderer<E1> {
|
||||||
private DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
|
private DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
|
||||||
|
|
||||||
|
|||||||
@@ -206,6 +206,10 @@ public class FDialog extends SkinnedDialog implements ITitleBarOwner, KeyEventDi
|
|||||||
super.add(popup);
|
super.add(popup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void add(Component comp, int x, int y, int w, int h) {
|
||||||
|
add(comp, "x " + x + ", y " + y + ", w " + w + ", h " + h);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(Component comp, Object constraints) {
|
public void add(Component comp, Object constraints) {
|
||||||
if (innerPanel != null) {
|
if (innerPanel != null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user