Saving further progress on home screen rebuild.

This commit is contained in:
Doublestrike
2012-02-23 09:17:57 +00:00
parent 1644df3464
commit e5a2d33aa4
14 changed files with 1019 additions and 13 deletions

15
.gitattributes vendored
View File

@@ -11218,7 +11218,6 @@ src/main/java/forge/control/home/ControlQuest.java -text
src/main/java/forge/control/home/ControlSealed.java -text
src/main/java/forge/control/home/ControlSettings.java -text
src/main/java/forge/control/home/ControlUtilities.java -text
src/main/java/forge/control/home/IControlSubmenu.java -text
src/main/java/forge/control/home/constructed/ControlSubmenuColors.java -text
src/main/java/forge/control/home/constructed/ControlSubmenuCustom.java -text
src/main/java/forge/control/home/package-info.java -text svneol=native#text/plain
@@ -11327,6 +11326,19 @@ src/main/java/forge/gui/game/CardDetailPanel.java svneol=native#text/plain
src/main/java/forge/gui/game/CardPanel.java svneol=native#text/plain
src/main/java/forge/gui/game/CardPicturePanel.java svneol=native#text/plain
src/main/java/forge/gui/game/package-info.java svneol=native#text/plain
src/main/java/forge/gui/home/EMenuGroup.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/constructed/CSubmenuColors.java -text
src/main/java/forge/gui/home/constructed/CSubmenuCustom.java -text
src/main/java/forge/gui/home/constructed/CSubmenuQuestEvents.java -text
src/main/java/forge/gui/home/constructed/CSubmenuThemes.java -text
src/main/java/forge/gui/home/constructed/ESubmenuConstructedTypes.java -text
src/main/java/forge/gui/home/constructed/SubmenuConstructedUtil.java -text
src/main/java/forge/gui/home/constructed/VSubmenuColors.java -text
src/main/java/forge/gui/home/constructed/VSubmenuCustom.java -text
src/main/java/forge/gui/home/constructed/VSubmenuQuestEvents.java -text
src/main/java/forge/gui/home/constructed/VSubmenuThemes.java -text
src/main/java/forge/gui/package-info.java svneol=native#text/plain
src/main/java/forge/item/BoosterPack.java -text
src/main/java/forge/item/CardDb.java -text
@@ -11418,7 +11430,6 @@ 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/editor/package-info.java svneol=native#text/plain
src/main/java/forge/view/home/ConstructedDeckSelectPanel.java -text
src/main/java/forge/view/home/IViewSubmenu.java -text
src/main/java/forge/view/home/QuestFileLister.java -text
src/main/java/forge/view/home/QuestPreferencesHandler.java -text
src/main/java/forge/view/home/StartButton.java -text

View File

@@ -0,0 +1,15 @@
package forge.gui.home;
/**
* Submenus each belong to a menu group, which
* is used for several functions, such as expanding
* and collapsing in the menu.
*/
public enum EMenuGroup { /** */
CONSTRUCTED, /** */
SEALED, /** */
DRAFT, /** */
QUEST, /** */
SETTINGS, /** */
UTILITIES;
}

View File

