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 PreviousCellSelectionAction extends AbstractCellSelectionAction {
35
36
37
38
39
40
41
42 public PreviousCellSelectionAction(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 = getPreviousColumn(currentColumn);
61
62 if (currentColumn < 0) {
63
64
65 currentRow--;
66
67 switchToMainTable();
68
69 currentColumn = getPreviousColumn(getColumnCount());
70 }
71
72 if (currentRow < 0) {
73 canSelect = false;
74 }
75
76
77 if (editing && isCellEditable(currentRow, currentColumn)) {
78 canSelect = true;
79 }
80
81 } while (!canSelect && currentRow >= 0);
82
83 if (canSelect) {
84 if (editing) {
85 editCell(currentRow, currentColumn);
86 } else {
87 selectCell(currentRow, currentColumn);
88 }
89 } else {
90 selectPreviousComponent();
91 }
92 }
93 }