mirror of
https://github.com/correl/mage.git
synced 2025-04-08 01:01:04 -09: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
Mage.Client/src/main/java/mage/client
|
@ -306,9 +306,17 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
|
|||
e.consume();
|
||||
Object obj = e.getSource();
|
||||
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) {
|
||||
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) {
|
||||
if (e.getClickCount() == 2 && !e.isConsumed()) {
|
||||
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() {
|
||||
return mainModel;
|
||||
}
|
||||
|
|
|
@ -83,10 +83,10 @@ import mage.view.CardsView;
|
|||
*/
|
||||
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 boolean limited = false;
|
||||
private SortSetting sortSetting;
|
||||
private final SortSetting sortSetting;
|
||||
|
||||
private final ActionListener searchAction = new ActionListener() {
|
||||
@Override
|
||||
|
@ -154,7 +154,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
|||
public void mousePressed(MouseEvent e) {
|
||||
if (e.getClickCount() == 2 && !e.isConsumed()) {
|
||||
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.Sideboard;
|
||||
import mage.client.dialog.AddLandDialog;
|
||||
import mage.client.plugins.adapters.MageActionCallback;
|
||||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.client.util.Event;
|
||||
import mage.client.util.Listener;
|
||||
|
@ -159,7 +158,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
case Sideboard:
|
||||
this.btnSubmit.setVisible(true);
|
||||
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
|
||||
this.cardSelector.switchToGrid();
|
||||
|
@ -205,51 +204,25 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
component.addCardEventListener(
|
||||
new Listener<Event>() {
|
||||
@Override
|
||||
public void event(Event event) {
|
||||
if (event.getEventName().equals("double-click")) {
|
||||
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;
|
||||
}
|
||||
public void event(Event event) {
|
||||
switch (event.getEventName()) {
|
||||
case "double-click":
|
||||
moveSelectorCardToDeck(event);
|
||||
break;
|
||||
case "shift-double-click":
|
||||
if (mode == DeckEditorMode.Constructed) {
|
||||
moveSelectorCardToSideboard(event);
|
||||
} else {
|
||||
// because in match mode selector is used as sideboard the card goes to deck also for shift click
|
||||
moveSelectorCardToDeck(event);
|
||||
}
|
||||
} 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();
|
||||
}
|
||||
|
||||
} 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();
|
||||
break;
|
||||
case "remove-main":
|
||||
DeckEditorPanel.this.deckArea.getDeckList().handleDoubleClick();
|
||||
break;
|
||||
case "remove-sideboard":
|
||||
DeckEditorPanel.this.deckArea.getSideboardList().handleDoubleClick();
|
||||
break;
|
||||
}
|
||||
refreshDeck();
|
||||
}
|
||||
|
@ -260,31 +233,56 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
new Listener<Event>() {
|
||||
@Override
|
||||
public void event(Event event) {
|
||||
if (event.getEventName().equals("double-click")) {
|
||||
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
||||
for (Card card : deck.getCards()) {
|
||||
if (card.getId().equals(cardView.getId())) {
|
||||
deck.getCards().remove(card);
|
||||
if (mode == DeckEditorMode.Limited || mode == DeckEditorMode.Sideboard) {
|
||||
deck.getSideboard().add(card);
|
||||
cardSelector.loadSideboard(new ArrayList<Card>(deck.getSideboard()), getBigCard());
|
||||
if (mode.equals(DeckEditorMode.Constructed)) {
|
||||
switch (event.getEventName()) {
|
||||
case "double-click":
|
||||
{
|
||||
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
||||
for (Card card : deck.getCards()) {
|
||||
if (card.getId().equals(cardView.getId())) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
hidePopup();
|
||||
refreshDeck();
|
||||
} else if (event.getEventName().equals("shift-double-click") && mode == DeckEditorMode.Constructed) {
|
||||
SimpleCardView cardView = (SimpleCardView) event.getSource();
|
||||
for (Card card : deck.getCards()) {
|
||||
if (card.getId().equals(cardView.getId())) {
|
||||
deck.getCards().remove(card);
|
||||
deck.getSideboard().add(card);
|
||||
} else {
|
||||
// constructing phase or sideboarding during match -> card goes always to sideboard
|
||||
switch (event.getEventName()) {
|
||||
case "double-click":
|
||||
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);
|
||||
cardSelector.loadSideboard(new ArrayList<>(deck.getSideboard()), getBigCard());
|
||||
break;
|
||||
}
|
||||
}
|
||||
hidePopup();
|
||||
refreshDeck();
|
||||
break;
|
||||
}
|
||||
}
|
||||
hidePopup();
|
||||
refreshDeck();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -292,17 +290,51 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
new Listener<Event>() {
|
||||
@Override
|
||||
public void event(Event event) {
|
||||
if (event.getEventName().equals("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);
|
||||
if (mode.equals(DeckEditorMode.Constructed)) {
|
||||
// normal edit mode
|
||||
switch (event.getEventName()) {
|
||||
case "double-click":
|
||||
// remove card from sideboard (don't add it to deck)
|
||||
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;
|
||||
}
|
||||
}
|
||||
hidePopup();
|
||||
refreshDeck();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -312,6 +344,50 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
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() {
|
||||
Plugins.getInstance().getActionCallback().mouseExited(null, null);
|
||||
}
|
||||
|
|
|
@ -79,9 +79,9 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
|
|||
protected CardEventSource cardEventSource = new CardEventSource();
|
||||
protected BigCard bigCard;
|
||||
protected UUID gameId;
|
||||
private final Map<UUID, CardView> cards = new LinkedHashMap<UUID, CardView>();
|
||||
private final Map<String, Integer> cardsNoCopies = new LinkedHashMap<String, Integer>();
|
||||
private final List<CardView> view = new ArrayList<CardView>();
|
||||
private final Map<UUID, CardView> cards = new LinkedHashMap<>();
|
||||
private final Map<String, Integer> cardsNoCopies = new LinkedHashMap<>();
|
||||
private final List<CardView> view = new ArrayList<>();
|
||||
private Dimension cardDimension;
|
||||
|
||||
private boolean displayNoCopies = false;
|
||||
|
|
Loading…
Add table
Reference in a new issue