This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit e7863a8ebda9c072da10b53622e2d7a0d20dd0d9 Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 11:35:29 2016 +0100 graph des poids moyens (refs #8019) --- .../operation/catches/EditCatchesUIHandler.java | 2 +- .../frequency/SpeciesFrequencyRowModel.java | 8 ++ .../frequency/SpeciesFrequencyTableModel.java | 61 ++++++++++--- .../species/frequency/SpeciesFrequencyUI.jaxx | 2 +- .../species/frequency/SpeciesFrequencyUI.jcss | 1 + .../frequency/SpeciesFrequencyUIHandler.java | 99 +++++++++++++++------ .../species/frequency/SpeciesFrequencyUIModel.java | 41 +++++++-- .../resources/i18n/tutti-ui-swing_en_GB.properties | 1 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 1 + .../src/main/resources/icons/action-chart.png | Bin 0 -> 541 bytes 10 files changed, 165 insertions(+), 51 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java index 0d81b41..e1a96ea 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java @@ -457,7 +457,7 @@ public class EditCatchesUIHandler extends AbstractTuttiTabContainerUIHandler<Edi String frequenciesTitle = buildReminderLabelTitle(editRow.getSpecies(), editRow, ui.getSpeciesTabFishingOperationReminderLabel().getTitle(), - t("tutti.editSpeciesFrequencies.title"), + "", false); frequencyEditor.getHandler().editBatch(editor, frequenciesTitle); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java index de53c00..89e625d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyRowModel.java @@ -260,4 +260,12 @@ public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBa return lengthStep == null && (computedOrNotWeight.getData() == null || number == null); } + public Float computeAverageWeight() { + Float averageWeight = null; + Float weight = computedOrNotWeight.getDataOrComputedData(); + if (weight != null && number != null) { + averageWeight = number == 0 ? 0 : weight / number; + } + return averageWeight; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java index 99a8445..e52ea4b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java @@ -77,7 +77,9 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp protected transient PropertyChangeListener onNumberChangedListener; - protected final XYSeries series; + protected final XYSeries frequenciesSeries; + + protected final XYSeries averageWeightsSeries; public SpeciesFrequencyTableModel(WeightUnit weightUnit, TableColumnModelExt columnModel, @@ -86,7 +88,8 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp this.weightUnit = weightUnit; this.uiModel = uiModel; this.modelCache = uiModel.cache; - this.series = uiModel.dataset.getSeries(0); + this.frequenciesSeries = uiModel.frequenciesDataset.getSeries(0); + this.averageWeightsSeries = uiModel.averageWeightsDataset.getSeries(0); setNoneEditableCols(); } @@ -235,18 +238,24 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp @Override public void propertyChange(PropertyChangeEvent evt) { + SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); + + // recompute the weight with the rtp + uiModel.computeRowWeightWithRtp(row); + Float oldValue = (Float) evt.getOldValue(); if (oldValue != null) { modelCache.removeLengthStep(oldValue); - if (series.indexOf(oldValue) >= 0) { - series.remove(oldValue); + if (frequenciesSeries.indexOf(oldValue) >= 0) { + frequenciesSeries.remove(oldValue); + } + if (averageWeightsSeries.indexOf(oldValue) >= 0) { + averageWeightsSeries.remove(oldValue); } } - SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); - Float newValue = (Float) evt.getNewValue(); if (newValue != null) { @@ -254,7 +263,8 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp if (row.getNumber() != null) { - series.addOrUpdate(newValue, row.getNumber()); + frequenciesSeries.addOrUpdate(newValue, row.getNumber()); + averageWeightsSeries.addOrUpdate(newValue, row.computeAverageWeight()); } @@ -283,6 +293,9 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); + // recompute the weight with the rtp + uiModel.computeRowWeightWithRtp(row); + Integer newValue = (Integer) evt.getNewValue(); Float lengthStep = row.getLengthStep(); @@ -292,13 +305,18 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp if (newValue == null) { // remove the value for the lengthStep - if (series.indexOf(lengthStep) >= 0) { - series.remove(lengthStep); + if (frequenciesSeries.indexOf(lengthStep) >= 0) { + frequenciesSeries.remove(lengthStep); + } + + if (averageWeightsSeries.indexOf(lengthStep) >= 0) { + averageWeightsSeries.remove(lengthStep); } } else { - series.addOrUpdate(lengthStep, row.getNumber()); + frequenciesSeries.addOrUpdate(lengthStep, row.getNumber()); + averageWeightsSeries.addOrUpdate(lengthStep, row.computeAverageWeight()); } @@ -308,9 +326,6 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp uiModel.recomputeRowValidState(row); uiModel.updateEmptyRow(row); - // recompute the weight with the rtp - uiModel.computeRowWeightWithRtp(row); - // Can recompute total number and weight only after valid flag change uiModel.recomputeTotalNumberAndWeight(); @@ -329,6 +344,26 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); modelCache.updateRowWithWeight(row); + Float lengthStep = row.getLengthStep(); + + if (lengthStep != null) { + + if (evt.getNewValue() == null) { + + // remove the value for the lengthStep + System.out.println("averageWeightsSeries.indexOf(lengthStep) " + averageWeightsSeries.indexOf(lengthStep)); + if (averageWeightsSeries.indexOf(lengthStep) >= 0) { + averageWeightsSeries.remove(lengthStep); + } + + } else { + + averageWeightsSeries.addOrUpdate(lengthStep, row.computeAverageWeight()); + + } + + } + uiModel.recomputeRowsValidateState(); uiModel.updateEmptyRow(row); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx index 10edbbf..1e66155 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx @@ -235,7 +235,7 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { <ComputableDataEditor id='totalWeightField' genericType="Float" constructorParams='this'/> </cell> <cell> - <JButton id='graphAverageWeightButton'/> + <JButton id='graphAverageWeightButton' onActionPerformed="handler.showAverageWeightsHistogram()"/> </cell> </row> </Table> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss index 9bb4ad2..9cfb3f8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss @@ -267,6 +267,7 @@ ComputableDataEditor { } #graphAverageWeightButton { + actionIcon: chart; text: "tutti.editSpeciesFrequencies.field.graphAverageWeight"; _skipAction: true; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index abaeb2d..39f75c9 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -122,9 +122,13 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci private Map<String, Caracteristic> lengthStepCaracteristics; - private JFreeChart chart; + private JFreeChart frequenciesChart; - protected final JFrame histogramPopup = new JFrame(); + private JFreeChart averageWeightsChart; + + protected final JFrame frequenciesHistogramPopup = new JFrame(); + + protected final JFrame averageWeightsHistogramPopup = new JFrame(); protected Caracteristic sexCaracteristic; @@ -341,7 +345,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci float step = getStep(newValue); getModel().setStep(step); getModel().setDataSetIntervalWidth(step); - chart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step == 1f)); + frequenciesChart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step == 1f)); if (CollectionUtils.isNotEmpty(getModel().getRows())) { for (SpeciesFrequencyRowModel rowModel : getModel().getRows()) { rowModel.setLengthStepCaracteristic(newValue); @@ -402,6 +406,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_USE_RTP, evt -> { getModel().getRows().forEach(row -> getModel().computeRowWeightWithRtp(row)); + getModel().reloadRows(); getTableModel().fireTableDataChanged(); }); @@ -411,14 +416,16 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // init histogram - initHistogram(ui, model); + initFrequenciesHistogram(); // init data table - initDataTable(model); + initDataTable(); + + initAverageWeightsHistogram(); // init log table - initLogTable(ui); + initLogTable(); initObsTable(); @@ -426,6 +433,10 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } + public void showAverageWeightsHistogram() { + averageWeightsHistogramPopup.setVisible(true); + } + @Override protected JComponent getComponentToFocus() { FrequencyConfigurationMode configurationMode = getModel().getConfigurationMode(); @@ -442,7 +453,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci log.debug("closing: " + ui); } - histogramPopup.dispose(); + frequenciesHistogramPopup.dispose(); + averageWeightsHistogramPopup.dispose(); frequencyEditor = null; @@ -468,7 +480,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; - histogramPopup.setTitle(title); + frequenciesHistogramPopup.setTitle(title + t("tutti.editSpeciesFrequencies.title")); + averageWeightsHistogramPopup.setTitle(title + weightUnit.decorateLabel(t("tutti.editSpeciesFrequencies.field.graphAverageWeight"))); SpeciesBatchRowModel speciesBatch = editor.getEditRow(); @@ -656,7 +669,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci //------------------------------------------------------------------------// - protected void initDataTable(SpeciesFrequencyUIModel model) { + protected void initDataTable() { JXTable table = getTable(); // create table column model @@ -694,7 +707,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } // create table model - SpeciesFrequencyTableModel tableModel = new SpeciesFrequencyTableModel(weightUnit, columnModel, model); + SpeciesFrequencyTableModel tableModel = new SpeciesFrequencyTableModel(weightUnit, columnModel, getModel()); table.setModel(tableModel); table.setColumnModel(columnModel); @@ -748,26 +761,26 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } - protected void initHistogram(SpeciesFrequencyUI ui, SpeciesFrequencyUIModel model) { - chart = ChartFactory.createXYBarChart(null, - t("tutti.editSpeciesFrequencies.table.header.lengthStep"), - false, - t("tutti.editSpeciesFrequencies.table.header.number"), - model.dataset); - chart.clearSubtitles(); + protected void initFrequenciesHistogram() { + frequenciesChart = ChartFactory.createXYBarChart(null, + t("tutti.editSpeciesFrequencies.table.header.lengthStep"), + false, + t("tutti.editSpeciesFrequencies.table.header.number"), + getModel().frequenciesDataset); + frequenciesChart.clearSubtitles(); - ValueAxis rangeAxis = chart.getXYPlot().getRangeAxis(); + ValueAxis rangeAxis = frequenciesChart.getXYPlot().getRangeAxis(); rangeAxis.setAutoRange(true); rangeAxis.setStandardTickUnits(new NumberTickUnitSource(true)); - ValueAxis domainAxis = chart.getXYPlot().getDomainAxis(); + ValueAxis domainAxis = frequenciesChart.getXYPlot().getDomainAxis(); domainAxis.setAutoRange(true); domainAxis.setStandardTickUnits(new TuttiNumberTickUnitSource(true)); domainAxis.setMinorTickMarksVisible(true); - chart.getXYPlot().getRenderer().setSeriesPaint(0, getConfig().getColorComputedWeights()); + frequenciesChart.getXYPlot().getRenderer().setSeriesPaint(0, getConfig().getColorComputedWeights()); - final ChartPanel chartPanel = new ChartPanel(chart); + final ChartPanel chartPanel = new ChartPanel(frequenciesChart); chartPanel.setDomainZoomable(false); chartPanel.setMouseZoomable(false); chartPanel.setPopupMenu(null); @@ -782,18 +795,50 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci super.mouseClicked(e); if (e.getClickCount() > 1) { - histogramPopup.getContentPane().removeAll(); - ChartPanel chartPanel = new ChartPanel(chart); - histogramPopup.getContentPane().add(chartPanel); - histogramPopup.pack(); - histogramPopup.setVisible(true); + frequenciesHistogramPopup.getContentPane().removeAll(); + ChartPanel chartPanel = new ChartPanel(frequenciesChart); + frequenciesHistogramPopup.getContentPane().add(chartPanel); + frequenciesHistogramPopup.pack(); + frequenciesHistogramPopup.setVisible(true); } } }); } - protected void initLogTable(SpeciesFrequencyUI ui) { + protected void initAverageWeightsHistogram() { + averageWeightsChart = ChartFactory.createXYBarChart(null, + t("tutti.editSpeciesFrequencies.table.header.lengthStep"), + false, + weightUnit.decorateLabel(t("tutti.editSpeciesFrequencies.averageWeight.label")), + getModel().averageWeightsDataset); + averageWeightsChart.clearSubtitles(); + + ValueAxis rangeAxis = averageWeightsChart.getXYPlot().getRangeAxis(); + rangeAxis.setAutoRange(true); + rangeAxis.setStandardTickUnits(new NumberTickUnitSource()); + rangeAxis.setMinorTickMarksVisible(true); + + ValueAxis domainAxis = averageWeightsChart.getXYPlot().getDomainAxis(); + domainAxis.setAutoRange(true); + domainAxis.setStandardTickUnits(new TuttiNumberTickUnitSource(true)); + domainAxis.setMinorTickMarksVisible(true); + + averageWeightsChart.getXYPlot().getRenderer().setSeriesPaint(0, getConfig().getColorComputedWeights()); + + final ChartPanel chartPanel = new ChartPanel(averageWeightsChart); + chartPanel.setDomainZoomable(false); + chartPanel.setMouseZoomable(false); + chartPanel.setPopupMenu(null); + + JPanel histogramPanel = ui.getHistogramPanel(); + histogramPanel.add(chartPanel, BorderLayout.CENTER); + + averageWeightsHistogramPopup.getContentPane().add(chartPanel); + averageWeightsHistogramPopup.pack(); + } + + protected void initLogTable() { JXTable logTable = ui.getLogsTable(); // create log table column model diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index ba13e6c..953c43b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -233,11 +233,18 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa protected CopyIndividualObservationMode copyIndividualObservationMode; /** - * To store graph series. + * To store frequencies graph series. * * @since 3.11 */ - protected final XYSeriesCollection dataset; + protected final XYSeriesCollection frequenciesDataset; + + /** + * To store average weights graph series. + * + * @since 4.5 + */ + protected final XYSeriesCollection averageWeightsDataset; /** * Default caracteristics coming from protocol. @@ -257,9 +264,15 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa XYSeries series = new XYSeries("", true, false); - dataset = new XYSeriesCollection(series); - dataset.setIntervalPositionFactor(0); - dataset.setIntervalWidth(0); + frequenciesDataset = new XYSeriesCollection(series); + frequenciesDataset.setIntervalPositionFactor(0); + frequenciesDataset.setIntervalWidth(0); + + series = new XYSeries("", true, false); + + averageWeightsDataset = new XYSeriesCollection(series); + averageWeightsDataset.setIntervalPositionFactor(0); + averageWeightsDataset.setIntervalWidth(0); this.defaultCaracteristic = defaultCaracteristic == null ? Lists.<Caracteristic>newArrayList() : @@ -270,8 +283,10 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa setEmptyRows(Sets.<SpeciesFrequencyRowModel>newHashSet()); - XYSeries series = dataset.getSeries(0); - series.clear(); + XYSeries frequenciesSeries = frequenciesDataset.getSeries(0); + frequenciesSeries.clear(); + XYSeries averageWeightsSeries = averageWeightsDataset.getSeries(0); + averageWeightsSeries.clear(); cache.loadCache(rows); @@ -284,7 +299,14 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa if (row.isValid()) { Float lengthStep = row.getLengthStep(); - series.addOrUpdate(lengthStep, row.getNumber()); + Integer number = row.getNumber(); + + frequenciesSeries.addOrUpdate(lengthStep, number); + + Float averageWeight = row.computeAverageWeight(); + if (averageWeight != null) { + averageWeightsSeries.addOrUpdate(lengthStep, averageWeight); + } } @@ -733,7 +755,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa } public void setDataSetIntervalWidth(float step) { - dataset.setIntervalWidth(step); + frequenciesDataset.setIntervalWidth(step); + averageWeightsDataset.setIntervalWidth(step); } public List<Caracteristic> getDefaultCaracteristic() { diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index d56da89..5bb32e3 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -1454,6 +1454,7 @@ tutti.editSpeciesFrequencies.addMeasure= tutti.editSpeciesFrequencies.askBeforeSave.help= tutti.editSpeciesFrequencies.askBeforeSave.message= tutti.editSpeciesFrequencies.askBeforeSave.title= +tutti.editSpeciesFrequencies.averageWeight.label= tutti.editSpeciesFrequencies.error.itchyometer.bad.record= tutti.editSpeciesFrequencies.error.length.doublon= tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index d924401..3e9f193 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -1371,6 +1371,7 @@ tutti.editSpeciesFrequencies.addMeasure=Ajout d'un individu de taille <strong>%1 tutti.editSpeciesFrequencies.askBeforeSave.help=Que voulez-vous faire?<ul><li><strong>Non</strong> pour rester sur cet écran</li><li><strong>Oui</strong> pour enregisrer les mensurations avec poids</li></ul> tutti.editSpeciesFrequencies.askBeforeSave.message=La saisie comporte des classes de taille avec et sans poids associés.<br/><strong>Seules les classes de taille avec poids seront dans ce cas sauvegardées.</strong> tutti.editSpeciesFrequencies.askBeforeSave.title=Confirmer l'enregistrement des mensurations +tutti.editSpeciesFrequencies.averageWeight.label=Poids moyen tutti.editSpeciesFrequencies.error.itchyometer.bad.record=La mesure provenant de l'ichtyomètre n'est pas valide (la donnée est peut-être corrompue) \:<br/><ul><li>Enregistrement \: <strong>%s</strong></li><li>CRC \: <strong>%s</strong></li><li>CRC calculé \: <strong>%s</strong></li></ul> tutti.editSpeciesFrequencies.error.length.doublon=La classe de taille <strong>%s</strong> est utilisée plusieurs fois (deuxième occurrence trouvée à la ligne <strong>%s</strong>), ce qui n'est pas autorisé.<hr/>Veuillez corriger cela pour pouvoir enregistrer les mensurations. tutti.editSpeciesFrequencies.field.copyToSizeTableMode.all=Tout diff --git a/tutti-ui-swing/src/main/resources/icons/action-chart.png b/tutti-ui-swing/src/main/resources/icons/action-chart.png new file mode 100644 index 0000000..9051fbc Binary files /dev/null and b/tutti-ui-swing/src/main/resources/icons/action-chart.png differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.