r1272 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing java/fr/ifremer/tutti/ui/swing/config java/fr/ifremer/tutti/ui/swing/content/config java/fr/ifremer/tutti/ui/swing/content/operation java/fr/ifremer/tutti/ui/swing/content/operation/catches java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency java/fr/ifremer/tutti/ui/
Author: tchemit Date: 2013-10-03 22:30:54 +0200 (Thu, 03 Oct 2013) New Revision: 1272 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1272 Log: refs #3331: [ERGO] - Lisibilit?\195?\169 des tableaux (captures, protocole) ajout des deux nouvelles couleurs improve select for boolean column (still not work) Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 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/content/config/TuttiConfigUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 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/SampleCategoryComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 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/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/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.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/java/fr/ifremer/tutti/ui/swing/RunTutti.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/RunTutti.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -89,9 +89,6 @@ } } - UIManager.put("Table.focusCellHighlightBorder", - new BorderUIResource.LineBorderUIResource(Color.BLACK)); - boolean reload = false; if (config.isFullLaunchMode()) { @@ -127,6 +124,11 @@ context.open(); } + UIManager.put("Table.alternateRowColor", context.getConfig().getColorAlternateRow()); + UIManager.put("Table[Disabled+Selected].textBackground", context.getConfig().getColorSelectedRow()); + UIManager.put("Table[Enabled+Selected].textBackground", context.getConfig().getColorSelectedRow()); + UIManager.put("Table.focusCellHighlightBorder", new BorderUIResource.LineBorderUIResource(Color.BLACK)); + final MainUI mainUI = new MainUI(context); context.addMessageNotifier(mainUI.getHandler()); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -336,14 +336,14 @@ config.getServiceConfig().getPersistenceConfig().initConfig(getResourceLoader()); - // clean db cache (avoid a lots of headache :( - File cacheDirectory = config.getServiceConfig().getPersistenceConfig().getCacheDirectory(); - if (cacheDirectory.exists()) { - // clean cache directory (fix soem headaches...) - TuttiIOUtil.cleanDirectory( - cacheDirectory, - _("tutti.db.deleteCache.error", cacheDirectory)); - } +// // clean db cache (avoid a lots of headache :( +// File cacheDirectory = config.getServiceConfig().getPersistenceConfig().getCacheDirectory(); +// if (cacheDirectory.exists()) { +// // clean cache directory (fix soem headaches...) +// TuttiIOUtil.cleanDirectory( +// cacheDirectory, +// _("tutti.db.deleteCache.error", cacheDirectory)); +// } //--------------------------------------------------------------------// // init i18n 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-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -255,6 +255,14 @@ return applicationConfig.getOptionAsColor(TuttiApplicationConfigOption.COLOR_BLOCKING_LAYER.getKey()); } + public Color getColorAlternateRow() { + return applicationConfig.getOptionAsColor(TuttiApplicationConfigOption.COLOR_ALTERNATE_ROW.getKey()); + } + + public Color getColorSelectedRow() { + return applicationConfig.getOptionAsColor(TuttiApplicationConfigOption.COLOR_SELECTED_ROW.getKey()); + } + public KeyStroke getShortcutClosePopup() { return applicationConfig.getOptionAsKeyStroke(TuttiApplicationConfigOption.SHORTCUT_CLOSE_POPUP.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-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -181,6 +181,23 @@ Color.class ), + COLOR_ALTERNATE_ROW( + "tutti.ui.color.alternateRow", + n_("tutti.config.option.ui.color.alternateRow.description"), + new Color(217, 217, 217).toString(), + Color.class + ), + COLOR_SELECTED_ROW( + "tutti.ui.color.selectedRow", + n_("tutti.config.option.ui.color.selectedRow.description"), + new Color(57,105,138).toString(), + Color.class + ), + + /* + UIDefaults defaults = UIManager.getLookAndFeelDefaults(); +defaults.put("Table.alternateRowColor", new Color(217, 217, 217)); + */ COLOR_BLOCKING_LAYER( "tutti.ui.color.blockingLayer", n_("tutti.config.option.ui.color.blockingLayer.description"), Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -150,6 +150,8 @@ helper.addCategory(n_("tutti.config.category.ui"), n_("tutti.config.category.ui.description"), CALLBACK_UI) + .addOption(TuttiApplicationConfigOption.COLOR_SELECTED_ROW) + .addOption(TuttiApplicationConfigOption.COLOR_ALTERNATE_ROW) .addOption(TuttiApplicationConfigOption.COLOR_ROW_INVALID) .addOption(TuttiApplicationConfigOption.COLOR_ROW_READ_ONLY) .addOption(TuttiApplicationConfigOption.COLOR_CELL_WITH_VALUE) Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -346,8 +346,8 @@ FishingOperationsUIModel model = ui.getModel(); // edit new fishing operation - if (log.isInfoEnabled()) { - log.info("Edit fishingOperation: " + fishingOperation); + if (log.isDebugEnabled()) { + log.debug("Edit fishingOperation: " + fishingOperation); } // now fishing operation is edited @@ -624,8 +624,7 @@ PersistenceService persistenceService = getContext().getPersistenceService(); - progressionModel.increments("Loading catch batch for fishingOperation: " + - operationId); + progressionModel.increments("Chargement de la capture"); boolean withCatchBath = persistenceService.isFishingOperationWithCatchBatch( @@ -681,8 +680,7 @@ boolean catchValid = true; try { - progressionModel.increments("Loading species batch for fishingOperation: " + - operationId); + progressionModel.increments("Chargement des captures Espèces"); ui.getSpeciesTabContent().getHandler().selectFishingOperation(operationToLoad); } catch (InvalidBatchModelException e) { @@ -696,8 +694,7 @@ } try { - progressionModel.increments("Loading benthos batch for fishingOperation: " + - operationId); + progressionModel.increments("Chargement des captures Benthos"); ui.getBenthosTabContent().getHandler().selectFishingOperation(operationToLoad); } catch (InvalidBatchModelException e) { @@ -713,16 +710,13 @@ // load other tabs - progressionModel.increments("Loading marine lietterbatch for fishingOperation: " + - operationId); + progressionModel.increments("Chargmenent des macro-déchets"); ui.getMarineLitterTabContent().getHandler().selectFishingOperation(operationToLoad); - progressionModel.increments("Loading accidental batch for fishingOperation: " + - operationId); + progressionModel.increments("Chargement des captures accidentelles"); ui.getAccidentalTabContent().getHandler().selectFishingOperation(operationToLoad); - progressionModel.increments("Loading individual observation batch for fishingOperation: " + - operationId); + progressionModel.increments("Chargement des données individuelles"); ui.getIndividualObservationTabContent().getHandler().selectFishingOperation(operationToLoad); } else { 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-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -204,6 +204,7 @@ protected boolean onTabChanged(int currentIndex, int newIndex) { ui.getCatchesCaracteristicsAttachmentsButton().onCloseUI(); ui.getComputeSpeciesBatchButton().setVisible(newIndex < 4); + ui.getCleanSpeciesBatchButton().setVisible(newIndex < 3); return super.onTabChanged(currentIndex, newIndex); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SampleCategoryComponent.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SampleCategoryComponent.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/SampleCategoryComponent.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -25,8 +25,9 @@ */ import fr.ifremer.tutti.persistence.entities.data.SampleCategory; +import fr.ifremer.tutti.service.WeightUnit; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import fr.ifremer.tutti.service.WeightUnit; import jaxx.runtime.JAXXUtil; import jaxx.runtime.swing.editor.NumberEditor; import org.nuiton.decorator.Decorator; @@ -45,6 +46,7 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; +import java.awt.Font; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.io.Serializable; @@ -103,6 +105,8 @@ editor = new JPanel(new BorderLayout()); editor.add(BorderLayout.WEST, editorLabel = new JLabel()); editor.add(BorderLayout.CENTER, numberEditor); + editor.setOpaque(true); + editorLabel.setOpaque(true); } public NumberEditor getNumberEditor() { @@ -133,6 +137,14 @@ String label = sampleCategory == null ? "-" : categoryDecorator.toString(categoryValue); + if (isSelected) { + + editorLabel.setFont(table.getFont().deriveFont(Font.BOLD)); + editorLabel.setBackground(TuttiUIContext.getApplicationContext().getConfig().getColorSelectedRow()); + } else { + editorLabel.setFont(table.getFont()); + editorLabel.setBackground(null); + } editorLabel.setText(label); return editor; } @@ -237,7 +249,7 @@ Float number = sampleCategory.getCategoryWeight(); Float computedNumber = sampleCategory.getComputedWeight(); - text = "<html><span style='white-space: nowrap;'>" + categoryDecorator.toString(categoryValue) + " /"; + text = "<span style='white-space: nowrap;'>" + categoryDecorator.toString(categoryValue) + " /"; if (sampleCategory.isSubSample()) { text += "/"; @@ -260,7 +272,13 @@ text += "-"; } - text += "</span></html>"; + text += "</span>"; + + if (isSelected) { + text = "<strong>" + text + "</strong>"; + } + + text = "<html>" + text + "</html>"; } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -35,6 +35,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.ValidationService; +import fr.ifremer.tutti.service.WeightUnit; import fr.ifremer.tutti.ui.swing.content.operation.AbstractTuttiBatchTableUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; @@ -45,7 +46,6 @@ import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import fr.ifremer.tutti.service.WeightUnit; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellEditor; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer; import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapCellComponent; @@ -147,7 +147,6 @@ } } model.setRows(rows); - recomputeBatchActionEnable(); } protected AccidentalBatchRowModel loadBatch(AccidentalBatch aBatch) { @@ -169,6 +168,21 @@ //------------------------------------------------------------------------// @Override + protected void beforeOpenPopup(int rowIndex, int columnIndex) { + super.beforeOpenPopup(rowIndex, columnIndex); + + boolean enableRemove = false; + + if (rowIndex != -1) { + + // there is a selected row + enableRemove = true; + } + AccidentalBatchUIModel model = getModel(); + model.setRemoveBatchEnabled(enableRemove); + } + + @Override public AccidentalBatchTableModel getTableModel() { return (AccidentalBatchTableModel) getTable().getModel(); } @@ -194,9 +208,6 @@ Object newValue) { recomputeRowValidState(row); saveSelectedRowIfNeeded(); - - // when row valid state has changed, recompute action enabled states - recomputeBatchActionEnable(); } @Override @@ -210,6 +221,13 @@ log.info("Row " + row + " was modified, will save it"); } + String title = buildReminderLabelTitle(row.getSpecies(), + null, + "Sauvegarde de la capture accidentelle : ", + "Ligne :" + (getTableModel().getRowIndex(row) + 1)); + + showInformationMessage(title); + rowMonitor.setBean(null); saveRow(row); rowMonitor.setBean(row); @@ -220,28 +238,6 @@ } @Override - protected void onRowValidStateChanged(int rowIndex, - AccidentalBatchRowModel row, - Boolean oldValue, - Boolean newValue) { - super.onRowValidStateChanged(rowIndex, row, oldValue, newValue); - - // when row valid state has changed, recompute action enabled states - recomputeBatchActionEnable(); - } - - @Override - protected void onAfterSelectedRowChanged(int oldRowIndex, - AccidentalBatchRowModel oldRow, - int newRowIndex, - AccidentalBatchRowModel newRow) { - super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); - - // when selected row has changed, recompute action enabled states - recomputeBatchActionEnable(); - } - - @Override protected void addHighlighters(JXTable table) { super.addHighlighters(table); @@ -406,7 +402,6 @@ table.setColumnModel(columnModel); initBatchTable(table, columnModel, tableModel); - recomputeBatchActionEnable(); } @Override @@ -472,29 +467,12 @@ tableModel.addNewRow(newRow); AbstractSelectTableAction.doSelectCell(getTable(), tableModel.getRowCount() - 1, 0); } - - recomputeBatchActionEnable(); } //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// - protected void recomputeBatchActionEnable() { - - int rowIndex = getTable().getSelectedRow(); - - boolean enableRemove = false; - - if (rowIndex != -1) { - - // there is a selected row - enableRemove = true; - } - AccidentalBatchUIModel model = getModel(); - model.setRemoveBatchEnabled(enableRemove); - } - protected void saveRow(AccidentalBatchRowModel row) { AccidentalBatch entityToSave = row.toEntity(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIModel.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIModel.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -55,9 +55,8 @@ } public void setRemoveBatchEnabled(boolean removeBatchEnabled) { - Object oldValue = isRemoveBatchEnabled(); this.removeBatchEnabled = removeBatchEnabled; - firePropertyChange(PROPERTY_REMOVE_BATCH_ENABLED, oldValue, removeBatchEnabled); + firePropertyChange(PROPERTY_REMOVE_BATCH_ENABLED, null, removeBatchEnabled); } //------------------------------------------------------------------------// Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchRowModel.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchRowModel.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -492,7 +492,7 @@ @Override public void setSpeciesToConfirm(boolean speciesToConfirm) { - Object oldValue = isSpeciesToConfirm(); + boolean oldValue = isSpeciesToConfirm(); this.speciesToConfirm = speciesToConfirm; firePropertyChange(PROPERTY_SPECIES_TO_CONFIRM, oldValue, speciesToConfirm); } @@ -606,12 +606,12 @@ @Override public boolean isChildBatchsEmpty() { - return childBatch.isEmpty(); + return childBatch == null || childBatch.isEmpty(); } @Override public int sizeChildBatchs() { - return childBatch.size(); + return childBatch == null ? 0 : childBatch.size(); } @Override @@ -666,6 +666,8 @@ public void collectShell(Set<BenthosBatchRowModel> collectedRows) { + collectedRows.add(this); + if (!isBatchLeaf()) { for (BenthosBatchRowModel batchChild : getChildBatch()) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -141,6 +141,18 @@ } @Override + protected void collectShell(BenthosBatchRowModel row, + Set<BenthosBatchRowModel> collectedRows) { + super.collectShell(row, collectedRows); + + if (!row.isChildBatchsEmpty()) { + for (BenthosBatchRowModel child : row.getChildBatch()) { + collectShell(child, collectedRows); + } + } + } + + @Override public BenthosBatchRowModel createNewRow() { BenthosBatchRowModel result = new BenthosBatchRowModel(weightUnit, sampleCategoryModel); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.css 2013-10-03 20:30:54 UTC (rev 1272) @@ -133,7 +133,7 @@ #table { selectionMode: {ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}; - selectionBackground: {null}; + /*selectionBackground: {null};*/ selectionForeground: {Color.BLACK}; sortable: false; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -91,7 +91,6 @@ import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.RowFilter; -import javax.swing.UIManager; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumnModel; import java.awt.Color; @@ -223,7 +222,7 @@ if (log.isDebugEnabled()) { log.debug("Get species batch for fishingOperation: " + - bean.getId()); + bean.getId()); } rows = Lists.newArrayList(); @@ -307,7 +306,7 @@ recomputeRowValidState(row); - if (SpeciesBatchRowModel.PROPERTY_SAMPLE_CATEGORY_WEIGHT.equals(propertyName)) { + if (BenthosBatchRowModel.PROPERTY_SAMPLE_CATEGORY_WEIGHT.equals(propertyName)) { // sampling category weight has changed, must then save the top // ancestor row @@ -327,8 +326,8 @@ if (log.isDebugEnabled()) { log.debug("Sample category " + sampleCategoryId + - " weight was modified, First ancestor row: " + - firstAncestorIndex + " will save it"); + " weight was modified, First ancestor row: " + + firstAncestorIndex + " will save it"); } saveRow(firstAncestorRow); @@ -339,6 +338,21 @@ // modified sample weight is a leaf // will save it after + } else if (BenthosBatchRowModel.PROPERTY_SPECIES_TO_CONFIRM.equals(propertyName)) { + + // update his shell + + Set<BenthosBatchRowModel> shell = Sets.newHashSet(); + row.collectShell(shell); + + boolean newVal = newValue == null ? false : (Boolean) newValue; + + for (BenthosBatchRowModel sampleCategories : shell) { + sampleCategories.setSpeciesToConfirm(newVal); + } + + getTableModel().fireTableRowUpdatedShell(shell); + } saveSelectedRowIfNeeded(); @@ -358,7 +372,7 @@ String title = buildReminderLabelTitle(row.getSpecies(), row, "Sauvegarde du lot Capture - Benthos : ", - "Ligne :" + getTableModel().getRowIndex(row)); + "Ligne :" + (getTableModel().getRowIndex(row) + 1)); showInformationMessage(title); @@ -389,6 +403,17 @@ } @Override + protected void onAfterSelectedRowChanged(int oldRowIndex, BenthosBatchRowModel oldRow, int newRowIndex, BenthosBatchRowModel newRow) { + super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); + + if (log.isInfoEnabled()) { + log.info("After select row: " + newRowIndex); + } + + saveSelectedRowIfNeeded(); + } + + @Override protected void addHighlighters(JXTable table) { super.addHighlighters(table); @@ -397,25 +422,18 @@ // paint the cell in orange if the row is to confirm Highlighter confirmHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( - new HighlightPredicate() { + new HighlightPredicate.AndHighlightPredicate( + new HighlightPredicate.NotHighlightPredicate(HighlightPredicate.IS_SELECTED), + new HighlightPredicate() { - public boolean isHighlighted(Component renderer, ComponentAdapter adapter) { - BenthosBatchRowModel row = getTableModel().getEntry(adapter.row); - return row.isSpeciesToConfirm(); - } + public boolean isHighlighted(Component renderer, ComponentAdapter adapter) { + BenthosBatchRowModel row = getTableModel().getEntry(adapter.row); + return row.isSpeciesToConfirm(); + } - }, toConfirmColor); + }), toConfirmColor); table.addHighlighter(confirmHighlighter); - // highlight only the species column if the row is selected - Highlighter selectedHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( - new HighlightPredicate.AndHighlightPredicate( - HighlightPredicate.IS_SELECTED, - new HighlightPredicate.IdentifierHighlightPredicate(BenthosBatchTableModel.SPECIES)), - UIManager.getColor("Table[Enabled+Selected].textBackground")); - - table.addHighlighter(selectedHighlighter); - // paint the cell in dark orange if the row is to confirm and the cell is not editable Highlighter confirmNotEditableHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( new HighlightPredicate() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/frequency/BenthosFrequencyUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -32,6 +32,7 @@ import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.WeightUnit; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; @@ -40,7 +41,6 @@ import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import fr.ifremer.tutti.service.WeightUnit; import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; import jaxx.runtime.SwingUtil; @@ -50,14 +50,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; -import org.jdesktop.swingx.decorator.HighlightPredicate; -import org.jdesktop.swingx.decorator.Highlighter; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTextField; -import javax.swing.UIManager; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; @@ -81,8 +78,6 @@ private BenthosFrequencyCellComponent.FrequencyCellEditor frequencyEditor; -// private TuttiProtocol protocol; - private Map<Integer, SpeciesProtocol> speciesProtocol; private Map<String, Caracteristic> lengthStepCaracteristics; @@ -336,20 +331,6 @@ } @Override - protected void addHighlighters(JXTable table) { - super.addHighlighters(table); - - // highlight only the lengthstep column if the row is selected - Highlighter selectedHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( - new HighlightPredicate.AndHighlightPredicate( - HighlightPredicate.IS_SELECTED, - new HighlightPredicate.IdentifierHighlightPredicate(BenthosFrequencyTableModel.LENGTH_STEP)), - UIManager.getColor("Table[Enabled+Selected].textBackground")); - - table.addHighlighter(selectedHighlighter); - } - - @Override protected JComponent getComponentToFocus() { return getUI().getLengthStepCaracteristicComboBox(); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -227,6 +227,13 @@ log.debug("Row " + row + " was modified, will save it"); } + String title = buildReminderLabelTitle(row.getSpecies(), + null, + "Sauvegarde de Données individuelles : ", + "Ligne :" + (getTableModel().getRowIndex(row) + 1)); + + showInformationMessage(title); + rowMonitor.setBean(null); saveRow(row); rowMonitor.setBean(row); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -155,7 +155,7 @@ Decorator<Caracteristic> caracteristicTipDecorator = getDecorator(Caracteristic.class, DecoratorService.CARACTERISTIC_WITH_UNIT); - int index = 4; + int index = 6; for (Caracteristic caracteristic : caracteristics) { final CreateIndividualObservationBatchUIModel.CaracteristicMapPropertyEditor editorModel = Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -34,6 +34,7 @@ import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.service.ValidationService; +import fr.ifremer.tutti.service.WeightUnit; import fr.ifremer.tutti.ui.swing.content.operation.AbstractTuttiBatchTableUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; @@ -43,7 +44,6 @@ import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import fr.ifremer.tutti.service.WeightUnit; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellEditor; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer; import fr.ifremer.tutti.ui.swing.util.comment.CommentCellEditor; @@ -116,7 +116,7 @@ if (log.isDebugEnabled()) { log.debug("Get marineLitter batch for fishingOperation: " + - bean.getId()); + bean.getId()); } rows = Lists.newArrayList(); @@ -192,10 +192,17 @@ if (row != null && row.isValid() && rowMonitor.wasModified()) { // monitored bean was modified, save it - if (log.isInfoEnabled()) { - log.info("Row " + row + " was modified, will save it"); + if (log.isDebugEnabled()) { + log.debug("Row " + row + " was modified, will save it"); } + String title = buildReminderLabelTitle(decorate(row.getMarineLitterCategory()) + " - " + decorate(row.getMarineLitterSizeCategory()), + null, + "Sauvegarde du lot Macro déchet : ", + "Ligne :" + getTableModel().getRowIndex(row) + 1); + + showInformationMessage(title); + rowMonitor.setBean(null); saveRow(row); rowMonitor.setBean(row); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIModel.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIModel.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -83,9 +83,8 @@ } public void setRemoveBatchEnabled(boolean removeBatchEnabled) { - Object oldValue = isRemoveBatchEnabled(); this.removeBatchEnabled = removeBatchEnabled; - firePropertyChange(PROPERTY_REMOVE_BATCH_ENABLED, oldValue, removeBatchEnabled); + firePropertyChange(PROPERTY_REMOVE_BATCH_ENABLED, null, removeBatchEnabled); } public Multimap<CaracteristicQualitativeValue, CaracteristicQualitativeValue> getMarineLitterCategoriesUsed() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -268,7 +268,7 @@ @Override public void setSpeciesToConfirm(boolean speciesToConfirm) { - Object oldValue = isSpeciesToConfirm(); + boolean oldValue = isSpeciesToConfirm(); editObject.setSpeciesToConfirm(speciesToConfirm); firePropertyChange(PROPERTY_SPECIES_TO_CONFIRM, oldValue, speciesToConfirm); } @@ -379,12 +379,12 @@ @Override public boolean isChildBatchsEmpty() { - return childBatch.isEmpty(); + return childBatch == null || childBatch.isEmpty(); } @Override public int sizeChildBatchs() { - return childBatch.size(); + return childBatch == null ? 0 : childBatch.size(); } @Override @@ -633,9 +633,10 @@ this.computedOrNotWeight = computedOrNotWeight; } - public void collectShell(Set<SpeciesBatchRowModel> collectedRows) { + collectedRows.add(this); + if (!isBatchLeaf()) { for (SpeciesBatchRowModel batchChild : getChildBatch()) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -140,6 +140,18 @@ } @Override + protected void collectShell(SpeciesBatchRowModel row, + Set<SpeciesBatchRowModel> collectedRows) { + super.collectShell(row, collectedRows); + + if (!row.isChildBatchsEmpty()) { + for (SpeciesBatchRowModel child : row.getChildBatch()) { + collectShell(child, collectedRows); + } + } + } + + @Override public SpeciesBatchRowModel createNewRow() { SpeciesBatchRowModel result = new SpeciesBatchRowModel(weightUnit, sampleCategoryModel); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-10-03 20:30:54 UTC (rev 1272) @@ -133,7 +133,7 @@ #table { selectionMode: {ListSelectionModel.MULTIPLE_INTERVAL_SELECTION}; - selectionBackground: {null}; + /*selectionBackground: {null};*/ selectionForeground: {Color.BLACK}; sortable: false; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -90,7 +90,6 @@ import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.RowFilter; -import javax.swing.UIManager; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumnModel; import java.awt.Color; @@ -229,7 +228,7 @@ if (log.isDebugEnabled()) { log.debug("Get species batch for fishingOperation: " + - bean.getId()); + bean.getId()); } rows = Lists.newArrayList(); @@ -335,8 +334,8 @@ if (log.isDebugEnabled()) { log.debug("Sample category " + sampleCategoryId + - " weight was modified, First ancestor row: " + - firstAncestorIndex + " will save it"); + " weight was modified, First ancestor row: " + + firstAncestorIndex + " will save it"); } saveRow(firstAncestorRow); @@ -347,6 +346,21 @@ // modified sample weight is a leaf // will save it after + } else if (SpeciesBatchRowModel.PROPERTY_SPECIES_TO_CONFIRM.equals(propertyName)) { + + // update his shell + + Set<SpeciesBatchRowModel> shell = Sets.newHashSet(); + row.collectShell(shell); + + boolean newVal = newValue == null ? false : (Boolean) newValue; + + for (SpeciesBatchRowModel sampleCategories : shell) { + sampleCategories.setSpeciesToConfirm(newVal); + } + + getTableModel().fireTableRowUpdatedShell(shell); + } saveSelectedRowIfNeeded(); @@ -366,7 +380,7 @@ String title = buildReminderLabelTitle(row.getSpecies(), row, "Sauvegarde des modifications du lot Capture - Espèces : ", - "Ligne :" + getTableModel().getRowIndex(row)); + "Ligne :" + (getTableModel().getRowIndex(row) + 1)); showInformationMessage(title); @@ -397,6 +411,17 @@ } @Override + protected void onAfterSelectedRowChanged(int oldRowIndex, SpeciesBatchRowModel oldRow, int newRowIndex, SpeciesBatchRowModel newRow) { + super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); + + if (log.isInfoEnabled()) { + log.info("After select row: " + newRowIndex); + } + + saveSelectedRowIfNeeded(); + } + + @Override protected void addHighlighters(JXTable table) { super.addHighlighters(table); @@ -405,25 +430,18 @@ // paint the cell in orange if the row is to confirm Highlighter confirmHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( - new HighlightPredicate() { + new HighlightPredicate.AndHighlightPredicate( + new HighlightPredicate.NotHighlightPredicate(HighlightPredicate.IS_SELECTED), + new HighlightPredicate() { - public boolean isHighlighted(Component renderer, ComponentAdapter adapter) { - SpeciesBatchRowModel row = getTableModel().getEntry(adapter.row); - return row.isSpeciesToConfirm(); - } + public boolean isHighlighted(Component renderer, ComponentAdapter adapter) { + SpeciesBatchRowModel row = getTableModel().getEntry(adapter.row); + return row.isSpeciesToConfirm(); + } - }, toConfirmColor); + }), toConfirmColor); table.addHighlighter(confirmHighlighter); - // highlight only the species column if the row is selected - Highlighter selectedHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( - new HighlightPredicate.AndHighlightPredicate( - HighlightPredicate.IS_SELECTED, - new HighlightPredicate.IdentifierHighlightPredicate(SpeciesBatchTableModel.SPECIES)), - UIManager.getColor("Table[Enabled+Selected].textBackground")); - - table.addHighlighter(selectedHighlighter); - // paint the cell in dark orange if the row is to confirm and the cell is not editable Highlighter confirmNotEditableHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( new HighlightPredicate() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -32,6 +32,7 @@ import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.WeightUnit; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; @@ -41,7 +42,6 @@ import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import fr.ifremer.tutti.service.WeightUnit; import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; import jaxx.runtime.SwingUtil; @@ -51,14 +51,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; -import org.jdesktop.swingx.decorator.HighlightPredicate; -import org.jdesktop.swingx.decorator.Highlighter; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTextField; -import javax.swing.UIManager; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; @@ -333,20 +330,6 @@ } @Override - protected void addHighlighters(JXTable table) { - super.addHighlighters(table); - - // highlight only the lengthstep column if the row is selected - Highlighter selectedHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( - new HighlightPredicate.AndHighlightPredicate( - HighlightPredicate.IS_SELECTED, - new HighlightPredicate.IdentifierHighlightPredicate(SpeciesFrequencyTableModel.LENGTH_STEP)), - UIManager.getColor("Table[Enabled+Selected].textBackground")); - - table.addHighlighter(selectedHighlighter); - } - - @Override protected JComponent getComponentToFocus() { return getUI().getLengthStepCaracteristicComboBox(); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-10-03 20:30:54 UTC (rev 1272) @@ -88,7 +88,6 @@ } #speciesTable { - /*selectionMode: {ListSelectionModel.SINGLE_SELECTION};*/ /*selectionBackground: {null};*/ selectionForeground: {Color.BLACK}; sortable: false; @@ -106,7 +105,6 @@ } #benthosTable { - /*selectionMode: {ListSelectionModel.SINGLE_SELECTION};*/ /*selectionBackground: {null};*/ selectionForeground: {Color.BLACK}; sortable: false; 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-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -42,7 +42,6 @@ import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.CloseableUI; import fr.ifremer.tutti.ui.swing.util.TuttiUI; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.species.SelectSpeciesUI; import fr.ifremer.tutti.ui.swing.util.species.SelectSpeciesUIModel; import jaxx.runtime.SwingUtil; @@ -57,9 +56,6 @@ import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.autocomplete.ComboBoxCellEditor; import org.jdesktop.swingx.autocomplete.ObjectToStringConverter; -import org.jdesktop.swingx.decorator.ComponentAdapter; -import org.jdesktop.swingx.decorator.HighlightPredicate; -import org.jdesktop.swingx.decorator.Highlighter; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; import org.nuiton.decorator.Decorator; @@ -74,7 +70,6 @@ import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableColumnModel; -import java.awt.Component; import java.awt.Dimension; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -241,7 +236,7 @@ } } - if (model.getLengthClassesPmfmId()==null) { + if (model.getLengthClassesPmfmId() == null) { model.setLengthClassesPmfmId(Lists.<String>newArrayList()); } @@ -686,30 +681,6 @@ }); } - protected void addHighlighters(final JXTable table) { - // paint in a special color for read only cells - Highlighter readOnlyHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( - HighlightPredicate.READ_ONLY, getConfig().getColorRowReadOnly()); - table.addHighlighter(readOnlyHighlighter); - - // paint in a special color inValid rows - Highlighter validHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( - new HighlightPredicate.AndHighlightPredicate(HighlightPredicate.EDITABLE, new HighlightPredicate() { - @Override - public boolean isHighlighted(Component renderer, ComponentAdapter adapter) { - - boolean result = false; - if (adapter.isEditable()) { - EditProtocolSpeciesTableModel model = (EditProtocolSpeciesTableModel) table.getModel(); - EditProtocolSpeciesRowModel row = model.getEntry(adapter.row); - result = !row.isValid(); - } - return result; - } - }), getConfig().getColorRowInvalid()); - table.addHighlighter(validHighlighter); - } - protected static class UpdateSelectedList implements PropertyChangeListener { private final BeanDoubleListModel<Caracteristic> model; 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-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -43,6 +43,7 @@ import fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment; import fr.ifremer.tutti.ui.swing.util.editor.SimpleTimeEditor; import fr.ifremer.tutti.ui.swing.util.editor.TuttiComputedOrNotDataEditor; +import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; import jaxx.runtime.JAXXUtil; import jaxx.runtime.SwingUtil; @@ -62,6 +63,10 @@ import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.autocomplete.ComboBoxCellEditor; import org.jdesktop.swingx.autocomplete.ObjectToStringConverter; +import org.jdesktop.swingx.decorator.ComponentAdapter; +import org.jdesktop.swingx.decorator.FontHighlighter; +import org.jdesktop.swingx.decorator.HighlightPredicate; +import org.jdesktop.swingx.decorator.Highlighter; import org.jdesktop.swingx.table.TableColumnExt; import org.nuiton.decorator.Decorator; import org.nuiton.decorator.JXPathDecorator; @@ -455,6 +460,106 @@ } } + protected void addHighlighters(final JXTable table) { + + HighlightPredicate notSelectedPredicate = new HighlightPredicate.NotHighlightPredicate(HighlightPredicate.IS_SELECTED); + HighlightPredicate rowIsValidPredicate = new HighlightPredicate() { + @Override + public boolean isHighlighted(Component renderer, ComponentAdapter adapter) { + + boolean result = false; + if (adapter.isEditable()) { + AbstractTuttiTableModel model = (AbstractTuttiTableModel) table.getModel(); + AbstractTuttiBeanUIModel row = (AbstractTuttiBeanUIModel) model.getEntry(adapter.row); + result = !row.isValid(); + } + return result; + } + }; + + Highlighter selectedHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + HighlightPredicate.IS_SELECTED, + getConfig().getColorSelectedRow()); + table.addHighlighter(selectedHighlighter); + + // paint in a special color for read only cells (not selected) + Highlighter readOnlyHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + new HighlightPredicate.AndHighlightPredicate( + HighlightPredicate.READ_ONLY, + notSelectedPredicate), + getConfig().getColorRowReadOnly()); + table.addHighlighter(readOnlyHighlighter); + + // paint in a special color for read only cells (selected) + Highlighter readOnlySelectedHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + new HighlightPredicate.AndHighlightPredicate( + HighlightPredicate.READ_ONLY, + HighlightPredicate.IS_SELECTED), + getConfig().getColorRowReadOnly().darker()); + table.addHighlighter(readOnlySelectedHighlighter); + +// Highlighter readOnlySelectedEvenHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( +// new HighlightPredicate.AndHighlightPredicate( +// HighlightPredicate.READ_ONLY, +// HighlightPredicate.ODD, +// HighlightPredicate.IS_SELECTED), +// getConfig().getColorSelectedRow().darker()); +// table.addHighlighter(readOnlySelectedEvenHighlighter); + + + // paint in a special color inValid rows (not selected) + + Highlighter validHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + new HighlightPredicate.AndHighlightPredicate( + HighlightPredicate.EDITABLE, + notSelectedPredicate, + rowIsValidPredicate), + getConfig().getColorRowInvalid()); + table.addHighlighter(validHighlighter); + + // paint in a special color inValid rows (selected) + Highlighter validSelectedHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + new HighlightPredicate.AndHighlightPredicate( + HighlightPredicate.EDITABLE, + HighlightPredicate.IS_SELECTED, + rowIsValidPredicate), + getConfig().getColorRowInvalid().darker()); + table.addHighlighter(validSelectedHighlighter); + + + // use configured color odd row (not for selected) + Highlighter evenHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + new HighlightPredicate.AndHighlightPredicate( + HighlightPredicate.ODD, + notSelectedPredicate, + HighlightPredicate.READ_ONLY), + getConfig().getColorAlternateRow().darker()); + table.addHighlighter(evenHighlighter); + + Highlighter evenNotReadOnlyHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + new HighlightPredicate.AndHighlightPredicate( + HighlightPredicate.ODD, + notSelectedPredicate, + new HighlightPredicate.NotHighlightPredicate(HighlightPredicate.READ_ONLY)), + getConfig().getColorAlternateRow()); + table.addHighlighter(evenNotReadOnlyHighlighter); + + // use configured color odd row (for selected) + Highlighter evenSelectedHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + new HighlightPredicate.AndHighlightPredicate( + HighlightPredicate.ODD, + HighlightPredicate.IS_SELECTED, + new HighlightPredicate.NotHighlightPredicate(HighlightPredicate.READ_ONLY)), + getConfig().getColorSelectedRow()); + table.addHighlighter(evenSelectedHighlighter); + + + // paint in a special color inValid rows + Font font = table.getFont().deriveFont(Font.BOLD); + Highlighter selectHighlighter = new FontHighlighter(HighlightPredicate.IS_SELECTED, font); + table.addHighlighter(selectHighlighter); + } + public void openRowMenu(KeyEvent e, JPopupMenu popup) { if (e.getKeyCode() == KeyEvent.VK_CONTEXT_MENU) { @@ -1139,17 +1244,31 @@ } protected String buildReminderLabelTitle(Species species, - Iterable<SampleCategory<?>> categories, - String prefix, - String suffix) { + Iterable<SampleCategory<?>> categories, + String prefix, + String suffix) { + return buildReminderLabelTitle( + decorate(species), + categories, + prefix, + suffix); + + } + + protected String buildReminderLabelTitle(String species, + Iterable<SampleCategory<?>> categories, + String prefix, + String suffix) { StringBuilder title = new StringBuilder(prefix); - title.append(" - [").append(decorate(species)).append("]"); + title.append(" - [").append(species).append("]"); - for (SampleCategory<?> sampleCategory : categories) { - if (sampleCategory.getCategoryValue() != null) { - title.append(" - "); - title.append(decorate(sampleCategory.getCategoryValue())); + if (categories != null) { + for (SampleCategory<?> sampleCategory : categories) { + if (sampleCategory.getCategoryValue() != null) { + title.append(" - "); + title.append(decorate(sampleCategory.getCategoryValue())); + } } } 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-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/editor/TuttiComputedOrNotDataTableCell.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -24,10 +24,10 @@ * #L% */ +import fr.ifremer.tutti.service.WeightUnit; import fr.ifremer.tutti.ui.swing.util.TuttiComputedOrNotData; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import fr.ifremer.tutti.service.WeightUnit; import jaxx.runtime.JAXXUtil; import javax.swing.AbstractCellEditor; @@ -241,6 +241,10 @@ hasFocus, row, column); + + if (isSelected) { + font = font.deriveFont(Font.BOLD); + } component.setFont(font); component.setForeground(foreground); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -259,14 +259,33 @@ return result; } - protected final void fireTableCellUpdated(int rowIndex, - ColumnIdentifier<R>... identifiers) { + public final void fireTableCellUpdated(int rowIndex, + ColumnIdentifier<R>... identifiers) { for (ColumnIdentifier<R> identifier : identifiers) { int columnIndex = this.identifiers.indexOf(identifier); fireTableCellUpdated(rowIndex, columnIndex); } } + public final void fireTableRowUpdatedShell(Set<R> shell) { + + int minRowIndex1 = getColumnCount(); + int maxRowIndex1 = 0; + + for (R r : shell) { + int rowIndex1 = getRowIndex(r); + minRowIndex1 = Math.min(minRowIndex1, rowIndex1); + maxRowIndex1 = Math.max(maxRowIndex1, rowIndex1); + } + fireTableRowsUpdated(minRowIndex1, maxRowIndex1); + } + + protected void collectShell(R row, Set<R> collectedRows) { + + // by default just add the incoming row + collectedRows.add(row); + } + protected ColumnIdentifier<R> getIdentifier(int columnIndex) { ColumnIdentifier<R> identifier = identifiers.get(columnIndex); return identifier; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2013-10-03 20:30:54 UTC (rev 1272) @@ -33,7 +33,6 @@ import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUI; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.editor.TuttiComputedOrNotDataTableCell.TuttiComputedOrNotDataTableCellEditor; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.editor.cell.NumberCellEditor; @@ -42,9 +41,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; -import org.jdesktop.swingx.decorator.ComponentAdapter; -import org.jdesktop.swingx.decorator.HighlightPredicate; -import org.jdesktop.swingx.decorator.Highlighter; import javax.swing.JTable; import javax.swing.ListSelectionModel; @@ -53,7 +49,6 @@ import javax.swing.table.TableCellEditor; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; -import java.awt.Component; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; @@ -294,30 +289,6 @@ installTableSaveOnRowChangedSelectionListener(); } - protected void addHighlighters(JXTable table) { - - // paint in a special color for read only cells - Highlighter readOnlyHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( - HighlightPredicate.READ_ONLY, getConfig().getColorRowReadOnly()); - table.addHighlighter(readOnlyHighlighter); - - // paint in a special color inValid rows - Highlighter validHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( - new HighlightPredicate.AndHighlightPredicate(HighlightPredicate.EDITABLE, new HighlightPredicate() { - @Override - public boolean isHighlighted(Component renderer, ComponentAdapter adapter) { - - boolean result = false; - if (adapter.isEditable()) { - R row = getTableModel().getEntry(adapter.row); - result = !row.isValid(); - } - return result; - } - }), getConfig().getColorRowInvalid()); - table.addHighlighter(validHighlighter); - } - //------------------------------------------------------------------------// //-- Internal methods (listener methods) --// //------------------------------------------------------------------------// @@ -353,16 +324,20 @@ // need this for the first modification when no selection, // otherwise monitor is set after the first alter, so won't be // save directly... - if (!e.getValueIsAdjusting()) { - ListSelectionModel source = (ListSelectionModel) e.getSource(); - int oldRowIndex = selectedRowIndex; - int newRowIndex = source.getLeadSelectionIndex(); - boolean skip = rowMonitor.getBean() != null && - oldRowIndex == newRowIndex; + ListSelectionModel source = (ListSelectionModel) e.getSource(); + + int oldRowIndex = selectedRowIndex; + int newRowIndex = source.getLeadSelectionIndex(); + + if (e.getValueIsAdjusting()) { + + + boolean skip = oldRowIndex == newRowIndex; if (skip) { return; } + R oldRow = rowMonitor.getBean(); R newRow; @@ -377,8 +352,8 @@ // save selected entry if required // saveSelectedRowIfNeeded(); - if (log.isDebugEnabled()) { - log.debug("Will monitor entry: " + newRow); + if (log.isInfoEnabled()) { + log.info("Will monitor entry: " + newRowIndex); } rowMonitor.setBean(newRow); @@ -388,7 +363,11 @@ oldRow, selectedRowIndex, rowMonitor.getBean()); + } + else { +// getTableModel().fireTableRowsUpdated(selectedRowIndex, selectedRowIndex); + } } }; 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-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-10-03 20:30:54 UTC (rev 1272) @@ -116,12 +116,14 @@ tutti.config.option.tremieCarousselVessel.description= tutti.config.option.ui.adminPassword.description= tutti.config.option.ui.autoPopupNumberEditor.description= +tutti.config.option.ui.color.alternateRow.description= tutti.config.option.ui.color.blockingLayer.description= tutti.config.option.ui.color.cellWithValue.description= tutti.config.option.ui.color.computedWeights.description= tutti.config.option.ui.color.rowInvalid.description= tutti.config.option.ui.color.rowReadOnly.description= tutti.config.option.ui.color.rowToConfirm.description= +tutti.config.option.ui.color.selectedRow.description= tutti.config.option.ui.config.file.description= tutti.config.option.ui.coordinateEditorType.description= tutti.config.option.ui.dateFormat.description= 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-10-03 12:05:44 UTC (rev 1271) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-10-03 20:30:54 UTC (rev 1272) @@ -117,12 +117,14 @@ tutti.config.option.tremieCarousselVessel.description=Navire ayant un carrousel et une trémie (ex. Thalassa) tutti.config.option.ui.adminPassword.description=MD5 du mot de passe des zones sensibles tutti.config.option.ui.autoPopupNumberEditor.description=Toujours afficher le pavé numérique lors de l'édition d'un nombre +tutti.config.option.ui.color.alternateRow.description= tutti.config.option.ui.color.blockingLayer.description=Couleur utilisée pour bloquer l'interface lors d'une action longue tutti.config.option.ui.color.cellWithValue.description=Couleur d'une cellule avec des données tutti.config.option.ui.color.computedWeights.description=Couleur des données calculées tutti.config.option.ui.color.rowInvalid.description=Ligne invalide tutti.config.option.ui.color.rowReadOnly.description=Cellule non éditable tutti.config.option.ui.color.rowToConfirm.description=Ligne à confirmer +tutti.config.option.ui.color.selectedRow.description= tutti.config.option.ui.config.file.description=Chemin du fichier de configuration des interfaces graphiques tutti.config.option.ui.coordinateEditorType.description=Type de l'éditeur de coordonnées tutti.config.option.ui.dateFormat.description=Format de dates
participants (1)
-
tchemit@users.forge.codelutin.com