diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java b/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java index 7f111c0ad23..f127ee2bdb3 100644 --- a/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java +++ b/src/main/java/forge/card/abilityfactory/AbilityFactoryClash.java @@ -766,9 +766,9 @@ public final class AbilityFactoryClash { // first, separate the cards into piles if (separator.isHuman()) { - final List l = GuiUtils.chooseNoneOrMany("Put into pile 1 (multi-select)", pool.toArray()); - for (final Card c : l) { - pile1.add(c); + final List firstPile = GuiUtils.getOrderChoices("Place into two piles", "Pile 1", false, (Object[])pool.toArray()); + for (final Object o : firstPile) { + pile1.add((Card)o); } for (final Card c : pool) { diff --git a/src/main/java/forge/game/zone/MagicStack.java b/src/main/java/forge/game/zone/MagicStack.java index 23e62d137cd..e9a849418a4 100644 --- a/src/main/java/forge/game/zone/MagicStack.java +++ b/src/main/java/forge/game/zone/MagicStack.java @@ -1449,7 +1449,7 @@ public class MagicStack extends MyObservable { } else{ // Otherwise, gave a dual list form to create instead of needing to do it one at a time - List orderedSAs = GuiUtils.getOrderChoices("Select order for Simultaneous Spell Abilities", "Resolve first", activePlayerSAs.toArray()); + List orderedSAs = GuiUtils.getOrderChoices("Select order for Simultaneous Spell Abilities", "Resolve first", true, activePlayerSAs.toArray()); int size = orderedSAs.size(); for(int i = size-1; i >= 0; i--){ SpellAbility next = (SpellAbility)orderedSAs.get(i); diff --git a/src/main/java/forge/gui/DualListBox.java b/src/main/java/forge/gui/DualListBox.java index b756d770306..23749d045cf 100644 --- a/src/main/java/forge/gui/DualListBox.java +++ b/src/main/java/forge/gui/DualListBox.java @@ -22,6 +22,12 @@ import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +import forge.Card; +import forge.card.spellability.SpellAbility; +import forge.gui.match.CMatchUI; @SuppressWarnings("serial") class UnsortedListModel extends AbstractListModel { @@ -109,9 +115,9 @@ public class DualListBox extends JPanel { private boolean selectAll = true; public DualListBox(boolean selectAll, String label) { + this.selectAll = selectAll; initScreen(); orderedLabel.setText(label); - this.selectAll = selectAll; } public void clearSourceListModel() { @@ -180,6 +186,26 @@ public class DualListBox extends JPanel { return destListModel.model; } + private static void addCardViewListener(final JList list) { + list.addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(final ListSelectionEvent ev) { + Card card = null; + Object obj = list.getSelectedValue(); + if (obj instanceof Card) { + card = (Card) obj; + } + else if (obj instanceof SpellAbility) { + card = ((SpellAbility)obj).getSourceCard(); + } + + if (card != null) { + CMatchUI.SINGLETON_INSTANCE.setCard(card); + } + } + }); + } + private void initScreen() { setPreferredSize(new Dimension(650, 300)); setLayout(new GridLayout(0, 3)); @@ -230,6 +256,9 @@ public class DualListBox extends JPanel { add(leftPanel); add(centerPanel); add(rightPanel); + + addCardViewListener(sourceList); + addCardViewListener(destList); } private class AddListener implements ActionListener { diff --git a/src/main/java/forge/gui/GuiUtils.java b/src/main/java/forge/gui/GuiUtils.java index 461be9ebb07..109871b3733 100644 --- a/src/main/java/forge/gui/GuiUtils.java +++ b/src/main/java/forge/gui/GuiUtils.java @@ -357,10 +357,10 @@ public final class GuiUtils { return c.getSelectedValues(); } // getChoice() - public static List getOrderChoices(final String title, final String top, final Object... choices) { + public static List getOrderChoices(final String title, final String top, boolean selectAll, final Object... choices) { // An input box for handling the order of choices. final JFrame frame = new JFrame(); - DualListBox dual = new DualListBox(true, top); + DualListBox dual = new DualListBox(selectAll, top); dual.addSourceElements(choices); frame.setLayout(new BorderLayout());