From 8f2e4f09b69a89d6167dcda0ed1435482659b363 Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Mon, 21 Feb 2011 00:21:20 -0500 Subject: [PATCH] allowing sorting by piles in deck editor --- .../main/java/mage/client/cards/CardGrid.java | 59 ++++++++++--- .../java/mage/client/cards/CardsList.form | 21 +++-- .../java/mage/client/cards/CardsList.java | 86 ++++++++++++++++--- .../mage/client/deckeditor/CardSelector.form | 11 +++ .../mage/client/deckeditor/CardSelector.java | 30 +++++-- .../java/mage/client/draft/DraftPanel.java | 4 +- 6 files changed, 174 insertions(+), 37 deletions(-) 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 a602188b042..7a5b34b0f52 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/CardGrid.java @@ -75,7 +75,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener setOpaque(false); } - public void loadCards(CardsView showCards, SortBy sortBy, BigCard bigCard, UUID gameId) { + public void loadCards(CardsView showCards, SortBy sortBy, boolean piles, BigCard bigCard, UUID gameId) { this.bigCard = bigCard; this.gameId = gameId; for (CardView card: showCards.values()) { @@ -90,7 +90,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener i.remove(); } } - drawCards(sortBy); + drawCards(sortBy, piles); this.setVisible(true); } @@ -106,7 +106,7 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener cards.put(card.getId(), cardImg); } - public void drawCards(SortBy sortBy) { + public void drawCards(SortBy sortBy, boolean piles) { int maxWidth = this.getParent().getWidth(); int numColumns = maxWidth / Config.dimensions.frameWidth; int curColumn = 0; @@ -128,15 +128,54 @@ public class CardGrid extends javax.swing.JLayeredPane implements MouseListener Collections.sort(sortedCards, new CardCostComparator()); break; } + MageCard lastCard = null; for (MageCard cardImg: sortedCards) { - rectangle.setLocation(curColumn * Config.dimensions.frameWidth, curRow * 20); - cardImg.setBounds(rectangle); - cardImg.setCardBounds(rectangle.x, rectangle.y, Config.dimensions.frameWidth, Config.dimensions.frameHeight); - moveToFront(cardImg); - curColumn++; - if (curColumn == numColumns) { - curColumn = 0; + if (piles) { + if (lastCard == null) + lastCard = cardImg; + switch (sortBy) { + case NAME: + if (!cardImg.getOriginal().getName().equals(lastCard.getOriginal().getName())) { + curColumn++; + curRow = 0; + } + break; + case RARITY: + if (!cardImg.getOriginal().getRarity().equals(lastCard.getOriginal().getRarity())) { + curColumn++; + curRow = 0; + } + break; + case COLOR: + if (cardImg.getOriginal().getColor().compareTo(lastCard.getOriginal().getColor()) != 0) { + curColumn++; + curRow = 0; + } + break; + case CASTING_COST: + if (cardImg.getOriginal().getConvertedManaCost() != lastCard.getOriginal().getConvertedManaCost()) { + curColumn++; + curRow = 0; + } + break; + } + rectangle.setLocation(curColumn * Config.dimensions.frameWidth, curRow * 20); + cardImg.setBounds(rectangle); + cardImg.setCardBounds(rectangle.x, rectangle.y, Config.dimensions.frameWidth, Config.dimensions.frameHeight); + moveToFront(cardImg); curRow++; + lastCard = cardImg; + } + else { + rectangle.setLocation(curColumn * Config.dimensions.frameWidth, curRow * 20); + cardImg.setBounds(rectangle); + cardImg.setCardBounds(rectangle.x, rectangle.y, Config.dimensions.frameWidth, Config.dimensions.frameHeight); + moveToFront(cardImg); + curColumn++; + if (curColumn == numColumns) { + curColumn = 0; + curRow++; + } } } } 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 85696ffe74d..3046438e2e5 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardsList.form +++ b/Mage.Client/src/main/java/mage/client/cards/CardsList.form @@ -27,7 +27,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -58,12 +58,14 @@ - + - - + + + + @@ -74,6 +76,7 @@ + @@ -109,6 +112,14 @@ + + + + + + + + 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 413b1b52012..2d003a03eed 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardsList.java +++ b/Mage.Client/src/main/java/mage/client/cards/CardsList.java @@ -46,6 +46,7 @@ import java.util.List; import java.util.UUID; import javax.swing.DefaultComboBoxModel; import mage.Constants.CardType; +import mage.ObjectColor; import mage.cards.MageCard; import mage.client.constants.Constants.SortBy; @@ -115,17 +116,58 @@ public class CardsList extends javax.swing.JPanel implements MouseListener { Collections.sort(sortedCards, new CardViewCostComparator()); break; } + CardView lastCard = null; for (CardView card: sortedCards) { - 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; + if (chkPiles.isSelected()) { + if (lastCard == null) + lastCard = card; + switch (sortBy) { + case NAME: + if (!card.getName().equals(lastCard.getName())) { + curColumn++; + curRow = 0; + } + break; + case RARITY: + if (!card.getRarity().equals(lastCard.getRarity())) { + curColumn++; + curRow = 0; + } + break; + case COLOR: + if (card.getColor().compareTo(lastCard.getColor()) != 0) { + curColumn++; + curRow = 0; + } + break; + case CASTING_COST: + if (card.getConvertedManaCost() != lastCard.getConvertedManaCost()) { + curColumn++; + curRow = 0; + } + break; + } + 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 { + 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++; + } } } } @@ -176,6 +218,7 @@ public class CardsList extends javax.swing.JPanel implements MouseListener { lblCount = new javax.swing.JLabel(); lblCreatureCount = new javax.swing.JLabel(); lblLandCount = new javax.swing.JLabel(); + chkPiles = new javax.swing.JCheckBox(); setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); setPreferredSize((!Beans.isDesignTime())?(new Dimension(Config.dimensions.frameWidth, Config.dimensions.frameHeight)):(new Dimension(100, 100))); @@ -195,6 +238,13 @@ public class CardsList extends javax.swing.JPanel implements MouseListener { lblLandCount.setText("Land Count"); + chkPiles.setText("Piles"); + chkPiles.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + chkPilesActionPerformed(evt); + } + }); + javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( @@ -205,8 +255,10 @@ public class CardsList extends javax.swing.JPanel implements MouseListener { .addComponent(lblCreatureCount, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(lblLandCount, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(cbSortBy, 0, 353, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(chkPiles) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(cbSortBy, 0, 300, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -214,7 +266,8 @@ public class CardsList extends javax.swing.JPanel implements MouseListener { .addComponent(cbSortBy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(lblCount) .addComponent(lblCreatureCount) - .addComponent(lblLandCount)) + .addComponent(lblLandCount) + .addComponent(chkPiles)) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); @@ -222,14 +275,14 @@ public class CardsList extends javax.swing.JPanel implements MouseListener { layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 639, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 625, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 397, Short.MAX_VALUE)) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 258, Short.MAX_VALUE)) ); }// //GEN-END:initComponents @@ -237,10 +290,15 @@ public class CardsList extends javax.swing.JPanel implements MouseListener { drawCards((SortBy) cbSortBy.getSelectedItem()); }//GEN-LAST:event_cbSortByActionPerformed + private void chkPilesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkPilesActionPerformed + drawCards((SortBy) cbSortBy.getSelectedItem()); + }//GEN-LAST:event_chkPilesActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLayeredPane cardArea; private javax.swing.JComboBox cbSortBy; + private javax.swing.JCheckBox chkPiles; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JLabel lblCount; 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 a317ec55e0a..64253dc5842 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form +++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form @@ -255,6 +255,17 @@ + + + + + + + + + + + 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 7ad58865f3e..760f1c9b610 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java @@ -142,7 +142,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene filteredCards.add(card); } } - this.cardGrid.loadCards(new CardsView(filteredCards), (SortBy) cbSortBy.getSelectedItem(), bigCard, null); + this.cardGrid.loadCards(new CardsView(filteredCards), (SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected(), bigCard, null); } finally { setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); @@ -198,6 +198,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene rdoInstants = new javax.swing.JRadioButton(); rdoSorceries = new javax.swing.JRadioButton(); rdoPlaneswalkers = new javax.swing.JRadioButton(); + chkPiles = new javax.swing.JCheckBox(); cbSortBy = new javax.swing.JComboBox(); tbColor.setFloatable(false); @@ -394,6 +395,17 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene }); tbTypes.add(rdoPlaneswalkers); + chkPiles.setText("Piles"); + chkPiles.setFocusable(false); + chkPiles.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); + chkPiles.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + chkPiles.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + chkPilesActionPerformed(evt); + } + }); + tbTypes.add(chkPiles); + cbSortBy.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); cbSortBy.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { @@ -530,9 +542,14 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene private void cbSortByActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbSortByActionPerformed if (cbSortBy.getSelectedItem() instanceof SortBy) - this.cardGrid.drawCards((SortBy) cbSortBy.getSelectedItem()); + this.cardGrid.drawCards((SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected()); }//GEN-LAST:event_cbSortByActionPerformed + private void chkPilesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkPilesActionPerformed + if (cbSortBy.getSelectedItem() instanceof SortBy) + this.cardGrid.drawCards((SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected()); + }//GEN-LAST:event_chkPilesActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnBooster; @@ -540,6 +557,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene private mage.client.cards.CardGrid cardGrid; private javax.swing.JComboBox cbExpansionSet; private javax.swing.JComboBox cbSortBy; + private javax.swing.JCheckBox chkPiles; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JRadioButton rdoArtifacts; private javax.swing.JRadioButton rdoBlack; @@ -561,25 +579,25 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene @Override public void componentResized(ComponentEvent e) { if (cbSortBy.getSelectedItem() instanceof SortBy) - this.cardGrid.drawCards((SortBy) cbSortBy.getSelectedItem()); + this.cardGrid.drawCards((SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected()); } @Override public void componentMoved(ComponentEvent e) { if (cbSortBy.getSelectedItem() instanceof SortBy) - this.cardGrid.drawCards((SortBy) cbSortBy.getSelectedItem()); + this.cardGrid.drawCards((SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected()); } @Override public void componentShown(ComponentEvent e) { if (cbSortBy.getSelectedItem() instanceof SortBy) - this.cardGrid.drawCards((SortBy) cbSortBy.getSelectedItem()); + this.cardGrid.drawCards((SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected()); } @Override public void componentHidden(ComponentEvent e) { if (cbSortBy.getSelectedItem() instanceof SortBy) - this.cardGrid.drawCards((SortBy) cbSortBy.getSelectedItem()); + this.cardGrid.drawCards((SortBy) cbSortBy.getSelectedItem(), chkPiles.isSelected()); } } diff --git a/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java b/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java index 9bd5c9d9df9..4d3c3e775de 100644 --- a/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java +++ b/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java @@ -98,7 +98,7 @@ public class DraftPanel extends javax.swing.JPanel { public void loadBooster(DraftPickView draftPickView) { draftBooster.loadBooster(draftPickView.getBooster(), bigCard); - draftPicks.loadCards(draftPickView.getPicks(), SortBy.NAME, bigCard, null); + draftPicks.loadCards(draftPickView.getPicks(), SortBy.NAME, false, bigCard, null); this.draftBooster.clearCardEventListeners(); this.draftBooster.addCardEventListener( new Listener () { @@ -108,7 +108,7 @@ public class DraftPanel extends javax.swing.JPanel { DraftPickView view = session.sendCardPick(draftId, (UUID)event.getSource()); if (view != null) { draftBooster.loadBooster(view.getBooster(), bigCard); - draftPicks.loadCards(view.getPicks(), SortBy.NAME, bigCard, null); + draftPicks.loadCards(view.getPicks(), SortBy.NAME, false, bigCard, null); setMessage("Waiting for other players"); } }