From 23f65a2b9e1b7ec0663c261b0eb7a28dd5b3c7e2 Mon Sep 17 00:00:00 2001 From: drdev Date: Sun, 6 Sep 2015 03:47:20 +0000 Subject: [PATCH] Improve display of advanced color filters --- .../src/main/java/forge/card/MagicColor.java | 28 +++++++++---- .../filters/AdvancedSearchFilter.java | 8 ++-- .../src/forge/toolbox/FLabel.java | 39 +++++++++++++++---- .../forge/itemmanager/AdvancedSearch.java | 4 +- 4 files changed, 57 insertions(+), 22 deletions(-) diff --git a/forge-core/src/main/java/forge/card/MagicColor.java b/forge-core/src/main/java/forge/card/MagicColor.java index 3e5aad9aebd..9e5d550233f 100644 --- a/forge-core/src/main/java/forge/card/MagicColor.java +++ b/forge-core/src/main/java/forge/card/MagicColor.java @@ -1,5 +1,6 @@ package forge.card; +import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -153,19 +154,20 @@ public final class MagicColor { } public enum Color { - WHITE(Constant.WHITE, MagicColor.WHITE), - BLUE(Constant.BLUE, MagicColor.BLUE), - BLACK(Constant.BLACK, MagicColor.BLACK), - RED(Constant.RED, MagicColor.RED), - GREEN(Constant.GREEN, MagicColor.GREEN), - COLORLESS(Constant.COLORLESS, MagicColor.COLORLESS); + WHITE(Constant.WHITE, MagicColor.WHITE, "{W}"), + BLUE(Constant.BLUE, MagicColor.BLUE, "{U}"), + BLACK(Constant.BLACK, MagicColor.BLACK, "{B}"), + RED(Constant.RED, MagicColor.RED, "{R}"), + GREEN(Constant.GREEN, MagicColor.GREEN, "{G}"), + COLORLESS(Constant.COLORLESS, MagicColor.COLORLESS, "{X}"); - private final String name; + private final String name, symbol; private final byte colormask; - private Color(String name0, byte colormask0) { + private Color(String name0, byte colormask0, String symbol0) { name = name0; colormask = colormask0; + symbol = symbol0; } public String getName() { @@ -174,9 +176,19 @@ public final class MagicColor { public byte getColormask() { return colormask; } + public String getSymbol() { + return symbol; + } @Override public String toString() { return name; } } + + public static final Function FN_GET_SYMBOL = new Function() { + @Override + public String apply(final Color color) { + return color.symbol; + } + }; } diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java index f0a3e3b195f..ea4a62131e0 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/AdvancedSearchFilter.java @@ -120,7 +120,7 @@ public class AdvancedSearchFilter extends ItemFilter private void updateLabel() { StringBuilder builder = new StringBuilder(); - builder.append("Filters: "); + builder.append("Filter: "); if (expression.isEmpty()) { builder.append("(none)"); } @@ -136,7 +136,7 @@ public class AdvancedSearchFilter extends ItemFilter if (expression.isEmpty()) { return ""; } StringBuilder builder = new StringBuilder(); - builder.append("Filters:\n"); + builder.append("Filter:\n"); String indent = ""; @@ -181,7 +181,7 @@ public class AdvancedSearchFilter extends ItemFilter private class FiltersLabel extends FLabel { private FiltersLabel() { - super(new FLabel.Builder().align(HAlignment.LEFT).font(ListLabelFilter.LABEL_FONT)); + super(new FLabel.Builder().align(HAlignment.LEFT).parseSymbols(true).font(ListLabelFilter.LABEL_FONT)); } @Override @@ -294,7 +294,7 @@ public class AdvancedSearchFilter extends ItemFilter btnNotAfterParen = add(new FLabel.Builder().align(HAlignment.CENTER).text("NOT").selectable().build()); final String emptyFilterText = "Select Filter..."; - btnFilter = add(new FLabel.ButtonBuilder().text(emptyFilterText).command(new FEventHandler() { + btnFilter = add(new FLabel.ButtonBuilder().text(emptyFilterText).parseSymbols(true).command(new FEventHandler() { @Override public void handleEvent(FEvent e) { FThreads.invokeInBackgroundThread(new Runnable() { diff --git a/forge-gui-mobile/src/forge/toolbox/FLabel.java b/forge-gui-mobile/src/forge/toolbox/FLabel.java index 5e7ea726548..24784b723d2 100644 --- a/forge-gui-mobile/src/forge/toolbox/FLabel.java +++ b/forge-gui-mobile/src/forge/toolbox/FLabel.java @@ -9,6 +9,7 @@ import forge.UiCommand; import forge.assets.FImage; import forge.assets.FSkinColor; import forge.assets.FSkinProp; +import forge.assets.TextRenderer; import forge.assets.FSkinColor.Colors; import forge.assets.FSkinFont; import forge.interfaces.IButton; @@ -33,6 +34,7 @@ public class FLabel extends FDisplayObject implements IButton { private boolean bldIconInBackground = false; private boolean bldIconScaleAuto = true; private boolean bldEnabled = true; + private boolean bldParseSymbols = true; private String bldText; private FImage bldIcon; @@ -63,6 +65,8 @@ public class FLabel extends FDisplayObject implements IButton { public Builder iconInBackground() { iconInBackground(true); return this; } public Builder textColor(final FSkinColor c0) { this.bldTextColor = c0; return this; } public Builder pressedColor(final FSkinColor c0) { this.bldPressedColor = c0; return this; } + public Builder parseSymbols() { parseSymbols(true); return this; } + public Builder parseSymbols(final boolean b0) { this.bldParseSymbols = b0; return this; } } // sets better defaults for button labels @@ -105,6 +109,7 @@ public class FLabel extends FDisplayObject implements IButton { private FImage icon; private FSkinColor textColor, pressedColor; private FEventHandler command; + private TextRenderer textRenderer; // Call this using FLabel.Builder()... protected FLabel(final Builder b0) { @@ -123,6 +128,9 @@ public class FLabel extends FDisplayObject implements IButton { textColor = b0.bldTextColor; pressedColor = b0.bldPressedColor; command = b0.bldCommand; + if (b0.bldParseSymbols) { + textRenderer = new TextRenderer(); + } setEnabled(b0.bldEnabled); } @@ -328,7 +336,7 @@ public class FLabel extends FDisplayObject implements IButton { if (alignment == HAlignment.CENTER) { float dx; while (true) { - dx = (w - iconOffset - font.getMultiLineBounds(text).width) / 2; + dx = (w - iconOffset - getTextWidth()) / 2; if (dx > 0) { x += dx; break; @@ -342,7 +350,7 @@ public class FLabel extends FDisplayObject implements IButton { else if (alignment == HAlignment.RIGHT) { float dx; while (true) { - dx = (w - iconWidth - font.getMultiLineBounds(text).width - insets.x); + dx = (w - iconWidth - getTextWidth() - insets.x); if (dx > 0) { x += dx; break; @@ -365,18 +373,33 @@ public class FLabel extends FDisplayObject implements IButton { } x += iconOffset; w -= iconOffset; - g.startClip(x, y, w, h); - g.drawText(text, font, textColor, x, y, w, h, false, HAlignment.LEFT, true); - g.endClip(); + + drawText(g, x, y, w, h, HAlignment.LEFT); } } else if (!text.isEmpty()) { - g.startClip(x, y, w, h); - g.drawText(text, font, textColor, x, y, w, h, false, alignment, true); - g.endClip(); + drawText(g, x, y, w, h, alignment); } } + private void drawText(Graphics g, float x, float y, float w, float h, HAlignment align) { + g.startClip(x, y, w, h); + if (textRenderer == null) { + g.drawText(text, font, textColor, x, y, w, h, false, align, true); + } + else { + textRenderer.drawText(g, text, font, textColor, x, y, w, h, y, h, false, align, true); + } + g.endClip(); + } + + private float getTextWidth() { + if (textRenderer == null) { + return font.getMultiLineBounds(text).width; + } + return textRenderer.getBounds(text, font).width; + } + //use FEventHandler one except when references as IButton @Override public void setCommand(final UiCommand command0) { diff --git a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java index 417be76ff52..c6c6147f230 100644 --- a/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java +++ b/forge-gui/src/main/java/forge/itemmanager/AdvancedSearch.java @@ -55,7 +55,7 @@ public class AdvancedSearch { return FModel.getFormats().getAllFormatsOfCard(input); } }), - CARD_COLOR("Color", PaperCard.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(Arrays.asList(MagicColor.Color.values())) { + CARD_COLOR("Color", PaperCard.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(Arrays.asList(MagicColor.Color.values()), MagicColor.FN_GET_SYMBOL) { @Override protected MagicColor.Color getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead"); @@ -65,7 +65,7 @@ public class AdvancedSearch { return input.getRules().getColor().toEnumSet(); } }), - CARD_COLOR_IDENTITY("Color Identity", PaperCard.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(Arrays.asList(MagicColor.Color.values())) { + CARD_COLOR_IDENTITY("Color Identity", PaperCard.class, FilterOperator.MULTI_LIST_OPS, new CustomListEvaluator(Arrays.asList(MagicColor.Color.values()), MagicColor.FN_GET_SYMBOL) { @Override protected MagicColor.Color getItemValue(PaperCard input) { throw new RuntimeException("getItemValues should be called instead");