mirror of
https://github.com/magefree/mage.git
synced 2025-12-23 03:51:58 -08:00
* Deck editor - Some changes to card movement with double click.
This commit is contained in:
parent
0975a70f14
commit
02e6ba045b
5 changed files with 187 additions and 84 deletions
|
|
@ -306,9 +306,17 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
||||||
e.consume();
|
e.consume();
|
||||||
Object obj = e.getSource();
|
Object obj = e.getSource();
|
||||||
if (obj instanceof Card) {
|
if (obj instanceof Card) {
|
||||||
cardEventSource.doubleClick(((Card) obj).getOriginal(), "double-click");
|
if (e.isShiftDown()) {
|
||||||
|
cardEventSource.shiftDoubleClick(((Card) obj).getOriginal(), "shift-double-click");
|
||||||
|
} else {
|
||||||
|
cardEventSource.doubleClick(((Card) obj).getOriginal(), "double-click");
|
||||||
|
}
|
||||||
} else if (obj instanceof MageCard) {
|
} else if (obj instanceof MageCard) {
|
||||||
cardEventSource.doubleClick(((MageCard) obj).getOriginal(), "double-click");
|
if (e.isShiftDown()) {
|
||||||
|
cardEventSource.shiftDoubleClick(((MageCard) obj).getOriginal(), "shift-double-click");
|
||||||
|
} else {
|
||||||
|
cardEventSource.doubleClick(((MageCard) obj).getOriginal(), "double-click");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -162,7 +162,11 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
||||||
public void mousePressed(MouseEvent e) {
|
public void mousePressed(MouseEvent e) {
|
||||||
if (e.getClickCount() == 2 && !e.isConsumed()) {
|
if (e.getClickCount() == 2 && !e.isConsumed()) {
|
||||||
e.consume();
|
e.consume();
|
||||||
handleDoubleClick();
|
if (e.isShiftDown()) {
|
||||||
|
handleShiftDoubleClick();
|
||||||
|
} else {
|
||||||
|
handleDoubleClick();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -180,7 +184,18 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void handleShiftDoubleClick() {
|
||||||
|
if (mainTable.getSelectedRowCount() > 0) {
|
||||||
|
int[] n = mainTable.getSelectedRows();
|
||||||
|
List<Integer> indexes = asList(n);
|
||||||
|
Collections.reverse(indexes);
|
||||||
|
for (Integer index : indexes) {
|
||||||
|
mainModel.shiftDoubleClick(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public ICardGrid getMainModel() {
|
public ICardGrid getMainModel() {
|
||||||
return mainModel;
|
return mainModel;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -83,10 +83,10 @@ import mage.view.CardsView;
|
||||||
*/
|
*/
|
||||||
public class CardSelector extends javax.swing.JPanel implements ComponentListener {
|
public class CardSelector extends javax.swing.JPanel implements ComponentListener {
|
||||||
|
|
||||||
private final List<Card> cards = new ArrayList<Card>();
|
private final List<Card> cards = new ArrayList<>();
|
||||||
private BigCard bigCard;
|
private BigCard bigCard;
|
||||||
private boolean limited = false;
|
private boolean limited = false;
|
||||||
private SortSetting sortSetting;
|
private final SortSetting sortSetting;
|
||||||
|
|
||||||
private final ActionListener searchAction = new ActionListener() {
|
private final ActionListener searchAction = new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -154,7 +154,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
||||||
public void mousePressed(MouseEvent e) {
|
public void mousePressed(MouseEvent e) {
|
||||||
if (e.getClickCount() == 2 && !e.isConsumed()) {
|
if (e.getClickCount() == 2 && !e.isConsumed()) {
|
||||||
e.consume();
|
e.consume();
|
||||||
jButtonAddToMainActionPerformed(null);
|
if (e.isShiftDown()) {
|
||||||
|
jButtonAddToSideboardActionPerformed(null);
|
||||||
|
} else {
|
||||||
|
jButtonAddToMainActionPerformed(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,6 @@ import static mage.client.constants.Constants.DeckEditorMode.Constructed;
|
||||||
import static mage.client.constants.Constants.DeckEditorMode.Limited;
|
import static mage.client.constants.Constants.DeckEditorMode.Limited;
|
||||||
import static mage.client.constants.Constants.DeckEditorMode.Sideboard;
|
import static mage.client.constants.Constants.DeckEditorMode.Sideboard;
|
||||||
import mage.client.dialog.AddLandDialog;
|
import mage.client.dialog.AddLandDialog;
|
||||||
import mage.client.plugins.adapters.MageActionCallback;
|
|
||||||
import mage.client.plugins.impl.Plugins;
|
import mage.client.plugins.impl.Plugins;
|
||||||
import mage.client.util.Event;
|
import mage.client.util.Event;
|
||||||
import mage.client.util.Listener;
|
import mage.client.util.Listener;
|
||||||
|
|
@ -159,7 +158,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
||||||
case Sideboard:
|
case Sideboard:
|
||||||
this.btnSubmit.setVisible(true);
|
this.btnSubmit.setVisible(true);
|
||||||
if (deck != null) {
|
if (deck != null) {
|
||||||
this.cardSelector.loadSideboard(new ArrayList<Card>(deck.getSideboard()), this.bigCard);
|
this.cardSelector.loadSideboard(new ArrayList<>(deck.getSideboard()), this.bigCard);
|
||||||
}
|
}
|
||||||
// TODO: take from preferences
|
// TODO: take from preferences
|
||||||
this.cardSelector.switchToGrid();
|
this.cardSelector.switchToGrid();
|
||||||
|
|
@ -205,51 +204,25 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
||||||
component.addCardEventListener(
|
component.addCardEventListener(
|
||||||
new Listener<Event>() {
|
new Listener<Event>() {
|
||||||
@Override
|
@Override
|
||||||
public void event(Event event) {
|
public void event(Event event) {
|
||||||
if (event.getEventName().equals("double-click")) {
|
switch (event.getEventName()) {
|
||||||
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
case "double-click":
|
||||||
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
|
moveSelectorCardToDeck(event);
|
||||||
Card card = null;
|
break;
|
||||||
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
|
case "shift-double-click":
|
||||||
Iterator sideboard = deck.getSideboard().iterator();
|
if (mode == DeckEditorMode.Constructed) {
|
||||||
while (sideboard.hasNext()) {
|
moveSelectorCardToSideboard(event);
|
||||||
card = (Card) sideboard.next();
|
} else {
|
||||||
if (card.getId().equals(cardView.getId())) {
|
// because in match mode selector is used as sideboard the card goes to deck also for shift click
|
||||||
break;
|
moveSelectorCardToDeck(event);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
break;
|
||||||
card = cardInfo != null ? cardInfo.getMockCard() : null;
|
case "remove-main":
|
||||||
}
|
DeckEditorPanel.this.deckArea.getDeckList().handleDoubleClick();
|
||||||
if (card != null) {
|
break;
|
||||||
deck.getCards().add(card);
|
case "remove-sideboard":
|
||||||
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
|
DeckEditorPanel.this.deckArea.getSideboardList().handleDoubleClick();
|
||||||
deck.getSideboard().remove(card);
|
break;
|
||||||
cardSelector.removeCard(card.getId());
|
|
||||||
cardSelector.setCardCount(deck.getSideboard().size());
|
|
||||||
cardSelector.refresh();
|
|
||||||
}
|
|
||||||
if (cardInfoPane instanceof CardInfoPane) {
|
|
||||||
((CardInfoPane) cardInfoPane).setCard(new CardView(card), null);
|
|
||||||
}
|
|
||||||
hidePopup();
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (event.getEventName().equals("shift-double-click") && mode == DeckEditorMode.Constructed) {
|
|
||||||
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
|
||||||
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
|
|
||||||
Card card = cardInfo != null ? cardInfo.getMockCard() : null;
|
|
||||||
if (card != null) {
|
|
||||||
deck.getSideboard().add(card);
|
|
||||||
}
|
|
||||||
if (cardInfoPane instanceof CardInfoPane) {
|
|
||||||
((CardInfoPane) cardInfoPane).setCard(new CardView(card), null);
|
|
||||||
}
|
|
||||||
hidePopup();
|
|
||||||
} else if (event.getEventName().equals("remove-main")) {
|
|
||||||
DeckEditorPanel.this.deckArea.getDeckList().handleDoubleClick();
|
|
||||||
} else if (event.getEventName().equals("remove-sideboard")) {
|
|
||||||
DeckEditorPanel.this.deckArea.getSideboardList().handleDoubleClick();
|
|
||||||
}
|
}
|
||||||
refreshDeck();
|
refreshDeck();
|
||||||
}
|
}
|
||||||
|
|
@ -260,31 +233,56 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
||||||
new Listener<Event>() {
|
new Listener<Event>() {
|
||||||
@Override
|
@Override
|
||||||
public void event(Event event) {
|
public void event(Event event) {
|
||||||
if (event.getEventName().equals("double-click")) {
|
if (mode.equals(DeckEditorMode.Constructed)) {
|
||||||
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
switch (event.getEventName()) {
|
||||||
for (Card card : deck.getCards()) {
|
case "double-click":
|
||||||
if (card.getId().equals(cardView.getId())) {
|
{
|
||||||
deck.getCards().remove(card);
|
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
||||||
if (mode == DeckEditorMode.Limited || mode == DeckEditorMode.Sideboard) {
|
for (Card card : deck.getCards()) {
|
||||||
deck.getSideboard().add(card);
|
if (card.getId().equals(cardView.getId())) {
|
||||||
cardSelector.loadSideboard(new ArrayList<Card>(deck.getSideboard()), getBigCard());
|
deck.getCards().remove(card);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
hidePopup();
|
||||||
|
refreshDeck();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "shift-double-click":
|
||||||
|
{
|
||||||
|
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
||||||
|
for (Card card : deck.getCards()) {
|
||||||
|
if (card.getId().equals(cardView.getId())) {
|
||||||
|
deck.getCards().remove(card);
|
||||||
|
deck.getSideboard().add(card);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hidePopup();
|
||||||
|
refreshDeck();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hidePopup();
|
} else {
|
||||||
refreshDeck();
|
// constructing phase or sideboarding during match -> card goes always to sideboard
|
||||||
} else if (event.getEventName().equals("shift-double-click") && mode == DeckEditorMode.Constructed) {
|
switch (event.getEventName()) {
|
||||||
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
case "double-click":
|
||||||
for (Card card : deck.getCards()) {
|
case "shift-double-click":
|
||||||
if (card.getId().equals(cardView.getId())) {
|
{
|
||||||
deck.getCards().remove(card);
|
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
||||||
deck.getSideboard().add(card);
|
for (Card card : deck.getCards()) {
|
||||||
|
if (card.getId().equals(cardView.getId())) {
|
||||||
|
deck.getCards().remove(card);
|
||||||
|
deck.getSideboard().add(card);
|
||||||
|
cardSelector.loadSideboard(new ArrayList<>(deck.getSideboard()), getBigCard());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hidePopup();
|
||||||
|
refreshDeck();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hidePopup();
|
|
||||||
refreshDeck();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -292,17 +290,51 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
||||||
new Listener<Event>() {
|
new Listener<Event>() {
|
||||||
@Override
|
@Override
|
||||||
public void event(Event event) {
|
public void event(Event event) {
|
||||||
if (event.getEventName().equals("double-click")) {
|
if (mode.equals(DeckEditorMode.Constructed)) {
|
||||||
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
// normal edit mode
|
||||||
for (Card card : deck.getSideboard()) {
|
switch (event.getEventName()) {
|
||||||
if (card.getId().equals(cardView.getId())) {
|
case "double-click":
|
||||||
deck.getSideboard().remove(card);
|
// remove card from sideboard (don't add it to deck)
|
||||||
deck.getCards().add(card);
|
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
||||||
|
for (Card card : deck.getSideboard()) {
|
||||||
|
if (card.getId().equals(cardView.getId())) {
|
||||||
|
deck.getSideboard().remove(card);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hidePopup();
|
||||||
|
refreshDeck();
|
||||||
|
break;
|
||||||
|
case "shift-double-click":
|
||||||
|
// remove card from sideboard
|
||||||
|
cardView = (SimpleCardView) event.getSource();
|
||||||
|
for (Card card : deck.getSideboard()) {
|
||||||
|
if (card.getId().equals(cardView.getId())) {
|
||||||
|
deck.getSideboard().remove(card);
|
||||||
|
deck.getCards().add(card);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
hidePopup();
|
||||||
|
refreshDeck();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// construct phase or sideboarding during match
|
||||||
|
switch (event.getEventName()) {
|
||||||
|
case "double-click":
|
||||||
|
case "shift-double-click":
|
||||||
|
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
||||||
|
for (Card card : deck.getSideboard()) {
|
||||||
|
if (card.getId().equals(cardView.getId())) {
|
||||||
|
deck.getSideboard().remove(card);
|
||||||
|
deck.getCards().add(card);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} hidePopup();
|
||||||
|
refreshDeck();
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
hidePopup();
|
|
||||||
refreshDeck();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -312,6 +344,50 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
||||||
this.repaint();
|
this.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void moveSelectorCardToDeck(Event event) {
|
||||||
|
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
||||||
|
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
|
||||||
|
Card card = null;
|
||||||
|
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
|
||||||
|
Iterator sideboard = deck.getSideboard().iterator();
|
||||||
|
while (sideboard.hasNext()) {
|
||||||
|
card = (Card) sideboard.next();
|
||||||
|
if (card.getId().equals(cardView.getId())) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
card = cardInfo != null ? cardInfo.getMockCard() : null;
|
||||||
|
}
|
||||||
|
if (card != null) {
|
||||||
|
deck.getCards().add(card);
|
||||||
|
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
|
||||||
|
deck.getSideboard().remove(card);
|
||||||
|
cardSelector.removeCard(card.getId());
|
||||||
|
cardSelector.setCardCount(deck.getSideboard().size());
|
||||||
|
cardSelector.refresh();
|
||||||
|
}
|
||||||
|
if (cardInfoPane instanceof CardInfoPane) {
|
||||||
|
((CardInfoPane) cardInfoPane).setCard(new CardView(card), null);
|
||||||
|
}
|
||||||
|
hidePopup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void moveSelectorCardToSideboard(Event event) {
|
||||||
|
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
||||||
|
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
|
||||||
|
Card card = cardInfo != null ? cardInfo.getMockCard() : null;
|
||||||
|
if (card != null) {
|
||||||
|
deck.getSideboard().add(card);
|
||||||
|
}
|
||||||
|
if (cardInfoPane instanceof CardInfoPane) {
|
||||||
|
((CardInfoPane) cardInfoPane).setCard(new CardView(card), null);
|
||||||
|
}
|
||||||
|
hidePopup();
|
||||||
|
}
|
||||||
|
|
||||||
private void hidePopup() {
|
private void hidePopup() {
|
||||||
Plugins.getInstance().getActionCallback().mouseExited(null, null);
|
Plugins.getInstance().getActionCallback().mouseExited(null, null);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -79,9 +79,9 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
|
||||||
protected CardEventSource cardEventSource = new CardEventSource();
|
protected CardEventSource cardEventSource = new CardEventSource();
|
||||||
protected BigCard bigCard;
|
protected BigCard bigCard;
|
||||||
protected UUID gameId;
|
protected UUID gameId;
|
||||||
private final Map<UUID, CardView> cards = new LinkedHashMap<UUID, CardView>();
|
private final Map<UUID, CardView> cards = new LinkedHashMap<>();
|
||||||
private final Map<String, Integer> cardsNoCopies = new LinkedHashMap<String, Integer>();
|
private final Map<String, Integer> cardsNoCopies = new LinkedHashMap<>();
|
||||||
private final List<CardView> view = new ArrayList<CardView>();
|
private final List<CardView> view = new ArrayList<>();
|
||||||
private Dimension cardDimension;
|
private Dimension cardDimension;
|
||||||
|
|
||||||
private boolean displayNoCopies = false;
|
private boolean displayNoCopies = false;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue