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 c517126c14f978134e1d7cf79d2d19e17a646fa6 Author: Kevin Morin <morin@codelutin.com> Date: Thu Oct 23 18:04:40 2014 +0200 fixes #6000 [BIGFIN] Idée d'amélioration : graphique dans l'écran mensuration et liste enregistrement : s'imprégner de l'application android WLO --- .../BenthosFrequencyLogCellComponent.java} | 44 +++--- .../frequency/BenthosFrequencyLogRowModel.java | 43 ++++++ .../frequency/BenthosFrequencyLogsTableModel.java | 58 ++++++++ .../frequency/BenthosFrequencyTableModel.java | 9 +- .../benthos/frequency/BenthosFrequencyUI.css | 17 +++ .../benthos/frequency/BenthosFrequencyUI.jaxx | 18 ++- .../frequency/BenthosFrequencyUIHandler.java | 162 ++++++++++++++++++++- .../SpeciesFrequencyLogCellComponent.java | 6 +- .../frequency/SpeciesFrequencyTableModel.java | 3 +- .../frequency/SpeciesFrequencyUIHandler.java | 4 + .../resources/i18n/tutti-ui-swing_en_GB.properties | 3 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 1 + .../src/main/resources/icons/action-delete.png | Bin 715 -> 363 bytes 13 files changed, 331 insertions(+), 37 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogCellComponent.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyLogCellComponent.java similarity index 75% copy from tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogCellComponent.java copy to tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyLogCellComponent.java index 8128f2b..8dc9ad5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogCellComponent.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyLogCellComponent.java @@ -1,4 +1,4 @@ -package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; +package fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.frequency; /* * #%L @@ -25,10 +25,8 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; import jaxx.runtime.swing.JAXXWidgetUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import sun.swing.DefaultLookup; import javax.swing.*; -import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import java.awt.*; @@ -39,25 +37,25 @@ import java.io.Serializable; import static org.nuiton.i18n.I18n.t; /** - * Component to render and edit frequency stuff from batch table. + * Component to render and delete log items from logs table. * - * @author tchemit <chemit@codelutin.com> - * @since 0.2 + * @author Kevin Morin (Code Lutin) + * @since 3.8 */ -public class SpeciesFrequencyLogCellComponent extends JPanel implements Serializable { +public class BenthosFrequencyLogCellComponent extends JPanel implements Serializable { private static final long serialVersionUID = 1L; /** Logger. */ - private static final Log log = LogFactory.getLog(SpeciesFrequencyLogCellComponent.class); + private static final Log log = LogFactory.getLog(BenthosFrequencyLogCellComponent.class); private JLabel label = new JLabel(); private JButton deleteButton = new JButton(); - private SpeciesFrequencyLogRowModel row; + private BenthosFrequencyLogRowModel row; - public SpeciesFrequencyLogCellComponent() { + public BenthosFrequencyLogCellComponent() { setLayout(new BorderLayout()); Font defaultFont = UIManager.getFont("Table.font"); @@ -73,21 +71,21 @@ public class SpeciesFrequencyLogCellComponent extends JPanel implements Serializ add(deleteButton, BorderLayout.EAST); } - public SpeciesFrequencyLogCellComponent(final SpeciesFrequencyUIHandler speciesFrequencyUIHandler) { + public BenthosFrequencyLogCellComponent(final BenthosFrequencyUIHandler benthosFrequencyUIHandler) { this(); deleteButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (row != null) { int i = JOptionPane.showConfirmDialog( - speciesFrequencyUIHandler.getTopestUI(), + benthosFrequencyUIHandler.getTopestUI(), t("tutti.editSpeciesFrequencies.logTable.removeRow.confirm.message", row.getLabel()), t("tutti.editSpeciesFrequencies.logTable.removeRow.confirm.title"), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (i == JOptionPane.YES_OPTION) { - speciesFrequencyUIHandler.decrementLengthStep(row); + benthosFrequencyUIHandler.decrementLengthStep(row); } } } @@ -98,7 +96,7 @@ public class SpeciesFrequencyLogCellComponent extends JPanel implements Serializ label.setText(data); } - public void setRow(SpeciesFrequencyLogRowModel row) { + public void setRow(BenthosFrequencyLogRowModel row) { this.row = row; } @@ -106,18 +104,18 @@ public class SpeciesFrequencyLogCellComponent extends JPanel implements Serializ return new FrequencyLogCellRenderer(); } - public static TableCellEditor newEditor(SpeciesFrequencyUIHandler speciesFrequencyUIHandler) { - return new FrequencyLogCellEditor(speciesFrequencyUIHandler); + public static TableCellEditor newEditor(BenthosFrequencyUIHandler benthosFrequencyUIHandler) { + return new FrequencyLogCellEditor(benthosFrequencyUIHandler); } public static class FrequencyLogCellEditor extends AbstractCellEditor implements TableCellEditor { private static final long serialVersionUID = 1L; - protected final SpeciesFrequencyLogCellComponent component; + protected final BenthosFrequencyLogCellComponent component; - public FrequencyLogCellEditor(SpeciesFrequencyUIHandler speciesFrequencyUIHandler) { - component = new SpeciesFrequencyLogCellComponent(speciesFrequencyUIHandler); + public FrequencyLogCellEditor(BenthosFrequencyUIHandler benthosFrequencyUIHandler) { + component = new BenthosFrequencyLogCellComponent(benthosFrequencyUIHandler); } @Override @@ -127,8 +125,8 @@ public class SpeciesFrequencyLogCellComponent extends JPanel implements Serializ int row, int column) { - SpeciesFrequencyLogsTableModel tableModel = (SpeciesFrequencyLogsTableModel) table.getModel(); - SpeciesFrequencyLogRowModel editRow = tableModel.getEntry(row); + BenthosFrequencyLogsTableModel tableModel = (BenthosFrequencyLogsTableModel) table.getModel(); + BenthosFrequencyLogRowModel editRow = tableModel.getEntry(row); component.setRow(editRow); String data = (String) value; @@ -146,10 +144,10 @@ public class SpeciesFrequencyLogCellComponent extends JPanel implements Serializ public static class FrequencyLogCellRenderer implements TableCellRenderer { - protected final SpeciesFrequencyLogCellComponent component; + protected final BenthosFrequencyLogCellComponent component; public FrequencyLogCellRenderer() { - component = new SpeciesFrequencyLogCellComponent(); + component = new BenthosFrequencyLogCellComponent(); } @Override diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyLogRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyLogRowModel.java new file mode 100644 index 0000000..b2ba620 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyLogRowModel.java @@ -0,0 +1,43 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.frequency; + +import org.apache.commons.lang3.time.DateFormatUtils; +import org.jdesktop.beans.AbstractSerializableBean; + +import java.util.Date; + +/** + * @author Kevin Morin (Code Lutin) + * @since 3.8 + */ +public class BenthosFrequencyLogRowModel extends AbstractSerializableBean { + + 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(); + } + + public void setLabel(String label) { + //do nothing, used by the editor + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyLogsTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyLogsTableModel.java new file mode 100644 index 0000000..3f32637 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyLogsTableModel.java @@ -0,0 +1,58 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.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 org.jdesktop.swingx.table.TableColumnModelExt; +import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; +import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; + +import static org.nuiton.i18n.I18n.n; + +/** + * Model of the benhtos frequency log table. + * + * @author Kevin Morin (Code Lutin) + * @since 3.8 + */ +public class BenthosFrequencyLogsTableModel extends AbstractApplicationTableModel<BenthosFrequencyLogRowModel> { + + private static final long serialVersionUID = 1L; + + public static final ColumnIdentifier<BenthosFrequencyRowModel> LABEL = ColumnIdentifier.newId( + BenthosFrequencyLogRowModel.PROPERTY_LABEL, + n("tutti.editBenthosFrequencies.logTable.header.label"), + n("tutti.editBenthosFrequencies.logTable.header.label")); + + + public BenthosFrequencyLogsTableModel(TableColumnModelExt columnModel) { + super(columnModel, true, false); + setNoneEditableCols(); + } + + @Override + public BenthosFrequencyLogRowModel createNewRow() { + BenthosFrequencyLogRowModel result = new BenthosFrequencyLogRowModel(); + return result; + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyTableModel.java index 2c69ea3..e3bac3f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyTableModel.java @@ -71,13 +71,17 @@ public class BenthosFrequencyTableModel extends AbstractApplicationTableModel<Be */ protected final WeightUnit weightUnit; + protected final PropertyChangeListener rowPropertyChangeListener; + public BenthosFrequencyTableModel(WeightUnit weightUnit, TableColumnModelExt columnModel, - BenthosFrequencyUIModel uiModel) { + BenthosFrequencyUIModel uiModel, + PropertyChangeListener rowPropertyChangeListener) { super(columnModel, true, true); this.weightUnit = weightUnit; this.uiModel = uiModel; this.rowCache = Maps.newTreeMap(); + this.rowPropertyChangeListener = rowPropertyChangeListener; setNoneEditableCols(); } @@ -112,6 +116,9 @@ public class BenthosFrequencyTableModel extends AbstractApplicationTableModel<Be } } }); + + 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/benthos/frequency/BenthosFrequencyUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.css index 819a82c..169c3a0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.css @@ -192,6 +192,23 @@ ComputableDataEditor { layout: {dataFieldLayout}; } +#firstSplitPane { + oneTouchExpandable: true; + resizeWeight: 0.6; +} + +#secondSplitPane { + oneTouchExpandable: true; + resizeWeight: 0.1; +} + +#logsTable { + selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionBackground: {null}; + selectionForeground: {Color.BLACK}; + sortable: false; +} + #tableScrollPane { _validatorLabel: {t("tutti.editBenthosFrequencies.field.rows")}; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.jaxx index dc0e313..dfeed1f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.jaxx @@ -193,9 +193,21 @@ public BenthosFrequencyUI(TuttiUI parentUI) { </JPanel> <JPanel id='dataFieldPanel' constraints='BorderLayout.CENTER'> - <JScrollPane id='tableScrollPane' constraints='"lengthCaracteristicPmfm"'> - <JXTable id='table'/> - </JScrollPane> + <JSplitPane constraints='"lengthCaracteristicPmfm"' + id="firstSplitPane"> + <JSplitPane id="secondSplitPane"> + <JScrollPane id='logsScrollPane' > + <JXTable id='logsTable'/> + </JScrollPane> + <JScrollPane id='tableScrollPane' > + <JXTable id='table'/> + </JScrollPane> + </JSplitPane> + <JPanel id="histogramPanel" + layout="{new BorderLayout()}"> + </JPanel> + </JSplitPane> + <Table constraints='"noLengthCaracteristicPmfm"' fill='horizontal'> <row> <cell columns='2'> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java index ebe7ec5..f7b6eea 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java @@ -26,6 +26,13 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import fr.ifremer.tutti.util.Numbers; +import org.jdesktop.swingx.decorator.HighlightPredicate; +import org.jdesktop.swingx.decorator.Highlighter; +import org.jfree.chart.ChartFactory; +import org.jfree.chart.ChartPanel; +import org.jfree.chart.JFreeChart; +import org.jfree.data.xy.XYSeries; +import org.jfree.data.xy.XYSeriesCollection; import org.nuiton.jaxx.application.swing.util.Cancelable; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.persistence.entities.TuttiEntities; @@ -49,15 +56,15 @@ import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; -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.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; @@ -80,6 +87,8 @@ public class BenthosFrequencyUIHandler extends AbstractTuttiTableUIHandler<Benth private Map<String, Caracteristic> lengthStepCaracteristics; + private XYSeriesCollection dataset; + /** * Weight unit. * @@ -122,10 +131,20 @@ public class BenthosFrequencyUIHandler extends AbstractTuttiTableUIHandler<Benth BenthosFrequencyUIModel model = getModel(); model.setEmptyRows(Sets.<BenthosFrequencyRowModel>newHashSet()); + if (CollectionUtils.isNotEmpty(rows)) { + XYSeries series = dataset.getSeries(0); + series.clear(); + for (BenthosFrequencyRowModel row : rows) { model.updateRowWithWeight(row); + + Float lengthStep = row.getLengthStep(); + if (lengthStep != null) { + series.add(lengthStep, row.getNumber()); + } } + for (BenthosFrequencyRowModel row : rows) { recomputeRowValidState(row); } @@ -292,12 +311,17 @@ public class BenthosFrequencyUIHandler extends AbstractTuttiTableUIHandler<Benth if (componentToFocus != null) { componentToFocus.grabFocus(); } + updateLogVisibility(); } } ); } }); + // init histogram + final XYSeries series = initHistogram(ui, step); + + // init data table JXTable table = getTable(); // create table column model @@ -332,7 +356,25 @@ public class BenthosFrequencyUIHandler extends AbstractTuttiTableUIHandler<Benth new BenthosFrequencyTableModel( weightUnit, columnModel, - model); + model, + new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + BenthosFrequencyRowModel row = (BenthosFrequencyRowModel) evt.getSource(); + + if (BenthosFrequencyRowModel.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); @@ -342,6 +384,8 @@ public class BenthosFrequencyUIHandler extends AbstractTuttiTableUIHandler<Benth installTableKeyListener(columnModel, table); + initLogTable(ui); + listenValidatorValid(ui.getValidator(), model); } @@ -514,6 +558,13 @@ public class BenthosFrequencyUIHandler extends AbstractTuttiTableUIHandler<Benth model.setTotalNumber(totalNumber + 1); getTable().scrollRowToVisible(rowIndex); + + JXTable logsTable = getUI().getLogsTable(); + BenthosFrequencyLogsTableModel logsTableModel = (BenthosFrequencyLogsTableModel) logsTable.getModel(); + BenthosFrequencyLogRowModel newRow = logsTableModel.createNewRow(); + newRow.setDate(new Date()); + newRow.setLengthStep(step); + logsTableModel.addNewRow(0, newRow); } public void editBatch(BenthosFrequencyCellComponent.FrequencyCellEditor editor) { @@ -670,12 +721,21 @@ public class BenthosFrequencyUIHandler extends AbstractTuttiTableUIHandler<Benth // keep batch (will be used to push back editing entry) model.setBatch(speciesBatch); + + //remove log rows + BenthosFrequencyLogsTableModel logsTableModel = (BenthosFrequencyLogsTableModel) getUI().getLogsTable().getModel(); + logsTableModel.setRows(new ArrayList<BenthosFrequencyLogRowModel>()); + } public void reset() { // remove all frequencies getModel().setRows(Lists.<BenthosFrequencyRowModel>newArrayList()); + + //remove log rows + BenthosFrequencyLogsTableModel logsTableModel = (BenthosFrequencyLogsTableModel) getUI().getLogsTable().getModel(); + logsTableModel.setRows(new ArrayList<BenthosFrequencyLogRowModel>()); } public void saveAndClose() { @@ -706,6 +766,28 @@ public class BenthosFrequencyUIHandler extends AbstractTuttiTableUIHandler<Benth } } + /** + * Decrement the frequency of the lengthstep of the row + * @param logRow + */ + public void decrementLengthStep(BenthosFrequencyLogRowModel logRow) { + if (logRow != null) { + BenthosFrequencyTableModel tableModel = getTableModel(); + BenthosFrequencyRowModel speciesFrequencyRowModel = tableModel.getRowCache().get(logRow.getLengthStep()); + if (speciesFrequencyRowModel != null) { + Integer number = speciesFrequencyRowModel.getNumber(); + if (number != null && number > 0) { + speciesFrequencyRowModel.setNumber(number - 1); + tableModel.fireTableDataChanged(); + } + } + + BenthosFrequencyLogsTableModel logsTableModel = (BenthosFrequencyLogsTableModel) getUI().getLogsTable().getModel(); + int index = logsTableModel.getRowIndex(logRow); + logsTableModel.removeRow(index); + } + } + //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// @@ -822,4 +904,74 @@ public class BenthosFrequencyUIHandler extends AbstractTuttiTableUIHandler<Benth } return precision; } + + protected void updateLogVisibility() { + + boolean logVisible = getModel().isRafaleMode(); + BenthosFrequencyUI ui = getUI(); + JSplitPane firstSplitPane = ui.getFirstSplitPane(); + JSplitPane secondSplitPane = ui.getSecondSplitPane(); + + int lastDividerLocation = secondSplitPane.getLastDividerLocation(); + if (lastDividerLocation == 0) { + lastDividerLocation = 200; + } + secondSplitPane.setDividerLocation(logVisible ? lastDividerLocation : 0); + secondSplitPane.setDividerSize(logVisible ? firstSplitPane.getDividerSize() : 0); + + ui.getLogsScrollPane().setVisible(logVisible); + } + + protected XYSeries initHistogram(BenthosFrequencyUI ui, float step) { + 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); + return series; + } + + protected void initLogTable(BenthosFrequencyUI ui) { + JXTable logTable = ui.getLogsTable(); + + // create log table column model + DefaultTableColumnModelExt logColumnModel = new DefaultTableColumnModelExt(); + + { // Date + addColumnToModel(logColumnModel, + BenthosFrequencyLogCellComponent.newEditor(this), + BenthosFrequencyLogCellComponent.newRender(), + BenthosFrequencyLogsTableModel.LABEL); + } + + // create log table model + BenthosFrequencyLogsTableModel logTableModel = new BenthosFrequencyLogsTableModel(logColumnModel); + logTableModel.setRows(new ArrayList<BenthosFrequencyLogRowModel>()); + + logTable.setModel(logTableModel); + logTable.setColumnModel(logColumnModel); + + // by default do not authorize to change column orders + logTable.getTableHeader().setReorderingAllowed(false); + Highlighter evenHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + HighlightPredicate.ODD, +// Color.RED); + getConfig().getColorAlternateRow()); + logTable.addHighlighter(evenHighlighter); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogCellComponent.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogCellComponent.java index 8128f2b..47ca61d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogCellComponent.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyLogCellComponent.java @@ -39,10 +39,10 @@ import java.io.Serializable; import static org.nuiton.i18n.I18n.t; /** - * Component to render and edit frequency stuff from batch table. + * Component to render and delete log items from logs table. * - * @author tchemit <chemit@codelutin.com> - * @since 0.2 + * @author Kevin Morin (Code Lutin) + * @since 3.8 */ public class SpeciesFrequencyLogCellComponent extends JPanel implements Serializable { 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 83f74ac..0ac5ae6 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,7 +24,6 @@ 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; @@ -153,4 +152,4 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp } } } -} +} \ No newline at end of file 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 6d8be0f..2c264ee 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 @@ -166,16 +166,20 @@ 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); } 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 04c3fcc..2133567 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 @@ -527,7 +527,10 @@ tutti.editBenthosFrequencies.field.totalNumber.tip= tutti.editBenthosFrequencies.field.totalWeight= tutti.editBenthosFrequencies.field.totalWeight.tip= tutti.editBenthosFrequencies.label.no.configuration= +tutti.editBenthosFrequencies.logTable.header.label= tutti.editBenthosFrequencies.simpleCountingAndFrequencies= +tutti.editBenthosFrequencies.table.header.lengthStep= +tutti.editBenthosFrequencies.table.header.number= tutti.editBenthosFrequencies.title= tutti.editBenthosFrequencies.title.addLengthStepCaracteristic= tutti.editCaracteristics.title= 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 8b61979..8a0a2be 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 @@ -517,6 +517,7 @@ tutti.editBenthosFrequencies.field.totalNumber.tip=Nombre total d'individus des tutti.editBenthosFrequencies.field.totalWeight=Poids total tutti.editBenthosFrequencies.field.totalWeight.tip=Poids total des lignes valides tutti.editBenthosFrequencies.label.no.configuration=< Pas de configuration > +tutti.editBenthosFrequencies.logTable.header.label=Logs tutti.editBenthosFrequencies.simpleCountingAndFrequencies=Des mensurations ont été saisies dans le tableau. Saisir un simple dénombrement les effacera. tutti.editBenthosFrequencies.title=Mensuration tutti.editBenthosFrequencies.title.addLengthStepCaracteristic=Choisir une autre caractéristique diff --git a/tutti-ui-swing/src/main/resources/icons/action-delete.png b/tutti-ui-swing/src/main/resources/icons/action-delete.png index 08f2493..afe22ba 100644 Binary files a/tutti-ui-swing/src/main/resources/icons/action-delete.png and b/tutti-ui-swing/src/main/resources/icons/action-delete.png differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.