From a32b4b75af10a4de364b8c8f07ece7266dd504bc Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 30 Dec 2017 16:03:49 +0400 Subject: [PATCH] UI: added set search button in deck generator (but it bugged and disabled); --- .../deck/generator/DeckGeneratorDialog.java | 24 +++++++- .../mage/client/deckeditor/CardSelector.java | 44 ++------------ .../mage/client/util/gui/FastSearchUtil.java | 58 +++++++++++++++++++ 3 files changed, 84 insertions(+), 42 deletions(-) create mode 100644 Mage.Client/src/main/java/mage/client/util/gui/FastSearchUtil.java diff --git a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGeneratorDialog.java b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGeneratorDialog.java index 287579efcb6..d58a0942a22 100644 --- a/Mage.Client/src/main/java/mage/client/deck/generator/DeckGeneratorDialog.java +++ b/Mage.Client/src/main/java/mage/client/deck/generator/DeckGeneratorDialog.java @@ -42,6 +42,7 @@ import mage.cards.decks.Deck; import mage.client.MageFrame; import mage.client.dialog.PreferencesDialog; import mage.client.util.gui.ColorsChooser; +import mage.client.util.gui.FastSearchUtil; import mage.client.util.sets.ConstructedFormats; /** @@ -106,21 +107,38 @@ public class DeckGeneratorDialog { c.weightx = 0.10; mainPanel.add(formatSetText, c); - // Format/set dropdown + // Format/set dropdown with search button + JPanel setPanel = new JPanel(); + setPanel.setLayout(new javax.swing.BoxLayout(setPanel, javax.swing.BoxLayout.LINE_AXIS)); c.fill = GridBagConstraints.HORIZONTAL; c.gridx = 1; c.gridy = 1; c.ipadx = 30; c.insets = new Insets(5, 10, 0, 10); - c.weightx = 0.90; + c.weightx = 0.80; + mainPanel.add(setPanel, c); + cbSets = new JComboBox<>(ConstructedFormats.getTypes()); cbSets.setSelectedIndex(0); - mainPanel.add(cbSets, c); + cbSets.setAlignmentX(0.0F); + setPanel.add(cbSets); String prefSet = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_DECK_GENERATOR_SET, null); if (prefSet != null) { cbSets.setSelectedItem(prefSet); } + + JButton btn = new JButton(); + btn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/search_32.png"))); + btn.setToolTipText(FastSearchUtil.DEFAULT_EXPANSION_TOOLTIP_MESSAGE); + btn.setAlignmentX(1.0F); + btn.setPreferredSize(new java.awt.Dimension(32, 32)); + btn.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + FastSearchUtil.showFastSearchForStringComboBox(cbSets, FastSearchUtil.DEFAULT_EXPANSION_SEARCH_MESSAGE); + } + }); + //setPanel.add(btn, c); // TODO: can't show pickdialog here... need to replace standard modal dialog (JOptionPane) to internal mage dialog // Deck size label c.fill = GridBagConstraints.HORIZONTAL; 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 a8ecb466225..d889a61e120 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java @@ -47,13 +47,12 @@ import mage.cards.Sets; import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; -import mage.choices.ChoiceImpl; import mage.client.MageFrame; import mage.client.cards.*; import mage.client.constants.Constants.SortBy; import mage.client.deckeditor.table.TableModel; -import mage.client.dialog.PickChoiceDialog; import mage.client.util.GUISizeHelper; +import mage.client.util.gui.FastSearchUtil; import mage.client.util.sets.ConstructedFormats; import mage.constants.CardType; import mage.filter.FilterCard; @@ -215,8 +214,8 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene this.cards.add(card); } filterCards(); - } - + } + public void loadCards(BigCard bigCard) { this.bigCard = bigCard; this.btnBooster.setVisible(true); @@ -226,40 +225,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene // cbExpansionSet.setModel(new DefaultComboBoxModel<>(ConstructedFormats.getTypes())); // Action event on Expansion set triggers loadCards method cbExpansionSet.setSelectedIndex(0); - } - - public void doFastExpansionSearch(){ - mage.choices.Choice choice = new ChoiceImpl(false); - - // collect data from expansion combobox (String) - DefaultComboBoxModel comboModel = (DefaultComboBoxModel)cbExpansionSet.getModel(); - Map choiceItems = new HashMap<>(comboModel.getSize()); - Map choiceSorting = new HashMap<>(comboModel.getSize()); - String item; - - for(int i = 0; i < comboModel.getSize() - 1; i++){ - item = (String)comboModel.getElementAt(i); - choiceItems.put(item, item); - choiceSorting.put(item, i); // need so sorting - } - - choice.setKeyChoices(choiceItems); - choice.setSortData(choiceSorting); - choice.setMessage("Select set or expansion"); - - // current selection value restore - String needSelectValue; - needSelectValue = (String)comboModel.getSelectedItem(); - - // ask for new value - PickChoiceDialog dlg = new PickChoiceDialog(); - dlg.setWindowSize(300, 500); - dlg.showDialog(choice, needSelectValue); - if(choice.isChosen()){ - item = choice.getChoiceKey(); - comboModel.setSelectedItem(item); - } - } + } private FilterCard buildFilter() { FilterCard filter = new FilterCard(); @@ -1255,7 +1221,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene }//GEN-LAST:event_chkRulesActionPerformed private void btnExpansionSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExpansionSearchActionPerformed - doFastExpansionSearch(); + FastSearchUtil.showFastSearchForStringComboBox(cbExpansionSet, "Select set or expansion"); }//GEN-LAST:event_btnExpansionSearchActionPerformed private void toggleViewMode() { diff --git a/Mage.Client/src/main/java/mage/client/util/gui/FastSearchUtil.java b/Mage.Client/src/main/java/mage/client/util/gui/FastSearchUtil.java new file mode 100644 index 00000000000..9d88e27137a --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/util/gui/FastSearchUtil.java @@ -0,0 +1,58 @@ +package mage.client.util.gui; + +import mage.choices.ChoiceImpl; +import mage.client.dialog.PickChoiceDialog; + +import javax.swing.*; +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author JayDi85 + */ +public class FastSearchUtil { + + public static String DEFAULT_EXPANSION_SEARCH_MESSAGE = "Select set or expansion"; + public static String DEFAULT_EXPANSION_TOOLTIP_MESSAGE = "Fast search set or expansion"; + + /** + * Show fast choice modal dialog with incremental searching for any string combobox components + * @param combo combobox control with default data model + * @param chooseMessage caption message for dialog + */ + public static void showFastSearchForStringComboBox(JComboBox combo, String chooseMessage){ + // fast search/choice dialog for string combobox + + mage.choices.Choice choice = new ChoiceImpl(false); + + // collect data from expansion combobox (String) + DefaultComboBoxModel comboModel = (DefaultComboBoxModel)combo.getModel(); + Map choiceItems = new HashMap<>(comboModel.getSize()); + Map choiceSorting = new HashMap<>(comboModel.getSize()); + String item; + + for(int i = 0; i < comboModel.getSize() - 1; i++){ + item = (String)comboModel.getElementAt(i); + choiceItems.put(item, item); + choiceSorting.put(item, i); // need so sorting + } + + choice.setKeyChoices(choiceItems); + choice.setSortData(choiceSorting); + choice.setMessage(chooseMessage); + + // current selection value restore + String needSelectValue; + needSelectValue = (String)comboModel.getSelectedItem(); + + // ask for new value + PickChoiceDialog dlg = new PickChoiceDialog(); + dlg.setWindowSize(300, 500); + dlg.showDialog(choice, needSelectValue); + if(choice.isChosen()){ + item = choice.getChoiceKey(); + comboModel.setSelectedItem(item); + } + } +}