@@ -1,9 +1,9 @@
package forge.control.home;
package forge.gui.home;
import forge.Command;
/** Dictates methods required for a submenu controller. */
public interface IControlSubmenu {
public interface ICSubmenu {
/** @return {@link forge.Command} */
Command getMenuCommand();

View File

@@ -1,15 +1,9 @@
package forge.view.home;
package forge.gui.home;
import javax.swing.JPanel;
import forge.control.home.IControlSubmenu;
import forge.model.home.MenuGroup;
/** Dictates methods required for a submenu view. */
public interface IViewSubmenu {
/** @return {@link forge.control.home.IControlSubmenu} */
IControlSubmenu getControl();
public interface IVSubmenu {
/** Allows static factory creation by decoupling UI components.
* @return {@link javax.swing.JPanel} */
JPanel getPanel();
@@ -18,7 +12,7 @@ public interface IViewSubmenu {
* functions such as expanding and collapsing in the menu area.
*
* @return {@link javax.swing.JPanel} */
MenuGroup getGroup();
EMenuGroup getGroup();
/** Removes all children and (re)populates panel components, independent of constructor.*/
void populate();

View File

@@ -0,0 +1,81 @@
package forge.gui.home.constructed;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JList;
import javax.swing.SwingUtilities;
import forge.Command;
import forge.gui.home.ICSubmenu;
/**
* TODO: Write javadoc for this type.
*
*/
public enum CSubmenuColors implements ICSubmenu {
/** */
SINGLETON_INSTANCE;
private final Map<String, String> colorVals = new HashMap<String, String>();
private CSubmenuColors() {
colorVals.clear();
colorVals.put("Random 1", "AI");
colorVals.put("Random 2", "AI");
colorVals.put("Random 3", "AI");
colorVals.put("Random 4", "AI");
colorVals.put("Black", "black");
colorVals.put("Blue", "blue");
colorVals.put("Green", "green");
colorVals.put("Red", "red");
colorVals.put("White", "white");
}
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#update()
*/
@Override
public void initialize() {
VSubmenuColors.SINGLETON_INSTANCE.populate();
CSubmenuColors.SINGLETON_INSTANCE.update();
for (final JList lst : VSubmenuColors.SINGLETON_INSTANCE.getLists()) {
SubmenuConstructedUtil.randomSelect(lst);
}
VSubmenuColors.SINGLETON_INSTANCE.getBtnStart().addMouseListener(
new MouseAdapter() {
@Override
public void mouseReleased(final MouseEvent e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SubmenuConstructedUtil.startGame(VSubmenuColors.SINGLETON_INSTANCE.getLists());
}
});
}
});
}
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#getCommand()
*/
@Override
public Command getMenuCommand() {
return null;
}
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#update()
*/
@Override
public void update() {
for (final JList lst : VSubmenuColors.SINGLETON_INSTANCE.getLists()) {
lst.setListData(new String[] {"Random 1", "Random 2", "Random 3",
"Random 4", "Black", "Blue", "Green", "Red", "White"});
}
}
}

View File

@@ -0,0 +1,78 @@
package forge.gui.home.constructed;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JList;
import javax.swing.SwingUtilities;
import forge.Command;
import forge.Singletons;
import forge.deck.Deck;
import forge.gui.home.ICSubmenu;
import forge.util.IFolderMap;
/**
* TODO: Write javadoc for this type.
*
*/
public enum CSubmenuCustom implements ICSubmenu {
/** */
SINGLETON_INSTANCE;
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#getMenuCommand()
*/
@Override
public Command getMenuCommand() {
return null;
}
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#initialize()
*/
@Override
public void initialize() {
VSubmenuCustom.SINGLETON_INSTANCE.populate();
CSubmenuCustom.SINGLETON_INSTANCE.update();
for (JList lst : VSubmenuCustom.SINGLETON_INSTANCE.getLists()) {
SubmenuConstructedUtil.randomSelect(lst);
lst.addMouseListener(new MouseAdapter() { @Override
public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) {
final String deckName = ((JList) e.getSource()).getSelectedValue().toString();
SubmenuConstructedUtil.showDecklist(Singletons.getModel().getDecks().getConstructed().get(deckName));
} } });
}
VSubmenuCustom.SINGLETON_INSTANCE.getBtnStart().addMouseListener(
new MouseAdapter() {
@Override
public void mouseReleased(final MouseEvent e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SubmenuConstructedUtil.startGame(VSubmenuCustom.SINGLETON_INSTANCE.getLists());
}
});
}
});
}
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#update()
*/
@Override
public void update() {
final List<String> customNames = new ArrayList<String>();
final IFolderMap<Deck> allDecks = Singletons.getModel().getDecks().getConstructed();
for (final Deck d : allDecks) { customNames.add(d.getName()); }
for (JList lst : VSubmenuCustom.SINGLETON_INSTANCE.getLists()) {
lst.setListData(SubmenuConstructedUtil.oa2sa(customNames.toArray()));
}
}
}

