Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe
Commits:
-
3fed6cd9
by Tony CHEMIT at 2018-07-01T17:11:05Z
2 changed files:
- client/src/main/java/fr/ird/observe/client/ui/content/data/longline/GearUseFeaturesLonglineUIHandler.java
- client/src/main/java/fr/ird/observe/client/ui/content/data/seine/GearUseFeaturesSeineUIHandler.java
Changes:
| ... | ... | @@ -33,6 +33,7 @@ import fr.ird.observe.client.ui.content.table.ContentTableUIHandler; |
| 33 | 33 |
import fr.ird.observe.client.ui.content.table.GearUseFeatureMeasurementCellEditor;
|
| 34 | 34 |
import fr.ird.observe.client.ui.content.table.GearUseFeatureMeasurementCellRenderer;
|
| 35 | 35 |
import fr.ird.observe.client.ui.util.UIHelper;
|
| 36 |
+import fr.ird.observe.client.ui.util.table.EditableTableModelSupport;
|
|
| 36 | 37 |
import fr.ird.observe.dto.data.longline.GearUseFeaturesLonglineDto;
|
| 37 | 38 |
import fr.ird.observe.dto.data.longline.GearUseFeaturesMeasurementLonglineDto;
|
| 38 | 39 |
import fr.ird.observe.dto.data.longline.TripLonglineDto;
|
| ... | ... | @@ -50,6 +51,7 @@ import org.apache.commons.lang3.StringUtils; |
| 50 | 51 |
import org.apache.commons.logging.Log;
|
| 51 | 52 |
import org.apache.commons.logging.LogFactory;
|
| 52 | 53 |
import org.nuiton.jaxx.runtime.spi.UIHandler;
|
| 54 |
+import org.nuiton.jaxx.runtime.swing.JTables;
|
|
| 53 | 55 |
import org.nuiton.jaxx.validator.swing.SwingValidatorMessage;
|
| 54 | 56 |
import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel;
|
| 55 | 57 |
import org.nuiton.validator.NuitonValidatorScope;
|
| ... | ... | @@ -57,6 +59,7 @@ import org.nuiton.validator.NuitonValidatorScope; |
| 57 | 59 |
import javax.swing.JComponent;
|
| 58 | 60 |
import javax.swing.JOptionPane;
|
| 59 | 61 |
import javax.swing.JTable;
|
| 62 |
+import javax.swing.SwingUtilities;
|
|
| 60 | 63 |
import javax.swing.event.TableModelListener;
|
| 61 | 64 |
import javax.swing.table.DefaultTableCellRenderer;
|
| 62 | 65 |
import java.awt.GridBagConstraints;
|
| ... | ... | @@ -82,10 +85,11 @@ public class GearUseFeaturesLonglineUIHandler extends ContentTableUIHandler<Trip |
| 82 | 85 |
|
| 83 | 86 |
/** Logger */
|
| 84 | 87 |
private static final Log log = LogFactory.getLog(GearUseFeaturesLonglineUIHandler.class);
|
| 85 |
- private final Comparator<GearUseFeaturesMeasurementLonglineDto> GEAR_USE_FEATURES_MEASUREMENT_LONGLINE_DTO_COMPARATOR;
|
|
| 86 | 88 |
// Compute valid state of tab from the error table
|
| 87 | 89 |
protected final TableModelListener computeTabValidStateListener;
|
| 90 |
+ private final Comparator<GearUseFeaturesMeasurementLonglineDto> GEAR_USE_FEATURES_MEASUREMENT_LONGLINE_DTO_COMPARATOR;
|
|
| 88 | 91 |
private final PropertyChangeListener measurementsTableModelModified;
|
| 92 |
+ private boolean cellEditorAdjusting;
|
|
| 89 | 93 |
|
| 90 | 94 |
GearUseFeaturesLonglineUIHandler() {
|
| 91 | 95 |
super(DataContextType.TripLongline);
|
| ... | ... | @@ -117,6 +121,55 @@ public class GearUseFeaturesLonglineUIHandler extends ContentTableUIHandler<Trip |
| 117 | 121 |
|
| 118 | 122 |
setTableModelEditable(model.isEditable());
|
| 119 | 123 |
getTableModel().setGearUseFeaturesLonglineUIHandler(this);
|
| 124 |
+ ui.getMeasurementsTable().getColumnModel().getSelectionModel().addListSelectionListener(e -> {
|
|
| 125 |
+ if (e.getValueIsAdjusting()) {
|
|
| 126 |
+ return;
|
|
| 127 |
+ }
|
|
| 128 |
+ if (getModel().isReadingMode()) {
|
|
| 129 |
+ return;
|
|
| 130 |
+ }
|
|
| 131 |
+ if (cellEditorAdjusting) {
|
|
| 132 |
+ return;
|
|
| 133 |
+ }
|
|
| 134 |
+ int selectedColumn = ui.getMeasurementsTable().getSelectedColumn();
|
|
| 135 |
+ log.debug("new selected column: " + selectedColumn);
|
|
| 136 |
+ int selectedRow = ui.getMeasurementsTable().getSelectedRow();
|
|
| 137 |
+ if (selectedColumn != -1 && selectedRow != -1) {
|
|
| 138 |
+ log.debug(String.format("Do reselect: %d-%d", selectedRow, selectedColumn));
|
|
| 139 |
+ if (ui.getMeasurementsTable().getCellEditor() != null) {
|
|
| 140 |
+ return;
|
|
| 141 |
+ }
|
|
| 142 |
+ selectCell(ui, selectedColumn, selectedRow);
|
|
| 143 |
+ }
|
|
| 144 |
+ });
|
|
| 145 |
+ model.getMeasurementsTableModel().addPropertyChangeListener(EditableTableModelSupport.SELECTED_ROW_INDEX_PROPERTY, e -> {
|
|
| 146 |
+ if (getModel().isReadingMode()) {
|
|
| 147 |
+ return;
|
|
| 148 |
+ }
|
|
| 149 |
+ if (cellEditorAdjusting) {
|
|
| 150 |
+ return;
|
|
| 151 |
+ }
|
|
| 152 |
+ Integer selectedRow = (Integer) e.getNewValue();
|
|
| 153 |
+ log.debug("new selected row: " + selectedRow);
|
|
| 154 |
+ if (selectedRow != null) {
|
|
| 155 |
+ int selectedColumn = ui.getMeasurementsTable().getSelectedColumn();
|
|
| 156 |
+ if (selectedColumn != -1) {
|
|
| 157 |
+ log.debug(String.format("Do reselect: %d-%d", selectedRow, selectedColumn));
|
|
| 158 |
+ selectCell(ui, selectedColumn, selectedRow);
|
|
| 159 |
+ }
|
|
| 160 |
+ }
|
|
| 161 |
+ });
|
|
| 162 |
+ }
|
|
| 163 |
+ |
|
| 164 |
+ private void selectCell(GearUseFeaturesLonglineUI ui, int selectedColumn, int selectedRow) {
|
|
| 165 |
+ SwingUtilities.invokeLater(() -> {
|
|
| 166 |
+ cellEditorAdjusting = true;
|
|
| 167 |
+ try {
|
|
| 168 |
+ JTables.doSelectCell(ui.getMeasurementsTable(), selectedRow, selectedColumn);
|
|
| 169 |
+ } finally {
|
|
| 170 |
+ cellEditorAdjusting = false;
|
|
| 171 |
+ }
|
|
| 172 |
+ });
|
|
| 120 | 173 |
}
|
| 121 | 174 |
|
| 122 | 175 |
@Override
|
| ... | ... | @@ -33,6 +33,7 @@ import fr.ird.observe.client.ui.content.table.ContentTableUIHandler; |
| 33 | 33 |
import fr.ird.observe.client.ui.content.table.GearUseFeatureMeasurementCellEditor;
|
| 34 | 34 |
import fr.ird.observe.client.ui.content.table.GearUseFeatureMeasurementCellRenderer;
|
| 35 | 35 |
import fr.ird.observe.client.ui.util.UIHelper;
|
| 36 |
+import fr.ird.observe.client.ui.util.table.EditableTableModelSupport;
|
|
| 36 | 37 |
import fr.ird.observe.dto.data.seine.GearUseFeaturesMeasurementSeineDto;
|
| 37 | 38 |
import fr.ird.observe.dto.data.seine.GearUseFeaturesSeineDto;
|
| 38 | 39 |
import fr.ird.observe.dto.data.seine.TripSeineDto;
|
| ... | ... | @@ -50,6 +51,7 @@ import org.apache.commons.lang3.StringUtils; |
| 50 | 51 |
import org.apache.commons.logging.Log;
|
| 51 | 52 |
import org.apache.commons.logging.LogFactory;
|
| 52 | 53 |
import org.nuiton.jaxx.runtime.spi.UIHandler;
|
| 54 |
+import org.nuiton.jaxx.runtime.swing.JTables;
|
|
| 53 | 55 |
import org.nuiton.jaxx.validator.swing.SwingValidatorMessage;
|
| 54 | 56 |
import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel;
|
| 55 | 57 |
import org.nuiton.validator.NuitonValidatorScope;
|
| ... | ... | @@ -57,6 +59,7 @@ import org.nuiton.validator.NuitonValidatorScope; |
| 57 | 59 |
import javax.swing.JComponent;
|
| 58 | 60 |
import javax.swing.JOptionPane;
|
| 59 | 61 |
import javax.swing.JTable;
|
| 62 |
+import javax.swing.SwingUtilities;
|
|
| 60 | 63 |
import javax.swing.event.TableModelListener;
|
| 61 | 64 |
import javax.swing.table.DefaultTableCellRenderer;
|
| 62 | 65 |
import java.awt.GridBagConstraints;
|
| ... | ... | @@ -82,13 +85,11 @@ public class GearUseFeaturesSeineUIHandler extends ContentTableUIHandler<TripSei |
| 82 | 85 |
|
| 83 | 86 |
/** Logger */
|
| 84 | 87 |
private static final Log log = LogFactory.getLog(GearUseFeaturesSeineUIHandler.class);
|
| 85 |
- |
|
| 86 |
- private final Comparator<GearUseFeaturesMeasurementSeineDto> GEAR_USE_FEATURES_MEASUREMENT_SEINE_DTO_COMPARATOR;
|
|
| 87 |
- |
|
| 88 | 88 |
// Compute valid state of tab from the error table
|
| 89 | 89 |
protected final TableModelListener computeTabValidStateListener;
|
| 90 |
- |
|
| 90 |
+ private final Comparator<GearUseFeaturesMeasurementSeineDto> GEAR_USE_FEATURES_MEASUREMENT_SEINE_DTO_COMPARATOR;
|
|
| 91 | 91 |
private final PropertyChangeListener measurementsTableModelModified;
|
| 92 |
+ private boolean cellEditorAdjusting;
|
|
| 92 | 93 |
|
| 93 | 94 |
GearUseFeaturesSeineUIHandler() {
|
| 94 | 95 |
super(DataContextType.TripSeine);
|
| ... | ... | @@ -119,8 +120,56 @@ public class GearUseFeaturesSeineUIHandler extends ContentTableUIHandler<TripSei |
| 119 | 120 |
|
| 120 | 121 |
setTableModelEditable(model.isEditable());
|
| 121 | 122 |
|
| 123 |
+ ui.getMeasurementsTable().getColumnModel().getSelectionModel().addListSelectionListener(e -> {
|
|
| 124 |
+ if (e.getValueIsAdjusting()) {
|
|
| 125 |
+ return;
|
|
| 126 |
+ }
|
|
| 127 |
+ if (getModel().isReadingMode()) {
|
|
| 128 |
+ return;
|
|
| 129 |
+ }
|
|
| 130 |
+ if (cellEditorAdjusting) {
|
|
| 131 |
+ return;
|
|
| 132 |
+ }
|
|
| 133 |
+ int selectedColumn = ui.getMeasurementsTable().getSelectedColumn();
|
|
| 134 |
+ log.debug("new selected column: " + selectedColumn);
|
|
| 135 |
+ int selectedRow = ui.getMeasurementsTable().getSelectedRow();
|
|
| 136 |
+ if (selectedColumn != -1 && selectedRow != -1) {
|
|
| 137 |
+ log.debug(String.format("Do reselect: %d-%d", selectedRow, selectedColumn));
|
|
| 138 |
+ if (ui.getMeasurementsTable().getCellEditor() != null) {
|
|
| 139 |
+ return;
|
|
| 140 |
+ }
|
|
| 141 |
+ selectCell(ui, selectedColumn, selectedRow);
|
|
| 142 |
+ }
|
|
| 143 |
+ });
|
|
| 122 | 144 |
getTableModel().setGearUseFeaturesSeineUIHandler(this);
|
| 145 |
+ model.getMeasurementsTableModel().addPropertyChangeListener(EditableTableModelSupport.SELECTED_ROW_INDEX_PROPERTY, e -> {
|
|
| 146 |
+ if (getModel().isReadingMode()) {
|
|
| 147 |
+ return;
|
|
| 148 |
+ }
|
|
| 149 |
+ if (cellEditorAdjusting) {
|
|
| 150 |
+ return;
|
|
| 151 |
+ }
|
|
| 152 |
+ Integer selectedRow = (Integer) e.getNewValue();
|
|
| 153 |
+ log.debug("new selected row: " + selectedRow);
|
|
| 154 |
+ if (selectedRow != null) {
|
|
| 155 |
+ int selectedColumn = ui.getMeasurementsTable().getSelectedColumn();
|
|
| 156 |
+ if (selectedColumn != -1) {
|
|
| 157 |
+ log.debug(String.format("Do reselect: %d-%d", selectedRow, selectedColumn));
|
|
| 158 |
+ selectCell(ui, selectedColumn, selectedRow);
|
|
| 159 |
+ }
|
|
| 160 |
+ }
|
|
| 161 |
+ });
|
|
| 162 |
+ }
|
|
| 123 | 163 |
|
| 164 |
+ private void selectCell(GearUseFeaturesSeineUI ui, int selectedColumn, int selectedRow) {
|
|
| 165 |
+ SwingUtilities.invokeLater(() -> {
|
|
| 166 |
+ cellEditorAdjusting = true;
|
|
| 167 |
+ try {
|
|
| 168 |
+ JTables.doSelectCell(ui.getMeasurementsTable(), selectedRow, selectedColumn);
|
|
| 169 |
+ } finally {
|
|
| 170 |
+ cellEditorAdjusting = false;
|
|
| 171 |
+ }
|
|
| 172 |
+ });
|
|
| 124 | 173 |
}
|
| 125 | 174 |
|
| 126 | 175 |
@Override
|
| ... | ... | @@ -140,6 +189,7 @@ public class GearUseFeaturesSeineUIHandler extends ContentTableUIHandler<TripSei |
| 140 | 189 |
SwingValidatorMessageTableModel errorTableModel = getUi().getErrorTableModel();
|
| 141 | 190 |
computeTabValidState(errorTableModel);
|
| 142 | 191 |
|
| 192 |
+ SwingUtilities.invokeLater(() -> ui.getMainTabbedPane().setSelectedIndex(0));
|
|
| 143 | 193 |
}
|
| 144 | 194 |
|
| 145 | 195 |
@Override
|