r1194 - in trunk/tutti-ui-swing/src/main: filtered-resources java/fr/ifremer/tutti/ui/swing/content/operation/catches java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency java/fr/ifremer/tutti/ui/swing/content/operation/catches/species java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency resources/i18n
Author: tchemit Date: 2013-09-19 23:16:52 +0200 (Thu, 19 Sep 2013) New Revision: 1194 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1194 Log: fixes #3271: [MENSURATION] ajout bouton "enregistrer et passer ?\195?\160 l'esp?\195?\168ce suivante" dans ?\195?\169cran mensurations Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-09-19 21:16:52 UTC (rev 1194) @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Thu Sep 19 11:22:41 CEST 2013 +#Thu Sep 19 23:07:37 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -90,6 +90,8 @@ tutti.editBenthosFrequencies.action.cancel.help=editFishingOperation.html\#captureBenthosActions tutti.editBenthosFrequencies.action.generate.help=editFishingOperation.html\#captureBenthosActions tutti.editBenthosFrequencies.action.save.help=editFishingOperation.html\#captureBenthosActions +tutti.editBenthosFrequencies.action.saveAndClose.help= +tutti.editBenthosFrequencies.action.saveAndContinue.help= tutti.editBenthosFrequencies.field.lengthStepCaracteristic.help=editFishingOperation.html\#captureBenthosFields tutti.editBenthosFrequencies.field.maxStep.help=editFishingOperation.html\#captureBenthosFields tutti.editBenthosFrequencies.field.minStep.help=editFishingOperation.html\#captureBenthosFields @@ -245,6 +247,8 @@ tutti.editSpeciesFrequencies.action.cancel.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.generate.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.save.help=editFishingOperation.html\#captureEspecesMensurationActions +tutti.editSpeciesFrequencies.action.saveAndClose.help= +tutti.editSpeciesFrequencies.action.saveAndContinue.help= tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.maxStep.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.minStep.help=editFishingOperation.html\#captureEspecesMensurationFields Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-09-19 21:16:52 UTC (rev 1194) @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Thu Sep 19 11:22:41 CEST 2013 +#Thu Sep 19 22:01:50 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -89,7 +89,8 @@ tutti.editBenthosBatch.help=editFishingOperation.html\#captureBenthos tutti.editBenthosFrequencies.action.cancel.help=editFishingOperation.html\#captureBenthosActions tutti.editBenthosFrequencies.action.generate.help=editFishingOperation.html\#captureBenthosActions -tutti.editBenthosFrequencies.action.save.help=editFishingOperation.html\#captureBenthosActions +tutti.editBenthosFrequencies.action.saveAndContinue.help=editFishingOperation.html\#captureBenthosActions +tutti.editBenthosFrequencies.action.saveAndClose.help=editFishingOperation.html\#captureBenthosActions tutti.editBenthosFrequencies.field.lengthStepCaracteristic.help=editFishingOperation.html\#captureBenthosFields tutti.editBenthosFrequencies.field.maxStep.help=editFishingOperation.html\#captureBenthosFields tutti.editBenthosFrequencies.field.minStep.help=editFishingOperation.html\#captureBenthosFields @@ -244,7 +245,8 @@ tutti.editSpeciesBatch.help=editFishingOperation.html\#captureEspeces tutti.editSpeciesFrequencies.action.cancel.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.generate.help=editFishingOperation.html\#captureEspecesMensurationActions -tutti.editSpeciesFrequencies.action.save.help=editFishingOperation.html\#captureEspecesMensurationActions +tutti.editSpeciesFrequencies.action.saveAndClose.help=editFishingOperation.html\#captureEspecesMensurationActions +tutti.editSpeciesFrequencies.action.saveAndContinue.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.maxStep.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.minStep.help=editFishingOperation.html\#captureEspecesMensurationFields Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-09-19 21:16:52 UTC (rev 1194) @@ -289,17 +289,17 @@ ); } - public void editSpeciesFrequencies(SpeciesBatchRowModel editRow, - SpeciesFrequencyCellComponent.FrequencyCellEditor editor) { + public void editSpeciesFrequencies(SpeciesFrequencyCellComponent.FrequencyCellEditor editor) { SpeciesFrequencyUI frequencyEditor = ui.getSpeciesTabFrequencyEditor(); - frequencyEditor.getHandler().editBatch(editRow, editor); + frequencyEditor.getHandler().editBatch(editor); // open frequency editor setSpeciesSelectedCard(EditCatchesUIHandler.EDIT_FREQUENCY_CARD); // update title + SpeciesBatchRowModel editRow = editor.getEditRow(); String title = buildReminderLabelTitle(editRow.getSpecies(), editRow, ui.getSpeciesTabFishingOperationReminderLabel().getTitle(), @@ -362,17 +362,17 @@ } } - public void editBenthosFrequencies(BenthosBatchRowModel editRow, - BenthosFrequencyCellComponent.FrequencyCellEditor editor) { + public void editBenthosFrequencies(BenthosFrequencyCellComponent.FrequencyCellEditor editor) { BenthosFrequencyUI frequencyEditor = ui.getBenthosTabFrequencyEditor(); - frequencyEditor.getHandler().editBatch(editRow, editor); + frequencyEditor.getHandler().editBatch(editor); // open frequency editor setBenthosSelectedCard(EditCatchesUIHandler.EDIT_FREQUENCY_CARD); // update title + BenthosBatchRowModel editRow = editor.getEditRow(); String title = buildReminderLabelTitle(editRow.getSpecies(), editRow, ui.getBenthosTabFishingOperationReminderLabel().getTitle(), Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java 2013-09-19 21:16:52 UTC (rev 1194) @@ -216,4 +216,25 @@ } return result; } + + /** + * Return the next editable row index for frequency from the given + * {@code rowIndex}, or {@code null} if none found. + * + * @param rowIndex the starting index where to look + * @return the next editable row index for frequency from the given {@code rowIndex}, or {@code null} if none found. + * @since 2.5 + */ + public Integer getNextEditableFrequencyRow(Integer rowIndex) { + Integer result = null; + + for (int i = rowIndex, max = getRowCount(); i < max; i++) { + BenthosBatchRowModel entry = getEntry(i); + if (entry.isBatchLeaf()) { + result = i; + break; + } + } + return result; + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyCellComponent.java 2013-09-19 21:16:52 UTC (rev 1194) @@ -119,6 +119,8 @@ protected Integer rowIndex; + protected Integer nextEditableRowIndex; + protected Integer columnIndex; public FrequencyCellEditor(BenthosBatchUI ui, Color computedDataColor) { @@ -145,22 +147,35 @@ }); } + public BenthosBatchRowModel getEditRow() { + return editRow; + } + + public Integer getNextEditableRowIndex() { + return nextEditableRowIndex; + } + public void startEdit() { Preconditions.checkNotNull(tableModel, "No table model assigned."); Preconditions.checkNotNull(editRow, "No editRow found."); + // compute the next editable row + nextEditableRowIndex = + tableModel.getNextEditableFrequencyRow(rowIndex + 1); + if (log.isDebugEnabled()) { - log.debug("Will edit frequencies for row: " + rowIndex); + log.debug("Will edit frequencies for row: " + rowIndex + + ", nextEditableRow: " + nextEditableRowIndex); } EditCatchesUI parent = SwingUtil.getParentContainer(ui, EditCatchesUI.class); - parent.getHandler().editBenthosFrequencies(editRow, this); + parent.getHandler().editBenthosFrequencies(this); } - public void validateEdition(BenthosFrequencyUIModel frequencyModel) { + public void save(BenthosFrequencyUIModel frequencyModel, boolean quit) { if (frequencyModel.isValid()) { // at close, synch back frequencies @@ -198,15 +213,31 @@ ui.getHandler().updateTotalFromFrequencies(editRow); } - int r = rowIndex; - int c = columnIndex; + if (quit) { + int r = rowIndex; + int c = columnIndex; - // stop edition - stopCellEditing(); + // stop edition + stopCellEditing(); - // reselect this cell - AbstractSelectTableAction.doSelectCell(table, r, c); - table.requestFocus(); + // reselect this cell + AbstractSelectTableAction.doSelectCell(table, r, c); + table.requestFocus(); + + } else { + + // use now the next row data + rowIndex = nextEditableRowIndex; + + // load the row + editRow = tableModel.getEntry(rowIndex); + + // will save the row in the species row + AbstractSelectTableAction.doSelectCell(table, rowIndex, columnIndex); + + // start edit + startEdit(); + } } @Override @@ -252,6 +283,7 @@ public void cancelCellEditing() { super.cancelCellEditing(); rowIndex = null; + nextEditableRowIndex = null; columnIndex = null; editRow = null; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.css 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.css 2013-09-19 21:16:52 UTC (rev 1194) @@ -33,7 +33,7 @@ showPopupButton: {handler.getConfig().isShowNumberEditorButton()}; } -#editSpeciesFrequenciesTopPanel { +#editBenthosFrequenciesTopPanel { _help: {"tutti.editBenthosFrequencies.help"}; } @@ -266,13 +266,22 @@ _help: {"tutti.editBenthosFrequencies.action.cancel.help"}; } -#saveButton { +#saveAndContinueButton { actionIcon: save; - text: "tutti.editBenthosFrequencies.action.save"; - toolTipText: "tutti.editBenthosFrequencies.action.save.tip"; - i18nMnemonic: "tutti.editBenthosFrequencies.action.save.mnemonic"; + text: "tutti.editBenthosFrequencies.action.saveAndContinue"; + toolTipText: "tutti.editBenthosFrequencies.action.saveAndContinue.tip"; + i18nMnemonic: "tutti.editBenthosFrequencies.action.saveAndContinue.mnemonic"; + enabled: {model.getNextEditableRowIndex() != null && model.isValid()}; + _help: {"tutti.editBenthosFrequencies.action.saveAndContinue.help"}; +} + +#saveAndCloseButton { + actionIcon: save; + text: "tutti.editBenthosFrequencies.action.saveAndClose"; + toolTipText: "tutti.editBenthosFrequencies.action.saveAndClose.tip"; + i18nMnemonic: "tutti.editBenthosFrequencies.action.saveAndClose.mnemonic"; enabled: {model.isValid()}; - _help: {"tutti.editBenthosFrequencies.action.save.help"}; + _help: {"tutti.editBenthosFrequencies.action.saveAndClose.help"}; } #dataInFrequenciesWarningContainer { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.jaxx 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUI.jaxx 2013-09-19 21:16:52 UTC (rev 1194) @@ -233,7 +233,8 @@ <JPanel id='actionPanel' layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> <JButton id='cancelButton' onActionPerformed='handler.cancel()'/> - <JButton id='saveButton' onActionPerformed='handler.save()'/> + <JButton id='saveAndContinueButton' onActionPerformed='handler.saveAndContinue()'/> + <JButton id='saveAndCloseButton' onActionPerformed='handler.saveAndClose()'/> </JPanel> </JPanel> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java 2013-09-19 21:16:52 UTC (rev 1194) @@ -476,12 +476,16 @@ getTable().scrollRowToVisible(rowIndex); } - public void editBatch(BenthosBatchRowModel speciesBatch, BenthosFrequencyCellComponent.FrequencyCellEditor editor) { + public void editBatch(BenthosFrequencyCellComponent.FrequencyCellEditor editor) { withWeightRows.clear(); + BenthosBatchRowModel speciesBatch = editor.getEditRow(); + BenthosFrequencyUIModel model = getModel(); + model.setNextEditableRowIndex(editor.getNextEditableRowIndex()); model.setTotalNumber(null); model.setTotalWeight(null); + model.setSimpleCount(null); frequencyEditor = editor; @@ -598,10 +602,10 @@ model.setBatch(speciesBatch); } - public void save() { + public void saveAndClose() { if (log.isDebugEnabled()) { - log.debug("Save UI " + ui); + log.debug("Save And Close UI " + ui); } // check that we do not have doublon in length @@ -634,11 +638,50 @@ return; } - frequencyEditor.validateEdition(getModel()); + frequencyEditor.save(getModel(), true); closeUI(ui); } + public void saveAndContinue() { + + if (log.isDebugEnabled()) { + log.debug("Save And Continue UI " + ui); + } + + // check that we do not have doublon in length + // see http://forge.codelutin.com/issues/2499 + Set<Float> lengths = Sets.newHashSet(); + + Float doublon = null; + int index = 0; + for (BenthosFrequencyRowModel row : getModel().getRows()) { + Float lengthStep = row.getLengthStep(); + if (!lengths.add(lengthStep)) { + + // already exist + doublon = lengthStep; + break; + } + index++; + } + if (doublon != null) { + + // can't save mensurations (found doublon) + String message = + _("tutti.editBenthosFrequencies.error.length.doublon", + doublon, index + 1); + TuttiUIContext.getErrorHelper().showErrorDialog( + message); + + // focus to first error row + AbstractSelectTableAction.doSelectCell(getTable(), index, 0); + return; + } + + frequencyEditor.save(getModel(), false); + } + //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIModel.java 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIModel.java 2013-09-19 21:16:52 UTC (rev 1194) @@ -71,6 +71,8 @@ public static final String PROPERTY_EMPTY_ROWS = "emptyRows"; + public static final String PROPERTY_NEXT_EDITABLE_ROW_INDEX = "nextEditableRowIndex"; + public static enum ConfigurationMode { SIMPLE, AUTO_GEN, @@ -141,6 +143,13 @@ */ protected Float totalWeight; + /** + * The index of the next editable row (null if none). + * + * @since 2.5 + */ + protected Integer nextEditableRowIndex; + protected Set<BenthosFrequencyRowModel> emptyRows; protected SampleCategoryModel sampleCategoryModel; @@ -223,6 +232,16 @@ firePropertyChange(PROPERTY_SIMPLE_COUNT, oldValue, simpleCount); } + public Integer getNextEditableRowIndex() { + return nextEditableRowIndex; + } + + public void setNextEditableRowIndex(Integer nextEditableRowIndex) { + Object oldValue = getNextEditableRowIndex(); + this.nextEditableRowIndex = nextEditableRowIndex; + firePropertyChange(PROPERTY_NEXT_EDITABLE_ROW_INDEX, oldValue, nextEditableRowIndex); + } + public boolean isSimpleMode() { return ConfigurationMode.SIMPLE == configurationMode; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-09-19 21:16:52 UTC (rev 1194) @@ -215,4 +215,25 @@ } return result; } + + /** + * Return the next editable row index for frequency from the given + * {@code rowIndex}, or {@code null} if none found. + * + * @param rowIndex the starting index where to look + * @return the next editable row index for frequency from the given {@code rowIndex}, or {@code null} if none found. + * @since 2.5 + */ + public Integer getNextEditableFrequencyRow(Integer rowIndex) { + Integer result = null; + + for (int i = rowIndex, max = getRowCount(); i < max; i++) { + SpeciesBatchRowModel entry = getEntry(i); + if (entry.isBatchLeaf()) { + result = i; + break; + } + } + return result; + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java 2013-09-19 21:16:52 UTC (rev 1194) @@ -119,6 +119,8 @@ protected Integer rowIndex; + protected Integer nextEditableRowIndex; + protected Integer columnIndex; public FrequencyCellEditor(SpeciesBatchUI ui, Color computedDataColor) { @@ -145,22 +147,35 @@ }); } + public SpeciesBatchRowModel getEditRow() { + return editRow; + } + + public Integer getNextEditableRowIndex() { + return nextEditableRowIndex; + } + public void startEdit() { Preconditions.checkNotNull(tableModel, "No table model assigned."); Preconditions.checkNotNull(editRow, "No editRow found."); + // compute the next editable row + nextEditableRowIndex = + tableModel.getNextEditableFrequencyRow(rowIndex + 1); + if (log.isDebugEnabled()) { - log.debug("Will edit frequencies for row: " + rowIndex); + log.debug("Will edit frequencies for row: " + rowIndex + + ", nextEditableRow: " + nextEditableRowIndex); } EditCatchesUI parent = SwingUtil.getParentContainer(ui, EditCatchesUI.class); - parent.getHandler().editSpeciesFrequencies(editRow, this); + parent.getHandler().editSpeciesFrequencies(this); } - public void validateEdition(SpeciesFrequencyUIModel frequencyModel) { + public void save(SpeciesFrequencyUIModel frequencyModel, boolean quit) { if (frequencyModel.isValid()) { // at close, synch back frequencies @@ -198,15 +213,31 @@ ui.getHandler().updateTotalFromFrequencies(editRow); } - int r = rowIndex; - int c = columnIndex; + if (quit) { + int r = rowIndex; + int c = columnIndex; - // stop edition - stopCellEditing(); + // stop edition + stopCellEditing(); - // reselect this cell - AbstractSelectTableAction.doSelectCell(table, r, c); - table.requestFocus(); + // reselect this cell + AbstractSelectTableAction.doSelectCell(table, r, c); + table.requestFocus(); + + } else { + + // use now the next row data + rowIndex = nextEditableRowIndex; + + // load the row + editRow = tableModel.getEntry(rowIndex); + + // will save the row in the species row + AbstractSelectTableAction.doSelectCell(table, rowIndex, columnIndex); + + // start edit + startEdit(); + } } @Override @@ -252,6 +283,7 @@ public void cancelCellEditing() { super.cancelCellEditing(); rowIndex = null; + nextEditableRowIndex = null; columnIndex = null; editRow = null; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.css 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.css 2013-09-19 21:16:52 UTC (rev 1194) @@ -266,13 +266,22 @@ _help: {"tutti.editSpeciesFrequencies.action.cancel.help"}; } -#saveButton { +#saveAndContinueButton { actionIcon: save; - text: "tutti.editSpeciesFrequencies.action.save"; - toolTipText: "tutti.editSpeciesFrequencies.action.save.tip"; - i18nMnemonic: "tutti.editSpeciesFrequencies.action.save.mnemonic"; + text: "tutti.editSpeciesFrequencies.action.saveAndContinue"; + toolTipText: "tutti.editSpeciesFrequencies.action.saveAndContinue.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.action.saveAndContinue.mnemonic"; + enabled: {model.getNextEditableRowIndex() != null && model.isValid()}; + _help: {"tutti.editSpeciesFrequencies.action.saveAndContinue.help"}; +} + +#saveAndCloseButton { + actionIcon: save; + text: "tutti.editSpeciesFrequencies.action.saveAndClose"; + toolTipText: "tutti.editSpeciesFrequencies.action.saveAndClose.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.action.saveAndClose.mnemonic"; enabled: {model.isValid()}; - _help: {"tutti.editSpeciesFrequencies.action.save.help"}; + _help: {"tutti.editSpeciesFrequencies.action.saveAndClose.help"}; } #dataInFrequenciesWarningContainer { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx 2013-09-19 21:16:52 UTC (rev 1194) @@ -233,7 +233,8 @@ <JPanel id='actionPanel' layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> <JButton id='cancelButton' onActionPerformed='handler.cancel()'/> - <JButton id='saveButton' onActionPerformed='handler.save()'/> + <JButton id='saveAndContinueButton' onActionPerformed='handler.saveAndContinue()'/> + <JButton id='saveAndCloseButton' onActionPerformed='handler.saveAndClose()'/> </JPanel> </JPanel> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-09-19 21:16:52 UTC (rev 1194) @@ -474,12 +474,16 @@ getTable().scrollRowToVisible(rowIndex); } - public void editBatch(SpeciesBatchRowModel speciesBatch, FrequencyCellEditor editor) { + public void editBatch(FrequencyCellEditor editor) { withWeightRows.clear(); + SpeciesBatchRowModel speciesBatch = editor.getEditRow(); + SpeciesFrequencyUIModel model = getModel(); + model.setNextEditableRowIndex(editor.getNextEditableRowIndex()); model.setTotalNumber(null); model.setTotalWeight(null); + model.setSimpleCount(null); frequencyEditor = editor; @@ -597,10 +601,10 @@ model.setBatch(speciesBatch); } - public void save() { + public void saveAndClose() { if (log.isDebugEnabled()) { - log.debug("Save UI " + ui); + log.debug("Save And Close UI " + ui); } // check that we do not have doublon in length @@ -633,11 +637,50 @@ return; } - frequencyEditor.validateEdition(getModel()); + frequencyEditor.save(getModel(), true); closeUI(ui); } + public void saveAndContinue() { + + if (log.isDebugEnabled()) { + log.debug("Save And Continue UI " + ui); + } + + // check that we do not have doublon in length + // see http://forge.codelutin.com/issues/2499 + Set<Float> lengths = Sets.newHashSet(); + + Float doublon = null; + int index = 0; + for (SpeciesFrequencyRowModel row : getModel().getRows()) { + Float lengthStep = row.getLengthStep(); + if (!lengths.add(lengthStep)) { + + // already exist + doublon = lengthStep; + break; + } + index++; + } + if (doublon != null) { + + // can't save mensurations (found doublon) + String message = + _("tutti.editSpeciesFrequencies.error.length.doublon", + doublon, index + 1); + TuttiUIContext.getErrorHelper().showErrorDialog( + message); + + // focus to first error row + AbstractSelectTableAction.doSelectCell(getTable(), index, 0); + return; + } + + frequencyEditor.save(getModel(), false); + } + //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java 2013-09-19 21:16:52 UTC (rev 1194) @@ -71,6 +71,8 @@ public static final String PROPERTY_EMPTY_ROWS = "emptyRows"; + public static final String PROPERTY_NEXT_EDITABLE_ROW_INDEX = "nextEditableRowIndex"; + public static enum ConfigurationMode { SIMPLE, AUTO_GEN, @@ -141,6 +143,13 @@ */ protected Integer simpleCount; + /** + * The index of the next editable row (null if none). + * + * @since 2.5 + */ + protected Integer nextEditableRowIndex; + protected Set<SpeciesFrequencyRowModel> emptyRows; protected SampleCategoryModel sampleCategoryModel; @@ -223,6 +232,16 @@ firePropertyChange(PROPERTY_SIMPLE_COUNT, oldValue, simpleCount); } + public Integer getNextEditableRowIndex() { + return nextEditableRowIndex; + } + + public void setNextEditableRowIndex(Integer nextEditableRowIndex) { + Object oldValue = getNextEditableRowIndex(); + this.nextEditableRowIndex = nextEditableRowIndex; + firePropertyChange(PROPERTY_NEXT_EDITABLE_ROW_INDEX, oldValue, nextEditableRowIndex); + } + public boolean isSimpleMode() { return ConfigurationMode.SIMPLE == configurationMode; } Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-09-19 21:16:52 UTC (rev 1194) @@ -453,6 +453,12 @@ tutti.editBenthosFrequencies.action.save= tutti.editBenthosFrequencies.action.save.mnemonic= tutti.editBenthosFrequencies.action.save.tip= +tutti.editBenthosFrequencies.action.saveAndClose= +tutti.editBenthosFrequencies.action.saveAndClose.mnemonic= +tutti.editBenthosFrequencies.action.saveAndClose.tip= +tutti.editBenthosFrequencies.action.saveAndContinue= +tutti.editBenthosFrequencies.action.saveAndContinue.mnemonic= +tutti.editBenthosFrequencies.action.saveAndContinue.tip= tutti.editBenthosFrequencies.batchCategory= tutti.editBenthosFrequencies.batchSpecies= tutti.editBenthosFrequencies.error.length.doublon= @@ -977,6 +983,12 @@ tutti.editSpeciesFrequencies.action.save= tutti.editSpeciesFrequencies.action.save.mnemonic= tutti.editSpeciesFrequencies.action.save.tip= +tutti.editSpeciesFrequencies.action.saveAndClose= +tutti.editSpeciesFrequencies.action.saveAndClose.mnemonic= +tutti.editSpeciesFrequencies.action.saveAndClose.tip= +tutti.editSpeciesFrequencies.action.saveAndContinue= +tutti.editSpeciesFrequencies.action.saveAndContinue.mnemonic= +tutti.editSpeciesFrequencies.action.saveAndContinue.tip= tutti.editSpeciesFrequencies.batchCategory= tutti.editSpeciesFrequencies.batchSpecies= tutti.editSpeciesFrequencies.error.length.doublon= Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-09-19 14:31:48 UTC (rev 1193) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-09-19 21:16:52 UTC (rev 1194) @@ -428,9 +428,12 @@ tutti.editBenthosFrequencies.action.generate=Générer tutti.editBenthosFrequencies.action.generate.mnemonic=G tutti.editBenthosFrequencies.action.generate.tip=Générer les mensurations -tutti.editBenthosFrequencies.action.save=Enregistrer -tutti.editBenthosFrequencies.action.save.mnemonic=E -tutti.editBenthosFrequencies.action.save.tip=Enregistrer les mensurations +tutti.editBenthosFrequencies.action.saveAndClose=Enregistrer et Fermer +tutti.editBenthosFrequencies.action.saveAndClose.mnemonic=F +tutti.editBenthosFrequencies.action.saveAndClose.tip=Enregistrer les mensurations +tutti.editBenthosFrequencies.action.saveAndContinue=Enregistrer et Continuer +tutti.editBenthosFrequencies.action.saveAndContinue.mnemonic=E +tutti.editBenthosFrequencies.action.saveAndContinue.tip=Enregistrer les mensurations et saisir les mensurations pour le lot suivant tutti.editBenthosFrequencies.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.editBenthosFrequencies.field.lengthStepCaracteristic=Type de mesure tutti.editBenthosFrequencies.field.lengthStepCaracteristic.tip=Méthode de mensuration des individus @@ -947,9 +950,12 @@ 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.save=Enregistrer -tutti.editSpeciesFrequencies.action.save.mnemonic=E -tutti.editSpeciesFrequencies.action.save.tip=Enregistrer les mensurations +tutti.editSpeciesFrequencies.action.saveAndClose=Enregistrer et Fermer +tutti.editSpeciesFrequencies.action.saveAndClose.mnemonic=F +tutti.editSpeciesFrequencies.action.saveAndClose.tip=Enregistrer les mensurations +tutti.editSpeciesFrequencies.action.saveAndContinue=Enregistrer et Continuer +tutti.editSpeciesFrequencies.action.saveAndContinue.mnemonic=E +tutti.editSpeciesFrequencies.action.saveAndContinue.tip=Enregistrer les mensurations et saisir les mensurations pour le lot suivant 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.lengthStepCaracteristic=Type de mesure tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.tip=Méthode de mensuration des individus
participants (1)
-
tchemit@users.forge.codelutin.com