mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
DeckChooser from constructed home screen refactored as a component
This commit is contained in:
1
.gitattributes
vendored
1
.gitattributes
vendored
@@ -12883,6 +12883,7 @@ src/main/java/forge/gui/toolbox/DeckLister.java -text
|
|||||||
src/main/java/forge/gui/toolbox/ExperimentalLabel.java -text
|
src/main/java/forge/gui/toolbox/ExperimentalLabel.java -text
|
||||||
src/main/java/forge/gui/toolbox/FButton.java -text
|
src/main/java/forge/gui/toolbox/FButton.java -text
|
||||||
src/main/java/forge/gui/toolbox/FCheckBox.java -text
|
src/main/java/forge/gui/toolbox/FCheckBox.java -text
|
||||||
|
src/main/java/forge/gui/toolbox/FDeckChooser.java -text
|
||||||
src/main/java/forge/gui/toolbox/FLabel.java -text
|
src/main/java/forge/gui/toolbox/FLabel.java -text
|
||||||
src/main/java/forge/gui/toolbox/FList.java -text
|
src/main/java/forge/gui/toolbox/FList.java -text
|
||||||
src/main/java/forge/gui/toolbox/FOverlay.java -text
|
src/main/java/forge/gui/toolbox/FOverlay.java -text
|
||||||
|
|||||||
@@ -461,7 +461,6 @@ public class GameState {
|
|||||||
do{
|
do{
|
||||||
iPlayer = ( iPlayer + 1 ) % allPlayers.size();
|
iPlayer = ( iPlayer + 1 ) % allPlayers.size();
|
||||||
iAlive = roIngamePlayers.indexOf(allPlayers.get(iPlayer));
|
iAlive = roIngamePlayers.indexOf(allPlayers.get(iPlayer));
|
||||||
|
|
||||||
} while(iAlive < 0);
|
} while(iAlive < 0);
|
||||||
iPlayer = iAlive;
|
iPlayer = iAlive;
|
||||||
} else { // for the case noone has died
|
} else { // for the case noone has died
|
||||||
|
|||||||
@@ -216,8 +216,13 @@ public abstract class Player extends GameEntity implements Comparable<Player> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public final List<Player> getOpponents() {
|
public final List<Player> getOpponents() {
|
||||||
Predicate<Player> enemy = com.google.common.base.Predicates.not(Player.Predicates.isType(this.getType()));
|
List<Player> result = new ArrayList<Player>();
|
||||||
return Lists.newArrayList(Iterables.filter(Singletons.getModel().getGame().getPlayers(), enemy));
|
for (Player p : Singletons.getModel().getGame().getPlayers()) {
|
||||||
|
if (p == this || p.getType() == this.getType())
|
||||||
|
continue;
|
||||||
|
result.add(p);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -226,8 +231,13 @@ public abstract class Player extends GameEntity implements Comparable<Player> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public final List<Player> getAllies() {
|
public final List<Player> getAllies() {
|
||||||
Predicate<Player> enemy = Player.Predicates.isType(this.getType());
|
List<Player> result = new ArrayList<Player>();
|
||||||
return Lists.newArrayList(Iterables.filter(Singletons.getModel().getGame().getPlayers(), enemy));
|
for (Player p : Singletons.getModel().getGame().getPlayers()) {
|
||||||
|
if (p == this || p.getType() != this.getType())
|
||||||
|
continue;
|
||||||
|
result.add(p);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,36 +2,21 @@ package forge.gui.home.sanctioned;
|
|||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.MouseAdapter;
|
|
||||||
import java.awt.event.MouseEvent;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import javax.swing.JList;
|
|
||||||
import javax.swing.ListSelectionModel;
|
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
import javax.swing.SwingWorker;
|
import javax.swing.SwingWorker;
|
||||||
|
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
|
||||||
|
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
import forge.Singletons;
|
import forge.Singletons;
|
||||||
import forge.control.Lobby;
|
import forge.control.Lobby;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.deck.DeckgenUtil;
|
|
||||||
import forge.deck.generate.GenerateThemeDeck;
|
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
import forge.game.MatchController;
|
import forge.game.MatchController;
|
||||||
import forge.game.MatchStartHelper;
|
import forge.game.MatchStartHelper;
|
||||||
import forge.game.player.PlayerType;
|
import forge.game.player.PlayerType;
|
||||||
import forge.gui.SOverlayUtils;
|
import forge.gui.SOverlayUtils;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
import forge.gui.toolbox.ExperimentalLabel;
|
|
||||||
import forge.properties.ForgePreferences;
|
import forge.properties.ForgePreferences;
|
||||||
import forge.properties.ForgePreferences.FPref;
|
import forge.properties.ForgePreferences.FPref;
|
||||||
import forge.quest.QuestController;
|
|
||||||
import forge.quest.QuestEvent;
|
|
||||||
import forge.util.IStorage;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controls the constructed submenu in the home UI.
|
* Controls the constructed submenu in the home UI.
|
||||||
@@ -39,40 +24,11 @@ import forge.util.IStorage;
|
|||||||
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
* <br><br><i>(C at beginning of class name denotes a control class.)</i>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("serial")
|
|
||||||
public enum CSubmenuConstructed implements ICDoc {
|
public enum CSubmenuConstructed implements ICDoc {
|
||||||
/** */
|
/** */
|
||||||
SINGLETON_INSTANCE;
|
SINGLETON_INSTANCE;
|
||||||
private final VSubmenuConstructed view = VSubmenuConstructed.SINGLETON_INSTANCE;
|
private final VSubmenuConstructed view = VSubmenuConstructed.SINGLETON_INSTANCE;
|
||||||
|
|
||||||
private enum ESubmenuConstructedTypes { /** */
|
|
||||||
COLORS, /** */
|
|
||||||
THEMES, /** */
|
|
||||||
CUSTOM, /** */
|
|
||||||
QUESTEVENTS
|
|
||||||
}
|
|
||||||
|
|
||||||
private final MouseAdapter madDecklist = new MouseAdapter() {
|
|
||||||
@Override
|
|
||||||
public void mouseClicked(final MouseEvent e) {
|
|
||||||
if (e.getClickCount() == 2) {
|
|
||||||
final JList src = ((JList) e.getSource());
|
|
||||||
if (src.equals(view.getLstDecksAI())) {
|
|
||||||
if (view.getRadColorsAI().isSelected()) { return; }
|
|
||||||
if (view.getRadThemesAI().isSelected()) { return; }
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (view.getRadColorsHuman().isSelected()) { return; }
|
|
||||||
if (view.getRadThemesHuman().isSelected()) { return; }
|
|
||||||
}
|
|
||||||
|
|
||||||
DeckgenUtil.showDecklist(src);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private final QuestController quest = Singletons.getModel().getQuest();
|
|
||||||
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.home.ICSubmenu#initialize()
|
* @see forge.gui.home.ICSubmenu#initialize()
|
||||||
@@ -88,39 +44,8 @@ public enum CSubmenuConstructed implements ICDoc {
|
|||||||
@Override
|
@Override
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
final ForgePreferences prefs = Singletons.getModel().getPreferences();
|
final ForgePreferences prefs = Singletons.getModel().getPreferences();
|
||||||
|
view.getDcAi().initialize();
|
||||||
// Radio button event handling
|
view.getDcHuman().initialize();
|
||||||
view.getRadColorsAI().addActionListener(new ActionListener() { @Override
|
|
||||||
public void actionPerformed(final ActionEvent arg0) {
|
|
||||||
updateColors(PlayerType.COMPUTER); } });
|
|
||||||
|
|
||||||
view.getRadColorsHuman().addActionListener(new ActionListener() { @Override
|
|
||||||
public void actionPerformed(final ActionEvent arg0) {
|
|
||||||
updateColors(PlayerType.HUMAN); } });
|
|
||||||
|
|
||||||
view.getRadThemesAI().addActionListener(new ActionListener() { @Override
|
|
||||||
public void actionPerformed(final ActionEvent arg0) {
|
|
||||||
updateThemes(PlayerType.COMPUTER); } });
|
|
||||||
|
|
||||||
view.getRadThemesHuman().addActionListener(new ActionListener() { @Override
|
|
||||||
public void actionPerformed(final ActionEvent arg0) {
|
|
||||||
updateThemes(PlayerType.HUMAN); } });
|
|
||||||
|
|
||||||
view.getRadCustomAI().addActionListener(new ActionListener() { @Override
|
|
||||||
public void actionPerformed(final ActionEvent arg0) {
|
|
||||||
updateCustom(PlayerType.COMPUTER); } });
|
|
||||||
|
|
||||||
view.getRadCustomHuman().addActionListener(new ActionListener() { @Override
|
|
||||||
public void actionPerformed(final ActionEvent arg0) {
|
|
||||||
updateCustom(PlayerType.HUMAN); } });
|
|
||||||
|
|
||||||
view.getRadQuestsAI().addActionListener(new ActionListener() { @Override
|
|
||||||
public void actionPerformed(final ActionEvent arg0) {
|
|
||||||
updateQuestEvents(PlayerType.COMPUTER); } });
|
|
||||||
|
|
||||||
view.getRadQuestsHuman().addActionListener(new ActionListener() { @Override
|
|
||||||
public void actionPerformed(final ActionEvent arg0) {
|
|
||||||
updateQuestEvents(PlayerType.HUMAN); } });
|
|
||||||
|
|
||||||
// Checkbox event handling
|
// Checkbox event handling
|
||||||
view.getBtnStart().addActionListener(new ActionListener() {
|
view.getBtnStart().addActionListener(new ActionListener() {
|
||||||
@@ -162,128 +87,9 @@ public enum CSubmenuConstructed implements ICDoc {
|
|||||||
view.getCbSingletons().setSelected(prefs.getPrefBoolean(FPref.DECKGEN_SINGLETONS));
|
view.getCbSingletons().setSelected(prefs.getPrefBoolean(FPref.DECKGEN_SINGLETONS));
|
||||||
view.getCbArtifacts().setSelected(prefs.getPrefBoolean(FPref.DECKGEN_ARTIFACTS));
|
view.getCbArtifacts().setSelected(prefs.getPrefBoolean(FPref.DECKGEN_ARTIFACTS));
|
||||||
view.getCbRemoveSmall().setSelected(prefs.getPrefBoolean(FPref.DECKGEN_NOSMALL));
|
view.getCbRemoveSmall().setSelected(prefs.getPrefBoolean(FPref.DECKGEN_NOSMALL));
|
||||||
|
|
||||||
// First run: colors
|
|
||||||
view.getRadColorsAI().setSelected(true);
|
|
||||||
view.getRadColorsHuman().setSelected(true);
|
|
||||||
|
|
||||||
updateColors(PlayerType.COMPUTER);
|
|
||||||
updateColors(PlayerType.HUMAN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Handles all control for "colors" radio button click. */
|
|
||||||
private void updateColors(final PlayerType player0) {
|
|
||||||
final JList lst = (player0.equals(PlayerType.HUMAN)
|
|
||||||
? VSubmenuConstructed.SINGLETON_INSTANCE.getLstUserDecks()
|
|
||||||
: VSubmenuConstructed.SINGLETON_INSTANCE.getLstDecksAI());
|
|
||||||
lst.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
|
||||||
|
|
||||||
lst.setListData(new String[] {"Random 1", "Random 2", "Random 3",
|
|
||||||
"Random 4", "Black", "Blue", "Green", "Red", "White"});
|
|
||||||
lst.setName(ESubmenuConstructedTypes.COLORS.toString());
|
|
||||||
lst.removeMouseListener(madDecklist);
|
|
||||||
lst.addMouseListener(madDecklist);
|
|
||||||
|
|
||||||
final ExperimentalLabel btn = (player0.equals(PlayerType.HUMAN)
|
|
||||||
? VSubmenuConstructed.SINGLETON_INSTANCE.getBtnHumanRandom()
|
|
||||||
: VSubmenuConstructed.SINGLETON_INSTANCE.getBtnAIRandom());
|
|
||||||
|
|
||||||
btn.setCommand(new Command() { @Override
|
|
||||||
public void execute() { lst.setSelectedIndices(
|
|
||||||
DeckgenUtil.randomSelectColors()); } });
|
|
||||||
|
|
||||||
// Init basic two color deck
|
|
||||||
lst.setSelectedIndices(new int[]{0, 1});
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Handles all control for "themes" radio button click. */
|
|
||||||
private void updateThemes(final PlayerType player0) {
|
|
||||||
final JList lst = (player0.equals(PlayerType.HUMAN)
|
|
||||||
? VSubmenuConstructed.SINGLETON_INSTANCE.getLstUserDecks()
|
|
||||||
: VSubmenuConstructed.SINGLETON_INSTANCE.getLstDecksAI());
|
|
||||||
lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
|
||||||
|
|
||||||
lst.setName(ESubmenuConstructedTypes.COLORS.toString());
|
|
||||||
lst.removeMouseListener(madDecklist);
|
|
||||||
lst.addMouseListener(madDecklist);
|
|
||||||
|
|
||||||
final List<String> themeNames = new ArrayList<String>();
|
|
||||||
for (final String s : GenerateThemeDeck.getThemeNames()) { themeNames.add(s); }
|
|
||||||
|
|
||||||
lst.setListData(themeNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
|
|
||||||
lst.setName(ESubmenuConstructedTypes.THEMES.toString());
|
|
||||||
lst.removeMouseListener(madDecklist);
|
|
||||||
|
|
||||||
final ExperimentalLabel btn = (player0.equals(PlayerType.HUMAN)
|
|
||||||
? VSubmenuConstructed.SINGLETON_INSTANCE.getBtnHumanRandom()
|
|
||||||
: VSubmenuConstructed.SINGLETON_INSTANCE.getBtnAIRandom());
|
|
||||||
|
|
||||||
btn.setCommand(new Command() { @Override
|
|
||||||
public void execute() { DeckgenUtil.randomSelect(lst); } });
|
|
||||||
|
|
||||||
// Init first in list
|
|
||||||
lst.setSelectedIndex(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Handles all control for "custom" radio button click. */
|
|
||||||
private void updateCustom(final PlayerType player0) {
|
|
||||||
final JList lst = (player0.equals(PlayerType.HUMAN)
|
|
||||||
? VSubmenuConstructed.SINGLETON_INSTANCE.getLstUserDecks()
|
|
||||||
: VSubmenuConstructed.SINGLETON_INSTANCE.getLstDecksAI());
|
|
||||||
lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
|
||||||
|
|
||||||
final List<String> customNames = new ArrayList<String>();
|
|
||||||
final IStorage<Deck> allDecks = Singletons.getModel().getDecks().getConstructed();
|
|
||||||
for (final Deck d : allDecks) { customNames.add(d.getName()); }
|
|
||||||
|
|
||||||
lst.setListData(customNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
|
|
||||||
lst.setName(ESubmenuConstructedTypes.CUSTOM.toString());
|
|
||||||
lst.removeMouseListener(madDecklist);
|
|
||||||
lst.addMouseListener(madDecklist);
|
|
||||||
|
|
||||||
final ExperimentalLabel btn = (player0.equals(PlayerType.HUMAN)
|
|
||||||
? VSubmenuConstructed.SINGLETON_INSTANCE.getBtnHumanRandom()
|
|
||||||
: VSubmenuConstructed.SINGLETON_INSTANCE.getBtnAIRandom());
|
|
||||||
|
|
||||||
btn.setCommand(new Command() { @Override
|
|
||||||
public void execute() { DeckgenUtil.randomSelect(lst); } });
|
|
||||||
|
|
||||||
// Init first in list
|
|
||||||
lst.setSelectedIndex(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Handles all control for "quest event" radio button click. */
|
|
||||||
private void updateQuestEvents(final PlayerType player0) {
|
|
||||||
final JList lst = (player0.equals(PlayerType.HUMAN)
|
|
||||||
? VSubmenuConstructed.SINGLETON_INSTANCE.getLstUserDecks()
|
|
||||||
: VSubmenuConstructed.SINGLETON_INSTANCE.getLstDecksAI());
|
|
||||||
lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
|
||||||
|
|
||||||
final List<String> eventNames = new ArrayList<String>();
|
|
||||||
|
|
||||||
for (final QuestEvent e : quest.getDuelsManager().getAllDuels()) {
|
|
||||||
eventNames.add(e.getEventDeck().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
for (final QuestEvent e : quest.getChallengesManager().getAllChallenges()) {
|
|
||||||
eventNames.add(e.getEventDeck().getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
lst.setListData(eventNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
|
|
||||||
lst.setName(ESubmenuConstructedTypes.QUESTEVENTS.toString());
|
|
||||||
lst.removeMouseListener(madDecklist);
|
|
||||||
lst.addMouseListener(madDecklist);
|
|
||||||
|
|
||||||
final ExperimentalLabel btn = (player0.equals(PlayerType.HUMAN)
|
|
||||||
? VSubmenuConstructed.SINGLETON_INSTANCE.getBtnHumanRandom()
|
|
||||||
: VSubmenuConstructed.SINGLETON_INSTANCE.getBtnAIRandom());
|
|
||||||
|
|
||||||
btn.setCommand(new Command() { @Override
|
|
||||||
public void execute() { DeckgenUtil.randomSelect(lst); } });
|
|
||||||
|
|
||||||
// Init first in list
|
|
||||||
lst.setSelectedIndex(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @param lists0   {@link java.util.List}<{@link javax.swing.JList}> */
|
/** @param lists0   {@link java.util.List}<{@link javax.swing.JList}> */
|
||||||
private void startGame() {
|
private void startGame() {
|
||||||
@@ -298,8 +104,8 @@ public enum CSubmenuConstructed implements ICDoc {
|
|||||||
final SwingWorker<Object, Void> worker = new SwingWorker<Object, Void>() {
|
final SwingWorker<Object, Void> worker = new SwingWorker<Object, Void>() {
|
||||||
@Override
|
@Override
|
||||||
public Object doInBackground() {
|
public Object doInBackground() {
|
||||||
Deck humanDeck = generateDeck(VSubmenuConstructed.SINGLETON_INSTANCE.getLstUserDecks(), PlayerType.HUMAN);
|
Deck humanDeck = VSubmenuConstructed.SINGLETON_INSTANCE.getDcHuman().getDeck();
|
||||||
Deck aiDeck = generateDeck(VSubmenuConstructed.SINGLETON_INSTANCE.getLstDecksAI(), PlayerType.COMPUTER);
|
Deck aiDeck = VSubmenuConstructed.SINGLETON_INSTANCE.getDcAi().getDeck();
|
||||||
|
|
||||||
MatchStartHelper starter = new MatchStartHelper();
|
MatchStartHelper starter = new MatchStartHelper();
|
||||||
Lobby lobby = Singletons.getControl().getLobby();
|
Lobby lobby = Singletons.getControl().getLobby();
|
||||||
@@ -321,35 +127,6 @@ public enum CSubmenuConstructed implements ICDoc {
|
|||||||
worker.execute();
|
worker.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Generates deck from current list selection(s). */
|
|
||||||
private Deck generateDeck(final JList lst0, final PlayerType player0) {
|
|
||||||
final String[] selection = Arrays.copyOf(lst0.getSelectedValues(),
|
|
||||||
lst0.getSelectedValues().length, String[].class);
|
|
||||||
|
|
||||||
final Deck deck;
|
|
||||||
|
|
||||||
if (selection.length == 0) { return null; }
|
|
||||||
|
|
||||||
if (lst0.getName().equals(ESubmenuConstructedTypes.COLORS.toString()) && DeckgenUtil.colorCheck(selection)) {
|
|
||||||
deck = DeckgenUtil.buildColorDeck(selection, player0);
|
|
||||||
}
|
|
||||||
else if (lst0.getName().equals(ESubmenuConstructedTypes.THEMES.toString())) {
|
|
||||||
deck = DeckgenUtil.buildThemeDeck(selection);
|
|
||||||
}
|
|
||||||
else if (lst0.getName().equals(ESubmenuConstructedTypes.QUESTEVENTS.toString())) {
|
|
||||||
deck = DeckgenUtil.buildQuestDeck(selection);
|
|
||||||
}
|
|
||||||
// Custom deck
|
|
||||||
else if (lst0.getName().equals(ESubmenuConstructedTypes.CUSTOM.toString())) {
|
|
||||||
deck = DeckgenUtil.buildCustomDeck(selection);
|
|
||||||
}
|
|
||||||
// Failure, for some reason
|
|
||||||
else {
|
|
||||||
deck = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return deck;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
* @see forge.gui.framework.ICDoc#getCommandOnSelect()
|
||||||
|
|||||||
@@ -1,17 +1,10 @@
|
|||||||
package forge.gui.home.sanctioned;
|
package forge.gui.home.sanctioned;
|
||||||
|
|
||||||
import java.awt.Font;
|
|
||||||
|
|
||||||
import javax.swing.ButtonGroup;
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JCheckBox;
|
import javax.swing.JCheckBox;
|
||||||
import javax.swing.JList;
|
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.JRadioButton;
|
|
||||||
import javax.swing.JScrollPane;
|
|
||||||
import javax.swing.SwingConstants;
|
|
||||||
|
|
||||||
import net.miginfocom.swing.MigLayout;
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
import forge.game.player.PlayerType;
|
||||||
import forge.gui.framework.DragCell;
|
import forge.gui.framework.DragCell;
|
||||||
import forge.gui.framework.DragTab;
|
import forge.gui.framework.DragTab;
|
||||||
import forge.gui.framework.EDocID;
|
import forge.gui.framework.EDocID;
|
||||||
@@ -20,12 +13,8 @@ import forge.gui.home.IVSubmenu;
|
|||||||
import forge.gui.home.LblHeader;
|
import forge.gui.home.LblHeader;
|
||||||
import forge.gui.home.StartButton;
|
import forge.gui.home.StartButton;
|
||||||
import forge.gui.home.VHomeUI;
|
import forge.gui.home.VHomeUI;
|
||||||
import forge.gui.toolbox.ExperimentalLabel;
|
|
||||||
import forge.gui.toolbox.FCheckBox;
|
import forge.gui.toolbox.FCheckBox;
|
||||||
import forge.gui.toolbox.FLabel;
|
import forge.gui.toolbox.FDeckChooser;
|
||||||
import forge.gui.toolbox.FList;
|
|
||||||
import forge.gui.toolbox.FRadioButton;
|
|
||||||
import forge.gui.toolbox.FScrollPane;
|
|
||||||
import forge.gui.toolbox.FSkin;
|
import forge.gui.toolbox.FSkin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -45,86 +34,21 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
/** */
|
/** */
|
||||||
private final LblHeader lblTitle = new LblHeader("Sanctioned Format: Constructed");
|
private final LblHeader lblTitle = new LblHeader("Sanctioned Format: Constructed");
|
||||||
|
|
||||||
private final FLabel lblDecklist1 = new FLabel.Builder()
|
|
||||||
.text("Double click a non-random deck for its decklist.")
|
|
||||||
.fontSize(12).build();
|
|
||||||
|
|
||||||
private final FLabel lblDecklist2 = new FLabel.Builder()
|
|
||||||
.text("Double click a non-random deck for its decklist.")
|
|
||||||
.fontSize(12).build();
|
|
||||||
|
|
||||||
private final JPanel pnlRadiosHuman = new JPanel(new MigLayout("insets 0, gap 0, wrap"));
|
|
||||||
private final JPanel pnlRadiosAI = new JPanel(new MigLayout("insets 0, gap 0, wrap"));
|
|
||||||
private final JPanel pnlStart = new JPanel(new MigLayout("insets 0, gap 0, wrap 2"));
|
private final JPanel pnlStart = new JPanel(new MigLayout("insets 0, gap 0, wrap 2"));
|
||||||
|
|
||||||
private final StartButton btnStart = new StartButton();
|
private final StartButton btnStart = new StartButton();
|
||||||
private final JList lstDecksUser = new FList();
|
|
||||||
private final JList lstDecksAI = new FList();
|
|
||||||
|
|
||||||
private final JRadioButton radColorsHuman = new FRadioButton("Fully random color deck");
|
|
||||||
private final JRadioButton radThemesHuman = new FRadioButton("Semi-random theme deck");
|
|
||||||
private final JRadioButton radCustomHuman = new FRadioButton("Custom user deck");
|
|
||||||
private final JRadioButton radQuestsHuman = new FRadioButton("Quest opponent deck");
|
|
||||||
|
|
||||||
private final JRadioButton radColorsAI = new FRadioButton("Fully random color deck");
|
|
||||||
private final JRadioButton radThemesAI = new FRadioButton("Semi-random theme deck");
|
|
||||||
private final JRadioButton radCustomAI = new FRadioButton("Custom user deck");
|
|
||||||
private final JRadioButton radQuestsAI = new FRadioButton("Quest opponent deck");
|
|
||||||
|
|
||||||
private final JCheckBox cbSingletons = new FCheckBox("Singleton Mode");
|
private final JCheckBox cbSingletons = new FCheckBox("Singleton Mode");
|
||||||
private final JCheckBox cbArtifacts = new FCheckBox("Remove Artifacts");
|
private final JCheckBox cbArtifacts = new FCheckBox("Remove Artifacts");
|
||||||
private final JCheckBox cbRemoveSmall = new FCheckBox("Remove Small Creatures");
|
private final JCheckBox cbRemoveSmall = new FCheckBox("Remove Small Creatures");
|
||||||
|
|
||||||
private final JScrollPane scrDecksUser = new FScrollPane(lstDecksUser,
|
private final FDeckChooser dcHuman = new FDeckChooser("Select your deck:", PlayerType.HUMAN);
|
||||||
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
private final FDeckChooser dcAi = new FDeckChooser("Select AI deck:", PlayerType.COMPUTER);
|
||||||
|
|
||||||
private final JScrollPane scrDecksAI = new FScrollPane(lstDecksAI,
|
|
||||||
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
|
||||||
|
|
||||||
private final ExperimentalLabel btnHumanRandom = new ExperimentalLabel("Random");
|
|
||||||
private final ExperimentalLabel btnAIRandom = new ExperimentalLabel("Random");
|
|
||||||
|
|
||||||
private VSubmenuConstructed() {
|
private VSubmenuConstructed() {
|
||||||
// Radio button group: Human
|
|
||||||
final ButtonGroup grpRadiosHuman = new ButtonGroup();
|
|
||||||
grpRadiosHuman.add(radCustomHuman);
|
|
||||||
grpRadiosHuman.add(radQuestsHuman);
|
|
||||||
grpRadiosHuman.add(radColorsHuman);
|
|
||||||
grpRadiosHuman.add(radThemesHuman);
|
|
||||||
|
|
||||||
// Radio button group: AI
|
|
||||||
final ButtonGroup grpRadiosAI = new ButtonGroup();
|
|
||||||
grpRadiosAI.add(radCustomAI);
|
|
||||||
grpRadiosAI.add(radQuestsAI);
|
|
||||||
grpRadiosAI.add(radColorsAI);
|
|
||||||
grpRadiosAI.add(radThemesAI);
|
|
||||||
|
|
||||||
lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
|
lblTitle.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
|
||||||
|
|
||||||
// Radio button panels: Human and AI
|
|
||||||
final String strRadioConstraints = "w 100%!, h 30px!";
|
|
||||||
|
|
||||||
pnlRadiosHuman.setOpaque(false);
|
|
||||||
pnlRadiosHuman.add(new FLabel.Builder().text("Select your deck:")
|
|
||||||
.fontStyle(Font.BOLD).fontSize(16)
|
|
||||||
.fontAlign(SwingConstants.LEFT).build(), strRadioConstraints);
|
|
||||||
pnlRadiosHuman.add(lblDecklist1, "h 20px!, gap 0 0 0 10px");
|
|
||||||
pnlRadiosHuman.add(radCustomHuman, strRadioConstraints);
|
|
||||||
pnlRadiosHuman.add(radQuestsHuman, strRadioConstraints);
|
|
||||||
pnlRadiosHuman.add(radColorsHuman, strRadioConstraints);
|
|
||||||
pnlRadiosHuman.add(radThemesHuman, strRadioConstraints);
|
|
||||||
pnlRadiosHuman.add(btnHumanRandom, "w 200px!, h 30px!, gap 0 0 10px 0, ax center");
|
|
||||||
|
|
||||||
pnlRadiosAI.setOpaque(false);
|
|
||||||
pnlRadiosAI.add(new FLabel.Builder().text("Select an AI deck:")
|
|
||||||
.fontStyle(Font.BOLD).fontSize(16)
|
|
||||||
.fontAlign(SwingConstants.LEFT).build(), strRadioConstraints);
|
|
||||||
pnlRadiosAI.add(lblDecklist2, "h 20px!, gap 0 0 0 10px");
|
|
||||||
pnlRadiosAI.add(radCustomAI, strRadioConstraints);
|
|
||||||
pnlRadiosAI.add(radQuestsAI, strRadioConstraints);
|
|
||||||
pnlRadiosAI.add(radColorsAI, strRadioConstraints);
|
|
||||||
pnlRadiosAI.add(radThemesAI, strRadioConstraints);
|
|
||||||
pnlRadiosAI.add(btnAIRandom, "w 200px!, h 30px!, gap 0 0 10px 0, ax center");
|
|
||||||
|
|
||||||
final String strCheckboxConstraints = "w 200px!, h 30px!, gap 0 20px 0 0";
|
final String strCheckboxConstraints = "w 200px!, h 30px!, gap 0 20px 0 0";
|
||||||
pnlStart.setOpaque(false);
|
pnlStart.setOpaque(false);
|
||||||
@@ -142,6 +66,15 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
return EMenuGroup.SANCTIONED;
|
return EMenuGroup.SANCTIONED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final FDeckChooser getDcHuman() {
|
||||||
|
return dcHuman;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final FDeckChooser getDcAi() {
|
||||||
|
return dcAi;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.home.IVSubmenu#getMenuTitle()
|
* @see forge.gui.home.IVSubmenu#getMenuTitle()
|
||||||
*/
|
*/
|
||||||
@@ -165,81 +98,25 @@ public enum VSubmenuConstructed implements IVSubmenu<CSubmenuConstructed> {
|
|||||||
public void populate() {
|
public void populate() {
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().removeAll();
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().removeAll();
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().setLayout(new MigLayout("insets 0, gap 0, wrap 2, ax right"));
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().setLayout(new MigLayout("insets 0, gap 0, wrap 2, ax right"));
|
||||||
|
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblTitle, "w 80%!, h 40px!, gap 0 0 15px 15px, span 2, ax right");
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblTitle, "w 80%!, h 40px!, gap 0 0 15px 15px, span 2, ax right");
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlRadiosAI, "w 44%!, gap 0 0 20px 20px");
|
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlRadiosHuman, "w 44%!, gap 4% 4% 20px 20px");
|
dcAi.populate();
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(scrDecksAI, "w 44%!, growy, pushy");
|
dcHuman.populate();
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(scrDecksUser, "w 44%!, gap 4% 4% 0 0, growy, pushy");
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(dcAi, "w 44%!, gap 0 0 20px 20px, growy, pushy");
|
||||||
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(dcHuman, "w 44%!, gap 4% 4% 20px 20px, growy, pushy");
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlStart, "span 2, gap 0 0 50px 50px, ax center");
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlStart, "span 2, gap 0 0 50px 50px, ax center");
|
||||||
|
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().revalidate();
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().revalidate();
|
||||||
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().repaintSelf();
|
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().repaintSelf();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return {@link javax.swing.JList} */
|
|
||||||
public JList getLstUserDecks() {
|
|
||||||
return this.lstDecksUser;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JList} */
|
|
||||||
public JList getLstDecksAI() {
|
|
||||||
return this.lstDecksAI;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JButton} */
|
/** @return {@link javax.swing.JButton} */
|
||||||
public JButton getBtnStart() {
|
public JButton getBtnStart() {
|
||||||
return this.btnStart;
|
return this.btnStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return {@link forge.gui.toolbox.ExperimentalLabel} */
|
|
||||||
public ExperimentalLabel getBtnHumanRandom() {
|
|
||||||
return this.btnHumanRandom;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link forge.gui.toolbox.ExperimentalLabel} */
|
|
||||||
public ExperimentalLabel getBtnAIRandom() {
|
|
||||||
return this.btnAIRandom;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JRadioButton} */
|
|
||||||
public JRadioButton getRadColorsHuman() {
|
|
||||||
return this.radColorsHuman;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JRadioButton} */
|
|
||||||
public JRadioButton getRadThemesHuman() {
|
|
||||||
return this.radThemesHuman;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JRadioButton} */
|
|
||||||
public JRadioButton getRadCustomHuman() {
|
|
||||||
return this.radCustomHuman;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JRadioButton} */
|
|
||||||
public JRadioButton getRadQuestsHuman() {
|
|
||||||
return this.radQuestsHuman;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JRadioButton} */
|
|
||||||
public JRadioButton getRadColorsAI() {
|
|
||||||
return this.radColorsAI;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JRadioButton} */
|
|
||||||
public JRadioButton getRadThemesAI() {
|
|
||||||
return this.radThemesAI;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JRadioButton} */
|
|
||||||
public JRadioButton getRadCustomAI() {
|
|
||||||
return this.radCustomAI;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JRadioButton} */
|
|
||||||
public JRadioButton getRadQuestsAI() {
|
|
||||||
return this.radQuestsAI;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return {@link javax.swing.JCheckBox} */
|
/** @return {@link javax.swing.JCheckBox} */
|
||||||
public JCheckBox getCbSingletons() {
|
public JCheckBox getCbSingletons() {
|
||||||
|
|||||||
304
src/main/java/forge/gui/toolbox/FDeckChooser.java
Normal file
304
src/main/java/forge/gui/toolbox/FDeckChooser.java
Normal file
@@ -0,0 +1,304 @@
|
|||||||
|
package forge.gui.toolbox;
|
||||||
|
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.MouseAdapter;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.swing.ButtonGroup;
|
||||||
|
import javax.swing.JList;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JRadioButton;
|
||||||
|
import javax.swing.JScrollPane;
|
||||||
|
import javax.swing.ListSelectionModel;
|
||||||
|
import javax.swing.SwingConstants;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
|
||||||
|
import net.miginfocom.swing.MigLayout;
|
||||||
|
|
||||||
|
import forge.Command;
|
||||||
|
import forge.Singletons;
|
||||||
|
import forge.deck.Deck;
|
||||||
|
import forge.deck.DeckgenUtil;
|
||||||
|
import forge.deck.generate.GenerateThemeDeck;
|
||||||
|
import forge.game.player.PlayerType;
|
||||||
|
import forge.gui.home.VHomeUI;
|
||||||
|
import forge.quest.QuestController;
|
||||||
|
import forge.quest.QuestEvent;
|
||||||
|
import forge.util.IStorage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this type.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("serial")
|
||||||
|
public class FDeckChooser extends JPanel {
|
||||||
|
|
||||||
|
private enum ESubmenuConstructedTypes { /** */
|
||||||
|
COLORS, /** */
|
||||||
|
THEMES, /** */
|
||||||
|
CUSTOM, /** */
|
||||||
|
QUESTEVENTS
|
||||||
|
}
|
||||||
|
|
||||||
|
private final QuestController quest = Singletons.getModel().getQuest();
|
||||||
|
|
||||||
|
private final JRadioButton radColors = new FRadioButton("Fully random color deck");
|
||||||
|
private final JRadioButton radThemes = new FRadioButton("Semi-random theme deck");
|
||||||
|
private final JRadioButton radCustom = new FRadioButton("Custom user deck");
|
||||||
|
private final JRadioButton radQuests = new FRadioButton("Quest opponent deck");
|
||||||
|
|
||||||
|
private final JList lstDecks = new FList();
|
||||||
|
private final ExperimentalLabel btnRandom = new ExperimentalLabel("Random");
|
||||||
|
|
||||||
|
private final JScrollPane scrDecks = new FScrollPane(lstDecks, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
||||||
|
|
||||||
|
private final FLabel lblDecklist = new FLabel.Builder()
|
||||||
|
.text("Double click a non-random deck for its decklist.")
|
||||||
|
.fontSize(12).build();
|
||||||
|
|
||||||
|
private final JPanel pnlRadios = new JPanel(new MigLayout("insets 0, gap 0, wrap"));
|
||||||
|
private final PlayerType playerType;
|
||||||
|
|
||||||
|
|
||||||
|
private final MouseAdapter madDecklist = new MouseAdapter() {
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(final MouseEvent e) {
|
||||||
|
if (e.getClickCount() == 2) {
|
||||||
|
final JList src = ((JList) e.getSource());
|
||||||
|
if (getRadColors().isSelected()) { return; }
|
||||||
|
if (getRadThemes().isSelected()) { return; }
|
||||||
|
DeckgenUtil.showDecklist(src);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
public FDeckChooser(String titleText, PlayerType pt)
|
||||||
|
{
|
||||||
|
playerType = pt;
|
||||||
|
|
||||||
|
// Radio button panels: Human and AI
|
||||||
|
final String strRadioConstraints = "w 100%!, h 30px!";
|
||||||
|
|
||||||
|
this.setOpaque(false);
|
||||||
|
|
||||||
|
// Radio button group: Human
|
||||||
|
final ButtonGroup grpRadios = new ButtonGroup();
|
||||||
|
grpRadios.add(radCustom);
|
||||||
|
grpRadios.add(radQuests);
|
||||||
|
grpRadios.add(radColors);
|
||||||
|
grpRadios.add(radThemes);
|
||||||
|
|
||||||
|
pnlRadios.setOpaque(false);
|
||||||
|
pnlRadios.add(new FLabel.Builder().text(titleText)
|
||||||
|
.fontStyle(Font.BOLD).fontSize(16)
|
||||||
|
.fontAlign(SwingConstants.LEFT).build(), strRadioConstraints);
|
||||||
|
pnlRadios.add(lblDecklist, "h 20px!, gap 0 0 0 10px");
|
||||||
|
pnlRadios.add(radCustom, strRadioConstraints);
|
||||||
|
pnlRadios.add(radQuests, strRadioConstraints);
|
||||||
|
pnlRadios.add(radColors, strRadioConstraints);
|
||||||
|
pnlRadios.add(radThemes, strRadioConstraints);
|
||||||
|
pnlRadios.add(btnRandom, "w 200px!, h 30px!, gap 0 0 10px 0, ax center");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initialize() {
|
||||||
|
// Radio button event handling
|
||||||
|
getRadColors().addActionListener(new ActionListener() { @Override
|
||||||
|
public void actionPerformed(final ActionEvent arg0) {
|
||||||
|
updateColors(); } });
|
||||||
|
|
||||||
|
getRadThemes().addActionListener(new ActionListener() { @Override
|
||||||
|
public void actionPerformed(final ActionEvent arg0) {
|
||||||
|
updateThemes(); } });
|
||||||
|
|
||||||
|
getRadCustom().addActionListener(new ActionListener() { @Override
|
||||||
|
public void actionPerformed(final ActionEvent arg0) {
|
||||||
|
updateCustom(); } });
|
||||||
|
|
||||||
|
getRadQuests().addActionListener(new ActionListener() { @Override
|
||||||
|
public void actionPerformed(final ActionEvent arg0) {
|
||||||
|
updateQuestEvents(); } });
|
||||||
|
|
||||||
|
// First run: colors
|
||||||
|
getRadColors().setSelected(true);
|
||||||
|
updateColors();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** @return {@link javax.swing.JList} */
|
||||||
|
public JList getLstDecks() {
|
||||||
|
return this.lstDecks;
|
||||||
|
}
|
||||||
|
/** @return {@link forge.gui.toolbox.ExperimentalLabel} */
|
||||||
|
public ExperimentalLabel getBtnRandom() {
|
||||||
|
return this.btnRandom;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link javax.swing.JRadioButton} */
|
||||||
|
public JRadioButton getRadColors() {
|
||||||
|
return this.radColors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link javax.swing.JRadioButton} */
|
||||||
|
public JRadioButton getRadThemes() {
|
||||||
|
return this.radThemes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link javax.swing.JRadioButton} */
|
||||||
|
public JRadioButton getRadCustom() {
|
||||||
|
return this.radCustom;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return {@link javax.swing.JRadioButton} */
|
||||||
|
public JRadioButton getRadQuests() {
|
||||||
|
return this.radQuests;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Handles all control for "colors" radio button click. */
|
||||||
|
private void updateColors() {
|
||||||
|
final JList lst = getLstDecks();
|
||||||
|
lst.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
||||||
|
|
||||||
|
lst.setListData(new String[] {"Random 1", "Random 2", "Random 3",
|
||||||
|
"Random 4", "Black", "Blue", "Green", "Red", "White"});
|
||||||
|
lst.setName(ESubmenuConstructedTypes.COLORS.toString());
|
||||||
|
lst.removeMouseListener(madDecklist);
|
||||||
|
lst.addMouseListener(madDecklist);
|
||||||
|
|
||||||
|
final ExperimentalLabel btn = getBtnRandom();
|
||||||
|
|
||||||
|
btn.setCommand(new Command() { @Override public void execute() { lst.setSelectedIndices( DeckgenUtil.randomSelectColors()); } });
|
||||||
|
|
||||||
|
// Init basic two color deck
|
||||||
|
lst.setSelectedIndices(new int[]{0, 1});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Handles all control for "themes" radio button click. */
|
||||||
|
private void updateThemes() {
|
||||||
|
final JList lst = getLstDecks();
|
||||||
|
lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
|
||||||
|
lst.setName(ESubmenuConstructedTypes.COLORS.toString());
|
||||||
|
lst.removeMouseListener(madDecklist);
|
||||||
|
lst.addMouseListener(madDecklist);
|
||||||
|
|
||||||
|
final List<String> themeNames = new ArrayList<String>();
|
||||||
|
for (final String s : GenerateThemeDeck.getThemeNames()) { themeNames.add(s); }
|
||||||
|
|
||||||
|
lst.setListData(themeNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
|
||||||
|
lst.setName(ESubmenuConstructedTypes.THEMES.toString());
|
||||||
|
lst.removeMouseListener(madDecklist);
|
||||||
|
|
||||||
|
final ExperimentalLabel btn = getBtnRandom();
|
||||||
|
btn.setCommand(new Command() { @Override public void execute() { DeckgenUtil.randomSelect(lst); } });
|
||||||
|
|
||||||
|
// Init first in list
|
||||||
|
lst.setSelectedIndex(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Handles all control for "custom" radio button click. */
|
||||||
|
private void updateCustom() {
|
||||||
|
final JList lst = getLstDecks();
|
||||||
|
lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
|
||||||
|
final List<String> customNames = new ArrayList<String>();
|
||||||
|
final IStorage<Deck> allDecks = Singletons.getModel().getDecks().getConstructed();
|
||||||
|
for (final Deck d : allDecks) { customNames.add(d.getName()); }
|
||||||
|
|
||||||
|
lst.setListData(customNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
|
||||||
|
lst.setName(ESubmenuConstructedTypes.CUSTOM.toString());
|
||||||
|
lst.removeMouseListener(madDecklist);
|
||||||
|
lst.addMouseListener(madDecklist);
|
||||||
|
|
||||||
|
final ExperimentalLabel btn = getBtnRandom();
|
||||||
|
|
||||||
|
btn.setCommand(new Command() { @Override public void execute() { DeckgenUtil.randomSelect(lst); } });
|
||||||
|
|
||||||
|
// Init first in list
|
||||||
|
lst.setSelectedIndex(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Handles all control for "quest event" radio button click. */
|
||||||
|
private void updateQuestEvents() {
|
||||||
|
final JList lst = getLstDecks();
|
||||||
|
lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
|
||||||
|
final List<String> eventNames = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (final QuestEvent e : quest.getDuelsManager().getAllDuels()) {
|
||||||
|
eventNames.add(e.getEventDeck().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (final QuestEvent e : quest.getChallengesManager().getAllChallenges()) {
|
||||||
|
eventNames.add(e.getEventDeck().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
lst.setListData(eventNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
|
||||||
|
lst.setName(ESubmenuConstructedTypes.QUESTEVENTS.toString());
|
||||||
|
lst.removeMouseListener(madDecklist);
|
||||||
|
lst.addMouseListener(madDecklist);
|
||||||
|
|
||||||
|
final ExperimentalLabel btn = getBtnRandom();
|
||||||
|
btn.setCommand(new Command() { @Override public void execute() { DeckgenUtil.randomSelect(lst); } });
|
||||||
|
|
||||||
|
// Init first in list
|
||||||
|
lst.setSelectedIndex(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Generates deck from current list selection(s). */
|
||||||
|
public Deck getDeck() {
|
||||||
|
JList lst0 = getLstDecks();
|
||||||
|
final String[] selection = Arrays.copyOf(lst0.getSelectedValues(), lst0.getSelectedValues().length, String[].class);
|
||||||
|
|
||||||
|
final Deck deck;
|
||||||
|
|
||||||
|
if (selection.length == 0) { return null; }
|
||||||
|
|
||||||
|
if (lst0.getName().equals(ESubmenuConstructedTypes.COLORS.toString()) && DeckgenUtil.colorCheck(selection)) {
|
||||||
|
deck = DeckgenUtil.buildColorDeck(selection, getPlayerType());
|
||||||
|
}
|
||||||
|
else if (lst0.getName().equals(ESubmenuConstructedTypes.THEMES.toString())) {
|
||||||
|
deck = DeckgenUtil.buildThemeDeck(selection);
|
||||||
|
}
|
||||||
|
else if (lst0.getName().equals(ESubmenuConstructedTypes.QUESTEVENTS.toString())) {
|
||||||
|
deck = DeckgenUtil.buildQuestDeck(selection);
|
||||||
|
}
|
||||||
|
// Custom deck
|
||||||
|
else if (lst0.getName().equals(ESubmenuConstructedTypes.CUSTOM.toString())) {
|
||||||
|
deck = DeckgenUtil.buildCustomDeck(selection);
|
||||||
|
}
|
||||||
|
// Failure, for some reason
|
||||||
|
else {
|
||||||
|
deck = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return deck;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this method.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private PlayerType getPlayerType() {
|
||||||
|
return playerType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Write javadoc for this method.
|
||||||
|
*/
|
||||||
|
public void populate() {
|
||||||
|
|
||||||
|
this.setLayout(new MigLayout("insets 0, gap 0, flowy, ax right"));
|
||||||
|
|
||||||
|
this.add(pnlRadios, "w 100%!, gap 0 0 20px 20px");
|
||||||
|
this.add(scrDecks, "w 100%!, growy, pushy");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user