From 8b4c722ae2de41d43add2a8928f66323a50d67f1 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 24 May 2025 01:08:46 +0400 Subject: [PATCH] GUI, deck: now a duplicated cards adds to the same place as original cards (close #3314); --- .../java/mage/client/cards/DragCardGrid.java | 40 +++++++++++++------ .../java/mage/client/deckeditor/DeckArea.java | 4 +- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 38b89230725..7e793960016 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -334,7 +334,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg // Add new cards to grid for (CardView card : cards) { card.setSelected(true); - addCardView(card, false); + addCardView(card, null); eventSource.fireEvent(card, ClientEventType.DECK_ADD_SPECIFIC_CARD); } layoutGrid(); @@ -1322,7 +1322,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg // re-insert for (CardView card : allCards) { - sortIntoGrid(card); + sortIntoGrid(card, null); } trimGrid(); @@ -1717,7 +1717,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg if (acard.getName().equals(card.getName())) { CardView pimpedCard = new CardView(acard); - addCardView(pimpedCard, false); + addCardView(pimpedCard, null); eventSource.fireEvent(pimpedCard, ClientEventType.DECK_ADD_SPECIFIC_CARD); pimpedCards.put(pimpedCard, 1); didModify = true; @@ -1729,7 +1729,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg if (didModify) { for (CardView c : pimpedCards.keySet()) { - sortIntoGrid(c); + sortIntoGrid(c, null); } trimGrid(); @@ -1762,7 +1762,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg CardView oldestCardView = new CardView(oldestCardInfo.createMockCard()); this.removeCardView(card); eventSource.fireEvent(card, ClientEventType.DECK_REMOVE_SPECIFIC_CARD); - this.addCardView(oldestCardView, false); + this.addCardView(oldestCardView, null); eventSource.fireEvent(oldestCardView, ClientEventType.DECK_ADD_SPECIFIC_CARD); newStack.add(oldestCardView); } else { @@ -1814,10 +1814,10 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg for (CardView newCard : cardsView.values()) { if (!cardViews.containsKey(newCard.getId())) { // Is a new card - addCardView(newCard, false); + addCardView(newCard, null); // Put it into the appropirate place in the grid given the current sort - sortIntoGrid(newCard); + sortIntoGrid(newCard, null); // Mark didModify = true; @@ -1837,7 +1837,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg for (CardView newCard : cardsView.values()) { if (!cardViews.containsKey(newCard.getId())) { // Add the new card - addCardView(newCard, false); + addCardView(newCard, null); // Add the new card to tracking Map> forSetCode; @@ -1889,7 +1889,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg for (List orphans : tracked.values()) { for (CardView orphan : orphans) { logger.info("Orphan when setting with layout: "); - sortIntoGrid(orphan); + sortIntoGrid(orphan, null); } } } @@ -1984,7 +1984,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg menu.show(e.getComponent(), e.getX(), e.getY()); } - public void addCardView(final CardView card, boolean duplicated) { + public void addCardView(final CardView card, final CardView duplicatedFromCard) { allCards.add(card); // Update counts @@ -2019,8 +2019,8 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg cardContent.add(cardPanel); cardViews.put(card.getId(), cardPanel); - if (duplicated) { - sortIntoGrid(card); + if (duplicatedFromCard != null) { + sortIntoGrid(card, duplicatedFromCard); eventSource.fireEvent(card, ClientEventType.DECK_ADD_SPECIFIC_CARD); // clear grid from empty rows @@ -2094,7 +2094,21 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg * * @param newCard Card to add to the cardGrid array. */ - private void sortIntoGrid(CardView newCard) { + private void sortIntoGrid(CardView newCard, CardView duplicatedFromCard) { + // fast put duplicated card to the same place as original + if (duplicatedFromCard != null) { + for (List> gridRow : cardGrid) { + for (List gridStack : gridRow) { + for (int i = 0; i < gridStack.size(); i++) { + if (gridStack.get(i).equals(duplicatedFromCard)) { + gridStack.add(i, newCard); + return; + } + } + } + } + } + // row 1 must exists if (cardGrid.isEmpty()) { cardGrid.add(0, new ArrayList<>()); diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java index a1f34640c58..7ce8d8c987d 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java @@ -110,7 +110,7 @@ public class DeckArea extends javax.swing.JPanel { sideboardList.deselectAll(); for (CardView card : cards) { CardView newCard = new CardView(card); - deckList.addCardView(newCard, true); + deckList.addCardView(newCard, card); } } @@ -150,7 +150,7 @@ public class DeckArea extends javax.swing.JPanel { deckList.deselectAll(); for (CardView card : cards) { CardView newCard = new CardView(card); - sideboardList.addCardView(newCard, true); + sideboardList.addCardView(newCard, card); } }