move feature to the filter already implemented.

This commit is contained in:
Salco 2018-04-20 08:27:22 -04:00
parent e7b9d30f39
commit e53a9d5f39
9 changed files with 313 additions and 1056 deletions

View file

@ -38,7 +38,9 @@
<Component id="tbColor" min="-2" max="-2" attributes="0"/> <Component id="tbColor" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="0" max="-2" attributes="0"/> <EmptySpace min="-2" pref="0" max="-2" attributes="0"/>
<Component id="tbTypes" min="-2" max="-2" attributes="0"/> <Component id="tbTypes" min="-2" max="-2" attributes="0"/>
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
<Component id="cardSelectorScrollPane" pref="237" max="32767" attributes="0"/> <Component id="cardSelectorScrollPane" pref="237" max="32767" attributes="0"/>
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
<Component id="cardSelectorBottomPanel" min="-2" pref="31" max="-2" attributes="0"/> <Component id="cardSelectorBottomPanel" min="-2" pref="31" max="-2" attributes="0"/>
</Group> </Group>
</Group> </Group>
@ -263,17 +265,6 @@
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnClearActionPerformed"/> <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btnClearActionPerformed"/>
</Events> </Events>
</Component> </Component>
<Component class="javax.swing.JButton" name="jButton1">
<Properties>
<Property name="text" type="java.lang.String" value="Filter Set"/>
<Property name="focusable" type="boolean" value="false"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
<Property name="verticalTextPosition" type="int" value="3"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton1ActionPerformed"/>
</Events>
</Component>
</SubComponents> </SubComponents>
</Container> </Container>
<Container class="javax.swing.JToolBar" name="tbTypes"> <Container class="javax.swing.JToolBar" name="tbTypes">

View file

