This repository has been archived by the owner on Jul 31, 2022. It is now read-only.
/
ClearAllNotesCommand.java
117 lines (91 loc) · 2.77 KB
/
ClearAllNotesCommand.java
1
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
* Copyright (C) 2009 Roman Masek
*
* This file is part of OpenSudoku.
*
* OpenSudoku is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenSudoku is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenSudoku. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.moire.opensudoku.game.command;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import org.moire.opensudoku.game.Cell;
import org.moire.opensudoku.game.CellCollection;
import org.moire.opensudoku.game.CellNote;
public class ClearAllNotesCommand extends AbstractCellCommand {
private List<NoteEntry> mOldNotes = new ArrayList<NoteEntry>();
public ClearAllNotesCommand() {
}
@Override
void saveState(Bundle outState) {
super.saveState(outState);
int[] rows = new int[mOldNotes.size()];
int[] cols = new int[mOldNotes.size()];
String[] notes = new String[mOldNotes.size()];
int i = 0;
for (NoteEntry ne : mOldNotes) {
rows[i] = ne.rowIndex;
cols[i] = ne.colIndex;
notes[i] = ne.note.serialize();
i++;
}
outState.putIntArray("rows", rows);
outState.putIntArray("cols", cols);
outState.putStringArray("notes", notes);
}
@Override
void restoreState(Bundle inState) {
super.restoreState(inState);
int[] rows = inState.getIntArray("rows");
int[] cols = inState.getIntArray("cols");
String[] notes = inState.getStringArray("notes");
for (int i = 0; i < rows.length; i++) {
mOldNotes.add(new NoteEntry(rows[i], cols[i], CellNote
.deserialize(notes[i])));
}
}
@Override
void execute() {
CellCollection cells = getCells();
mOldNotes.clear();
for (int r = 0; r < CellCollection.SUDOKU_SIZE; r++) {
for (int c = 0; c < CellCollection.SUDOKU_SIZE; c++) {
Cell cell = cells.getCell(r, c);
CellNote note = cell.getNote();
if (!note.isEmpty()) {
mOldNotes.add(new NoteEntry(r, c, note));
cell.setNote(new CellNote());
}
}
}
}
@Override
void undo() {
CellCollection cells = getCells();
for (NoteEntry ne : mOldNotes) {
cells.getCell(ne.rowIndex, ne.colIndex).setNote(ne.note);
}
}
private static class NoteEntry {
public int rowIndex;
public int colIndex;
public CellNote note;
public NoteEntry(int rowIndex, int colIndex, CellNote note) {
this.rowIndex = rowIndex;
this.colIndex = colIndex;
this.note = note;
}
}
}