diff --git a/Mage.Client/src/main/java/mage/client/cards/CardArea.java b/Mage.Client/src/main/java/mage/client/cards/CardArea.java index 4b73077031b..d49afeb9b03 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardArea.java +++ b/Mage.Client/src/main/java/mage/client/cards/CardArea.java @@ -18,15 +18,18 @@ import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; /** * Panel with cards list, can show cards in two modes: * - cards one by one in the line; - * - stacked and multicolumns (if many cards); + * - stacked and multi-columns (if many cards); * - * Uses in some dialogs like pile choose and cards choosing + * Used in some dialogs like pile choose, cards choosing/targeting and test render */ public class CardArea extends JPanel implements CardEventProducer { @@ -34,7 +37,10 @@ public class CardArea extends JPanel implements CardEventProducer { protected final CardEventSource cardEventSource = new CardEventSource(); - private static int MAX_CARDS_PER_COLUMN = 20; // max cards amount in one column + private static final int MAX_CARDS_PER_COLUMN = 20; // max cards amount in one column + + // TODO: add fast search and sort by card zones + private static final boolean SORTED_BY_CARD_NAME = true; private boolean reloaded = false; private final javax.swing.JLayeredPane cardArea; @@ -160,10 +166,20 @@ public class CardArea extends JPanel implements CardEventProducer { fixDialogSize(); } + private List getSortedList(CardsView showCards) { + if (SORTED_BY_CARD_NAME) { + return showCards.values().stream() + .sorted(Comparator.comparing(CardView::getName)) + .collect(Collectors.toList()); + } else { + return new ArrayList<>(showCards.values()); + } + } + private void loadCardsFew(CardsView showCards, BigCard bigCard, UUID gameId) { Rectangle rectangle = new Rectangle(cardDimension.width, cardDimension.height); int cardsAdded = 0; - for (CardView card : showCards.values()) { + for (CardView card : getSortedList(showCards)) { if (cardsAdded > 0) { rectangle.translate(cardDimension.width + xOffsetBetweenCardsOrColumns, 0); } @@ -219,7 +235,7 @@ public class CardArea extends JPanel implements CardEventProducer { if (showCards != null && !showCards.isEmpty()) { Rectangle rectangle = new Rectangle(cardDimension.width, cardDimension.height); int count = 0; - for (CardView card : showCards.values()) { + for (CardView card : getSortedList(showCards)) { addCard(card, bigCard, gameId, rectangle); if (count >= MAX_CARDS_PER_COLUMN) { rectangle.translate(cardDimension.width + xOffsetBetweenCardsOrColumns, -(MAX_CARDS_PER_COLUMN * verticalCardOffset)); diff --git a/Mage.Client/src/main/java/mage/client/dialog/ShowCardsDialog.java b/Mage.Client/src/main/java/mage/client/dialog/ShowCardsDialog.java index 2419c5101b5..ad35a0a1dff 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ShowCardsDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ShowCardsDialog.java @@ -22,7 +22,7 @@ /** * Game GUI: choose target card from the cards list (example: exile and choose card to cast, choose triggers order, etc) * - * @author BetaSteward_at_googlemail.com + * @author BetaSteward_at_googlemail.com, JayDi85 */ public class ShowCardsDialog extends MageDialog {