myk's code contributions (vol. 1)

- adds tooltips for the filter checkboxes (issue 657)
- ensures the filter checkboxes are always in the same order
- puts all labels and checkboxes in "official" order from the mtg rules book:
    color order: WHITE, BLUE, BLACK, RED, GREEN, COLORLESS, MULTICOLOR
    type order: LAND, ARTIFACT, CREATURE, ENCHANTMENT, PLANESWALKER, INSTANT, SORCERY
This commit is contained in:
Maxmtg
2013-01-24 04:47:36 +00:00
parent a492652fe8
commit b1bf0d3aca
3 changed files with 186 additions and 188 deletions

View File

@@ -37,30 +37,33 @@ import forge.util.PredicateString.StringOp;
* <i>(S at beginning of class name denotes a static factory.)</i> * <i>(S at beginning of class name denotes a static factory.)</i>
*/ */
public class SFilterUtil { public class SFilterUtil {
/** An enum to reference checkbox objects in their respective maps. */ /** An enum to reference checkbox objects in the color filter map. */
private enum FilterProperty { /** */ private enum ColorFilterProperty {
BLACK, /** */ WHITE,
BLUE, /** */ BLUE,
COLORLESS, /** */ BLACK,
GREEN, /** */ RED,
MULTICOLOR, /** */ GREEN,
RED, /** */ COLORLESS,
WHITE, /** */ MULTICOLOR
}
ARTIFACT, /** */ /** An enum to reference checkbox objects in the type filter map. */
CREATURE, /** */ private enum TypeFilterProperty {
ENCHANTMENT, /** */ LAND,
INSTANT, /** */ ARTIFACT,
LAND, /** */ CREATURE,
PLANESWALKER, /** */ ENCHANTMENT,
PLANESWALKER,
INSTANT,
SORCERY SORCERY
} }
private static final Map<FilterProperty, ChbPnl> MAP_COLOR_CHECKBOXES = private static final Map<ColorFilterProperty, ChbPnl> MAP_COLOR_CHECKBOXES =
new HashMap<FilterProperty, ChbPnl>(); new HashMap<ColorFilterProperty, ChbPnl>();
private static final Map<FilterProperty, ChbPnl> MAP_TYPE_CHECKBOXES = private static final Map<TypeFilterProperty, ChbPnl> MAP_TYPE_CHECKBOXES =
new HashMap<FilterProperty, ChbPnl>(); new HashMap<TypeFilterProperty, ChbPnl>();
/** /**
@@ -97,61 +100,57 @@ public class SFilterUtil {
public static JPanel populateColorFilters() { public static JPanel populateColorFilters() {
MAP_COLOR_CHECKBOXES.clear(); MAP_COLOR_CHECKBOXES.clear();
MAP_COLOR_CHECKBOXES.put(FilterProperty.BLACK, MAP_COLOR_CHECKBOXES.put(ColorFilterProperty.WHITE,
new ChbPnl(SEditorUtil.ICO_BLACK.getImage())); new ChbPnl(SEditorUtil.ICO_WHITE.getImage(), "White Cards"));
MAP_COLOR_CHECKBOXES.put(FilterProperty.MULTICOLOR, MAP_COLOR_CHECKBOXES.put(ColorFilterProperty.BLUE,
new ChbPnl(SEditorUtil.ICO_MULTI.getImage())); new ChbPnl(SEditorUtil.ICO_BLUE.getImage(), "Blue Cards"));
MAP_COLOR_CHECKBOXES.put(FilterProperty.BLUE, MAP_COLOR_CHECKBOXES.put(ColorFilterProperty.BLACK,
new ChbPnl(SEditorUtil.ICO_BLUE.getImage())); new ChbPnl(SEditorUtil.ICO_BLACK.getImage(), "Black Cards"));
MAP_COLOR_CHECKBOXES.put(FilterProperty.BLACK, MAP_COLOR_CHECKBOXES.put(ColorFilterProperty.RED,
new ChbPnl(SEditorUtil.ICO_BLACK.getImage())); new ChbPnl(SEditorUtil.ICO_RED.getImage(), "Red Cards"));
MAP_COLOR_CHECKBOXES.put(FilterProperty.GREEN, MAP_COLOR_CHECKBOXES.put(ColorFilterProperty.GREEN,
new ChbPnl(SEditorUtil.ICO_GREEN.getImage())); new ChbPnl(SEditorUtil.ICO_GREEN.getImage(), "Green Cards"));
MAP_COLOR_CHECKBOXES.put(FilterProperty.RED, MAP_COLOR_CHECKBOXES.put(ColorFilterProperty.COLORLESS,
new ChbPnl(SEditorUtil.ICO_RED.getImage())); new ChbPnl(SEditorUtil.ICO_COLORLESS.getImage(), "Colorless Cards"));
MAP_COLOR_CHECKBOXES.put(FilterProperty.WHITE, MAP_COLOR_CHECKBOXES.put(ColorFilterProperty.MULTICOLOR,
new ChbPnl(SEditorUtil.ICO_WHITE.getImage())); new ChbPnl(SEditorUtil.ICO_MULTI.getImage(), "Multicolor Cards"));
MAP_COLOR_CHECKBOXES.put(FilterProperty.COLORLESS,
new ChbPnl(SEditorUtil.ICO_COLORLESS.getImage()));
final JPanel pnl = new JPanel(new WrapLayout(SwingConstants.CENTER, 10, 5)); final JPanel pnl = new JPanel(new WrapLayout(SwingConstants.CENTER, 10, 5));
pnl.setOpaque(false); pnl.setOpaque(false);
for (FilterProperty p : MAP_COLOR_CHECKBOXES.keySet()) { for (ColorFilterProperty p : ColorFilterProperty.values()) {
pnl.add(MAP_COLOR_CHECKBOXES.get(p)); pnl.add(MAP_COLOR_CHECKBOXES.get(p));
} }
return pnl; return pnl;
} }
/** /**
* Fills and returns a JPanel with checkboxes for color filter set. * Fills and returns a JPanel with checkboxes for type filter set.
* *
* @return {@link javax.swing.JPanel} * @return {@link javax.swing.JPanel}
*/ */
public static JPanel populateTypeFilters() { public static JPanel populateTypeFilters() {
MAP_TYPE_CHECKBOXES.clear(); MAP_TYPE_CHECKBOXES.clear();
MAP_TYPE_CHECKBOXES.put(FilterProperty.ARTIFACT, MAP_TYPE_CHECKBOXES.put(TypeFilterProperty.LAND,
new ChbPnl(SEditorUtil.ICO_ARTIFACT.getImage())); new ChbPnl(SEditorUtil.ICO_LAND.getImage(), "Land Cards"));
MAP_TYPE_CHECKBOXES.put(FilterProperty.CREATURE, MAP_TYPE_CHECKBOXES.put(TypeFilterProperty.ARTIFACT,
new ChbPnl(SEditorUtil.ICO_CREATURE.getImage())); new ChbPnl(SEditorUtil.ICO_ARTIFACT.getImage(), "Artifact Cards"));
MAP_TYPE_CHECKBOXES.put(FilterProperty.ENCHANTMENT, MAP_TYPE_CHECKBOXES.put(TypeFilterProperty.CREATURE,
new ChbPnl(SEditorUtil.ICO_ENCHANTMENT.getImage())); new ChbPnl(SEditorUtil.ICO_CREATURE.getImage(), "Creature Cards"));
MAP_TYPE_CHECKBOXES.put(FilterProperty.INSTANT, MAP_TYPE_CHECKBOXES.put(TypeFilterProperty.ENCHANTMENT,
new ChbPnl(SEditorUtil.ICO_INSTANT.getImage())); new ChbPnl(SEditorUtil.ICO_ENCHANTMENT.getImage(), "Enchantment Cards"));
MAP_TYPE_CHECKBOXES.put(FilterProperty.LAND, MAP_TYPE_CHECKBOXES.put(TypeFilterProperty.PLANESWALKER,
new ChbPnl(SEditorUtil.ICO_LAND.getImage())); new ChbPnl(SEditorUtil.ICO_PLANESWALKER.getImage(), "Planeswalker Cards"));
MAP_TYPE_CHECKBOXES.put(FilterProperty.PLANESWALKER, MAP_TYPE_CHECKBOXES.put(TypeFilterProperty.INSTANT,
new ChbPnl(SEditorUtil.ICO_PLANESWALKER.getImage())); new ChbPnl(SEditorUtil.ICO_INSTANT.getImage(), "Instant Cards"));
MAP_TYPE_CHECKBOXES.put(FilterProperty.SORCERY, MAP_TYPE_CHECKBOXES.put(TypeFilterProperty.SORCERY,
new ChbPnl(SEditorUtil.ICO_SORCERY.getImage())); new ChbPnl(SEditorUtil.ICO_SORCERY.getImage(), "Sorcery Cards"));
final JPanel pnl = new JPanel(new WrapLayout(SwingConstants.CENTER, 10, 5)); final JPanel pnl = new JPanel(new WrapLayout(SwingConstants.CENTER, 10, 5));
pnl.setOpaque(false); pnl.setOpaque(false);
for (FilterProperty p : MAP_TYPE_CHECKBOXES.keySet()) { for (TypeFilterProperty p : TypeFilterProperty.values()) {
pnl.add(MAP_TYPE_CHECKBOXES.get(p)); pnl.add(MAP_TYPE_CHECKBOXES.get(p));
} }
return pnl; return pnl;
@@ -160,16 +159,16 @@ public class SFilterUtil {
/** Turns all type checkboxes off or on. /** Turns all type checkboxes off or on.
* @param select0 &emsp; boolean */ * @param select0 &emsp; boolean */
public static void toggleTypeCheckboxes(final boolean select0) { public static void toggleTypeCheckboxes(final boolean select0) {
for (FilterProperty p : MAP_TYPE_CHECKBOXES.keySet()) { for (ChbPnl p : MAP_TYPE_CHECKBOXES.values()) {
MAP_TYPE_CHECKBOXES.get(p).getCheckBox().setSelected(select0); p.getCheckBox().setSelected(select0);
} }
} }
/** Turns all type checkboxes off or on. /** Turns all color checkboxes off or on.
* @param select0 &emsp; boolean */ * @param select0 &emsp; boolean */
public static void toggleColorCheckboxes(final boolean select0) { public static void toggleColorCheckboxes(final boolean select0) {
for (FilterProperty p : MAP_COLOR_CHECKBOXES.keySet()) { for (ChbPnl p : MAP_COLOR_CHECKBOXES.values()) {
MAP_COLOR_CHECKBOXES.get(p).getCheckBox().setSelected(select0); p.getCheckBox().setSelected(select0);
} }
} }
@@ -185,17 +184,16 @@ public class SFilterUtil {
final List<Predicate<CardRules>> colors = new ArrayList<Predicate<CardRules>>(); final List<Predicate<CardRules>> colors = new ArrayList<Predicate<CardRules>>();
if (MAP_COLOR_CHECKBOXES.get(FilterProperty.BLACK).getCheckBox().isSelected()) { colors.add(CardRulesPredicates.Presets.IS_BLACK); } if (MAP_COLOR_CHECKBOXES.get(ColorFilterProperty.WHITE).getCheckBox().isSelected()) { colors.add(CardRulesPredicates.Presets.IS_WHITE); }
if (MAP_COLOR_CHECKBOXES.get(FilterProperty.BLUE).getCheckBox().isSelected()) { colors.add(CardRulesPredicates.Presets.IS_BLUE); } if (MAP_COLOR_CHECKBOXES.get(ColorFilterProperty.BLUE).getCheckBox().isSelected()) { colors.add(CardRulesPredicates.Presets.IS_BLUE); }
if (MAP_COLOR_CHECKBOXES.get(FilterProperty.GREEN).getCheckBox().isSelected()) { colors.add(CardRulesPredicates.Presets.IS_GREEN); } if (MAP_COLOR_CHECKBOXES.get(ColorFilterProperty.BLACK).getCheckBox().isSelected()) { colors.add(CardRulesPredicates.Presets.IS_BLACK); }
if (MAP_COLOR_CHECKBOXES.get(FilterProperty.RED).getCheckBox().isSelected()) { colors.add(CardRulesPredicates.Presets.IS_RED); } if (MAP_COLOR_CHECKBOXES.get(ColorFilterProperty.RED).getCheckBox().isSelected()) { colors.add(CardRulesPredicates.Presets.IS_RED); }
if (MAP_COLOR_CHECKBOXES.get(FilterProperty.WHITE).getCheckBox().isSelected()) { colors.add(CardRulesPredicates.Presets.IS_WHITE); } if (MAP_COLOR_CHECKBOXES.get(ColorFilterProperty.GREEN).getCheckBox().isSelected()) { colors.add(CardRulesPredicates.Presets.IS_GREEN); }
if (MAP_COLOR_CHECKBOXES.get(FilterProperty.COLORLESS).getCheckBox().isSelected()) { colors.add(CardRulesPredicates.Presets.IS_COLORLESS); } if (MAP_COLOR_CHECKBOXES.get(ColorFilterProperty.COLORLESS).getCheckBox().isSelected()) { colors.add(CardRulesPredicates.Presets.IS_COLORLESS); }
final Predicate<CardRules> preColors = colors.size() == 6 ? null : Predicates.or(colors); final Predicate<CardRules> preColors = colors.size() == 6 ? null : Predicates.or(colors);
boolean wantMulticolor = MAP_COLOR_CHECKBOXES.get(ColorFilterProperty.MULTICOLOR).getCheckBox().isSelected();
boolean wantMulticolor = MAP_COLOR_CHECKBOXES.get(FilterProperty.MULTICOLOR).getCheckBox().isSelected();
final Predicate<CardRules> preExceptMulti = wantMulticolor ? null : Predicates.not(CardRulesPredicates.Presets.IS_MULTICOLOR); final Predicate<CardRules> preExceptMulti = wantMulticolor ? null : Predicates.not(CardRulesPredicates.Presets.IS_MULTICOLOR);
Predicate<CardRules> preFinal = colors.isEmpty() && wantMulticolor ? CardRulesPredicates.Presets.IS_MULTICOLOR : optimizedAnd(preExceptMulti, preColors); Predicate<CardRules> preFinal = colors.isEmpty() && wantMulticolor ? CardRulesPredicates.Presets.IS_MULTICOLOR : optimizedAnd(preExceptMulti, preColors);
@@ -239,13 +237,13 @@ public class SFilterUtil {
if (MAP_TYPE_CHECKBOXES.isEmpty()) { return Predicates.alwaysTrue(); } if (MAP_TYPE_CHECKBOXES.isEmpty()) { return Predicates.alwaysTrue(); }
final List<Predicate<CardRules>> ors = new ArrayList<Predicate<CardRules>>(); final List<Predicate<CardRules>> ors = new ArrayList<Predicate<CardRules>>();
if (MAP_TYPE_CHECKBOXES.get(FilterProperty.ARTIFACT).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_ARTIFACT); } if (MAP_TYPE_CHECKBOXES.get(TypeFilterProperty.LAND).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_LAND); }
if (MAP_TYPE_CHECKBOXES.get(FilterProperty.CREATURE).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_CREATURE); } if (MAP_TYPE_CHECKBOXES.get(TypeFilterProperty.ARTIFACT).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_ARTIFACT); }
if (MAP_TYPE_CHECKBOXES.get(FilterProperty.ENCHANTMENT).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_ENCHANTMENT); } if (MAP_TYPE_CHECKBOXES.get(TypeFilterProperty.CREATURE).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_CREATURE); }
if (MAP_TYPE_CHECKBOXES.get(FilterProperty.INSTANT).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_INSTANT); } if (MAP_TYPE_CHECKBOXES.get(TypeFilterProperty.ENCHANTMENT).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_ENCHANTMENT); }
if (MAP_TYPE_CHECKBOXES.get(FilterProperty.LAND).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_LAND); } if (MAP_TYPE_CHECKBOXES.get(TypeFilterProperty.PLANESWALKER).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_PLANESWALKER); }
if (MAP_TYPE_CHECKBOXES.get(FilterProperty.PLANESWALKER).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_PLANESWALKER); } if (MAP_TYPE_CHECKBOXES.get(TypeFilterProperty.INSTANT).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_INSTANT); }
if (MAP_TYPE_CHECKBOXES.get(FilterProperty.SORCERY).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_SORCERY); } if (MAP_TYPE_CHECKBOXES.get(TypeFilterProperty.SORCERY).getCheckBox().isSelected()) { ors.add(CardRulesPredicates.Presets.IS_SORCERY); }
if (ors.size() == 7) { if (ors.size() == 7) {
return Predicates.alwaysTrue(); return Predicates.alwaysTrue();
@@ -371,7 +369,7 @@ public class SFilterUtil {
private final JCheckBox checkBox = new JCheckBox(); private final JCheckBox checkBox = new JCheckBox();
private final Image img; private final Image img;
public ChbPnl(final Image img0) { public ChbPnl(final Image img0, final String tooltip) {
super(); super();
this.img = img0; this.img = img0;
this.setOpaque(false); this.setOpaque(false);
@@ -379,6 +377,7 @@ public class SFilterUtil {
checkBox.setOpaque(false); checkBox.setOpaque(false);
checkBox.setSelected(true); checkBox.setSelected(true);
checkBox.addItemListener(this); checkBox.addItemListener(this);
checkBox.setToolTipText(tooltip);
add(checkBox); add(checkBox);
this.addMouseListener(new MouseAdapter() { this.addMouseListener(new MouseAdapter() {

View File

@@ -103,19 +103,19 @@ public enum VCardCatalog implements IVDoc<CCardCatalog>, ITableContainer {
final String constraints = "w 57px!, h 20px!"; final String constraints = "w 57px!, h 20px!";
pnlStats.add(lblTotal, constraints); pnlStats.add(lblTotal, constraints);
pnlStats.add(lblBlack, constraints);
pnlStats.add(lblBlue, constraints);
pnlStats.add(lblGreen, constraints);
pnlStats.add(lblRed, constraints);
pnlStats.add(lblWhite, constraints); pnlStats.add(lblWhite, constraints);
pnlStats.add(lblBlue, constraints);
pnlStats.add(lblBlack, constraints);
pnlStats.add(lblRed, constraints);
pnlStats.add(lblGreen, constraints);
pnlStats.add(lblColorless, constraints); pnlStats.add(lblColorless, constraints);
pnlStats.add(lblLand, constraints);
pnlStats.add(lblArtifact, constraints); pnlStats.add(lblArtifact, constraints);
pnlStats.add(lblCreature, constraints); pnlStats.add(lblCreature, constraints);
pnlStats.add(lblEnchantment, constraints); pnlStats.add(lblEnchantment, constraints);
pnlStats.add(lblInstant, constraints);
pnlStats.add(lblLand, constraints);
pnlStats.add(lblPlaneswalker, constraints); pnlStats.add(lblPlaneswalker, constraints);
pnlStats.add(lblInstant, constraints);
pnlStats.add(lblSorcery, constraints); pnlStats.add(lblSorcery, constraints);
pnlAddButtons.setOpaque(false); pnlAddButtons.setOpaque(false);

View File

@@ -187,22 +187,21 @@ public enum VCurrentDeck implements IVDoc<CCurrentDeck>, ITableContainer {
final String constraints = "w 55px!, h 20px!"; final String constraints = "w 55px!, h 20px!";
pnlStats.add(lblTotal, constraints); pnlStats.add(lblTotal, constraints);
pnlStats.add(lblBlack, constraints);
pnlStats.add(lblBlue, constraints);
pnlStats.add(lblGreen, constraints);
pnlStats.add(lblRed, constraints);
pnlStats.add(lblWhite, constraints); pnlStats.add(lblWhite, constraints);
pnlStats.add(lblBlue, constraints);
pnlStats.add(lblBlack, constraints);
pnlStats.add(lblRed, constraints);
pnlStats.add(lblGreen, constraints);
pnlStats.add(lblColorless, constraints); pnlStats.add(lblColorless, constraints);
pnlStats.add(lblLand, constraints);
pnlStats.add(lblArtifact, constraints); pnlStats.add(lblArtifact, constraints);
pnlStats.add(lblCreature, constraints); pnlStats.add(lblCreature, constraints);
pnlStats.add(lblEnchantment, constraints); pnlStats.add(lblEnchantment, constraints);
pnlStats.add(lblInstant, constraints);
pnlStats.add(lblLand, constraints);
pnlStats.add(lblPlaneswalker, constraints); pnlStats.add(lblPlaneswalker, constraints);
pnlStats.add(lblInstant, constraints);
pnlStats.add(lblSorcery, constraints); pnlStats.add(lblSorcery, constraints);
pnlRemoveButtons.setOpaque(false);
pnlRemoveButtons.add(btnRemove, "w 30%!, h 30px!, gap 0 0 5px 5px"); pnlRemoveButtons.add(btnRemove, "w 30%!, h 30px!, gap 0 0 5px 5px");
pnlRemoveButtons.add(btnRemove4, "w 30%!, h 30px!, gap 0 0 5px 5px"); pnlRemoveButtons.add(btnRemove4, "w 30%!, h 30px!, gap 0 0 5px 5px");
pnlRemoveButtons.add(btnDoSideboard, "w 30%!, h 30px!, gap 0 0 5px 5px"); pnlRemoveButtons.add(btnDoSideboard, "w 30%!, h 30px!, gap 0 0 5px 5px");