[gnome-sudoku] Add gsetting "initialize-earmarks"
- From: Michael Catanzaro <mcatanzaro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-sudoku] Add gsetting "initialize-earmarks"
- Date: Mon, 4 Jul 2022 23:01:01 +0000 (UTC)
commit 0994ff250d8cdc2a87cc422e81e111b3316dd814
Author: Steven Elliott <selliott512 gmail com>
Date: Sat Jul 2 15:43:55 2022 -0400
Add gsetting "initialize-earmarks"
Add gsetting "initialize-earmarks" to initialize the earmarks once when
the Sudoku is first played. This is similar to option -s.
data/org.gnome.Sudoku.gschema.xml | 4 ++++
src/gnome-sudoku.vala | 7 ++++++
src/sudoku-view.vala | 45 +++++++++++++++++++++++++++++++++++++++
src/sudoku-window.vala | 1 +
4 files changed, 57 insertions(+)
---
diff --git a/data/org.gnome.Sudoku.gschema.xml b/data/org.gnome.Sudoku.gschema.xml
index 1db8f5a..b5cbd71 100644
--- a/data/org.gnome.Sudoku.gschema.xml
+++ b/data/org.gnome.Sudoku.gschema.xml
@@ -44,5 +44,9 @@
<default>false</default>
<summary>true if the window is maximized</summary>
</key>
+ <key name="initialize-earmarks" type="b">
+ <default>false</default>
+ <summary>Initialize the earmarks with the possible values for each cell</summary>
+ </key>
</schema>
</schemalist>
diff --git a/src/gnome-sudoku.vala b/src/gnome-sudoku.vala
index ee442c7..ec9f8e5 100644
--- a/src/gnome-sudoku.vala
+++ b/src/gnome-sudoku.vala
@@ -128,6 +128,13 @@ public class Sudoku : Gtk.Application
});
add_action (highlighter_action);
+ var initialize_earmarks_action = settings.create_action ("initialize-earmarks");
+ initialize_earmarks_action.notify["state"].connect (() => {
+ if (view != null)
+ view.initialize_earmarks = settings.get_boolean ("initialize-earmarks");
+ });
+ add_action (initialize_earmarks_action);
+
set_accels_for_action ("app.new-game", {"<Primary>n"});
set_accels_for_action ("app.print", {"<Primary>p"});
set_accels_for_action ("app.quit", {"<Primary>q"});
diff --git a/src/sudoku-view.vala b/src/sudoku-view.vala
index df401f0..25c26bf 100644
--- a/src/sudoku-view.vala
+++ b/src/sudoku-view.vala
@@ -34,6 +34,8 @@ private class SudokuCellView : DrawingArea
private int row;
private int col;
+ private bool initialized_earmarks;
+
public int value
{
get { return game.board [row, col]; }
@@ -74,6 +76,17 @@ private class SudokuCellView : DrawingArea
}
}
+ private bool _initialize_earmarks;
+ public bool initialize_earmarks
+ {
+ get { return _initialize_earmarks; }
+ set
+ {
+ _initialize_earmarks = value;
+ queue_draw ();
+ }
+ }
+
private bool _show_warnings = true;
public bool show_warnings
{
@@ -376,6 +389,26 @@ private class SudokuCellView : DrawingArea
bool[] marks = null;
if (!_show_possibilities)
{
+ // Onetime earmark initialization.
+ if (!initialized_earmarks)
+ {
+ // For gsetting "initialize-earmarks" only initialize the earmarks
+ // if playing a new game.
+ if (_initialize_earmarks && (game.mode == GameMode.PLAY) &&
+ (game.board.previous_played_time == 0.0))
+ {
+ marks = game.board.get_possibilities_as_bool_array (row, col);
+ for (int num = 1; num <= marks.length; num++)
+ {
+ if (marks[num - 1])
+ {
+ game.board.enable_earmark (row, col, num);
+ }
+ }
+ }
+ initialized_earmarks = true;
+ }
+
marks = game.board.get_earmarks (row, col);
}
else if (value == 0)
@@ -673,6 +706,18 @@ public class SudokuView : AspectFrame
}
}
+ private bool _initialize_earmarks = false;
+ public bool initialize_earmarks
+ {
+ get { return _initialize_earmarks; }
+ set {
+ _initialize_earmarks = value;
+ for (var i = 0; i < game.board.rows; i++)
+ for (var j = 0; j < game.board.cols; j++)
+ cells[i,j].initialize_earmarks = value;
+ }
+ }
+
private bool _highlighter = false;
public bool highlighter
{
diff --git a/src/sudoku-window.vala b/src/sudoku-window.vala
index 8b4df22..441bd3f 100644
--- a/src/sudoku-window.vala
+++ b/src/sudoku-window.vala
@@ -140,6 +140,7 @@ public class SudokuWindow : ApplicationWindow
else
view.show_warnings = settings.get_boolean ("show-warnings");
view.highlighter = settings.get_boolean ("highlighter");
+ view.initialize_earmarks = settings.get_boolean ("initialize-earmarks");
view.show ();
game_box.pack_start (view);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]