This is an automated email from the git hooks/post-receive script. New commit to branch feature/8133 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit d871a3fe149b37b89fad9efea1976656a6d9258b Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Mar 15 14:20:12 2016 +0100 Ajout de confirmation avant de réinitialiser l'écran des mensurations ou bien son départ alors que des données ne sont pas enregistrées (see #8133) --- .../frequency/SpeciesFrequencyTableModel.java | 4 ++ .../species/frequency/SpeciesFrequencyUI.jaxx | 2 - .../species/frequency/SpeciesFrequencyUI.jcss | 12 ++++- .../frequency/SpeciesFrequencyUIHandler.java | 9 ++++ .../actions/CancelEditSpeciesFrequencyAction.java | 60 +++++++++++++++------ .../actions/ResetSpeciesFrequencyAction.java | 62 ++++++++++++++++------ .../resources/i18n/tutti-ui-swing_en_GB.properties | 10 ++++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 10 ++++ 8 files changed, 134 insertions(+), 35 deletions(-) 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 c6d9b67..33da65b 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 @@ -160,6 +160,7 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp ColumnIdentifier<SpeciesFrequencyRowModel> propertyName, SpeciesFrequencyRowModel entry) { super.setValueAt(aValue, rowIndex, columnIndex, propertyName, entry); + uiModel.setModify(true); // TODO Rebuild the computedWeight if possible... } @@ -167,12 +168,15 @@ public class SpeciesFrequencyTableModel extends AbstractApplicationTableModel<Sp protected void onRowAdded(int rowIndex, SpeciesFrequencyRowModel row) { uiModel.recomputeCanEditLengthStep(); + uiModel.setModify(true); } @Override protected void onRowUpdated(int rowIndex, SpeciesFrequencyRowModel row) { + uiModel.recomputeCanEditLengthStep(); + uiModel.setModify(true); } @Override 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 9bbb08f..22db753 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,8 +82,6 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { <AddSpeciesFrequencyLengthStepCaracteristicAction id="addLengthStepCaracteristicAction" constructorParams="this"/> <GenerateSpeciesFrequencyLengthStepsAction id="generateLengthStepsAction" constructorParams="this"/> - <CancelEditSpeciesFrequencyAction id="cancelAction" constructorParams="this"/> - <ResetSpeciesFrequencyAction id="resetAction" constructorParams="this"/> <SaveAndCloseSpeciesFrequencyAction id="saveAndCloseAction" constructorParams="this"/> <SaveAndContinueSpeciesFrequencyAction id="saveAndContinueAction" constructorParams="this"/> 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 bb9b5a0..34f11dd 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 @@ -503,7 +503,11 @@ ComputableDataEditor { } #cancelButton { - action: {cancelAction}; + actionIcon: cancel; + text: "tutti.editSpeciesFrequencies.action.cancel"; + toolTipText: "tutti.editSpeciesFrequencies.action.cancel.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.action.cancel.mnemonic"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.CancelEditSpeciesFrequencyAction.class}; _help: {"tutti.editSpeciesFrequencies.action.cancel.help"}; } @@ -526,6 +530,10 @@ ComputableDataEditor { } #resetButton { - action: {resetAction}; + actionIcon: reset; + text: "tutti.editSpeciesFrequencies.action.reset"; + toolTipText: "tutti.editSpeciesFrequencies.action.reset.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.action.reset.mnemonic"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.ResetSpeciesFrequencyAction.class}; _help: {"tutti.editSpeciesFrequencies.action.reset.help"}; } 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 0b860b1..24169f6 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 @@ -263,6 +263,9 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci getModel().recomputeIndividualObservationRowValidState(row); getModel().recomputeCanEditLengthStep(); + + getModel().setModify(true); + } }; @@ -330,6 +333,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci SpeciesFrequencyLogsTableModel logsTableModel = (SpeciesFrequencyLogsTableModel) ui.getLogsTable().getModel(); logsTableModel.setRows(Lists.<SpeciesFrequencyLogRowModel>newArrayList()); + getModel().setModify(false); + } @Override @@ -342,6 +347,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // We do nothing here. This API works only on the selected row. // On this screen, we can interacts with not selected row, so won't come here. // Better then to work directly on rows in the table model +// getModel().setModify(true); } @@ -646,6 +652,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci getModel().setValid(false); getModel().setSimpleCount(null); + getModel().setModify(false); EditCatchesUI parent = getParentContainer(EditCatchesUI.class); parent.getHandler().setSpeciesSelectedCard(EditCatchesUIHandler.MAIN_CARD); @@ -917,6 +924,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // keep batch (will be used to push back editing entry) model.setBatch(speciesBatch); + model.setModify(false); + } public void updateFrequencyRowsNumbers(Float lengthStepToDec, Float lengthStepToInc) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/CancelEditSpeciesFrequencyAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/CancelEditSpeciesFrequencyAction.java index 64b6595..3b43bec 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/CancelEditSpeciesFrequencyAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/CancelEditSpeciesFrequencyAction.java @@ -25,12 +25,14 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.ac */ import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI; -import jaxx.runtime.SwingUtil; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIHandler; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler; -import javax.swing.AbstractAction; -import java.awt.event.ActionEvent; +import javax.swing.JOptionPane; import static org.nuiton.i18n.I18n.t; @@ -40,34 +42,60 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.11 */ -public class CancelEditSpeciesFrequencyAction extends AbstractAction { +public class CancelEditSpeciesFrequencyAction extends LongActionSupport<SpeciesFrequencyUIModel, SpeciesFrequencyUI, SpeciesFrequencyUIHandler> { /** Logger. */ private static final Log log = LogFactory.getLog(CancelEditSpeciesFrequencyAction.class); - private static final long serialVersionUID = 1L; + public CancelEditSpeciesFrequencyAction(SpeciesFrequencyUIHandler handler) { + super(handler, false); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction && getModel().isModify()) { - final SpeciesFrequencyUI ui; + // Ask confirmation to quit screen + doAction = false; - public CancelEditSpeciesFrequencyAction(SpeciesFrequencyUI ui) { - this.ui = ui; + String htmlMessage = String.format(AbstractApplicationUIHandler.CONFIRMATION_FORMAT, + t("tutti.askToCancelEditFrequencies.message"), + t("tutti.askToCancelEditFrequencies.help")); - putValue(NAME, t("tutti.editSpeciesFrequencies.action.cancel")); - putValue(SHORT_DESCRIPTION, t("tutti.editSpeciesFrequencies.action.cancel.tip")); - putValue(MNEMONIC_KEY, (int) SwingUtil.getFirstCharAt(t("tutti.editSpeciesFrequencies.action.cancel.mnemonic"), 'Z')); - putValue(SMALL_ICON, SwingUtil.createActionIcon("cancel")); + int saveResponse = JOptionPane.showOptionDialog( + getHandler().getTopestUI(), + htmlMessage, + t("tutti.askToCancelEditFrequencies.title"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE, + null, + new String[]{t("tutti.option.continue"), t("tutti.option.cancel")}, + t("tutti.option.cancel")); + + switch (saveResponse) { + case 0: + + // confirm + doAction = true; + break; + + } + } + return doAction; } @Override - public void actionPerformed(ActionEvent e) { + public void doAction() throws Exception { if (log.isDebugEnabled()) { - log.debug("Cancel UI " + ui); + log.debug("Cancel UI " + getUI()); } // close dialog - ui.getHandler().onCloseUI(); - + getHandler().onCloseUI(); } } \ 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/actions/ResetSpeciesFrequencyAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ResetSpeciesFrequencyAction.java index 4a3f8a5..0321847 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ResetSpeciesFrequencyAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ResetSpeciesFrequencyAction.java @@ -26,10 +26,12 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.ac import com.google.common.collect.Lists; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI; -import jaxx.runtime.SwingUtil; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIHandler; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIModel; +import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; +import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler; -import javax.swing.AbstractAction; -import java.awt.event.ActionEvent; +import javax.swing.JOptionPane; import static org.nuiton.i18n.I18n.t; @@ -39,29 +41,59 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.11 */ -public class ResetSpeciesFrequencyAction extends AbstractAction { +public class ResetSpeciesFrequencyAction extends LongActionSupport<SpeciesFrequencyUIModel, SpeciesFrequencyUI, SpeciesFrequencyUIHandler> { - private static final long serialVersionUID = 1L; - final SpeciesFrequencyUI ui; + public ResetSpeciesFrequencyAction(SpeciesFrequencyUIHandler handler) { + super(handler, false); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction) { - public ResetSpeciesFrequencyAction(SpeciesFrequencyUI ui) { + doAction = false; + // Ask confirmation to quit screen - this.ui = ui; + String htmlMessage = String.format(AbstractApplicationUIHandler.CONFIRMATION_FORMAT, + t("tutti.askToResetEditFrequencies.message"), + t("tutti.askToResetEditFrequencies.help")); - putValue(NAME, t("tutti.editSpeciesFrequencies.action.reset")); - putValue(SHORT_DESCRIPTION, t("tutti.editSpeciesFrequencies.action.reset.tip")); - putValue(MNEMONIC_KEY, (int) SwingUtil.getFirstCharAt(t("tutti.editSpeciesFrequencies.action.reset.mnemonic"), 'Z')); - putValue(SMALL_ICON, SwingUtil.createActionIcon("reset")); + int saveResponse = JOptionPane.showOptionDialog( + getHandler().getTopestUI(), + htmlMessage, + t("tutti.askToResetEditFrequencies.title"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE, + null, + new String[]{t("tutti.option.continue"), t("tutti.option.cancel")}, + t("tutti.option.cancel")); + + switch (saveResponse) { + case 0: + + // accept + doAction = true; + break; + + } + } + return doAction; } @Override - public void actionPerformed(ActionEvent e) { + public void doAction() throws Exception { // remove all frequencies - ui.getModel().setRows(Lists.newArrayList()); - ui.getModel().setIndividualObservationRows(Lists.newArrayList()); + getModel().setRows(Lists.newArrayList()); + + // remove all individual observations + getModel().setIndividualObservationRows(Lists.newArrayList()); } + } \ No newline at end of file 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 bb309af..e472d2c 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 @@ -49,6 +49,12 @@ tutti.askBeforeMultiPostImport.frequencies.message= tutti.askBeforeMultiPostImport.help= tutti.askBeforeMultiPostImport.message= tutti.askBeforeMultiPostImport.title= +tutti.askToCancelEditFrequencies.help= +tutti.askToCancelEditFrequencies.message= +tutti.askToCancelEditFrequencies.title= +tutti.askToResetEditFrequencies.help= +tutti.askToResetEditFrequencies.message= +tutti.askToResetEditFrequencies.title= tutti.askToSaveCatch.help= tutti.askToSaveCatch.message= tutti.askToSaveCatch.title= @@ -2226,10 +2232,14 @@ tutti.option.cleanAndClone= tutti.option.cleanAndEdit= tutti.option.cleanAndImport= tutti.option.clone= +tutti.option.confirm= +tutti.option.continue= tutti.option.edit= tutti.option.import= tutti.option.notSaveCatch= +tutti.option.quit= tutti.option.resetCatch= +tutti.option.saveAndQuit= tutti.option.saveCatch= tutti.persistence.cruise.gearUsedInOperations.error= tutti.propety.no.species.speciesCode= 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 e1aac59..dd575aa 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 @@ -34,6 +34,12 @@ tutti.askBeforeMultiPostImport.help=Que voulez-vous faire ?<ul><li><strong>Annul tutti.askBeforeMultiPostImport.individualObservations.message=Des observations individuelles existent tutti.askBeforeMultiPostImport.message=%s<br/>Elles seront supprimées avant l'import. tutti.askBeforeMultiPostImport.title=Des données existent; elles seront supprimées avant l'import \! +tutti.askToCancelEditFrequencies.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour rester sur l'écran</li><li><strong>Continuer</strong> pour confirmer la perte des données modifiées et le retour sur l'écran des lots</li></ul> +tutti.askToCancelEditFrequencies.message=Des modifications sur les mensurations - observations individuelles ne sont pas enregistrées. +tutti.askToCancelEditFrequencies.title=Confirmation avant de quitter l'écran des mensurations - observations individuelles +tutti.askToResetEditFrequencies.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour annuler l'opération de suppression</li><li><strong>Continuer</strong> pour confirmer la suppression des données</li></ul> +tutti.askToResetEditFrequencies.message=Vous êtes sur le point de supprimer toutes les mensurations et observations individuelles de ce lot. +tutti.askToResetEditFrequencies.title=Confirmation avant de supprimer les mensurations et observations individuelles tutti.askToSaveCatch.message=Des modifications sur la capture ne sont pas enregistrées tutti.askToSaveCatch.title=Modifications non enregistrées sur la capture tutti.askToSaveCatchBeforeExport.help=Que voulez-vous faire ?<ul><li><strong>Annuler l'export</strong> pour annuler l'opération d'export</li><li><strong>Ne pas enregistrer les modifications</strong> pour réaliser l'export sur les données non modifiées</li><li><strong>Enregistrer les modifications</strong> pour enregistrer les modifications puis réaliser l'export</li></ul> @@ -2046,10 +2052,14 @@ tutti.option.cleanAndClone=Nettoyer et Cloner tutti.option.cleanAndEdit=Nettoyer et Éditer tutti.option.cleanAndImport=Nettoyer et Importer tutti.option.clone=Cloner +tutti.option.confirm=Confirmer +tutti.option.continue=Continuer tutti.option.edit=Éditer tutti.option.import=Importer tutti.option.notSaveCatch=Ne pas enregistrer les modifications +tutti.option.quit=Quitter tutti.option.resetCatch=Annuler les modifications +tutti.option.saveAndQuit=Enregistrer et quitter tutti.option.saveCatch=Enregistrer les modifications tutti.persistence.cruise.gearUsedInOperations.error= tutti.propety.no.species.speciesCode= -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.