diff --git a/.gitattributes b/.gitattributes index f92f8252249..4e9f8633d72 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1135,14 +1135,12 @@ forge-gui-mobile/src/forge/itemmanager/filters/CardColorFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/CardFormatFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/CardPowerFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/CardSearchFilter.java -text -forge-gui-mobile/src/forge/itemmanager/filters/CardSetFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/CardToughnessFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/CardTypeFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/DeckColorFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/DeckFolderFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/DeckFormatFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/DeckSearchFilter.java -text -forge-gui-mobile/src/forge/itemmanager/filters/DeckSetFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/DeckStatTypeFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java -text forge-gui-mobile/src/forge/itemmanager/filters/ItemFilter.java -text diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/CardFormatFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/CardFormatFilter.java index a26b17f5233..af880411ab3 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/CardFormatFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/CardFormatFilter.java @@ -1,10 +1,10 @@ package forge.itemmanager.filters; import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import forge.item.PaperCard; import forge.itemmanager.ItemManager; -import forge.itemmanager.SFilterUtil; public class CardFormatFilter extends FormatFilter { @@ -15,12 +15,18 @@ public class CardFormatFilter extends FormatFilter { @Override public ItemFilter createCopy() { CardFormatFilter copy = new CardFormatFilter(itemManager); - copy.formats.addAll(this.formats); + copy.format = this.format; return copy; } @Override protected final Predicate buildPredicate() { - return SFilterUtil.buildFormatFilter(this.formats, true); + if (format == null) { + return Predicates.alwaysTrue(); + } + if (format.getName() == null) { + return format.getFilterPrinted(); //if format is collection of sets, don't show reprints in other sets + } + return format.getFilterRules(); } } diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/CardSetFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/CardSetFilter.java deleted file mode 100644 index 3843c1968df..00000000000 --- a/forge-gui-mobile/src/forge/itemmanager/filters/CardSetFilter.java +++ /dev/null @@ -1,31 +0,0 @@ -package forge.itemmanager.filters; - -import forge.game.GameFormat; -import forge.item.PaperCard; -import forge.itemmanager.ItemManager; - -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - - -public class CardSetFilter extends CardFormatFilter { - private final Set sets = new HashSet(); - - public CardSetFilter(ItemManager itemManager0, Collection sets0) { - super(itemManager0); - this.sets.addAll(sets0); - this.formats.add(new GameFormat(null, this.sets, null)); - } - - @Override - public ItemFilter createCopy() { - return new CardSetFilter(itemManager, this.sets); - } - - @Override - public void reset() { - this.sets.clear(); - super.reset(); - } -} diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/DeckFormatFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/DeckFormatFilter.java index c34fdb1b9b9..d0d957ffd24 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/DeckFormatFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/DeckFormatFilter.java @@ -1,10 +1,10 @@ package forge.itemmanager.filters; import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import forge.deck.DeckProxy; import forge.itemmanager.ItemManager; -import forge.itemmanager.SFilterUtil; public class DeckFormatFilter extends FormatFilter { @@ -15,12 +15,20 @@ public class DeckFormatFilter extends FormatFilter { @Override public ItemFilter createCopy() { DeckFormatFilter copy = new DeckFormatFilter(itemManager); - copy.formats.addAll(this.formats); + copy.format = format; return copy; } @Override protected final Predicate buildPredicate() { - return DeckProxy.createPredicate(SFilterUtil.buildFormatFilter(this.formats, true)); + if (format == null) { + return Predicates.alwaysTrue(); + } + return new Predicate() { + @Override + public boolean apply(DeckProxy input) { + return format.isDeckLegal(input.getDeck()); + } + }; } } diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/DeckSetFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/DeckSetFilter.java deleted file mode 100644 index 1cd2f8949ad..00000000000 --- a/forge-gui-mobile/src/forge/itemmanager/filters/DeckSetFilter.java +++ /dev/null @@ -1,45 +0,0 @@ -package forge.itemmanager.filters; - -import forge.deck.DeckProxy; -import forge.game.GameFormat; -import forge.itemmanager.ItemManager; - -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - - -public class DeckSetFilter extends DeckFormatFilter { - private final Set sets = new HashSet(); - - public DeckSetFilter(ItemManager itemManager0, Collection sets0) { - super(itemManager0); - this.sets.addAll(sets0); - this.formats.add(new GameFormat(null, this.sets, null)); - } - - @Override - public ItemFilter createCopy() { - return new DeckSetFilter(itemManager, this.sets); - } - - @Override - public void reset() { - this.sets.clear(); - super.reset(); - } - - public void edit() { - /*final DialogChooseSets dialog = new DialogChooseSets(this.sets, null, true); - dialog.setOkCallback(new Runnable() { - @Override - public void run() { - sets.clear(); - sets.addAll(dialog.getSelectedSets()); - allowReprints = dialog.getWantReprints(); - formats.clear(); - formats.add(new GameFormat(null, sets, null)); - } - });*/ - } -} diff --git a/forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java b/forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java index 130f0e3d5a5..61bcec16146 100644 --- a/forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java +++ b/forge-gui-mobile/src/forge/itemmanager/filters/FormatFilter.java @@ -1,20 +1,38 @@ package forge.itemmanager.filters; +import forge.Forge; +import forge.Graphics; +import forge.assets.FSkinColor; import forge.assets.FSkinFont; +import forge.card.CardEdition; import forge.game.GameFormat; import forge.item.InventoryItem; import forge.itemmanager.ItemManager; import forge.model.FModel; +import forge.screens.FScreen; +import forge.screens.settings.SettingsScreen; +import forge.toolbox.FCheckBox; import forge.toolbox.FComboBox; +import forge.toolbox.FDisplayObject; import forge.toolbox.FEvent; +import forge.toolbox.FGroupList; +import forge.toolbox.FList; import forge.toolbox.FEvent.FEventHandler; +import forge.util.Callback; +import forge.util.TextUtil; +import forge.util.Utils; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Set; +import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; + public abstract class FormatFilter extends ItemFilter { - protected final Set formats = new HashSet(); + protected GameFormat format; private FComboBox cbxFormats = new FComboBox(); public FormatFilter(ItemManager itemManager0) { @@ -31,17 +49,21 @@ public abstract class FormatFilter extends ItemFilter extends ItemFilter boolean canAddFormat(GameFormat format, FormatFilter existingFilter) { - return existingFilter == null || !existingFilter.formats.contains(format); + @Override + public FDisplayObject getMainComponent() { + return cbxFormats; } @Override public boolean isEmpty() { - return formats.isEmpty(); + return format == null; } @Override @@ -70,4 +93,125 @@ public abstract class FormatFilter extends ItemFilter selectedSets = new HashSet(); + private final FGroupList lstSets = add(new FGroupList()); + + private MultiSetSelect() { + super("Choose Sets"); + + lstSets.addGroup("Core Sets"); + lstSets.addGroup("Expansions"); + lstSets.addGroup("Duel Decks"); + lstSets.addGroup("From the Vault"); + lstSets.addGroup("Premium Deck Series"); + lstSets.addGroup("Reprint Sets"); + lstSets.addGroup("Starter Sets"); + lstSets.addGroup("Custom Sets"); + lstSets.addGroup("Other Sets"); + + List sets = new ArrayList(); + for (CardEdition set : FModel.getMagicDb().getEditions()) { + sets.add(set); + } + Collections.sort(sets); + Collections.reverse(sets); + + for (CardEdition set : sets) { + switch (set.getType()) { + case CORE: + lstSets.addItem(set, 0); + break; + case EXPANSION: + lstSets.addItem(set, 1); + break; + case DUEL_DECKS: + lstSets.addItem(set, 2); + break; + case FROM_THE_VAULT: + lstSets.addItem(set, 3); + break; + case PREMIUM_DECK_SERIES: + lstSets.addItem(set, 4); + break; + case REPRINT: + lstSets.addItem(set, 5); + break; + case STARTER: + lstSets.addItem(set, 6); + break; + case THIRDPARTY: + lstSets.addItem(set, 7); + break; + default: + lstSets.addItem(set, 8); + break; + } + } + + lstSets.setListItemRenderer(new SetRenderer()); + } + + @Override + public void onClose(Callback canCloseCallback) { + if (selectedSets.size() > 0) { + List setCodes = new ArrayList(); + List sortedSets = new ArrayList(selectedSets); + Collections.sort(sortedSets); + Collections.reverse(sortedSets); + for (CardEdition set : sortedSets) { + setCodes.add(set.getCode()); + } + format = new GameFormat(null, setCodes, null); + cbxFormats.setText(TextUtil.join(setCodes, ", ")); + applyChange(); + } + else { //if nothing selected, switch to All Sets item + cbxFormats.setSelectedIndex(0); + } + super.onClose(canCloseCallback); + } + + @Override + protected void doLayout(float startY, float width, float height) { + lstSets.setBounds(0, startY, width, height - startY); + } + + private class SetRenderer extends FList.ListItemRenderer { + @Override + public float getItemHeight() { + return Utils.AVG_FINGER_HEIGHT; + } + + @Override + public boolean tap(Integer index, CardEdition value, float x, float y, int count) { + if (selectedSets.contains(value)) { + selectedSets.remove(value); + } + else { + selectedSets.add(value); + } + return true; + } + + @Override + public void drawValue(Graphics g, Integer index, CardEdition value, FSkinFont font, FSkinColor foreColor, FSkinColor backColor, boolean pressed, float x, float y, float w, float h) { + float offset = w * SettingsScreen.INSETS_FACTOR - FList.PADDING; //increase padding for settings items + x += offset; + y += offset; + w -= 2 * offset; + h -= 2 * offset; + + float textHeight = h; + h *= 0.66f; + + g.drawText(value.toString(), font, foreColor, x, y, w - h - FList.PADDING, textHeight, false, HAlignment.LEFT, true); + + x += w - h; + y += (textHeight - h) / 2; + FCheckBox.drawCheckBox(g, SettingsScreen.DESC_COLOR, foreColor, selectedSets.contains(value), x, y, h, h); + } + } + } } diff --git a/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java b/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java index bf091964454..7e341b3cb0e 100644 --- a/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java +++ b/forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java @@ -943,96 +943,6 @@ public class ConstructedScreen extends LaunchScreen { } } } - - - /** This listener unlocks the relevant buttons for players - * and enables/disables archenemy combobox as appropriate. */ - /*private ItemListener iListenerVariants = new ItemListener() { - @Override - public void itemStateChanged(ItemEvent arg0) { - FCheckBox cb = (FCheckBox) arg0.getSource(); - GameType variantType = null; - - if (cb == vntVanguard) { - variantType = GameType.Vanguard; - } - else if (cb == vntCommander) { - variantType = GameType.Commander; - } - else if (cb == vntPlanechase) { - variantType = GameType.Planechase; - } - else if (cb == vntArchenemy) { - variantType = archenemyType.contains("Classic") ? GameType.Archenemy : GameType.ArchenemyRumble; - comboArchenemy.setEnabled(vntArchenemy.isSelected()); - if (arg0.getStateChange() != ItemEvent.SELECTED) { - appliedVariants.remove(GameType.Archenemy); - appliedVariants.remove(GameType.ArchenemyRumble); - } - } - - if (null != variantType) { - if (arg0.getStateChange() == ItemEvent.SELECTED) { - appliedVariants.add(variantType); - currentGameMode = variantType; - } - else { - appliedVariants.remove(variantType); - if (currentGameMode == variantType) { - currentGameMode = GameType.Constructed; - } - } - } - - for (PlayerPanel pp : playerPanels) { - pp.toggleIsPlayerArchenemy(); - pp.updateVariantControlsVisibility(); - } - } - }; - - // Listens to the archenemy combo box - private ActionListener aeComboListener = new ActionListener() { - @SuppressWarnings("unchecked") - @Override - public void actionPerformed(ActionEvent e) { - FComboBox cb = (FComboBox)e.getSource(); - archenemyType = (String)cb.getSelectedItem(); - GameType mode = archenemyType.contains("Classic") ? GameType.Archenemy : GameType.ArchenemyRumble; - appliedVariants.remove(GameType.Archenemy); - appliedVariants.remove(GameType.ArchenemyRumble); - appliedVariants.add(mode); - - currentGameMode = mode; - for (PlayerPanel pp : playerPanels) { - pp.toggleIsPlayerArchenemy(); - pp.updateVariantControlsVisibility(); - } - } - }; - - //This listener will look for a vanguard avatar being selected in the lists - //and update the corresponding detail panel. - private ListSelectionListener vgdLSListener = new ListSelectionListener() { - @Override - public void valueChanged(ListSelectionEvent e) { - int index = vgdAvatarLists.indexOf(e.getSource()); - Object obj = vgdAvatarLists.get(index).getSelectedValue(); - PlayerPanel pp = playerPanels.get(index); - CardDetailPanel cdp = vgdAvatarDetails.get(index); - - if (obj instanceof PaperCard) { - pp.setVanguardButtonText(((PaperCard) obj).getName()); - cdp.setCard(Card.getCardForUi((PaperCard) obj)); - cdp.setVisible(true); - refreshPanels(false, true); - } - else { - pp.setVanguardButtonText((String) obj); - cdp.setVisible(false); - } - } - };*/ ///////////////////////////////////// //========== METHODS FOR VARIANTS diff --git a/forge-gui-mobile/src/forge/toolbox/FGroupList.java b/forge-gui-mobile/src/forge/toolbox/FGroupList.java index f64b4238065..64411023d5a 100644 --- a/forge-gui-mobile/src/forge/toolbox/FGroupList.java +++ b/forge-gui-mobile/src/forge/toolbox/FGroupList.java @@ -154,9 +154,11 @@ public class FGroupList extends FScrollPane { float groupHeight; for (ListGroup group : groups) { - groupHeight = group.getPreferredHeight(); - group.setBounds(0, y, visibleWidth, groupHeight); - y += groupHeight; + if (group.isVisible()) { + groupHeight = group.getPreferredHeight(); + group.setBounds(0, y, visibleWidth, groupHeight); + y += groupHeight; + } } return new ScrollBounds(visibleWidth, y); @@ -181,16 +183,19 @@ public class FGroupList extends FScrollPane { } }).build()); } + setVisible(false); //hide by default unless it has items } public void addItem(ListItem item) { items.add(item); add(item); + setVisible(true); } public boolean removeItem(ListItem item) { if (items.remove(item)) { remove(item); + setVisible(items.size() > 0); return true; } return false;