@ -58,7 +58,6 @@ import static mage.client.dialog.PreferencesDialog.KEY_DECK_EDITOR_SEARCH_UNIQUE
import mage.client.util.GUISizeHelper; import mage.client.util.GUISizeHelper;
import mage.client.util.gui.FastSearchUtil; import mage.client.util.gui.FastSearchUtil;
import mage.client.dialog.CheckBoxList; import mage.client.dialog.CheckBoxList;
import mage.client.util.gui.FastSearchUtil_1;
import mage.client.util.sets.ConstructedFormats; import mage.client.util.sets.ConstructedFormats;
import mage.constants.CardType; import mage.constants.CardType;
@ -73,7 +72,6 @@ import mage.filter.predicate.other.CardTextPredicate;
import mage.filter.predicate.other.ExpansionSetPredicate; import mage.filter.predicate.other.ExpansionSetPredicate;
import mage.view.CardView; import mage.view.CardView;
import mage.view.CardsView; import mage.view.CardsView;
//import org.apache.log4j.helpers.LogLog;
import org.mage.card.arcane.ManaSymbolsCellRenderer; import org.mage.card.arcane.ManaSymbolsCellRenderer;
/** /**
@ -88,12 +86,16 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
private final SortSetting sortSetting; private final SortSetting sortSetting;
private static final Map<String, Integer> pdAllowed = new HashMap<>(); private static final Map<String, Integer> pdAllowed = new HashMap<>();
private final String TEST_MULTI_SET="Multiple Sets selected";
private final ActionListener searchAction = evt -> jButtonSearchActionPerformed(evt); private final ActionListener searchAction = evt -> jButtonSearchActionPerformed(evt);
/** /**
* Creates new form CardSelector * Creates new form CardSelector
*/ */
public CardSelector() { public CardSelector() {
sortSetting = SortSettingBase.getInstance(); sortSetting = SortSettingBase.getInstance();
initComponents(); initComponents();
cardGrid = new CardGrid(); cardGrid = new CardGrid();
@ -101,7 +103,25 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
initListViewComponents(); initListViewComponents();
setGUISize(); setGUISize();
currentView = mainModel; // by default we use List View currentView = mainModel; // by default we use List View
}
listCodeSelected = new CheckBoxList();
// remove the all option
boolean is_removeFinish=false;
String[] setCodes = ConstructedFormats.getTypes();
java.util.List<String> result = new ArrayList<>();
for(int i=0; (i<setCodes.length)&&(!is_removeFinish);i++)
{
String item = setCodes[i];
if(!item.equals(ConstructedFormats.ALL))
{
result.add(item);
}
}
listCodeSelected.setListData(result.toArray());
}
private void makeTransparent() { private void makeTransparent() {
this.addComponentListener(this); this.addComponentListener(this);
@ -306,12 +326,10 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
} }
} }
} }
return filter; return filter;
} }
private CardCriteria buildCriteria() { private CardCriteria buildCriteria() {
//java.util.List<String> setCodes;
CardCriteria criteria = new CardCriteria(); CardCriteria criteria = new CardCriteria();
criteria.black(this.tbBlack.isSelected()); criteria.black(this.tbBlack.isSelected());
criteria.blue(this.tbBlue.isSelected()); criteria.blue(this.tbBlue.isSelected());
@ -363,13 +381,33 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
} }
if (this.cbExpansionSet.isVisible()) { if (this.cbExpansionSet.isVisible()) {
String expansionSelection = this.cbExpansionSet.getSelectedItem().toString(); if(listCodeSelected.getCheckedIndices().length <= 1)
if (!expansionSelection.equals("- All Sets")) { {
java.util.List<String> setCodes = ConstructedFormats.getSetsByFormat(expansionSelection); String expansionSelection = this.cbExpansionSet.getSelectedItem().toString();
if (!expansionSelection.equals("- All Sets")) {
java.util.List<String> setCodes = ConstructedFormats.getSetsByFormat(expansionSelection);
criteria.setCodes(setCodes.toArray(new String[0]));
}
}
else
{
java.util.List<String> setCodes = new ArrayList<>() ;
//java.util.List<String> listReceived=new ArrayList<>() ;
int[] choiseValue=listCodeSelected.getCheckedIndices();
ListModel x= listCodeSelected.getModel();
for(int itemIndex: choiseValue){
java.util.List<String> listReceived=ConstructedFormats.getSetsByFormat(x.getElementAt(itemIndex).toString());
listReceived.stream().filter((item) -> (setCodes.contains(item)==false)).forEachOrdered((item) -> {
setCodes.add(item);
});
}
criteria.setCodes(setCodes.toArray(new String[0])); criteria.setCodes(setCodes.toArray(new String[0]));
} }
} }
if(cbSetTag!=null) /*if(cbSetTag!=null)
{ {
if(listCodeSelected != null) if(listCodeSelected != null)
{ {
@ -389,7 +427,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
criteria.setCodes(setCodes.toArray(new String[0])); criteria.setCodes(setCodes.toArray(new String[0]));
} }
} }
} }*/
return criteria; return criteria;
} }
@ -472,16 +510,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
continue; continue;
} }
} }
filteredCards.add(card); filteredCards.add(card);
if(cbSetTag==null)
{
cbSetTag = new javax.swing.JComboBox<>();
fist_time = true;
}
if(fist_time == true)
{
cbSetTag.addItem(cardInfo.getSetCode());
}
} }
} }
} }
@ -558,7 +587,6 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
chkPennyDreadful = new javax.swing.JCheckBox(); chkPennyDreadful = new javax.swing.JCheckBox();
btnBooster = new javax.swing.JButton(); btnBooster = new javax.swing.JButton();
btnClear = new javax.swing.JButton(); btnClear = new javax.swing.JButton();
jButton1 = new javax.swing.JButton();
tbTypes = new javax.swing.JToolBar(); tbTypes = new javax.swing.JToolBar();
tbLand = new javax.swing.JToggleButton(); tbLand = new javax.swing.JToggleButton();
tbCreatures = new javax.swing.JToggleButton(); tbCreatures = new javax.swing.JToggleButton();
@ -761,17 +789,6 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
}); });
tbColor.add(btnClear); tbColor.add(btnClear);
jButton1.setText("Filter Set");
jButton1.setFocusable(false);
jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
tbColor.add(jButton1);
tbTypes.setFloatable(false); tbTypes.setFloatable(false);
tbTypes.setRollover(true); tbTypes.setRollover(true);
tbTypes.setToolTipText("Hold the ALT-key while clicking to deselect all other card types or hold the CTRL-key to only select all other card types."); // NOI18N tbTypes.setToolTipText("Hold the ALT-key while clicking to deselect all other card types or hold the CTRL-key to only select all other card types."); // NOI18N
@ -1193,7 +1210,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
.addComponent(cardCountLabel) .addComponent(cardCountLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cardCount, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(cardCount, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(139, Short.MAX_VALUE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
); );
cardSelectorBottomPanelLayout.setVerticalGroup( cardSelectorBottomPanelLayout.setVerticalGroup(
cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@ -1238,12 +1255,32 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
.addComponent(tbColor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(tbColor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, 0) .addGap(0, 0, 0)
.addComponent(tbTypes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(tbTypes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, 0)
.addComponent(cardSelectorScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 237, Short.MAX_VALUE) .addComponent(cardSelectorScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 237, Short.MAX_VALUE)
.addGap(0, 0, 0)
.addComponent(cardSelectorBottomPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(cardSelectorBottomPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE))
); );
}// </editor-fold>//GEN-END:initComponents }// </editor-fold>//GEN-END:initComponents
private void cbExpansionSetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbExpansionSetActionPerformed private void cbExpansionSetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbExpansionSetActionPerformed
if(!cbExpansionSet.getSelectedItem().toString().contains(TEST_MULTI_SET))
{
int index=cbExpansionSet.getSelectedIndex();
if(cbExpansionSet.getItemAt(0).contains(TEST_MULTI_SET))
{
cbExpansionSet.removeItemAt(0);
index--;
}
listCodeSelected.uncheckAll();
if(index > 0)
{
//ofset because all sets is removed from the list
listCodeSelected.setChecked(index-1, true);
}
}
filterCards(); filterCards();
}//GEN-LAST:event_cbExpansionSetActionPerformed }//GEN-LAST:event_cbExpansionSetActionPerformed
@ -1425,7 +1462,46 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
}//GEN-LAST:event_chkRulesActionPerformed }//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(listCodeSelected, FastSearchUtil.DEFAULT_EXPANSION_SEARCH_MESSAGE);
//
int[] choiseValue=listCodeSelected.getCheckedIndices();
ListModel x= listCodeSelected.getModel();
if(choiseValue.length==0)//none
{
cbExpansionSet.setSelectedIndex(0);
}
else if(choiseValue.length==1)//one
{
String itemSelected=listCodeSelected.getModel().getElementAt(choiseValue[0]).toString();
for(int index=0;index < cbExpansionSet.getItemCount();index++)
{
if(cbExpansionSet.getItemAt(index).equals(itemSelected))
{
cbExpansionSet.setSelectedIndex(index);
}
}
}
else//many
{
String message=String.format("%s:%d",TEST_MULTI_SET,choiseValue.length);
cbExpansionSet.insertItemAt(message, 0);
cbExpansionSet.setSelectedIndex(0);
//listCodeSelected.setChecked(index-1, true);
//cbExpansionSet.
}
/*for(int itemIndex: choiseValue){
// LogLog.warn(String.format("%d:%s",itemIndex,x.getElementAt(itemIndex).toString()));
}
*/
//
filterCards();
}//GEN-LAST:event_btnExpansionSearchActionPerformed }//GEN-LAST:event_btnExpansionSearchActionPerformed
private void tbCommonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tbCommonActionPerformed private void tbCommonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tbCommonActionPerformed
@ -1448,14 +1524,6 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
filterCardsRarity(evt.getModifiers(), evt.getActionCommand()); filterCardsRarity(evt.getModifiers(), evt.getActionCommand());
}//GEN-LAST:event_tbSpecialActionPerformed }//GEN-LAST:event_tbSpecialActionPerformed
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
CheckBoxList testList;
listCodeSelected = FastSearchUtil_1.showFastSearchForStringComboBox(cbSetTag, FastSearchUtil_1.DEFAULT_EXPANSION_SEARCH_MESSAGE);
filterCards();
}//GEN-LAST:event_jButton1ActionPerformed
private void toggleViewMode() { private void toggleViewMode() {
if (currentView instanceof CardGrid) { if (currentView instanceof CardGrid) {
jToggleListView.setSelected(true); jToggleListView.setSelected(true);
@ -1494,6 +1562,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
private JTable mainTable; private JTable mainTable;
private ICardGrid currentView; private ICardGrid currentView;
static boolean isFirstTimeHere=true;
private CheckBoxList listCodeSelected; private CheckBoxList listCodeSelected;
private javax.swing.JComboBox<String> cbSetTag; private javax.swing.JComboBox<String> cbSetTag;
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
@ -1513,7 +1582,6 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene
private javax.swing.JCheckBox chkRules; private javax.swing.JCheckBox chkRules;
private javax.swing.JCheckBox chkTypes; private javax.swing.JCheckBox chkTypes;
private javax.swing.JCheckBox chkUnique; private javax.swing.JCheckBox chkUnique;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButtonAddToMain; private javax.swing.JButton jButtonAddToMain;
private javax.swing.JButton jButtonAddToSideboard; private javax.swing.JButton jButtonAddToSideboard;
private javax.swing.JButton jButtonClean; private javax.swing.JButton jButtonClean;

View file

@ -552,7 +552,7 @@ public class CheckBoxList extends JList {
int index = locationToIndex(e.getPoint()); int index = locationToIndex(e.getPoint());
if (index != -1) { if (index != -1) {
setChecked(index, !getChecked(index)); setChecked(index, !getChecked(index));
repaint(); repaint();
} }
} }
@ -665,4 +665,16 @@ public class CheckBoxList extends JList {
return result; return result;
} }
public void checkAll() {
for (int i = 0; i < getModel().getSize(); i++) {
this.setChecked(i,true);
}
}
public void uncheckAll() {
int[] choiceToUncheck = this.getCheckedIndices();
for(int itemIndex: choiceToUncheck){
this.setChecked(itemIndex,false);
}
}
} }

View file

