mirror of
https://github.com/magefree/mage.git
synced 2025-12-25 04:52:07 -08:00
GUI: added problem cards selection on legality label clicks (#6854)
This commit is contained in:
parent
a4af5501f9
commit
486c0d7c2c
17 changed files with 167 additions and 105 deletions
|
|
@ -1064,6 +1064,19 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg
|
|||
}
|
||||
}
|
||||
|
||||
public void selectByName(List<String> cardNames) {
|
||||
for (List<List<CardView>> gridRow : cardGrid) {
|
||||
for (List<CardView> stack : gridRow) {
|
||||
for (CardView card : stack) {
|
||||
if (cardNames.contains(card.getName())) {
|
||||
card.setSelected(true);
|
||||
cardViews.get(card.getId()).update(card);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void hideSelection() {
|
||||
Collection<CardView> toHide = dragCardList();
|
||||
for (DragCardGridListener l : listeners) {
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ public class LegalityLabel extends JLabel {
|
|||
return sortedErrorsList.stream()
|
||||
.reduce("<html><body>"
|
||||
+ "<p>Deck is <span style='color:#BF544A;font-weight:bold;'>INVALID</span></p>"
|
||||
+ "<u>The following problems have been found:</u>"
|
||||
+ "<u>The following problems have been found (click to select problem cards):</u>"
|
||||
+ "<br>"
|
||||
+ "<table style=\"table-layout: fixed; width: " + TOOLTIP_TABLE_WIDTH + "px\">",
|
||||
(str, error) -> String.format("%s<tr><td style=\"word-wrap: break-word\"><b>%s</b></td><td style=\"word-wrap: break-word\">%s</td></tr>", str, escapeHtml(error.getGroup()), escapeHtml(error.getMessage())), String::concat)
|
||||
|
|
@ -125,7 +125,7 @@ public class LegalityLabel extends JLabel {
|
|||
return sortedErrorsList.stream()
|
||||
.reduce("<html><body>"
|
||||
+ "<p>Deck is <span style='color:#b8860b;font-weight:bold;'>PARTLY VALID</span></p>"
|
||||
+ "<u>The following problems have been found:</u>"
|
||||
+ "<u>The following problems have been found (click to select problem cards):</u>"
|
||||
+ "<br>"
|
||||
+ "<table style=\"table-layout: fixed; width: " + TOOLTIP_TABLE_WIDTH + "px\">",
|
||||
(str, error) -> String.format("%s<tr><td style=\"word-wrap: break-word\"><b>%s</b></td><td style=\"word-wrap: break-word\">%s</td></tr>", str, escapeHtml(error.getGroup()), escapeHtml(error.getMessage())), String::concat)
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import mage.client.MageFrame;
|
|||
import mage.client.SessionHandler;
|
||||
import mage.client.cards.BigCard;
|
||||
import mage.client.cards.ICardGrid;
|
||||
import mage.client.components.LegalityLabel;
|
||||
import mage.client.constants.Constants.DeckEditorMode;
|
||||
import mage.client.deck.generator.DeckGenerator;
|
||||
import mage.client.deck.generator.DeckGenerator.DeckGeneratorException;
|
||||
|
|
@ -27,12 +28,11 @@ import mage.view.SimpleCardView;
|
|||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.filechooser.FileFilter;
|
||||
import java.awt.*;
|
||||
import java.awt.dnd.DropTarget;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.HierarchyEvent;
|
||||
import java.awt.event.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
|
@ -48,11 +48,15 @@ import static mage.cards.decks.DeckFormats.XMAGE_INFO;
|
|||
public class DeckEditorPanel extends javax.swing.JPanel {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(DeckEditorPanel.class);
|
||||
private static final Border LEGALITY_LABEL_BORDER_SELECTED = BorderFactory.createLineBorder(Color.gray, 2);
|
||||
private static final Border LEGALITY_LABEL_BORDER_EMPTY = BorderFactory.createEmptyBorder();
|
||||
|
||||
private final JFileChooser fcSelectDeck;
|
||||
private final JFileChooser fcImportDeck;
|
||||
private final JFileChooser fcExportDeck;
|
||||
private Deck deck = new Deck();
|
||||
private final Map<UUID, Card> temporaryCards = new HashMap<>(); // Cards dragged out of one part of the view into another
|
||||
private final String LAST_DECK_FOLDER = "lastDeckFolder";
|
||||
private Deck deck = new Deck();
|
||||
private boolean isShowCardInfo = false;
|
||||
private UUID tableId;
|
||||
private DeckEditorMode mode;
|
||||
|
|
@ -60,7 +64,41 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
private javax.swing.Timer countdown;
|
||||
private UpdateDeckTask updateDeckTask;
|
||||
private int timeToSubmit = -1;
|
||||
private final String LAST_DECK_FOLDER = "lastDeckFolder";
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private mage.client.cards.BigCard bigCard;
|
||||
private javax.swing.JButton btnAddLand;
|
||||
private javax.swing.JButton btnExit;
|
||||
private javax.swing.JButton btnExport;
|
||||
private javax.swing.JButton btnGenDeck;
|
||||
private javax.swing.JButton btnImport;
|
||||
private javax.swing.JButton btnLegality;
|
||||
private javax.swing.JButton btnLoad;
|
||||
private javax.swing.JButton btnNew;
|
||||
private javax.swing.JButton btnSave;
|
||||
private javax.swing.JButton btnSubmit;
|
||||
private javax.swing.JButton btnSubmitTimer;
|
||||
private JComponent cardInfoPane;
|
||||
/*
|
||||
private org.mage.plugins.card.info.CardInfoPaneImpl cardInfoPane;
|
||||
*/
|
||||
private mage.client.deckeditor.CardSelector cardSelector;
|
||||
private mage.client.deckeditor.DeckArea deckArea;
|
||||
private mage.client.deckeditor.DeckLegalityPanel deckLegalityDisplay;
|
||||
private javax.swing.JLabel lblDeckName;
|
||||
private javax.swing.JPanel panelDeck;
|
||||
private javax.swing.JPanel panelDeckCreate;
|
||||
private javax.swing.JPanel panelDeckDraft;
|
||||
private javax.swing.JPanel panelDeckExit;
|
||||
private javax.swing.JPanel panelDeckLands;
|
||||
private javax.swing.JPanel panelDeckLoad;
|
||||
private javax.swing.JPanel panelDeckName;
|
||||
private javax.swing.JPanel panelDeckSave;
|
||||
private javax.swing.JPanel panelInfo;
|
||||
private javax.swing.JPanel panelLeft;
|
||||
private javax.swing.JSplitPane panelRight;
|
||||
private javax.swing.JScrollPane scrollPaneInfo;
|
||||
private javax.swing.JTextField txtDeckName;
|
||||
private javax.swing.JTextField txtTimeRemaining;
|
||||
|
||||
public DeckEditorPanel() {
|
||||
initComponents();
|
||||
|
|
@ -105,6 +143,38 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
}
|
||||
}
|
||||
});
|
||||
|
||||
// deck legality cards selection
|
||||
Arrays.stream(deckLegalityDisplay.getComponents())
|
||||
.filter(c -> c instanceof LegalityLabel)
|
||||
.forEach(c -> {
|
||||
c.addMouseListener(new MouseAdapter() {
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
List<String> cardNames = new ArrayList<>();
|
||||
LegalityLabel label = (LegalityLabel) e.getComponent();
|
||||
label.getValidator().getErrorsList().stream()
|
||||
.map(DeckValidatorError::getCardName)
|
||||
.filter(Objects::nonNull)
|
||||
.forEach(cardNames::add);
|
||||
deckArea.getDeckList().deselectAll();
|
||||
deckArea.getDeckList().selectByName(cardNames);
|
||||
deckArea.getSideboardList().deselectAll();
|
||||
deckArea.getSideboardList().selectByName(cardNames);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
LegalityLabel label = (LegalityLabel) e.getComponent();
|
||||
label.setBorder(LEGALITY_LABEL_BORDER_SELECTED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {
|
||||
LegalityLabel label = (LegalityLabel) e.getComponent();
|
||||
label.setBorder(LEGALITY_LABEL_BORDER_EMPTY);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1447,43 +1517,6 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
this.deckLegalityDisplay.setVisible(true);
|
||||
this.deckLegalityDisplay.validateDeck(deck);
|
||||
}//GEN-LAST:event_btnLegalityActionPerformed
|
||||
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
private mage.client.cards.BigCard bigCard;
|
||||
private javax.swing.JButton btnAddLand;
|
||||
private javax.swing.JButton btnExit;
|
||||
private javax.swing.JButton btnExport;
|
||||
private javax.swing.JButton btnGenDeck;
|
||||
private javax.swing.JButton btnImport;
|
||||
private javax.swing.JButton btnLegality;
|
||||
private javax.swing.JButton btnLoad;
|
||||
private javax.swing.JButton btnNew;
|
||||
private javax.swing.JButton btnSave;
|
||||
private javax.swing.JButton btnSubmit;
|
||||
private javax.swing.JButton btnSubmitTimer;
|
||||
private JComponent cardInfoPane;
|
||||
/*
|
||||
private org.mage.plugins.card.info.CardInfoPaneImpl cardInfoPane;
|
||||
*/
|
||||
private mage.client.deckeditor.CardSelector cardSelector;
|
||||
private mage.client.deckeditor.DeckArea deckArea;
|
||||
private mage.client.deckeditor.DeckLegalityPanel deckLegalityDisplay;
|
||||
private javax.swing.JLabel lblDeckName;
|
||||
private javax.swing.JPanel panelDeck;
|
||||
private javax.swing.JPanel panelDeckCreate;
|
||||
private javax.swing.JPanel panelDeckDraft;
|
||||
private javax.swing.JPanel panelDeckExit;
|
||||
private javax.swing.JPanel panelDeckLands;
|
||||
private javax.swing.JPanel panelDeckLoad;
|
||||
private javax.swing.JPanel panelDeckName;
|
||||
private javax.swing.JPanel panelDeckSave;
|
||||
private javax.swing.JPanel panelInfo;
|
||||
private javax.swing.JPanel panelLeft;
|
||||
private javax.swing.JSplitPane panelRight;
|
||||
private javax.swing.JScrollPane scrollPaneInfo;
|
||||
private javax.swing.JTextField txtDeckName;
|
||||
private javax.swing.JTextField txtTimeRemaining;
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -103,7 +103,6 @@ public class DeckLegalityPanel extends javax.swing.JPanel {
|
|||
protected LegalityLabel addLegalityLabel(DeckValidator validator) {
|
||||
LegalityLabel label = new LegalityLabel(validator);
|
||||
add(label);
|
||||
|
||||
return label;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue