Add AutoYields dialog

This commit is contained in:
drdev
2014-08-16 19:25:00 +00:00
parent 0c56a561e0
commit 7a9d8adb2e
6 changed files with 148 additions and 5 deletions

1
.gitattributes vendored
View File

@@ -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

View File

@@ -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;

View File

@@ -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);
}
}
}

View File

@@ -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 {
} }
}; };
} }
} }

View File

@@ -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();

View File

@@ -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) {