IanGrainger wrote:... What styling changes?
I used braces on single statements to keep it consistent with the rest of the code, used
enhanced for statements and I used magic.model.MagicSubType.hasSubType instead of magic.model.MagicCardDefinition.hasSubType to prevent Shapeshifters showing on every search (cause they are.. well every type

).
Since this forum won't allow attaching .patch or .txt files ....
- card-explorer-text-filter.patch | Open
- Code: Select all
# HG changeset patch
# User LOL@LOLLOL
# Date 1312393185 -7200
# Node ID 373b640409640646cf86caaeb270ca74b427962a
# Parent 6d613d9e52a5e8f30ac502b5b58d819da20a63b8
card explorer text filter
diff -r 6d613d9e52a5 -r 373b64040964 src/magic/model/MagicCardDefinition.java
--- a/src/magic/model/MagicCardDefinition.java Wed Aug 03 19:20:15 2011 +0200
+++ b/src/magic/model/MagicCardDefinition.java Wed Aug 03 19:39:45 2011 +0200
@@ -574,4 +574,34 @@
return IconImages.SPELL;
}
}
+
+ public boolean subTypeHasText(String s) {
+ MagicSubType[] subTypeValues = MagicSubType.values();
+ for (final MagicSubType subtype : subTypeValues) {
+ if(subtype.hasSubType(subTypeFlags) && subtype.toString().toLowerCase().contains(s)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean abilityHasText(String s) {
+ MagicAbility[] abilityValues = MagicAbility.values();
+ for (final MagicAbility ability : abilityValues) {
+ if(hasAbility(ability) && ability.getName().toLowerCase().contains(s)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean hasText(String s) {
+ s = s.toLowerCase();
+ return (
+ fullName.toLowerCase().contains(s) ||
+ name.toLowerCase().contains(s) ||
+ subTypeHasText(s) ||
+ abilityHasText(s)
+ );
+ }
}
diff -r 6d613d9e52a5 -r 373b64040964 src/magic/ui/ExplorerFilterPanel.java
--- a/src/magic/ui/ExplorerFilterPanel.java Wed Aug 03 19:20:15 2011 +0200
+++ b/src/magic/ui/ExplorerFilterPanel.java Wed Aug 03 19:39:45 2011 +0200
@@ -11,12 +11,16 @@
import java.util.List;
import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
+import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
import magic.data.CardDefinitions;
import magic.model.MagicCardDefinition;
@@ -30,7 +34,7 @@
import magic.ui.widget.TexturedPanel;
import magic.ui.widget.TitleBar;
-public class ExplorerFilterPanel extends TexturedPanel implements ActionListener {
+public class ExplorerFilterPanel extends TexturedPanel implements ActionListener, DocumentListener {
private static final long serialVersionUID = 1L;
@@ -64,6 +68,7 @@
private final JCheckBox exactlyCheckBox;
private final JCheckBox excludeCheckBox;
private final JCheckBox multiCheckBox;
+ private final JTextField textFilterField;
private final JRadioButton nameRadioButton;
private final JRadioButton convertedRadioButton;
private final int mode;
@@ -84,7 +89,8 @@
final TitleBar titleBar=new TitleBar("Filter");
add(titleBar,BorderLayout.NORTH);
- final JPanel mainPanel=new JPanel(new BorderLayout(0,2));
+ final JPanel mainPanel=new JPanel();
+ mainPanel.setLayout(new BoxLayout( mainPanel, BoxLayout.Y_AXIS));
mainPanel.setOpaque(false);
mainPanel.setBorder(FontsAndBorders.BLACK_BORDER);
add(mainPanel,BorderLayout.CENTER);
@@ -95,7 +101,7 @@
final JPanel typeFilterPanel=new JPanel(new BorderLayout(8,0));
typeFilterPanel.setOpaque(false);
typeFilterPanel.setBorder(typeBorder);
- mainPanel.add(typeFilterPanel,BorderLayout.NORTH);
+ mainPanel.add(typeFilterPanel);
final JPanel leftTypeFilterPanel=new JPanel(new GridLayout(3,1));
leftTypeFilterPanel.setOpaque(false);
@@ -125,7 +131,7 @@
final JPanel colorFilterPanel=new JPanel(new BorderLayout());
colorFilterPanel.setOpaque(false);
colorFilterPanel.setBorder(colorBorder);
- mainPanel.add(colorFilterPanel,BorderLayout.CENTER);
+ mainPanel.add(colorFilterPanel);
colorCheckBoxes=new JCheckBox[MagicColor.NR_COLORS];
final JPanel colorsPanel=new JPanel(new GridLayout(1,MagicColor.NR_COLORS));
@@ -169,13 +175,25 @@
otherColorPanel.add(multiCheckBox);
colorFilterPanel.add(otherColorPanel,BorderLayout.CENTER);
+ // Text
+ final TitledBorder textFilterBorder=BorderFactory.createTitledBorder("Text");
+ textFilterBorder.setTitleColor(textColor);
+ final JPanel textFilterPanel=new JPanel(new BorderLayout(8,0));
+ textFilterPanel.setOpaque(false);
+ textFilterPanel.setBorder(textFilterBorder);
+ textFilterField = new JTextField();
+ textFilterField.addActionListener(this);
+ textFilterField.getDocument().addDocumentListener(this);
+ textFilterPanel.add(textFilterField);
+ mainPanel.add(textFilterPanel);
+
// Sort
final TitledBorder sortBorder=BorderFactory.createTitledBorder("Sort");
sortBorder.setTitleColor(textColor);
final JPanel sortFilterPanel=new JPanel(new BorderLayout(8,0));
sortFilterPanel.setOpaque(false);
sortFilterPanel.setBorder(sortBorder);
- mainPanel.add(sortFilterPanel,BorderLayout.SOUTH);
+ mainPanel.add(sortFilterPanel);
final ButtonGroup sortGroup=new ButtonGroup();
nameRadioButton=new JRadioButton("Name",true);
@@ -244,6 +262,16 @@
return false;
}
+ // text
+ String filterString = textFilterField.getText();
+ String[] filters = filterString.split(" ");
+ for(int i=0; i<filters.length; i++) {
+ if(!cardDefinition.hasText(filters[i])) {
+ return false;
+ }
+ }
+
+ // colors
boolean useColors=false;
boolean validColors=false;
for (int colorIndex=0;colorIndex<colorCheckBoxes.length;colorIndex++) {
@@ -287,4 +315,18 @@
explorerPanel.updateCards();
}
+
+ @Override
+ public void insertUpdate(DocumentEvent arg0) {
+ explorerPanel.updateCards();
+ }
+
+ @Override
+ public void removeUpdate(DocumentEvent arg0) {
+ explorerPanel.updateCards();
+ }
+
+ @Override
+ public void changedUpdate(DocumentEvent arg0) {
+ }
}
\ No newline at end of file
diff -r 6d613d9e52a5 -r 373b64040964 src/magic/ui/ExplorerPanel.java
--- a/src/magic/ui/ExplorerPanel.java Wed Aug 03 19:20:15 2011 +0200
+++ b/src/magic/ui/ExplorerPanel.java Wed Aug 03 19:39:45 2011 +0200
@@ -41,7 +41,7 @@
private static final int CARD_WIDTH=DefaultResolutionProfile.CARD_VIEWER_WIDTH;
private static final int CARD_HEIGHT=DefaultResolutionProfile.CARD_VIEWER_HEIGHT;
- private static final int FILTER_HEIGHT=290;
+ private static final int FILTER_HEIGHT = 350;
private static final int LINE_SPACING=4;
private static final int LINE_WIDTH=200;
private static final int LINE_WIDTH2=LINE_WIDTH+LINE_SPACING+2;