[gnome-games/sudoku-tube] Undo/redo for auto-fill-current



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]