r3537 - in trunk/src/main: java/fr/ifremer/isisfish/ui/result java/fr/ifremer/isisfish/ui/simulator java/fr/ifremer/isisfish/ui/widget resources/i18n
Author: echatellier Date: 2011-11-22 15:00:17 +0100 (Tue, 22 Nov 2011) New Revision: 3537 Url: http://forge.codelutin.com/repositories/revision/isis-fish/3537 Log: #517 : Ajouter un filtrage des simulations plus simple (seulement par le nom) Added: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FilterableComboBox.java Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultUI.jaxx trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx trunk/src/main/resources/i18n/isis-fish_en_GB.properties trunk/src/main/resources/i18n/isis-fish_fr_FR.properties Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java 2011-11-21 15:30:51 UTC (rev 3536) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultHandler.java 2011-11-22 14:00:17 UTC (rev 3537) @@ -109,7 +109,7 @@ protected void initSimulationList(ResultUI resultUI) { java.util.List<String> value = SimulationStorage.getSimulationNames(); - resultUI.getSimulationComboBox().setEditable(false); + //resultUI.getSimulationComboBox().setEditable(false); StringComboModel model = new StringComboModel(value); resultUI.getSimulationComboBox().setModel(model); resultUI.getSimulationComboBox().setSelectedItem(null); Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultUI.jaxx 2011-11-21 15:30:51 UTC (rev 3536) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/result/ResultUI.jaxx 2011-11-22 14:00:17 UTC (rev 3537) @@ -37,7 +37,7 @@ <JLabel text="isisfish.result.choose.simulation"/> </cell> <cell fill="horizontal" weightx="1"> - <JComboBox id="simulationComboBox"/> + <fr.ifremer.isisfish.ui.widget.FilterableComboBox id="simulationComboBox"/> </cell> <cell> <JButton text="isisfish.result.new.window" Modified: trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2011-11-21 15:30:51 UTC (rev 3536) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2011-11-22 14:00:17 UTC (rev 3537) @@ -31,33 +31,34 @@ <import> java.util.EventObject; java.text.ParseException; - fr.ifremer.isisfish.datastore.RegionStorage; - fr.ifremer.isisfish.datastore.StorageChangeEvent; - fr.ifremer.isisfish.datastore.StorageChangeListener; - fr.ifremer.isisfish.datastore.StorageException; - fr.ifremer.isisfish.entities.Population; - fr.ifremer.isisfish.entities.Strategy; - fr.ifremer.isisfish.entities.FisheryRegion; - fr.ifremer.isisfish.ui.SimulationUI; - fr.ifremer.isisfish.ui.WelcomePanelUI; - fr.ifremer.isisfish.ui.WelcomeTabUI; - fr.ifremer.isisfish.ui.models.common.StringComboModel; - fr.ifremer.isisfish.ui.models.rule.RuleComboModel; - fr.ifremer.isisfish.ui.models.rule.RuleNamesListRenderer; - fr.ifremer.isisfish.ui.models.rule.RuleListModel; - fr.ifremer.isisfish.ui.sensitivity.FactorWizardUI; - fr.ifremer.isisfish.ui.sensitivity.SensitivityUI; - fr.ifremer.isisfish.rule.Rule; - fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher; - fr.ifremer.isisfish.simulator.launcher.SimulationService; - fr.ifremer.isisfish.simulator.launcher.SimulationJob; - fr.ifremer.isisfish.simulator.launcher.SimulationServiceListener; - fr.ifremer.isisfish.simulator.sensitivity.Factor; - org.nuiton.topia.TopiaException; - org.nuiton.topia.TopiaContext; - org.nuiton.math.matrix.MatrixND; - org.nuiton.math.matrix.gui.MatrixPanelEditor; - org.apache.commons.lang3.ArrayUtils; + fr.ifremer.isisfish.datastore.RegionStorage + fr.ifremer.isisfish.datastore.StorageChangeEvent + fr.ifremer.isisfish.datastore.StorageChangeListener + fr.ifremer.isisfish.datastore.StorageException + fr.ifremer.isisfish.entities.Population + fr.ifremer.isisfish.entities.Strategy + fr.ifremer.isisfish.entities.FisheryRegion + fr.ifremer.isisfish.ui.SimulationUI + fr.ifremer.isisfish.ui.WelcomePanelUI + fr.ifremer.isisfish.ui.WelcomeTabUI + fr.ifremer.isisfish.ui.models.common.StringComboModel + fr.ifremer.isisfish.ui.models.rule.RuleComboModel + fr.ifremer.isisfish.ui.models.rule.RuleNamesListRenderer + fr.ifremer.isisfish.ui.models.rule.RuleListModel + fr.ifremer.isisfish.ui.sensitivity.FactorWizardUI + fr.ifremer.isisfish.ui.sensitivity.SensitivityUI + fr.ifremer.isisfish.ui.widget.FilterableComboBox + fr.ifremer.isisfish.rule.Rule + fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher + fr.ifremer.isisfish.simulator.launcher.SimulationService + fr.ifremer.isisfish.simulator.launcher.SimulationJob + fr.ifremer.isisfish.simulator.launcher.SimulationServiceListener + fr.ifremer.isisfish.simulator.sensitivity.Factor + org.nuiton.topia.TopiaException + org.nuiton.topia.TopiaContext + org.nuiton.math.matrix.MatrixND + org.nuiton.math.matrix.gui.MatrixPanelEditor + org.apache.commons.lang3.ArrayUtils javax.swing.SwingUtilities javax.swing.DefaultComboBoxModel java.awt.CardLayout @@ -329,20 +330,10 @@ <JLabel text="isisfish.params.loadOldSimulation" /> </cell> <cell fill="horizontal" weightx="1.0"> - <JComboBox id="fieldSimulParamsSelect" + <FilterableComboBox id="fieldSimulParamsSelect" model='{getSimulParamsSelectModel()}' onActionPerformed='loadOldSimulation()' /> </cell> - <cell> - <JButton text="isisfish.params.filter" - id="buttonSimulParamsSelectFilter" - onActionPerformed='selectFilter()' enabled="false" /> - </cell> - <cell> - <JButton text="isisfish.params.clearFilter" - id="buttonSimulParamsSelectClearFilter" - onActionPerformed='resetFilter()' enabled="false" /> - </cell> </row> </Table> </cell> Added: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FilterableComboBox.java =================================================================== --- trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FilterableComboBox.java (rev 0) +++ trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FilterableComboBox.java 2011-11-22 14:00:17 UTC (rev 3537) @@ -0,0 +1,253 @@ +/* + * #%L + * + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Codelutin, Chatellier Eric + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +package fr.ifremer.isisfish.ui.widget; + +import static org.nuiton.i18n.I18n._; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.ComboBoxModel; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; + +import org.jdesktop.swingx.JXComboBox; +import org.jdesktop.swingx.JXTextField; +import org.nuiton.util.Resource; + +/** + * A filterable combobox using an additional text field and reset button. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class FilterableComboBox extends JPanel { + + /** serialVersionUID. */ + private static final long serialVersionUID = -6669320998140538372L; + + protected JComboBox dataBox; + protected JTextField filterField; + protected JButton resetButton; + + protected FilterComboBoxModel filterModel; + + protected List<ActionListener> actionListeners; + protected List<ItemListener> itemListeners; + + protected boolean filtering = false; + + public FilterableComboBox() { + actionListeners = new ArrayList<ActionListener>(); + itemListeners = new ArrayList<ItemListener>(); + buildLayout(); + } + + public FilterableComboBox(ComboBoxModel model) { + this(); + setModel(model); + } + + class FilterComboBoxModel extends DefaultComboBoxModel { + + /** serialVersionUID. */ + private static final long serialVersionUID = 6256289874593024153L; + + protected ComboBoxModel model; + + public FilterComboBoxModel(ComboBoxModel model) { + this.model = model; + } + + @Override + public int getSize() { + int delegateSize = model.getSize(); + int realSize = 0; + for (int i = 0; i < delegateSize; ++i) { + if (model.getElementAt(i).toString().matches(".*" + filterField.getText() + ".*")) { + realSize++; + } + } + return realSize; + } + + @Override + public Object getElementAt(int index) { + int delegateSize = model.getSize(); + int realIndex = -1; + for (int i = 0; i < delegateSize; ++i) { + Object element = model.getElementAt(i); + if (element.toString().matches(".*" + filterField.getText() + ".*")) { + realIndex++; + } + if (index == realIndex) { + return element; + } + } + return null; + } + + public void fireDataChanged() { + filtering = true; + super.fireContentsChanged(this, 0, model.getSize()); + filtering = false; + } + + + } + + class FilterDocumentListener implements DocumentListener { + @Override + public void insertUpdate(DocumentEvent e) { + updateFilter(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + updateFilter(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + updateFilter(); + } + + protected void updateFilter() { + ((FilterComboBoxModel)dataBox.getModel()).fireDataChanged(); + resetButton.setEnabled(!filterField.getText().isEmpty()); + } + } + + class FilterActionListener implements ActionListener { + /* + * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) + */ + @Override + public void actionPerformed(ActionEvent e) { + filterField.setText(""); + } + } + + class ComboBoxActionListener implements ActionListener { + /* + * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) + */ + @Override + public void actionPerformed(ActionEvent e) { + if (!filtering) { + for (ActionListener a : actionListeners) { + a.actionPerformed(e); + } + } + } + } + + class ComboBoxItemListener implements ItemListener { + /* + * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent) + */ + @Override + public void itemStateChanged(ItemEvent e) { + if (!filtering) { + for (ItemListener i : itemListeners) { + i.itemStateChanged(e); + } + } + } + } + + /** + * Build layout. + */ + private void buildLayout() { + dataBox = new JXComboBox(); + dataBox.addActionListener(new ComboBoxActionListener()); + dataBox.addItemListener(new ComboBoxItemListener()); + filterField = new JXTextField(_("isisfish.common.filter")); + // fix size + filterField.setPreferredSize(new Dimension(200, 0)); + resetButton = new JButton(Resource.getIcon("/icons/cancel.png")); + resetButton.addActionListener(new FilterActionListener()); + resetButton.setEnabled(false); + filterField.getDocument().addDocumentListener(new FilterDocumentListener()); + + setLayout(new BorderLayout()); + add(dataBox, BorderLayout.CENTER); + + JPanel filterPanel = new JPanel(new BorderLayout()); + filterPanel.add(filterField, BorderLayout.CENTER); + filterPanel.add(resetButton, BorderLayout.EAST); + + add(filterPanel, BorderLayout.EAST); + } + + /** + * Change model. + * + * @param model model to set + */ + public void setModel(ComboBoxModel model) { + dataBox.setModel(new FilterComboBoxModel(model)); + } + + public Object getSelectedItem() { + return dataBox.getSelectedItem(); + } + + public void setSelectedItem(Object object) { + dataBox.setSelectedItem(object); + } + + public boolean addActionListener(ActionListener e) { + return actionListeners.add(e); + } + + public boolean removeActionListener(ActionListener o) { + return actionListeners.remove(o); + } + + public boolean addItemListener(ItemListener e) { + return itemListeners.add(e); + } + + public boolean removeItemListener(ItemListener o) { + return itemListeners.remove(o); + } +} \ No newline at end of file Property changes on: trunk/src/main/java/fr/ifremer/isisfish/ui/widget/FilterableComboBox.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Modified: trunk/src/main/resources/i18n/isis-fish_en_GB.properties =================================================================== --- trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2011-11-21 15:30:51 UTC (rev 3536) +++ trunk/src/main/resources/i18n/isis-fish_en_GB.properties 2011-11-22 14:00:17 UTC (rev 3537) @@ -99,6 +99,7 @@ isisfish.common.equation=Equation isisfish.common.error=error isisfish.common.file=File +isisfish.common.filter=Filter isisfish.common.finish=Finish isisfish.common.gear=Gear isisfish.common.immigration=immigration Modified: trunk/src/main/resources/i18n/isis-fish_fr_FR.properties =================================================================== --- trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2011-11-21 15:30:51 UTC (rev 3536) +++ trunk/src/main/resources/i18n/isis-fish_fr_FR.properties 2011-11-22 14:00:17 UTC (rev 3537) @@ -99,6 +99,7 @@ isisfish.common.equation=Equation isisfish.common.error=Erreur isisfish.common.file=Fichier +isisfish.common.filter=Filtrer isisfish.common.finish=Terminer isisfish.common.gear=Engin isisfish.common.immigration=immigration
participants (1)
-
echatellier@users.forge.codelutin.com