@ -39,7 +39,7 @@
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="panelSearch" min="-2" max="-2" attributes="0"/> <Component id="panelSearch" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="scrollList" pref="246" max="32767" attributes="0"/> <Component id="scrollList" pref="240" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="panelCommands" min="-2" max="-2" attributes="0"/> <Component id="panelCommands" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/> <EmptySpace min="-2" max="-2" attributes="0"/>
@ -55,8 +55,8 @@
<Group type="103" groupAlignment="0" attributes="0"> <Group type="103" groupAlignment="0" 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">
<Component id="labelMessage" alignment="1" pref="210" max="32767" attributes="0"/> <Component id="labelMessage" alignment="1" pref="0" max="32767" attributes="0"/>
<Component id="labelSubMessage" alignment="1" pref="210" max="32767" attributes="0"/> <Component id="labelSubMessage" alignment="1" max="32767" attributes="0"/>
</Group> </Group>
<EmptySpace min="0" pref="0" max="-2" attributes="0"/> <EmptySpace min="0" pref="0" max="-2" attributes="0"/>
</Group> </Group>
@ -65,10 +65,10 @@
<DimensionLayout dim="1"> <DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0"> <Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0"> <Group type="102" alignment="0" attributes="0">
<EmptySpace min="0" pref="0" max="-2" attributes="0"/> <EmptySpace min="0" pref="0" max="32767" attributes="0"/>
<Component id="labelMessage" max="32767" attributes="0"/> <Component id="labelMessage" max="32767" attributes="0"/>
<EmptySpace min="0" pref="0" max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
<Component id="labelSubMessage" max="32767" attributes="0"/> <Component id="labelSubMessage" pref="30" max="32767" attributes="0"/>
</Group> </Group>
</Group> </Group>
</DimensionLayout> </DimensionLayout>
@ -158,12 +158,14 @@
<Layout> <Layout>
<DimensionLayout dim="0"> <DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0"> <Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0"> <Group type="102" alignment="0" attributes="0">
<EmptySpace max="32767" attributes="0"/>
<Component id="btClear" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/>
<Component id="btOK" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/>
<Component id="btCancel" min="-2" pref="83" max="-2" attributes="0"/>
<EmptySpace max="32767" attributes="0"/> <EmptySpace max="32767" attributes="0"/>
<Component id="btOK" linkSize="3" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="btCancel" linkSize="3" min="-2" pref="70" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group> </Group>
</Group> </Group>
</DimensionLayout> </DimensionLayout>
@ -174,6 +176,7 @@
<Group type="103" groupAlignment="3" attributes="0"> <Group type="103" groupAlignment="3" attributes="0">
<Component id="btCancel" alignment="3" min="-2" max="-2" attributes="0"/> <Component id="btCancel" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="btOK" alignment="3" min="-2" max="-2" attributes="0"/> <Component id="btOK" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="btClear" alignment="3" min="-2" max="-2" attributes="0"/>
</Group> </Group>
<EmptySpace max="-2" attributes="0"/> <EmptySpace max="-2" attributes="0"/>
</Group> </Group>
@ -200,6 +203,20 @@
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btCancelActionPerformed"/> <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btCancelActionPerformed"/>
</Events> </Events>
</Component> </Component>
<Component class="javax.swing.JButton" name="btClear">
<Properties>
<Property name="text" type="java.lang.String" value="Clear"/>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[30, 25]"/>
</Property>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btClearActionPerformed"/>
</Events>
<AuxValues>
<AuxValue name="JavaCodeGenerator_AddingCodePost" type="java.lang.String" value="getRootPane().setDefaultButton(btOK);"/>
</AuxValues>
</Component>
</SubComponents> </SubComponents>
</Container> </Container>
</SubComponents> </SubComponents>

View file

