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 492de4ca325..b90a94d858a 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java @@ -186,6 +186,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { break; case FREE_BUILDING: this.btnSubmit.setVisible(false); + this.btnAddLand.setVisible(true); this.cardSelector.loadCards(this.bigCard); //this.cardTableSelector.loadCards(this.bigCard); this.btnExit.setVisible(true); @@ -796,7 +797,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { private void btnAddLandActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddLandActionPerformed AddLandDialog addLand = new AddLandDialog(); - addLand.showDialog(deck); + addLand.showDialog(deck, mode); refreshDeck(); }//GEN-LAST:event_btnAddLandActionPerformed diff --git a/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.form b/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.form index fa5f815e756..c5cfd836728 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.form @@ -29,9 +29,9 @@ - + - + @@ -39,34 +39,43 @@ + - - - - + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + - + - + - + @@ -75,6 +84,11 @@ + + + + + @@ -100,7 +114,7 @@ - + @@ -112,6 +126,23 @@ + + + + + + + + + + + + + + + + + @@ -124,6 +155,11 @@ + + + + + @@ -131,9 +167,16 @@ - + - + + + + + + + + @@ -148,16 +191,9 @@ - + - - - - - - - - + @@ -167,11 +203,6 @@ - - - - - diff --git a/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.java b/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.java index 1c4a9c26973..4210bf4ffb8 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/AddLandDialog.java @@ -31,6 +31,9 @@ import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; +import javax.swing.DefaultComboBoxModel; import javax.swing.JLayeredPane; import mage.Mana; import mage.cards.Card; @@ -41,6 +44,7 @@ import mage.cards.repository.CardRepository; import mage.cards.repository.ExpansionInfo; import mage.cards.repository.ExpansionRepository; import mage.client.MageFrame; +import mage.client.constants.Constants.DeckEditorMode; import mage.constants.Rarity; /** @@ -60,45 +64,49 @@ public class AddLandDialog extends MageDialog { this.setModal(true); } - public void showDialog(Deck deck) { + public void showDialog(Deck deck, DeckEditorMode mode) { this.deck = deck; - - // decide from which sets basic lands are taken from - for (String setCode :deck.getExpansionSetCodes()) { - ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); - if (expansionInfo != null && expansionInfo.hasBasicLands()) { - this.setCodesland.add(expansionInfo.getCode()); - } - } - - // if sets have no basic land, take land from block - if (this.setCodesland.isEmpty()) { + SortedSet landSets = new TreeSet<>(); + if (!mode.equals(DeckEditorMode.FREE_BUILDING)) { + // decide from which sets basic lands are taken from for (String setCode :deck.getExpansionSetCodes()) { ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); - if (expansionInfo != null) { - List blockSets = ExpansionRepository.instance.getSetsFromBlock(expansionInfo.getBlockName()); - for (ExpansionInfo blockSet: blockSets) { - if (blockSet.hasBasicLands()) { - this.setCodesland.add(blockSet.getCode()); + if (expansionInfo != null && expansionInfo.hasBasicLands()) { + this.setCodesland.add(expansionInfo.getCode()); + landSets.add(expansionInfo.getName()); + } + } + + // if sets have no basic land, take land from block + if (this.setCodesland.isEmpty()) { + for (String setCode :deck.getExpansionSetCodes()) { + ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByCode(setCode); + if (expansionInfo != null) { + List blockSets = ExpansionRepository.instance.getSetsFromBlock(expansionInfo.getBlockName()); + for (ExpansionInfo blockSet: blockSets) { + if (blockSet.hasBasicLands()) { + this.setCodesland.add(blockSet.getCode()); + landSets.add(blockSet.getName()); + } } } } } - } - // if still no set with lands found, take one by random + } + // if still no set with lands found, add list of all available if (this.setCodesland.isEmpty()) { - // if sets have no basic lands and also it has no parent or parent has no lands get last set with lands - // select a set with basic lands by random - Random generator = new Random(); List basicLandSets = ExpansionRepository.instance.getSetsWithBasicLandsByReleaseDate(); - if (basicLandSets.size() > 0) { - this.setCodesland.add(basicLandSets.get(generator.nextInt(basicLandSets.size())).getCode()); + for (ExpansionInfo expansionInfo: basicLandSets) { + landSets.add(expansionInfo.getName()); } - } - - if (this.setCodesland.isEmpty()) { + } + if (landSets.isEmpty()) { throw new IllegalArgumentException("No set with basic land was found"); } + if(landSets.size() > 1) { + landSets.add(""); + } + cbLandSet.setModel(new DefaultComboBoxModel(landSets.toArray())); MageFrame.getDesktop().add(this, JLayeredPane.PALETTE_LAYER); this.setVisible(true); @@ -106,14 +114,22 @@ public class AddLandDialog extends MageDialog { private void addLands(String landName, int number) { Random random = new Random(); + String landSetName = (String) cbLandSet.getSelectedItem(); + CardCriteria criteria = new CardCriteria(); - if (!setCodesland.isEmpty()) { + if (landSetName.equals("")) { criteria.setCodes(setCodesland.toArray(new String[setCodesland.size()])); - } + } else { + ExpansionInfo expansionInfo = ExpansionRepository.instance.getSetByName(landSetName); + if (expansionInfo == null) { + throw new IllegalArgumentException("Code of Set " + landSetName + " not found"); + } + criteria.setCodes(expansionInfo.getCode()); + } criteria.rarities(Rarity.LAND).name(landName); List cards = CardRepository.instance.findCards(criteria); if (cards.isEmpty()) { - return; + throw new IllegalArgumentException("No basic lands found in Set: " + landSetName); } for (int i = 0; i < number; i++) { @@ -132,16 +148,18 @@ public class AddLandDialog extends MageDialog { private void initComponents() { jButton2 = new javax.swing.JButton(); + lblLandSet = new javax.swing.JLabel(); + cbLandSet = new javax.swing.JComboBox(); lblForest = new javax.swing.JLabel(); spnForest = new javax.swing.JSpinner(); - spnIsland = new javax.swing.JSpinner(); lblIsland = new javax.swing.JLabel(); + spnIsland = new javax.swing.JSpinner(); + lblMountain = new javax.swing.JLabel(); + spnMountain = new javax.swing.JSpinner(); lblPains = new javax.swing.JLabel(); spnPlains = new javax.swing.JSpinner(); - spnMountain = new javax.swing.JSpinner(); - lblMountain = new javax.swing.JLabel(); - spnSwamp = new javax.swing.JSpinner(); lblSwamp = new javax.swing.JLabel(); + spnSwamp = new javax.swing.JSpinner(); btnAdd = new javax.swing.JButton(); btnCancel = new javax.swing.JButton(); btnAutoAdd = new javax.swing.JButton(); @@ -150,26 +168,30 @@ public class AddLandDialog extends MageDialog { setTitle("Add Land"); + lblLandSet.setText("Set"); + + cbLandSet.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + lblForest.setText("Forest"); spnForest.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1))); + lblIsland.setText("Island"); + spnIsland.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1))); - lblIsland.setText("Island"); + lblMountain.setText("Mountain"); + + spnMountain.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1))); lblPains.setText("Plains"); spnPlains.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1))); - spnMountain.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1))); - - lblMountain.setText("Mountain"); + lblSwamp.setText("Swamp"); spnSwamp.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1))); - lblSwamp.setText("Swamp"); - btnAdd.setText("Add"); btnAdd.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { @@ -197,40 +219,50 @@ public class AddLandDialog extends MageDialog { layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblIsland) .addComponent(lblMountain) - .addComponent(lblForest)) + .addComponent(lblForest) + .addComponent(lblLandSet)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(spnMountain, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE) - .addComponent(spnIsland) - .addComponent(spnForest))) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addComponent(lblPains) - .addGap(21, 21, 21) - .addComponent(spnPlains)) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addComponent(lblSwamp) - .addGap(14, 14, 14) - .addComponent(spnSwamp))) - .addGap(114, 114, 114)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(spnMountain, javax.swing.GroupLayout.DEFAULT_SIZE, 85, Short.MAX_VALUE) + .addComponent(spnIsland) + .addComponent(spnForest)) + .addComponent(cbLandSet, javax.swing.GroupLayout.PREFERRED_SIZE, 207, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(lblSwamp) + .addGap(14, 14, 14) + .addComponent(spnSwamp)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(lblPains) + .addGap(21, 21, 21) + .addComponent(spnPlains))) + .addGap(122, 122, 122))) + .addContainerGap()) .addGroup(layout.createSequentialGroup() .addComponent(btnCancel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(btnAutoAdd) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(btnAdd) - .addGap(0, 40, Short.MAX_VALUE)))) + .addGap(0, 0, Short.MAX_VALUE)))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(cbLandSet, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lblLandSet)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lblForest) .addComponent(spnForest, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) @@ -250,7 +282,7 @@ public class AddLandDialog extends MageDialog { .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(lblSwamp) .addComponent(spnSwamp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 38, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btnAdd) .addComponent(btnCancel) @@ -322,9 +354,11 @@ public class AddLandDialog extends MageDialog { private javax.swing.JButton btnAdd; private javax.swing.JButton btnAutoAdd; private javax.swing.JButton btnCancel; + private javax.swing.JComboBox cbLandSet; private javax.swing.JButton jButton2; private javax.swing.JLabel lblForest; private javax.swing.JLabel lblIsland; + private javax.swing.JLabel lblLandSet; private javax.swing.JLabel lblMountain; private javax.swing.JLabel lblPains; private javax.swing.JLabel lblSwamp; diff --git a/Mage.Client/src/main/java/mage/client/util/gui/ColorsChooser.java b/Mage.Client/src/main/java/mage/client/util/gui/ColorsChooser.java index bea63c29f89..a2eae35b36d 100644 --- a/Mage.Client/src/main/java/mage/client/util/gui/ColorsChooser.java +++ b/Mage.Client/src/main/java/mage/client/util/gui/ColorsChooser.java @@ -78,7 +78,7 @@ public class ColorsChooser extends JComboBox implements ListCellRenderer { } private void drawOn(JPanel panel, String value) { - List images = new ArrayList(); + List images = new ArrayList<>(); value = value.toUpperCase(); for (int i = 0; i < value.length(); i++) { char symbol = value.charAt(i);