* Deck editor - Some changes to card movement with double click.

This commit is contained in:
LevelX2 2014-05-05 17:52:29 +02:00
parent 0975a70f14
commit 02e6ba045b
5 changed files with 187 additions and 84 deletions

View file

@ -306,12 +306,20 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener,
e.consume();
Object obj = e.getSource();
if (obj instanceof Card) {
if (e.isShiftDown()) {
cardEventSource.shiftDoubleClick(((Card) obj).getOriginal(), "shift-double-click");
} else {
cardEventSource.doubleClick(((Card) obj).getOriginal(), "double-click");
}
} else if (obj instanceof MageCard) {
if (e.isShiftDown()) {
cardEventSource.shiftDoubleClick(((MageCard) obj).getOriginal(), "shift-double-click");
} else {
cardEventSource.doubleClick(((MageCard) obj).getOriginal(), "double-click");
}
}
}
}
@Override
public void mousePressed(MouseEvent e) {}

View file

@ -162,9 +162,13 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2 && !e.isConsumed()) {
e.consume();
if (e.isShiftDown()) {
handleShiftDoubleClick();
} else {
handleDoubleClick();
}
}
}
});
mainModel.setUpdateCountsCallback(new UpdateCountsCallback(lblCount, lblCreatureCount, lblLandCount));
@ -181,6 +185,17 @@ 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;
}

View file

@ -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,9 +154,13 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 2 && !e.isConsumed()) {
e.consume();
if (e.isShiftDown()) {
jButtonAddToSideboardActionPerformed(null);
} else {
jButtonAddToMainActionPerformed(null);
}
}
}
});
}

View file

@ -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();
@ -206,7 +205,147 @@ public class DeckEditorPanel extends javax.swing.JPanel {
new Listener<Event>() {
@Override
public void event(Event event) {
if (event.getEventName().equals("double-click")) {
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);
}
break;
case "remove-main":
DeckEditorPanel.this.deckArea.getDeckList().handleDoubleClick();
break;
case "remove-sideboard":
DeckEditorPanel.this.deckArea.getSideboardList().handleDoubleClick();
break;
}
refreshDeck();
}
});
}
this.deckArea.clearDeckEventListeners();
this.deckArea.addDeckEventListener(
new Listener<Event>() {
@Override
public void event(Event event) {
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;
}
}
} 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;
}
}
}
}
});
this.deckArea.addSideboardEventListener(
new Listener<Event>() {
@Override
public void event(Event event) {
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;
}
}
}
});
refreshDeck();
this.setVisible(true);
this.repaint();
}
private void moveSelectorCardToDeck(Event event) {
SimpleCardView cardView = (SimpleCardView) event.getSource();
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
Card card = null;
@ -234,8 +373,9 @@ public class DeckEditorPanel extends javax.swing.JPanel {
}
hidePopup();
}
}
} else if (event.getEventName().equals("shift-double-click") && mode == DeckEditorMode.Constructed) {
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;
@ -246,70 +386,6 @@ public class DeckEditorPanel extends javax.swing.JPanel {
((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();
}
});
}
this.deckArea.clearDeckEventListeners();
this.deckArea.addDeckEventListener(
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());
}
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);
break;
}
}
hidePopup();
refreshDeck();
}
}
});
this.deckArea.addSideboardEventListener(
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);
break;
}
}
hidePopup();
refreshDeck();
}
}
});
refreshDeck();
this.setVisible(true);
this.repaint();
}
private void hidePopup() {

View file

@ -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;