From f66fd8fc9708df18b6cb6568a5c34500e9bed643 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Wed, 11 May 2011 17:52:16 +0400 Subject: [PATCH] [deck.editor] Switching between card selectors. Displaying cards from the list. --All sets-- option to show all cards at once (appears only in CardTableSelector). --- Mage.Client/plugins/mage-card-plugin.jar | Bin 309100 -> 308964 bytes .../client/deckeditor/DeckEditorPanel.java | 155 ++++++++++++------ .../client/deckeditor/table/CardHelper.java | 31 ++-- .../deckeditor/table/CardTableSelector.java | 6 +- .../deckeditor/table/MageCardComparator.java | 31 ++-- .../client/deckeditor/table/TableModel.java | 126 +++++++------- .../java/mage/client/plugins/MagePlugins.java | 2 + .../mage/client/plugins/impl/Plugins.java | 8 + .../mage/interfaces/plugin/CardPlugin.java | 2 + .../org/mage/plugins/card/CardPluginImpl.java | 6 + .../mage/plugins/card/images/ImageCache.java | 4 +- 11 files changed, 221 insertions(+), 150 deletions(-) diff --git a/Mage.Client/plugins/mage-card-plugin.jar b/Mage.Client/plugins/mage-card-plugin.jar index 63dbb7b2d4cb6f86a0c98966a0ff9728951c6240..938ee720b635283cb547c2a9eb429e8404ea874d 100644 GIT binary patch delta 7768 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 iZ6JtuZv*L&f&BIV@xM6u_6iP%D(deck.getSideboard()), this.bigCard, mode == DeckEditorMode.Limited); + this.cardTableSelector.loadCards(new ArrayList(deck.getSideboard()), this.bigCard, mode == DeckEditorMode.Limited); this.btnExit.setVisible(false); this.btnImport.setVisible(false); if (!MageFrame.getSession().isTestMode()) @@ -140,6 +139,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { case Constructed: this.btnSubmit.setVisible(false); this.cardSelector.loadCards(this.bigCard); + this.cardTableSelector.loadCards(this.bigCard); this.btnExit.setVisible(true); this.btnImport.setVisible(true); if (!MageFrame.getSession().isTestMode()) @@ -153,6 +153,9 @@ public class DeckEditorPanel extends javax.swing.JPanel { private void init() { this.cardSelector.setVisible(true); + this.cardTableSelector.setVisible(false); + this.jRadioButtonFullCards.setSelected(true); + this.jRadioButtonListTable.setSelected(false); this.jPanel1.setVisible(true); this.cardSelector.getCardsList().clearCardEventListeners(); this.cardSelector.getCardsList().addCardEventListener( @@ -188,6 +191,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { if (mode == DeckEditorMode.Limited || mode == DeckEditorMode.Sideboard) { deck.getSideboard().add(card); cardSelector.loadCards(new ArrayList(deck.getSideboard()), getBigCard(), mode == DeckEditorMode.Limited); + cardTableSelector.loadCards(new ArrayList(deck.getSideboard()), getBigCard(), mode == DeckEditorMode.Limited); } break; } @@ -260,9 +264,9 @@ public class DeckEditorPanel extends javax.swing.JPanel { private void initComponents() { jSplitPane1 = new javax.swing.JSplitPane(); - //cardSelector = new mage.client.deckeditor.table.CardTableSelector(); cardSelector = new mage.client.deckeditor.CardSelector(); - deckArea = new mage.client.deckeditor.DeckArea(); + cardTableSelector = new mage.client.deckeditor.table.CardTableSelector(); + deckArea = new mage.client.deckeditor.DeckArea(); jPanel1 = new javax.swing.JPanel(); bigCard = new mage.client.cards.BigCard(); txtDeckName = new javax.swing.JTextField(); @@ -276,6 +280,48 @@ public class DeckEditorPanel extends javax.swing.JPanel { btnAddLand = new javax.swing.JButton(); txtTimeRemaining = new javax.swing.JTextField(); + jLayeredPane1 = new javax.swing.JLayeredPane(); + jRadioButtonFullCards = new javax.swing.JRadioButton(); + jRadioButtonListTable = new javax.swing.JRadioButton(); + + jLayeredPane1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "View", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", Font.BOLD, 13), new java.awt.Color(0, 0, 0))); // NOI18N + + jRadioButtonFullCards.setLabel("Full cards"); + jRadioButtonFullCards.setBounds(50, 27, 80, 23); + jLayeredPane1.add(jRadioButtonFullCards, javax.swing.JLayeredPane.DEFAULT_LAYER); + jRadioButtonFullCards.getAccessibleContext().setAccessibleName("Full cards"); + jRadioButtonFullCards.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (jRadioButtonListTable.isSelected()) { + jRadioButtonListTable.setSelected(false); + cardTableSelector.setVisible(false); + cardSelector.setVisible(true); + jSplitPane1.setTopComponent(cardSelector); + jSplitPane1.revalidate(); + jSplitPane1.repaint(); + } + } + }); + + jRadioButtonListTable.setActionCommand("List"); + jRadioButtonListTable.setText("List"); + jRadioButtonListTable.setBounds(140, 27, 70, 23); + jLayeredPane1.add(jRadioButtonListTable, javax.swing.JLayeredPane.DEFAULT_LAYER); + jRadioButtonListTable.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (jRadioButtonFullCards.isSelected()) { + jRadioButtonFullCards.setSelected(false); + cardTableSelector.setVisible(true); + cardSelector.setVisible(false); + jSplitPane1.setTopComponent(cardTableSelector); + jSplitPane1.revalidate(); + jSplitPane1.repaint(); + } + } + }); + jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); jSplitPane1.setResizeWeight(0.5); jSplitPane1.setTopComponent(cardSelector); @@ -343,9 +389,9 @@ public class DeckEditorPanel extends javax.swing.JPanel { btnAddLand.setText("Add Land"); btnAddLand.setName("btnAddLand"); // NOI18N btnAddLand.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - btnAddLandActionPerformed(evt); - } + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnAddLandActionPerformed(evt); + } }); txtTimeRemaining.setEditable(false); @@ -356,61 +402,66 @@ public class DeckEditorPanel extends javax.swing.JPanel { javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( - jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addGap(6, 6, 6) - .addComponent(lblDeckName) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(txtDeckName, javax.swing.GroupLayout.DEFAULT_SIZE, 189, Short.MAX_VALUE)) - .addComponent(cardInfoPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(bigCard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(jPanel1Layout.createSequentialGroup() - .addContainerGap() - .addComponent(btnSave) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnLoad) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnNew) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnExit)) - .addGroup(jPanel1Layout.createSequentialGroup() - .addContainerGap() - .addComponent(btnImport) - .addContainerGap() - .addComponent(btnAddLand) - .addContainerGap() - .addComponent(btnSubmit)) - .addGroup(jPanel1Layout.createSequentialGroup() - .addContainerGap() - .addComponent(txtTimeRemaining)) - ) - .addContainerGap()) + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLayeredPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(6, 6, 6) + .addComponent(lblDeckName) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(txtDeckName, javax.swing.GroupLayout.DEFAULT_SIZE, 189, Short.MAX_VALUE)) + .addComponent(cardInfoPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(bigCard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(btnSave) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnLoad) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnNew) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnExit)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(btnImport) + .addContainerGap() + .addComponent(btnAddLand) + .addContainerGap() + .addComponent(btnSubmit)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addComponent(txtTimeRemaining)) + ) + .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(txtDeckName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(lblDeckName)) + .addComponent(txtDeckName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lblDeckName)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(btnSave) - .addComponent(btnLoad) - .addComponent(btnNew) - .addComponent(btnExit)) + .addComponent(btnSave) + .addComponent(btnLoad) + .addComponent(btnNew) + .addComponent(btnExit)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(btnImport) - .addComponent(btnAddLand) - .addComponent(btnSubmit)) + .addComponent(btnImport) + .addComponent(btnAddLand) + .addComponent(btnSubmit)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(txtTimeRemaining)) + .addComponent(txtTimeRemaining)) + .addComponent(jLayeredPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, isShowCardInfo ? 30 : 159, Short.MAX_VALUE) .addComponent(cardInfoPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 104, Short.MAX_VALUE) .addComponent(bigCard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) ); @@ -489,6 +540,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { } deck.getCards().clear(); cardSelector.loadCards(new ArrayList(deck.getSideboard()), this.bigCard, mode == DeckEditorMode.Limited); + cardTableSelector.loadCards(new ArrayList(deck.getSideboard()), this.bigCard, mode == DeckEditorMode.Limited); } else { deck = new Deck(); @@ -559,13 +611,16 @@ public class DeckEditorPanel extends javax.swing.JPanel { private javax.swing.JButton btnLoad; private javax.swing.JButton btnNew; private javax.swing.JButton btnSave; - //private mage.client.deckeditor.table.CardTableSelector cardSelector; + private mage.client.deckeditor.table.CardTableSelector cardTableSelector; private mage.client.deckeditor.CardSelector cardSelector; private mage.client.deckeditor.DeckArea deckArea; private javax.swing.JPanel jPanel1; private javax.swing.JSplitPane jSplitPane1; private javax.swing.JLabel lblDeckName; private javax.swing.JTextField txtDeckName; + private javax.swing.JRadioButton jRadioButtonFullCards; + private javax.swing.JRadioButton jRadioButtonListTable; + private javax.swing.JLayeredPane jLayeredPane1; // End of variables declaration//GEN-END:variables private JComponent cardInfoPane; diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/table/CardHelper.java b/Mage.Client/src/main/java/mage/client/deckeditor/table/CardHelper.java index 2d5437b6134..ee8b5650eda 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/table/CardHelper.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/table/CardHelper.java @@ -30,6 +30,7 @@ package mage.client.deckeditor.table; import mage.Constants.CardType; import mage.cards.MageCard; +import mage.view.CardView; /** * Helper methods for {@link MageCard}. @@ -40,30 +41,30 @@ public class CardHelper { private CardHelper() { } - public static String getColor(MageCard c) { - if (c.getOriginal().getColor().getColorCount() == 0) return "Colorless"; - else if (c.getOriginal().getColor().getColorCount() > 1) return "Gold"; - else if (c.getOriginal().getColor().isBlack()) return "Black"; - else if (c.getOriginal().getColor().isBlue()) return "Blue"; - else if (c.getOriginal().getColor().isWhite()) return "White"; - else if (c.getOriginal().getColor().isGreen()) return "Green"; - else if (c.getOriginal().getColor().isRed()) return "Red"; + public static String getColor(CardView c) { + if (c.getColor().getColorCount() == 0) return "Colorless"; + else if (c.getColor().getColorCount() > 1) return "Gold"; + else if (c.getColor().isBlack()) return "Black"; + else if (c.getColor().isBlue()) return "Blue"; + else if (c.getColor().isWhite()) return "White"; + else if (c.getColor().isGreen()) return "Green"; + else if (c.getColor().isRed()) return "Red"; return ""; } - public static String getType(MageCard c) { + public static String getType(CardView c) { StringBuilder type = new StringBuilder(); - for (String superType : c.getOriginal().getSuperTypes()) { + for (String superType : c.getSuperTypes()) { type.append(superType); type.append(" "); } - for (CardType cardType : c.getOriginal().getCardTypes()) { + for (CardType cardType : c.getCardTypes()) { type.append(cardType.toString()); type.append(" "); } - if (c.getOriginal().getSubTypes().size() > 0) { + if (c.getSubTypes().size() > 0) { type.append("- "); - for (String subType : c.getOriginal().getSubTypes()) { + for (String subType : c.getSubTypes()) { type.append(subType); type.append(" "); } @@ -71,7 +72,7 @@ public class CardHelper { return type.toString(); } - public static boolean isCreature(MageCard c) { - return c.getOriginal().getCardTypes().contains(CardType.CREATURE); + public static boolean isCreature(CardView c) { + return c.getCardTypes().contains(CardType.CREATURE); } } diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/table/CardTableSelector.java b/Mage.Client/src/main/java/mage/client/deckeditor/table/CardTableSelector.java index 3d4ce85b7fe..8a592e8737e 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/table/CardTableSelector.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/table/CardTableSelector.java @@ -100,10 +100,12 @@ public class CardTableSelector extends javax.swing.JPanel implements ComponentLi } }); cbExpansionSet.setModel(new DefaultComboBoxModel(l)); -// cbExpansionSet.insertItemAt("All sets", 0); + cbExpansionSet.insertItemAt("-- All sets -- ", 0); cbExpansionSet.setSelectedIndex(0); initFilter(); - filter.getExpansionSetCode().add(((ExpansionSet)this.cbExpansionSet.getSelectedItem()).getCode()); + if (this.cbExpansionSet.getSelectedItem() instanceof ExpansionSet) { + filter.getExpansionSetCode().add(((ExpansionSet)this.cbExpansionSet.getSelectedItem()).getCode()); + } filterCards(); } diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/table/MageCardComparator.java b/Mage.Client/src/main/java/mage/client/deckeditor/table/MageCardComparator.java index fc6965b2663..ddc81fbfce7 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/table/MageCardComparator.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/table/MageCardComparator.java @@ -31,13 +31,14 @@ import java.util.Comparator; import java.util.List; import mage.cards.MageCard; +import mage.view.CardView; /** * {@link MageCard} comparator. Used to sort cards in Deck Editor Table View pane. * * @author nantuko */ -public class MageCardComparator implements Comparator { +public class MageCardComparator implements Comparator { private final int column; private boolean ascending; @@ -46,7 +47,7 @@ public class MageCardComparator implements Comparator { this.ascending = ascending; } - public int compare(MageCard a, MageCard b) { + public int compare(CardView a, CardView b) { Comparable aCom = null; Comparable bCom = null; @@ -56,16 +57,16 @@ public class MageCardComparator implements Comparator { bCom = Integer.valueOf(1); } else if (column == 1)// Name { - aCom = a.getOriginal().getName(); - bCom = b.getOriginal().getName(); - if (aCom.equals(bCom) && a.getOriginal().getExpansionSetCode().equals(b.getOriginal().getExpansionSetCode())) { - aCom = a.getOriginal().getCardNumber(); - bCom = b.getOriginal().getCardNumber(); + aCom = a.getName(); + bCom = b.getName(); + if (aCom.equals(bCom) && a.getExpansionSetCode().equals(b.getExpansionSetCode())) { + aCom = a.getCardNumber(); + bCom = b.getCardNumber(); } } else if (column == 2)// Cost { - aCom = a.getOriginal().getConvertedManaCost(); - bCom = b.getOriginal().getConvertedManaCost(); + aCom = a.getConvertedManaCost(); + bCom = b.getConvertedManaCost(); } else if (column == 3)// Color { aCom = CardHelper.getColor(a); @@ -80,17 +81,17 @@ public class MageCardComparator implements Comparator { bCom = new Float(-1); if (CardHelper.isCreature(a)) - aCom = new Float(a.getOriginal().getPower() + "." + a.getOriginal().getToughness()); + aCom = new Float(a.getPower() + "." + a.getToughness()); if (CardHelper.isCreature(b)) - bCom = new Float(b.getOriginal().getPower() + "." + b.getOriginal().getToughness()); + bCom = new Float(b.getPower() + "." + b.getToughness()); } else if (column == 6)// Rarity { - aCom = a.getOriginal().getRarity().toString(); - bCom = b.getOriginal().getRarity().toString(); + aCom = a.getRarity().toString(); + bCom = b.getRarity().toString(); } else if (column == 7)// Set name { - aCom = a.getOriginal().getExpansionSetCode(); - bCom = b.getOriginal().getExpansionSetCode(); + aCom = a.getExpansionSetCode(); + bCom = b.getExpansionSetCode(); } if (ascending) 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 870e024f57e..712a67c5d54 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 @@ -28,25 +28,6 @@ package mage.client.deckeditor.table; -import java.awt.Dimension; -import java.awt.Image; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.awt.image.BufferedImage; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.UUID; - -import javax.swing.JTable; -import javax.swing.table.AbstractTableModel; -import javax.swing.table.TableColumnModel; - import mage.cards.MageCard; import mage.client.cards.BigCard; import mage.client.cards.CardEventSource; @@ -59,6 +40,17 @@ import mage.client.util.ImageHelper; import mage.client.util.Listener; import mage.view.CardView; import mage.view.CardsView; +import org.apache.log4j.Logger; + +import javax.swing.*; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.TableColumnModel; +import java.awt.*; +import java.awt.event.*; +import java.awt.image.BufferedImage; +import java.util.*; +import java.util.List; +import java.util.Map.Entry; /** * Table Model for card list. @@ -69,11 +61,13 @@ public class TableModel extends AbstractTableModel implements ICardGrid { private static final long serialVersionUID = -528008802935423088L; + private static final Logger log = Logger.getLogger(TableModel.class); + protected CardEventSource cardEventSource = new CardEventSource(); protected BigCard bigCard; protected UUID gameId; - private Map cards = new LinkedHashMap(); - private List view = new ArrayList(); + private Map cards = new LinkedHashMap(); + private List view = new ArrayList(); private Dimension cardDimension; private String column[] = { "", "Name", "Cost", "Color", "Type", "Stats", @@ -91,19 +85,20 @@ public class TableModel extends AbstractTableModel implements ICardGrid { addCard(card, bigCard, gameId); } } - for (Iterator> i = cards.entrySet().iterator(); i + for (Iterator> i = cards.entrySet().iterator(); i .hasNext();) { - Entry entry = i.next(); + Entry entry = i.next(); if (!showCards.containsKey(entry.getKey())) { i.remove(); - for (MageCard v : view) { - if (v.getOriginal().getId().equals(entry.getKey())) { - view.remove(v); + for (CardView cv : view) { + if (cv.getId().equals(entry.getKey())) { + view.remove(cv); break; } } } } + sort(1, true); drawCards(sortBy, piles); } @@ -129,15 +124,15 @@ public class TableModel extends AbstractTableModel implements ICardGrid { } private Object getColumn(Object obj, int column) { - MageCard c = (MageCard) obj; + CardView c = (CardView) obj; switch (column) { case 0: return ""; case 1: - return c.getOriginal().getName(); + return c.getName(); case 2: StringBuilder s = new StringBuilder(); - for (String cost : c.getOriginal().getManaCost()) { + for (String cost : c.getManaCost()) { s.append(cost); } String cost = s.toString(); @@ -150,12 +145,12 @@ public class TableModel extends AbstractTableModel implements ICardGrid { case 4: return CardHelper.getType(c); case 5: - return CardHelper.isCreature(c) ? c.getOriginal().getPower() + "/" - + c.getOriginal().getToughness() : "-"; + return CardHelper.isCreature(c) ? c.getPower() + "/" + + c.getToughness() : "-"; case 6: - return c.getOriginal().getRarity().toString(); + return c.getRarity().toString(); case 7: - return c.getOriginal().getExpansionSetCode(); + return c.getExpansionSetCode(); default: return "error"; } @@ -166,11 +161,8 @@ public class TableModel extends AbstractTableModel implements ICardGrid { cardDimension = new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight); } - MageCard cardImg = Plugins.getInstance().getMageCard(card, bigCard, - cardDimension, gameId, true); - cards.put(card.getId(), cardImg); - cardImg.update(card); - view.add(cardImg); + cards.put(card.getId(), card); + view.add(card); } public void drawCards(SortBy sortBy, boolean piles) { @@ -179,9 +171,9 @@ public class TableModel extends AbstractTableModel implements ICardGrid { public void removeCard(UUID cardId) { cards.remove(cardId); - for (MageCard v : view) { - if (v.getOriginal().getId().equals(cardId)) { - view.remove(v); + for (CardView cv : view) { + if (cv.getId().equals(cardId)) { + view.remove(cv); break; } } @@ -197,34 +189,25 @@ public class TableModel extends AbstractTableModel implements ICardGrid { public void addListeners(final JTable table) { // updates card detail, listens to any key strokes - /* - * table.addKeyListener(new KeyListener() { public void - * keyPressed(KeyEvent ev) { } - * - * public void keyTyped(KeyEvent ev) { } - * - * public void keyReleased(KeyEvent ev) { int row = - * table.getSelectedRow(); if (row != -1) { MageCard card = - * (MageCard)cards.values().toArray()[row]; - * bigCard.setCard(card.getOriginal().getId(), card.getImage(), new - * ArrayList(), false); } } }); - */ + + table.addKeyListener(new KeyListener() { + public void keyPressed(KeyEvent ev) {} + public void keyTyped(KeyEvent ev) {} + + public void keyReleased(KeyEvent ev) { + int row = table.getSelectedRow(); + if (row != -1) { + showImage(row); + } + } + }); + // updates card detail, listens to any mouse clicks table.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { int row = table.getSelectedRow(); if (row != -1) { - MageCard card = view.get(row); - if (card.getOriginal().getId().equals(bigCard.getCardId())) { - Image image = card.getImage(); - if (image != null && image instanceof BufferedImage) { - image = ImageHelper.getResizedImage( - (BufferedImage) image, bigCard.getWidth(), - bigCard.getHeight()); - } - bigCard.setCard(card.getOriginal().getId(), image, - new ArrayList(), false); - } + showImage(row); } } }); @@ -242,8 +225,7 @@ public class TableModel extends AbstractTableModel implements ICardGrid { if (recentSortedColumn == column) { asc = !recentAscending; } - boolean change = sort(column, asc); - + sort(column, asc); fireTableDataChanged(); } } @@ -251,6 +233,18 @@ public class TableModel extends AbstractTableModel implements ICardGrid { table.getTableHeader().addMouseListener(mouse); } + private void showImage(int row) { + CardView card = view.get(row); + if (!card.getId().equals(bigCard.getCardId())) { + Image image = Plugins.getInstance().getOriginalImage(card); + if (image != null && image instanceof BufferedImage) { + image = ImageHelper.getResizedImage((BufferedImage) image, bigCard.getWidth(), + bigCard.getHeight()); + bigCard.setCard(card.getId(), image, new ArrayList(), false); + } + } + } + public boolean sort(int column, boolean ascending) { // used by addCard() to resort the cards recentSortedColumn = column; diff --git a/Mage.Client/src/main/java/mage/client/plugins/MagePlugins.java b/Mage.Client/src/main/java/mage/client/plugins/MagePlugins.java index 2fc7d5f8b28..6cf15aca4e3 100644 --- a/Mage.Client/src/main/java/mage/client/plugins/MagePlugins.java +++ b/Mage.Client/src/main/java/mage/client/plugins/MagePlugins.java @@ -1,6 +1,7 @@ package mage.client.plugins; import java.awt.*; +import java.awt.image.BufferedImage; import java.util.Collection; import java.util.Map; import java.util.Set; @@ -35,4 +36,5 @@ public interface MagePlugins { void onAddCard(MagePermanent card, int count); void onRemoveCard(MagePermanent card, int count); JComponent getCardInfoPane(); + BufferedImage getOriginalImage(CardView card); } diff --git a/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java b/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java index 7223ecbbc07..3dc4b0b69c1 100644 --- a/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java +++ b/Mage.Client/src/main/java/mage/client/plugins/impl/Plugins.java @@ -1,6 +1,7 @@ package mage.client.plugins.impl; import java.awt.*; +import java.awt.image.BufferedImage; import java.io.File; import java.util.Collection; import java.util.Map; @@ -190,5 +191,12 @@ public class Plugins implements MagePlugins { return null; } + @Override + public BufferedImage getOriginalImage(CardView card) { + if (this.cardPlugin != null) { + return this.cardPlugin.getOriginalImage(card); + } + return null; + } } diff --git a/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java b/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java index d7103cd18a1..d1092eeb9c7 100644 --- a/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java +++ b/Mage.Common/src/mage/interfaces/plugin/CardPlugin.java @@ -1,6 +1,7 @@ package mage.interfaces.plugin; import java.awt.*; +import java.awt.image.BufferedImage; import java.util.Collection; import java.util.Map; import java.util.Set; @@ -34,4 +35,5 @@ public interface CardPlugin extends Plugin { void onAddCard(MagePermanent card, int count); void onRemoveCard(MagePermanent card, int count); JComponent getCardInfoPane(); + BufferedImage getOriginalImage(CardView card); } diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/CardPluginImpl.java b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/CardPluginImpl.java index 3c27f2cf8d1..9c28ed6e06a 100644 --- a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/CardPluginImpl.java +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/CardPluginImpl.java @@ -23,12 +23,14 @@ import org.mage.plugins.card.dl.Downloader; import org.mage.plugins.card.dl.sources.GathererSets; import org.mage.plugins.card.dl.sources.GathererSymbols; import org.mage.plugins.card.images.DownloadPictures; +import org.mage.plugins.card.images.ImageCache; import org.mage.plugins.card.info.CardInfoPaneImpl; import javax.swing.*; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.awt.image.BufferedImage; import java.util.*; import java.util.List; @@ -463,4 +465,8 @@ public class CardPluginImpl implements CardPlugin { public JComponent getCardInfoPane() { return new CardInfoPaneImpl(); } + + public BufferedImage getOriginalImage(CardView card) { + return ImageCache.getImageOriginal(card); + } } diff --git a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images/ImageCache.java b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images/ImageCache.java index 7d9aca0a7d6..577be2c7a6d 100644 --- a/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images/ImageCache.java +++ b/Mage.Plugins/Mage.Card.Plugin/src/main/java/org/mage/plugins/card/images/ImageCache.java @@ -75,12 +75,12 @@ public class ImageCache { String thumbnailPath = path.replace(".jpg", ".thumb.jpg"); File thumbnailFile = new File(thumbnailPath); if (thumbnailFile.exists()) { - log.info("loading thumbnail for " + key + ", path="+thumbnailPath); + //log.debug("loading thumbnail for " + key + ", path="+thumbnailPath); return loadImage(thumbnailFile); } else { BufferedImage image = loadImage(file); if (image == null) return null; - log.info("creating thumbnail for " + key); + //log.debug("creating thumbnail for " + key); return makeThumbnail(image, thumbnailPath); } } else {