mirror of
https://github.com/correl/mage.git
synced 2025-03-12 17:00:08 -09:00
* Deck editor - Added possibility to edit number of cards for deck and sideboard directly if deck editor is in normal mode to build a deck from complete card pool.
This commit is contained in:
parent
7d714947aa
commit
0561499d5b
13 changed files with 351 additions and 55 deletions
|
@ -879,7 +879,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
|
|||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
private void btnDeckEditorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDeckEditorActionPerformed
|
||||
showDeckEditor(DeckEditorMode.Constructed, null, null, 0);
|
||||
showDeckEditor(DeckEditorMode.FREE_BUILDING, null, null, 0);
|
||||
}//GEN-LAST:event_btnDeckEditorActionPerformed
|
||||
|
||||
private void btnGamesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGamesActionPerformed
|
||||
|
@ -994,8 +994,8 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
|
|||
// close & remove sideboarding or construction pane if open
|
||||
if (window instanceof DeckEditorPane) {
|
||||
DeckEditorPane deckEditorPane = (DeckEditorPane) window;
|
||||
if (deckEditorPane.getDeckEditorMode().equals(DeckEditorMode.Limited)
|
||||
|| deckEditorPane.getDeckEditorMode().equals(DeckEditorMode.Sideboard)){
|
||||
if (deckEditorPane.getDeckEditorMode().equals(DeckEditorMode.LIMITED_BUILDING)
|
||||
|| deckEditorPane.getDeckEditorMode().equals(DeckEditorMode.SIDEBOARDING)){
|
||||
deckEditorPane.removeFrame();
|
||||
}
|
||||
}
|
||||
|
@ -1005,7 +1005,7 @@ public class MageFrame extends javax.swing.JFrame implements MageClient {
|
|||
|
||||
public void showDeckEditor(DeckEditorMode mode, Deck deck, UUID tableId, int time) {
|
||||
String name;
|
||||
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
|
||||
if (mode == DeckEditorMode.SIDEBOARDING || mode == DeckEditorMode.LIMITED_BUILDING) {
|
||||
name = "Deck Editor - " + tableId.toString();
|
||||
} else {
|
||||
if (deck != null) {
|
||||
|
|
|
@ -49,6 +49,10 @@ public class CardEventSource implements EventSource<Event>, Serializable {
|
|||
dispatcher.addListener(listener);
|
||||
}
|
||||
|
||||
public void setNumber(SimpleCardView card, String message, int number) {
|
||||
dispatcher.fireEvent(new Event(card, message, number));
|
||||
}
|
||||
|
||||
public void doubleClick(SimpleCardView card, String message) {
|
||||
dispatcher.fireEvent(new Event(card, message));
|
||||
}
|
||||
|
|
|
@ -15,8 +15,9 @@
|
|||
<Dimension value="[30, 30]"/>
|
||||
</Property>
|
||||
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||
<Connection code="(!Beans.isDesignTime())?(new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight)):(new Dimension(100, 100))" type="code"/>
|
||||
<Connection code="(!Beans.isDesignTime())?
(new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight))
:(new Dimension(600, 600))" type="code"/>
|
||||
</Property>
|
||||
<Property name="requestFocusEnabled" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
<AuxValues>
|
||||
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
|
||||
|
@ -34,7 +35,7 @@
|
|||
<DimensionLayout dim="0">
|
||||
<Group type="103" groupAlignment="0" attributes="0">
|
||||
<Component id="panelCardArea" alignment="0" max="32767" attributes="0"/>
|
||||
<Component id="panelControl" pref="719" max="32767" attributes="0"/>
|
||||
<Component id="panelControl" pref="818" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
<DimensionLayout dim="1">
|
||||
|
@ -42,7 +43,7 @@
|
|||
<Group type="102" alignment="0" attributes="0">
|
||||
<Component id="panelControl" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
|
||||
<Component id="panelCardArea" pref="120" max="32767" attributes="0"/>
|
||||
<Component id="panelCardArea" pref="69" max="32767" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
|
@ -81,7 +82,7 @@
|
|||
<Component id="jToggleListView" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace max="-2" attributes="0"/>
|
||||
<Component id="jToggleCardView" min="-2" max="-2" attributes="0"/>
|
||||
<EmptySpace min="-2" pref="195" max="-2" attributes="0"/>
|
||||
<EmptySpace min="-2" pref="287" max="-2" attributes="0"/>
|
||||
</Group>
|
||||
</Group>
|
||||
</DimensionLayout>
|
||||
|
|
|
@ -47,8 +47,11 @@ import java.util.List;
|
|||
import java.util.UUID;
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.DefaultTableCellRenderer;
|
||||
import javax.swing.table.TableColumn;
|
||||
import javax.swing.table.TableColumnModel;
|
||||
import mage.constants.CardType;
|
||||
import mage.cards.MageCard;
|
||||
import mage.client.constants.Constants.DeckEditorMode;
|
||||
import mage.client.constants.Constants.SortBy;
|
||||
import mage.client.deckeditor.SortSetting;
|
||||
import mage.client.deckeditor.table.TableModel;
|
||||
|
@ -57,6 +60,7 @@ import mage.client.dialog.PreferencesDialog;
|
|||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.client.util.*;
|
||||
import mage.client.util.Event;
|
||||
import mage.client.util.gui.TableSpinnerEditor;
|
||||
import mage.view.CardView;
|
||||
import mage.view.CardsView;
|
||||
import org.mage.card.arcane.CardPanel;
|
||||
|
@ -66,7 +70,7 @@ import org.mage.card.arcane.CardPanel;
|
|||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class CardsList extends javax.swing.JPanel implements MouseListener, ICardGrid {
|
||||
|
||||
|
||||
protected CardEventSource cardEventSource = new CardEventSource();
|
||||
private Dimension cardDimension;
|
||||
private CardsView cards;
|
||||
|
@ -77,7 +81,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
private TableModel mainModel;
|
||||
private JTable mainTable;
|
||||
private ICardGrid currentView;
|
||||
|
||||
|
||||
/** Creates new form Cards */
|
||||
public CardsList() {
|
||||
initComponents();
|
||||
|
@ -172,6 +176,30 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
mainModel.setUpdateCountsCallback(new UpdateCountsCallback(lblCount, lblCreatureCount, lblLandCount));
|
||||
}
|
||||
|
||||
// if you use the deck ediot to build a free deck, numbers can be set directly in deck and sideboard
|
||||
public void setDeckEditorMode(DeckEditorMode mode) {
|
||||
if (mode.equals(DeckEditorMode.FREE_BUILDING)) {
|
||||
// activate spinner for card number change
|
||||
mainModel.setNumberEditable(true);
|
||||
TableColumnModel tcm = mainTable.getColumnModel();
|
||||
TableColumn tc = tcm.getColumn(0);
|
||||
tc.setMaxWidth(55);
|
||||
tc.setMinWidth(55);
|
||||
tc.setPreferredWidth(55);
|
||||
tc.setCellEditor(new TableSpinnerEditor(this));
|
||||
}
|
||||
}
|
||||
|
||||
public void handleSetNumber(int number) {
|
||||
if (mainTable.getSelectedRowCount() == 1) {
|
||||
int[] n = mainTable.getSelectedRows();
|
||||
List<Integer> indexes = asList(n);
|
||||
for (Integer index : indexes) {
|
||||
mainModel.setNumber(index, number);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void handleDoubleClick() {
|
||||
if (mainTable.getSelectedRowCount() > 0) {
|
||||
int[] n = mainTable.getSelectedRows();
|
||||
|
@ -398,7 +426,10 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
|
||||
setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
|
||||
setMinimumSize(new java.awt.Dimension(30, 30));
|
||||
setPreferredSize((!Beans.isDesignTime())?(new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight)):(new Dimension(100, 100)));
|
||||
setPreferredSize((!Beans.isDesignTime())?
|
||||
(new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight))
|
||||
:(new Dimension(600, 600)));
|
||||
setRequestFocusEnabled(false);
|
||||
|
||||
panelControl.setMaximumSize(new java.awt.Dimension(32767, 23));
|
||||
panelControl.setMinimumSize(new java.awt.Dimension(616, 23));
|
||||
|
@ -474,7 +505,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
.addComponent(jToggleListView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||
.addComponent(jToggleCardView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGap(195, 195, 195))
|
||||
.addGap(287, 287, 287))
|
||||
);
|
||||
panelControlLayout.setVerticalGroup(
|
||||
panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
|
@ -501,14 +532,14 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar
|
|||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addComponent(panelCardArea)
|
||||
.addComponent(panelControl, javax.swing.GroupLayout.DEFAULT_SIZE, 719, Short.MAX_VALUE)
|
||||
.addComponent(panelControl, javax.swing.GroupLayout.DEFAULT_SIZE, 818, Short.MAX_VALUE)
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGroup(layout.createSequentialGroup()
|
||||
.addComponent(panelControl, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||
.addGap(0, 0, 0)
|
||||
.addComponent(panelCardArea, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE))
|
||||
.addComponent(panelCardArea, javax.swing.GroupLayout.DEFAULT_SIZE, 69, Short.MAX_VALUE))
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
|
|
|
@ -88,9 +88,9 @@ public final class Constants {
|
|||
}
|
||||
|
||||
public enum DeckEditorMode {
|
||||
Constructed,
|
||||
Limited,
|
||||
Sideboard
|
||||
FREE_BUILDING,
|
||||
LIMITED_BUILDING,
|
||||
SIDEBOARDING
|
||||
}
|
||||
|
||||
public enum SortBy {
|
||||
|
@ -101,7 +101,7 @@ public final class Constants {
|
|||
NAME ("Name"),
|
||||
UNSORTED ("Unsorted");
|
||||
|
||||
private String text;
|
||||
private final String text;
|
||||
|
||||
SortBy(String text) {
|
||||
this.text = text;
|
||||
|
@ -113,18 +113,19 @@ public final class Constants {
|
|||
}
|
||||
|
||||
public static SortBy getByString(String text) {
|
||||
if (text.equals("Casting Cost")) {
|
||||
return CASTING_COST;
|
||||
} else if (text.equals("Rarity")) {
|
||||
return RARITY;
|
||||
} else if (text.equals("Color")) {
|
||||
return COLOR;
|
||||
}else if (text.equals("Color Detailed")) {
|
||||
return COLOR_DETAILED;
|
||||
}else if (text.equals("Name")) {
|
||||
return NAME;
|
||||
}else {
|
||||
return UNSORTED;
|
||||
switch (text) {
|
||||
case "Casting Cost":
|
||||
return CASTING_COST;
|
||||
case "Rarity":
|
||||
return RARITY;
|
||||
case "Color":
|
||||
return COLOR;
|
||||
case "Color Detailed":
|
||||
return COLOR_DETAILED;
|
||||
case "Name":
|
||||
return NAME;
|
||||
default:
|
||||
return UNSORTED;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ package mage.client.deckeditor;
|
|||
import mage.cards.decks.Deck;
|
||||
import mage.client.cards.BigCard;
|
||||
import mage.client.cards.CardsList;
|
||||
import mage.client.constants.Constants.DeckEditorMode;
|
||||
import mage.client.util.Event;
|
||||
import mage.client.util.Listener;
|
||||
import mage.view.CardsView;
|
||||
|
@ -69,6 +70,11 @@ public class DeckArea extends javax.swing.JPanel {
|
|||
this.sideboardList.setVisible(show);
|
||||
}
|
||||
|
||||
public void setDeckEditorMode(DeckEditorMode mode) {
|
||||
this.deckList.setDeckEditorMode(mode);
|
||||
this.sideboardList.setDeckEditorMode(mode);
|
||||
}
|
||||
|
||||
public void loadDeck(Deck deck, BigCard bigCard) {
|
||||
deckList.loadCards(new CardsView(deck.getCards()), bigCard, null);
|
||||
if (sideboardList.isVisible()) {
|
||||
|
|
|
@ -56,7 +56,7 @@ public class DeckEditorPane extends MagePane {
|
|||
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
||||
boolean initialized = false;
|
||||
if (Plugins.getInstance().isThemePluginLoaded()) {
|
||||
Map<String, JComponent> uiMap = new HashMap<String, JComponent>();
|
||||
Map<String, JComponent> uiMap = new HashMap<>();
|
||||
JComponent container = Plugins.getInstance().updateTablePanel(uiMap);
|
||||
if (container != null) {
|
||||
deckEditorPanel1 = new mage.client.deckeditor.DeckEditorPanel();
|
||||
|
@ -73,7 +73,7 @@ public class DeckEditorPane extends MagePane {
|
|||
}
|
||||
|
||||
public void show(DeckEditorMode mode, Deck deck, String name, UUID tableId, int time) {
|
||||
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
|
||||
if (mode == DeckEditorMode.SIDEBOARDING || mode == DeckEditorMode.LIMITED_BUILDING) {
|
||||
this.setTitle("Deck Editor - " + tableId.toString());
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -36,6 +36,8 @@ import java.io.File;
|
|||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CancellationException;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
@ -58,9 +60,9 @@ import mage.client.MageFrame;
|
|||
import mage.client.cards.BigCard;
|
||||
import mage.client.cards.ICardGrid;
|
||||
import mage.client.constants.Constants.DeckEditorMode;
|
||||
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 static mage.client.constants.Constants.DeckEditorMode.FREE_BUILDING;
|
||||
import static mage.client.constants.Constants.DeckEditorMode.LIMITED_BUILDING;
|
||||
import static mage.client.constants.Constants.DeckEditorMode.SIDEBOARDING;
|
||||
import mage.client.dialog.AddLandDialog;
|
||||
import mage.client.plugins.impl.Plugins;
|
||||
import mage.client.util.Event;
|
||||
|
@ -151,11 +153,12 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
this.tableId = tableId;
|
||||
this.mode = mode;
|
||||
this.btnAddLand.setVisible(false);
|
||||
|
||||
switch (mode) {
|
||||
case Limited:
|
||||
case LIMITED_BUILDING:
|
||||
this.btnAddLand.setVisible(true);
|
||||
this.txtTimeRemaining.setVisible(true);
|
||||
case Sideboard:
|
||||
case SIDEBOARDING:
|
||||
this.btnSubmit.setVisible(true);
|
||||
if (deck != null) {
|
||||
this.cardSelector.loadSideboard(new ArrayList<>(deck.getSideboard()), this.bigCard);
|
||||
|
@ -180,7 +183,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
}
|
||||
}
|
||||
break;
|
||||
case Constructed:
|
||||
case FREE_BUILDING:
|
||||
this.btnSubmit.setVisible(false);
|
||||
this.cardSelector.loadCards(this.bigCard);
|
||||
//this.cardTableSelector.loadCards(this.bigCard);
|
||||
|
@ -194,6 +197,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
break;
|
||||
}
|
||||
init();
|
||||
this.deckArea.setDeckEditorMode(mode);
|
||||
}
|
||||
|
||||
private void init() {
|
||||
|
@ -210,7 +214,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
moveSelectorCardToDeck(event);
|
||||
break;
|
||||
case "shift-double-click":
|
||||
if (mode == DeckEditorMode.Constructed) {
|
||||
if (mode == DeckEditorMode.FREE_BUILDING) {
|
||||
moveSelectorCardToSideboard(event);
|
||||
} else {
|
||||
// because in match mode selector is used as sideboard the card goes to deck also for shift click
|
||||
|
@ -233,7 +237,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
new Listener<Event>() {
|
||||
@Override
|
||||
public void event(Event event) {
|
||||
if (mode.equals(DeckEditorMode.Constructed)) {
|
||||
if (mode.equals(DeckEditorMode.FREE_BUILDING)) {
|
||||
switch (event.getEventName()) {
|
||||
case "double-click":
|
||||
{
|
||||
|
@ -262,6 +266,10 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
refreshDeck();
|
||||
break;
|
||||
}
|
||||
case "set-number":
|
||||
{
|
||||
setCardNumberToCardsList(event, deck.getCards());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// constructing phase or sideboarding during match -> card goes always to sideboard
|
||||
|
@ -290,7 +298,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
new Listener<Event>() {
|
||||
@Override
|
||||
public void event(Event event) {
|
||||
if (mode.equals(DeckEditorMode.Constructed)) {
|
||||
if (mode.equals(DeckEditorMode.FREE_BUILDING)) {
|
||||
// normal edit mode
|
||||
switch (event.getEventName()) {
|
||||
case "double-click":
|
||||
|
@ -318,6 +326,10 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
hidePopup();
|
||||
refreshDeck();
|
||||
break;
|
||||
case "set-number":
|
||||
{
|
||||
setCardNumberToCardsList(event, deck.getSideboard());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// construct phase or sideboarding during match
|
||||
|
@ -344,12 +356,43 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
this.repaint();
|
||||
}
|
||||
|
||||
private void setCardNumberToCardsList(Event event, Set<Card> cards) {
|
||||
CardView cardView = (CardView) event.getSource();
|
||||
int numberToSet = event.getNumber();
|
||||
int cardsFound = 0;
|
||||
List<Card> toDelete = new ArrayList<>();
|
||||
for (Card card : cards) {
|
||||
if (card.getName().equals(cardView.getName())
|
||||
&& card.getCardNumber() == cardView.getCardNumber()
|
||||
&& card.getExpansionSetCode().equals(cardView.getExpansionSetCode())) {
|
||||
cardsFound++;
|
||||
if (cardsFound > numberToSet) {
|
||||
toDelete.add(card);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
if (toDelete.isEmpty()) {
|
||||
// add cards
|
||||
CardInfo cardInfo = CardRepository.instance.findCard(cardView.getExpansionSetCode(), cardView.getCardNumber());
|
||||
for (int i = cardsFound; i < numberToSet; i++) {
|
||||
cards.add(cardInfo.getMockCard());
|
||||
}
|
||||
} else {
|
||||
// remove cards
|
||||
for (Card card: toDelete) {
|
||||
cards.remove(card);
|
||||
}
|
||||
}
|
||||
hidePopup();
|
||||
refreshDeck();
|
||||
}
|
||||
|
||||
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) {
|
||||
if (mode == DeckEditorMode.SIDEBOARDING || mode == DeckEditorMode.LIMITED_BUILDING) {
|
||||
Iterator sideboard = deck.getSideboard().iterator();
|
||||
while (sideboard.hasNext()) {
|
||||
card = (Card) sideboard.next();
|
||||
|
@ -362,7 +405,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
}
|
||||
if (card != null) {
|
||||
deck.getCards().add(card);
|
||||
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
|
||||
if (mode == DeckEditorMode.SIDEBOARDING || mode == DeckEditorMode.LIMITED_BUILDING) {
|
||||
deck.getSideboard().remove(card);
|
||||
cardSelector.removeCard(card.getId());
|
||||
cardSelector.setCardCount(deck.getSideboard().size());
|
||||
|
@ -685,7 +728,7 @@ public class DeckEditorPanel extends javax.swing.JPanel {
|
|||
}//GEN-LAST:event_btnSaveActionPerformed
|
||||
|
||||
private void btnNewActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNewActionPerformed
|
||||
if (mode == DeckEditorMode.Sideboard || mode == DeckEditorMode.Limited) {
|
||||
if (mode == DeckEditorMode.SIDEBOARDING || mode == DeckEditorMode.LIMITED_BUILDING) {
|
||||
for (Card card : deck.getCards()) {
|
||||
deck.getSideboard().add(card);
|
||||
}
|
||||
|
|
|
@ -87,13 +87,18 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
|
|||
private boolean displayNoCopies = false;
|
||||
private UpdateCountsCallback updateCountsCallback;
|
||||
|
||||
private final String column[] = { "", "Name", "Cost", "Color", "Type", "Stats", "Rarity", "Set" };
|
||||
private final String column[] = { "Qty", "Name", "Cost", "Color", "Type", "Stats", "Rarity", "Set" };
|
||||
|
||||
private SortSetting sortSetting;
|
||||
private int recentSortedColumn;
|
||||
private boolean recentAscending;
|
||||
|
||||
|
||||
private boolean numberEditable;
|
||||
|
||||
public TableModel() {
|
||||
this.numberEditable = false;
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
this.clearCardEventListeners();
|
||||
this.clearCards();
|
||||
|
@ -303,6 +308,11 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
|
|||
cardEventSource.clearListeners();
|
||||
}
|
||||
|
||||
public void setNumber(int index, int number) {
|
||||
CardView card = view.get(index);
|
||||
cardEventSource.setNumber(card, "set-number", number);
|
||||
}
|
||||
|
||||
public void doubleClick(int index) {
|
||||
CardView card = view.get(index);
|
||||
cardEventSource.doubleClick(card, "double-click");
|
||||
|
@ -326,9 +336,13 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
|
|||
|
||||
table.addKeyListener(new KeyListener() {
|
||||
@Override
|
||||
public void keyPressed(KeyEvent ev) {}
|
||||
public void keyPressed(KeyEvent ev) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyTyped(KeyEvent ev) {}
|
||||
public void keyTyped(KeyEvent ev) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void keyReleased(KeyEvent ev) {
|
||||
int row = table.getSelectedRow();
|
||||
|
@ -431,8 +445,22 @@ public class TableModel extends AbstractTableModel implements ICardGrid {
|
|||
this.updateCountsCallback = callback;
|
||||
}
|
||||
|
||||
public void setNumberEditable(boolean numberEditable) {
|
||||
this.numberEditable = numberEditable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int cardsSize() {
|
||||
return cards.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCellEditable(int row, int col) {
|
||||
if (numberEditable && col == 0) {
|
||||
return true;
|
||||
}
|
||||
return super.isCellEditable(row, col); //To change body of generated methods, choose Tools | Templates.
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -8,9 +8,9 @@ import javax.swing.*;
|
|||
*/
|
||||
public class UpdateCountsCallback {
|
||||
|
||||
private javax.swing.JLabel lblCount;
|
||||
private javax.swing.JLabel lblCreatureCount;
|
||||
private javax.swing.JLabel lblLandCount;
|
||||
private final javax.swing.JLabel lblCount;
|
||||
private final javax.swing.JLabel lblCreatureCount;
|
||||
private final javax.swing.JLabel lblLandCount;
|
||||
|
||||
public UpdateCountsCallback(JLabel count, JLabel creatures, JLabel lands) {
|
||||
this.lblCount = count;
|
||||
|
|
|
@ -469,11 +469,11 @@ public class CallbackClientImpl implements CallbackClient {
|
|||
}
|
||||
|
||||
protected void sideboard(Deck deck, UUID tableId, int time) {
|
||||
frame.showDeckEditor(DeckEditorMode.Sideboard, deck, tableId, time);
|
||||
frame.showDeckEditor(DeckEditorMode.SIDEBOARDING, deck, tableId, time);
|
||||
}
|
||||
|
||||
protected void construct(Deck deck, UUID tableId, int time) {
|
||||
frame.showDeckEditor(DeckEditorMode.Limited, deck, tableId, time);
|
||||
frame.showDeckEditor(DeckEditorMode.LIMITED_BUILDING, deck, tableId, time);
|
||||
}
|
||||
|
||||
private void handleException(Exception ex) {
|
||||
|
|
|
@ -35,12 +35,18 @@ import java.io.Serializable;
|
|||
* @author BetaSteward_at_googlemail.com
|
||||
*/
|
||||
public class Event implements Serializable {
|
||||
private Object source;
|
||||
private String eventName;
|
||||
private final Object source;
|
||||
private final String eventName;
|
||||
private final int number;
|
||||
|
||||
public Event(Object source, String eventName) {
|
||||
this(source, eventName, 0);
|
||||
}
|
||||
|
||||
public Event(Object source, String eventName, int number) {
|
||||
this.source = source;
|
||||
this.eventName = eventName;
|
||||
this.number = number;
|
||||
}
|
||||
|
||||
public Object getSource() {
|
||||
|
@ -50,4 +56,9 @@ public class Event implements Serializable {
|
|||
public String getEventName() {
|
||||
return eventName;
|
||||
}
|
||||
|
||||
public int getNumber() {
|
||||
return number;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,171 @@
|
|||
/*
|
||||
* Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification, are
|
||||
* permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice, this list of
|
||||
* conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
||||
* of conditions and the following disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The views and conclusions contained in the software and documentation are those of the
|
||||
* authors and should not be interpreted as representing official policies, either expressed
|
||||
* or implied, of BetaSteward_at_googlemail.com.
|
||||
*/
|
||||
package mage.client.util.gui;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.FocusEvent;
|
||||
import java.awt.event.FocusListener;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.util.EventObject;
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.DefaultCellEditor;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.JSpinner;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.SpinnerNumberModel;
|
||||
import javax.swing.SwingUtilities;
|
||||
import mage.client.cards.CardsList;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author LevelX2
|
||||
*/
|
||||
public class TableSpinnerEditor extends DefaultCellEditor {
|
||||
|
||||
JSpinner spinner;
|
||||
JSpinner.DefaultEditor editor;
|
||||
JTextField textField;
|
||||
boolean valueSet;
|
||||
private JTable lastTable;
|
||||
private int lastRow = -1;
|
||||
private int currentRow = -1;
|
||||
private int lastOriginalHeigh;
|
||||
private int currentOriginalHeigh;
|
||||
private static final int NEEDED_HIGH = 24;
|
||||
CardsList cardsList;
|
||||
|
||||
// Initializes the spinner.
|
||||
public TableSpinnerEditor(CardsList cardsList) {
|
||||
super(new JTextField());
|
||||
this.cardsList = cardsList;
|
||||
spinner = new JSpinner();
|
||||
spinner.setBorder(BorderFactory.createEmptyBorder());
|
||||
spinner.setModel(new SpinnerNumberModel(0,0,999,1));
|
||||
editor = ((JSpinner.DefaultEditor) spinner.getEditor());
|
||||
textField = editor.getTextField();
|
||||
textField.setHorizontalAlignment(JTextField.LEFT);
|
||||
textField.addFocusListener(new FocusListener() {
|
||||
@Override
|
||||
public void focusGained(FocusEvent fe) {
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (valueSet) {
|
||||
textField.setCaretPosition(1);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void focusLost(FocusEvent fe) {
|
||||
if (currentRow < 0) {
|
||||
stopCellEditing();
|
||||
}
|
||||
}
|
||||
});
|
||||
textField.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent ae) {
|
||||
stopCellEditing();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private synchronized void setTableRowHeigh(JTable table, int row) {
|
||||
if (lastRow >=0 && lastOriginalHeigh < NEEDED_HIGH) {
|
||||
lastTable.setRowHeight(lastRow, lastOriginalHeigh);
|
||||
}
|
||||
if (row >= 0 && currentRow >=0) {
|
||||
lastRow = currentRow;
|
||||
lastOriginalHeigh = currentOriginalHeigh;
|
||||
currentRow = -1;
|
||||
currentOriginalHeigh = -1;
|
||||
}
|
||||
lastRow = -1;
|
||||
if (table != null) {
|
||||
lastTable = table;
|
||||
currentOriginalHeigh = table.getRowHeight(row);
|
||||
currentRow = row;
|
||||
if (currentOriginalHeigh < NEEDED_HIGH) {
|
||||
lastTable.setRowHeight(currentRow, NEEDED_HIGH);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Prepares the spinner component and returns it.
|
||||
@Override
|
||||
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
|
||||
setTableRowHeigh(table, row);
|
||||
if (!valueSet) {
|
||||
spinner.setValue(value);
|
||||
}
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
textField.requestFocus();
|
||||
}
|
||||
});
|
||||
return spinner;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCellEditable(EventObject eo) {
|
||||
if (eo instanceof KeyEvent) {
|
||||
KeyEvent ke = (KeyEvent) eo;
|
||||
textField.setText(String.valueOf(ke.getKeyChar()));
|
||||
valueSet = true;
|
||||
} else {
|
||||
valueSet = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Returns the spinners current value.
|
||||
@Override
|
||||
public Object getCellEditorValue() {
|
||||
return spinner.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stopCellEditing() {
|
||||
try {
|
||||
editor.commitEdit();
|
||||
spinner.commitEdit();
|
||||
cardsList.handleSetNumber((Integer) spinner.getValue());
|
||||
setTableRowHeigh(null, 0);
|
||||
} catch (java.text.ParseException e) {
|
||||
JOptionPane.showMessageDialog(null,
|
||||
"Invalid value, discarding.");
|
||||
}
|
||||
return super.stopCellEditing();
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue