From d8eb3a5c7ad65bbae8e8a1579b8dfdd567ad9622 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Thu, 16 Jan 2014 06:40:22 +0000 Subject: [PATCH] DeckChooser will notify of their selection change --- .../forge/gui/deckchooser/FDeckChooser.java | 34 +++++++++++++++++++ .../home/sanctioned/CSubmenuConstructed.java | 1 - .../home/sanctioned/VSubmenuConstructed.java | 17 ++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java b/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java index 58268b79f2f..469f14e9c46 100644 --- a/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java +++ b/forge-gui/src/main/java/forge/gui/deckchooser/FDeckChooser.java @@ -13,11 +13,16 @@ import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; import javax.swing.ScrollPaneConstants; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import net.miginfocom.swing.MigLayout; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; + +import com.google.common.base.Function; import forge.Command; import forge.Singletons; @@ -61,6 +66,11 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { private final ForgePreferences prefs = Singletons.getModel().getPreferences(); private FPref stateSetting = null; + + private Function>, Void> onDeckSelected; + public void setChangeListener(Function>, Void> fn) { + onDeckSelected = fn; + } private final MouseAdapter madDecklist = new MouseAdapter() { @Override @@ -72,6 +82,14 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { } } }; + + private final ListSelectionListener selChangeListener = new ListSelectionListener(){ + @Override + public void valueChanged(ListSelectionEvent e) { + if( null != onDeckSelected ) + onDeckSelected.apply(ImmutablePair.of(selectedDeckType, getLstDecks().getSelectedValuesList())); + } + }; public FDeckChooser(final String titleText, boolean forAi, boolean canSwitchType) { setOpaque(false); @@ -103,6 +121,10 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { final String[] listData = new String[] {"Random 1", "Random 2", "Random 3", "Black", "Blue", "Green", "Red", "White"}; lst.setListData(listData); lst.setName(DeckgenUtil.DeckTypes.COLORS.toString()); + + lst.removeListSelectionListener(selChangeListener); + lst.addListSelectionListener(selChangeListener); + lst.removeMouseListener(madDecklist); lst.addMouseListener(madDecklist); @@ -121,6 +143,9 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { final JList lst = getLstDecks(); lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + lst.removeListSelectionListener(selChangeListener); + lst.addListSelectionListener(selChangeListener); + lst.removeMouseListener(madDecklist); lst.addMouseListener(madDecklist); @@ -150,6 +175,9 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { lst.setListData(listData.toArray(ArrayUtils.EMPTY_STRING_ARRAY)); lst.setName(DeckgenUtil.DeckTypes.CUSTOM.toString()); + + lst.removeListSelectionListener(selChangeListener); + lst.addListSelectionListener(selChangeListener); lst.removeMouseListener(madDecklist); lst.addMouseListener(madDecklist); @@ -182,6 +210,9 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { lst.setListData(listData.toArray(ArrayUtils.EMPTY_STRING_ARRAY)); lst.setName(DeckgenUtil.DeckTypes.PRECON.toString()); + + lst.removeListSelectionListener(selChangeListener); + lst.addListSelectionListener(selChangeListener); lst.removeMouseListener(madDecklist); lst.addMouseListener(madDecklist); @@ -212,6 +243,9 @@ public class FDeckChooser extends JPanel implements IDecksComboBoxListener { lst.setListData(listData.toArray(ArrayUtils.EMPTY_STRING_ARRAY)); lst.setName(DeckgenUtil.DeckTypes.QUESTEVENTS.toString()); + + lst.removeListSelectionListener(selChangeListener); + lst.addListSelectionListener(selChangeListener); lst.removeMouseListener(madDecklist); lst.addMouseListener(madDecklist); diff --git a/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java b/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java index 793e56063ab..130c647d5d1 100644 --- a/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java +++ b/forge-gui/src/main/java/forge/gui/home/sanctioned/CSubmenuConstructed.java @@ -14,7 +14,6 @@ import forge.game.GameType; import forge.game.player.RegisteredPlayer; import forge.gui.deckchooser.DecksComboBox.DeckType; import forge.gui.framework.ICDoc; -import forge.gui.home.settings.GamePlayerUtil; import forge.gui.menus.IMenuProvider; import forge.gui.menus.MenuUtil; import forge.gui.toolbox.FOptionPane; diff --git a/forge-gui/src/main/java/forge/gui/home/sanctioned/VSubmenuConstructed.java b/forge-gui/src/main/java/forge/gui/home/sanctioned/VSubmenuConstructed.java index 3ae44526e97..c3b299f60e9 100644 --- a/forge-gui/src/main/java/forge/gui/home/sanctioned/VSubmenuConstructed.java +++ b/forge-gui/src/main/java/forge/gui/home/sanctioned/VSubmenuConstructed.java @@ -26,10 +26,14 @@ import javax.swing.JRadioButton; import net.miginfocom.swing.MigLayout; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.ImmutablePair; + +import com.google.common.base.Function; import forge.Singletons; import forge.game.GameType; import forge.gui.deckchooser.FDeckChooser; +import forge.gui.deckchooser.DecksComboBox.DeckType; import forge.gui.framework.DragCell; import forge.gui.framework.DragTab; import forge.gui.framework.EDocID; @@ -48,6 +52,7 @@ import forge.gui.toolbox.FSkin; import forge.gui.toolbox.FTextField; import forge.properties.ForgePreferences; import forge.properties.ForgePreferences.FPref; +import forge.util.Lang; import forge.util.MyRandom; /** @@ -319,11 +324,23 @@ public enum VSubmenuConstructed implements IVSubmenu { FDeckChooser mainChooser = new FDeckChooser("Main deck:", isPlayerAI(playerIndex)); mainChooser.initialize(); + mainChooser.setChangeListener(new Function>, Void>(){ + @Override public Void apply(ImmutablePair> selection) { + VSubmenuConstructed.this.onDeckClicked(playerIndex, selection.left, selection.right); + return null; + } + }); deckChoosers.add(mainChooser); mainDeckPanel.add(mainChooser, "grow, push, wrap"); deckPanelListMain.add(mainDeckPanel); } + protected void onDeckClicked(int iPlayer, DeckType type, List selectedLines) { + // TODO Auto-generated method stub + String text = type.toString() + ": " + Lang.joinHomogenous(selectedLines); + deckSelectorBtns.get(iPlayer).setText(text); + } + /** Populates the deck panel with the focused player's deck choices. */ private void populateDeckPanel(final boolean firstBuild) { if (!firstBuild) { decksFrame.removeAll(); }