Author: chatellier Date: 2009-06-10 15:24:16 +0000 (Wed, 10 Jun 2009) New Revision: 2365 Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/rule/RuleComboBoxModel.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/rule/RuleListCellRenderer.java Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx Log: Refactor rules combo and list models Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2009-06-10 15:23:24 UTC (rev 2364) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/ParamsUI.jaxx 2009-06-10 15:24:16 UTC (rev 2365) @@ -1,7 +1,6 @@ <!-- /* *##% - * Copyright (C) 2005 - 2009 - * Ifremer, Code Lutin, Cedric Pineau, Benjamin Poussin + * Copyright (C) 2005 - 2009 Ifremer, Code Lutin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -16,8 +15,8 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - *##%*/ --> - + *##%*/ +--> <Table> <!-- ui state when editing --> <Boolean id='sensitivity' javaBean='false'/> @@ -30,24 +29,15 @@ import fr.ifremer.isisfish.simulator.launcher.SimulatorLauncher; import fr.ifremer.isisfish.entities.Strategy; import fr.ifremer.isisfish.entities.Population; -import javax.swing.table.DefaultTableModel; import java.text.ParseException; -import java.awt.event.ItemEvent; -import javax.swing.table.TableModel; -import fr.ifremer.isisfish.ui.widget.editor.GenericCell; -import fr.ifremer.isisfish.ui.widget.editor.ParameterColumnEditor; -import fr.ifremer.isisfish.ui.widget.editor.ParameterTableCellEditor; -import javax.swing.text.JTextComponent; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; import fr.ifremer.isisfish.simulator.launcher.SimulationService; import fr.ifremer.isisfish.simulator.launcher.SimulationJob; import fr.ifremer.isisfish.ui.sensitivity.SensitivityUI; import fr.ifremer.isisfish.entities.FisheryRegionImpl; import fr.ifremer.isisfish.datastore.StorageException; -import fr.ifremer.isisfish.ui.widget.renderer.SimpleToolTipTableColumnRenderer; -import fr.ifremer.isisfish.ui.widget.renderer.SimpleToolTipComboBoxRenderer; import fr.ifremer.isisfish.simulator.launcher.SimulationServiceListener; +import fr.ifremer.isisfish.ui.simulator.rule.RuleComboBoxModel; +import fr.ifremer.isisfish.ui.simulator.rule.RuleListCellRenderer; import fr.ifremer.isisfish.ui.simulator.rule.RuleListModel; import fr.ifremer.isisfish.ui.simulator.rule.RuleParametersTableModel; import fr.ifremer.isisfish.ui.simulator.rule.RuleParametersTableCellEditor; @@ -99,26 +89,28 @@ setListSimulParamsPopulationsItems(); setRulesListModel(); } -protected void regionChange(ItemEvent e) { - if (e.getStateChange() == ItemEvent.SELECTED) { - // le premier item est " " pour ne pas avoir de selection par defaut - final String selected = fieldSimulParamsRegion.getSelectedItem().toString(); - if (log.isDebugEnabled()) { - log.debug(" selected " + selected); - } - if(selected != null && !selected.trim().isEmpty()) { - getParentContainer(WelcomePanelUI.class).setInfoText(_("isisfish.message.loading.region")); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - simulAction.regionChange(selected); - refresh(); - setFactorRegion(); - getParentContainer(WelcomePanelUI.class).setInfoText(_("isisfish.message.region.loaded")); - } - }); - } + +/** + * Called on user region selection change. + */ +protected void regionChange() { + // le premier item est " " pour ne pas avoir de selection par defaut + final String selected = fieldSimulParamsRegion.getSelectedItem().toString(); + if (log.isDebugEnabled()) { + log.debug(" selected " + selected); } + if(selected != null && !selected.trim().isEmpty()) { + getParentContainer(WelcomePanelUI.class).setInfoText(_("isisfish.message.loading.region")); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + simulAction.regionChange(selected); + refresh(); + setFactorRegion(); + getParentContainer(WelcomePanelUI.class).setInfoText(_("isisfish.message.region.loaded")); + } + }); + } } protected void setPreScript() { if (!isSensitivity()){ @@ -140,7 +132,7 @@ } } protected void setFactor() { - if (isSensitivity()){ + if (isSensitivity()) { getParentContainer(SensitivityUI.class).getSensitivityTabUI().setFactorModel(); } } @@ -160,9 +152,9 @@ protected void loadOldSimulation() { final String selected = fieldSimulParamsSelect.getSelectedItem().toString(); // le premier item est " " pour ne pas avoir de selection par defaut - if (selected != null && !selected.equals(" ")){ + if (selected != null && !selected.equals(" ")) { getParentContainer(WelcomePanelUI.class).setInfoText(_("isisfish.message.loading.old.simulation")); - SwingUtilities.invokeLater(new Runnable() { + SwingUtilities.invokeLater(new Runnable() { @Override public void run() { simulAction.loadOldSimulation(selected); @@ -180,14 +172,20 @@ }); } } -protected void simul() { +protected void launchSimulation() { if (!isSensitivity()) { simulAction.launchSimulation(fieldSimulParamsName.getText(), (SimulatorLauncher)comboSelLauncher.getSelectedItem()); } else{ simulAction.launchSimulationWhithSensibility(fieldSimulParamsName.getText(), (SimulatorLauncher)comboSelLauncher.getSelectedItem()); } - getParentContainer(WelcomeTabUI.class).selTab(5); + + // dans le cas d'une fenetre independante, il n'y a pas de ParentContainer + WelcomeTabUI parent = getParentContainer(WelcomeTabUI.class); + if (parent != null) { + // 5 = queue simulation tab + parent.selTab(5); + } } protected void enablePreSimul() { simulAction.getSimulationParameter().setUsePreScript(fieldUseSimulPreScripts.isSelected()); @@ -259,7 +257,7 @@ } } protected void populationSelected(){ - if (listSimulParamsPopulations.getSelectedIndex() != -1){ + if (listSimulParamsPopulations.getSelectedIndex() != -1) { simulAction.setPopulations(listSimulParamsPopulations.getSelectedValues()); simulParamsNumbers.setMatrix(simulAction.getSimulationParameter().getNumberOf((Population) listSimulParamsPopulations.getSelectedValue())); } @@ -271,12 +269,25 @@ simulAction.getSimulationParameter().setDescription(fieldSimulParamsDesc.getText()); } +/*protected ComboBoxModel getParamsMesuresSelectModel() { + java.util.List<Rule> availableRules = simulAction.getAvailableRules(); + RuleComboBoxModel model = new RuleComboBoxModel(availableRules); + + // TODO change place (but must be same rule list) + fieldSimulParamsMesuresSelect.setRenderer(model); + + return model; +}*/ + protected void setRulesListModel() { - RuleListModel model = new RuleListModel(simulAction.getRules()); - listSimulParamsMesuresList.setModel(model); - listSimulParamsMesuresList.setCellRenderer(model); + if (log.isDebugEnabled()) { + log.debug("Set simulation rules model"); + } + RuleListModel model = new RuleListModel(simulAction.getRules()); + listSimulParamsMesuresList.setModel(model); + listSimulParamsMesuresList.setCellRenderer(model); - onRuleSelectionChange(); + onRuleSelectionChange(); } /** * Called when selection change on rule list. @@ -308,8 +319,8 @@ } } protected void addRules() { - String selectedRuleName = fieldSimulParamsMesuresSelect.getSelectedItem().toString(); - simulAction.addRules(selectedRuleName); + Rule selectedRule = (Rule)fieldSimulParamsMesuresSelect.getSelectedItem(); + simulAction.addNewRule(selectedRule); setRulesListModel(); } protected void removeRules() { @@ -345,7 +356,7 @@ protected ComboBoxModel getSimulParamsSelectModel(boolean force) { java.util.List<String> items = simulAction.getFilteredOldSimulatorNames(force); DefaultComboBoxModel result = new DefaultComboBoxModel(); - if (items != null){ + if (items != null) { for (String s : items){ result.addElement(s); } @@ -353,13 +364,6 @@ return result; } -protected ComboBoxModel getParamsMesuresSelectModel() { - java.util.List<String> rulesNames = simulAction.getAvailableRuleNames(); - DefaultComboBoxModel model = new DefaultComboBoxModel(rulesNames.toArray()); - fieldSimulParamsMesuresSelect.setRenderer(new SimpleToolTipComboBoxRenderer(ToolTipListModelFactory.createRuleDescriptionsModel(rulesNames))); - return model; -} - protected void resetFilter(){ simulAction.resetOldSimulatorNames(); } @@ -394,7 +398,7 @@ </row> <row> <cell columns="2" fill="horizontal" weightx="1.0"> - <JComboBox id="fieldSimulParamsSelect" model='{getSimulParamsSelectModel()}' onActionPerformed='loadOldSimulation()'/> + <JComboBox id="fieldSimulParamsSelect" model='{getSimulParamsSelectModel()}' onActionPerformed='loadOldSimulation()'/> </cell> <cell> <JButton text="isisfish.params.filter" id="buttonSimulParamsSelectFilter" onActionPerformed='selectFilter()'/> @@ -429,7 +433,7 @@ <JLabel text="isisfish.common.region"/> </cell> <cell fill="horizontal" weightx="1.0"> - <JComboBox id="fieldSimulParamsRegion" model='{new DefaultComboBoxModel(Common.getRegionItem())}' selectedItem='{getContextValue(SimulAction.class).getSimulationParameter().getRegionName()}' onItemStateChanged='regionChange(event)'/> + <JComboBox id="fieldSimulParamsRegion" model='{new DefaultComboBoxModel(Common.getRegionItem())}' selectedItem='{getContextValue(SimulAction.class).getSimulationParameter().getRegionName()}' onActionPerformed='regionChange()'/> </cell> </row> </Table> @@ -515,13 +519,13 @@ </row> <row> <cell fill="horizontal"> - <JComboBox id="fieldSimulParamsMesuresSelect" model='{getParamsMesuresSelectModel()}'/> + <JComboBox id="fieldSimulParamsMesuresSelect" model='{new RuleComboBoxModel(simulAction.getAvailableRules())}' renderer='{new RuleListCellRenderer()}'/> </cell> </row> <row> <cell fill="both" weightx="1.0" weighty="1.0"> <JScrollPane minimumSize='{new Dimension(0,0)}' preferredSize='{new Dimension(0,0)}'> - <JList id="listSimulParamsMesuresList" selectionMode="0" model='{new DefaultComboBoxModel(simulAction.getRules().toArray())}' onMouseClicked='onRuleSelectionChange()'/> + <JList id="listSimulParamsMesuresList" selectionMode="0" onMouseClicked='onRuleSelectionChange()'/> </JScrollPane> </cell> </row> @@ -606,7 +610,7 @@ <JComboBox id="comboSelLauncher" model='{new DefaultComboBoxModel(simulAction.getSimulationLauncher().toArray())}'/> </cell> <cell fill="horizontal" weightx="0.4"> - <JButton id="buttonSimulParamsSimulate" text="isisfish.common.simulate" onActionPerformed='simul()'/> + <JButton id="buttonSimulParamsSimulate" text="isisfish.common.simulate" onActionPerformed='launchSimulation()'/> </cell> <cell fill="horizontal" weightx="0.2"> <JButton id="saveSimul" text="isisfish.simulation.menu.save" onActionPerformed='saveSimulation()'/> Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/rule/RuleComboBoxModel.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/rule/RuleComboBoxModel.java (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/rule/RuleComboBoxModel.java 2009-06-10 15:24:16 UTC (rev 2365) @@ -0,0 +1,123 @@ +/* *##% + * Copyright (C) 2009 Code Lutin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +package fr.ifremer.isisfish.ui.simulator.rule; + +import java.util.List; + +import javax.swing.AbstractListModel; +import javax.swing.ComboBoxModel; + +import fr.ifremer.isisfish.rule.Rule; + +/** + * Model pour la liste des regles des parametres d'une simulation. + * + * @author chatellier + * @version $Revision: 2350 $ + * + * Last update : $Date: 2009-06-09 13:52:58 +0200 (mar. 09 juin 2009) $ + * By : $Author: chatellier $ + */ +public class RuleComboBoxModel extends AbstractListModel implements ComboBoxModel { + + /** serialVersionUID. */ + private static final long serialVersionUID = -4070846632975105788L; + + protected List<Rule> rules; + + protected Object selectedItem; + + /** + * Empty constructor. + */ + public RuleComboBoxModel() { + this(null); + } + + /** + * Constructor with rule list. + * + * @param rules rules + */ + public RuleComboBoxModel(List<Rule> rules) { + super(); + setRules(rules); + } + + /** + * Get rules list. + * + * @return the rules + */ + public List<Rule> getRules() { + return rules; + } + + /** + * Set rules list. + * + * @param rules the rules to set + */ + public void setRules(List<Rule> rules) { + this.rules = rules; + + // default first selected + if (!rules.isEmpty()) { + selectedItem = rules.get(0); + } + } + + /* + * @see javax.swing.ListModel#getElementAt(int) + */ + @Override + public Object getElementAt(int index) { + return rules.get(index); + } + + /* + * @see javax.swing.ListModel#getSize() + */ + @Override + public int getSize() { + int size = 0; + + if (rules != null) { + size = rules.size(); + } + + return size; + } + + /* + * @see javax.swing.ComboBoxModel#getSelectedItem() + */ + @Override + public Object getSelectedItem() { + return selectedItem; + } + + /* + * @see javax.swing.ComboBoxModel#setSelectedItem(java.lang.Object) + */ + @Override + public void setSelectedItem(Object anItem) { + this.selectedItem = anItem; + } +} Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/rule/RuleListCellRenderer.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/rule/RuleListCellRenderer.java (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/simulator/rule/RuleListCellRenderer.java 2009-06-10 15:24:16 UTC (rev 2365) @@ -0,0 +1,76 @@ +/* *##% + * Copyright (C) 2009 Code Lutin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * 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 Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +package fr.ifremer.isisfish.ui.simulator.rule; + +import java.awt.Component; + +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.ListCellRenderer; + +import fr.ifremer.isisfish.datastore.RuleStorage; +import fr.ifremer.isisfish.rule.Rule; + +/** + * Rendu des données d'une liste graphique de regles + * + * @author chatellier + * @version $Revision: 2350 $ + * + * Last update : $Date: 2009-06-09 13:52:58 +0200 (mar. 09 juin 2009) $ + * By : $Author: chatellier $ + */ +public class RuleListCellRenderer extends JLabel implements ListCellRenderer { + + /** serialVersionUID. */ + private static final long serialVersionUID = -948394724922547715L; + + /* + * @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) + */ + @Override + public Component getListCellRendererComponent(JList list, Object value, + int index, boolean isSelected, boolean cellHasFocus) { + + if (value != null) { + Rule rule = (Rule)value; + String ruleName = RuleStorage.getName(rule); + setText(ruleName); + + try { + setToolTipText(rule.getDescription()); + } catch (Exception e) { + // can't get exception + } + + if(isSelected) { + setBackground(list.getSelectionBackground()); + setForeground(list.getSelectionForeground()); + setOpaque(true); // background won't work + } + else { + setBackground(list.getBackground()); + setForeground(list.getForeground()); + setOpaque(false); // background won't work + } + } + + return this; + } +}