[gnome-games/sudoku-tube] Undo/redo for auto-fill-current
- From: Zhang Sen <zhangsen src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnome-games/sudoku-tube] Undo/redo for auto-fill-current
- Date: Fri, 24 Jul 2009 03:00:16 +0000 (UTC)
commit 4796e3e5674c97c036a99d049777f40eac48a807
Author: Zhang Sen <zh jesse gmail com>
Date: Fri Jul 24 10:54:42 2009 +0800
Undo/redo for auto-fill-current
gnome-sudoku/src/lib/main.py | 7 ++++++-
gnome-sudoku/src/lib/model.py | 6 ++----
gnome-sudoku/src/lib/sudoku.py | 12 ++++++------
3 files changed, 14 insertions(+), 11 deletions(-)
---
diff --git a/gnome-sudoku/src/lib/main.py b/gnome-sudoku/src/lib/main.py
index 08cf33a..bf78065 100644
--- a/gnome-sudoku/src/lib/main.py
+++ b/gnome-sudoku/src/lib/main.py
@@ -505,7 +505,12 @@ class UI (gconf_wrapper.GConfWrapper):
def auto_fill_current_square_cb (self, *args):
current = self._main_grid_vew.get_focus()
if current:
- self._main_model.auto_fill_current(current.x, current.y)
+ x, y = current.x, current.y
+ new = self._main_model.calc_solution(x, y)
+ if new:
+ old = self._main_grid_vew.get_value(x, y)
+ cmd = undo.ChangeValueCmd(self._main_model, x, y, old, new)
+ self._history_manager.execute_command(cmd)
def tracker_toggle_cb (self, widg):
if widg.get_active():
diff --git a/gnome-sudoku/src/lib/model.py b/gnome-sudoku/src/lib/model.py
index 4db2f26..fb27a3b 100644
--- a/gnome-sudoku/src/lib/model.py
+++ b/gnome-sudoku/src/lib/model.py
@@ -296,10 +296,8 @@ class SudokuModel:
self._signal_observers(result)
- def auto_fill_current(self, x, y):
- filled = self.grid.auto_fill_for_xy(x, y)
- if filled and filled != -1:
- self.set_value(x, y, filled[1])
+ def calc_solution(self, x, y):
+ return self.grid.calc_solution(x, y)
def toggle_impossible_implications(self, show):
self.show_impossible_implications = show
diff --git a/gnome-sudoku/src/lib/sudoku.py b/gnome-sudoku/src/lib/sudoku.py
index 8ce7b6e..2488134 100644
--- a/gnome-sudoku/src/lib/sudoku.py
+++ b/gnome-sudoku/src/lib/sudoku.py
@@ -302,14 +302,14 @@ class SudokuSolver (SudokuGrid):
self.solved = False
self.trail = []
- def auto_fill_for_xy (self, x, y):
+ def calc_solution(self, x, y):
"""Fill the square x,y if possible."""
possible = self.gen_set - self.rows[y] - self.cols[x] - self.boxes[self.box_by_coords[(x, y)]]
if len(possible) == 1:
val = possible.pop()
- return ((x, y), val)
+ return val
if len(possible) == 0:
- return -1
+ return None
# check our column...
for coord_set, filled_set in [(self.col_coords[x], self.cols[x]),
(self.row_coords[y], self.rows[y]),
@@ -325,11 +325,11 @@ class SudokuSolver (SudokuGrid):
if needed_set and len(needed_set) == 1:
val = needed_set.pop()
if val in possible:
- return ((x, y), val)
+ return val
else:
- return -1
+ return None
if len(needed_set)>1:
- return -1
+ return None
def auto_fill (self):
changed = []
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]