diff --git a/.gitattributes b/.gitattributes index 3bd1d5f07fd..0b2263bc5f2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12851,6 +12851,7 @@ src/main/java/forge/control/input/InputPayManaCostUtil.java svneol=native#text/p src/main/java/forge/control/input/InputPayManaX.java -text src/main/java/forge/control/input/InputPayReturnCost.java -text src/main/java/forge/control/input/InputPaySacCost.java -text +src/main/java/forge/control/input/InputSelectManyCards.java -text src/main/java/forge/control/input/package-info.java svneol=native#text/plain src/main/java/forge/control/package-info.java -text src/main/java/forge/deck/CardCollections.java -text diff --git a/src/main/java/forge/Action.java b/src/main/java/forge/Action.java index 6b41aec3974..6e3120f1e67 100644 --- a/src/main/java/forge/Action.java +++ b/src/main/java/forge/Action.java @@ -2,13 +2,13 @@ package forge; /** *
- * Command interface. + * Command interface, just like Guava Function but return type is void. *
* * @author Forge * @version $Id: Command.java 12297 2011-11-28 19:56:47Z jendave $ */ -public interface Action
* execute.
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java
index f3c03b68734..30c8cb94f80 100644
--- a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java
+++ b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java
@@ -5,6 +5,9 @@ import java.util.List;
import javax.swing.JOptionPane;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+
import forge.Card;
import forge.Command;
@@ -16,6 +19,7 @@ import forge.card.spellability.AbilityActivated;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.control.input.Input;
+import forge.control.input.InputSelectManyCards;
import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.PlayerZone;
@@ -24,8 +28,6 @@ import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import forge.gui.match.CMatchUI;
-import forge.view.ButtonUtil;
-
/**
* TODO: Write javadoc for this type.
*
@@ -369,36 +371,19 @@ class CardFactoryArtifacts {
public void resolve() {
// not implemented for compy
if (card.getController().isHuman()) {
- Singletons.getModel().getMatch().getInput().setInput(new Input() {
- private static final long serialVersionUID = -2305549394512889450L;
- private final List
- * inputTargetSpecific.
- *
- * inputTargetSpecific.
- *
diff --git a/src/main/java/forge/control/input/Input.java b/src/main/java/forge/control/input/Input.java
index 38554898947..9d840a0116d 100644
--- a/src/main/java/forge/control/input/Input.java
+++ b/src/main/java/forge/control/input/Input.java
@@ -122,6 +122,6 @@ public abstract class Input implements java.io.Serializable {
* This method is used to mark old descendants of Input
* TODO: Write javadoc for this method.
*/
- public /* abstract */void isClassUpdated(){} //;
+ public /* abstract */ void isClassUpdated() {}//;
}
diff --git a/src/main/java/forge/control/input/InputSelectManyCards.java b/src/main/java/forge/control/input/InputSelectManyCards.java
new file mode 100644
index 00000000000..6babbbc3ee1
--- /dev/null
+++ b/src/main/java/forge/control/input/InputSelectManyCards.java
@@ -0,0 +1,110 @@
+package forge.control.input;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+
+import forge.Card;
+import forge.gui.match.CMatchUI;
+import forge.view.ButtonUtil;
+
+/**
+ * TODO: Write javadoc for this type.
+ *
+ */
+public class InputSelectManyCards extends Input {
+
+ private static final long serialVersionUID = -2305549394512889450L;
+
+ private List, Input> onSelected = new Function
, Input>() {
+ @Override
+ public Input apply(List
, Input> onSelected = new Function
, Input>() {
@Override
- public void showMessage() {
- final List
, Input> onComplete;
+ private final int min;
+ private final int max;
+
+ private String message = "Source-Card-Name - Select %d more card(s)";
+
+ private InputSelectManyCards(int min, int max, final Function
, Input> onDone)
+ {
+ onComplete = onDone;
+ if( min > max ) throw new IllegalArgumentException("Min must not be greater than Max");
+ this.min = min;
+ this.max = max;
+ }
+
+ public InputSelectManyCards(final List
, Input> onDone)
+ {
+ this(min, max, onDone);
+ allowedCards = allowedList;
+ }
+
+ public InputSelectManyCards(final Predicate
, Input> onDone)
+ {
+ this(min, max, onDone);
+ allowedFilter = allowedRule;
+ }
+
+
+ @Override
+ public void showMessage() {
+ String msgToShow = max == Integer.MAX_VALUE ? String.format(message, selected.size()) : String.format(message, max - selected.size());
+ CMatchUI.SINGLETON_INSTANCE.showMessage(msgToShow);
+
+ boolean canCancel = min == 0 && selected.isEmpty();
+ boolean canOk = min <= selected.size();
+
+ if (canOk && canCancel) ButtonUtil.enableAll();
+ if (!canOk && canCancel) ButtonUtil.enableOnlyCancel();
+ if (canOk && !canCancel) ButtonUtil.enableOnlyOK();
+ if (!canOk && !canCancel) ButtonUtil.disableAll();
+ }
+
+ @Override
+ public void selectButtonOK() {
+ this.done();
+ }
+
+ @Override
+ public void selectButtonCancel() {
+ this.stop();
+ }
+
+ @Override
+ public void selectCard(final Card c) {
+ if ( selected.contains(c) ) return;
+ if ( allowedCards != null && !allowedCards.contains(c)) return;
+ if ( allowedFilter != null && !allowedFilter.apply(c)) return;
+
+ this.selected.add(c);
+ this.showMessage();
+
+ if ( selected.size() == max )
+ done();
+ }
+
+ public void done() {
+ Input next = onComplete.apply(selected);
+ if ( null == next )
+ this.stop();
+ else
+ this.stopSetNext(next);
+ }
+
+ @Override
+ public void isClassUpdated() {}
+
+
+
+ public String getMessage() {
+ return message;
+ }
+
+
+ public void setMessage(String message0) {
+ this.message = message0; // TODO: Add 0 to parameter's name.
+ }
+
+}