View File

@@ -0,0 +1,85 @@
package forge.gui.home.constructed;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JList;
import javax.swing.SwingUtilities;
import forge.Command;
import forge.Singletons;
import forge.gui.home.ICSubmenu;
import forge.quest.data.QuestEvent;
/**
* TODO: Write javadoc for this type.
*
*/
public enum CSubmenuQuestEvents implements ICSubmenu {
/** */
SINGLETON_INSTANCE;
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#getMenuCommand()
*/
@Override
public Command getMenuCommand() {
return null;
}
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#initialize()
*/
@Override
public void initialize() {
VSubmenuQuestEvents.SINGLETON_INSTANCE.populate();
CSubmenuQuestEvents.SINGLETON_INSTANCE.update();
for (JList lst : VSubmenuQuestEvents.SINGLETON_INSTANCE.getLists()) {
SubmenuConstructedUtil.randomSelect(lst);
lst.addMouseListener(new MouseAdapter() { @Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
final String deckName = ((JList) e.getSource()).getSelectedValue().toString();
Singletons.getModel().getQuestEventManager().getEvent(deckName);
SubmenuConstructedUtil.showDecklist(Singletons.getModel().getQuestEventManager().getEvent(deckName).getEventDeck());
} } });
}
VSubmenuQuestEvents.SINGLETON_INSTANCE.getBtnStart().addMouseListener(
new MouseAdapter() {
@Override
public void mouseReleased(final MouseEvent e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SubmenuConstructedUtil.startGame(VSubmenuQuestEvents.SINGLETON_INSTANCE.getLists());
}
});
}
});
}
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#update()
*/
@Override
public void update() {
final List<String> eventNames = new ArrayList<String>();
for (final QuestEvent e : Singletons.getModel().getQuestEventManager().getAllChallenges()) {
eventNames.add(e.getEventDeck().getName());
}
for (final QuestEvent e : Singletons.getModel().getQuestEventManager().getAllDuels()) {
eventNames.add(e.getEventDeck().getName());
}
for (JList lst : VSubmenuQuestEvents.SINGLETON_INSTANCE.getLists()) {
lst.setListData(SubmenuConstructedUtil.oa2sa(eventNames.toArray()));
}
}
}

View File

@@ -0,0 +1,68 @@
package forge.gui.home.constructed;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JList;
import javax.swing.SwingUtilities;
import forge.Command;
import forge.deck.generate.GenerateThemeDeck;
import forge.gui.home.ICSubmenu;
/**
* TODO: Write javadoc for this type.
*
*/
public enum CSubmenuThemes implements ICSubmenu {
/** */
SINGLETON_INSTANCE;
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#getMenuCommand()
*/
@Override
public Command getMenuCommand() {
return null;
}
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#initialize()
*/
@Override
public void initialize() {
VSubmenuThemes.SINGLETON_INSTANCE.populate();
CSubmenuThemes.SINGLETON_INSTANCE.update();
for (final JList lst : VSubmenuThemes.SINGLETON_INSTANCE.getLists()) {
SubmenuConstructedUtil.randomSelect(lst);
}
VSubmenuThemes.SINGLETON_INSTANCE.getBtnStart().addMouseListener(
new MouseAdapter() {
@Override
public void mouseReleased(final MouseEvent e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SubmenuConstructedUtil.startGame(VSubmenuThemes.SINGLETON_INSTANCE.getLists());
}
});
}
});
}
/* (non-Javadoc)
* @see forge.control.home.IControlSubmenu#update()
*/
@Override
public void update() {
final List<String> themeNames = new ArrayList<String>();
for (final String s : GenerateThemeDeck.getThemeNames()) { themeNames.add(s); }
for (JList lst : VSubmenuThemes.SINGLETON_INSTANCE.getLists()) {
lst.setListData(SubmenuConstructedUtil.oa2sa(themeNames.toArray()));
}
}
}

View File

