finished replacing inplace deck chooser with component

This commit is contained in:
Maxmtg
2013-05-19 13:33:47 +00:00
parent e3de88856f
commit d1e058c4b2
2 changed files with 11 additions and 214 deletions

View File

@@ -2,20 +2,13 @@ package forge.gui.home.gauntlet;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.swing.JList;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import org.apache.commons.lang3.ArrayUtils;
import forge.Command;
import forge.FThreads;
import forge.Singletons;
@@ -23,7 +16,6 @@ import forge.control.Lobby;
import forge.deck.Deck;
import forge.deck.DeckgenUtil;
import forge.deck.DeckgenUtil.DeckTypes;
import forge.deck.generate.GenerateThemeDeck;
import forge.game.GameType;
import forge.game.MatchController;
import forge.game.MatchStartHelper;
@@ -33,9 +25,6 @@ import forge.gauntlet.GauntletIO;
import forge.gui.SOverlayUtils;
import forge.gui.framework.ICDoc;
import forge.model.FModel;
import forge.quest.QuestController;
import forge.quest.QuestEvent;
import forge.util.storage.IStorage;
/**
* Controls the "quick gauntlet" submenu in the home UI.
@@ -49,31 +38,6 @@ public enum CSubmenuGauntletQuick implements ICDoc {
/** */
SINGLETON_INSTANCE;
private final MouseAdapter madDecklist = new MouseAdapter() {
@Override
public void mouseClicked(final MouseEvent e) {
if (e.getClickCount() == 2) {
if (view.getRadColorDecks().isSelected()) { return; }
if (view.getRadThemeDecks().isSelected()) { return; }
DeckgenUtil.showDecklist(((JList) e.getSource())); }
}
};
private final Command cmdRandomRegular = new Command() {
@Override
public void run() {
DeckgenUtil.randomSelect(view.getLstDecks());
}
};
private final Command cmdRandomColors = new Command() {
@Override
public void run() {
view.getLstDecks().setSelectedIndices(DeckgenUtil.randomSelectColors());
}
};
private final ActionListener actStartGame = new ActionListener() { @Override
public void actionPerformed(ActionEvent arg0) { startGame(); } };
@@ -94,48 +58,14 @@ public enum CSubmenuGauntletQuick implements ICDoc {
*/
@Override
public void initialize() {
final ActionListener deckUpdate = new ActionListener() {
@Override
public void actionPerformed(final ActionEvent arg0) {
updateDecks(); }
};
view.getBtnStart().addActionListener(actStartGame);
view.getLstDecks().addMouseListener(madDecklist);
// Deck list and radio button event handling
view.getRadUserDecks().setSelected(true);
view.getRadQuestDecks().addActionListener(deckUpdate);
view.getRadColorDecks().addActionListener(deckUpdate);
view.getRadThemeDecks().addActionListener(deckUpdate);
view.getRadUserDecks().addActionListener(deckUpdate);
updateDecks();
updateData();
view.getGauntletLister().setSelectedIndex(0);
view.getLstDecks().initialize();
}
/** Handles all control for "custom" radio button click. */
private void updateDecks() {
if (view.getRadUserDecks().isSelected()) {
view.getBtnRandom().setCommand(cmdRandomRegular);
updateUserDecks();
}
else if (view.getRadQuestDecks().isSelected()) {
view.getBtnRandom().setCommand(cmdRandomRegular);
updateQuestDecks();
}
else if (view.getRadThemeDecks().isSelected()) {
view.getBtnRandom().setCommand(cmdRandomRegular);
updateThemeDecks();
}
else if (view.getRadColorDecks().isSelected()) {
view.getBtnRandom().setCommand(cmdRandomColors);
updateColorDecks();
}
}
private void updateData() {
final File[] files = GauntletIO.getGauntletFilesUnlocked();
@@ -148,64 +78,6 @@ public enum CSubmenuGauntletQuick implements ICDoc {
view.getGauntletLister().setGauntlets(data);
}
private void updateUserDecks() {
final List<String> customNames = new ArrayList<String>();
final IStorage<Deck> allDecks = Singletons.getModel().getDecks().getConstructed();
for (final Deck d : allDecks) { customNames.add(d.getName()); }
view.getLstDecks().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
view.getLstDecks().setListData(customNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
view.getLstDecks().setName(DeckTypes.CUSTOM.toString());
// Init first in list
view.getLstDecks().setSelectedIndex(0);
}
/** Handles all control for "quest event" radio button click. */
private void updateQuestDecks() {
final List<String> eventNames = new ArrayList<String>();
QuestController quest = Singletons.getModel().getQuest();
for (final QuestEvent e : quest.getDuelsManager().getAllDuels()) {
eventNames.add(e.getEventDeck().getName());
}
for (final QuestEvent e : quest.getChallenges()) {
eventNames.add(e.getEventDeck().getName());
}
view.getLstDecks().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
view.getLstDecks().setListData(eventNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
view.getLstDecks().setName(DeckTypes.QUESTEVENTS.toString());
// Init first in list
view.getLstDecks().setSelectedIndex(0);
}
/** Handles all control for "themes" radio button click. */
private void updateThemeDecks() {
final List<String> themeNames = new ArrayList<String>();
for (final String s : GenerateThemeDeck.getThemeNames()) { themeNames.add(s); }
view.getLstDecks().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
view.getLstDecks().setListData(themeNames.toArray(ArrayUtils.EMPTY_STRING_ARRAY));
view.getLstDecks().setName(DeckTypes.THEMES.toString());
// Init first in list
view.getLstDecks().setSelectedIndex(0);
}
/** Handles all control for "colors" radio button click. */
private void updateColorDecks() {
view.getLstDecks().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
view.getLstDecks().setListData(new String[] {"Random 1", "Random 2", "Random 3",
"Random 4", "Black", "Blue", "Green", "Red", "White"});
view.getLstDecks().setName(DeckTypes.COLORS.toString());
// Init basic two color deck
view.getLstDecks().setSelectedIndices(new int[]{0, 1});
}
private void startGame() {
// Start game overlay
SwingUtilities.invokeLater(new Runnable() {
@@ -226,23 +98,7 @@ public enum CSubmenuGauntletQuick implements ICDoc {
FModel.SINGLETON_INSTANCE.getGauntletData().setName(GauntletIO.PREFIX_QUICK + num);
// Pull user deck
final Deck userDeck;
final String[] selection = Arrays.asList(
view.getLstDecks().getSelectedValues()).toArray(new String[0]);
if (view.getRadColorDecks().isSelected()) {
if (!DeckgenUtil.colorCheck(selection)) { return; }
userDeck = DeckgenUtil.buildColorDeck(selection, PlayerType.HUMAN);
}
else if (view.getRadQuestDecks().isSelected()) {
userDeck = DeckgenUtil.buildQuestDeck(selection);
}
else if (view.getRadThemeDecks().isSelected()) {
userDeck = DeckgenUtil.buildThemeDeck(selection);
}
else {
userDeck = DeckgenUtil.getConstructedDeck(selection);
}
final Deck userDeck = view.getLstDecks().getDeck().getOriginalDeck();
// Generate gauntlet decks
final int numOpponents = view.getSliOpponents().getValue();

View File

@@ -2,19 +2,16 @@ package forge.gui.home.gauntlet;
import java.awt.Font;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingConstants;
import net.miginfocom.swing.MigLayout;
import forge.game.player.PlayerType;
import forge.gui.framework.DragCell;
import forge.gui.framework.DragTab;
import forge.gui.framework.EDocID;
@@ -23,11 +20,9 @@ import forge.gui.home.IVSubmenu;
import forge.gui.home.StartButton;
import forge.gui.home.VHomeUI;
import forge.gui.toolbox.FCheckBox;
import forge.gui.toolbox.FDeckChooser;
import forge.gui.toolbox.FLabel;
import forge.gui.toolbox.FList;
import forge.gui.toolbox.FPanel;
import forge.gui.toolbox.FRadioButton;
import forge.gui.toolbox.FScrollPane;
import forge.gui.toolbox.FSkin;
/**
@@ -46,7 +41,6 @@ public enum VSubmenuGauntletQuick implements IVSubmenu<CSubmenuGauntletQuick> {
// Other fields
private final FPanel pnlOptions = new FPanel(new MigLayout("insets 0, gap 0, wrap"));
private final FPanel pnlDecks = new FPanel();
private final FLabel lblTitle = new FLabel.Builder()
.text("Quick Gauntlet Builder").fontAlign(SwingConstants.CENTER)
.opaque(true).fontSize(16).build();
@@ -63,24 +57,14 @@ public enum VSubmenuGauntletQuick implements IVSubmenu<CSubmenuGauntletQuick> {
private final JCheckBox boxColorDecks = new FCheckBox("Fully random color Decks");
private final JCheckBox boxThemeDecks = new FCheckBox("Semi-random theme Decks");
private final JRadioButton radUserDecks = new FRadioButton("Custom user decks");
private final JRadioButton radQuestDecks = new FRadioButton("Quest Events");
private final JRadioButton radRandomColor = new FRadioButton("Fully random colors");
private final JRadioButton radThemeDecks = new FRadioButton("Semi-random themes");
private final JList lstDecks = new FList();
private final FDeckChooser lstDecks = new FDeckChooser("Deck", PlayerType.HUMAN);
private final QuickGauntletLister gauntletList = new QuickGauntletLister();
private final JLabel lblOptions = new FLabel.Builder().fontSize(16)
.fontStyle(Font.BOLD).text("OPTIONS").fontAlign(SwingConstants.CENTER).build();
private final JLabel lblDeck = new FLabel.Builder().fontSize(16)
.fontStyle(Font.BOLD).text("DECK").fontAlign(SwingConstants.CENTER).build();
private final FLabel btnRandom = new FLabel.Builder()
.text("Random").hoverable(true).build();
private final JScrollPane scrDecks = new FScrollPane(lstDecks);
private final JScrollPane scrLoad = new JScrollPane(gauntletList,
ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
@@ -105,6 +89,7 @@ public enum VSubmenuGauntletQuick implements IVSubmenu<CSubmenuGauntletQuick> {
boxThemeDecks.setSelected(true);
boxColorDecks.setSelected(true);
sliOpponents.setMajorTickSpacing(5);
sliOpponents.setMinorTickSpacing(0);
sliOpponents.setPaintTicks(false);
@@ -114,21 +99,12 @@ public enum VSubmenuGauntletQuick implements IVSubmenu<CSubmenuGauntletQuick> {
sliOpponents.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT));
sliOpponents.setFont(FSkin.getFont(12));
btnRandom.setOpaque(true);
scrLoad.setOpaque(false);
scrLoad.getViewport().setOpaque(false);
scrLoad.setBorder(null);
// Radio button grouping
final ButtonGroup grpRadDecks = new ButtonGroup();
grpRadDecks.add(radUserDecks);
grpRadDecks.add(radQuestDecks);
grpRadDecks.add(radRandomColor);
grpRadDecks.add(radThemeDecks);
lstDecks.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
pnlOptions.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
pnlOptions.add(lblOptions, "h 30px!, w 96%!, gap 2% 0 0 5px");
pnlOptions.add(sliOpponents, "h 40px!, w 96%!, gap 2% 0 0 5px, ax center");
@@ -139,17 +115,6 @@ public enum VSubmenuGauntletQuick implements IVSubmenu<CSubmenuGauntletQuick> {
pnlOptions.add(boxQuestDecks, "w 96%!, h 30px!, gap 2% 0 0 5px");
pnlOptions.add(boxThemeDecks, "w 96%!, h 30px!, gap 2% 0 0 5px");
pnlOptions.add(boxColorDecks, "w 96%!, h 30px!, gap 2% 0 0 0");
pnlDecks.setLayout(new MigLayout("insets 0, gap 0, wrap"));
pnlDecks.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
pnlDecks.setCornerDiameter(0);
pnlDecks.add(lblDeck, "h 30px!, w 94%!, gap 1% 0 0 5px, ax center");
pnlDecks.add(radUserDecks, "w 96%!, h 30px!, gap 2% 0 0 5px");
pnlDecks.add(radQuestDecks, "w 96%!, h 30px!, gap 2% 0 0 5px");
pnlDecks.add(radRandomColor, "w 96%!, h 30px!, gap 2% 0 0 5px");
pnlDecks.add(radThemeDecks, "w 96%!, h 30px!, gap 2% 0 0 5px");
pnlDecks.add(btnRandom, "h 30px!, w 200px!, gap 25% 0 0 10px");
pnlDecks.add(scrDecks, "w 94%!, pushy, growy, gap 3% 0 0 10px");
}
/* (non-Javadoc)
@@ -188,15 +153,17 @@ public enum VSubmenuGauntletQuick implements IVSubmenu<CSubmenuGauntletQuick> {
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblDesc, "ax center, gap 0 0 0 5px, span 2");
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lblDecklist, "ax center, gap 0 0 0 15px, span 2");
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlOptions, "w 40%!, gap 1% 1% 0 0, pushy, growy");
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(pnlDecks, "w 57%!, pushy, growy");
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(lstDecks, "w 57%!, pushy, growy");
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().add(btnStart, "w 98%!, ax center, gap 1% 0 20px 20px, span 2");
getLstDecks().populate();
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().repaintSelf();
VHomeUI.SINGLETON_INSTANCE.getPnlDisplay().revalidate();
}
/** @return {@link javax.swing.JList} */
public JList getLstDecks() {
public FDeckChooser getLstDecks() {
return this.lstDecks;
}
@@ -224,37 +191,11 @@ public enum VSubmenuGauntletQuick implements IVSubmenu<CSubmenuGauntletQuick> {
public JCheckBox getBoxThemeDecks() {
return boxThemeDecks;
}
/** @return {@link javax.swing.JRadioButton} */
public JRadioButton getRadUserDecks() {
return this.radUserDecks;
}
/** @return {@link javax.swing.JRadioButton} */
public JRadioButton getRadQuestDecks() {
return this.radQuestDecks;
}
/** @return {@link javax.swing.JRadioButton} */
public JRadioButton getRadColorDecks() {
return this.radRandomColor;
}
/** @return {@link javax.swing.JRadioButton} */
public JRadioButton getRadThemeDecks() {
return this.radThemeDecks;
}
/** @return {@link javax.swing.JSlider} */
public JSlider getSliOpponents() {
return this.sliOpponents;
}
/** @return {@link forge.gui.toolbox.FLabel} */
public FLabel getBtnRandom() {
return this.btnRandom;
}
/** @return {@link javax.swing.JButton} */
public JButton getBtnStart() {
return this.btnStart;