GUI, deck: now a duplicated cards adds to the same place as original cards (close #3314);

This commit is contained in:
Oleg Agafonov 2025-05-24 01:08:46 +04:00
parent 8364271c31
commit 8b4c722ae2
2 changed files with 29 additions and 15 deletions

View file

@ -334,7 +334,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
// Add new cards to grid // Add new cards to grid
for (CardView card : cards) { for (CardView card : cards) {
card.setSelected(true); card.setSelected(true);
addCardView(card, false); addCardView(card, null);
eventSource.fireEvent(card, ClientEventType.DECK_ADD_SPECIFIC_CARD); eventSource.fireEvent(card, ClientEventType.DECK_ADD_SPECIFIC_CARD);
} }
layoutGrid(); layoutGrid();
@ -1322,7 +1322,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
// re-insert // re-insert
for (CardView card : allCards) { for (CardView card : allCards) {
sortIntoGrid(card); sortIntoGrid(card, null);
} }
trimGrid(); trimGrid();
@ -1717,7 +1717,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
if (acard.getName().equals(card.getName())) { if (acard.getName().equals(card.getName())) {
CardView pimpedCard = new CardView(acard); CardView pimpedCard = new CardView(acard);
addCardView(pimpedCard, false); addCardView(pimpedCard, null);
eventSource.fireEvent(pimpedCard, ClientEventType.DECK_ADD_SPECIFIC_CARD); eventSource.fireEvent(pimpedCard, ClientEventType.DECK_ADD_SPECIFIC_CARD);
pimpedCards.put(pimpedCard, 1); pimpedCards.put(pimpedCard, 1);
didModify = true; didModify = true;
@ -1729,7 +1729,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
if (didModify) { if (didModify) {
for (CardView c : pimpedCards.keySet()) { for (CardView c : pimpedCards.keySet()) {
sortIntoGrid(c); sortIntoGrid(c, null);
} }
trimGrid(); trimGrid();
@ -1762,7 +1762,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
CardView oldestCardView = new CardView(oldestCardInfo.createMockCard()); CardView oldestCardView = new CardView(oldestCardInfo.createMockCard());
this.removeCardView(card); this.removeCardView(card);
eventSource.fireEvent(card, ClientEventType.DECK_REMOVE_SPECIFIC_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); eventSource.fireEvent(oldestCardView, ClientEventType.DECK_ADD_SPECIFIC_CARD);
newStack.add(oldestCardView); newStack.add(oldestCardView);
} else { } else {
@ -1814,10 +1814,10 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
for (CardView newCard : cardsView.values()) { for (CardView newCard : cardsView.values()) {
if (!cardViews.containsKey(newCard.getId())) { if (!cardViews.containsKey(newCard.getId())) {
// Is a new card // Is a new card
addCardView(newCard, false); addCardView(newCard, null);
// Put it into the appropirate place in the grid given the current sort // Put it into the appropirate place in the grid given the current sort
sortIntoGrid(newCard); sortIntoGrid(newCard, null);
// Mark // Mark
didModify = true; didModify = true;
@ -1837,7 +1837,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
for (CardView newCard : cardsView.values()) { for (CardView newCard : cardsView.values()) {
if (!cardViews.containsKey(newCard.getId())) { if (!cardViews.containsKey(newCard.getId())) {
// Add the new card // Add the new card
addCardView(newCard, false); addCardView(newCard, null);
// Add the new card to tracking // Add the new card to tracking
Map<String, List<CardView>> forSetCode; Map<String, List<CardView>> forSetCode;
@ -1889,7 +1889,7 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
for (List<CardView> orphans : tracked.values()) { for (List<CardView> orphans : tracked.values()) {
for (CardView orphan : orphans) { for (CardView orphan : orphans) {
logger.info("Orphan when setting with layout: "); 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()); 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); allCards.add(card);
// Update counts // Update counts
@ -2019,8 +2019,8 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
cardContent.add(cardPanel); cardContent.add(cardPanel);
cardViews.put(card.getId(), cardPanel); cardViews.put(card.getId(), cardPanel);
if (duplicated) { if (duplicatedFromCard != null) {
sortIntoGrid(card); sortIntoGrid(card, duplicatedFromCard);
eventSource.fireEvent(card, ClientEventType.DECK_ADD_SPECIFIC_CARD); eventSource.fireEvent(card, ClientEventType.DECK_ADD_SPECIFIC_CARD);
// clear grid from empty rows // 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. * @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<List<CardView>> gridRow : cardGrid) {
for (List<CardView> 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 // row 1 must exists
if (cardGrid.isEmpty()) { if (cardGrid.isEmpty()) {
cardGrid.add(0, new ArrayList<>()); cardGrid.add(0, new ArrayList<>());

View file

@ -110,7 +110,7 @@ public class DeckArea extends javax.swing.JPanel {
sideboardList.deselectAll(); sideboardList.deselectAll();
for (CardView card : cards) { for (CardView card : cards) {
CardView newCard = new CardView(card); 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(); deckList.deselectAll();
for (CardView card : cards) { for (CardView card : cards) {
CardView newCard = new CardView(card); CardView newCard = new CardView(card);
sideboardList.addCardView(newCard, true); sideboardList.addCardView(newCard, card);
} }
} }