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 efe93eb1301d442457e6de2548abb998059590f6 Author: Kevin Morin <morin@codelutin.com> Date: Thu Feb 18 18:04:43 2016 +0100 début de réarrangement de l'écran des mensurations refs #6926 --- .../entities/protocol/TuttiProtocols.java | 4 +- tutti-ui-swing/src/license/THIRD-PARTY.properties | 2 +- .../filtered-resources/tutti-help-fr.properties | 3 +- .../catches/FrequencyConfigurationMode.java | 5 +- .../species/frequency/SpeciesFrequencyUI.jaxx | 295 +++++++++++---------- .../species/frequency/SpeciesFrequencyUI.jcss | 66 +++-- .../frequency/SpeciesFrequencyUIHandler.java | 115 ++++---- .../species/frequency/SpeciesFrequencyUIModel.java | 40 ++- .../resources/i18n/tutti-ui-swing_en_GB.properties | 10 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 16 +- 10 files changed, 335 insertions(+), 221 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java index 97343f5..814ddf2 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java @@ -119,8 +119,8 @@ public class TuttiProtocols extends AbstractTuttiProtocols { } } catch (Exception e) { - if (log.isInfoEnabled()) { - log.info("Protocol needs to be migrated", e); + if (log.isErrorEnabled()) { + log.error("Error loading protocol, try to migrate", e); } result = migrateProtocol(file); diff --git a/tutti-ui-swing/src/license/THIRD-PARTY.properties b/tutti-ui-swing/src/license/THIRD-PARTY.properties index 901091a..f285228 100644 --- a/tutti-ui-swing/src/license/THIRD-PARTY.properties +++ b/tutti-ui-swing/src/license/THIRD-PARTY.properties @@ -18,7 +18,7 @@ # - GNU General Public License - Version 2 with the class path exception # - GNU General Public License, Version 2 with the Classpath Exception # - GNU Lesser General Public Licence -# - GNU Lesser General Public License (LGPL), version 2.1 +# - GNU Lesser General Public License (LGPL), version 2.1 or later # - GNU Lesser Public License # - GNU Library or Lesser General Public License # - General Public License (GPL) 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 2bdadf9..7940240 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 @@ -22,7 +22,6 @@ # #L% ### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Mon Feb 08 23:54:51 CET 2016 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -326,10 +325,12 @@ tutti.editSpeciesFrequencies.action.generate.help=editFishingOperation.html\#cap tutti.editSpeciesFrequencies.action.reset.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.saveAndClose.help=editFishingOperation.html\#captureEspecesMensurationActions tutti.editSpeciesFrequencies.action.saveAndContinue.help=editFishingOperation.html\#captureEspecesMensurationActions +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.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 tutti.editSpeciesFrequencies.field.mode.autoGen.help=editFishingOperation.html\#captureEspecesMensurationFields +tutti.editSpeciesFrequencies.field.mode.frequencyMode.help= tutti.editSpeciesFrequencies.field.mode.rafale.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.mode.simple.help=editFishingOperation.html\#captureEspecesMensurationFields tutti.editSpeciesFrequencies.field.mode.simpleCounting.help=editFishingOperation.html\#captureEspecesMensurationFields diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/FrequencyConfigurationMode.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/FrequencyConfigurationMode.java index e15f303..f5fcfad 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/FrequencyConfigurationMode.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/FrequencyConfigurationMode.java @@ -29,7 +29,8 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches; * @since 3.0 */ public enum FrequencyConfigurationMode { + SIMPLE_COUNTING, + FREQUENCIES, AUTO_GEN, - RAFALE, - SIMPLE_COUNTING + RAFALE } 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 f9a7941..d4d6852 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 @@ -81,80 +81,24 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { <SaveAndCloseSpeciesFrequencyAction id="saveAndCloseAction" constructorParams="this"/> <SaveAndContinueSpeciesFrequencyAction id="saveAndContinueAction" constructorParams="this"/> - <JPanel id='configurationPanel' layout='{new BorderLayout()}' constraints='BorderLayout.NORTH'> - - <VBox id='modePanel' constraints='BorderLayout.WEST' verticalAlignment='{SwingConstants.CENTER}'> - <JRadioButton id='autoGenModeButton' - onActionPerformed='model.setConfigurationMode(FrequencyConfigurationMode.AUTO_GEN)'/> - <JRadioButton id='rafaleModeButton' - onActionPerformed='model.setConfigurationMode(FrequencyConfigurationMode.RAFALE)'/> - <JRadioButton id='simpleCountingModeButton' - onActionPerformed='model.setConfigurationMode(FrequencyConfigurationMode.SIMPLE_COUNTING)'/> - </VBox> - - <JPanel id='modeConfigurationPanel' constraints='BorderLayout.CENTER'> - <JPanel id='autoGenModePanel' constraints='"autoGenMode"'> - <Table fill='both' constraints='BorderLayout.SOUTH'> - <!-- Min step--> - <row> - <cell anchor='west'> - <JLabel id='minStepLabel'/> - </cell> - <cell weightx='1.0'> - <NumberEditor id='minStepField' constructorParams='this'/> - </cell> - </row> - <!-- Max step--> - <row> - <cell anchor='west'> - <JLabel id='maxStepLabel'/> - </cell> - <cell weightx='1.0'> - <NumberEditor id='maxStepField' constructorParams='this'/> - </cell> - </row> - <!-- Actions --> - <row> - <cell columns='2'> - <JPanel layout='{new GridLayout(1, 0)}'> - <JButton id='generateButton'/> - </JPanel> - </cell> - </row> - </Table> - </JPanel> - <JPanel id='rafaleModePanel' constraints='"rafaleMode"'> - <Table fill='both' constraints='BorderLayout.SOUTH'> - <!-- Rafale step--> - <row> - <cell weightx='1.0'> - <JLabel id='rafaleStepLabel'/> - </cell> - </row> - <row> - <cell weightx='1.0'> - <NumberEditor id='rafaleStepField' constructorParams='this'/> - </cell> - </row> - </Table> - </JPanel> - <JPanel id='simpleCountingModePanel' constraints='"simpleCountingMode"' layout='{new BorderLayout()}'> - <JLabel id='simpleCountingModeLabel' constraints='BorderLayout.CENTER'/> - </JPanel> - </JPanel> - - <Table id="lengthstepSettingsBlock" fill='both' constraints='BorderLayout.SOUTH'> - <row> - <cell columns='6'> - <JSeparator/> - </cell> - </row> - <!-- length step caracteristic --> - <row> - <cell anchor='west'> + <Table id='configurationPanel' fill="both" anchor="west" constraints='BorderLayout.CENTER'> + + <row> + + <cell weightx="1"> + <HBox id='frequencyModePanel' horizontalAlignment='{SwingConstants.LEFT}'> + <JRadioButton id='simpleCountingModeButton' + onActionPerformed='model.setConfigurationMode(FrequencyConfigurationMode.SIMPLE_COUNTING)'/> + <JRadioButton id='frequencyModeButton' + onActionPerformed='model.setConfigurationMode(FrequencyConfigurationMode.FREQUENCIES)'/> + </HBox> + </cell> + + <cell> + + <!-- length step caracteristic --> + <HBox id="lengthStepCaracteristicPanel" styleClass="visibleIfFrequencies"> <JLabel id='lengthStepCaracteristicLabel'/> - </cell> - <cell weightx='1.0' columns='5'> <JPanel layout='{new BorderLayout()}'> <BeanFilterableComboBox id='lengthStepCaracteristicComboBox' constructorParams='this' @@ -162,72 +106,151 @@ public SpeciesFrequencyUI(TuttiUI parentUI) { constraints='BorderLayout.CENTER'/> <JButton id='addLengthStepCaracteristicButton' constraints='BorderLayout.EAST'/> </JPanel> - </cell> - </row> - <!-- Step --> - <row> - <cell anchor='west'> <JLabel id='stepLabel'/> - </cell> - <cell weightx='1.0'> <NumberEditor id='stepField' constructorParams='this'/> - </cell> - <cell anchor='west'> - <JLabel id='totalNumberLabel'/> - </cell> - <cell weightx='1.0'> - <JTextField id='totalNumberField'/> - </cell> - <cell anchor='west'> - <JLabel id='totalWeightLabel'/> - </cell> - <cell weightx='1.0'> - <ComputableDataEditor id='totalWeightField' genericType="Float" constructorParams='this'/> - </cell> - </row> - </Table> - </JPanel> + </HBox> - <JPanel id='dataFieldPanel' constraints='BorderLayout.CENTER'> - <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'> - <JPanel id='dataInFrequenciesWarningContainer' layout='{new BorderLayout(10, 10)}'> - <JLabel id='dataInFrequenciesWarning' constraints='BorderLayout.CENTER'/> - </JPanel> - </cell> - </row> - <row> - <cell> - <JLabel id='simpleCountingNumberLabel'/> - </cell> - <cell weightx='1'> - <NumberEditor id='simpleCountingNumberField' constructorParams='this'/> - </cell> - </row> - <row> - <cell> - <JLabel id='simpleCountingWeightLabel'/> - </cell> - <cell weightx='1'> - <NumberEditor id='simpleCountingWeightField' constructorParams='this'/> - </cell> - </row> - </Table> - </JPanel> + </cell> + + <cell rows="3" weightx="10"> + <JPanel id="histogramPanel" layout="{new BorderLayout()}" styleClass="visibleIfFrequencies"/> + </cell> + </row> + + <row> + <cell columns="2"> + <JSeparator styleClass="visibleIfFrequencies" /> + </cell> + </row> + + <row> + <cell columns="2"> + <Table styleClass="visibleIfFrequencies"> + <row> + <cell> + <VBox id='modePanel' verticalAlignment='{SwingConstants.CENTER}'> + <JRadioButton id='autoGenModeButton' + onActionPerformed='model.setFrequenciesConfigurationMode(FrequencyConfigurationMode.AUTO_GEN)'/> + <JRadioButton id='rafaleModeButton' + onActionPerformed='model.setFrequenciesConfigurationMode(FrequencyConfigurationMode.RAFALE)'/> + </VBox> + </cell> + + <cell> + <JPanel id='modeConfigurationPanel'> + <Table id='autoGenModePanel' fill='both' constraints='"autoGenMode"'> + <!-- Min step--> + <row> + <cell anchor='west'> + <JLabel id='minStepLabel'/> + </cell> + <cell weightx='1.0'> + <NumberEditor id='minStepField' constructorParams='this'/> + </cell> + </row> + <!-- Max step--> + <row> + <cell anchor='west'> + <JLabel id='maxStepLabel'/> + </cell> + <cell weightx='1.0'> + <NumberEditor id='maxStepField' constructorParams='this'/> + </cell> + </row> + <!-- Actions --> + <row> + <cell columns='2'> + <JPanel layout='{new GridLayout(1, 0)}'> + <JButton id='generateButton'/> + </JPanel> + </cell> + </row> + </Table> + <Table id='rafaleModePanel' fill='both' constraints='"rafaleMode"'> + <!-- Rafale step--> + <row> + <cell weightx='1.0'> + <JLabel id='rafaleStepLabel'/> + </cell> + </row> + <row> + <cell weightx='1.0'> + <NumberEditor id='rafaleStepField' constructorParams='this'/> + </cell> + </row> + </Table> + </JPanel> + </cell> + + <cell weightx="1"> + <JLabel id="samplingWarningLabel"/> + </cell> + </row> + </Table> + </cell> + </row> + + <row> + <cell columns="3"> + <JSeparator styleClass="visibleIfFrequencies" /> + </cell> + </row> + + <row weighty="1"> + <cell columns="3"> + <JPanel id='dataFieldPanel'> + <JSplitPane constraints='"lengthCaracteristicPmfm"' id="firstSplitPane"> + <JPanel layout="{new BorderLayout()}"> + <HBox id="lengthstepSettingsBlock" constraints='BorderLayout.NORTH'> + <!-- Step --> + <JLabel id='totalNumberLabel'/> + <JTextField id='totalNumberField'/> + <JLabel id='totalWeightLabel'/> + <ComputableDataEditor id='totalWeightField' genericType="Float" constructorParams='this'/> + </HBox> + <JSplitPane id="secondSplitPane" constraints='BorderLayout.CENTER'> + <JScrollPane id='logsScrollPane'> + <JXTable id='logsTable'/> + </JScrollPane> + <JScrollPane id='tableScrollPane'> + <JXTable id='table'/> + </JScrollPane> + </JSplitPane> + </JPanel> + <JScrollPane id='obsPanel'> + <JXTable id='obsTable'/> + </JScrollPane> + </JSplitPane> + + <Table id="simpleCountingNumberPanel" constraints='"noLengthCaracteristicPmfm"' fill='horizontal'> + <row> + <cell columns='2'> + <JPanel id='dataInFrequenciesWarningContainer' layout='{new BorderLayout(10, 10)}'> + <JLabel id='dataInFrequenciesWarning' constraints='BorderLayout.CENTER'/> + </JPanel> + </cell> + </row> + <row> + <cell> + <JLabel id='simpleCountingNumberLabel'/> + </cell> + <cell weightx='1'> + <NumberEditor id='simpleCountingNumberField' constructorParams='this'/> + </cell> + </row> + <row> + <cell> + <JLabel id='simpleCountingWeightLabel'/> + </cell> + <cell weightx='1'> + <NumberEditor id='simpleCountingWeightField' constructorParams='this'/> + </cell> + </row> + </Table> + </JPanel> + </cell> + </row> + </Table> <!-- actions --> <JPanel id='actionPanel' layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH' styleClass="buttonPanel"> 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 3b4a877..b22a514 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 @@ -42,6 +42,10 @@ ComputableDataEditor { computedDataColor: {handler.getConfig().getColorComputedWeights()}; } +.visibleIfFrequencies { + visible: {!model.isSimpleCountingMode()}; +} + #editSpeciesFrequenciesTopPanel { _help: {"tutti.editSpeciesFrequencies.help"}; } @@ -151,16 +155,22 @@ ComputableDataEditor { _help: {"tutti.editSpeciesFrequencies.field.rafaleStep.help"}; } +#samplingWarningLabel { + foreground: {Color.RED}; + text: "Prélèvement"; +} + #configurationPanel { border: {new TitledBorder(null, null)}; } #modeConfigurationLayout { - selected: {String.valueOf(mode.getSelectedValue())}; + selected: {String.valueOf(frequenciesMode.getSelectedValue())}; } #modeConfigurationPanel { - layout: {modeConfigurationLayout}; + layout: {modeConfigurationLayout}; + border: {new TitledBorder(null, null)}; } #simpleCountingModeLabel { @@ -210,6 +220,10 @@ ComputableDataEditor { enabled: {model.getLengthStepCaracteristic() != null && model.getStep() > 0f}; } +#simpleCountingNumberPanel { + border: { new TitledBorder(null, null) }; +} + #simpleCountingNumberLabel { text: "tutti.editSpeciesFrequencies.field.simpleCountingNumber"; toolTipText: "tutti.editSpeciesFrequencies.field.simpleCountingNumber.tip"; @@ -251,36 +265,46 @@ ComputableDataEditor { text: "tutti.editSpeciesFrequencies.simpleCountingAndFrequencies"; } +#simpleCountingModeButton { + text: "tutti.editSpeciesFrequencies.field.mode.simpleCounting"; + toolTipText: "tutti.editSpeciesFrequencies.field.mode.simpleCounting.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.simpleCounting.mnemonic"; + value: "simpleCountingMode"; + selected: {model.isSimpleCountingMode()}; + buttonGroup: "mode"; + _help: {"tutti.editSpeciesFrequencies.field.mode.simpleCounting.help"}; +} + +#frequencyModeButton { + text: "tutti.editSpeciesFrequencies.field.mode.frequencyMode"; + toolTipText: "tutti.editSpeciesFrequencies.field.mode.frequencyMode.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.frequencyMode.mnemonic"; + value: "frequenciesMode"; + selected: {model.isFrequenciesMode()}; + buttonGroup: "mode"; + _help: {"tutti.editSpeciesFrequencies.field.mode.frequencyMode.help"}; +} + #autoGenModeButton { - text: "tutti.editSpeciesFrequencies.field.mode.autoGen"; - toolTipText: "tutti.editSpeciesFrequencies.field.mode.autoGen.tip"; - i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.autoGen.mnemonic"; + text: "tutti.editSpeciesFrequencies.field.frequencyMode.autoGen"; + toolTipText: "tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.mnemonic"; value: "autoGenMode"; selected: {model.isAutoGenMode()}; - buttonGroup: "mode"; - _help: {"tutti.editSpeciesFrequencies.field.mode.autoGen.help"}; + buttonGroup: "frequenciesMode"; + _help: {"tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.help"}; } #rafaleModeButton { - text: "tutti.editSpeciesFrequencies.field.mode.rafale"; - toolTipText: "tutti.editSpeciesFrequencies.field.mode.rafale.tip"; - i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.rafale.mnemonic"; + text: "tutti.editSpeciesFrequencies.field.frequencyMode.rafale"; + toolTipText: "tutti.editSpeciesFrequencies.field.frequencyMode.rafale.tip"; + i18nMnemonic: "tutti.editSpeciesFrequencies.field.frequencyMode.rafale.mnemonic"; value: "rafaleMode"; selected: {model.isRafaleMode()}; - buttonGroup: "mode"; + buttonGroup: "frequenciesMode"; _help: {"tutti.editSpeciesFrequencies.field.mode.rafale.help"}; } -#simpleCountingModeButton { - text: "tutti.editSpeciesFrequencies.field.mode.simpleCounting"; - toolTipText: "tutti.editSpeciesFrequencies.field.mode.simpleCounting.tip"; - i18nMnemonic: "tutti.editSpeciesFrequencies.field.mode.simpleCounting.mnemonic"; - value: "simpleCountingMode"; - selected: {model.isSimpleCountingMode()}; - buttonGroup: "mode"; - _help: {"tutti.editSpeciesFrequencies.field.mode.simpleCounting.help"}; -} - #generateLengthStepsAction { enabled: {model.isCanGenerate()}; } 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 9b9b1f0..f5da11e 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 @@ -71,6 +71,8 @@ import javax.swing.SwingUtilities; import java.awt.BorderLayout; 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.List; @@ -157,7 +159,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci public boolean isRowValid(SpeciesFrequencyRowModel row) { SpeciesFrequencyUIModel model = getModel(); - return model.isRowValid(row); + boolean valid = model.isRowValid(row); + return valid; } @@ -224,16 +227,25 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci this.ui.setContextValue(model); // listen when ichtyometer is connected or not and adjust the listener - getContext().addPropertyChangeListener(TuttiUIContext.PROPERTY_ICHTYOMETER_CONNECTED, evt -> { - boolean connected = (boolean) evt.getNewValue(); + getContext().addPropertyChangeListener(TuttiUIContext.PROPERTY_ICHTYOMETER_CONNECTED, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + boolean connected = (boolean) evt.getNewValue(); - if (connected && SpeciesFrequencyUIHandler.this.frequencyEditor != null) { + if (connected && SpeciesFrequencyUIHandler.this.frequencyEditor != null) { - // listen when itchtyometer is connected and this ui is showing - listenItchtyometer(); - } + // listen when itchtyometer is connected and this ui is showing + listenItchtyometer(); + } - SwingUtilities.invokeLater(this::updateLogVisibility); + SwingUtilities.invokeLater( + new Runnable() { + @Override + public void run() { + updateLogVisibility(); + } + }); + } }); } @@ -283,58 +295,71 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci }); // when lengthStepCaracteristic changed, let's updates all row with the new value - model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_LENGTH_STEP_CARACTERISTIC, evt -> { - Caracteristic newValue = (Caracteristic) evt.getNewValue(); - // get step from the pmfm - float step1 = getStep(newValue); - getModel().setStep(step1); - getModel().setDataSetIntervalWidth(step1); - chart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step1 == 1f)); - if (CollectionUtils.isNotEmpty(getModel().getRows())) { - for (SpeciesFrequencyRowModel rowModel : getModel().getRows()) { - rowModel.setLengthStepCaracteristic(newValue); - recomputeRowValidState(rowModel); + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_LENGTH_STEP_CARACTERISTIC, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + Caracteristic newValue = (Caracteristic) evt.getNewValue(); + // get step from the pmfm + float step = getStep(newValue); + getModel().setStep(step); + getModel().setDataSetIntervalWidth(step); + chart.getXYPlot().getDomainAxis().setStandardTickUnits(new TuttiNumberTickUnitSource(step == 1f)); + if (CollectionUtils.isNotEmpty(getModel().getRows())) { + for (SpeciesFrequencyRowModel rowModel : getModel().getRows()) { + rowModel.setLengthStepCaracteristic(newValue); + recomputeRowValidState(rowModel); + } } + SpeciesFrequencyUIHandler.this.ui.getValidator().doValidate(); } - SpeciesFrequencyUIHandler.this.ui.getValidator().doValidate(); }); // when lengthStepCaracteristicUnit changed, let's updates the label of some fields - model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_LENGTH_STEP_CARACTERISTIC_UNIT, evt -> { + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_LENGTH_STEP_CARACTERISTIC_UNIT, new PropertyChangeListener() { - String unit = (String) evt.getNewValue(); + @Override + public void propertyChange(PropertyChangeEvent evt) { - if (unit == null) { + String unit = (String) evt.getNewValue(); - unit = t("tutti.editSpeciesFrequencies.unkownStepUnit"); - } + if (unit == null) { - getUI().getMinStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.minStep"), unit)); - getUI().getMinStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.minStep.tip"), unit)); + unit = t("tutti.editSpeciesFrequencies.unkownStepUnit"); + } + + getUI().getMinStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.minStep"), unit)); + getUI().getMinStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.minStep.tip"), unit)); - getUI().getMaxStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.maxStep"), unit)); - getUI().getMaxStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.maxStep.tip"), unit)); + getUI().getMaxStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.maxStep"), unit)); + getUI().getMaxStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.maxStep.tip"), unit)); - getUI().getRafaleStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.rafaleStep"), unit)); - getUI().getRafaleStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.rafaleStep.tip"), unit)); + getUI().getRafaleStepLabel().setText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.rafaleStep"), unit)); + getUI().getRafaleStepLabel().setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.field.rafaleStep.tip"), unit)); - TableColumnExt column = (TableColumnExt) getUI().getTable().getColumn(SpeciesFrequencyTableModel.LENGTH_STEP); - column.setHeaderValue(getLabelWithUnit(t("tutti.editSpeciesFrequencies.table.header.lengthStep"), unit)); - column.setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.table.header.lengthStep"), unit)); + TableColumnExt column = (TableColumnExt) getUI().getTable().getColumn(SpeciesFrequencyTableModel.LENGTH_STEP); + column.setHeaderValue(getLabelWithUnit(t("tutti.editSpeciesFrequencies.table.header.lengthStep"), unit)); + column.setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.table.header.lengthStep"), unit)); + } }); // when configuration mode change, let's focus the best component (see http://forge.codelutin.com/issues/4035) - model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_CONFIGURATION_MODE, evt -> { - final FrequencyConfigurationMode newValue = (FrequencyConfigurationMode) evt.getNewValue(); - SwingUtilities.invokeLater( - () -> { - JComponent componentToFocus = getComponentToFocus(newValue); - if (componentToFocus != null) { - componentToFocus.grabFocus(); + model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_FREQUENCIES_CONFIGURATION_MODE, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + final FrequencyConfigurationMode newValue = (FrequencyConfigurationMode) evt.getNewValue(); + SwingUtilities.invokeLater( + new Runnable() { + @Override + public void run() { + JComponent componentToFocus = getComponentToFocus(newValue); + if (componentToFocus != null) { + componentToFocus.grabFocus(); + } + updateLogVisibility(); + } } - updateLogVisibility(); - } - ); + ); + } }); // set the pattern to the weight in simple counting mode according to the weight unit @@ -425,7 +450,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // create log table model SpeciesFrequencyLogsTableModel logTableModel = new SpeciesFrequencyLogsTableModel(logColumnModel); - logTableModel.setRows(new ArrayList<>()); + logTableModel.setRows(new ArrayList<SpeciesFrequencyLogRowModel>()); logTable.setModel(logTableModel); logTable.setColumnModel(logColumnModel); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index 145f829..df42bff 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -55,6 +55,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_CONFIGURATION_MODE = "configurationMode"; + public static final String PROPERTY_FREQUENCIES_CONFIGURATION_MODE = "frequenciesConfigurationMode"; + public static final String PROPERTY_STEP = "step"; private static final String PROPERTY_MIN_STEP = "minStep"; @@ -63,6 +65,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_CAN_GENERATE = "canGenerate"; + public static final String PROPERTY_FREQUENCIES_MODE = "frequenciesMode"; + public static final String PROPERTY_AUTO_GEN_MODE = "autoGenMode"; public static final String PROPERTY_RAFALE_MODE = "rafaleMode"; @@ -97,6 +101,13 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa protected FrequencyConfigurationMode configurationMode; /** + * Fill mode. + * + * @since 4.5 + */ + protected FrequencyConfigurationMode frequenciesConfigurationMode = FrequencyConfigurationMode.AUTO_GEN; + + /** * Batch that contains frequencies. * * @since 0.2 @@ -286,10 +297,21 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public void setConfigurationMode(FrequencyConfigurationMode configurationMode) { Object oldValue = getConfigurationMode(); this.configurationMode = configurationMode; + firePropertyChange(PROPERTY_FREQUENCIES_MODE, null, isFrequenciesMode()); + firePropertyChange(PROPERTY_SIMPLE_COUNTING_MODE, null, isSimpleCountingMode()); firePropertyChange(PROPERTY_CONFIGURATION_MODE, oldValue, configurationMode); + } + + public FrequencyConfigurationMode getFrequenciesConfigurationMode() { + return frequenciesConfigurationMode; + } + + public void setFrequenciesConfigurationMode(FrequencyConfigurationMode frequenciesConfigurationMode) { + Object oldValue = getFrequenciesConfigurationMode(); + this.frequenciesConfigurationMode = frequenciesConfigurationMode; firePropertyChange(PROPERTY_AUTO_GEN_MODE, null, isAutoGenMode()); firePropertyChange(PROPERTY_RAFALE_MODE, null, isRafaleMode()); - firePropertyChange(PROPERTY_SIMPLE_COUNTING_MODE, null, isSimpleCountingMode()); + firePropertyChange(PROPERTY_FREQUENCIES_CONFIGURATION_MODE, oldValue, getFrequenciesConfigurationMode()); } public Float getStep() { @@ -374,16 +396,20 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa firePropertyChange(PROPERTY_NEXT_EDITABLE_ROW_INDEX, oldValue, nextEditableRowIndex); } - public boolean isAutoGenMode() { - return FrequencyConfigurationMode.AUTO_GEN == configurationMode; + public boolean isSimpleCountingMode() { + return FrequencyConfigurationMode.SIMPLE_COUNTING == configurationMode; } - public boolean isRafaleMode() { - return FrequencyConfigurationMode.RAFALE == configurationMode; + public boolean isFrequenciesMode() { + return FrequencyConfigurationMode.FREQUENCIES == configurationMode; } - public boolean isSimpleCountingMode() { - return FrequencyConfigurationMode.SIMPLE_COUNTING == configurationMode; + public boolean isAutoGenMode() { + return FrequencyConfigurationMode.AUTO_GEN == frequenciesConfigurationMode; + } + + public boolean isRafaleMode() { + return FrequencyConfigurationMode.RAFALE == frequenciesConfigurationMode; } public boolean isCanGenerate() { 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 5b42237..5d8f169 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -1,5 +1,6 @@ <<=
= +Pr\\u00e9l\\u00e8vement= application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= @@ -1453,6 +1454,12 @@ tutti.editSpeciesFrequencies.askBeforeSave.message= tutti.editSpeciesFrequencies.askBeforeSave.title= tutti.editSpeciesFrequencies.error.itchyometer.bad.record= tutti.editSpeciesFrequencies.error.length.doublon= +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen= +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.mnemonic= +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.tip= +tutti.editSpeciesFrequencies.field.frequencyMode.rafale= +tutti.editSpeciesFrequencies.field.frequencyMode.rafale.mnemonic= +tutti.editSpeciesFrequencies.field.frequencyMode.rafale.tip= tutti.editSpeciesFrequencies.field.lengthStepCaracteristic= tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.tip= tutti.editSpeciesFrequencies.field.maxStep= @@ -1462,6 +1469,9 @@ tutti.editSpeciesFrequencies.field.minStep.tip= tutti.editSpeciesFrequencies.field.mode.autoGen= tutti.editSpeciesFrequencies.field.mode.autoGen.mnemonic= tutti.editSpeciesFrequencies.field.mode.autoGen.tip= +tutti.editSpeciesFrequencies.field.mode.frequencyMode= +tutti.editSpeciesFrequencies.field.mode.frequencyMode.mnemonic= +tutti.editSpeciesFrequencies.field.mode.frequencyMode.tip= tutti.editSpeciesFrequencies.field.mode.rafale= tutti.editSpeciesFrequencies.field.mode.rafale.mnemonic= tutti.editSpeciesFrequencies.field.mode.rafale.tip= 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 0f62712..ed7b607 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -1,3 +1,4 @@ +Pr\\u00e9l\\u00e8vement= application.action.create.error= application.error.ui.business.warning= jaxx.application.action.create.error= @@ -1370,18 +1371,21 @@ tutti.editSpeciesFrequencies.askBeforeSave.message=La saisie comporte des classe tutti.editSpeciesFrequencies.askBeforeSave.title=Confirmer l'enregistrement des mensurations tutti.editSpeciesFrequencies.error.itchyometer.bad.record=La mesure provenant de l'ichtyomètre n'est pas valide (la donnée est peut-être corrompue) \:<br/><ul><li>Enregistrement \: <strong>%s</strong></li><li>CRC \: <strong>%s</strong></li><li>CRC calculé \: <strong>%s</strong></li></ul> 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.frequencyMode.autoGen=Génération des classes +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.mnemonic=G +tutti.editSpeciesFrequencies.field.frequencyMode.autoGen.tip=\=Mode où toutes les classes de taille sont générées +tutti.editSpeciesFrequencies.field.frequencyMode.rafale=Mode "rafale" +tutti.editSpeciesFrequencies.field.frequencyMode.rafale.mnemonic=l +tutti.editSpeciesFrequencies.field.frequencyMode.rafale.tip=Mode où on ne saisit uniquement la classe de taille (les nombres seront alors incrémentés...) tutti.editSpeciesFrequencies.field.lengthStepCaracteristic=Type de mesure tutti.editSpeciesFrequencies.field.lengthStepCaracteristic.tip=Méthode de mensuration des individus tutti.editSpeciesFrequencies.field.maxStep=Classe max tutti.editSpeciesFrequencies.field.maxStep.tip=Taille maximale mesurée tutti.editSpeciesFrequencies.field.minStep=Classe min tutti.editSpeciesFrequencies.field.minStep.tip=Taille minimale mesurée -tutti.editSpeciesFrequencies.field.mode.autoGen=Génération des classes -tutti.editSpeciesFrequencies.field.mode.autoGen.mnemonic=G -tutti.editSpeciesFrequencies.field.mode.autoGen.tip=Mode où toutes les classes de taille sont générées -tutti.editSpeciesFrequencies.field.mode.rafale=Mode "rafale" -tutti.editSpeciesFrequencies.field.mode.rafale.mnemonic=l -tutti.editSpeciesFrequencies.field.mode.rafale.tip=Mode où on ne saisit uniquement la classe de taille (les nombres seront alors incrémentés...) +tutti.editSpeciesFrequencies.field.mode.frequencyMode=Mensuration +tutti.editSpeciesFrequencies.field.mode.frequencyMode.mnemonic=M +tutti.editSpeciesFrequencies.field.mode.frequencyMode.tip=Mode par défaut si la classe de taille est renseignée dans le protocole. tutti.editSpeciesFrequencies.field.mode.simpleCounting=Mode simple dénombrement tutti.editSpeciesFrequencies.field.mode.simpleCounting.mnemonic=b tutti.editSpeciesFrequencies.field.mode.simpleCounting.tip=Mode par défaut si la classe de taille n'est pas renseignée dans le protocole.
-- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.