1 package fr.ifremer.quadrige3.ui.swing.table.action;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import fr.ifremer.quadrige3.ui.swing.table.AbstractTableUIHandler;
28
29
30
31
32
33
34 public class NextCellSelectionAction extends AbstractCellSelectionAction {
35
36
37
38
39
40
41
42 public NextCellSelectionAction(String name, AbstractTableUIHandler handler, boolean forceStopEditingBeforeAction) {
43 super(name, handler, forceStopEditingBeforeAction);
44 }
45
46
47 @Override
48 public void actionPerformed() {
49
50 int currentRow = getSelectedRow();
51 int currentColumn = getSelectedColumn();
52
53 boolean editing = isTableEditing();
54 if (editing && isForceStopEditingBeforeAction())
55 stopActiveEdition();
56
57 boolean canSelect = !editing;
58 do {
59
60 currentColumn = getNextColumn(currentColumn);
61
62 if (currentColumn >= getColumnCount()) {
63
64
65 currentRow++;
66
67 switchToLeftTable();
68
69 currentColumn = getNextColumn(-1);
70
71 if (currentRow == getRowCount()) {
72
73 if (isCreateNewRow()) {
74
75
76 addNewRow();
77 canSelect = true;
78 } else {
79 canSelect = false;
80 }
81 }
82 }
83
84
85 if (editing && isCellEditable(currentRow, currentColumn)) {
86 canSelect = true;
87 }
88
89 } while (!canSelect && currentRow < getRowCount());
90
91 if (canSelect) {
92 if (editing) {
93 editCell(currentRow, currentColumn);
94 } else {
95 selectCell(currentRow, currentColumn);
96 }
97 } else {
98 selectNextComponent();
99 }
100 }
101
102 }