@ -5,6 +5,7 @@
*/ */
package mage.client.dialog; package mage.client.dialog;
import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Point; import java.awt.Point;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
@ -32,6 +33,7 @@ import mage.client.util.gui.MageDialogState;
/** /**
* *
* @author JayDi85 * @author JayDi85
* @author Salco
*/ */
public class PickChoiceDialog extends MageDialog { public class PickChoiceDialog extends MageDialog {
@ -39,9 +41,29 @@ public class PickChoiceDialog extends MageDialog {
Choice choice; Choice choice;
ArrayList<KeyValueItem> allItems = new ArrayList<>(); ArrayList<KeyValueItem> allItems = new ArrayList<>();
DefaultListModel<KeyValueItem> dataModel = new DefaultListModel(); DefaultListModel<KeyValueItem> dataModel = new DefaultListModel();
CheckBoxList.CheckBoxListModel m_dataModel;
CheckBoxList tList;
final private static String HTML_TEMPLATE = "<html><div style='text-align: center;'>%s</div></html>"; final private static String HTML_TEMPLATE = "<html><div style='text-align: center;'>%s</div></html>";
private void setFocus(CheckBoxList obj){
if (!(obj instanceof java.awt.Component)) {
throw new IllegalArgumentException("Must be a java.awt.Component!");
}
this.scrollList.setViewportView((java.awt.Component)obj);
}
private javax.swing.JList get_a_Jlist_from_ScrollListView(){
return ((javax.swing.JList)this.scrollList.getViewport().getView());
}
private void restoreData(Object dataFrom){
this.allItems.forEach((item) -> {
((CheckBoxList.CheckBoxListModel)dataFrom).addElement(item.getObjectValue());
});
}
public void showDialog(Choice choice) { public void showDialog(Choice choice) {
showDialog(choice, null, null, null); showDialog(choice, null, null, null);
} }
@ -56,7 +78,9 @@ public class PickChoiceDialog extends MageDialog {
public void showDialog(Choice choice, UUID objectId, MageDialogState mageDialogState, String startSelectionValue) { public void showDialog(Choice choice, UUID objectId, MageDialogState mageDialogState, String startSelectionValue) {
this.choice = choice; this.choice = choice;
KeyValueItem tempKeyValue;
int indexInTList;
setLabelText(this.labelMessage, choice.getMessage()); setLabelText(this.labelMessage, choice.getMessage());
setLabelText(this.labelSubMessage, choice.getSubMessage()); setLabelText(this.labelSubMessage, choice.getSubMessage());
@ -68,11 +92,25 @@ public class PickChoiceDialog extends MageDialog {
this.allItems.clear(); this.allItems.clear();
if (choice.isKeyChoice()){ if (choice.isKeyChoice()){
for (Map.Entry<String, String> entry: choice.getKeyChoices().entrySet()) { for (Map.Entry<String, String> entry: choice.getKeyChoices().entrySet()) {
this.allItems.add(new KeyValueItem(entry.getKey(), entry.getValue())); if(tList != null){
indexInTList = m_dataModel.indexOf(entry.getKey());
tempKeyValue=new KeyValueItem(entry.getKey(), entry.getValue(),(CheckBoxList.CheckBoxListItem) this.tList.getModel().getElementAt(indexInTList));
}
else{
tempKeyValue=new KeyValueItem(entry.getKey(), entry.getValue());
}
this.allItems.add(tempKeyValue);
} }
} else { } else {
for (String value: choice.getChoices()){ for (String value: choice.getChoices()){
this.allItems.add(new KeyValueItem(value, value)); if(tList != null){
indexInTList = m_dataModel.indexOf(value);
tempKeyValue=new KeyValueItem(value, value,(CheckBoxList.CheckBoxListItem) tList.getModel().getElementAt(indexInTList));
}
else{
tempKeyValue=new KeyValueItem(value, value);
}
this.allItems.add(tempKeyValue);
} }
} }
@ -81,8 +119,8 @@ public class PickChoiceDialog extends MageDialog {
Collections.sort(this.allItems, new Comparator<KeyValueItem>() { Collections.sort(this.allItems, new Comparator<KeyValueItem>() {
@Override @Override
public int compare(KeyValueItem o1, KeyValueItem o2) { public int compare(KeyValueItem o1, KeyValueItem o2) {
Integer n1 = choice.getSortData().get(o1.Key); Integer n1 = choice.getSortData().get(o1.getKey());
Integer n2 = choice.getSortData().get(o2.Key); Integer n2 = choice.getSortData().get(o2.getKey());
return n1.compareTo(n2); return n1.compareTo(n2);
} }
}); });
@ -184,18 +222,24 @@ public class PickChoiceDialog extends MageDialog {
// start selection // start selection
if((startSelectionValue != null)){ if((startSelectionValue != null)){
javax.swing.JList currentlistChoices;// = new javax.swing.JList();
currentlistChoices=this.get_a_Jlist_from_ScrollListView();
/*currentlistChoices = this.listChoices;*/
int selectIndex = -1; int selectIndex = -1;
for(int i = 0; i < this.listChoices.getModel().getSize(); i++){ for(int i = 0; i < this.listChoices.getModel().getSize(); i++){
KeyValueItem listItem = (KeyValueItem)this.listChoices.getModel().getElementAt(i); //KeyValueItem listItem = (KeyValueItem)currentlistChoices.getModel().getElementAt(i);
if (listItem.Key.equals(startSelectionValue)){ String elementOfList = currentlistChoices.getModel().getElementAt(i).toString();
if (elementOfList.equals(startSelectionValue)){
selectIndex = i; selectIndex = i;
break; break;
} }
} }
if(selectIndex >= 0){ if(selectIndex >= 0){
this.listChoices.setSelectedIndex(selectIndex); // currentlistChoices=this.get_a_Jlist_from_ScrollListView();
this.listChoices.ensureIndexIsVisible(selectIndex); /*currentlistChoices = this.listChoices;*/
currentlistChoices.setSelectedIndex(selectIndex);
currentlistChoices.ensureIndexIsVisible(selectIndex);
} }
} }
@ -208,14 +252,16 @@ public class PickChoiceDialog extends MageDialog {
private void loadData(){ private void loadData(){
// load data to datamodel after filter or on startup // load data to datamodel after filter or on startup
String filter = choice.getSearchText(); String filter = choice.getSearchText();
if (filter == null){ filter = ""; } if (filter == null){ filter = ""; }
filter = filter.toLowerCase(); filter = filter.toLowerCase();
this.dataModel.clear(); this.dataModel.clear();
this.m_dataModel.clear();
for(KeyValueItem item: this.allItems){ for(KeyValueItem item: this.allItems){
if(!choice.isSearchEnabled() || item.Value.toLowerCase().contains(filter)){ if(!choice.isSearchEnabled() || item.Value.toLowerCase().contains(filter)){
this.dataModel.addElement(item); this.dataModel.addElement(item);
this.m_dataModel.addElement(item.getObjectValue());
} }
} }
} }
@ -248,7 +294,9 @@ public class PickChoiceDialog extends MageDialog {
} }
private void doChoose(){ private void doChoose(){
if(setChoice()){ if((tList != null)||(setChoice())){
this.m_dataModel.clear();
restoreData(this.m_dataModel);
this.hideDialog(); this.hideDialog();
} }
} }
@ -261,11 +309,33 @@ public class PickChoiceDialog extends MageDialog {
/** /**
* Creates new form PickChoiceDialog * Creates new form PickChoiceDialog
* @param list
*/ */
public PickChoiceDialog() { public PickChoiceDialog(CheckBoxList list) {
initComponents(); initComponents();
tList=list;
this.listChoices.setModel(dataModel); this.listChoices.setModel(dataModel);
this.setModal(true); this.setModal(true);
if(tList != null)
{
this.listChoices.setVisible(false);
m_dataModel= ( CheckBoxList.CheckBoxListModel )tList.getModel();
tList.setSelectionForeground(Color.BLUE);
if(this.tList instanceof javax.swing.JList){
setFocus(tList);
}
}
}
/**
* Creates new form PickChoiceDialog
*/
public PickChoiceDialog() {
this(null);
} }
public boolean setChoice() { public boolean setChoice() {
@ -294,19 +364,31 @@ public class PickChoiceDialog extends MageDialog {
{ {
private final String Key; private final String Key;
private final String Value; private final String Value;
private final CheckBoxList.CheckBoxListItem objectValue;
public KeyValueItem(String value, String label) {
public KeyValueItem(String value) {
this(value,null,null);
}
public KeyValueItem(String value, String label) {
this(value,label,null);
}
public KeyValueItem(String value, String label,CheckBoxList.CheckBoxListItem object) {
this.Key = value; this.Key = value;
this.Value = label; this.Value = label;
this.objectValue = object;
} }
public String getKey() { public String getKey() {
return this.Key; return this.Key;
} }
public String getValue() { public String getValue() {
return this.Value; return this.Value;
} }
public Object getObjectValue(){
return (CheckBoxList.CheckBoxListItem)this.objectValue;
}
@Override @Override
public String toString() { public String toString() {
@ -334,6 +416,7 @@ public class PickChoiceDialog extends MageDialog {
panelCommands = new javax.swing.JPanel(); panelCommands = new javax.swing.JPanel();
btOK = new javax.swing.JButton(); btOK = new javax.swing.JButton();
btCancel = new javax.swing.JButton(); btCancel = new javax.swing.JButton();
btClear = new javax.swing.JButton();
labelMessage.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); labelMessage.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelMessage.setText("<html><div style='text-align: center;'>example long message example long message example long message example long message example long message</div></html>"); labelMessage.setText("<html><div style='text-align: center;'>example long message example long message example long message example long message example long message</div></html>");
@ -348,17 +431,17 @@ public class PickChoiceDialog extends MageDialog {
panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelHeaderLayout.createSequentialGroup() .addGroup(panelHeaderLayout.createSequentialGroup()
.addGroup(panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelMessage, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 210, Short.MAX_VALUE) .addComponent(labelMessage, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addComponent(labelSubMessage, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 210, Short.MAX_VALUE)) .addComponent(labelSubMessage, javax.swing.GroupLayout.Alignment.TRAILING))
.addGap(0, 0, 0)) .addGap(0, 0, 0))
); );
panelHeaderLayout.setVerticalGroup( panelHeaderLayout.setVerticalGroup(
panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelHeaderLayout.createSequentialGroup() .addGroup(panelHeaderLayout.createSequentialGroup()
.addGap(0, 0, 0) .addGap(0, 0, Short.MAX_VALUE)
.addComponent(labelMessage) .addComponent(labelMessage)
.addGap(0, 0, 0) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(labelSubMessage)) .addComponent(labelSubMessage, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE))
); );
labelSearch.setText("Search:"); labelSearch.setText("Search:");
@ -407,30 +490,39 @@ public class PickChoiceDialog extends MageDialog {
} }
}); });
btClear.setText("Clear");
btClear.setMinimumSize(new java.awt.Dimension(30, 25));
btClear.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btClearActionPerformed(evt);
}
});
javax.swing.GroupLayout panelCommandsLayout = new javax.swing.GroupLayout(panelCommands); javax.swing.GroupLayout panelCommandsLayout = new javax.swing.GroupLayout(panelCommands);
panelCommands.setLayout(panelCommandsLayout); panelCommands.setLayout(panelCommandsLayout);
panelCommandsLayout.setHorizontalGroup( panelCommandsLayout.setHorizontalGroup(
panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelCommandsLayout.createSequentialGroup() .addGroup(panelCommandsLayout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(btClear, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btOK) .addComponent(btOK)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(btCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap()) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
); );
panelCommandsLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btCancel, btOK});
panelCommandsLayout.setVerticalGroup( panelCommandsLayout.setVerticalGroup(
panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelCommandsLayout.createSequentialGroup() .addGroup(panelCommandsLayout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addGroup(panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btCancel) .addComponent(btCancel)
.addComponent(btOK)) .addComponent(btOK)
.addComponent(btClear, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap()) .addContainerGap())
); );
getRootPane().setDefaultButton(btOK);
getRootPane().setDefaultButton(btOK); getRootPane().setDefaultButton(btOK);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
@ -454,7 +546,7 @@ public class PickChoiceDialog extends MageDialog {
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panelSearch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(panelSearch, 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(scrollList, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE) .addComponent(scrollList, javax.swing.GroupLayout.DEFAULT_SIZE, 240, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panelCommands, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(panelCommands, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap()) .addContainerGap())
@ -478,8 +570,16 @@ public class PickChoiceDialog extends MageDialog {
doCancel(); doCancel();
}//GEN-LAST:event_closeDialog }//GEN-LAST:event_closeDialog
private void btClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btClearActionPerformed
// TODO add your handling code here:
this.tList.uncheckAll();
//this.tList.repaint();
scrollList.repaint();
}//GEN-LAST:event_btClearActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables // Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btCancel; private javax.swing.JButton btCancel;
private javax.swing.JButton btClear;
private javax.swing.JButton btOK; private javax.swing.JButton btOK;
private javax.swing.JTextField editSearch; private javax.swing.JTextField editSearch;
private javax.swing.JLabel labelMessage; private javax.swing.JLabel labelMessage;

View file

@ -1,206 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.9" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JInternalFrameFormInfo">
<SyntheticProperties>
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
</SyntheticProperties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="1" attributes="0">
<Component id="scrollList" alignment="1" max="32767" attributes="0"/>
<Component id="panelCommands" alignment="0" max="32767" attributes="0"/>
<Component id="panelHeader" alignment="0" max="32767" attributes="0"/>
<Component id="panelSearch" alignment="1" max="32767" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<EmptySpace min="-2" max="-2" attributes="0"/>
<Component id="panelHeader" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="panelSearch" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="scrollList" min="-2" pref="246" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="panelCommands" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Container class="javax.swing.JPanel" name="panelHeader">
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="labelMessage" alignment="1" pref="210" max="32767" attributes="0"/>
<Component id="labelSubMessage" alignment="1" pref="210" max="32767" attributes="0"/>
</Group>
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
<Component id="labelMessage" max="32767" attributes="0"/>
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
<Component id="labelSubMessage" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JLabel" name="labelMessage">
<Properties>
<Property name="horizontalAlignment" type="int" value="0"/>
<Property name="text" type="java.lang.String" value="&lt;html&gt;&lt;div style=&apos;text-align: center;&apos;&gt;example long message example long message example long message example long message example long message&lt;/div&gt;&lt;/html&gt;"/>
</Properties>
</Component>
<Component class="javax.swing.JLabel" name="labelSubMessage">
<Properties>
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
<FontInfo relative="true">
<Font bold="true" component="labelSubMessage" italic="true" property="font" relativeSize="true" size="0"/>
</FontInfo>
</Property>
<Property name="horizontalAlignment" type="int" value="0"/>
<Property name="text" type="java.lang.String" value="&lt;html&gt;&lt;div style=&apos;text-align: center;&apos;&gt;example long message example long&lt;/div&gt;&lt;/html&gt;"/>
</Properties>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="panelSearch">
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
<Component id="labelSearch" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="editSearch" max="32767" attributes="0"/>
<EmptySpace min="0" pref="0" max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="labelSearch" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="editSearch" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace min="-2" pref="3" max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JLabel" name="labelSearch">
<Properties>
<Property name="text" type="java.lang.String" value="Search:"/>
</Properties>
</Component>
<Component class="javax.swing.JTextField" name="editSearch">
<Properties>
<Property name="text" type="java.lang.String" value="sample search text"/>
</Properties>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JScrollPane" name="scrollList">
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JList" name="listChoices">
<Properties>
<Property name="model" type="javax.swing.ListModel" editor="org.netbeans.modules.form.editors2.ListModelEditor">
<StringArray count="3">
<StringItem index="0" value="item1"/>
<StringItem index="1" value="item2"/>
<StringItem index="2" value="item3"/>
</StringArray>
</Property>
</Properties>
<AuxValues>
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value=""/>
</AuxValues>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="panelCommands">
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" attributes="0">
<EmptySpace max="32767" attributes="0"/>
<Component id="btOK" linkSize="3" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="btCancel" linkSize="3" min="-2" pref="70" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="32767" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="btCancel" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="btOK" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JButton" name="btOK">
<Properties>
<Property name="text" type="java.lang.String" value="Choose"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btOKActionPerformed"/>
</Events>
<AuxValues>
<AuxValue name="JavaCodeGenerator_AddingCodePost" type="java.lang.String" value="getRootPane().setDefaultButton(btOK);"/>
</AuxValues>
</Component>
<Component class="javax.swing.JButton" name="btCancel">
<Properties>
<Property name="text" type="java.lang.String" value="Cancel"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="btCancelActionPerformed"/>
</Events>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Form>

View file

@ -1,654 +0,0 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package mage.client.dialog;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.*;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.DefaultListModel;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
//import javax.swing.JList;
import javax.swing.KeyStroke;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import mage.choices.Choice;
import mage.client.MageFrame;
import mage.client.util.SettingsManager;
import mage.client.util.gui.GuiDisplayUtil;
import mage.client.util.gui.MageDialogState;
import org.apache.log4j.helpers.LogLog;
import mage.client.dialog.CheckBoxList;
/**
*
* @author JayDi85
*/
public class PickChoiceDialog_1<T> extends MageDialog {
Choice choice;
ArrayList<KeyValueItem> allItems = new ArrayList<>();
//ArrayList<?> allItems = new ArrayList<>();
DefaultListModel<KeyValueItem> dataModel =new DefaultListModel();
CheckBoxList.CheckBoxListModel m_dataModel;
CheckBoxList tList;
T tListChoices;
final private static String HTML_TEMPLATE = "<html><div style='text-align: center;'>%s</div></html>";
public void setList(T t) { this.tList = (CheckBoxList)t; }
public T getList() { return (T)tList; }
private void setFocus(T obj){
//((JList)obj).setModel(dataModel);
if (!(obj instanceof java.awt.Component)) {
throw new IllegalArgumentException("Must be a java.awt.Component!");
}
this.scrollList.setViewportView((java.awt.Component)obj);
}
private javax.swing.JList castAsJList(Object anObject){
return ((javax.swing.JList)anObject);
}
private javax.swing.JList get_a_Jlist_from_ScrollListView(){
return ((javax.swing.JList)this.scrollList.getViewport().getView());
}
private void backupData(Object model){
KeyValueItem item;
int indexInTList;
String name;
int maxLenght = this.allItems.size();//(((CheckBoxList.CheckBoxListModel)model).size());
for(int index=0;index < maxLenght;index++){
item= this.allItems.get(index);
name=item.getKey();//((CheckBoxList.CheckBoxListModel)model).getElementAt(index).toString();
indexInTList = ((CheckBoxList.CheckBoxListModel)model).indexOf(item.getKey());
if(indexInTList>=0){
//if(item.getKey().equals(((CheckBoxList.CheckBoxListModel)model).get(index).toString())){
if( !(item.getObjectValue().equals(((CheckBoxList.CheckBoxListModel)model).getElementAt(indexInTList)))){
LogLog.warn(String.format("%s change",((CheckBoxList.CheckBoxListModel)model).getElementAt(indexInTList).toString()));
//this.allItems.get(indexInTList)
}
//}
}
}
}
private void restoreData(Object dataFrom){
/* KeyValueItem item;
int maxLenght = this.allItems.size();//((CheckBoxList.CheckBoxListModel)dataFrom).size());
for(int index=0;index < maxLenght;index++){
item= this.allItems.get(index);
if(item.getKey().equals(((CheckBoxList.CheckBoxListModel)dataFrom).get(index).toString())){
if( !(item.getObjectValue().equals(((CheckBoxList.CheckBoxListModel)dataFrom).getElementAt(index)))){
LogLog.warn(String.format("%s change",((CheckBoxList.CheckBoxListModel)dataFrom).getElementAt(index).toString()));
}
}
}
*/
for(KeyValueItem item: this.allItems){
((CheckBoxList.CheckBoxListModel)dataFrom).addElement(item.getObjectValue());
}
}
public void showDialog(Choice choice) {
showDialog(choice, null, null, null);
}
public void showDialog(Choice choice, String startSelectionValue) {
showDialog(choice, null, null, startSelectionValue);
}
public void showDialog(Choice choice, UUID objectId, MageDialogState mageDialogState) {
showDialog(choice, objectId, mageDialogState, null);
}
public void showDialog(Choice choice, UUID objectId, MageDialogState mageDialogState, String startSelectionValue) {
this.choice = choice;
setLabelText(this.labelMessage, choice.getMessage());
setLabelText(this.labelSubMessage, choice.getSubMessage());
btCancel.setEnabled(!choice.isRequired());
// 2 modes: string or key-values
// sore data in allItems for inremental filtering
// http://logicbig.com/tutorials/core-java-tutorial/swing/list-filter/
this.allItems.clear();
KeyValueItem tempKeyValue;
int indexInTList;
if (choice.isKeyChoice()){
for (Map.Entry<String, String> entry: choice.getKeyChoices().entrySet()) {
if(tList != null){
/*for(int index=0;index<this.allItems.size();index++)
{
}*/
indexInTList = m_dataModel.indexOf(entry.getKey());
tempKeyValue=new KeyValueItem(entry.getKey(), entry.getValue(),(CheckBoxList.CheckBoxListItem) this.tList.getModel().getElementAt(indexInTList));
}
else{
tempKeyValue=new KeyValueItem(entry.getKey(), entry.getValue());
}
this.allItems.add(tempKeyValue);
}
} else {
for (String value: choice.getChoices()){
if(tList != null){
indexInTList = m_dataModel.indexOf(value);
tempKeyValue=new KeyValueItem(value, value,(CheckBoxList.CheckBoxListItem) tList.getModel().getElementAt(indexInTList));
}
else{
tempKeyValue=new KeyValueItem(value, value);
}
this.allItems.add(tempKeyValue);
}
}
// sorting
if(choice.isSortEnabled()){
Collections.sort(this.allItems, new Comparator<KeyValueItem>() {
@Override
public int compare(KeyValueItem o1, KeyValueItem o2) {
Integer n1 = choice.getSortData().get(o1.Key);
Integer n2 = choice.getSortData().get(o2.Key);
return n1.compareTo(n2);
}
});
}
// search
if(choice.isSearchEnabled())
{
panelSearch.setVisible(true);
this.editSearch.setText(choice.getSearchText());
}else{
panelSearch.setVisible(false);
this.editSearch.setText("");
}
// listeners for inremental filtering
editSearch.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
choice.setSearchText(editSearch.getText());
loadData();
}
@Override
public void removeUpdate(DocumentEvent e) {
choice.setSearchText(editSearch.getText());
loadData();
}
@Override
public void changedUpdate(DocumentEvent e) {
choice.setSearchText(editSearch.getText());
loadData();
}
});
// listeners for select up and down without edit focus lost
editSearch.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
//System.out.println("types");
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_UP){
doPrevSelect();
}else if(e.getKeyCode() == KeyEvent.VK_DOWN){
doNextSelect();
}
}
@Override
public void keyReleased(KeyEvent e) {
//System.out.println("released");
}
});
// listeners double click choose
listChoices.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(e.getClickCount() == 2){
doChoose();
}
}
});
// listeners for ESC close
if(!choice.isRequired()){
String cancelName = "cancel";
InputMap inputMap = getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), cancelName);
ActionMap actionMap = getRootPane().getActionMap();
actionMap.put(cancelName, new AbstractAction() {
public void actionPerformed(ActionEvent e) {
doCancel();
}
});
}
// window settings
if (this.isModal()){
MageFrame.getDesktop().add(this, JLayeredPane.MODAL_LAYER);
}else{
MageFrame.getDesktop().add(this, JLayeredPane.PALETTE_LAYER);
}
if (mageDialogState != null) {
mageDialogState.setStateToDialog(this);
} else {
Point centered = SettingsManager.instance.getComponentPosition(getWidth(), getHeight());
this.setLocation(centered.x, centered.y);
GuiDisplayUtil.keepComponentInsideScreen(centered.x, centered.y, this);
}
// final load
loadData();
// start selection
if((startSelectionValue != null)){
int selectIndex = -1;
for(int i = 0; i < this.get_a_Jlist_from_ScrollListView().getModel().getSize(); i++){
String elementOfList = this.get_a_Jlist_from_ScrollListView().getModel().getElementAt(i).toString();
if (elementOfList.equals(startSelectionValue)){
selectIndex = i;
break;
}
}
if(selectIndex >= 0){
this.get_a_Jlist_from_ScrollListView().setSelectedIndex(selectIndex);
this.get_a_Jlist_from_ScrollListView().ensureIndexIsVisible(selectIndex);
}
}
this.setVisible(true);
}
public void setWindowSize(int width, int heigth){
this.setSize(new Dimension(width, heigth));
}
private void loadData(){
// load data to datamodel after filter or on startup
String filter = choice.getSearchText();
if (filter == null){ filter = ""; }
filter = filter.toLowerCase();
backupData(this.m_dataModel);
this.dataModel.clear();this.m_dataModel.clear();
for(KeyValueItem item: this.allItems){
if(!choice.isSearchEnabled() || item.Value.toLowerCase().contains(filter)){
this.dataModel.addElement(item);this.m_dataModel.addElement(item.getObjectValue());
}
}
if(this.tList!=null){
//((javax.swing.JList)this.tList).setModel(dataModel);
//new CheckBoxListModel();
//((javax.swing.JList)this.scrollList.getViewport().getView()).setModel(dataModel);setListData(dataModel.toArray());
}
}
private void setLabelText(JLabel label, String text){
if ((text != null) && !text.equals("")){
label.setText(String.format(HTML_TEMPLATE, text));
label.setVisible(true);
}else{
label.setText("");
label.setVisible(false);
}
}
private void doNextSelect(){
int newSel = this.listChoices.getSelectedIndex() + 1;
int maxSel = this.listChoices.getModel().getSize() - 1;
if(newSel <= maxSel){
this.listChoices.setSelectedIndex(newSel);
this.listChoices.ensureIndexIsVisible(newSel);
}
}
private void doPrevSelect(){
int newSel = this.listChoices.getSelectedIndex() - 1;
if(newSel >= 0){
this.listChoices.setSelectedIndex(newSel);
this.listChoices.ensureIndexIsVisible(newSel);
}
}
private void doChoose(){
if((tList != null)||(setChoice())){
this.m_dataModel.clear();
restoreData(this.m_dataModel);
this.hideDialog();
}
}
private void doCancel(){
this.listChoices.clearSelection();
this.choice.clearChoice();
hideDialog();
}
/**
* Creates new form PickChoiceDialog_1
* @param list
*/
public PickChoiceDialog_1(CheckBoxList list) {
this();
setList((T)list);
//dataModel = ((javax.swing.JList)tList).getModel();
this.listChoices.setVisible(false);
//tList.getModel()
//this.tListChoices = new list.getClass();
m_dataModel= ( CheckBoxList.CheckBoxListModel )tList.getModel();
if(this.tList instanceof javax.swing.JList){
setFocus((T)tList);
//((javax.swing.JList)tList).setModel(dataModel);
}
/* else if(tList instanceof javax.swing.JComboBox){
((javax.swing.JComboBox)tList).setModel(dataModel);
}*/
/*if((this.panelListChoices.getViewport().getView())!=null){
//((T)tList.setListData(dataModel.toArray());
}*/
/* if ((tList instanceof javax.swing.JList)) {
//throw new IllegalArgumentException("Must be a java.awt.Component!");
((javax.swing.JList)tList).setModel(((javax.swing.ListModel)dataModel));
} */
}
public PickChoiceDialog_1() {
initComponents();
tList=null;
this.listChoices.setModel(dataModel);
/*if((this.scrollList.getViewport().getView())!=null){
//((CheckBoxList)this.panelListChoices.getViewport().getView()).setListData(dataModel.toArray());
((javax.swing.JList)this.scrollList.getViewport().getView()).setListData(dataModel.toArray());
}*/
//test.setModel(dataModel);
//item.setModel(dataModel);
this.setModal(true);
}
public boolean setChoice() {
KeyValueItem item = (KeyValueItem)this.listChoices.getSelectedValue();
// auto select one item (after incemental filtering)
if((item == null) && (this.listChoices.getModel().getSize() == 1)){
this.listChoices.setSelectedIndex(0);
item = (KeyValueItem)this.listChoices.getSelectedValue();
}
if(item != null){
if(choice.isKeyChoice()){
choice.setChoiceByKey(item.getKey());
}else{
choice.setChoice(item.getKey());
}
return true;
}else{
choice.clearChoice();
return false;
}
}
class KeyValueItem
{
private /*final*/ String Key;
private final String Value;
private final CheckBoxList.CheckBoxListItem objectValue;
public KeyValueItem(String value) {
this.Key = value;
this.Value = null;
this.objectValue = null;
}
public KeyValueItem(String value, String label) {
this.Key = value;
this.Value = label;
this.objectValue = null;
}
public KeyValueItem(String value, String label,CheckBoxList.CheckBoxListItem object) {
this.Key = value;
this.Value = label;
this.objectValue = object;
}
public String getKey() {
return this.Key;
}
public void setKey(String value) {
this.Key= value;
}
public String getValue() {
return this.Value;
}
public Object getObjectValue(){
return (CheckBoxList.CheckBoxListItem)this.objectValue;
}
@Override
public String toString() {
return this.Value;
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
panelHeader = new javax.swing.JPanel();
labelMessage = new javax.swing.JLabel();
labelSubMessage = new javax.swing.JLabel();
panelSearch = new javax.swing.JPanel();
labelSearch = new javax.swing.JLabel();
editSearch = new javax.swing.JTextField();
scrollList = new javax.swing.JScrollPane();
listChoices = new javax.swing.JList();
panelCommands = new javax.swing.JPanel();
btOK = new javax.swing.JButton();
btCancel = new javax.swing.JButton();
labelMessage.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelMessage.setText("<html><div style='text-align: center;'>example long message example long message example long message example long message example long message</div></html>");
labelSubMessage.setFont(labelSubMessage.getFont().deriveFont((labelSubMessage.getFont().getStyle() | java.awt.Font.ITALIC) | java.awt.Font.BOLD));
labelSubMessage.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelSubMessage.setText("<html><div style='text-align: center;'>example long message example long</div></html>");
javax.swing.GroupLayout panelHeaderLayout = new javax.swing.GroupLayout(panelHeader);
panelHeader.setLayout(panelHeaderLayout);
panelHeaderLayout.setHorizontalGroup(
panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelHeaderLayout.createSequentialGroup()
.addGroup(panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelMessage, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 210, Short.MAX_VALUE)
.addComponent(labelSubMessage, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 210, Short.MAX_VALUE))
.addGap(0, 0, 0))
);
panelHeaderLayout.setVerticalGroup(
panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelHeaderLayout.createSequentialGroup()
.addGap(0, 0, 0)
.addComponent(labelMessage)
.addGap(0, 0, 0)
.addComponent(labelSubMessage))
);
labelSearch.setText("Search:");
editSearch.setText("sample search text");
javax.swing.GroupLayout panelSearchLayout = new javax.swing.GroupLayout(panelSearch);
panelSearch.setLayout(panelSearchLayout);
panelSearchLayout.setHorizontalGroup(
panelSearchLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelSearchLayout.createSequentialGroup()
.addGap(0, 0, 0)
.addComponent(labelSearch)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(editSearch)
.addGap(0, 0, 0))
);
panelSearchLayout.setVerticalGroup(
panelSearchLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelSearchLayout.createSequentialGroup()
.addGap(3, 3, 3)
.addGroup(panelSearchLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelSearch)
.addComponent(editSearch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(3, 3, 3))
);
listChoices.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "item1", "item2", "item3" };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; }
});
scrollList.setViewportView(listChoices);
btOK.setText("Choose");
btOK.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btOKActionPerformed(evt);
}
});
btCancel.setText("Cancel");
btCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btCancelActionPerformed(evt);
}
});
javax.swing.GroupLayout panelCommandsLayout = new javax.swing.GroupLayout(panelCommands);
panelCommands.setLayout(panelCommandsLayout);
panelCommandsLayout.setHorizontalGroup(
panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelCommandsLayout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(btOK)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
panelCommandsLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btCancel, btOK});
panelCommandsLayout.setVerticalGroup(
panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelCommandsLayout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(panelCommandsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btCancel)
.addComponent(btOK))
.addContainerGap())
);
getRootPane().setDefaultButton(btOK);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(scrollList)
.addComponent(panelCommands, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(panelHeader, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(panelSearch, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(panelHeader, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panelSearch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(scrollList, javax.swing.GroupLayout.PREFERRED_SIZE, 246, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panelCommands, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void btOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btOKActionPerformed
doChoose();
}//GEN-LAST:event_btOKActionPerformed
private void btCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCancelActionPerformed
doCancel();
}//GEN-LAST:event_btCancelActionPerformed
/**
* Closes the dialog
*/
private void closeDialog(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_closeDialog
doCancel();
}//GEN-LAST:event_closeDialog
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btCancel;
private javax.swing.JButton btOK;
private javax.swing.JTextField editSearch;
private javax.swing.JLabel labelMessage;
private javax.swing.JLabel labelSearch;
private javax.swing.JLabel labelSubMessage;
private javax.swing.JList listChoices;
private javax.swing.JPanel panelCommands;
private javax.swing.JPanel panelHeader;
private javax.swing.JPanel panelSearch;
private javax.swing.JScrollPane scrollList;
// End of variables declaration//GEN-END:variables
}

View file

@ -3,54 +3,60 @@ package mage.client.util.gui;
import mage.choices.ChoiceImpl; import mage.choices.ChoiceImpl;
import mage.client.dialog.PickChoiceDialog; import mage.client.dialog.PickChoiceDialog;
//import java.util.ArrayList;
import mage.client.dialog.CheckBoxList;
import javax.swing.*; import javax.swing.*;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
//import javax.swing.text.Position;
//import org.apache.log4j.helpers.LogLog;
/** /**
* *
* @author JayDi85 * @author JayDi85
*/ */
public class FastSearchUtil { public class FastSearchUtil {
public static String DEFAULT_EXPANSION_SEARCH_MESSAGE = "Select set(s) or expansion(s)";
public static String DEFAULT_EXPANSION_SEARCH_MESSAGE = "Select set or expansion"; public static String DEFAULT_EXPANSION_TOOLTIP_MESSAGE = "Fast search set(s) or expansion(s)";
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 * Show fast choice modal dialog with incremental searching for any string CheckBoxList components
* @param combo combobox control with default data model * @param combo CheckBoxList control with default data model
* @param chooseMessage caption message for dialog * @param chooseMessage caption message for dialog
*/ */
public static void showFastSearchForStringComboBox(JComboBox combo, String chooseMessage){ public static void showFastSearchForStringComboBox(CheckBoxList combo, String chooseMessage){
// fast search/choice dialog for string combobox // fast search/choice dialog for string combobox
mage.choices.Choice choice = new ChoiceImpl(false); mage.choices.Choice choice = new ChoiceImpl(false);
// collect data from expansion combobox (String) // collect data from expansion combobox (String)
DefaultComboBoxModel comboModel = (DefaultComboBoxModel)combo.getModel(); DefaultListModel comboModel = (DefaultListModel)combo.getModel();
Map<String, String> choiceItems = new HashMap<>(comboModel.getSize()); Map<String, String> choiceItems = new HashMap<>(comboModel.getSize());
Map<String, Integer> choiceSorting = new HashMap<>(comboModel.getSize()); Map<String, Integer> choiceSorting = new HashMap<>(comboModel.getSize());
String item; String item;
for(int i = 0; i < comboModel.getSize(); i++){ for(int i = 0; i < comboModel.size(); i++){
item = comboModel.getElementAt(i).toString(); item = comboModel.getElementAt(i).toString();
choiceItems.put(item, item); choiceItems.put(item, item);
choiceSorting.put(item, i); // need so sorting choiceSorting.put(item, i); // need so sorting
} }
choice.setKeyChoices(choiceItems); choice.setKeyChoices(choiceItems);
choice.setSortData(choiceSorting); choice.setSortData(choiceSorting);
choice.setMessage(chooseMessage); choice.setMessage(chooseMessage);
// current selection value restore // current selection value restore
String needSelectValue; String needSelectValue;
needSelectValue = comboModel.getSelectedItem().toString(); needSelectValue = comboModel.firstElement().toString();
// ask for new value // ask for new value
PickChoiceDialog dlg = new PickChoiceDialog(); PickChoiceDialog dlg = new PickChoiceDialog(combo);
dlg.setWindowSize(300, 500); dlg.setWindowSize(300, 500);
dlg.showDialog(choice, needSelectValue); dlg.showDialog(choice, needSelectValue);
if(choice.isChosen()){ if(choice.isChosen()){
item = choice.getChoiceKey(); item = choice.getChoiceKey();
// compatible select for object's models (use setSelectedIndex instead setSelectedObject) // compatible select for object's models (use setSelectedIndex instead setSelectedObject)
@ -60,5 +66,14 @@ public class FastSearchUtil {
} }
} }
} }
/*
int[] choiseValue=combo.getCheckedIndices();
ListModel x= combo.getModel();
for(int itemIndex: choiseValue){
LogLog.warn(String.format("%d:%s",itemIndex,x.getElementAt(itemIndex).toString()));
}
*/
} }
} }