@@ -0,0 +1,12 @@
package forge.gui.home.constructed;
/**
* TODO: Write javadoc for this type.
*
*/
public enum ESubmenuConstructedTypes { /** */
COLORS, /** */
THEMES, /** */
CUSTOM, /** */
QUESTEVENTS
}

View File

@@ -0,0 +1,387 @@
package forge.gui.home.constructed;
import java.awt.Toolkit;
import java.awt.datatransfer.StringSelection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import net.miginfocom.swing.MigLayout;
import forge.AllZone;
import forge.CardList;
import forge.Command;
import forge.Player;
import forge.PlayerType;
import forge.Singletons;
import forge.deck.Deck;
import forge.deck.generate.Generate2ColorDeck;
import forge.deck.generate.Generate3ColorDeck;
import forge.deck.generate.Generate5ColorDeck;
import forge.deck.generate.GenerateThemeDeck;
import forge.game.GameNew;
import forge.item.CardPrinted;
import forge.properties.ForgePreferences.FPref;
import forge.view.toolbox.FCheckBox;
import forge.view.toolbox.FLabel;
import forge.view.toolbox.FList;
import forge.view.toolbox.FOverlay;
import forge.view.toolbox.FPanel;
import forge.view.toolbox.FScrollPane;
import forge.view.toolbox.FSkin;
/**
* Utilities for the constructed submenu, all over the MVC spectrum.
*
*/
public class SubmenuConstructedUtil {
/**
* @param pnlParent &emsp; JPanel, where to put the finished lists
* @param btnStart &emsp; Start button for the panel
* @return List<JList> completed collection of JLists
*/
public static List<JList> populateConstructedSubmenuView(final JPanel pnlParent, final JButton btnStart) {
final List<JList> generatedJLists = new ArrayList<JList>();
final String constraintsLst = "w 41%!, h 320px, gap 6% 0 4% 2%";
final String constraintsBtn = "newline, ax center, gap 6% 0 0 0, span 2 1";
final List<Player> players = AllZone.getPlayersInGame();
pnlParent.removeAll();
pnlParent.setOpaque(false);
pnlParent.setLayout(new MigLayout("insets 0, gap 0"));
final List<CustomSelectPanel> storage = new ArrayList<CustomSelectPanel>();
for (int i = 0; i < players.size(); i++) {
storage.add(new CustomSelectPanel(players.get(i)));
generatedJLists.add(storage.get(storage.size() - 1).getList());
if (i % 2 == 1) {
pnlParent.add(storage.get(storage.size() - 1), constraintsLst + ", wrap");
}
else {
pnlParent.add(storage.get(storage.size() - 1), constraintsLst);
}
}
storage.clear();
if (pnlParent.getName().equals(ESubmenuConstructedTypes.COLORS.toString())
|| pnlParent.getName() .equals(ESubmenuConstructedTypes.THEMES.toString())) {
final JPanel pnlOptions = new JPanel();
pnlOptions.setOpaque(false);
SubmenuConstructedUtil.populateOptionsPanel(pnlOptions);
pnlParent.add(pnlOptions, "span 2 1, align center, gap 6% 0 0 0");
}
pnlParent.add(btnStart, constraintsBtn);
return generatedJLists;
}
/** Shows decklist dialog for a given deck.
* @param d0 &emsp; {@link forge.deck.Deck} */
public static void showDecklist(final Deck d0) {
final HashMap<String, Integer> deckMap = new HashMap<String, Integer>();
for (final Entry<CardPrinted, Integer> s : d0.getMain()) {
deckMap.put(s.getKey().getName(), s.getValue());
}
final String nl = System.getProperty("line.separator");
final StringBuilder deckList = new StringBuilder();
final String dName = d0.getName();
deckList.append(dName == null ? "" : dName + nl + nl);
final ArrayList<String> dmKeys = new ArrayList<String>();
for (final String s : deckMap.keySet()) {
dmKeys.add(s);
}
Collections.sort(dmKeys);
for (final String s : dmKeys) {
deckList.append(deckMap.get(s) + " x " + s + nl);
}
final StringBuilder msg = new StringBuilder();
if (deckMap.keySet().size() <= 32) {
msg.append(deckList.toString() + nl);
} else {
msg.append("Decklist too long for dialog." + nl + nl);
}
msg.append("Copy Decklist to Clipboard?");
// Output
final int rcMsg = JOptionPane.showConfirmDialog(null, msg, "Decklist", JOptionPane.OK_CANCEL_OPTION);
if (rcMsg == JOptionPane.OK_OPTION) {
final StringSelection ss = new StringSelection(deckList.toString());
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
}
} // End showDecklist
/**
* Exhaustively converts object array to string array.
* Probably a much easier way to do this.
* And, there must be a better place for this.
*
* @param o0 &emsp; Object[]
* @return String[]
*/
public static String[] oa2sa(final Object[] o0) {
final String[] output = new String[o0.length];
for (int i = 0; i < o0.length; i++) {
output[i] = o0[i].toString();
}
return output;
}
/** @param lst0 &emsp; {@link javax.swing.JList} */
public static void randomSelect(final JList lst0) {
if (lst0.getName().equals(ESubmenuConstructedTypes.COLORS.toString())) {
// Color select algorithm
int x = -1;
// HACK because 1 and 4 color decks are not supported yet. :(
while (x == -1 || x == 1 || x == 4) {
x = (int) Math.ceil(Math.random() * 5);
}
final int colorCount = x;
final int maxCount = lst0.getModel().getSize();
int[] selectedIndices = new int[colorCount];
x = -1;
for (int i = 0; i < colorCount; i++) {
while (x == -1) {
x = (int) Math.floor(Math.random() * maxCount);
if (Arrays.asList(selectedIndices).contains(x)) { x = -1; }
else { selectedIndices[i] = x; }
}
x = -1;
}
lst0.setSelectedIndices(selectedIndices);
selectedIndices = null;
}
else {
final int size = lst0.getModel().getSize();
if (size > 0) {
final Random r = new Random();
final int i = r.nextInt(size);
lst0.setSelectedIndex(i);
lst0.ensureIndexIsVisible(lst0.getSelectedIndex());
}
}
}
/** Generates deck from current list selection(s). */
private static Deck generateDeck(final JList lst0, final PlayerType player0) {
CardList cards = null;
final String[] selection = oa2sa(lst0.getSelectedValuesList().toArray());
final Deck deck;
// Color deck
if (lst0.getName().equals("lstColor") && colorCheck(selection)) {
final Map<String, String> colorVals = new HashMap<String, String>();
colorVals.put("Random 1", "AI");
colorVals.put("Random 2", "AI");
colorVals.put("Random 3", "AI");
colorVals.put("Random 4", "AI");
colorVals.put("Black", "black");
colorVals.put("Blue", "blue");
colorVals.put("Green", "green");
colorVals.put("Red", "red");
colorVals.put("White", "white");
// Replace "random" with "AI" for deck generation code
for (int i = 0; i < selection.length; i++) {
selection[i] = colorVals.get(selection[i]);
}
// 2, 3, and 5 colors.
if (selection.length == 2) {
final Generate2ColorDeck gen = new Generate2ColorDeck(
selection[0], selection[1]);
cards = gen.get2ColorDeck(60, player0);
}
else if (selection.length == 3) {
final Generate3ColorDeck gen = new Generate3ColorDeck(
selection[0], selection[1], selection[2]);
cards = gen.get3ColorDeck(60, player0);
}
else {
final Generate5ColorDeck gen = new Generate5ColorDeck(
selection[0], selection[1], selection[2], selection[3], selection[4]);
cards = gen.get5ColorDeck(60, player0);
}
// After generating card lists, build deck.
deck = new Deck();
deck.getMain().add(cards);
colorVals.clear();
}
// Theme deck
else if (lst0.getName().equals(ESubmenuConstructedTypes.THEMES.toString())) {
final GenerateThemeDeck gen = new GenerateThemeDeck();
cards = gen.getThemeDeck(selection[0], 60);
// After generating card lists, build deck.
deck = new Deck();
deck.getMain().add(cards);
}
else if (lst0.getName().equals(ESubmenuConstructedTypes.QUESTEVENTS.toString())) {
deck = Singletons.getModel().getQuestEventManager().getEvent(selection[0]).getEventDeck();
}
// Custom deck
else {
deck = Singletons.getModel().getDecks().getConstructed().get(selection[0]);
}
return deck;
}
@SuppressWarnings("serial")
private static void populateOptionsPanel(final JPanel pnlParent) {
final FCheckBox cbSingletons = new FCheckBox("Singleton Mode");
final FCheckBox cbArtifacts = new FCheckBox("Remove Artifacts");
final FCheckBox cbRemoveSmall = new FCheckBox("Remove Small Creatures");
final String constraints = "ax center, gap 0 0 0 5px";
cbSingletons.setSelected(Singletons.getModel()
.getPreferences().getPrefBoolean(FPref.DECKGEN_SINGLETONS));
cbArtifacts.setSelected(Singletons.getModel()
.getPreferences().getPrefBoolean(FPref.DECKGEN_ARTIFACTS));
cbRemoveSmall.setSelected(Singletons.getModel()
.getPreferences().getPrefBoolean(FPref.DECKGEN_NOSMALL));
// Event handling must occur here, unfortunately.
cbSingletons.setCommand(new Command() {
@Override
public void execute() {
Singletons.getModel().getPreferences().setPref(
FPref.DECKGEN_SINGLETONS, String.valueOf(cbSingletons.isSelected()));
}
});
cbArtifacts.setCommand(new Command() {
@Override
public void execute() {
Singletons.getModel().getPreferences().setPref(
FPref.DECKGEN_ARTIFACTS, String.valueOf(cbArtifacts.isSelected()));
}
});
cbRemoveSmall.setCommand(new Command() {
@Override
public void execute() {
Singletons.getModel().getPreferences().setPref(
FPref.DECKGEN_NOSMALL, String.valueOf(cbRemoveSmall.isSelected()));
}
});
pnlParent.removeAll();
pnlParent.setLayout(new MigLayout("inset 0, gap 0, wrap"));
pnlParent.add(cbSingletons, constraints);
pnlParent.add(cbArtifacts, constraints);
pnlParent.add(cbRemoveSmall, constraints);
}
/**
* Checks lengths of selected values for color lists
* to see if a deck generator exists. Alert and visual reminder if fail.
*
* @param colors0 &emsp; String[] of color names
* @return boolean
*/
private static boolean colorCheck(final String[] colors0) {
boolean result = true;
if (colors0.length == 1) {
JOptionPane.showMessageDialog(null,
"Sorry, single color generated decks aren't supported yet."
+ "\n\rPlease choose at least one more color for this deck.",
"Generate deck: 1 color", JOptionPane.ERROR_MESSAGE);
result = false;
}
else if (colors0.length == 4) {
JOptionPane.showMessageDialog(null,
"Sorry, four color generated decks aren't supported yet."
+ "\n\rPlease use 2, 3, or 5 colors for this deck.",
"Generate deck: 4 colors", JOptionPane.ERROR_MESSAGE);
result = false;
}
else if (colors0.length > 5) {
JOptionPane.showMessageDialog(null,
"Generate deck: maximum five colors!",
"Generate deck: too many colors", JOptionPane.ERROR_MESSAGE);
result = false;
}
return result;
}
/** @param lists0 &emsp; {@link java.util.List}<{@link javax.swing.JList}> */
public static void startGame(final List<JList> lists0) {
final Deck deckHuman = generateDeck(lists0.get(0), PlayerType.HUMAN);
final Deck deckAI = generateDeck(lists0.get(1), PlayerType.COMPUTER);
final FOverlay overlay = Singletons.getView().getOverlay();
overlay.setLayout(new MigLayout("insets 0, gap 0, align center"));
final FPanel pnl = new FPanel();
pnl.setLayout(new MigLayout("insets 0, gap 0, ax center, wrap"));
pnl.setBackground(FSkin.getColor(FSkin.Colors.CLR_ACTIVE));
pnl.add(new FLabel.Builder().icon(FSkin.getIcon(FSkin.ForgeIcons.ICO_LOGO)).build(),
"h 200px!, align center");
pnl.add(new FLabel.Builder().text("Loading new game...")
.fontScaleAuto(false).fontSize(22).build(), "h 40px!, align center");
overlay.add(pnl, "h 300px!, w 400px!");
overlay.showOverlay();
GameNew.newGame(deckHuman, deckAI);
overlay.hideOverlay();
}
@SuppressWarnings("serial")
private static class CustomSelectPanel extends JPanel {
private final FList lst;
private final Command cmd = new Command() { @Override
public void execute() { randomSelect(lst); } };
public CustomSelectPanel(final Player p0) {
lst = new FList();
lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
this.setOpaque(false);
this.setLayout(new MigLayout("insets 0, gap 0, wrap"));
this.add(new FLabel.Builder().text(p0.getName()).fontSize(14)
.fontScaleAuto(false).build(),
"w 100%!, h 25px!, gap 0 0 0 8px");
this.add(new FScrollPane(lst), "w 100%!, pushy, growy");
this.add(new FLabel.Builder().text("Random").fontSize(14).opaque(true)
.cmdClick(cmd).hoverable(true).fontScaleAuto(false).build(),
"w 100%!, h 25px!, gap 0 0 8px 0");
}
public FList getList() {
return lst;
}
}
}

