[tutti] branch feature/wloLikeFrequencyScreen#5128 created (now f4bd19a)
This is an automated email from the git hooks/post-receive script. New change to branch feature/wloLikeFrequencyScreen#5128 in repository tutti. See http://git.codelutin.com/tutti.git at f4bd19a refs #5128 [BIGFIN] Idée d'amélioration : graphique dans l'écran mensuration et liste enregistrement : s'imprégner de l'application android WLO This branch includes the following new commits: new f4bd19a refs #5128 [BIGFIN] Idée d'amélioration : graphique dans l'écran mensuration et liste enregistrement : s'imprégner de l'application android WLO The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit f4bd19a31571f1cefa68ee7a26b00da34bb19088 Author: Kevin Morin <morin@codelutin.com> Date: Tue Oct 21 18:25:09 2014 +0200 refs #5128 [BIGFIN] Idée d'amélioration : graphique dans l'écran mensuration et liste enregistrement : s'imprégner de l'application android WLO -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/wloLikeFrequencyScreen#5128 in repository tutti. See http://git.codelutin.com/tutti.git commit f4bd19a31571f1cefa68ee7a26b00da34bb19088 Author: Kevin Morin <morin@codelutin.com> Date: Tue Oct 21 18:25:09 2014 +0200 refs #5128 [BIGFIN] Idée d'amélioration : graphique dans l'écran mensuration et liste enregistrement : s'imprégner de l'application android WLO --- pom.xml | 7 ++ tutti-ui-swing/pom.xml | 5 + .../frequency/SpeciesFrequencyLogRowModel.java | 40 ++++++++ .../frequency/SpeciesFrequencyLogsTableModel.java | 64 +++++++++++++ .../frequency/SpeciesFrequencyTableModel.java | 10 +- .../species/frequency/SpeciesFrequencyUI.css | 7 ++ .../species/frequency/SpeciesFrequencyUI.jaxx | 17 +++- .../frequency/SpeciesFrequencyUIHandler.java | 106 ++++++++++++++++++++- .../ui/swing/util/ThreeColumnsSplitPaneModel.java | 34 +++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 4 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 + tutti-ui-swing/src/main/resources/test.shp | Bin 0 -> 448188 bytes 12 files changed, 287 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 37ba771..16eb728 100644 --- a/pom.xml +++ b/pom.xml @@ -494,6 +494,13 @@ <scope>runtime</scope> </dependency> + <!-- JFreeChart --> + <dependency> + <groupId>org.jfree</groupId> + <artifactId>jfreechart</artifactId> + <version>1.0.19</version> + </dependency> + <!-- Test --> <dependency> <groupId>org.mockito</groupId> diff --git a/tutti-ui-swing/pom.xml b/tutti-ui-swing/pom.xml index 9a0bb8d..4a3cd59 100644 --- a/tutti-ui-swing/pom.xml +++ b/tutti-ui-swing/pom.xml @@ -264,6 +264,11 @@ <scope>runtime</scope> </dependency> + <dependency> + <groupId>org.jfree</groupId> + <artifactId>jfreechart</artifactId> + </dependency> + <!-- Tests --> <dependency> <groupId>junit</groupId> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogRowModel.java new file mode 100644 index 0000000..d6ea6a2 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogRowModel.java @@ -0,0 +1,40 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; + +import org.apache.commons.lang3.time.DateFormatUtils; +import org.jdesktop.beans.AbstractBean; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author Kevin Morin (Code Lutin) + * @since 3.8 + */ +public class SpeciesFrequencyLogRowModel extends AbstractBean implements Serializable { + + public static final String PROPERTY_LABEL = "label"; + + protected Float lengthStep; + protected Date date; + + public Float getLengthStep() { + return lengthStep; + } + + public void setLengthStep(Float lengthStep) { + this.lengthStep = lengthStep; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getLabel() { + String formattedTime = DateFormatUtils.format(date, "HH:mm:ss"); + return formattedTime + " : " + lengthStep.toString(); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogsTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogsTableModel.java new file mode 100644 index 0000000..83750f1 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogsTableModel.java @@ -0,0 +1,64 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; + +/* + * #%L + * Tutti :: UI + * %% + * Copyright (C) 2012 - 2014 Ifremer + * %% + * 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 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 Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.Maps; +import fr.ifremer.tutti.type.WeightUnit; +import org.jdesktop.swingx.table.TableColumnModelExt; +import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; +import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.List; +import java.util.Map; + +import static org.nuiton.i18n.I18n.n; + +/** + * Model of the species frequency log table. + * + * @author Kevin Morin (Code Lutin) + * @since 3.8 + */ +public class SpeciesFrequencyLogsTableModel extends AbstractApplicationTableModel<SpeciesFrequencyLogRowModel> { + + private static final long serialVersionUID = 1L; + + public static final ColumnIdentifier<SpeciesFrequencyRowModel> LABEL = ColumnIdentifier.newId( + SpeciesFrequencyLogRowModel.PROPERTY_LABEL, + n("tutti.editSpeciesFrequencies.logTable.header.label"), + n("tutti.editSpeciesFrequencies.logTable.header.label")); + + + public SpeciesFrequencyLogsTableModel(TableColumnModelExt columnModel) { + super(columnModel, true, false); + setNoneEditableCols(LABEL); + } + + @Override + public SpeciesFrequencyLogRowModel createNewRow() { + SpeciesFrequencyLogRowModel result = new SpeciesFrequencyLogRowModel(); + return result; + } +} 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 99ca712..83f74ac 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 @@ -24,6 +24,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; import com.google.common.collect.Maps; import fr.ifremer.tutti.type.WeightUnit; +import org.jfree.data.xy.XYSeries; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; import org.jdesktop.swingx.table.TableColumnModelExt; @@ -71,13 +72,17 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp */ protected final WeightUnit weightUnit; + protected final PropertyChangeListener rowPropertyChangeListener; + public SpeciesFrequencyTableModel(WeightUnit weightUnit, TableColumnModelExt columnModel, - SpeciesFrequencyUIModel uiModel) { + SpeciesFrequencyUIModel uiModel, + PropertyChangeListener rowPropertyChangeListener) { super(columnModel, true, true); this.weightUnit = weightUnit; this.uiModel = uiModel; this.rowCache = Maps.newTreeMap(); + this.rowPropertyChangeListener = rowPropertyChangeListener; setNoneEditableCols(); } @@ -112,6 +117,9 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp } } }); + + result.addPropertyChangeListener(rowPropertyChangeListener); + result.setLengthStepCaracteristic(uiModel.getLengthStepCaracteristic()); result.setLengthStep(defaultStep); result.setValid(defaultStep != null); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.css index ef03cb7..5300876 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.css @@ -192,6 +192,13 @@ ComputableDataEditor { layout: {dataFieldLayout}; } +#logsTable { + selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionBackground: {null}; + selectionForeground: {Color.BLACK}; + sortable: false; +} + #tableScrollPane { _validatorLabel: {t("tutti.editSpeciesFrequencies.field.rows")}; } 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 66c9a4c..7fa2c0a 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 @@ -28,6 +28,7 @@ fr.ifremer.tutti.ui.swing.TuttiHelpBroker fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode + fr.ifremer.tutti.ui.swing.util.ThreeColumnsSplitPaneModel fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil fr.ifremer.tutti.ui.swing.util.computable.ComputableDataEditor @@ -37,6 +38,7 @@ jaxx.runtime.swing.editor.NumberEditor org.jdesktop.swingx.JXTable + org.jdesktop.swingx.JXMultiSplitPane javax.swing.ListSelectionModel javax.swing.SwingConstants @@ -193,9 +195,18 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { </JPanel> <JPanel id='dataFieldPanel' constraints='BorderLayout.CENTER'> - <JScrollPane id='tableScrollPane' constraints='"lengthCaracteristicPmfm"'> - <JXTable id='table'/> - </JScrollPane> + <JXMultiSplitPane constraints='"lengthCaracteristicPmfm"' model="{new ThreeColumnsSplitPaneModel()}"> + <JScrollPane id='logsScrollPane' constraints="ThreeColumnsSplitPaneModel.LEFT"> + <JXTable id='logsTable'/> + </JScrollPane> + <JScrollPane id='tableScrollPane' constraints="ThreeColumnsSplitPaneModel.CENTER"> + <JXTable id='table'/> + </JScrollPane> + <JPanel constraints="ThreeColumnsSplitPaneModel.RIGHT" + id="histogramPanel" + layout="{new BorderLayout()}"> + </JPanel> + </JXMultiSplitPane> <Table constraints='"noLengthCaracteristicPmfm"' fill='horizontal'> <row> 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 03ac92f..ab34892 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 @@ -51,20 +51,36 @@ import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXMultiSplitPane; import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.JXTitledPanel; +import org.jdesktop.swingx.MultiSplitLayout; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; +import org.jfree.chart.ChartFactory; +import org.jfree.chart.ChartPanel; +import org.jfree.chart.JFreeChart; +import org.jfree.data.statistics.HistogramDataset; +import org.jfree.data.statistics.HistogramType; +import org.jfree.data.xy.DefaultIntervalXYDataset; +import org.jfree.data.xy.IntervalXYDataset; +import org.jfree.data.xy.XYIntervalSeries; +import org.jfree.data.xy.XYSeries; +import org.jfree.data.xy.XYSeriesCollection; import org.nuiton.jaxx.application.ApplicationBusinessException; import org.nuiton.jaxx.application.swing.util.Cancelable; -import javax.swing.JComponent; -import javax.swing.JOptionPane; -import javax.swing.JTextField; -import javax.swing.SwingUtilities; +import javax.swing.*; +import java.awt.*; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; @@ -87,6 +103,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci private Map<String, Caracteristic> lengthStepCaracteristics; + private XYSeriesCollection dataset; + /** * Weight unit. * @@ -158,8 +176,14 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci SpeciesFrequencyUIModel model = getModel(); model.setEmptyRows(Sets.<SpeciesFrequencyRowModel>newHashSet()); if (CollectionUtils.isNotEmpty(rows)) { + XYSeries series = dataset.getSeries(0); + series.clear(); for (SpeciesFrequencyRowModel row : rows) { model.updateRowWithWeight(row); + Float lengthStep = row.getLengthStep(); + if (lengthStep != null) { + series.add(lengthStep, row.getNumber()); + } } for (SpeciesFrequencyRowModel row : rows) { recomputeRowValidState(row); @@ -317,6 +341,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // get step from the pmfm float step = getStep(newValue); getModel().setStep(step); + dataset.setIntervalWidth(step); if (CollectionUtils.isNotEmpty(getModel().getRows())) { for (SpeciesFrequencyRowModel rowModel : getModel().getRows()) { rowModel.setLengthStepCaracteristic(newValue); @@ -346,6 +371,30 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } }); + // init histogram + final XYSeries series = new XYSeries("", true, false); + dataset = new XYSeriesCollection(series); + dataset.setIntervalPositionFactor(0); + dataset.setIntervalWidth(step); + + JFreeChart chart = ChartFactory.createXYBarChart(null, + t("tutti.editSpeciesFrequencies.table.header.lengthStep"), + false, + t("tutti.editSpeciesFrequencies.table.header.number"), + dataset); + chart.clearSubtitles(); + chart.getXYPlot().getRenderer().setSeriesPaint(0, getConfig().getColorComputedWeights()); + + final ChartPanel chartPanel = new ChartPanel(chart); + chartPanel.setDomainZoomable(false); + chartPanel.setMouseZoomable(false); + chartPanel.setPopupMenu(null); + + JPanel histogramPanel = ui.getHistogramPanel(); + histogramPanel.add(chartPanel, BorderLayout.CENTER); + + // init data table + JXTable table = getTable(); // create table column model @@ -380,7 +429,25 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci new SpeciesFrequencyTableModel( weightUnit, columnModel, - model); + model, + new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + SpeciesFrequencyRowModel row = (SpeciesFrequencyRowModel) evt.getSource(); + + if (SpeciesFrequencyRowModel.PROPERTY_LENGTH_STEP.equals(evt.getPropertyName())) { + Float oldValue = (Float) evt.getOldValue(); + if (oldValue != null) { + series.remove(oldValue); + } + } + + Float lengthStep = row.getLengthStep(); + if (lengthStep != null) { + series.addOrUpdate(lengthStep, row.getNumber()); + } + } + }); table.setModel(tableModel); table.setColumnModel(columnModel); @@ -389,7 +456,29 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci installTableKeyListener(columnModel, table); + // init log table + + JXTable logTable = ui.getLogsTable(); + + // create log table column model + DefaultTableColumnModelExt logColumnModel = new DefaultTableColumnModelExt(); + + { // Date + addColumnToModel(logColumnModel, SpeciesFrequencyLogsTableModel.LABEL); + } + + // create log table model + SpeciesFrequencyLogsTableModel logTableModel = new SpeciesFrequencyLogsTableModel(logColumnModel); + logTableModel.setRows(new ArrayList<SpeciesFrequencyLogRowModel>()); + + logTable.setModel(logTableModel); + logTable.setColumnModel(logColumnModel); + + // by default do not authorize to change column orders + logTable.getTableHeader().setReorderingAllowed(false); + listenValidatorValid(this.ui.getValidator(), model); + } @Override @@ -571,6 +660,13 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci String unit = model.getLengthStepCaracteristicUnit(); showInformationMessage(t("tutti.editSpeciesFrequencies.addMeasure", step, aroundLengthStep, unit)); } + + JXTable logsTable = getUI().getLogsTable(); + SpeciesFrequencyLogsTableModel logsTableModel = (SpeciesFrequencyLogsTableModel) logsTable.getModel(); + SpeciesFrequencyLogRowModel newRow = logsTableModel.createNewRow(); + newRow.setDate(new Date()); + newRow.setLengthStep(step); + logsTableModel.addNewRow(0, newRow); } public void editBatch(FrequencyCellEditor editor) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/ThreeColumnsSplitPaneModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/ThreeColumnsSplitPaneModel.java new file mode 100644 index 0000000..679af5c --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/ThreeColumnsSplitPaneModel.java @@ -0,0 +1,34 @@ +package fr.ifremer.tutti.ui.swing.util; + +import org.jdesktop.swingx.MultiSplitLayout; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class ThreeColumnsSplitPaneModel extends MultiSplitLayout.Split { + public static final String LEFT = "left"; + public static final String CENTER = "center"; + public static final String RIGHT = "right"; + + /** Creates a new instance of ThreeColumnsSplitPaneLayout */ + public ThreeColumnsSplitPaneModel() { + MultiSplitLayout.Split row = new MultiSplitLayout.Split(); + MultiSplitLayout.Leaf leftLeaf = new MultiSplitLayout.Leaf(LEFT); + leftLeaf.setWeight(0.1); + MultiSplitLayout.Leaf centerLeaf = new MultiSplitLayout.Leaf(CENTER); + centerLeaf.setWeight(0.5); + MultiSplitLayout.Leaf rightLeaf = new MultiSplitLayout.Leaf(RIGHT); + rightLeaf.setWeight(0.4); + + MultiSplitLayout.Divider divider1 = new MultiSplitLayout.Divider(); + divider1.setVisible(true); + + MultiSplitLayout.Divider divider2 = new MultiSplitLayout.Divider(); + divider2.setVisible(true); + + setChildren(leftLeaf, divider1, + centerLeaf, divider2, + rightLeaf); + } +} 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 7276739..1410ca0 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 @@ -1,5 +1,6 @@ application.action.create.error= application.error.ui.business.warning= +gtrph= swing.error.cannot.open.file= tutti.about.bottomText= tutti.about.message= @@ -1155,6 +1156,9 @@ tutti.editSpeciesFrequencies.field.totalWeight= tutti.editSpeciesFrequencies.field.totalWeight.tip= tutti.editSpeciesFrequencies.ichtyometerConnected= tutti.editSpeciesFrequencies.label.no.configuration= +tutti.editSpeciesFrequencies.logTable.header.date= +tutti.editSpeciesFrequencies.logTable.header.label= +tutti.editSpeciesFrequencies.logTable.header.lengthStep= tutti.editSpeciesFrequencies.simpleCountingAndFrequencies= tutti.editSpeciesFrequencies.table.header.lengthStep= tutti.editSpeciesFrequencies.table.header.number= 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 29d2a77..55e2323 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 @@ -1,5 +1,6 @@ application.action.create.error= application.error.ui.business.warning= +gtrph= swing.error.cannot.open.file=Aucun programme n'est défini pour ouvrir ce type de fichier. Enregistrez le fichier et ouvrez le en dehors de l'application tutti.about.bottomText=Copyright %s - %s - version %s tutti.about.message=<h3>Tutti</h3><p><strong>Outil de saisie de données d'opérations et de captures au cours des campagnes halieutiques.</strong></p><br/><p>Ce logiciel permettra la saisie en mer des données d'opération de pêche (positions, environnement, engin, etc) et des captures associées (composition de la capture en espèces scientifiques avec poids, nombres, tailles etc) pour l'ensemble des campagnes halieutiques réalisées par l'Ifremer.</p><p>Ce projet a été initiée en 2012 par l' [...] @@ -1131,6 +1132,7 @@ tutti.editSpeciesFrequencies.field.totalNumber.tip=Nombre total d'individus des tutti.editSpeciesFrequencies.field.totalWeight=Poids total tutti.editSpeciesFrequencies.field.totalWeight.tip=Poids total des lignes valides tutti.editSpeciesFrequencies.label.no.configuration=< Pas de configuration > +tutti.editSpeciesFrequencies.logTable.header.label=Logs tutti.editSpeciesFrequencies.simpleCountingAndFrequencies=Des mensurations ont été saisies dans le tableau. Saisir un simple dénombrement les effacera. tutti.editSpeciesFrequencies.table.header.lengthStep=Classe de taille tutti.editSpeciesFrequencies.table.header.number=Nombre diff --git a/tutti-ui-swing/src/main/resources/test.shp b/tutti-ui-swing/src/main/resources/test.shp new file mode 100644 index 0000000..63e155c Binary files /dev/null and b/tutti-ui-swing/src/main/resources/test.shp differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm