summaryrefslogtreecommitdiff
path: root/src/sudokuwidget.cc
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2013-08-03 09:31:17 +0000
committerStijn Buys <ingar@osirion.org>2013-08-03 09:31:17 +0000
commitd7f292f0abbffb24dc683d754a2ab4b8b2938cc0 (patch)
treeab84004b8ab38916803ac39feea84f111b59df73 /src/sudokuwidget.cc
parent850441d72ad73e6bcf3570e3f62287c28eaead31 (diff)
Adds an option to mark cells with a unique solution.
Diffstat (limited to 'src/sudokuwidget.cc')
-rw-r--r--src/sudokuwidget.cc38
1 files changed, 30 insertions, 8 deletions
diff --git a/src/sudokuwidget.cc b/src/sudokuwidget.cc
index 387f5d4..f9e364a 100644
--- a/src/sudokuwidget.cc
+++ b/src/sudokuwidget.cc
@@ -8,6 +8,8 @@
SudokuWidget::SudokuWidget()
{
+ m_showHintUnique = true;
+
for (int row = 0; row < 9; row++) {
for (int column = 0; column < 9 ; column++) {
@@ -20,11 +22,21 @@ SudokuWidget::SudokuWidget()
}
}
+void SudokuWidget::setShowHintUnique(const bool hintunique)
+{
+ if (hintunique != m_showHintUnique) {
+ m_showHintUnique = hintunique;
+ verify();
+ }
+}
+
void SudokuWidget::verify()
{
Sudoku values;
for (int row = 0; row < 9; row++) {
for (int column = 0; column < 9 ; column++) {
+ QPalette child_palette(palette());
+
bool ok;
QString str(sudokuwidget_value[row][column]->text());
int i = str.toInt(&ok);
@@ -36,8 +48,9 @@ void SudokuWidget::verify()
if (!sudokuwidget_value[row][column]->text().isEmpty()) {
child_palette.setColor(QPalette::Base, globalSettings().colorInputError());
}
- sudokuwidget_value[row][column]->setPalette(child_palette);
}
+
+ sudokuwidget_value[row][column]->setPalette(child_palette);
}
}
@@ -51,10 +64,25 @@ void SudokuWidget::verify()
// set background color depending on the validity of the cell value
if (solved) {
child_palette.setColor(QPalette::Base, globalSettings().colorSolved());
+ sudokuwidget_value[row][column]->setPalette(child_palette);
} else if (!values.cell(row, column).valid()) {
child_palette.setColor(QPalette::Base, globalSettings().colorInvalidValue());
+ sudokuwidget_value[row][column]->setPalette(child_palette);
}
- sudokuwidget_value[row][column]->setPalette(child_palette);
+ } else if ((i == 0) && (m_showHintUnique)) {
+ // cell is empty, check if it has a unique solution
+ int possibilities = 0;
+ for (int value = 0; value < 9; value++) {
+ if (values.cell(row, column).possibility(value)) {
+ possibilities++;
+ }
+ }
+ if (possibilities == 1) {
+ child_palette.setColor(QPalette::Base, globalSettings().colorHintUnique());
+ sudokuwidget_value[row][column]->setPalette(child_palette);
+ }
+
+
}
}
}
@@ -73,20 +101,14 @@ void SudokuWidget::set_values(const Sudoku & values)
{
for (int row = 0; row < 9; row++) {
for (int column = 0; column < 9 ; column++) {
- QPalette child_palette(palette());
int i = values.cell(row, column).value();
if (i > 0) {
QString str = QString::number(i);
sudokuwidget_value[row][column]->setText(str);
- // set background color depending on the validity of the cell value
- if (!values.cell(row, column).valid()) {
- child_palette.setColor(QPalette::Base, globalSettings().colorInvalidValue());
- }
} else {
sudokuwidget_value[row][column]->clear();
}
- sudokuwidget_value[row][column]->setPalette(child_palette);
}
}