View File

@@ -0,0 +1,70 @@
package forge.gui.home.constructed;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListSelectionModel;
import forge.gui.home.EMenuGroup;
import forge.gui.home.IVSubmenu;
import forge.view.home.StartButton;
/**
* Singleton instance of "Colors" submenu in "Constructed" group.
*
*/
public enum VSubmenuColors implements IVSubmenu {
/** */
SINGLETON_INSTANCE;
/** */
private final JPanel pnl = new JPanel();
private final StartButton btnStart = new StartButton();
private final List<JList> allLists = new ArrayList<JList>();
/* (non-Javadoc)
* @see forge.view.home.IViewSubmenu#populate()
*/
@Override
public void populate() {
pnl.setName(ESubmenuConstructedTypes.COLORS.toString());
final List<JList> generatedLists =
SubmenuConstructedUtil.populateConstructedSubmenuView(pnl, btnStart);
allLists.clear();
for (JList lst : generatedLists) {
lst.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
lst.setName(ESubmenuConstructedTypes.COLORS.toString());
allLists.add(lst);
}
}
/* (non-Javadoc)
* @see forge.view.home.IViewSubmenu#getGroup()
*/
@Override
public EMenuGroup getGroup() {
return null;
}
/* (non-Javadoc)
* @see forge.view.home.IViewSubmenu#getPanel()
*/
@Override
public JPanel getPanel() {
return pnl;
}
/** @return {@link javax.swing.JButton} */
public JButton getBtnStart() {
return this.btnStart;
}
/** @return {@link java.util.List}<{@link javax.swing.JList}> */
public List<JList> getLists() {
return allLists;
}
}

