Index: frontend/client/src/autotest/common/spreadsheet/SpreadsheetSelectionManager.java |
diff --git a/frontend/client/src/autotest/common/spreadsheet/SpreadsheetSelectionManager.java b/frontend/client/src/autotest/common/spreadsheet/SpreadsheetSelectionManager.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2dd5c2fc2d530ac69962ed21749cb3d505ac6538 |
--- /dev/null |
+++ b/frontend/client/src/autotest/common/spreadsheet/SpreadsheetSelectionManager.java |
@@ -0,0 +1,91 @@ |
+package autotest.common.spreadsheet; |
+ |
+import autotest.common.Utils; |
+import autotest.common.spreadsheet.Spreadsheet.CellInfo; |
+ |
+import java.util.ArrayList; |
+import java.util.Collection; |
+import java.util.HashSet; |
+import java.util.List; |
+ |
+// TODO: hopefully some of this could be combined with autotest.common.table.SelectionManager using |
+// generics |
+// TODO: get rid of header selection |
+public class SpreadsheetSelectionManager { |
+ private Spreadsheet spreadsheet; |
+ private Collection<CellInfo> selectedCells = new HashSet<CellInfo>(); |
+ private SpreadsheetSelectionListener listener; |
+ |
+ public static interface SpreadsheetSelectionListener { |
+ public void onCellsSelected(List<CellInfo> cells); |
+ public void onCellsDeselected(List<CellInfo> cells); |
+ } |
+ |
+ public SpreadsheetSelectionManager(Spreadsheet spreadsheet, |
+ SpreadsheetSelectionListener listener) { |
+ this.spreadsheet = spreadsheet; |
+ this.listener = listener; |
+ } |
+ |
+ public void toggleSelected(CellInfo cell) { |
+ if (selectedCells.contains(cell)) { |
+ deselectCell(cell); |
+ notifyDeselected(Utils.wrapObjectWithList(cell)); |
+ } else { |
+ selectCell(cell); |
+ notifySelected(Utils.wrapObjectWithList(cell)); |
+ } |
+ } |
+ |
+ private void selectCell(CellInfo cell) { |
+ selectedCells.add(cell); |
+ spreadsheet.setHighlighted(cell, true); |
+ } |
+ |
+ private void deselectCell(CellInfo cell) { |
+ selectedCells.remove(cell); |
+ spreadsheet.setHighlighted(cell, false); |
+ } |
+ |
+ public List<CellInfo> getSelectedCells() { |
+ return new ArrayList<CellInfo>(selectedCells); |
+ } |
+ |
+ public boolean isEmpty() { |
+ return selectedCells.isEmpty(); |
+ } |
+ |
+ public void clearSelection() { |
+ List<CellInfo> cells = getSelectedCells(); |
+ for (CellInfo cell : cells) { |
+ deselectCell(cell); |
+ } |
+ notifyDeselected(cells); |
+ } |
+ |
+ public void selectAll() { |
+ List<CellInfo> selectedCells = new ArrayList<CellInfo>(); |
+ for (CellInfo[] row : spreadsheet.dataCells) { |
+ for (CellInfo cell : row) { |
+ if (cell == null || cell.isEmpty()) { |
+ continue; |
+ } |
+ selectCell(cell); |
+ selectedCells.add(cell); |
+ } |
+ } |
+ notifySelected(selectedCells); |
+ } |
+ |
+ private void notifyDeselected(List<CellInfo> cells) { |
+ if (listener != null) { |
+ listener.onCellsDeselected(cells); |
+ } |
+ } |
+ |
+ private void notifySelected(List<CellInfo> selectedCells) { |
+ if (listener != null) { |
+ listener.onCellsSelected(selectedCells); |
+ } |
+ } |
+} |