mirror of
https://github.com/correl/mage.git
synced 2024-12-26 11:09:27 +00:00
Merge pull request #4567 from spjspj/master
Add a singleton search option for deck editor search
This commit is contained in:
commit
41c43cb891
3 changed files with 79 additions and 3 deletions
|
@ -645,6 +645,8 @@
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="chkRules" min="-2" max="-2" attributes="0"/>
|
<Component id="chkRules" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
|
<Component id="chkUnique" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="5" max="-2" attributes="0"/>
|
||||||
<Component id="cardCountLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="cardCountLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="cardCount" min="-2" pref="48" max="-2" attributes="0"/>
|
<Component id="cardCount" min="-2" pref="48" max="-2" attributes="0"/>
|
||||||
|
@ -659,6 +661,7 @@
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="chkTypes" max="32767" attributes="0"/>
|
<Component id="chkTypes" max="32767" attributes="0"/>
|
||||||
<Component id="chkRules" alignment="1" max="32767" attributes="0"/>
|
<Component id="chkRules" alignment="1" max="32767" attributes="0"/>
|
||||||
|
<Component id="chkUnique" alignment="1" max="32767" attributes="0"/>
|
||||||
<Component id="chkNames" alignment="1" max="32767" attributes="0"/>
|
<Component id="chkNames" alignment="1" max="32767" attributes="0"/>
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
@ -846,6 +849,29 @@
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="chkRulesActionPerformed"/>
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="chkRulesActionPerformed"/>
|
||||||
</Events>
|
</Events>
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="chkUnique">
|
||||||
|
<Properties>
|
||||||
|
<Property name="selected" type="boolean" value="true"/>
|
||||||
|
<Property name="text" type="java.lang.String" value="Unique"/>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" value="Singleton rules."/>
|
||||||
|
<Property name="focusable" type="boolean" value="false"/>
|
||||||
|
<Property name="horizontalTextPosition" type="int" value="4"/>
|
||||||
|
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[69, 16]"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[69, 16]"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
|
<Dimension value="[69, 16]"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="verticalTextPosition" type="int" value="3"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="chkUniqueActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
|
||||||
<Component class="javax.swing.JButton" name="jButtonSearch">
|
<Component class="javax.swing.JButton" name="jButtonSearch">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" value="Search"/>
|
<Property name="text" type="java.lang.String" value="Search"/>
|
||||||
|
|
|
@ -232,7 +232,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
||||||
FilterCard filter = new FilterCard();
|
FilterCard filter = new FilterCard();
|
||||||
|
|
||||||
String name = jTextFieldSearch.getText().trim();
|
String name = jTextFieldSearch.getText().trim();
|
||||||
filter.add(new CardTextPredicate(name, chkNames.isSelected(), chkTypes.isSelected(), chkRules.isSelected()));
|
filter.add(new CardTextPredicate(name, chkNames.isSelected(), chkTypes.isSelected(), chkRules.isSelected(), chkUnique.isSelected()));
|
||||||
|
|
||||||
if (limited) {
|
if (limited) {
|
||||||
ArrayList<Predicate<MageObject>> predicates = new ArrayList<>();
|
ArrayList<Predicate<MageObject>> predicates = new ArrayList<>();
|
||||||
|
@ -543,6 +543,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
||||||
chkNames = new javax.swing.JCheckBox();
|
chkNames = new javax.swing.JCheckBox();
|
||||||
chkTypes = new javax.swing.JCheckBox();
|
chkTypes = new javax.swing.JCheckBox();
|
||||||
chkRules = new javax.swing.JCheckBox();
|
chkRules = new javax.swing.JCheckBox();
|
||||||
|
chkUnique = new javax.swing.JCheckBox();
|
||||||
jButtonSearch = new javax.swing.JButton();
|
jButtonSearch = new javax.swing.JButton();
|
||||||
jButtonClean = new javax.swing.JButton();
|
jButtonClean = new javax.swing.JButton();
|
||||||
cardCountLabel = new javax.swing.JLabel();
|
cardCountLabel = new javax.swing.JLabel();
|
||||||
|
@ -1063,6 +1064,22 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
chkUnique.setSelected(true);
|
||||||
|
chkUnique.setText("Unique");
|
||||||
|
chkUnique.setToolTipText("Singleton results only.");
|
||||||
|
chkUnique.setFocusable(false);
|
||||||
|
chkUnique.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
|
||||||
|
chkUnique.setMaximumSize(new java.awt.Dimension(69, 16));
|
||||||
|
chkUnique.setMinimumSize(new java.awt.Dimension(69, 16));
|
||||||
|
chkUnique.setPreferredSize(new java.awt.Dimension(69, 16));
|
||||||
|
chkUnique.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
|
||||||
|
chkUnique.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
chkUniqueActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
jButtonSearch.setText("Search");
|
jButtonSearch.setText("Search");
|
||||||
jButtonSearch.setToolTipText("Performs the search.");
|
jButtonSearch.setToolTipText("Performs the search.");
|
||||||
jButtonSearch.addActionListener(new java.awt.event.ActionListener() {
|
jButtonSearch.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
@ -1109,6 +1126,8 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
||||||
.addComponent(chkTypes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(chkTypes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(chkRules, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(chkRules, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(chkUnique, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addGap(5, 5, 5)
|
.addGap(5, 5, 5)
|
||||||
.addComponent(cardCountLabel)
|
.addComponent(cardCountLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
@ -1122,6 +1141,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
||||||
.addGroup(cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(chkTypes, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(chkTypes, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(chkRules, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(chkRules, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addComponent(chkUnique, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(chkNames, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addComponent(chkNames, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addGroup(cardSelectorBottomPanelLayout.createSequentialGroup()
|
.addGroup(cardSelectorBottomPanelLayout.createSequentialGroup()
|
||||||
.addGroup(cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
@ -1341,6 +1361,10 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
||||||
// TODO add your handling code here:
|
// TODO add your handling code here:
|
||||||
}//GEN-LAST:event_chkRulesActionPerformed
|
}//GEN-LAST:event_chkRulesActionPerformed
|
||||||
|
|
||||||
|
private void chkUniqueActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkRulesActionPerformed
|
||||||
|
// TODO add your handling code here:
|
||||||
|
}//GEN-LAST:event_chkRulesActionPerformed
|
||||||
|
|
||||||
private void btnExpansionSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExpansionSearchActionPerformed
|
private void btnExpansionSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExpansionSearchActionPerformed
|
||||||
FastSearchUtil.showFastSearchForStringComboBox(cbExpansionSet, "Select set or expansion");
|
FastSearchUtil.showFastSearchForStringComboBox(cbExpansionSet, "Select set or expansion");
|
||||||
}//GEN-LAST:event_btnExpansionSearchActionPerformed
|
}//GEN-LAST:event_btnExpansionSearchActionPerformed
|
||||||
|
@ -1418,6 +1442,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
|
||||||
private javax.swing.JCheckBox chkPennyDreadful;
|
private javax.swing.JCheckBox chkPennyDreadful;
|
||||||
private javax.swing.JCheckBox chkPiles;
|
private javax.swing.JCheckBox chkPiles;
|
||||||
private javax.swing.JCheckBox chkRules;
|
private javax.swing.JCheckBox chkRules;
|
||||||
|
private javax.swing.JCheckBox chkUnique;
|
||||||
private javax.swing.JCheckBox chkTypes;
|
private javax.swing.JCheckBox chkTypes;
|
||||||
private javax.swing.JButton jButtonAddToMain;
|
private javax.swing.JButton jButtonAddToMain;
|
||||||
private javax.swing.JButton jButtonAddToSideboard;
|
private javax.swing.JButton jButtonAddToSideboard;
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
*/
|
*/
|
||||||
package mage.filter.predicate.other;
|
package mage.filter.predicate.other;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import mage.cards.Card;
|
import mage.cards.Card;
|
||||||
import mage.cards.SplitCard;
|
import mage.cards.SplitCard;
|
||||||
import mage.constants.SubType;
|
import mage.constants.SubType;
|
||||||
|
@ -44,21 +45,38 @@ public class CardTextPredicate implements Predicate<Card> {
|
||||||
private final boolean inNames;
|
private final boolean inNames;
|
||||||
private final boolean inTypes;
|
private final boolean inTypes;
|
||||||
private final boolean inRules;
|
private final boolean inRules;
|
||||||
|
private final boolean isUnique;
|
||||||
|
private HashMap<String, Boolean> seenCards = null;
|
||||||
|
|
||||||
public CardTextPredicate(String text, boolean inNames, boolean inTypes, boolean inRules) {
|
public CardTextPredicate(String text, boolean inNames, boolean inTypes, boolean inRules, boolean isUnique) {
|
||||||
this.text = text;
|
this.text = text;
|
||||||
this.inNames = inNames;
|
this.inNames = inNames;
|
||||||
this.inTypes = inTypes;
|
this.inTypes = inTypes;
|
||||||
this.inRules = inRules;
|
this.inRules = inRules;
|
||||||
|
this.isUnique = isUnique;
|
||||||
|
seenCards = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Card input, Game game) {
|
public boolean apply(Card input, Game game) {
|
||||||
if (text.isEmpty()) {
|
if (text.isEmpty() && !isUnique) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (text.isEmpty() && isUnique) {
|
||||||
|
boolean found = !seenCards.keySet().contains(input.getName());
|
||||||
|
seenCards.put(input.getName(), true);
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
// first check in card name
|
// first check in card name
|
||||||
if (inNames && input.getName().toLowerCase().contains(text.toLowerCase())) {
|
if (inNames && input.getName().toLowerCase().contains(text.toLowerCase())) {
|
||||||
|
if (isUnique && seenCards.keySet().contains(input.getName())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (isUnique) {
|
||||||
|
seenCards.put(input.getName(), true);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,11 +123,18 @@ public class CardTextPredicate implements Predicate<Card> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (found && isUnique && seenCards.keySet().contains(input.getName())) {
|
||||||
|
found = false;
|
||||||
|
}
|
||||||
if (!found) {
|
if (!found) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isUnique) {
|
||||||
|
seenCards.put(input.getName(), true);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue