diff --git a/.gitattributes b/.gitattributes
index f701442d7e9..9c5edfe60a1 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -9806,6 +9806,7 @@ src/main/java/forge/gui/deckeditor/DeckEditorQuest.java svneol=native#text/plain
src/main/java/forge/gui/deckeditor/DeckEditorQuestMenu.java svneol=native#text/plain
src/main/java/forge/gui/deckeditor/DeckEditorShop.java svneol=native#text/plain
src/main/java/forge/gui/deckeditor/FilterCheckBoxes.java -text
+src/main/java/forge/gui/deckeditor/FilterNameTypeSetPanel.java -text
src/main/java/forge/gui/deckeditor/GuiFilterCheckBox.java svneol=native#text/plain
src/main/java/forge/gui/deckeditor/ManaCostRenderer.java -text
src/main/java/forge/gui/deckeditor/PresetColumns.java -text
diff --git a/src/main/java/forge/card/CardPrinted.java b/src/main/java/forge/card/CardPrinted.java
index 952360cd014..305a792b6b4 100644
--- a/src/main/java/forge/card/CardPrinted.java
+++ b/src/main/java/forge/card/CardPrinted.java
@@ -219,6 +219,7 @@ public final class CardPrinted implements Comparable {
public static final Predicate isStandard = printedInSets(
Arrays.asList(new String[] {"M12", "NPH", "MBS", "SOM", "M11", "ROE", "WWK", "ZEN"}), true);
+ public static final Predicate isTrue = Predicate.getTrue(CardPrinted.class);
}
}
}
diff --git a/src/main/java/forge/gui/deckeditor/DeckEditor.java b/src/main/java/forge/gui/deckeditor/DeckEditor.java
index b2d7b8b354d..dc227990547 100644
--- a/src/main/java/forge/gui/deckeditor/DeckEditor.java
+++ b/src/main/java/forge/gui/deckeditor/DeckEditor.java
@@ -4,6 +4,8 @@ import java.awt.Container;
import java.awt.Font;
import java.awt.Frame;
import java.awt.event.ActionEvent;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
@@ -54,19 +56,10 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants {
private JButton removeButton = new JButton();
private JButton addButton = new JButton();
private JButton analysisButton = new JButton();
-
- private JLabel labelFilterName = new JLabel();
- private JLabel labelFilterType = new JLabel();
- private JLabel labelFilterRules = new JLabel();
- private JLabel jLabel4 = new JLabel();
-
- //public JButton filterButton = new JButton();
- private JTextField txtCardName = new JTextField();
-
- private JTextField txtCardType = new JTextField();
- private JTextField txtCardRules = new JTextField();
- private JComboBox searchSetCombo = new JComboBox();
private JButton clearFilterButton = new JButton();
+
+ private JLabel jLabelAnalysisGap = new JLabel();
+ private FilterNameTypeSetPanel filterNameTypeSet;
private boolean isConstructed = false;
@@ -127,25 +120,13 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants {
top.setup(columns, cardView);
bottom.setup(columns, cardView);
+
+ filterNameTypeSet.setListeners(new OnChangeTextUpdateDisplay(), itemListenerUpdatesDisplay);
- // TODO use this as soon the deck editor has resizable GUI
- // Use both so that when "un"maximizing, the frame isn't tiny
setSize(1024, 740);
setExtendedState(Frame.MAXIMIZED_BOTH);
- // This was an attempt to limit the width of the deck editor to 1400
- // pixels.
- /*
- * setSize(1024, 740); Rectangle bounds = getBounds(); Dimension screen
- * = getToolkit().getScreenSize(); int maxWidth;
- *
- * if (screen.width >= 1400) { maxWidth = 1400; } else { maxWidth =
- * screen.width; } bounds.width = maxWidth; bounds.height =
- * screen.height;
- *
- * setMaximizedBounds(bounds);
- */
- }// setupAndDisplay()
+ }
/**
@@ -159,6 +140,7 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants {
top = new TableWithCards("Avaliable Cards", true, true);
bottom = new TableWithCards("Deck", true);
cardView = new CardPanelHeavy();
+ filterNameTypeSet = new FilterNameTypeSetPanel();
jbInit();
} catch (Exception ex) {
@@ -249,42 +231,13 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants {
//this.getContentPane().add(filterButton, "wmin 100, hmin 25, wmax 140, hmax 25, grow");
this.getContentPane().add(clearFilterButton, "wmin 100, hmin 25, wmax 140, hmax 25, grow");
+ this.getContentPane().add(filterNameTypeSet, "cell 0 1, grow");
this.getContentPane().add(top.getTableDecorated(), "cell 0 2 1 2, pushy, grow");
this.getContentPane().add(cardView, "cell 1 0 1 8, flowy, grow");
-
- labelFilterName.setText("Name:");
- labelFilterName.setToolTipText("Card names must include the text in this field");
- this.getContentPane().add(labelFilterName, "cell 0 1, split 7");
- this.getContentPane().add(txtCardName, "wmin 100, grow");
- txtCardName.getDocument().addDocumentListener(new OnChangeTextUpdateDisplay());
-/* txtCardName.getDocument().addDocumentListener(new DocumentListener() {
- @Override public void removeUpdate(final DocumentEvent e) { }
- @Override public void insertUpdate(final DocumentEvent e) { }
- @Override public void changedUpdate(final DocumentEvent e) { updateDisplay(); }
- });
- */
-
- labelFilterType.setText("Type:");
- labelFilterType.setToolTipText("Card types must include the text in this field");
- this.getContentPane().add(labelFilterType, "");
- this.getContentPane().add(txtCardType, "wmin 100, grow");
- txtCardType.getDocument().addDocumentListener(new OnChangeTextUpdateDisplay());
- labelFilterRules.setText("Text:");
- labelFilterRules.setToolTipText("Card descriptions must include the text in this field");
- this.getContentPane().add(labelFilterRules, "");
- this.getContentPane().add(txtCardRules, "wmin 200, grow");
- txtCardRules.getDocument().addDocumentListener(new OnChangeTextUpdateDisplay());
-
- searchSetCombo.removeAllItems();
- searchSetCombo.addItem("");
- for (int i = 0; i < SetUtils.getNameList().size(); i++)
- searchSetCombo.addItem(SetUtils.getNameList().get(i));
- searchSetCombo.addItemListener(itemListenerUpdatesDisplay);
-
- this.getContentPane().add(searchSetCombo, "wmin 150, grow");
-
+
+
this.getContentPane().add(top.getLabel(), "cell 0 4");
this.getContentPane().add(addButton, "w 100, h 49, sg button, cell 0 5, split 4");
@@ -292,8 +245,8 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants {
// jLabel4 is used to push the analysis button to the right
// This will separate this button from the add and remove card buttons
- jLabel4.setText("");
- this.getContentPane().add(jLabel4, "wmin 100, grow");
+ jLabelAnalysisGap.setText("");
+ this.getContentPane().add(jLabelAnalysisGap, "wmin 100, grow");
this.getContentPane().add(analysisButton, "w 100, h 49, wrap");
@@ -312,26 +265,7 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants {
@Override
protected Predicate buildFilter() {
- List> rules = new ArrayList>(5);
- rules.add(super.buildFilter());
- if (StringUtils.isNotBlank(txtCardName.getText())) {
- rules.add(CardPrinted.Predicates.name(StringOp.CONTAINS, txtCardName.getText()));
- }
-
- if (StringUtils.isNotBlank(txtCardType.getText())) {
- rules.add(Predicate.brigde(CardRules.Predicates.joinedType(StringOp.CONTAINS, txtCardType.getText()), CardPrinted.fnGetRules));
- }
-
- if (StringUtils.isNotBlank(txtCardRules.getText())) {
- rules.add(Predicate.brigde(CardRules.Predicates.rules(StringOp.CONTAINS, txtCardRules.getText()), CardPrinted.fnGetRules));
- }
-
- if (searchSetCombo.getSelectedIndex() != 0) {
- String setCode = SetUtils.getCode3ByName(searchSetCombo.getSelectedItem().toString());
- rules.add(CardPrinted.Predicates.printedInSets(setCode));
- }
-
- return rules.size() == 1 ? rules.get(0) : Predicate.and(rules);
+ return Predicate.and(filterBoxes.buildFilter(), filterNameTypeSet.buildFilter());
}
void clearFilterButton_actionPerformed(ActionEvent e) {
@@ -341,24 +275,13 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants {
for (JCheckBox box : filterBoxes.allTypes) { if (!box.isSelected()) { box.doClick(); } }
for (JCheckBox box : filterBoxes.allColors) { if (!box.isSelected()) { box.doClick(); } }
- txtCardName.setText("");
- txtCardType.setText("");
- txtCardRules.setText("");
- searchSetCombo.setSelectedIndex(0);
+ filterNameTypeSet.clearFilters();
isFiltersChangeFiringUpdate = true;
top.setFilter(null);
}
- /**
- *
- * addButton_actionPerformed.
- *
- *
- * @param e
- * a {@link java.awt.event.ActionEvent} object.
- */
void addButton_actionPerformed(ActionEvent e) {
addCardToDeck();
}
@@ -375,14 +298,6 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants {
}
}
- /**
- *
- * removeButton_actionPerformed.
- *
- *
- * @param e
- * a {@link java.awt.event.ActionEvent} object.
- */
void removeButtonClicked(ActionEvent e) {
CardPrinted card = bottom.getSelectedCard();
if (card == null) { return; }
@@ -417,30 +332,4 @@ public final class DeckEditor extends DeckEditorBase implements NewConstants {
}
}
- protected class OnChangeTextUpdateDisplay implements DocumentListener {
- //private String lastText = "";
- private void onChange() {
- //String newValue = getTextFromDocument(e.getDocument();
- //System.out.println(String.format("%s --> %s", lastText, nowText));
- if (isFiltersChangeFiringUpdate) { updateDisplay(); }
- }
-
- /*
- private String getTextFromDocument(final Document doc) {
- try {
- return doc.getText(0, doc.getLength());
- } catch (BadLocationException ex) {
- return null;
- }
- }
- */
-
- @Override public void insertUpdate(DocumentEvent e) { onChange(); }
- @Override public void removeUpdate(DocumentEvent e) { onChange(); }
-
- // Happend only on ENTER pressed
- @Override public void changedUpdate(DocumentEvent e) { }
- }
-
-
}
diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorBase.java b/src/main/java/forge/gui/deckeditor/DeckEditorBase.java
index 0a279211f55..79583c6ea24 100644
--- a/src/main/java/forge/gui/deckeditor/DeckEditorBase.java
+++ b/src/main/java/forge/gui/deckeditor/DeckEditorBase.java
@@ -6,6 +6,8 @@ import java.awt.event.ItemListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
import net.slightlymagic.maxmtg.Predicate;
@@ -38,12 +40,7 @@ public abstract class DeckEditorBase extends JFrame implements DeckDisplay {
// THIS IS HERE FOR OVERLOADING!!!1
// or may be return abstract getFilter from derived class + this filter ... virtual protected member, but later
- protected Predicate buildFilter() {
- if (null == filterBoxes) {
- return Predicate.getTrue(CardPrinted.class);
- }
- return filterBoxes.buildFilter();
- }
+ protected abstract Predicate buildFilter();
void analysisButton_actionPerformed(ActionEvent e) {
CardPoolView deck = bottom.getCards();
@@ -57,12 +54,6 @@ public abstract class DeckEditorBase extends JFrame implements DeckDisplay {
g.setEnabled(false);
}
}
-
- protected ItemListener itemListenerUpdatesDisplay = new ItemListener() {
- public void itemStateChanged(ItemEvent e) {
- if (isFiltersChangeFiringUpdate) { updateDisplay(); }
- }
- };
public void setDecks(CardPoolView topParam, CardPoolView bottomParam) {
top.setDeck(topParam);
@@ -73,4 +64,16 @@ public abstract class DeckEditorBase extends JFrame implements DeckDisplay {
top.setFilter(buildFilter());
}
+ protected ItemListener itemListenerUpdatesDisplay = new ItemListener() {
+ public void itemStateChanged(ItemEvent e) {
+ if (isFiltersChangeFiringUpdate) { updateDisplay(); }
+ }
+ };
+
+ protected class OnChangeTextUpdateDisplay implements DocumentListener {
+ private void onChange() { if (isFiltersChangeFiringUpdate) { updateDisplay(); } }
+ @Override public void insertUpdate(DocumentEvent e) { onChange(); }
+ @Override public void removeUpdate(DocumentEvent e) { onChange(); }
+ @Override public void changedUpdate(DocumentEvent e) { } // Happend only on ENTER pressed
+ }
}
diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorDraft.java b/src/main/java/forge/gui/deckeditor/DeckEditorDraft.java
index 08c7383ec1b..62fca031a96 100644
--- a/src/main/java/forge/gui/deckeditor/DeckEditorDraft.java
+++ b/src/main/java/forge/gui/deckeditor/DeckEditorDraft.java
@@ -17,6 +17,9 @@ import forge.properties.NewConstants;
import forge.view.swing.OldGuiNewGame;
import javax.swing.*;
+
+import net.slightlymagic.maxmtg.Predicate;
+
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
@@ -93,6 +96,7 @@ public class DeckEditorDraft extends DeckEditorBase implements NewConstants, New
columns.add(new TableColumnInfo("R", 35, PresetColumns.fnRarityCompare, PresetColumns.fnRarityGet));
columns.add(new TableColumnInfo("Set", 40, PresetColumns.fnSetCompare, PresetColumns.fnSetGet));
columns.add(new TableColumnInfo("AI", 30, PresetColumns.fnAiStatusCompare, PresetColumns.fnAiStatusGet));
+ columns.get(2).setCellRenderer(new ManaCostRenderer());
top.setup(columns, cardView);
bottom.setup(columns, cardView);
@@ -267,4 +271,10 @@ public class DeckEditorDraft extends DeckEditorBase implements NewConstants, New
dispose();
new OldGuiNewGame();
}/*saveDraft()*/
+
+
+ @Override
+ protected Predicate buildFilter() {
+ return CardPrinted.Predicates.Presets.isTrue;
+ }
}
diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java b/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java
index af2aab621b1..6e0524ee6c7 100644
--- a/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java
+++ b/src/main/java/forge/gui/deckeditor/DeckEditorQuest.java
@@ -28,6 +28,8 @@ import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
+import net.slightlymagic.maxmtg.Predicate;
+
//import forge.quest.data.QuestBoosterPack;
/**
@@ -47,11 +49,14 @@ public final class DeckEditorQuest extends DeckEditorBase implements NewConstant
// private ImageIcon upIcon = Constant.IO.upIcon;
// private ImageIcon downIcon = Constant.IO.downIcon;
+ //private JLabel labelSortHint = new JLabel();
private JButton addButton = new JButton();
private JButton removeButton = new JButton();
private JButton analysisButton = new JButton();
- private JLabel labelSortHint = new JLabel();
+
+ private FilterNameTypeSetPanel filterNameTypeSet;
+
private QuestData questData;
@@ -116,6 +121,8 @@ public final class DeckEditorQuest extends DeckEditorBase implements NewConstant
*
*/
public void setup() {
+ this.setLayout(null);
+
List> columns = new ArrayList>();
columns.add(new TableColumnInfo("Qty", 30, PresetColumns.fnQtyCompare, PresetColumns.fnQtyGet));
columns.add(new TableColumnInfo("Name", 180, PresetColumns.fnNameCompare, PresetColumns.fnNameGet));
@@ -131,6 +138,8 @@ public final class DeckEditorQuest extends DeckEditorBase implements NewConstant
top.setup(columns, cardView);
bottom.setup(columns, cardView);
+
+ filterNameTypeSet.setListeners(new OnChangeTextUpdateDisplay(), itemListenerUpdatesDisplay);
this.setSize(1024, 768);
GuiUtils.centerFrame(this);
@@ -149,6 +158,7 @@ public final class DeckEditorQuest extends DeckEditorBase implements NewConstant
top = new TableWithCards("All Cards", true);
bottom = new TableWithCards("Your deck", true);
cardView = new CardPanelHeavy();
+ filterNameTypeSet = new FilterNameTypeSetPanel();
jbInit();
} catch (Exception ex) {
ErrorViewer.showError(ex);
@@ -157,10 +167,15 @@ public final class DeckEditorQuest extends DeckEditorBase implements NewConstant
private void jbInit() throws Exception {
- this.setLayout(null);
+ this.getContentPane().setLayout(null);
- top.getTableDecorated().setBounds(new Rectangle(19, 20, 726, 346));
+ //labelSortHint.setText("Click on the column name (like name or color) to sort the cards");
+ //labelSortHint.setBounds(new Rectangle(20, 27, 400, 19));
+
+ filterNameTypeSet.setBounds(new Rectangle(19, 10, 726, 25));
+ top.getTableDecorated().setBounds(new Rectangle(19, 40, 726, 316));
bottom.getTableDecorated().setBounds(new Rectangle(19, 458, 726, 218));
+
removeButton.setBounds(new Rectangle(180, 403, 146, 49));
// removeButton.setIcon(upIcon);
@@ -236,9 +251,8 @@ public final class DeckEditorQuest extends DeckEditorBase implements NewConstant
// x 768 screen size
this.setTitle("Deck Editor");
- labelSortHint.setText("Click on the column name (like name or color) to sort the cards");
- labelSortHint.setBounds(new Rectangle(20, 1, 400, 19));
+ this.getContentPane().add(filterNameTypeSet, null);
this.getContentPane().add(top.getTableDecorated(), null);
this.getContentPane().add(bottom.getTableDecorated(), null);
this.getContentPane().add(addButton, null);
@@ -246,7 +260,7 @@ public final class DeckEditorQuest extends DeckEditorBase implements NewConstant
this.getContentPane().add(analysisButton, null);
this.getContentPane().add(bottom.getLabel(), null);
this.getContentPane().add(top.getLabel(), null);
- this.getContentPane().add(labelSortHint, null);
+ //this.getContentPane().add(labelSortHint, null);
this.getContentPane().add(cardView, null);
for (JCheckBox box : filterBoxes.allTypes) {
@@ -266,6 +280,11 @@ public final class DeckEditorQuest extends DeckEditorBase implements NewConstant
}
+ @Override
+ protected Predicate buildFilter() {
+ return Predicate.and(filterBoxes.buildFilter(), filterNameTypeSet.buildFilter());
+ }
+
private void addButtonActionPerformed(final ActionEvent e) {
CardPrinted card = top.getSelectedCard();
if (card == null) { return; }
diff --git a/src/main/java/forge/gui/deckeditor/DeckEditorShop.java b/src/main/java/forge/gui/deckeditor/DeckEditorShop.java
index ff3be2c7a8f..010bd2b87b9 100644
--- a/src/main/java/forge/gui/deckeditor/DeckEditorShop.java
+++ b/src/main/java/forge/gui/deckeditor/DeckEditorShop.java
@@ -17,6 +17,7 @@ import javax.swing.JLabel;
import javax.swing.JOptionPane;
import net.slightlymagic.braids.util.lambda.Lambda1;
+import net.slightlymagic.maxmtg.Predicate;
import forge.Command;
import forge.ReadPriceList;
@@ -269,8 +270,12 @@ public final class DeckEditorShop extends DeckEditorBase {
}
}
+ @Override
+ protected Predicate buildFilter() {
+ return CardPrinted.Predicates.Presets.isTrue;
+ }
- void sellButton_actionPerformed(ActionEvent e) {
+ private void sellButton_actionPerformed(ActionEvent e) {
CardPrinted c = bottom.getSelectedCard();
if (c == null) { return; }
diff --git a/src/main/java/forge/gui/deckeditor/FilterNameTypeSetPanel.java b/src/main/java/forge/gui/deckeditor/FilterNameTypeSetPanel.java
new file mode 100644
index 00000000000..a7dc0cd9e87
--- /dev/null
+++ b/src/main/java/forge/gui/deckeditor/FilterNameTypeSetPanel.java
@@ -0,0 +1,112 @@
+package forge.gui.deckeditor;
+
+import java.awt.event.ItemListener;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JComboBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+import javax.swing.event.DocumentListener;
+
+import net.miginfocom.swing.MigLayout;
+import net.slightlymagic.maxmtg.Predicate;
+import net.slightlymagic.maxmtg.Predicate.StringOp;
+
+import org.apache.commons.lang3.StringUtils;
+
+import forge.SetUtils;
+import forge.card.CardPrinted;
+import forge.card.CardRules;
+
+/**
+ * A panel that holds Name, Type, Rules text fields aligned horizontally together with set filter
+ */
+public class FilterNameTypeSetPanel extends JComponent{
+
+
+ private static final long serialVersionUID = -6409564625432765430L;
+ public final JLabel labelFilterName = new JLabel();
+ public final JLabel labelFilterType = new JLabel();
+ public final JLabel labelFilterRules = new JLabel();
+
+ public final JTextField txtCardName = new JTextField();
+ public final JTextField txtCardType = new JTextField();
+ public final JTextField txtCardRules = new JTextField();
+ public final JComboBox searchSetCombo = new JComboBox();
+
+
+ public FilterNameTypeSetPanel()
+ {
+ this.setLayout(new MigLayout("fill, ins 0"));
+
+ labelFilterName.setText("Name:");
+ labelFilterName.setToolTipText("Card names must include the text in this field");
+ this.add(labelFilterName, "cell 0 1, split 7");
+ this.add(txtCardName, "wmin 100, grow");
+
+ labelFilterType.setText("Type:");
+ labelFilterType.setToolTipText("Card types must include the text in this field");
+ this.add(labelFilterType, "");
+ this.add(txtCardType, "wmin 100, grow");
+
+ labelFilterRules.setText("Text:");
+ labelFilterRules.setToolTipText("Card descriptions must include the text in this field");
+ this.add(labelFilterRules, "");
+ this.add(txtCardRules, "wmin 200, grow");
+
+
+ searchSetCombo.removeAllItems();
+ searchSetCombo.addItem("");
+ for (int i = 0; i < SetUtils.getNameList().size(); i++)
+ searchSetCombo.addItem(SetUtils.getNameList().get(i));
+
+ this.add(searchSetCombo, "wmin 150, grow");
+ }
+
+ public void setListeners(DocumentListener onTextChange, ItemListener onComboChange)
+ {
+ txtCardType.getDocument().addDocumentListener(onTextChange);
+ txtCardRules.getDocument().addDocumentListener(onTextChange);
+ txtCardName.getDocument().addDocumentListener(onTextChange);
+ searchSetCombo.addItemListener(onComboChange);
+ }
+
+ public Predicate buildFilter() {
+ List> rules = new ArrayList>(4);
+ if (StringUtils.isNotBlank(txtCardName.getText())) {
+ rules.add(CardPrinted.Predicates.name(StringOp.CONTAINS, txtCardName.getText()));
+ }
+
+ if (StringUtils.isNotBlank(txtCardType.getText())) {
+ rules.add(Predicate.brigde(CardRules.Predicates.joinedType(StringOp.CONTAINS, txtCardType.getText()), CardPrinted.fnGetRules));
+ }
+
+ if (StringUtils.isNotBlank(txtCardRules.getText())) {
+ rules.add(Predicate.brigde(CardRules.Predicates.rules(StringOp.CONTAINS, txtCardRules.getText()), CardPrinted.fnGetRules));
+ }
+
+ if (searchSetCombo.getSelectedIndex() != 0) {
+ String setCode = SetUtils.getCode3ByName(searchSetCombo.getSelectedItem().toString());
+ rules.add(CardPrinted.Predicates.printedInSets(setCode));
+ }
+
+ switch (rules.size()){
+ case 0: return Predicate.getTrue(CardPrinted.class);
+ case 1: return rules.get(0);
+ case 2: return Predicate.and(rules.get(0), rules.get(1));
+ default: return Predicate.and(rules);
+ }
+ }
+
+ /**
+ * TODO: Write javadoc for this method.
+ */
+ public void clearFilters() {
+ txtCardName.setText("");
+ txtCardType.setText("");
+ txtCardRules.setText("");
+ searchSetCombo.setSelectedIndex(0);
+ }
+}
diff --git a/src/main/java/forge/gui/deckeditor/TableWithCards.java b/src/main/java/forge/gui/deckeditor/TableWithCards.java
index 9f04c913ee0..f8c8bc3d66d 100644
--- a/src/main/java/forge/gui/deckeditor/TableWithCards.java
+++ b/src/main/java/forge/gui/deckeditor/TableWithCards.java
@@ -121,17 +121,19 @@ public final class TableWithCards {
}
public void setDeck(final Iterable cards) {
- model.clear();
- pool = new CardPool(cards);
- model.addCards(pool);
- updateView();
+ setDeckImpl(new CardPool(cards));
}
public void setDeck(final CardPoolView poolView) {
+ setDeckImpl(new CardPool(poolView));
+ }
+
+ protected void setDeckImpl(CardPool thePool)
+ {
model.clear();
- pool = new CardPool(poolView);
+ pool = thePool;
model.addCards(pool);
- updateView();
+ updateView(true);
}
public CardPrinted getSelectedCard() {
@@ -140,36 +142,37 @@ public final class TableWithCards {
}
private boolean isUnfiltered() { return filter == null || filter.is1(); }
- private boolean isFiltered() { return filter != null && !filter.is1(); }
public void setFilter(final Predicate filterToSet) {
filter = filterToSet;
- updateView();
+ updateView(true);
}
public void addCard(final CardPrinted card) {
//int n = table.getSelectedRow();
pool.add(card);
if (isUnfiltered()) { model.addCard(card); }
- updateView();
+ updateView(false);
}
public void removeCard(final CardPrinted card) {
int n = table.getSelectedRow();
pool.remove(card);
if (isUnfiltered()) { model.removeCard(card); }
- updateView();
+ updateView(false);
fixSelection(n);
}
- public void updateView() {
- if (isFiltered() || wantUnique) {
+ public void updateView(boolean bForceFilter) {
+ boolean useFilter = ( bForceFilter && filter != null ) || !isUnfiltered();
+
+ if (useFilter || wantUnique) {
model.clear();
}
- if (isFiltered() && wantUnique) {
+ if (useFilter && wantUnique) {
model.addCards(filter.uniqueByLast(pool, CardPoolView.fnToCardName, CardPoolView.fnToPrinted));
- } else if (isFiltered()) {
+ } else if (useFilter) {
model.addCards(filter.select(pool, CardPoolView.fnToPrinted));
} else if (wantUnique) {
model.addCards(CardRules.Predicates.Presets.constantTrue.uniqueByLast(pool, CardPoolView.fnToCardName, CardPoolView.fnToCard));