From 0e34720611322a7c126a65ec3bea23051e0830a9 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 10 May 2014 11:35:07 +0200 Subject: [PATCH] * Some more changes to the deck editor. --- .../mage/client/cards/CardEventSource.java | 2 +- .../main/java/mage/client/cards/CardGrid.java | 8 +- .../java/mage/client/cards/CardsList.form | 182 +++++++++-- .../java/mage/client/cards/CardsList.java | 236 ++++++++++---- .../mage/client/deckeditor/CardSelector.form | 145 +++++---- .../mage/client/deckeditor/CardSelector.java | 294 +++++++++--------- .../client/deckeditor/DeckEditorPanel.java | 10 +- .../client/deckeditor/table/TableModel.java | 18 +- .../table/UpdateCountsCallback.java | 21 +- .../client/util/gui/TableSpinnerEditor.java | 51 +-- .../src/main/resources/buttons/deck_pack.png | Bin 0 -> 271 bytes .../main/resources/buttons/type_artifact.png | Bin 0 -> 3787 bytes .../main/resources/buttons/type_creatures.png | Bin 0 -> 2176 bytes .../resources/buttons/type_enchantment.png | Bin 0 -> 1371 bytes .../main/resources/buttons/type_instant.png | Bin 0 -> 1674 bytes .../src/main/resources/buttons/type_land.png | Bin 0 -> 3013 bytes .../resources/buttons/type_planeswalker.png | Bin 0 -> 355 bytes Utils/release/getting_implemented_cards.txt | 2 + 18 files changed, 632 insertions(+), 337 deletions(-) create mode 100644 Mage.Client/src/main/resources/buttons/deck_pack.png create mode 100644 Mage.Client/src/main/resources/buttons/type_artifact.png create mode 100644 Mage.Client/src/main/resources/buttons/type_creatures.png create mode 100644 Mage.Client/src/main/resources/buttons/type_enchantment.png create mode 100644 Mage.Client/src/main/resources/buttons/type_instant.png create mode 100644 Mage.Client/src/main/resources/buttons/type_land.png create mode 100644 Mage.Client/src/main/resources/buttons/type_planeswalker.png diff --git a/Mage.Client/src/main/java/mage/client/cards/CardEventSource.java b/Mage.Client/src/main/java/mage/client/cards/CardEventSource.java index e4ec1eceddf..22c5d1cb0b4 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardEventSource.java +++ b/Mage.Client/src/main/java/mage/client/cards/CardEventSource.java @@ -57,7 +57,7 @@ public class CardEventSource implements EventSource, Serializable { dispatcher.fireEvent(new Event(card, message)); } - public void shiftDoubleClick(SimpleCardView card, String message) { + public void altDoubleClick(SimpleCardView card, String message) { dispatcher.fireEvent(new Event(card, message)); } diff --git a/Mage.Client/src/main/java/mage/client/cards/CardGrid.java b/Mage.Client/src/main/java/mage/client/cards/CardGrid.java index 4fb751db74c..a2369fe3149 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/CardGrid.java @@ -306,14 +306,14 @@ 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"); + if (e.isAltDown()) { + cardEventSource.altDoubleClick(((Card) obj).getOriginal(), "alt-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"); + if (e.isAltDown()) { + cardEventSource.altDoubleClick(((MageCard) obj).getOriginal(), "alt-double-click"); } else { cardEventSource.doubleClick(((MageCard) obj).getOriginal(), "double-click"); } diff --git a/Mage.Client/src/main/java/mage/client/cards/CardsList.form b/Mage.Client/src/main/java/mage/client/cards/CardsList.form index 764a8a2619b..54af84ac6da 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardsList.form +++ b/Mage.Client/src/main/java/mage/client/cards/CardsList.form @@ -1,6 +1,6 @@ -
+ @@ -34,16 +34,21 @@ - - + + + + + + + - - - + + + @@ -67,22 +72,27 @@ - - - - - - - - + + + + + + + + + + + + + - - + + - + @@ -90,17 +100,20 @@ - - + - + + + + - + + - + @@ -108,22 +121,117 @@ - - - - - - + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -138,14 +246,15 @@ - + - + + - + @@ -164,6 +273,10 @@ + + + + @@ -174,7 +287,7 @@ - + @@ -193,11 +306,12 @@ + - + diff --git a/Mage.Client/src/main/java/mage/client/cards/CardsList.java b/Mage.Client/src/main/java/mage/client/cards/CardsList.java index 87db55c6a32..4713e383dbc 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardsList.java +++ b/Mage.Client/src/main/java/mage/client/cards/CardsList.java @@ -34,9 +34,10 @@ package mage.client.cards; - - -import java.awt.*; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; @@ -45,22 +46,33 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.UUID; -import javax.swing.*; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JTable; 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 static mage.client.constants.Constants.SortBy.CASTING_COST; +import static mage.client.constants.Constants.SortBy.COLOR; +import static mage.client.constants.Constants.SortBy.COLOR_DETAILED; +import static mage.client.constants.Constants.SortBy.RARITY; import mage.client.deckeditor.SortSetting; import mage.client.deckeditor.table.TableModel; import mage.client.deckeditor.table.UpdateCountsCallback; import mage.client.dialog.PreferencesDialog; import mage.client.plugins.impl.Plugins; -import mage.client.util.*; +import mage.client.util.CardViewColorComparator; +import mage.client.util.CardViewColorDetailedComparator; +import mage.client.util.CardViewCostComparator; +import mage.client.util.CardViewNameComparator; +import mage.client.util.CardViewRarityComparator; +import mage.client.util.Config; import mage.client.util.Event; +import mage.client.util.Listener; import mage.client.util.gui.TableSpinnerEditor; +import mage.constants.CardType; import mage.view.CardView; import mage.view.CardsView; import org.mage.card.arcane.CardPanel; @@ -164,8 +176,8 @@ 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(); + if (e.isAltDown()) { + handleAltDoubleClick(); } else { handleDoubleClick(); } @@ -173,7 +185,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar } }); - mainModel.setUpdateCountsCallback(new UpdateCountsCallback(lblCount, lblCreatureCount, lblLandCount)); + mainModel.setUpdateCountsCallback(new UpdateCountsCallback(lblCount, lblCreatureCount, lblLandCount, lblSorceryCount, lblInstantCount, lblEnchantmentCount)); } // if you use the deck ediot to build a free deck, numbers can be set directly in deck and sideboard @@ -192,11 +204,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar public void handleSetNumber(int number) { if (mainTable.getSelectedRowCount() == 1) { - int[] n = mainTable.getSelectedRows(); - List indexes = asList(n); - for (Integer index : indexes) { - mainModel.setNumber(index, number); - } + mainModel.setNumber(mainTable.getSelectedRow(), number); } } @@ -211,13 +219,13 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar } } - public void handleShiftDoubleClick() { + public void handleAltDoubleClick() { if (mainTable.getSelectedRowCount() > 0) { int[] n = mainTable.getSelectedRows(); List indexes = asList(n); Collections.reverse(indexes); for (Integer index : indexes) { - mainModel.shiftDoubleClick(index); + mainModel.altDoubleClick(index); } } } @@ -236,6 +244,10 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar public void loadCards(CardsView showCards, BigCard bigCard, UUID gameId) { + int selectedRow = -1; + if (currentView.equals(mainModel)) { + selectedRow = mainTable.getSelectedRow(); + } this.cards = showCards; this.bigCard = bigCard; this.gameId = gameId; @@ -243,6 +255,12 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar cbSortBy.setSelectedItem(sortSetting.getSortBy()); chkPiles.setSelected(sortSetting.isPilesToggle()); currentView.loadCards(showCards, sortSetting, bigCard, gameId); + if (selectedRow >= 0) { + selectedRow = Math.min(selectedRow, mainTable.getRowCount()-1); + if (selectedRow >= 0) { + mainTable.setRowSelectionInterval(selectedRow, selectedRow); + } + } } private void redrawCards() { @@ -260,6 +278,9 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar int curRow = 0; int landCount = 0; int creatureCount = 0; + int sorceryCount = 0; + int instantCount = 0; + int enchantmentCount = 0; //FIXME: why we remove all cards? for performance it's better to merge changes // as it is already done in ListView cardArea.removeAll(); @@ -323,36 +344,41 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar } rectangle.setLocation(curColumn * Config.dimensions.frameWidth, curRow * 20); addCard(card, bigCard, gameId, rectangle); - if (card.getCardTypes().contains(CardType.LAND)) { - landCount++; - } - if (card.getCardTypes().contains(CardType.CREATURE)) { - creatureCount++; - } curRow++; lastCard = card; - } - else { + } else { rectangle.setLocation(curColumn * Config.dimensions.frameWidth, curRow * 20); addCard(card, bigCard, gameId, rectangle); - if (card.getCardTypes().contains(CardType.LAND)) { - landCount++; - } - if (card.getCardTypes().contains(CardType.CREATURE)) { - creatureCount++; - } curColumn++; if (curColumn == numColumns) { curColumn = 0; curRow++; } } + if (card.getCardTypes().contains(CardType.LAND)) { + landCount++; + } + if (card.getCardTypes().contains(CardType.CREATURE)) { + creatureCount++; + } + if (card.getCardTypes().contains(CardType.SORCERY)) { + sorceryCount++; + } + if (card.getCardTypes().contains(CardType.INSTANT)) { + instantCount++; + } + if (card.getCardTypes().contains(CardType.ENCHANTMENT)) { + enchantmentCount++; + } } } int count = cards != null ? cards.size() : 0; - this.lblCount.setText("Count: " + Integer.toString(count)); - this.lblCreatureCount.setText("Creatures: " + Integer.toString(creatureCount)); - this.lblLandCount.setText("Lands: " + Integer.toString(landCount)); + this.lblCount.setText(Integer.toString(count)); + this.lblCreatureCount.setText(Integer.toString(creatureCount)); + this.lblLandCount.setText(Integer.toString(landCount)); + this.lblSorceryCount.setText(Integer.toString(sorceryCount)); + this.lblInstantCount.setText(Integer.toString(instantCount)); + this.lblEnchantmentCount.setText(Integer.toString(enchantmentCount)); cardArea.setPreferredSize(new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight + 200)); cardArea.revalidate(); this.revalidate(); @@ -411,12 +437,16 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; bgView = new javax.swing.ButtonGroup(); panelControl = new javax.swing.JPanel(); lblCount = new javax.swing.JLabel(); - lblCreatureCount = new javax.swing.JLabel(); lblLandCount = new javax.swing.JLabel(); + lblCreatureCount = new javax.swing.JLabel(); + lblSorceryCount = new javax.swing.JLabel(); + lblInstantCount = new javax.swing.JLabel(); + lblEnchantmentCount = new javax.swing.JLabel(); chkPiles = new javax.swing.JCheckBox(); cbSortBy = new javax.swing.JComboBox(); jToggleListView = new javax.swing.JToggleButton(); @@ -437,13 +467,73 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar panelControl.setPreferredSize(new java.awt.Dimension(616, 23)); panelControl.setRequestFocusEnabled(false); - lblCount.setText("Card Count"); + lblCount.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/deck_pack.png"))); // NOI18N + lblCount.setText("999"); + lblCount.setToolTipText("Number of all cards in this area."); + lblCount.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + lblCount.setFocusable(false); + lblCount.setInheritsPopupMenu(false); + lblCount.setRequestFocusEnabled(false); + lblCount.setVerifyInputWhenFocusTarget(false); - lblCreatureCount.setText("Creature Count"); + lblLandCount.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + lblLandCount.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_land.png"))); // NOI18N + lblLandCount.setText("999"); + lblLandCount.setToolTipText("Number of lands."); + lblLandCount.setVerticalAlignment(javax.swing.SwingConstants.TOP); + lblLandCount.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + lblLandCount.setFocusable(false); + lblLandCount.setInheritsPopupMenu(false); + lblLandCount.setRequestFocusEnabled(false); + lblLandCount.setVerifyInputWhenFocusTarget(false); - lblLandCount.setText("Land Count"); + lblCreatureCount.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + lblCreatureCount.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_creatures.png"))); // NOI18N + lblCreatureCount.setText("999"); + lblCreatureCount.setToolTipText("Number of creatures."); + lblCreatureCount.setVerticalAlignment(javax.swing.SwingConstants.TOP); + lblCreatureCount.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + lblCreatureCount.setFocusable(false); + lblCreatureCount.setInheritsPopupMenu(false); + lblCreatureCount.setRequestFocusEnabled(false); + lblCreatureCount.setVerifyInputWhenFocusTarget(false); + + lblSorceryCount.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + lblSorceryCount.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_sorcery.png"))); // NOI18N + lblSorceryCount.setText("999"); + lblSorceryCount.setToolTipText("Number of sorceries."); + lblSorceryCount.setVerticalAlignment(javax.swing.SwingConstants.TOP); + lblSorceryCount.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + lblSorceryCount.setFocusable(false); + lblSorceryCount.setInheritsPopupMenu(false); + lblSorceryCount.setRequestFocusEnabled(false); + lblSorceryCount.setVerifyInputWhenFocusTarget(false); + + lblInstantCount.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + lblInstantCount.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_instant.png"))); // NOI18N + lblInstantCount.setText("999"); + lblInstantCount.setToolTipText("Number of instants."); + lblInstantCount.setVerticalAlignment(javax.swing.SwingConstants.TOP); + lblInstantCount.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + lblInstantCount.setFocusable(false); + lblInstantCount.setInheritsPopupMenu(false); + lblInstantCount.setRequestFocusEnabled(false); + lblInstantCount.setVerifyInputWhenFocusTarget(false); + + lblEnchantmentCount.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + lblEnchantmentCount.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_enchantment.png"))); // NOI18N + lblEnchantmentCount.setText("999"); + lblEnchantmentCount.setToolTipText("Number of enchantments."); + lblEnchantmentCount.setVerticalAlignment(javax.swing.SwingConstants.TOP); + lblEnchantmentCount.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); + lblEnchantmentCount.setFocusable(false); + lblEnchantmentCount.setInheritsPopupMenu(false); + lblEnchantmentCount.setRequestFocusEnabled(false); + lblEnchantmentCount.setVerifyInputWhenFocusTarget(false); chkPiles.setText("Piles"); + chkPiles.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + chkPiles.setMargin(new java.awt.Insets(3, 2, 2, 2)); chkPiles.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { chkPilesActionPerformed(evt); @@ -452,10 +542,11 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar cbSortBy.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "SortBy" })); cbSortBy.setToolTipText("Sort the cards if card view is active."); - cbSortBy.setMaximumSize(new java.awt.Dimension(80, 20)); - cbSortBy.setMinimumSize(new java.awt.Dimension(80, 20)); + cbSortBy.setMaximumSize(new java.awt.Dimension(120, 20)); + cbSortBy.setMinimumSize(new java.awt.Dimension(120, 20)); cbSortBy.setName("SortBy"); // NOI18N - cbSortBy.setPreferredSize(new java.awt.Dimension(80, 20)); + cbSortBy.setOpaque(false); + cbSortBy.setPreferredSize(new java.awt.Dimension(120, 20)); cbSortBy.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cbSortByActionPerformed(evt); @@ -465,10 +556,12 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar bgView.add(jToggleListView); jToggleListView.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/list_panel.png"))); // NOI18N jToggleListView.setToolTipText("Shows the cards as a list."); + jToggleListView.setBorder(null); + jToggleListView.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); jToggleListView.setMargin(new java.awt.Insets(2, 6, 2, 6)); jToggleListView.setMaximumSize(new java.awt.Dimension(37, 25)); jToggleListView.setMinimumSize(new java.awt.Dimension(37, 25)); - jToggleListView.setPreferredSize(new java.awt.Dimension(37, 22)); + jToggleListView.setPreferredSize(new java.awt.Dimension(44, 22)); jToggleListView.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jToggleListViewActionPerformed(evt); @@ -478,8 +571,9 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar bgView.add(jToggleCardView); jToggleCardView.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/card_panel.png"))); // NOI18N jToggleCardView.setToolTipText("Shows the card as images."); + jToggleCardView.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); jToggleCardView.setMargin(new java.awt.Insets(2, 6, 2, 6)); - jToggleCardView.setPreferredSize(new java.awt.Dimension(33, 22)); + jToggleCardView.setPreferredSize(new java.awt.Dimension(40, 22)); jToggleCardView.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jToggleCardViewActionPerformed(evt); @@ -490,36 +584,44 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar panelControl.setLayout(panelControlLayout); panelControlLayout.setHorizontalGroup( panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelControlLayout.createSequentialGroup() - .addContainerGap() - .addComponent(lblCount, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(panelControlLayout.createSequentialGroup() + .addComponent(lblCount) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(lblCreatureCount, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lblLandCount) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(lblCreatureCount) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(lblSorceryCount) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(lblInstantCount) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(lblEnchantmentCount) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(lblLandCount, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(chkPiles) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(cbSortBy, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(cbSortBy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .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(287, 287, 287)) + .addGap(0, 55, Short.MAX_VALUE)) ); panelControlLayout.setVerticalGroup( panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelControlLayout.createSequentialGroup() .addGroup(panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelControlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(cbSortBy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblCount) - .addComponent(lblCreatureCount) .addComponent(lblLandCount) - .addComponent(chkPiles) - .addComponent(jToggleListView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(lblCreatureCount) + .addComponent(lblSorceryCount) + .addComponent(lblInstantCount, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lblEnchantmentCount) + .addComponent(chkPiles)) + .addComponent(cbSortBy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jToggleListView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jToggleCardView, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap()) + .addGap(0, 0, 0)) ); jToggleListView.getAccessibleContext().setAccessibleDescription("Switch between image and table view."); @@ -531,15 +633,18 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(panelCardArea) - .addComponent(panelControl, javax.swing.GroupLayout.DEFAULT_SIZE, 818, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addGap(1, 1, 1) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(panelControl, javax.swing.GroupLayout.DEFAULT_SIZE, 654, Short.MAX_VALUE) + .addComponent(panelCardArea))) ); 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) + .addComponent(panelControl, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) - .addComponent(panelCardArea, javax.swing.GroupLayout.DEFAULT_SIZE, 69, Short.MAX_VALUE)) + .addComponent(panelCardArea, javax.swing.GroupLayout.DEFAULT_SIZE, 266, Short.MAX_VALUE)) ); }// //GEN-END:initComponents @@ -580,7 +685,10 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar private javax.swing.JToggleButton jToggleListView; private javax.swing.JLabel lblCount; private javax.swing.JLabel lblCreatureCount; + private javax.swing.JLabel lblEnchantmentCount; + private javax.swing.JLabel lblInstantCount; private javax.swing.JLabel lblLandCount; + private javax.swing.JLabel lblSorceryCount; private javax.swing.JScrollPane panelCardArea; private javax.swing.JPanel panelControl; // End of variables declaration//GEN-END:variables @@ -595,15 +703,15 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar e.consume(); Object obj = e.getSource(); if (obj instanceof Card) { - if (e.isShiftDown()) { - cardEventSource.shiftDoubleClick(((Card)obj).getOriginal(), "shift-double-click"); + if (e.isAltDown()) { + cardEventSource.altDoubleClick(((Card)obj).getOriginal(), "alt-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"); + if (e.isAltDown()) { + cardEventSource.altDoubleClick(((MageCard)obj).getOriginal(), "alt-double-click"); } else { cardEventSource.doubleClick(((MageCard)obj).getOriginal(), "double-click"); diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form index 0c5ec8cd5fd..b3c2a7d1ce0 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form +++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form @@ -21,9 +21,9 @@ - + - + @@ -45,7 +45,7 @@ - + @@ -144,7 +144,7 @@ - + @@ -235,7 +235,7 @@ - + @@ -243,103 +243,133 @@ - + + + + + - - + - + - + + + + + - - + - + - + + + + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + + + + - + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -448,6 +478,9 @@ + + + @@ -514,7 +547,7 @@ - + @@ -525,7 +558,7 @@ - + @@ -537,7 +570,7 @@ - + @@ -548,7 +581,7 @@ - + @@ -617,7 +650,7 @@ - + @@ -640,7 +673,7 @@ - + diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java index 9d389f57db0..f54c1fcd9d4 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java @@ -144,6 +144,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene mainTable.getColumnModel().getColumn(6).setPreferredWidth(15); mainTable.getColumnModel().getColumn(7).setPreferredWidth(15); + // mainTable.setToolTipText(cardSelectorScrollPane.getToolTipText()); cardSelectorScrollPane.setViewportView(mainTable); mainTable.setOpaque(false); cbSortBy.setEnabled(false); @@ -154,7 +155,7 @@ 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()) { + if (e.isAltDown()) { jButtonAddToSideboardActionPerformed(null); } else { jButtonAddToMainActionPerformed(null); @@ -242,25 +243,25 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene filter.add(Predicates.or(predicates)); predicates.clear(); - if (this.rdoLand.isSelected()) { + if (this.tbLand.isSelected()) { predicates.add(new CardTypePredicate(CardType.LAND)); } - if (this.rdoArtifacts.isSelected()) { + if (this.tbArifiacts.isSelected()) { predicates.add(new CardTypePredicate(CardType.ARTIFACT)); } - if (this.rdoCreatures.isSelected()) { + if (this.tbCreatures.isSelected()) { predicates.add(new CardTypePredicate(CardType.CREATURE)); } - if (this.rdoEnchantments.isSelected()) { + if (this.tbEnchantments.isSelected()) { predicates.add(new CardTypePredicate(CardType.ENCHANTMENT)); } - if (this.rdoInstants.isSelected()) { + if (this.tbInstants.isSelected()) { predicates.add(new CardTypePredicate(CardType.INSTANT)); } - if (this.rdoSorceries.isSelected()) { + if (this.tbSorceries.isSelected()) { predicates.add(new CardTypePredicate(CardType.SORCERY)); } - if (this.rdoPlaneswalkers.isSelected()) { + if (this.tbPlaneswalkers.isSelected()) { predicates.add(new CardTypePredicate(CardType.PLANESWALKER)); } filter.add(Predicates.or(predicates)); @@ -290,25 +291,25 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene criteria.white(this.tbWhite.isSelected()); criteria.colorless(this.tbColorless.isSelected()); - if (this.rdoLand.isSelected()) { + if (this.tbLand.isSelected()) { criteria.types(CardType.LAND); } - if (this.rdoArtifacts.isSelected()) { + if (this.tbArifiacts.isSelected()) { criteria.types(CardType.ARTIFACT); } - if (this.rdoCreatures.isSelected()) { + if (this.tbCreatures.isSelected()) { criteria.types(CardType.CREATURE); } - if (this.rdoEnchantments.isSelected()) { + if (this.tbEnchantments.isSelected()) { criteria.types(CardType.ENCHANTMENT); } - if (this.rdoInstants.isSelected()) { + if (this.tbInstants.isSelected()) { criteria.types(CardType.INSTANT); } - if (this.rdoSorceries.isSelected()) { + if (this.tbSorceries.isSelected()) { criteria.types(CardType.SORCERY); } - if (this.rdoPlaneswalkers.isSelected()) { + if (this.tbPlaneswalkers.isSelected()) { criteria.types(CardType.PLANESWALKER); } @@ -349,13 +350,13 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene // ALT or CTRL button was pushed if ((modifiers & ActionEvent.ALT_MASK) == ActionEvent.ALT_MASK || (modifiers & ActionEvent.CTRL_MASK) == ActionEvent.CTRL_MASK) { boolean invert = (modifiers & ActionEvent.ALT_MASK) == ActionEvent.ALT_MASK; - rdoArtifacts.setSelected(inverter(invert, rdoArtifacts.getActionCommand(), actionCommand)); - rdoCreatures.setSelected(inverter(invert, rdoCreatures.getActionCommand(), actionCommand)); - rdoEnchantments.setSelected(inverter(invert, rdoEnchantments.getActionCommand(), actionCommand)); - rdoInstants.setSelected(inverter(invert, rdoInstants.getActionCommand(), actionCommand)); - rdoLand.setSelected(inverter(invert, rdoLand.getActionCommand(), actionCommand)); - rdoPlaneswalkers.setSelected(inverter(invert, rdoPlaneswalkers.getActionCommand(), actionCommand)); - rdoSorceries.setSelected(inverter(invert, rdoSorceries.getActionCommand(), actionCommand)); + tbArifiacts.setSelected(inverter(invert, tbArifiacts.getActionCommand(), actionCommand)); + tbCreatures.setSelected(inverter(invert, tbCreatures.getActionCommand(), actionCommand)); + tbEnchantments.setSelected(inverter(invert, tbEnchantments.getActionCommand(), actionCommand)); + tbInstants.setSelected(inverter(invert, tbInstants.getActionCommand(), actionCommand)); + tbLand.setSelected(inverter(invert, tbLand.getActionCommand(), actionCommand)); + tbPlaneswalkers.setSelected(inverter(invert, tbPlaneswalkers.getActionCommand(), actionCommand)); + tbSorceries.setSelected(inverter(invert, tbSorceries.getActionCommand(), actionCommand)); } filterCards(); } @@ -437,14 +438,14 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene btnBooster = new javax.swing.JButton(); btnClear = new javax.swing.JButton(); tbTypes = new javax.swing.JToolBar(); - rdoLand = new javax.swing.JRadioButton(); - rdoCreatures = new javax.swing.JRadioButton(); - rdoArtifacts = new javax.swing.JRadioButton(); - rdoEnchantments = new javax.swing.JRadioButton(); - rdoInstants = new javax.swing.JRadioButton(); - rdoSorceries = new javax.swing.JRadioButton(); - rdoPlaneswalkers = new javax.swing.JRadioButton(); - jSeparator5 = new javax.swing.JToolBar.Separator(); + tbLand = new javax.swing.JToggleButton(); + tbCreatures = new javax.swing.JToggleButton(); + tbArifiacts = new javax.swing.JToggleButton(); + tbSorceries = new javax.swing.JToggleButton(); + tbInstants = new javax.swing.JToggleButton(); + tbEnchantments = new javax.swing.JToggleButton(); + tbPlaneswalkers = new javax.swing.JToggleButton(); + jSeparator6 = new javax.swing.JToolBar.Separator(); chkPiles = new javax.swing.JCheckBox(); jSeparator3 = new javax.swing.JToolBar.Separator(); cbSortBy = new javax.swing.JComboBox(); @@ -466,7 +467,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbColor.setFloatable(false); tbColor.setRollover(true); - tbColor.setToolTipText("Click with ALT to deselect all other colors or with CTRL to invert selection."); + tbColor.setToolTipText("Hold the ALT-key while clicking to deselect all other colors or hold the CTRL-key to select only all other colors."); tbColor.setBorderPainted(false); tbColor.setName(""); // NOI18N @@ -534,7 +535,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbWhite.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_white_off.png"))); // NOI18N tbWhite.setSelected(true); - tbWhite.setToolTipText("White
" + tbColor.getToolTipText()); + tbWhite.setToolTipText("White
" + tbColor.getToolTipText()); tbWhite.setActionCommand("White"); tbWhite.setFocusable(false); tbWhite.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); @@ -601,101 +602,114 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbTypes.setFloatable(false); tbTypes.setRollover(true); - tbTypes.setToolTipText("Click with ALT to deselect all other card types or with CTRL to deselect only clicked type."); // NOI18N + tbTypes.setToolTipText("Hold the ALT-key while clicking to deselect all other card types or hold the CTRL-key to only select all other card types."); // NOI18N tbTypes.setPreferredSize(new java.awt.Dimension(732, 27)); - rdoLand.setSelected(true); - rdoLand.setToolTipText("Land
" + tbLand.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_land.png"))); // NOI18N + tbLand.setSelected(true); + tbLand.setToolTipText("Land
" + tbTypes.getToolTipText()); - rdoLand.setFocusable(false); - rdoLand.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); - rdoLand.setLabel("Land "); - rdoLand.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - rdoLand.addActionListener(new java.awt.event.ActionListener() { + tbLand.setActionCommand("Lands"); + tbLand.setFocusable(false); + tbLand.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + tbLand.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + tbLand.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - rdoLandActionPerformed(evt); + tbLandActionPerformed(evt); } }); - tbTypes.add(rdoLand); + tbTypes.add(tbLand); - rdoCreatures.setSelected(true); - rdoCreatures.setToolTipText("Creatures
" + tbCreatures.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_creatures.png"))); // NOI18N + tbCreatures.setSelected(true); + tbCreatures.setToolTipText("Creatures
" + tbTypes.getToolTipText()); - rdoCreatures.setFocusable(false); - rdoCreatures.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); - rdoCreatures.setLabel("Creatures "); - rdoCreatures.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - rdoCreatures.addActionListener(new java.awt.event.ActionListener() { + tbCreatures.setActionCommand("Creatures"); + tbCreatures.setFocusable(false); + tbCreatures.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + tbCreatures.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + tbCreatures.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - rdoCreaturesActionPerformed(evt); + tbCreaturesActionPerformed(evt); } }); - tbTypes.add(rdoCreatures); + tbTypes.add(tbCreatures); - rdoArtifacts.setSelected(true); - rdoArtifacts.setText("Artifacts "); - rdoArtifacts.setToolTipText("Artifacts
" + tbArifiacts.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_artifact.png"))); // NOI18N + tbArifiacts.setSelected(true); + tbArifiacts.setToolTipText("Artifacts
" + tbTypes.getToolTipText()); - rdoArtifacts.setFocusable(false); - rdoArtifacts.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); - rdoArtifacts.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - rdoArtifacts.addActionListener(new java.awt.event.ActionListener() { + tbArifiacts.setActionCommand("Artifacts"); + tbArifiacts.setFocusable(false); + tbArifiacts.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + tbArifiacts.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + tbArifiacts.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - rdoArtifactsActionPerformed(evt); + tbArifiactsActionPerformed(evt); } }); - tbTypes.add(rdoArtifacts); + tbTypes.add(tbArifiacts); - rdoEnchantments.setSelected(true); - rdoEnchantments.setText("Enchantments "); - rdoEnchantments.setToolTipText("Enchantments
" + tbSorceries.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_sorcery.png"))); // NOI18N + tbSorceries.setSelected(true); + tbSorceries.setToolTipText("Sorceries
" + tbTypes.getToolTipText()); - rdoEnchantments.setFocusable(false); - rdoEnchantments.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); - rdoEnchantments.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - rdoEnchantments.addActionListener(new java.awt.event.ActionListener() { + tbSorceries.setActionCommand("Soceries"); + tbSorceries.setFocusable(false); + tbSorceries.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + tbSorceries.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + tbSorceries.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - rdoEnchantmentsActionPerformed(evt); + tbSorceriesActionPerformed(evt); } }); - tbTypes.add(rdoEnchantments); + tbTypes.add(tbSorceries); - rdoInstants.setSelected(true); - rdoInstants.setText("Instants "); - rdoInstants.setFocusable(false); - rdoInstants.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); - rdoInstants.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - rdoInstants.addActionListener(new java.awt.event.ActionListener() { + tbInstants.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_instant.png"))); // NOI18N + tbInstants.setSelected(true); + tbInstants.setToolTipText("Instants
" + + tbTypes.getToolTipText()); + tbInstants.setActionCommand("Instants"); + tbInstants.setFocusable(false); + tbInstants.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + tbInstants.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + tbInstants.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - rdoInstantsActionPerformed(evt); + tbInstantsActionPerformed(evt); } }); - tbTypes.add(rdoInstants); + tbTypes.add(tbInstants); - rdoSorceries.setSelected(true); - rdoSorceries.setText("Sorceries "); - rdoSorceries.setFocusable(false); - rdoSorceries.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); - rdoSorceries.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - rdoSorceries.addActionListener(new java.awt.event.ActionListener() { + tbEnchantments.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_enchantment.png"))); // NOI18N + tbEnchantments.setSelected(true); + tbEnchantments.setToolTipText("Enchantments
" + + tbTypes.getToolTipText()); + tbEnchantments.setActionCommand("Enchantments"); + tbEnchantments.setFocusable(false); + tbEnchantments.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + tbEnchantments.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + tbEnchantments.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - rdoSorceriesActionPerformed(evt); + tbEnchantmentsActionPerformed(evt); } }); - tbTypes.add(rdoSorceries); + tbTypes.add(tbEnchantments); - rdoPlaneswalkers.setSelected(true); - rdoPlaneswalkers.setText("Planeswalkers "); - rdoPlaneswalkers.setFocusable(false); - rdoPlaneswalkers.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); - rdoPlaneswalkers.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - rdoPlaneswalkers.addActionListener(new java.awt.event.ActionListener() { + tbPlaneswalkers.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_planeswalker.png"))); // NOI18N + tbPlaneswalkers.setSelected(true); + tbPlaneswalkers.setToolTipText("Planeswalker
" + + tbTypes.getToolTipText()); + tbPlaneswalkers.setActionCommand("Planeswalkers"); + tbPlaneswalkers.setFocusable(false); + tbPlaneswalkers.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + tbPlaneswalkers.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + tbPlaneswalkers.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { - rdoPlaneswalkersActionPerformed(evt); + tbPlaneswalkersActionPerformed(evt); } }); - tbTypes.add(rdoPlaneswalkers); - tbTypes.add(jSeparator5); + tbTypes.add(tbPlaneswalkers); + tbTypes.add(jSeparator6); chkPiles.setText("Piles"); chkPiles.setToolTipText("Shows the card in piles by the selected sort."); @@ -759,15 +773,17 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene }); tbTypes.add(jToggleCardView); + cardSelectorScrollPane.setToolTipText("Double click to add the card to the main deck.
\nALT + Double click to add the card to the sideboard."); + cardSelectorBottomPanel.setOpaque(false); cardSelectorBottomPanel.setPreferredSize(new java.awt.Dimension(897, 40)); jButtonAddToMain.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/deck_in.png"))); // NOI18N - jButtonAddToMain.setToolTipText("Add selected cards to deck"); + jButtonAddToMain.setToolTipText("Add selected cards to deck.
\nAlternative: Double click the card in card selector to move a card to the deck."); jButtonAddToMain.setMargin(null); jButtonAddToMain.setMaximumSize(new java.awt.Dimension(42, 23)); jButtonAddToMain.setMinimumSize(new java.awt.Dimension(42, 23)); - jButtonAddToMain.setPreferredSize(new java.awt.Dimension(28, 22)); + jButtonAddToMain.setPreferredSize(new java.awt.Dimension(40, 28)); jButtonAddToMain.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonAddToMainActionPerformed(evt); @@ -775,11 +791,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene }); jButtonAddToSideboard.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/sideboard_in.png"))); // NOI18N - jButtonAddToSideboard.setToolTipText("Add selected cards to sideboard."); + jButtonAddToSideboard.setToolTipText("Add selected cards to sideboard.
\nAlternative: ALT key + Double click the card in card selector to move a card to the sideboard."); jButtonAddToSideboard.setMargin(new java.awt.Insets(2, 0, 2, 0)); jButtonAddToSideboard.setMaximumSize(new java.awt.Dimension(100, 30)); jButtonAddToSideboard.setMinimumSize(new java.awt.Dimension(10, 30)); - jButtonAddToSideboard.setPreferredSize(new java.awt.Dimension(28, 22)); + jButtonAddToSideboard.setPreferredSize(new java.awt.Dimension(40, 28)); jButtonAddToSideboard.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonAddToSideboardActionPerformed(evt); @@ -817,7 +833,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene jButtonRemoveFromMain.setMargin(null); jButtonRemoveFromMain.setMaximumSize(new java.awt.Dimension(42, 23)); jButtonRemoveFromMain.setMinimumSize(new java.awt.Dimension(42, 23)); - jButtonRemoveFromMain.setPreferredSize(new java.awt.Dimension(28, 22)); + jButtonRemoveFromMain.setPreferredSize(new java.awt.Dimension(40, 28)); jButtonRemoveFromMain.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonRemoveFromMainActionPerformed(evt); @@ -829,7 +845,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene jButtonRemoveFromSideboard.setMargin(new java.awt.Insets(2, 0, 2, 0)); jButtonRemoveFromSideboard.setMaximumSize(new java.awt.Dimension(10, 30)); jButtonRemoveFromSideboard.setMinimumSize(new java.awt.Dimension(100, 30)); - jButtonRemoveFromSideboard.setPreferredSize(new java.awt.Dimension(28, 22)); + jButtonRemoveFromSideboard.setPreferredSize(new java.awt.Dimension(40, 28)); jButtonRemoveFromSideboard.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonRemoveFromSideboardActionPerformed(evt); @@ -889,9 +905,9 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(tbColor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(tbTypes, javax.swing.GroupLayout.DEFAULT_SIZE, 897, Short.MAX_VALUE) + .addComponent(tbTypes, javax.swing.GroupLayout.DEFAULT_SIZE, 1057, Short.MAX_VALUE) .addComponent(cardSelectorScrollPane) - .addComponent(cardSelectorBottomPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(cardSelectorBottomPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 1057, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -906,34 +922,6 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene ); }// //GEN-END:initComponents - private void rdoLandActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoLandActionPerformed - filterCardsType(evt.getModifiers(), evt.getActionCommand()); - }//GEN-LAST:event_rdoLandActionPerformed - - private void rdoCreaturesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoCreaturesActionPerformed - filterCardsType(evt.getModifiers(), evt.getActionCommand()); - }//GEN-LAST:event_rdoCreaturesActionPerformed - - private void rdoArtifactsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoArtifactsActionPerformed - filterCardsType(evt.getModifiers(), evt.getActionCommand()); - }//GEN-LAST:event_rdoArtifactsActionPerformed - - private void rdoEnchantmentsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoEnchantmentsActionPerformed - filterCardsType(evt.getModifiers(), evt.getActionCommand()); - }//GEN-LAST:event_rdoEnchantmentsActionPerformed - - private void rdoInstantsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoInstantsActionPerformed - filterCardsType(evt.getModifiers(), evt.getActionCommand()); - }//GEN-LAST:event_rdoInstantsActionPerformed - - private void rdoSorceriesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoSorceriesActionPerformed - filterCardsType(evt.getModifiers(), evt.getActionCommand()); - }//GEN-LAST:event_rdoSorceriesActionPerformed - - private void rdoPlaneswalkersActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rdoPlaneswalkersActionPerformed - filterCardsType(evt.getModifiers(), evt.getActionCommand()); - }//GEN-LAST:event_rdoPlaneswalkersActionPerformed - private void cbExpansionSetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbExpansionSetActionPerformed filterCards(); }//GEN-LAST:event_cbExpansionSetActionPerformed @@ -1021,7 +1009,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene List indexes = asList(n); Collections.reverse(indexes); for (Integer index : indexes) { - mainModel.shiftDoubleClick(index); + mainModel.altDoubleClick(index); } //if (!mode.equals(Constants.DeckEditorMode.Constructed)) if (limited) { @@ -1072,6 +1060,34 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene filterCardsColor(evt.getModifiers(), evt.getActionCommand()); }//GEN-LAST:event_tbColorlessActionPerformed + private void tbCreaturesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tbCreaturesActionPerformed + filterCardsType(evt.getModifiers(), evt.getActionCommand()); + }//GEN-LAST:event_tbCreaturesActionPerformed + + private void tbArifiactsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tbArifiactsActionPerformed + filterCardsType(evt.getModifiers(), evt.getActionCommand()); + }//GEN-LAST:event_tbArifiactsActionPerformed + + private void tbSorceriesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tbSorceriesActionPerformed + filterCardsType(evt.getModifiers(), evt.getActionCommand()); + }//GEN-LAST:event_tbSorceriesActionPerformed + + private void tbInstantsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tbInstantsActionPerformed + filterCardsType(evt.getModifiers(), evt.getActionCommand()); + }//GEN-LAST:event_tbInstantsActionPerformed + + private void tbEnchantmentsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tbEnchantmentsActionPerformed + filterCardsType(evt.getModifiers(), evt.getActionCommand()); + }//GEN-LAST:event_tbEnchantmentsActionPerformed + + private void tbPlaneswalkersActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tbPlaneswalkersActionPerformed + filterCardsType(evt.getModifiers(), evt.getActionCommand()); + }//GEN-LAST:event_tbPlaneswalkersActionPerformed + + private void tbLandActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tbLandActionPerformed + filterCardsType(evt.getModifiers(), evt.getActionCommand()); + }//GEN-LAST:event_tbLandActionPerformed + private void toggleViewMode() { if (currentView instanceof CardGrid) { jToggleListView.setSelected(true); @@ -1137,23 +1153,23 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene private javax.swing.JToolBar.Separator jSeparator2; private javax.swing.JToolBar.Separator jSeparator3; private javax.swing.JToolBar.Separator jSeparator4; - private javax.swing.JToolBar.Separator jSeparator5; + private javax.swing.JToolBar.Separator jSeparator6; private javax.swing.JTextField jTextFieldSearch; private javax.swing.JToggleButton jToggleCardView; private javax.swing.JToggleButton jToggleListView; - private javax.swing.JRadioButton rdoArtifacts; - private javax.swing.JRadioButton rdoCreatures; - private javax.swing.JRadioButton rdoEnchantments; - private javax.swing.JRadioButton rdoInstants; - private javax.swing.JRadioButton rdoLand; - private javax.swing.JRadioButton rdoPlaneswalkers; - private javax.swing.JRadioButton rdoSorceries; + private javax.swing.JToggleButton tbArifiacts; private javax.swing.JToggleButton tbBlack; private javax.swing.JToggleButton tbBlue; private javax.swing.JToolBar tbColor; private javax.swing.JToggleButton tbColorless; + private javax.swing.JToggleButton tbCreatures; + private javax.swing.JToggleButton tbEnchantments; private javax.swing.JToggleButton tbGreen; + private javax.swing.JToggleButton tbInstants; + private javax.swing.JToggleButton tbLand; + private javax.swing.JToggleButton tbPlaneswalkers; private javax.swing.JToggleButton tbRed; + private javax.swing.JToggleButton tbSorceries; private javax.swing.JToolBar tbTypes; private javax.swing.JToggleButton tbWhite; // End of variables declaration//GEN-END:variables diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java index 9f1d691d242..1586dfb1917 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java @@ -213,7 +213,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { case "double-click": moveSelectorCardToDeck(event); break; - case "shift-double-click": + case "alt-double-click": if (mode == DeckEditorMode.FREE_BUILDING) { moveSelectorCardToSideboard(event); } else { @@ -252,7 +252,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { refreshDeck(); break; } - case "shift-double-click": + case "alt-double-click": { SimpleCardView cardView = (SimpleCardView) event.getSource(); for (Card card : deck.getCards()) { @@ -275,7 +275,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { // constructing phase or sideboarding during match -> card goes always to sideboard switch (event.getEventName()) { case "double-click": - case "shift-double-click": + case "alt-double-click": { SimpleCardView cardView = (SimpleCardView) event.getSource(); for (Card card : deck.getCards()) { @@ -313,7 +313,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { hidePopup(); refreshDeck(); break; - case "shift-double-click": + case "alt-double-click": // remove card from sideboard cardView = (SimpleCardView) event.getSource(); for (Card card : deck.getSideboard()) { @@ -335,7 +335,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { // construct phase or sideboarding during match switch (event.getEventName()) { case "double-click": - case "shift-double-click": + case "alt-double-click": SimpleCardView cardView = (SimpleCardView) event.getSource(); for (Card card : deck.getSideboard()) { if (card.getId().equals(cardView.getId())) { diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/table/TableModel.java b/Mage.Client/src/main/java/mage/client/deckeditor/table/TableModel.java index f59bf2c453b..c79d00ba4ce 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/table/TableModel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/table/TableModel.java @@ -119,6 +119,9 @@ public class TableModel extends AbstractTableModel implements ICardGrid { this.gameId = gameId; int landCount = 0; int creatureCount = 0; + int instantCount = 0; + int sorceryCount = 0; + int enchantmentCount = 0; if (!merge) { this.clearCards(); for (CardView card : showCards.values()) { @@ -136,6 +139,15 @@ public class TableModel extends AbstractTableModel implements ICardGrid { if (card.getCardTypes().contains(CardType.CREATURE)) { creatureCount++; } + if (card.getCardTypes().contains(CardType.INSTANT)) { + instantCount++; + } + if (card.getCardTypes().contains(CardType.SORCERY)) { + sorceryCount++; + } + if (card.getCardTypes().contains(CardType.ENCHANTMENT)) { + enchantmentCount++; + } } } @@ -186,7 +198,7 @@ public class TableModel extends AbstractTableModel implements ICardGrid { } if (updateCountsCallback != null) { - updateCountsCallback.update(cards.size(), creatureCount, landCount); + updateCountsCallback.update(cards.size(), creatureCount, landCount, sorceryCount, instantCount, enchantmentCount); } } @@ -318,9 +330,9 @@ public class TableModel extends AbstractTableModel implements ICardGrid { cardEventSource.doubleClick(card, "double-click"); } - public void shiftDoubleClick(int index) { + public void altDoubleClick(int index) { CardView card = view.get(index); - cardEventSource.shiftDoubleClick(card, "shift-double-click"); + cardEventSource.altDoubleClick(card, "alt-double-click"); } public void removeFromMainEvent(int index) { diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/table/UpdateCountsCallback.java b/Mage.Client/src/main/java/mage/client/deckeditor/table/UpdateCountsCallback.java index b09d6f1b3e2..d0cac93a8de 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/table/UpdateCountsCallback.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/table/UpdateCountsCallback.java @@ -1,6 +1,6 @@ package mage.client.deckeditor.table; -import javax.swing.*; +import javax.swing.JLabel; /** * Updates counts in deck editor. @@ -11,16 +11,25 @@ public class UpdateCountsCallback { private final javax.swing.JLabel lblCount; private final javax.swing.JLabel lblCreatureCount; private final javax.swing.JLabel lblLandCount; + private final javax.swing.JLabel lblSoerceryCount; + private final javax.swing.JLabel lblInstantCount; + private final javax.swing.JLabel lblEnchantmentCount; - public UpdateCountsCallback(JLabel count, JLabel creatures, JLabel lands) { + public UpdateCountsCallback(JLabel count, JLabel creatures, JLabel lands, JLabel sorceries, JLabel instants, JLabel enchantments) { this.lblCount = count; this.lblCreatureCount = creatures; this.lblLandCount = lands; + this.lblSoerceryCount = sorceries; + this.lblInstantCount = instants; + this.lblEnchantmentCount = enchantments; } - public void update(int count, int creatures, int lands) { - this.lblCount.setText("Count: " + Integer.toString(count)); - this.lblCreatureCount.setText("Creatures: " + Integer.toString(creatures)); - this.lblLandCount.setText("Lands: " + Integer.toString(lands)); + public void update(int count, int creatures, int lands, int sorceries, int instants, int enchantments) { + this.lblCount.setText(Integer.toString(count)); + this.lblCreatureCount.setText(Integer.toString(creatures)); + this.lblLandCount.setText(Integer.toString(lands)); + this.lblSoerceryCount.setText(Integer.toString(sorceries)); + this.lblInstantCount.setText(Integer.toString(instants)); + this.lblEnchantmentCount.setText(Integer.toString(enchantments)); } } diff --git a/Mage.Client/src/main/java/mage/client/util/gui/TableSpinnerEditor.java b/Mage.Client/src/main/java/mage/client/util/gui/TableSpinnerEditor.java index 26d1d520e5e..ec79adea15e 100644 --- a/Mage.Client/src/main/java/mage/client/util/gui/TableSpinnerEditor.java +++ b/Mage.Client/src/main/java/mage/client/util/gui/TableSpinnerEditor.java @@ -54,7 +54,7 @@ public class TableSpinnerEditor extends DefaultCellEditor { JSpinner.DefaultEditor editor; JTextField textField; boolean valueSet; - private JTable lastTable; + private JTable table; private int lastRow = -1; private int currentRow = -1; private int lastOriginalHeigh; @@ -75,6 +75,14 @@ public class TableSpinnerEditor extends DefaultCellEditor { textField.addFocusListener(new FocusListener() { @Override public void focusGained(FocusEvent fe) { + lastOriginalHeigh = currentOriginalHeigh; + currentOriginalHeigh = 0; + lastRow = currentRow; + currentRow = -1; + if (lastOriginalHeigh < NEEDED_HIGH) { + table.setRowHeight(lastRow, NEEDED_HIGH); + } + SwingUtilities.invokeLater(new Runnable() { @Override public void run() { @@ -86,7 +94,8 @@ public class TableSpinnerEditor extends DefaultCellEditor { } @Override - public void focusLost(FocusEvent fe) { + public void focusLost(FocusEvent fe) { + resetRow(); if (currentRow < 0) { stopCellEditing(); } @@ -100,31 +109,23 @@ public class TableSpinnerEditor extends DefaultCellEditor { }); } - 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); - } - } + private synchronized void resetRow() { + if (lastRow >= 0) { + cardsList.handleSetNumber((Integer) spinner.getValue()); + table.setRowHeight(lastRow, lastOriginalHeigh); + lastRow = -1; + } } // 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 (this.table == null) { + this.table = table; + } + currentOriginalHeigh = table.getRowHeight(row); + currentRow = row; + if (!valueSet) { spinner.setValue(value); } @@ -159,9 +160,9 @@ public class TableSpinnerEditor extends DefaultCellEditor { public boolean stopCellEditing() { try { editor.commitEdit(); - spinner.commitEdit(); - cardsList.handleSetNumber((Integer) spinner.getValue()); - setTableRowHeigh(null, 0); + spinner.commitEdit(); + resetRow(); + } catch (java.text.ParseException e) { JOptionPane.showMessageDialog(null, "Invalid value, discarding."); diff --git a/Mage.Client/src/main/resources/buttons/deck_pack.png b/Mage.Client/src/main/resources/buttons/deck_pack.png new file mode 100644 index 0000000000000000000000000000000000000000..b45da8919ec2b02db476d910ef0f608f993c3519 GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`kN5fEmas?8@26g=qZ z;uvCaIypf>ZVN*pyFj-=0HX-Q$4Z4b#v}7JO)XeD-ZO7xnX=xo^Pri-ADJu;D+jY1 zZ4!q~7PQ?I5EQX#;bE?PZ+K<*5jIvohD~p+1fB~>is=5RImmRRePN@oPk_LePgx3a zJ}E#(5$lySPNk+M4Snqgp7AFf9VbmMRE>!UnDFGOjLGzaJpXu)>~4%;XrErl6cZQL zDAjiMG|!P|0!e#(1SUL6UBs|4PEGQ`XCqgJyQg({LYTCUi1-^YFw9);GdE@JaTlOx O7(8A5T-G@yGywpD4qKxD literal 0 HcmV?d00001 diff --git a/Mage.Client/src/main/resources/buttons/type_artifact.png b/Mage.Client/src/main/resources/buttons/type_artifact.png new file mode 100644 index 0000000000000000000000000000000000000000..17ae02f0d50ee2540e59fe30c8ed4671738677f2 GIT binary patch literal 3787 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 B9VP$( literal 0 HcmV?d00001 diff --git a/Mage.Client/src/main/resources/buttons/type_creatures.png b/Mage.Client/src/main/resources/buttons/type_creatures.png new file mode 100644 index 0000000000000000000000000000000000000000..c524e7276b774919d084960a1ffd64716ed8bf1b GIT binary patch literal 2176 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 Hu0mjfY(SRt literal 0 HcmV?d00001 diff --git a/Mage.Client/src/main/resources/buttons/type_planeswalker.png b/Mage.Client/src/main/resources/buttons/type_planeswalker.png new file mode 100644 index 0000000000000000000000000000000000000000..cf22d24bfc04e9d258e46e565c04707b28234584 GIT binary patch literal 355 zcmV-p0i6DcP) ziG_IL{4J*VDz!__!A#l~7<|Pac2pL==!%5+g#>p#J#l7=w!kWl_hN{jiC28U3wMDZ z(Cah1rv}A8Bj6C*-i9r(AV%!RHE_X9{=Z)*BgPJ4V|ty{6e~;6irPtP?u4zw_I1ny zF);!sr#=j(vSJBYFCu+GWNL}$C<7lLGTp#IZ2*VHTqSAVB9Q<9002ovPDHLkV1i`v Bk`w>{ literal 0 HcmV?d00001 diff --git a/Utils/release/getting_implemented_cards.txt b/Utils/release/getting_implemented_cards.txt index 15961f43e86..fae2fac4070 100644 --- a/Utils/release/getting_implemented_cards.txt +++ b/Utils/release/getting_implemented_cards.txt @@ -27,6 +27,8 @@ git log 9c5d5208b96e28e1e767574e1143b845e6b7308f..HEAD --diff-filter=A --name-st since 1.3.0-2014-02-15 git log 88d8c30b6c3dbf7c90354eccfd04107641c308f1..HEAD --diff-filter=A --name-status | sed -ne "s/^A[^u]Mage.Sets\/src\/mage\/sets\///p" | sort > added_cards.txt +since 1.3.0-2014-04-25 +git log a1cfd040d74dd6d2100168754961cfebb154f153..HEAD --diff-filter=A --name-status | sed -ne "s/^A[^u]Mage.Sets\/src\/mage\/sets\///p" | sort > added_cards.txt 3. Copy added_cards.txt to trunk\Utils folder