View File

@@ -0,0 +1,68 @@
package forge.gui.home.constructed;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import forge.gui.home.EMenuGroup;
import forge.gui.home.IVSubmenu;
import forge.view.home.StartButton;
/**
* Singleton instance of "Colors" submenu in "Constructed" group.
*
*/
public enum VSubmenuCustom implements IVSubmenu {
/** */
SINGLETON_INSTANCE;
/** */
private final JPanel pnl = new JPanel();
private final StartButton btnStart = new StartButton();
private final List<JList> allLists = new ArrayList<JList>();
/* (non-Javadoc)
* @see forge.view.home.IViewSubmenu#populate()
*/
@Override
public void populate() {
pnl.setName(ESubmenuConstructedTypes.CUSTOM.toString());
final List<JList> generatedLists =
SubmenuConstructedUtil.populateConstructedSubmenuView(pnl, btnStart);
allLists.clear();
for (JList lst : generatedLists) {
lst.setName(ESubmenuConstructedTypes.CUSTOM.toString());
allLists.add(lst);
}
}
/* (non-Javadoc)
* @see forge.view.home.IViewSubmenu#getGroup()
*/
@Override
public EMenuGroup getGroup() {
return null;
}
/* (non-Javadoc)
* @see forge.view.home.IViewSubmenu#getPanel()
*/
@Override
public JPanel getPanel() {
return pnl;
}
/** @return {@link javax.swing.JButton} */
public JButton getBtnStart() {
return this.btnStart;
}
/** @return {@link java.util.List}<{@link javax.swing.JList}> */
public List<JList> getLists() {
return allLists;
}
}

