This is an automated email from the git hooks/post-receive script. New commit to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit 815f48cbc956f2bc62ba4b988107f71ee2b6309f Author: Kevin Morin <morin@codelutin.com> Date: Fri Feb 26 16:23:13 2016 +0100 - ajout du numéro de l'observation - suppression d'observations refs #8019 --- .../filtered-resources/tutti-help-fr.properties | 3 +- .../IndividualObservationBatchTableModel.java | 17 +++--- .../species/frequency/SpeciesFrequencyUI.jaxx | 8 ++- .../species/frequency/SpeciesFrequencyUI.jcss | 11 +++- .../frequency/SpeciesFrequencyUIHandler.java | 57 +++++++------------- .../frequency/actions/RemoveObservationAction.java | 63 ++++++++++++++++++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 10 ++++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 12 +++-- 8 files changed, 127 insertions(+), 54 deletions(-) diff --git a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties index 5c19430..a8feb3f 100644 --- a/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties +++ b/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Fri Feb 26 11:49:12 CET 2016 +#Fri Feb 26 15:28:11 CET 2016 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -300,6 +300,7 @@ tutti.editSpeciesBatch.sortSpeciesBatch.help=editFishingOperation.html\#captureE tutti.editSpeciesFrequencies.action.addLengthStepCaracteristic.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.cancel.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.generate.help=editFishingOperation.html\#captureEspecesMensurationActions +tutti.editSpeciesFrequencies.action.removeObservation.help= tutti.editSpeciesFrequencies.action.reset.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.saveAndClose.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.saveAndContinue.help=editFishingOperation.html\#captureEspecesMensurationActions diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java index f22197b..c59fd4a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java @@ -37,15 +37,10 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab private static final long serialVersionUID = 1L; - public static final ColumnIdentifier<IndividualObservationBatchRowModel> ID = ColumnIdentifier.newId( - IndividualObservationBatchRowModel.PROPERTY_ID, - n("tutti.editIndividualObservationBatch.table.header.id"), - n("tutti.editIndividualObservationBatch.table.header.id.tip")); - - public static final ColumnIdentifier<IndividualObservationBatchRowModel> SPECIES = ColumnIdentifier.newId( - IndividualObservationBatchRowModel.PROPERTY_SPECIES, - n("tutti.editIndividualObservationBatch.table.header.species"), - n("tutti.editIndividualObservationBatch.table.header.species.tip")); + public static final ColumnIdentifier<IndividualObservationBatchRowModel> RANK = ColumnIdentifier.newId( + IndividualObservationBatchRowModel.PROPERTY_RANK_ORDER, + n("tutti.editIndividualObservationBatch.table.header.rank"), + n("tutti.editIndividualObservationBatch.table.header.rank.tip")); public static final ColumnIdentifier<IndividualObservationBatchRowModel> WEIGHT = ColumnIdentifier.newId( IndividualObservationBatchRowModel.PROPERTY_WEIGHT, @@ -89,7 +84,7 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab super(columnModel, true, true); this.weightUnit = weightUnit; - setNoneEditableCols(ID); + setNoneEditableCols(RANK); } @Override @@ -99,6 +94,8 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab // by default empty row is not valid result.setValid(false); + result.setRankOrder(getRowCount() + 1); + return result; } } 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 5031b49..54ba830 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 @@ -82,6 +82,10 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { <SaveAndCloseSpeciesFrequencyAction id="saveAndCloseAction" constructorParams="this"/> <SaveAndContinueSpeciesFrequencyAction id="saveAndContinueAction" constructorParams="this"/> + <JPopupMenu id='obsTablePopup'> + <JMenuItem id='deleteObsRowsMenu'/> + </JPopupMenu> + <Table id='configurationPanel' fill="both" anchor="west" constraints='BorderLayout.CENTER'> <row> @@ -267,7 +271,9 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { onActionPerformed='model.setCopyIndividualObservationMode(CopyIndividualObservationMode.SIZE)'/> </HBox> <JScrollPane id='obsPanel' constraints="BorderLayout.CENTER"> - <JXTable id='obsTable'/> + <JXTable id='obsTable' + onMouseClicked='handler.autoSelectRowInTable(event, obsTablePopup)' + onKeyPressed='handler.openRowMenu(event, obsTablePopup)'/> </JScrollPane> </JPanel> </JSplitPane> 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 689d824..c51fe03 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 @@ -50,6 +50,15 @@ ComputableDataEditor { _help: {"tutti.editSpeciesFrequencies.help"}; } +#deleteObsRowsMenu { + actionIcon: delete2; + text: "tutti.editSpeciesFrequencies.action.removeObservation"; + toolTipText: "tutti.editSpeciesFrequencies.action.removeObservation.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.action.removeObservation.mnemonic"; + _simpleAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.RemoveObservationAction.class}; + _help: {"tutti.editSpeciesFrequencies.action.removeObservation.help"}; +} + //configurationPanel #frequencyModePanel { @@ -343,7 +352,7 @@ ComputableDataEditor { } #obsTable { - selectionMode: {ListSelectionModel.SINGLE_SELECTION}; + selectionMode: {ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}; selectionBackground: {null}; selectionForeground: {Color.BLACK}; sortable: false; 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 86c936e..41fec5d 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 @@ -88,6 +88,7 @@ import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTextField; import javax.swing.SwingUtilities; +import javax.swing.event.TableModelEvent; import javax.swing.table.TableCellRenderer; import java.awt.BorderLayout; import java.awt.Color; @@ -675,7 +676,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci //-- Internal methods --// //------------------------------------------------------------------------// - protected void initDataTable() { JXTable table = getTable(); @@ -891,12 +891,15 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci Decorator<CaracteristicQualitativeValue> caracteristicQualitativeDecorator = getDecorator(CaracteristicQualitativeValue.class, null); -// { -// // Id column -// -// addIdColumnToModel(columnModel, IndividualObservationBatchTableModel.ID, obsTable); -// -// } + { + // Rank column + + addIntegerColumnToModel(columnModel, + IndividualObservationBatchTableModel.RANK, + TuttiUI.INT_10_DIGITS_PATTERN, + obsTable); + + } { // Weight column @@ -1004,37 +1007,17 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci installTableKeyListener(columnModel, obsTable); - } + tableModel.addTableModelListener(e -> { -// protected void addIdColumnToModel(TableColumnModel model, -// ColumnIdentifier identifier, -// JTable table) { -// -// final TableCellRenderer defaultRenderer = table.getDefaultRenderer(Number.class); -// final Decorator<String> idDecorator = getDecorator(String.class, DecoratorService.SPACE_EVERY_3_DIGIT); -// -// TableCellRenderer idTableCellRenderer = new TableCellRenderer() { -// @Override -// public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { -// -// String text = null; -// if (value != null) { -// text = idDecorator.toString(value); -// } -// -// Component result = defaultRenderer.getTableCellRendererComponent(table, text, isSelected, hasFocus, row, column); -// if (result instanceof JLabel) { -// JLabel jLabel = (JLabel) result; -// jLabel.setHorizontalTextPosition(SwingConstants.RIGHT); -// -// } -// return result; -// } -// }; -// -// addColumnToModel(model, null, idTableCellRenderer, identifier); -// -// } + if (e.getType() == TableModelEvent.DELETE) { + int firstRow = e.getFirstRow(); + for (int i = firstRow ; i < tableModel.getRowCount() ; i++) { + tableModel.getRows().get(i).setRankOrder(i + 1); + } + } + }); + + } protected void consumeFeedRecord(FeedReaderMeasureRecord record) { if (record.isValid()) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java new file mode 100644 index 0000000..ed32fd8 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/RemoveObservationAction.java @@ -0,0 +1,63 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions; + +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI; +import fr.ifremer.tutti.ui.swing.util.actions.SimpleActionSupport; +import org.jdesktop.swingx.JXTable; + +import javax.swing.JOptionPane; +import java.util.Collection; +import java.util.HashSet; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class RemoveObservationAction extends SimpleActionSupport<SpeciesFrequencyUI> { + + public RemoveObservationAction(SpeciesFrequencyUI speciesFrequencyUI) { + super(speciesFrequencyUI, false); + } + + @Override + protected void onActionPerformed(SpeciesFrequencyUI ui) { + JXTable obsTable = ui.getObsTable(); + IndividualObservationBatchTableModel obsTableModel = + (IndividualObservationBatchTableModel) obsTable.getModel(); + + int[] selectedRowIndexes = obsTable.getSelectedRows(); + Collection<IndividualObservationBatchRowModel> rowsToDelete = new HashSet<>(); + + for (int selectedRowIndex : selectedRowIndexes) { + rowsToDelete.add(obsTableModel.getRows().get(selectedRowIndex)); + } + + String message; + if (rowsToDelete.size() == 1) { + message = t("tutti.editSpeciesFrequencies.action.removeObservation.confirm.message"); + } else { + message = t("tutti.editSpeciesFrequencies.action.removeObservations.confirm.message", rowsToDelete.size()); + } + + int answer = JOptionPane.showConfirmDialog(ui, + message, + t("tutti.editSpeciesFrequencies.action.removeObservations.confirm.title"), + JOptionPane.YES_NO_OPTION); + + + if (answer == JOptionPane.YES_OPTION) { + + int minSelection = obsTable.getSelectionModel().getMinSelectionIndex(); + int maxSelection = obsTable.getSelectionModel().getMaxSelectionIndex(); + obsTableModel.getRows().removeAll(rowsToDelete); + obsTableModel.fireTableRowsDeleted(minSelection, maxSelection); + + if (obsTable.getRowCount() == 0) { + obsTableModel.addNewRow(); + } + } + } +} 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 1046e78..d62ccbc 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 @@ -4,6 +4,7 @@ Pr\\u00e9l\\u00e8vement= application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= +jaxx.application.common.askBeforeDelete.help= left= next= right= @@ -1424,6 +1425,12 @@ tutti.editSpeciesFrequencies.action.cancel.tip= tutti.editSpeciesFrequencies.action.generate= tutti.editSpeciesFrequencies.action.generate.mnemonic= tutti.editSpeciesFrequencies.action.generate.tip= +tutti.editSpeciesFrequencies.action.removeObservation= +tutti.editSpeciesFrequencies.action.removeObservation.confirm.message= +tutti.editSpeciesFrequencies.action.removeObservation.mnemonic= +tutti.editSpeciesFrequencies.action.removeObservation.tip= +tutti.editSpeciesFrequencies.action.removeObservations.confirm.message= +tutti.editSpeciesFrequencies.action.removeObservations.confirm.title= tutti.editSpeciesFrequencies.action.reset= tutti.editSpeciesFrequencies.action.reset.mnemonic= tutti.editSpeciesFrequencies.action.reset.tip= @@ -1501,6 +1508,9 @@ tutti.editSpeciesFrequencies.logTable.header.label= tutti.editSpeciesFrequencies.logTable.header.lengthStep= tutti.editSpeciesFrequencies.logTable.removeRow.confirm.message= tutti.editSpeciesFrequencies.logTable.removeRow.confirm.title= +tutti.editSpeciesFrequencies.removeObservationRow.message= +tutti.editSpeciesFrequencies.removeObservationRows.message= +tutti.editSpeciesFrequencies.removeObservationRows.title= 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 123b840..02ff596 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 @@ -919,16 +919,14 @@ tutti.editIndividualObservationBatch.table.header.comment=Commentaire tutti.editIndividualObservationBatch.table.header.comment.tip=Commentaire tutti.editIndividualObservationBatch.table.header.file=Pièces jointes tutti.editIndividualObservationBatch.table.header.file.tip=Pièces jointes -tutti.editIndividualObservationBatch.table.header.id=Id -tutti.editIndividualObservationBatch.table.header.id.tip=Identifiant du lot tutti.editIndividualObservationBatch.table.header.lengthStepCaracteristic=Classe de taille tutti.editIndividualObservationBatch.table.header.lengthStepCaracteristic.tip=Classe de taille tutti.editIndividualObservationBatch.table.header.otherCaracteristics=Autres caractéristiques tutti.editIndividualObservationBatch.table.header.otherCaracteristics.tip=Autres caractéristiques +tutti.editIndividualObservationBatch.table.header.rank=N° +tutti.editIndividualObservationBatch.table.header.rank.tip=N° de l'observation tutti.editIndividualObservationBatch.table.header.size=Taille tutti.editIndividualObservationBatch.table.header.size.tip=Taille -tutti.editIndividualObservationBatch.table.header.species=Espèce -tutti.editIndividualObservationBatch.table.header.species.tip=Espèce tutti.editIndividualObservationBatch.table.header.weight=Poids tutti.editIndividualObservationBatch.table.header.weight.tip=Poids individuel tutti.editIndividualObservationCaracteristics.action.cancel=Annuler @@ -1349,6 +1347,12 @@ tutti.editSpeciesFrequencies.action.cancel.tip=Annuler l'édition des mensuratio tutti.editSpeciesFrequencies.action.generate=Générer tutti.editSpeciesFrequencies.action.generate.mnemonic=G tutti.editSpeciesFrequencies.action.generate.tip=Générer les mensurations +tutti.editSpeciesFrequencies.action.removeObservation=Supprimer +tutti.editSpeciesFrequencies.action.removeObservation.confirm.message=<html>Vous êtes sur le point de supprimer l'observation sélectionnée.<hr/>Êtes-vous sur de vouloir la supprimer ?</html> +tutti.editSpeciesFrequencies.action.removeObservation.mnemonic=S +tutti.editSpeciesFrequencies.action.removeObservation.tip=Supprimer les lignes sélectionnées +tutti.editSpeciesFrequencies.action.removeObservations.confirm.message=<html>Vous êtes sur le point de supprimer les %s observations sélectionnées.<hr/>Êtes-vous sur de vouloir les supprimer ?</html> +tutti.editSpeciesFrequencies.action.removeObservations.confirm.title=Suppression d'observations individuelles tutti.editSpeciesFrequencies.action.reset=Réinitialiser tutti.editSpeciesFrequencies.action.reset.mnemonic=R tutti.editSpeciesFrequencies.action.reset.tip=Supprimer toutes les mensurations saisies -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.