Author: kmorin Date: 2013-01-14 17:35:12 +0100 (Mon, 14 Jan 2013) New Revision: 193 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/193 Log: * [PROTOCOL] add columns to species * [FISHING OPERATION] check model validity before saving on operation change * [FISHING OPERATION] save on tab change (not only edit fishing operation tab change) * [FISHING OPERATION] update combo when data change Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TabHandler.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 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/FishingOperationsUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-14 16:21:51 UTC (rev 192) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-01-14 16:35:12 UTC (rev 193) @@ -41,7 +41,9 @@ import fr.ifremer.tutti.ui.swing.content.operation.fishing.gearshooting.GearShootingTabUIModel; import fr.ifremer.tutti.ui.swing.content.operation.fishing.hydrology.HydrologyTabUI; import fr.ifremer.tutti.ui.swing.content.operation.fishing.hydrology.HydrologyTabUIModel; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler; import fr.ifremer.tutti.ui.swing.util.CustomTab; +import fr.ifremer.tutti.ui.swing.util.TabHandler; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import java.awt.BorderLayout; import java.beans.PropertyChangeEvent; @@ -63,7 +65,8 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class EditFishingOperationUIHandler extends AbstractTuttiUIHandler<EditFishingOperationUIModel> { +public class EditFishingOperationUIHandler extends AbstractTuttiTabContainerUIHandler<EditFishingOperationUIModel> + implements TabHandler { /** Logger. */ private static final Log log = @@ -251,36 +254,6 @@ hydrologyModel.setAvailableCaracteristics(persistenceService.getAllFishingOperationHydrologicCaracteristic()); tabPanel.setTabComponentAt(3, new CustomTab(hydrologyModel)); - tabPanel.setModel(new DefaultSingleSelectionModel() { - - @Override - public void setSelectedIndex(int index) { - int currentIndex = tabPanel.getSelectedIndex(); - boolean mustSelectIndex = true; - - if (currentIndex >= 0) { - CustomTab currentTab = (CustomTab) tabPanel.getTabComponentAt(currentIndex); - AbstractTuttiBeanUIModel model = currentTab.getModel(); - - if (TuttiUIContext.VALIDATION_CONTEXT_EDIT.equals(getModel().getValidationContext()) - || model.isValid()) { - if (!model.isCreate() && model.isModify()) { - save(); - } - super.setSelectedIndex(index); - - } else { - mustSelectIndex = false; - } - } - - if (mustSelectIndex) { - super.setSelectedIndex(index); - } - } - - }); - MainUI main = ui.getContextValue(MainUI.class, MainUI.class.getName()); main.clearValidators(); main.registerValidator(ui.getValidator()); @@ -303,6 +276,43 @@ } @Override + protected JTabbedPane getTabPanel() { + return ui.getFishingOperationTabPane(); + } + + @Override + protected boolean onTabChanged(int currentIndex, int newIndex) { + boolean result = super.onTabChanged(currentIndex, newIndex); + if (result && currentIndex != newIndex && currentIndex >= 0) { + CustomTab currentTab = (CustomTab) getTabPanel().getTabComponentAt(currentIndex); + AbstractTuttiBeanUIModel model = currentTab.getModel(); + result = TuttiUIContext.VALIDATION_CONTEXT_EDIT.equals(getModel().getValidationContext()) + || model.isValid(); + + if (result && !model.isCreate() && model.isModify()) { + save(); + } + } + return result; + } + + @Override + public boolean onHideTab() { + AbstractTuttiBeanUIModel model = getModel(); + boolean result = TuttiUIContext.VALIDATION_CONTEXT_EDIT.equals(getModel().getValidationContext()) + || model.isValid(); + if (result && !model.isCreate() && model.isModify()) { + save(); + } + return result; + } + + @Override + public void onShowTab() { + log.info("show tab"); + } + + @Override protected EditFishingOperationUIModel getModel() { return ui.getModel(); } @@ -399,7 +409,7 @@ if (log.isWarnEnabled()) { log.warn("Won't save new fishing operation, use explicit save button instead..."); } - } else { + } else if (beanToSave.isValid()) { if (beanToSave.isUseSexagecimalFormat()) { beanToSave.convertGearShootingCoordinatesDMSToDD(); } @@ -525,4 +535,5 @@ ui.getLocationComboBox().setData(location); } } + } 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-01-14 16:21:51 UTC (rev 192) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java 2013-01-14 16:35:12 UTC (rev 193) @@ -33,6 +33,8 @@ import fr.ifremer.tutti.ui.swing.MainUI; import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiTabContainerUIHandler; +import fr.ifremer.tutti.ui.swing.util.TabHandler; import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -42,6 +44,8 @@ import java.beans.PropertyChangeListener; import java.util.Date; import java.util.List; +import javax.swing.DefaultSingleSelectionModel; +import javax.swing.JTabbedPane; import static org.nuiton.i18n.I18n._; @@ -51,7 +55,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class FishingOperationsUIHandler extends AbstractTuttiUIHandler<FishingOperationsUIModel> { +public class FishingOperationsUIHandler extends AbstractTuttiTabContainerUIHandler<FishingOperationsUIModel> { /** Logger. */ private static final Log log = @@ -166,6 +170,11 @@ protected FishingOperationsUIModel getModel() { return ui.getModel(); } + + @Override + protected JTabbedPane getTabPanel() { + return ui.getTabPane(); + } public void createNewFishingOperation() { @@ -238,6 +247,7 @@ if (create) { savedFishingOperation = persistenceService.createFishingOperation(toSave); model.addFishingOperation(savedFishingOperation); + model.setSelectedFishingOperation(savedFishingOperation); } else { savedFishingOperation = persistenceService.saveFishingOperation(toSave); @@ -247,16 +257,7 @@ FishingOperation existingFishingOperation = TuttiEntities.findById(data, savedFishingOperation.getId()); - if (existingFishingOperation != null) { - data.remove(existingFishingOperation); - } - data.add(savedFishingOperation); - - // update model fishingOperation list - model.setFishingOperation(data); + model.updateFishingOperation(existingFishingOperation, savedFishingOperation); } - - // update model selected fishingOperation - model.setSelectedFishingOperation(savedFishingOperation); } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 2013-01-14 16:21:51 UTC (rev 192) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIModel.java 2013-01-14 16:35:12 UTC (rev 193) @@ -72,6 +72,24 @@ firePropertyChange(PROPERTY_FISHING_OPERATION, oldValue, this.fishingOperation); } + public void removeFishingOperation(FishingOperation fishingOperation) { + Object oldValue = Lists.newArrayList(getFishingOperation()); + this.fishingOperation.remove(fishingOperation); + firePropertyChange(PROPERTY_FISHING_OPERATION, oldValue, this.fishingOperation); + } + + public void updateFishingOperation(FishingOperation oldFishingOperation, + FishingOperation newFishingOperation) { + int oldFishingOperationIndex = fishingOperation.indexOf(oldFishingOperation); + fishingOperation.remove(oldFishingOperation); + if (oldFishingOperationIndex >= 0) { + fishingOperation.add(oldFishingOperationIndex, newFishingOperation); + } else { + fishingOperation.add(newFishingOperation); + } + firePropertyChange(PROPERTY_FISHING_OPERATION, null, fishingOperation); + } + public FishingOperation getSelectedFishingOperation() { return selectedFishingOperation; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java 2013-01-14 16:21:51 UTC (rev 192) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTabUIHandler.java 2013-01-14 16:35:12 UTC (rev 193) @@ -230,8 +230,9 @@ TuttiProtocol protocol = ui.getContextValue(TuttiProtocol.class); List<String> environmentPmfmIds = Lists.newArrayList(); - if (protocol != null) { - environmentPmfmIds.addAll(protocol.getEnvironmentPmfmId()); + List<String> protocolEnvironmentPmfmId = protocol.getEnvironmentPmfmId(); + if (protocol != null && protocolEnvironmentPmfmId != null) { + environmentPmfmIds.addAll(protocolEnvironmentPmfmId); } List<EnvironmentRowModel> rows = Lists.newArrayList(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java 2013-01-14 16:21:51 UTC (rev 192) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTabUIHandler.java 2013-01-14 16:35:12 UTC (rev 193) @@ -233,8 +233,9 @@ TuttiProtocol protocol = ui.getContextValue(TuttiProtocol.class); List<String> gearPmfmIds = Lists.newArrayList(); - if (protocol != null) { - gearPmfmIds.addAll(protocol.getGearPmfmId()); + List<String> protocolGearPmfmId = protocol.getGearPmfmId(); + if (protocol != null && protocolGearPmfmId != null) { + gearPmfmIds.addAll(protocolGearPmfmId); } List<GearShootingRowModel> rows = Lists.newArrayList(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java 2013-01-14 16:21:51 UTC (rev 192) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java 2013-01-14 16:35:12 UTC (rev 193) @@ -38,7 +38,7 @@ public class EditProtocolSpeciesRowModel extends AbstractTuttiBeanUIModel<SpeciesProtocol, EditProtocolSpeciesRowModel> { private static final long serialVersionUID = 1L; - + public static final String PROPERTY_SPECIES = "species"; public static final String PROPERTY_SIZE_ENABLED = "sizeEnabled"; @@ -51,8 +51,12 @@ public static final String PROPERTY_LENGTH_STEP_PMFM = "lengthStepPmfm"; - public static final String PROPERTY_SORTED_UNSORTED = "sortedUnsorted"; + public static final String PROPERTY_WEIGHT_ENABLED = "weightEnabled"; + public static final String PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED = "countIfNoFrequencyEnabled"; + + public static final String PROPERTY_CALCIFY_SAMPLE_ENABLED = "calcifySampleEnabled"; + protected Species species; protected boolean sizeEnabled; @@ -63,10 +67,14 @@ protected boolean ageEnabled; - protected boolean sortedUnsorted; - protected Caracteristic lengthStepPmfm; + protected boolean weightEnabled; + + protected boolean countIfNoFrequencyEnabled; + + protected boolean calcifySampleEnabled; + protected static final Binder<SpeciesProtocol, EditProtocolSpeciesRowModel> fromBeanBinder = BinderFactory.newBinder(SpeciesProtocol.class, EditProtocolSpeciesRowModel.class); @@ -133,16 +141,6 @@ firePropertyChange(PROPERTY_AGE_ENABLED, oldValue, ageEnabled); } - public boolean isSortedUnsorted() { - return sortedUnsorted; - } - - public void setSortedUnsorted(boolean sortedUnsorted) { - Object oldValue = isSortedUnsorted(); - this.sortedUnsorted = sortedUnsorted; - firePropertyChange(PROPERTY_SORTED_UNSORTED, oldValue, sortedUnsorted); - } - public String getLengthStepPmfmId() { return lengthStepPmfm != null ? lengthStepPmfm.getId() : null; } @@ -156,4 +154,35 @@ this.lengthStepPmfm = lengthStepPmfm; firePropertyChange(PROPERTY_LENGTH_STEP_PMFM, oldValue, lengthStepPmfm); } + + public boolean isWeightEnabled() { + return weightEnabled; + } + + public void setWeightEnabled(boolean weightEnabled) { + Object oldValue = isWeightEnabled(); + this.weightEnabled = weightEnabled; + firePropertyChange(PROPERTY_WEIGHT_ENABLED, oldValue, weightEnabled); + } + + public boolean isCountIfNoFrequencyEnabled() { + return countIfNoFrequencyEnabled; + } + + public void setCountIfNoFrequencyEnabled(boolean countIfNoFrequencyEnabled) { + Object oldValue = isCountIfNoFrequencyEnabled(); + this.countIfNoFrequencyEnabled = countIfNoFrequencyEnabled; + firePropertyChange(PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED, oldValue, countIfNoFrequencyEnabled); + } + + public boolean isCalcifySampleEnabled() { + return calcifySampleEnabled; + } + + public void setCalcifySampleEnabled(boolean calcifySampleEnabled) { + Object oldValue = isCalcifySampleEnabled(); + this.calcifySampleEnabled = calcifySampleEnabled; + firePropertyChange(PROPERTY_CALCIFY_SAMPLE_ENABLED, oldValue, calcifySampleEnabled); + } + } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-01-14 16:21:51 UTC (rev 192) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2013-01-14 16:35:12 UTC (rev 193) @@ -67,10 +67,21 @@ n_("tutti.table.protocol.species.header.lengthStep"), n_("tutti.table.protocol.species.header.lengthStep")); - public static final ColumnIdentifier<EditProtocolSpeciesRowModel> SORTED_UNSORTED = ColumnIdentifier.newId( - EditProtocolSpeciesRowModel.PROPERTY_SORTED_UNSORTED, - n_("tutti.table.protocol.species.header.sortedUnsorted"), - n_("tutti.table.protocol.species.header.sortedUnsorted")); + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> WEIGHT_ENABLED = ColumnIdentifier.newId( + EditProtocolSpeciesRowModel.PROPERTY_WEIGHT_ENABLED, + n_("tutti.table.protocol.species.header.weight"), + n_("tutti.table.protocol.species.header.weight")); + + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> COUNT_IF_NO_FREQUENCY_ENABLED = ColumnIdentifier.newId( + EditProtocolSpeciesRowModel.PROPERTY_COUNT_IF_NO_FREQUENCY_ENABLED, + n_("tutti.table.protocol.species.header.countIfNoFrequency"), + n_("tutti.table.protocol.species.header.countIfNoFrequency")); + + public static final ColumnIdentifier<EditProtocolSpeciesRowModel> CALCIFY_SAMPLE_ENABLED = ColumnIdentifier.newId( + EditProtocolSpeciesRowModel.PROPERTY_CALCIFY_SAMPLE_ENABLED, + n_("tutti.table.protocol.species.header.calcifySample"), + n_("tutti.table.protocol.species.header.calcifySample")); + private static final long serialVersionUID = 1L; @@ -87,6 +98,9 @@ result.setSizeEnabled(true); result.setSexEnabled(true); result.setAgeEnabled(true); + result.setWeightEnabled(true); + result.setCountIfNoFrequencyEnabled(true); + result.setCalcifySampleEnabled(true); result.setValid(false); return result; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-01-14 16:21:51 UTC (rev 192) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-01-14 16:35:12 UTC (rev 193) @@ -54,8 +54,6 @@ import javax.swing.table.TableColumnModel; import jaxx.runtime.swing.editor.bean.BeanDoubleList; import jaxx.runtime.validator.swing.SwingValidator; -import jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer; -import jaxx.runtime.validator.swing.SwingValidatorUtil; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -104,7 +102,9 @@ columToSampleCategory.put(EditProtocolSpeciesTableModel.SEX_ENABLED, SampleCategoryEnum.sex); columToSampleCategory.put(EditProtocolSpeciesTableModel.MATURITY_ENABLED, SampleCategoryEnum.maturity); columToSampleCategory.put(EditProtocolSpeciesTableModel.AGE_ENABLED, SampleCategoryEnum.age); - columToSampleCategory.put(EditProtocolSpeciesTableModel.SORTED_UNSORTED, SampleCategoryEnum.sortedUnsorted); + columToSampleCategory.put(EditProtocolSpeciesTableModel.WEIGHT_ENABLED, SampleCategoryEnum.weight); + columToSampleCategory.put(EditProtocolSpeciesTableModel.COUNT_IF_NO_FREQUENCY_ENABLED, SampleCategoryEnum.countIfNoFrequency); + columToSampleCategory.put(EditProtocolSpeciesTableModel.CALCIFY_SAMPLE_ENABLED, SampleCategoryEnum.calcifySample); } //------------------------------------------------------------------------// @@ -248,7 +248,9 @@ for (SampleCategoryEnum sampleOrder : model.getSampleCategoryOrder()) { ColumnIdentifier<EditProtocolSpeciesRowModel> columnIdentifier = sampleCategoryToColumn.get(sampleOrder); - addBooleanColumnToModel(columnModel, columnIdentifier, table); + if (columnIdentifier != null) { + addBooleanColumnToModel(columnModel, columnIdentifier, table); + } } columnModel.addColumnModelListener(new TableColumnModelListener() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2013-01-14 16:21:51 UTC (rev 192) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java 2013-01-14 16:35:12 UTC (rev 193) @@ -72,7 +72,10 @@ SampleCategoryEnum.size, SampleCategoryEnum.sex, SampleCategoryEnum.maturity, - SampleCategoryEnum.age); + SampleCategoryEnum.age, + SampleCategoryEnum.weight, + SampleCategoryEnum.countIfNoFrequency, + SampleCategoryEnum.calcifySample); /** * Can user remove a selected species? Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiTabContainerUIHandler.java 2013-01-14 16:35:12 UTC (rev 193) @@ -0,0 +1,74 @@ + +package fr.ifremer.tutti.ui.swing.util; + +import fr.ifremer.tutti.ui.swing.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.TuttiUI; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import java.awt.Component; +import javax.swing.DefaultSingleSelectionModel; +import javax.swing.JTabbedPane; + +/** + * + * @author kmorin <kmorin@codelutin.com> + * @since 0.3 + */ +public abstract class AbstractTuttiTabContainerUIHandler<M> extends AbstractTuttiUIHandler<M> { + + protected AbstractTuttiTabContainerUIHandler(TuttiUIContext context) { + super(context); + } + + protected abstract JTabbedPane getTabPanel(); + + protected boolean onTabChanged(int currentIndex, int newIndex) { + boolean result = true; + if (currentIndex != newIndex) { + TabHandler handler = getTabHandler(currentIndex); + if (handler != null) { + result = handler.onHideTab(); + } + + handler = getTabHandler(newIndex); + if (handler != null) { + handler.onShowTab(); + } + } + return result; + } + + protected TabHandler getTabHandler(int index) { + TabHandler tabHandler = null; + JTabbedPane tabPanel = getTabPanel(); + if (index >= 0 && index < tabPanel.getTabCount()) { + Component tab = tabPanel.getComponentAt(index); + if (TuttiUI.class.isInstance(tab)) { + TuttiUI tuttiTab = (TuttiUI) tabPanel.getComponentAt(index); + AbstractTuttiUIHandler handler = tuttiTab.getHandler(); + if (TabHandler.class.isInstance(handler)) { + tabHandler = (TabHandler) handler; + } + } + } + return tabHandler; + } + + protected void initUI(TuttiUI ui) { + super.initUI(ui); + + final JTabbedPane tabPanel = getTabPanel(); + tabPanel.setModel(new DefaultSingleSelectionModel() { + + @Override + public void setSelectedIndex(int index) { + int currentIndex = tabPanel.getSelectedIndex(); + boolean mustChangeTab = onTabChanged(currentIndex, index); + + if (mustChangeTab) { + super.setSelectedIndex(index); + } + } + + }); + } +} Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TabHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TabHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TabHandler.java 2013-01-14 16:35:12 UTC (rev 193) @@ -0,0 +1,14 @@ + +package fr.ifremer.tutti.ui.swing.util; + +/** + * + * @author kmorin <kmorin@codelutin.com> + * @since 0.3 + */ +public interface TabHandler { + + boolean onHideTab(); + + void onShowTab(); +} 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-01-14 16:21:51 UTC (rev 192) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-01-14 16:35:12 UTC (rev 193) @@ -224,12 +224,14 @@ tutti.table.plankton.batch.header.toConfirm=A Confirmer tutti.table.plankton.batch.header.weight=Poids tutti.table.protocol.species.header.age=Age -tutti.table.protocol.species.header.lengthStep=Classe de Taille +tutti.table.protocol.species.header.calcifySample=Prélèvement de pièces calcifiées +tutti.table.protocol.species.header.countIfNoFrequency=Dénombrement +tutti.table.protocol.species.header.lengthStep=Classe de Taille tutti.table.protocol.species.header.maturity=Maturité tutti.table.protocol.species.header.sex=Sexe tutti.table.protocol.species.header.size=Catégorie Tri -tutti.table.protocol.species.header.sortedUnsorted=Vrac / Hors Vrac tutti.table.protocol.species.header.speciesId=Espèce +tutti.table.protocol.species.header.weight=Pesée tutti.table.species.batch.header.ageCategory=Age tutti.table.species.batch.header.comment=Commentaire tutti.table.species.batch.header.computedNumber=Nombre