View File

@@ -0,0 +1,68 @@
package forge.gui.home.constructed;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import forge.gui.home.EMenuGroup;
import forge.gui.home.IVSubmenu;
import forge.view.home.StartButton;
/**
* Singleton instance of "Colors" submenu in "Constructed" group.
*
*/
public enum VSubmenuQuestEvents implements IVSubmenu {
/** */
SINGLETON_INSTANCE;
/** */
private final JPanel pnl = new JPanel();
private final StartButton btnStart = new StartButton();
private final List<JList> allLists = new ArrayList<JList>();
/* (non-Javadoc)
* @see forge.view.home.IViewSubmenu#populate()
*/
@Override
public void populate() {
pnl.setName(ESubmenuConstructedTypes.QUESTEVENTS.toString());
final List<JList> generatedLists =
SubmenuConstructedUtil.populateConstructedSubmenuView(pnl, btnStart);
allLists.clear();
for (final JList lst : generatedLists) {
lst.setName(ESubmenuConstructedTypes.QUESTEVENTS.toString());
allLists.add(lst);
}
}
/* (non-Javadoc)
* @see forge.view.home.IViewSubmenu#getGroup()
*/
@Override
public EMenuGroup getGroup() {
return null;
}
/* (non-Javadoc)
* @see forge.view.home.IViewSubmenu#getPanel()
*/
@Override
public JPanel getPanel() {
return pnl;
}
/** @return {@link javax.swing.JButton} */
public JButton getBtnStart() {
return this.btnStart;
}
/** @return {@link java.util.List}<{@link javax.swing.JList}> */
public List<JList> getLists() {
return allLists;
}
}

