From d782b69f0f6cd328cb7891d68773ac2346840e50 Mon Sep 17 00:00:00 2001 From: Salco Date: Mon, 23 Apr 2018 09:58:28 -0400 Subject: [PATCH] rename my PickChoiceDialog to PickCheckBoxDialog and bring back the correct one --- .../client/dialog/PickCheckBoxDialog.form | 223 +++++++ .../client/dialog/PickCheckBoxDialog.java | 594 ++++++++++++++++++ .../mage/client/dialog/PickChoiceDialog.form | 41 +- .../mage/client/dialog/PickChoiceDialog.java | 164 +---- 4 files changed, 861 insertions(+), 161 deletions(-) create mode 100644 Mage.Client/src/main/java/mage/client/dialog/PickCheckBoxDialog.form create mode 100644 Mage.Client/src/main/java/mage/client/dialog/PickCheckBoxDialog.java diff --git a/Mage.Client/src/main/java/mage/client/dialog/PickCheckBoxDialog.form b/Mage.Client/src/main/java/mage/client/dialog/PickCheckBoxDialog.form new file mode 100644 index 0000000000..de1e7b9612 --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/dialog/PickCheckBoxDialog.form @@ -0,0 +1,223 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Mage.Client/src/main/java/mage/client/dialog/PickCheckBoxDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PickCheckBoxDialog.java new file mode 100644 index 0000000000..a9d86c2044 --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/dialog/PickCheckBoxDialog.java @@ -0,0 +1,594 @@ +/* + * 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.Color; +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.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; + +/** + * + * @author JayDi85 + * @author Salco + */ + +public class PickCheckBoxDialog extends MageDialog { + + Choice choice; + ArrayList allItems = new ArrayList<>(); + DefaultListModel dataModel = new DefaultListModel(); + CheckBoxList.CheckBoxListModel m_dataModel; + + CheckBoxList tList; + + final private static String HTML_TEMPLATE = "
%s
"; + + 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) { + 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; + KeyValueItem tempKeyValue; + int indexInTList; + + 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(); + if (choice.isKeyChoice()){ + for (Map.Entry entry: choice.getKeyChoices().entrySet()) { + 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 { + 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() { + @Override + public int compare(KeyValueItem o1, KeyValueItem o2) { + Integer n1 = choice.getSortData().get(o1.getKey()); + Integer n2 = choice.getSortData().get(o2.getKey()); + 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)){ + javax.swing.JList currentlistChoices;// = new javax.swing.JList(); + currentlistChoices=this.get_a_Jlist_from_ScrollListView(); + /*currentlistChoices = this.listChoices;*/ + int selectIndex = -1; + for(int i = 0; i < this.listChoices.getModel().getSize(); i++){ + //KeyValueItem listItem = (KeyValueItem)currentlistChoices.getModel().getElementAt(i); + String elementOfList = currentlistChoices.getModel().getElementAt(i).toString(); + if (elementOfList.equals(startSelectionValue)){ + selectIndex = i; + break; + } + } + + if(selectIndex >= 0){ + // currentlistChoices=this.get_a_Jlist_from_ScrollListView(); + /*currentlistChoices = this.listChoices;*/ + currentlistChoices.setSelectedIndex(selectIndex); + currentlistChoices.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(); + + 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()); + } + } + } + + 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 + * @param list + */ + public PickCheckBoxDialog(CheckBoxList list) { + initComponents(); + tList=list; + + this.listChoices.setModel(dataModel); + 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 PickCheckBoxDialog() { + this(null); + } + + 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(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.Value = label; + this.objectValue = object; + } + + public String getKey() { + return this.Key; + } + + 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") + // //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(); + btClear = new javax.swing.JButton(); + + labelMessage.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + labelMessage.setText("
example long message example long message example long message example long message example long message
"); + + labelSubMessage.setFont(labelSubMessage.getFont().deriveFont((labelSubMessage.getFont().getStyle() | java.awt.Font.ITALIC) | java.awt.Font.BOLD)); + labelSubMessage.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + labelSubMessage.setText("
example long message example long
"); + + 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.PREFERRED_SIZE, 0, Short.MAX_VALUE) + .addComponent(labelSubMessage, javax.swing.GroupLayout.Alignment.TRAILING)) + .addGap(0, 0, 0)) + ); + panelHeaderLayout.setVerticalGroup( + panelHeaderLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(panelHeaderLayout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(labelMessage) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(labelSubMessage, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)) + ); + + 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); + } + }); + + 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); + 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(btClear, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btOK) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + 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) + .addComponent(btClear, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) + ); + + getRootPane().setDefaultButton(btOK); + 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(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scrollList, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(panelCommands, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(panelHeader, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(panelSearch, javax.swing.GroupLayout.Alignment.TRAILING, 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.DEFAULT_SIZE, 240, Short.MAX_VALUE) + .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(); + }//
//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 + + 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 + private javax.swing.JButton btCancel; + private javax.swing.JButton btClear; + 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 +} diff --git a/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.form b/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.form index de1e7b9612..8f4d4356cd 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.form @@ -39,7 +39,7 @@ - + @@ -55,8 +55,8 @@ - - + + @@ -65,10 +65,10 @@ - + - - + + @@ -158,14 +158,12 @@ - - - - - - - + + + + + @@ -176,7 +174,6 @@ - @@ -203,21 +200,7 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.java index add88fddba..9a73c93a9b 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PickChoiceDialog.java @@ -5,7 +5,6 @@ */ package mage.client.dialog; -import java.awt.Color; import java.awt.Dimension; import java.awt.Point; import java.awt.event.ActionEvent; @@ -33,7 +32,6 @@ import mage.client.util.gui.MageDialogState; /** * * @author JayDi85 - * @author Salco */ public class PickChoiceDialog extends MageDialog { @@ -41,29 +39,9 @@ public class PickChoiceDialog extends MageDialog { Choice choice; ArrayList allItems = new ArrayList<>(); DefaultListModel dataModel = new DefaultListModel(); - CheckBoxList.CheckBoxListModel m_dataModel; - - CheckBoxList tList; final private static String HTML_TEMPLATE = "
%s
"; - 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) { showDialog(choice, null, null, null); } @@ -78,9 +56,7 @@ public class PickChoiceDialog extends MageDialog { public void showDialog(Choice choice, UUID objectId, MageDialogState mageDialogState, String startSelectionValue) { this.choice = choice; - KeyValueItem tempKeyValue; - int indexInTList; - + setLabelText(this.labelMessage, choice.getMessage()); setLabelText(this.labelSubMessage, choice.getSubMessage()); @@ -92,25 +68,11 @@ public class PickChoiceDialog extends MageDialog { this.allItems.clear(); if (choice.isKeyChoice()){ for (Map.Entry entry: choice.getKeyChoices().entrySet()) { - 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); + this.allItems.add(new KeyValueItem(entry.getKey(), entry.getValue())); } } 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); + this.allItems.add(new KeyValueItem(value, value)); } } @@ -119,8 +81,8 @@ public class PickChoiceDialog extends MageDialog { Collections.sort(this.allItems, new Comparator() { @Override public int compare(KeyValueItem o1, KeyValueItem o2) { - Integer n1 = choice.getSortData().get(o1.getKey()); - Integer n2 = choice.getSortData().get(o2.getKey()); + Integer n1 = choice.getSortData().get(o1.Key); + Integer n2 = choice.getSortData().get(o2.Key); return n1.compareTo(n2); } }); @@ -222,24 +184,18 @@ public class PickChoiceDialog extends MageDialog { // start selection if((startSelectionValue != null)){ - javax.swing.JList currentlistChoices;// = new javax.swing.JList(); - currentlistChoices=this.get_a_Jlist_from_ScrollListView(); - /*currentlistChoices = this.listChoices;*/ int selectIndex = -1; for(int i = 0; i < this.listChoices.getModel().getSize(); i++){ - //KeyValueItem listItem = (KeyValueItem)currentlistChoices.getModel().getElementAt(i); - String elementOfList = currentlistChoices.getModel().getElementAt(i).toString(); - if (elementOfList.equals(startSelectionValue)){ + KeyValueItem listItem = (KeyValueItem)this.listChoices.getModel().getElementAt(i); + if (listItem.Key.equals(startSelectionValue)){ selectIndex = i; break; } } if(selectIndex >= 0){ - // currentlistChoices=this.get_a_Jlist_from_ScrollListView(); - /*currentlistChoices = this.listChoices;*/ - currentlistChoices.setSelectedIndex(selectIndex); - currentlistChoices.ensureIndexIsVisible(selectIndex); + this.listChoices.setSelectedIndex(selectIndex); + this.listChoices.ensureIndexIsVisible(selectIndex); } } @@ -252,16 +208,14 @@ public class PickChoiceDialog extends MageDialog { private void loadData(){ // load data to datamodel after filter or on startup - String filter = choice.getSearchText(); + String filter = choice.getSearchText(); if (filter == null){ filter = ""; } - filter = filter.toLowerCase(); + filter = filter.toLowerCase(Locale.ENGLISH); this.dataModel.clear(); - this.m_dataModel.clear(); for(KeyValueItem item: this.allItems){ - if(!choice.isSearchEnabled() || item.Value.toLowerCase().contains(filter)){ + if(!choice.isSearchEnabled() || item.Value.toLowerCase(Locale.ENGLISH).contains(filter)){ this.dataModel.addElement(item); - this.m_dataModel.addElement(item.getObjectValue()); } } } @@ -294,9 +248,7 @@ public class PickChoiceDialog extends MageDialog { } private void doChoose(){ - if((tList != null)||(setChoice())){ - this.m_dataModel.clear(); - restoreData(this.m_dataModel); + if(setChoice()){ this.hideDialog(); } } @@ -307,35 +259,13 @@ public class PickChoiceDialog extends MageDialog { hideDialog(); } - /** - * Creates new form PickChoiceDialog - * @param list - */ - public PickChoiceDialog(CheckBoxList list) { - initComponents(); - tList=list; - - this.listChoices.setModel(dataModel); - 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); + initComponents(); + this.listChoices.setModel(dataModel); + this.setModal(true); } public boolean setChoice() { @@ -364,31 +294,19 @@ public class PickChoiceDialog extends MageDialog { { private final String Key; private final String Value; - private final CheckBoxList.CheckBoxListItem objectValue; - - 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) { + + public KeyValueItem(String value, String label) { this.Key = value; this.Value = label; - this.objectValue = object; } public String getKey() { return this.Key; - } + } public String getValue() { return this.Value; } - - public Object getObjectValue(){ - return (CheckBoxList.CheckBoxListItem)this.objectValue; - } @Override public String toString() { @@ -416,7 +334,6 @@ public class PickChoiceDialog extends MageDialog { panelCommands = new javax.swing.JPanel(); btOK = new javax.swing.JButton(); btCancel = new javax.swing.JButton(); - btClear = new javax.swing.JButton(); labelMessage.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); labelMessage.setText("
example long message example long message example long message example long message example long message
"); @@ -431,17 +348,17 @@ public class PickChoiceDialog extends MageDialog { 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.PREFERRED_SIZE, 0, Short.MAX_VALUE) - .addComponent(labelSubMessage, javax.swing.GroupLayout.Alignment.TRAILING)) + .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, Short.MAX_VALUE) + .addGap(0, 0, 0) .addComponent(labelMessage) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(labelSubMessage, javax.swing.GroupLayout.DEFAULT_SIZE, 30, Short.MAX_VALUE)) + .addGap(0, 0, 0) + .addComponent(labelSubMessage)) ); labelSearch.setText("Search:"); @@ -490,39 +407,30 @@ 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); 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(btClear, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btOK) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .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) - .addComponent(btClear, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(btOK)) .addContainerGap()) ); - getRootPane().setDefaultButton(btOK); getRootPane().setDefaultButton(btOK); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); @@ -546,7 +454,7 @@ public class PickChoiceDialog extends MageDialog { .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.DEFAULT_SIZE, 240, Short.MAX_VALUE) + .addComponent(scrollList, javax.swing.GroupLayout.DEFAULT_SIZE, 246, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(panelCommands, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) @@ -570,16 +478,8 @@ public class PickChoiceDialog extends MageDialog { doCancel(); }//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 private javax.swing.JButton btCancel; - private javax.swing.JButton btClear; private javax.swing.JButton btOK; private javax.swing.JTextField editSearch; private javax.swing.JLabel labelMessage; @@ -591,4 +491,4 @@ public class PickChoiceDialog extends MageDialog { private javax.swing.JPanel panelSearch; private javax.swing.JScrollPane scrollList; // End of variables declaration//GEN-END:variables -} +} \ No newline at end of file