Author: kmorin Date: 2013-03-12 10:49:05 +0100 (Tue, 12 Mar 2013) New Revision: 584 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/584 Log: fixes #2048 [ERGO] - Saisie des champs num?\195?\169riques : d?\195?\169cimales en plus et s?\195?\169parateur fixes #1956 [CAPTURE] - Caract?\195?\169ristiques g?\195?\169n?\195?\169rales - Poids affich?\195?\169s pour le navire Thalassa Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/VesselTableCell.java 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/config/TuttiApplicationConfig.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigUI.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx 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/species/SampleCategoryComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/TuttiComputedOrNotDataTableCell.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-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-03-12 09:49:05 UTC (rev 584) @@ -1,28 +1,5 @@ -### -# #%L -# Tutti :: UI -# $Id$ -# $HeadURL$ -# %% -# Copyright (C) 2012 - 2013 Ifremer -# %% -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program. If not, see -# <http://www.gnu.org/licenses/gpl-3.0.html>. -# #L% -### #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Tue Mar 12 09:29:29 CET 2013 +#Tue Mar 12 10:47:25 CET 2013 tuttihelp.createSpeciesBatch.action.addSpecies.help= tuttihelp.createSpeciesBatch.field.batchWeightField.help= tuttihelp.createSpeciesBatch.field.sortedUnsortedCategoryComboBox.help= @@ -45,6 +22,8 @@ tuttihelp.editCatchBatch.field.benthosTotalUnsortedWeight.help= tuttihelp.editCatchBatch.field.benthosTotalWeight.help= tuttihelp.editCatchBatch.field.catchTotalRejectedWeight.help= +tuttihelp.editCatchBatch.field.catchTotalSortedCarousselWeight.help= +tuttihelp.editCatchBatch.field.catchTotalSortedTremisWeight.help= tuttihelp.editCatchBatch.field.catchTotalSortedWeight.help= tuttihelp.editCatchBatch.field.catchTotalUnsortedWeight.help= tuttihelp.editCatchBatch.field.catchTotalWeight.help= 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-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-03-12 09:49:05 UTC (rev 584) @@ -8,15 +8,15 @@ # %% # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of the +# published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public +# +# You should have received a copy of the GNU General Public # License along with this program. If not, see # <http://www.gnu.org/licenses/gpl-3.0.html>. # #L% @@ -45,6 +45,8 @@ tuttihelp.editCatchBatch.field.benthosTotalUnsortedWeight.help= tuttihelp.editCatchBatch.field.benthosTotalWeight.help= tuttihelp.editCatchBatch.field.catchTotalRejectedWeight.help= +tuttihelp.editCatchBatch.field.catchTotalSortedCarousselWeight.help= +tuttihelp.editCatchBatch.field.catchTotalSortedTremisWeight.help= tuttihelp.editCatchBatch.field.catchTotalSortedWeight.help= tuttihelp.editCatchBatch.field.catchTotalUnsortedWeight.help= tuttihelp.editCatchBatch.field.catchTotalWeight.help= @@ -73,8 +75,10 @@ tuttihelp.editCruise.list.headOfSortRoom.help=editCruise.html\#fields tuttihelp.editCruise.list.vessel.help=editCruise.html\#fields tuttihelp.editFishingOperation.action.attachments.help=editFishingOperation.html\#actions +tuttihelp.editFishingOperation.action.cancel.help= tuttihelp.editFishingOperation.action.cancelEditFishingOperation.help=editFishingOperation.html\#actions tuttihelp.editFishingOperation.action.importCasino.help=editFishingOperation.html\#actions +tuttihelp.editFishingOperation.action.save.help= tuttihelp.editFishingOperation.action.saveEditFishingOperation.help=editFishingOperation.html\#actions tuttihelp.editFishingOperation.field.comment.help=editFishingOperation.html\#fields tuttihelp.editFishingOperation.field.duration.help=editFishingOperation.html\#fields @@ -103,19 +107,29 @@ tuttihelp.editFishingOperation.list.recorderPerson.help=editFishingOperation.html\#fields tuttihelp.editMacroWasteBatch.help=editMacroWasteBatch.html tuttihelp.editPlanktonBatch.help=editPlanktonBatch.html +tuttihelp.editProgram.action.cancel.help= tuttihelp.editProgram.action.cancelProgram.help=editProgram.html\#actions +tuttihelp.editProgram.action.save.help= tuttihelp.editProgram.action.saveProgram.help=editProgram.html\#actions tuttihelp.editProgram.field.comment.help=editProgram.html\#fields tuttihelp.editProgram.field.name.help=editProgram.html\#fields tuttihelp.editProgram.field.zone.help=editProgram.html\#fields tuttihelp.editProgram.help=editProgram.html tuttihelp.editProtocol.action.addSpeciesProtocol.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.cancel.help= tuttihelp.editProtocol.action.cancelEditProtocol.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.exportAllCaracteristic.help= +tuttihelp.editProtocol.action.exportCaracteristic.help= tuttihelp.editProtocol.action.exportProtocolAllCaracteristic.help=editProtocol.html\#actions tuttihelp.editProtocol.action.exportProtocolCaracteristic.tip=editProtocol.html\#actions tuttihelp.editProtocol.action.exportProtocolSpecies.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.exportSpecies.help= +tuttihelp.editProtocol.action.importCaracteristic.help= tuttihelp.editProtocol.action.importProtocolCaracteristic.help=editProtocol.html\#actions tuttihelp.editProtocol.action.importProtocolSpecies.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.importSpecies.help= +tuttihelp.editProtocol.action.removeSpeciesProtocol.help= +tuttihelp.editProtocol.action.save.help= tuttihelp.editProtocol.action.saveProtocol.help=editProtocol.html\#actions tuttihelp.editProtocol.action.selectOtherSpecies.help=editProtocol.html\#actions tuttihelp.editProtocol.field.comment.help=editProtocol.html\#fields Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-03-12 09:49:05 UTC (rev 584) @@ -193,6 +193,10 @@ return applicationConfig.getOptionAsFloat(TuttiApplicationConfigOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE.getKey()); } + public String getTremieCarousselVesselId() { + return applicationConfig.getOption(TuttiApplicationConfigOption.TREMIE_CAROUSSEL_VESSEL_ID.getKey()); + } + public boolean isAutoPopupNumberEditor() { return applicationConfig.getOptionAsBoolean(TuttiApplicationConfigOption.AUTO_POPUP_NUMBER_EDITOR.getKey()); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java 2013-03-12 09:49:05 UTC (rev 584) @@ -87,12 +87,19 @@ ), TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE( - "tutti.weights.rate.difference.totalAndSorted", - n_("tutti.weights.rate.difference.totalAndSorted.description"), + "tutti.option.weights.rate.difference.totalAndSorted", + n_("tutti.option.weights.rate.difference.totalAndSorted.description"), "1.0", Float.class ), + TREMIE_CAROUSSEL_VESSEL_ID( + "tutti.option.tremieCarousselVessel", + n_("tutti.option.tremieCarousselVessel.description"), + "", + String.class + ), + PROGRAM_ID( "tutti.programId", n_("tutti.option.programId.description"), Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigUI.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigUI.java 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigUI.java 2013-03-12 09:49:05 UTC (rev 584) @@ -26,6 +26,7 @@ import fr.ifremer.tutti.service.config.TuttiServiceConfigOption; import fr.ifremer.tutti.ui.swing.content.MainUI; +import fr.ifremer.tutti.ui.swing.util.editor.VesselTableCell; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.config.ConfigUI; import jaxx.runtime.swing.config.ConfigUIHelper; @@ -99,13 +100,17 @@ // APPLICATION + VesselTableCell vesselTableCellComponent = new VesselTableCell(mainUI.getHandler().getContext()); helper.addCategory(n_("tutti.config.category.applications"), n_("tutti.config.category.applications.description"), CALLBACK_APPLICATION) .addOption(TuttiServiceConfigOption.DATA_DIRECTORY) .addOption(TuttiServiceConfigOption.SITE_URL) .addOption(TuttiApplicationConfigOption.UI_CONFIG_FILE) - .addOption(TuttiApplicationConfigOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE); + .addOption(TuttiApplicationConfigOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE) + .addOption(TuttiApplicationConfigOption.TREMIE_CAROUSSEL_VESSEL_ID) + .setOptionEditor(vesselTableCellComponent.getNewTableCellEditor()) + .setOptionRenderer(vesselTableCellComponent.getNewTableCellRenderer()); // UI @@ -133,9 +138,8 @@ ConfigUI configUI = helper.buildUI( mainUI, n_("tutti.config.category.applications")); - + helper.displayUI(mainUI, false); - mainUI.getHandler().getContext().getSwingSession().add(configUI); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.css 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.css 2013-03-12 09:49:05 UTC (rev 584) @@ -28,6 +28,12 @@ bean: {model}; } +BeanComboBox { + showReset: true; + i18nPrefix: "tutti.property."; + bean: {model}; +} + #fishingOperationsTopPanel { _help: {"tuttihelp.fishingOperations.help"}; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.jaxx 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.jaxx 2013-03-12 09:49:05 UTC (rev 584) @@ -33,6 +33,7 @@ fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI fr.ifremer.tutti.ui.swing.util.TuttiUI + jaxx.runtime.swing.editor.bean.BeanComboBox jaxx.runtime.swing.editor.bean.BeanFilterableComboBox static org.nuiton.i18n.I18n._ @@ -65,9 +66,9 @@ <!-- Cruise fishingOperations --> <row> <cell anchor='west' weightx='1.0'> - <BeanFilterableComboBox id='fishingOperationComboBox' - constructorParams='this' - genericType='FishingOperation'/> + <BeanComboBox id='fishingOperationComboBox' + constructorParams='this' + genericType='FishingOperation'/> </cell> <cell anchor='east'> <JButton id='newFishingOperationButton'/> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-03-12 09:49:05 UTC (rev 584) @@ -120,7 +120,7 @@ List<FishingOperation> fishingOperations = model.getFishingOperation(); - initBeanFilterableComboBox(ui.getFishingOperationComboBox(), + initBeanComboBox(ui.getFishingOperationComboBox(), fishingOperations, model.getSelectedFishingOperation()); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css 2013-03-12 09:49:05 UTC (rev 584) @@ -75,6 +75,10 @@ _help: {"tuttihelp.editCatchBatch.field.catchTotalWeight.help"}; } +#catchTotalSortedWeightPanel { + layout: {catchTotalSortedWeightPanelLayout}; +} + #catchTotalWeightField { bean: {model.getCatchTotalComputedOrNotWeight()}; model: {model.getCatchTotalWeight()}; @@ -100,8 +104,7 @@ } #catchTotalSortedTremisWeightField { - property: catchTotalSortedTremisWeight; - model: {model.getCatchTotalSortedTremisWeight()}; + enabled: false; } #catchTotalSortedCarousselWeightLabel { @@ -112,8 +115,7 @@ } #catchTotalSortedCarousselWeightField { - property: catchTotalSortedCarousselWeight; - model: {model.getCatchTotalSortedCarousselWeight()}; + enabled: false; } #catchTotalRejectedWeightLabel { @@ -140,11 +142,6 @@ _computed: true; } -#catchThalassaLabel { - actionIcon: information; - text: "tutti.label.catches.catchThalassa"; -} - #speciesTabPanel { layout:{speciesTabPanelLayout}; } @@ -175,7 +172,7 @@ #speciesTotalSortedWeightField { text: {getStringValue(model.getSpeciesTotalSortedWeight() != null ? - String.format("%.3f", model.getSpeciesTotalSortedWeight()) : + model.getSpeciesTotalSortedWeight() : model.getSpeciesTotalSortedComputedWeight() != null ? String.format("%.3f", model.getSpeciesTotalSortedComputedWeight()) : null)}; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx 2013-03-12 09:49:05 UTC (rev 584) @@ -96,6 +96,9 @@ <CardLayout2Ext id='speciesTabPanelLayout' constructorParams='this, "speciesTabPanel"'/> + <CardLayout2Ext id='catchTotalSortedWeightPanelLayout' + constructorParams='this, "catchTotalSortedWeightPanel"'/> + <TuttiHelpBroker id='broker' constructorParams='"tuttihelp.editCatchBatch.help"'/> @@ -132,22 +135,28 @@ <JLabel id='catchTotalSortedWeightLabel'/> </cell> <cell columns='4' weightx='1.0'> - <JTextField id='catchTotalSortedWeightField'/> + <JPanel id='catchTotalSortedWeightPanel'> + <JTextField id='catchTotalSortedWeightField' + constraints='EditCatchesUIHandler.CLASSIC_VESSEL'/> + <Table constraints='EditCatchesUIHandler.CAROUSSEL_TREMIE_VESSEL' + fill='both'> + <row> + <cell anchor='west'> + <JLabel id='catchTotalSortedCarousselWeightLabel'/> + </cell> + <cell weightx='1.0'> + <JTextField id='catchTotalSortedCarousselWeightField'/> + </cell> + <cell anchor='west'> + <JLabel id='catchTotalSortedTremisWeightLabel'/> + </cell> + <cell weightx='1.0'> + <JTextField id='catchTotalSortedTremisWeightField'/> + </cell> + </row> + </Table> + </JPanel> </cell> - <!-- <cell anchor='west'> - <JLabel id='catchTotalSortedCarousselWeightLabel'/> - </cell> - <cell weightx='1.0'> - <NumberEditor id='catchTotalSortedCarousselWeightField' - constructorParams='this'/> - </cell> - <cell anchor='west'> - <JLabel id='catchTotalSortedTremisWeightLabel'/> - </cell> - <cell weightx='1.0'> - <NumberEditor id='catchTotalSortedTremisWeightField' - constructorParams='this'/> - </cell>--> </row> <!--Poids total hors vrac--> <row> @@ -169,11 +178,6 @@ constructorParams='this'/> </cell> </row> - <!-- <row> - <cell columns='4'> - <JLabel id='catchThalassaLabel'/> - </cell> - </row>--> </Table> </cell> </row> 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-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-03-12 09:49:05 UTC (rev 584) @@ -25,6 +25,8 @@ */ import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.ui.swing.content.operation.EditFishingOperationUIModel; import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUIHandler; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler; @@ -41,6 +43,8 @@ import javax.swing.JPanel; import javax.swing.JTabbedPane; import java.awt.event.ActionEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.Set; import static org.nuiton.i18n.I18n._; @@ -61,6 +65,10 @@ public static final String EDIT_FREQUENCY_CARD = "editFrequency"; + public static final String CAROUSSEL_TREMIE_VESSEL = "carousselTremieVessel"; + + public static final String CLASSIC_VESSEL = "classicVessel"; + /** Logger. */ private static final Log log = LogFactory.getLog(EditCatchesUIHandler.class); @@ -105,6 +113,15 @@ listenValidatorValid(getValidator(), model); setCustomTab(0, model); + + getParentUi().getFishingOperationTabContent().getModel() + .addPropertyChangeListener(EditFishingOperationUIModel.PROPERTY_VESSEL, new PropertyChangeListener() { + + public void propertyChange(PropertyChangeEvent evt) { + Vessel vessel = (Vessel) evt.getNewValue(); + selectCatchTotalSortedWeightPanel(vessel); + } + }); } @Override @@ -282,7 +299,17 @@ titlePanel.setTitle(ui.getSpeciesTabFishingOperationReminderLabel().getTitle() + " - " + _(title)); } } + } + public void selectCatchTotalSortedWeightPanel(Vessel vessel) { + String card; + String carousselTremieVesselId = getConfig().getTremieCarousselVesselId(); + if (vessel != null && vessel.getId().equals(carousselTremieVesselId)) { + card = CAROUSSEL_TREMIE_VESSEL; + } else { + card = CLASSIC_VESSEL; + } + ui.getCatchTotalSortedWeightPanelLayout().setSelected(card); } } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryComponent.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryComponent.java 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategoryComponent.java 2013-03-12 09:49:05 UTC (rev 584) @@ -43,6 +43,7 @@ import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.io.Serializable; +import jaxx.runtime.JAXXUtil; /** * To render and edit a {@link SampleCategory}. @@ -236,7 +237,7 @@ text += " "; if (number != null) { - text += String.format("%.3f", number); + text += JAXXUtil.getStringValue(number); } else if (computedNumber != null) { if (sampleCategory.hasOnlyOneFrequency()) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.css 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.css 2013-03-12 09:49:05 UTC (rev 584) @@ -28,6 +28,12 @@ bean: {model}; } +BeanComboBox { + showReset: true; + i18nPrefix: "tutti.property."; + bean: {model}; +} + NumberEditor { autoPopup: {handler.getConfig().isAutoPopupNumberEditor()}; showPopupButton: {handler.getConfig().isShowNumberEditorButton()}; @@ -69,7 +75,6 @@ #sortedUnsortedCategoryComboBox { property: sortedUnsortedCategory; selectedItem: {model.getSortedUnsortedCategory()}; - filterable: false; } #batchWeightLabel { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.jaxx 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUI.jaxx 2013-03-12 09:49:05 UTC (rev 584) @@ -39,6 +39,7 @@ org.jdesktop.swingx.JXTable + jaxx.runtime.swing.editor.bean.BeanComboBox jaxx.runtime.swing.editor.bean.BeanFilterableComboBox jaxx.runtime.swing.editor.NumberEditor @@ -101,7 +102,7 @@ <JLabel id='sortedUnsortedCategoryLabel'/> </cell> <cell weightx='1.0' columns='2'> - <BeanFilterableComboBox id='sortedUnsortedCategoryComboBox' + <BeanComboBox id='sortedUnsortedCategoryComboBox' constructorParams='this' genericType='CaracteristicQualitativeValue'/> </cell> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/CreateSpeciesBatchUIHandler.java 2013-03-12 09:49:05 UTC (rev 584) @@ -107,7 +107,7 @@ Caracteristic caracteristic = persistenceService.getSortedUnsortedCaracteristic(); - initBeanFilterableComboBox(ui.getSortedUnsortedCategoryComboBox(), + initBeanComboBox(ui.getSortedUnsortedCategoryComboBox(), caracteristic.getQualitativeValue(), null); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-03-12 09:49:05 UTC (rev 584) @@ -41,37 +41,6 @@ import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; import fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment; import fr.ifremer.tutti.ui.swing.util.editor.SimpleTimeEditor; -import jaxx.runtime.JAXXUtil; -import jaxx.runtime.SwingUtil; -import jaxx.runtime.swing.editor.NumberEditor; -import jaxx.runtime.swing.editor.bean.BeanDoubleList; -import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; -import jaxx.runtime.swing.renderer.DecoratorListCellRenderer; -import jaxx.runtime.validator.swing.SwingValidator; -import org.apache.commons.lang3.reflect.ConstructorUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jdesktop.swingx.JXDatePicker; -import org.nuiton.util.decorator.Decorator; -import org.nuiton.util.decorator.JXPathDecorator; -import org.nuiton.validator.bean.simple.SimpleBeanValidator; - -import javax.swing.AbstractAction; -import javax.swing.AbstractButton; -import javax.swing.Action; -import javax.swing.DefaultComboBoxModel; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.JOptionPane; -import javax.swing.JRootPane; -import javax.swing.JTextField; -import javax.swing.KeyStroke; -import javax.swing.ListCellRenderer; -import javax.swing.ListSelectionModel; -import javax.swing.event.ListSelectionEvent; -import javax.swing.text.JTextComponent; import java.awt.Component; import java.awt.Dialog; import java.awt.Dimension; @@ -93,6 +62,37 @@ import java.util.List; import java.util.Map; import java.util.Set; +import javax.swing.AbstractAction; +import javax.swing.AbstractButton; +import javax.swing.Action; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JOptionPane; +import javax.swing.JRootPane; +import javax.swing.JTextField; +import javax.swing.KeyStroke; +import javax.swing.ListCellRenderer; +import javax.swing.ListSelectionModel; +import javax.swing.event.ListSelectionEvent; +import javax.swing.text.JTextComponent; +import jaxx.runtime.JAXXUtil; +import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.editor.NumberEditor; +import jaxx.runtime.swing.editor.bean.BeanComboBox; +import jaxx.runtime.swing.editor.bean.BeanDoubleList; +import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; +import jaxx.runtime.swing.renderer.DecoratorListCellRenderer; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.lang3.reflect.ConstructorUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXDatePicker; +import org.nuiton.util.decorator.Decorator; +import org.nuiton.util.decorator.JXPathDecorator; +import org.nuiton.validator.bean.simple.SimpleBeanValidator; import static org.nuiton.i18n.I18n._; @@ -557,6 +557,54 @@ * Prépare un component de choix d'entités pour un type d'entité donné et * pour un service de persistance donné. * + * @param comboBox le component graphique à initialiser + */ + protected <E extends Serializable> void initBeanComboBox( + BeanComboBox<E> comboBox, + List<E> data, + E selectedData) { + + initBeanComboBox(comboBox, data, selectedData, null); + } + + protected <E extends Serializable> void initBeanComboBox( + BeanComboBox<E> comboBox, + List<E> data, + E selectedData, + String decoratorContext) { + + Preconditions.checkNotNull(comboBox, "No comboBox!"); + + Class<E> beanType = comboBox.getBeanType(); + + Preconditions.checkNotNull(beanType, "No beanType on the combobox!"); + + Decorator<E> decorator = getDecorator(beanType, decoratorContext); + + if (data == null) { + data = Lists.newArrayList(); + } + + if (log.isInfoEnabled()) { + log.info("entity comboBox list [" + beanType.getName() + "] : " + + (data == null ? 0 : data.size())); + } + + // add data list to combo box + comboBox.init((JXPathDecorator<E>) decorator, data); + + comboBox.setSelectedItem(selectedData); + + if (log.isDebugEnabled()) { + log.debug("combo [" + beanType.getName() + "] : " + + comboBox.getData().size()); + } + } + + /** + * Prépare un component de choix d'entités pour un type d'entité donné et + * pour un service de persistance donné. + * * @param list le component graphique à initialiser * @param data la liste des données à mettre dans la liste de gauche * @param selectedData la liste des données à mettre dans la liste de droite Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/TuttiComputedOrNotDataTableCell.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/TuttiComputedOrNotDataTableCell.java 2013-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/TuttiComputedOrNotDataTableCell.java 2013-03-12 09:49:05 UTC (rev 584) @@ -211,23 +211,25 @@ Number dataValue = data.getData(); Font font; Color foreground; + String text; if (dataValue == null) { dataValue = data.getComputedData(); font = TuttiUI.TEXTFIELD_COMPUTED_FONT; foreground = computedDataColor; + + if (useFloat && decimalNumber != null && dataValue != null) { + text = JAXXUtil.getStringValue( + String.format("%." + decimalNumber + "f", dataValue)); + } else { + text = JAXXUtil.getStringValue(dataValue); + } } else { font = TuttiUI.TEXTFIELD_NORMAL_FONT; foreground = Color.BLACK; - } - String text; - if (useFloat && decimalNumber != null && dataValue != null) { - text = JAXXUtil.getStringValue( - String.format("%." + decimalNumber + "f", dataValue)); - } else { text = JAXXUtil.getStringValue(dataValue); } - + Component component = delegate.getTableCellRendererComponent(table, text, isSelected, Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/VesselTableCell.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/VesselTableCell.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/VesselTableCell.java 2013-03-12 09:49:05 UTC (rev 584) @@ -0,0 +1,133 @@ +package fr.ifremer.tutti.ui.swing.util.editor; + +import com.google.common.base.Function; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.MouseEvent; +import java.util.EventObject; +import java.util.List; +import java.util.Map; +import javax.swing.DefaultCellEditor; +import javax.swing.DefaultListCellRenderer; +import javax.swing.JComboBox; +import javax.swing.JList; +import javax.swing.JTable; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; +import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; +import org.nuiton.util.decorator.Decorator; +import org.nuiton.util.decorator.JXPathDecorator; + +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public class VesselTableCell { + + protected Decorator<Vessel> decorator; + protected List<Vessel> vessels; + protected Map<String, Vessel> vesselMap; + + public VesselTableCell(TuttiUIContext context) { + DecoratorService decoratorService = context.getDecoratorService(); + decorator = decoratorService.getDecoratorByType(Vessel.class); + + vessels = Lists.newArrayList(context.getDataContext().getFishingVessels()); + vessels.addAll(context.getDataContext().getScientificVessels()); + vesselMap = Maps.uniqueIndex(vessels, new Function<Vessel, String>() { + public String apply(Vessel f) { + return f != null ? f.getId() : null; + } + }); + } + + public TableCellEditor getNewTableCellEditor() { + return new VesselTableCellEditor(); + } + + public TableCellRenderer getNewTableCellRenderer() { + return new VesselTableCellRenderer(); + } + + protected class VesselTableCellEditor extends DefaultCellEditor { + + protected VesselTableCellEditor() { + super(new JComboBox()); + + final BeanFilterableComboBox<Vessel> component = new BeanFilterableComboBox<Vessel>(); + component.setShowReset(true); + + editorComponent = component; + delegate = new DefaultCellEditor.EditorDelegate() { + @Override + public void setValue(Object value) { + if (value != null && String.class.isInstance(value)) { + value = vesselMap.get((String) value); + } + component.setSelectedItem(value); + } + + @Override + public Object getCellEditorValue() { + String result = null; + Object selectedItem = component.getSelectedItem(); + if (Vessel.class.isInstance(selectedItem)) { + Vessel vessel = (Vessel) component.getSelectedItem(); + if (vessel != null) { + result = vessel.getId(); + } + } + return result; + } + + @Override + public boolean shouldSelectCell(EventObject anEvent) { + if (anEvent instanceof MouseEvent) { + MouseEvent e = (MouseEvent) anEvent; + return e.getID() != MouseEvent.MOUSE_DRAGGED; + } + return true; + } + + @Override + public boolean stopCellEditing() { + if (component.isEditable()) { + // Commit edited value. + component.getCombobox().actionPerformed( + new ActionEvent(VesselTableCellEditor.this, 0, "")); + } + return super.stopCellEditing(); + } + }; + + component.init((JXPathDecorator<Vessel>) decorator, vessels); + } + + class VesselListCellRenderer extends DefaultListCellRenderer { + + @Override + public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + return super.getListCellRendererComponent(list, decorator.toString(value), index, isSelected, cellHasFocus); + } + } + } + + protected class VesselTableCellRenderer extends DefaultTableCellRenderer { + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, + boolean isSelected, boolean hasFocus, + int row, int column) { + + String vesselId = String.valueOf(value); + Vessel vessel = vesselMap.get(vesselId); + return super.getTableCellRendererComponent(table, decorator.toString(vessel), isSelected, hasFocus, row, column); + } + } +} 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-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-03-12 09:49:05 UTC (rev 584) @@ -171,6 +171,8 @@ tutti.label.catches.benthosTotalUnsortedWeight= tutti.label.catches.benthosTotalWeight= tutti.label.catches.catchTotalRejectedWeight= +tutti.label.catches.catchTotalSortedCarousselWeight= +tutti.label.catches.catchTotalSortedTremisWeight= tutti.label.catches.catchTotalSortedWeight= tutti.label.catches.catchTotalUnsortedWeight= tutti.label.catches.catchTotalWeight= @@ -323,6 +325,7 @@ tutti.option.launch.mode.description= tutti.option.programId.description= tutti.option.protocolId.description= +tutti.option.tremieCarousselVessel.description= tutti.option.ui.autoPopupNumberEditor.description= tutti.option.ui.color.blockingLayer.description= tutti.option.ui.color.cellWithValue.description= @@ -336,6 +339,7 @@ tutti.option.ui.shortcut.closePopup.description= tutti.option.ui.showNumberEditorButton.description= tutti.option.update.url.description= +tutti.option.weights.rate.difference.totalAndSorted.description= tutti.sampleCategoryType.age= tutti.sampleCategoryType.maturity= tutti.sampleCategoryType.sex= @@ -535,6 +539,8 @@ tuttihelp.editCatchBatch.field.benthosTotalUnsortedWeight.tip= tuttihelp.editCatchBatch.field.benthosTotalWeight.tip= tuttihelp.editCatchBatch.field.catchTotalRejectedWeight.tip= +tuttihelp.editCatchBatch.field.catchTotalSortedCarousselWeight.tip= +tuttihelp.editCatchBatch.field.catchTotalSortedTremisWeight.tip= tuttihelp.editCatchBatch.field.catchTotalSortedWeight.tip= tuttihelp.editCatchBatch.field.catchTotalUnsortedWeight.tip= tuttihelp.editCatchBatch.field.catchTotalWeight.tip= 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-03-12 09:43:03 UTC (rev 583) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-03-12 09:49:05 UTC (rev 584) @@ -183,6 +183,8 @@ tutti.label.catches.benthosTotalWeight=Poids TOTAL (kg) tutti.label.catches.catchThalassa=(*) uniquement sur Thalassa tutti.label.catches.catchTotalRejectedWeight=Poids total NON TRIÉ (kg) +tutti.label.catches.catchTotalSortedCarousselWeight=Caroussel observé (*) +tutti.label.catches.catchTotalSortedTremisWeight=Tremie (*) tutti.label.catches.catchTotalSortedWeight=Poids total VRAC (kg) tutti.label.catches.catchTotalUnsortedWeight=Poids total HORS VRAC (kg) tutti.label.catches.catchTotalWeight=Poids TOTAL (kg) @@ -343,6 +345,7 @@ tutti.option.launch.mode.description=Mode de démarrage de l'application tutti.option.programId.description=Identifiant de la dernière série de campagne utilisée tutti.option.protocolId.description=Identifiant du dernier protocole utilisé +tutti.option.tremieCarousselVessel.description=Navire ayant un caroussel et un trémie (Thalassa) tutti.option.ui.autoPopupNumberEditor.description=Toujours afficher le pavé numérique lors de l'édition d'un nombre tutti.option.ui.color.blockingLayer.description=Couleur utilisée pour bloquer l'interface lors d'une action longue tutti.option.ui.color.cellWithValue.description=Couleur d'une cellule avec des données @@ -356,6 +359,7 @@ tutti.option.ui.shortcut.closePopup.description=Fermer une popup tutti.option.ui.showNumberEditorButton.description=Afficher le pavé numérique de saisie tutti.option.update.url.description=URL de mise à jour +tutti.option.weights.rate.difference.totalAndSorted.description=Pourcentage de différence entre les Poids totaux VRAC triés et les poids totaux VRAC en dessous duquel on demande confirmation sur la saisie. tutti.sampleCategoryType.age=Age tutti.sampleCategoryType.maturity=Maturité tutti.sampleCategoryType.sex=Sexe @@ -539,7 +543,6 @@ tutti.validator.warning.longitude.minute.outOfBounds=La minute de la latitude doit être comprise entre 0 et 60 tutti.validator.warning.longitude.outOfBounds=La Latitude doit être comprise entre -180.0 et 180.0 tutti.validator.warning.longitude.second.outOfBounds=La seconde de la longitude doit être comprise entre 0 et 60 -tutti.weights.rate.difference.totalAndSorted.description=Pourcentage de différence entre les Poids totaux VRAC triés et les poids totaux VRAC en dessous duquel on demande confirmation sur la saisie. tuttihelp.createSpeciesBatch.action.addSpecies.tip=Sélectionner une autre espèce tuttihelp.createSpeciesBatch.action.cancel.tip= tuttihelp.createSpeciesBatch.action.save.tip= @@ -560,6 +563,8 @@ tuttihelp.editCatchBatch.field.benthosTotalUnsortedWeight.tip= tuttihelp.editCatchBatch.field.benthosTotalWeight.tip= tuttihelp.editCatchBatch.field.catchTotalRejectedWeight.tip= +tuttihelp.editCatchBatch.field.catchTotalSortedCarousselWeight.tip= +tuttihelp.editCatchBatch.field.catchTotalSortedTremisWeight.tip= tuttihelp.editCatchBatch.field.catchTotalSortedWeight.tip= tuttihelp.editCatchBatch.field.catchTotalUnsortedWeight.tip= tuttihelp.editCatchBatch.field.catchTotalWeight.tip=