View File

@@ -0,0 +1,69 @@
package forge.gui.home.constructed;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JPanel;
import forge.gui.home.EMenuGroup;
import forge.gui.home.IVSubmenu;
import forge.view.home.StartButton;
/**
* Singleton instance of "Colors" submenu in "Constructed" group.
*
*/
public enum VSubmenuThemes implements IVSubmenu {
/** */
SINGLETON_INSTANCE;
/** */
private final JPanel pnl = new JPanel();
private final StartButton btnStart = new StartButton();
private final List<JList> allLists = new ArrayList<JList>();
/* (non-Javadoc)
* @see forge.view.home.IViewSubmenu#populate()
*/
@Override
public void populate() {
pnl.setName(ESubmenuConstructedTypes.THEMES.toString());
final List<JList> generatedLists =
SubmenuConstructedUtil.populateConstructedSubmenuView(pnl, btnStart);
allLists.clear();
for (JList lst : generatedLists) {
lst.setName(ESubmenuConstructedTypes.THEMES.toString());
allLists.add(lst);
}
}
/* (non-Javadoc)
* @see forge.view.home.IViewSubmenu#getGroup()
*/
@Override
public EMenuGroup getGroup() {
return null;
}
/* (non-Javadoc)
* @see forge.view.home.IViewSubmenu#getPanel()
*/
@Override
public JPanel getPanel() {
return pnl;
}
/** @return {@link javax.swing.JButton} */
public JButton getBtnStart() {
return this.btnStart;
}
/** @return {@link java.util.List}<{@link javax.swing.JList}> */
public List<JList> getLists() {
return allLists;
}
}