View file

@ -1,86 +0,0 @@
package mage.client.util.gui;
import java.util.ArrayList;
import mage.choices.ChoiceImpl;
import mage.client.dialog.PickChoiceDialog_1;
import javax.swing.*;
import java.util.HashMap;
import java.util.Map;
import mage.client.dialog.CheckBoxList;
//import org.apache.log4j.helpers.LogLog;
/**
*
* @author JayDi85
*/
public class FastSearchUtil_1 {
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
* @return The list of all item
*/
public static CheckBoxList showFastSearchForStringComboBox(JComboBox combo, String chooseMessage){
// fast search/choice dialog for string combobox
CheckBoxList langList= new CheckBoxList();
java.util.List<String> myList = new ArrayList<>();
mage.choices.Choice choice = new ChoiceImpl(false);
// collect data from expansion combobox (String)
DefaultComboBoxModel comboModel = (DefaultComboBoxModel)combo.getModel();
Map<String, String> choiceItems = new HashMap<>(comboModel.getSize());
Map<String, Integer> choiceSorting = new HashMap<>(comboModel.getSize());
String item;
for(int i = 0; i < comboModel.getSize(); i++){
item = comboModel.getElementAt(i).toString();
myList.add(item);
choiceItems.put(item, item);
choiceSorting.put(item, i); // need so sorting
}
langList.setListData(myList.toArray());
langList.setChecked(0, true);
langList.setChecked(3, true);
choice.setKeyChoices(choiceItems);
choice.setSortData(choiceSorting);
choice.setMessage(chooseMessage);
// current selection value restore
String needSelectValue;
needSelectValue = comboModel.getSelectedItem().toString();
// ask for new value
PickChoiceDialog_1<CheckBoxList> dlg = new PickChoiceDialog_1(langList);
dlg.setWindowSize(300, 500);
//dlg.set(langList.);
dlg.showDialog(choice, needSelectValue);
/*int[] choiseValue=langList.getCheckedIndices();
LogLog.warn("selected:");
for(int itemIndex: choiseValue){
LogLog.warn(String.format("%d",itemIndex));
}*/
if(choice.isChosen()){
item = choice.getChoiceKey();
// compatible select for object's models (use setSelectedIndex instead setSelectedObject)
for(int i = 0; i < comboModel.getSize(); i++){
if(comboModel.getElementAt(i).toString().equals(item)){
combo.setSelectedIndex(i);
}
}
}
return langList;
}
}