From d1e058c4b2004b89744df9d8806a297e799c9fcb Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Sun, 19 May 2013 13:33:47 +0000 Subject: [PATCH] finished replacing inplace deck chooser with component --- .../home/gauntlet/CSubmenuGauntletQuick.java | 148 +----------------- .../home/gauntlet/VSubmenuGauntletQuick.java | 77 ++------- 2 files changed, 11 insertions(+), 214 deletions(-) diff --git a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java index ddee6d958e0..366b9e5652c 100644 --- a/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java +++ b/src/main/java/forge/gui/home/gauntlet/CSubmenuGauntletQuick.java @@ -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 customNames = new ArrayList(); - final IStorage 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 eventNames = new ArrayList(); - 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 themeNames = new ArrayList(); - 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(); diff --git a/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletQuick.java b/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletQuick.java index d4aa1e90d49..b8f34ecfb23 100644 --- a/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletQuick.java +++ b/src/main/java/forge/gui/home/gauntlet/VSubmenuGauntletQuick.java @@ -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 { // 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 { 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 { boxThemeDecks.setSelected(true); boxColorDecks.setSelected(true); + sliOpponents.setMajorTickSpacing(5); sliOpponents.setMinorTickSpacing(0); sliOpponents.setPaintTicks(false); @@ -114,21 +99,12 @@ public enum VSubmenuGauntletQuick implements IVSubmenu { 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 { 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 { 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 { 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;