[gnome-games/sudoku-tube] Make clear-grid work



commit 7ab502f708b2493a0e4171c9d6709b072bc5e6e1
Author: Zhang Sen <zh jesse gmail com>
Date:   Sat Jul 18 19:03:51 2009 +0800

    Make clear-grid work

 gnome-sudoku/src/lib/gsudoku.py |   13 +++++--------
 gnome-sudoku/src/lib/main.py    |   27 +++++++++------------------
 2 files changed, 14 insertions(+), 26 deletions(-)
---
diff --git a/gnome-sudoku/src/lib/gsudoku.py b/gnome-sudoku/src/lib/gsudoku.py
index 95646c1..c68c1f5 100644
--- a/gnome-sudoku/src/lib/gsudoku.py
+++ b/gnome-sudoku/src/lib/gsudoku.py
@@ -409,6 +409,7 @@ class SudokuModel:
         self.impossible_hints = 0
         self.impossibilities = []
         self.__trackers_tracking__ = {}
+        self.group_size = group_size
         self._setup_grid(grid, group_size)
 
         self._observers = []
@@ -426,18 +427,14 @@ class SudokuModel:
 
     def reset_grid (self):
         """Reset grid to its original setup.
+        """
 
-        Return a list of items we removed so that callers can handle
-        e.g. Undo properly"""
-        removed = []
         for x in range(self.group_size):
             for y in range(self.group_size):
                 if not self.grid.virgin._get_(x, y):
-                    val = self.__entries__[(x, y)].get_value() # get the value from the user-visible grid,
-                    if val:
-                        removed.append((x, y, val, self._trackers_for_point(x, y, val)))
-                        self.remove(x, y, do_removal = True)
-        return removed
+                    # conflicting values are not being tracked, so we have to
+                    # set_value on all the entries, instead of only filled ones
+                    self.set_value(x, y, 0)
 
     def _blank_grid(self):
         for x in range(self.group_size):
diff --git a/gnome-sudoku/src/lib/main.py b/gnome-sudoku/src/lib/main.py
index 82d6fd8..60e3bea 100644
--- a/gnome-sudoku/src/lib/main.py
+++ b/gnome-sudoku/src/lib/main.py
@@ -252,6 +252,14 @@ class UI (gconf_wrapper.GConfWrapper):
             action = self.builder.get_object(action_name)
             action.connect("activate", callback)
 
+        edit_actions = [
+                ("Clear", self.clear_cb),
+                ("ClearNotes", self.clear_notes_cb),
+                ]
+        for action_name, callback in edit_actions:
+            action = self.builder.get_object(action_name)
+            action.connect("activate", callback)
+
     def setup_undo (self):
         # TODO
         return
@@ -442,24 +450,7 @@ class UI (gconf_wrapper.GConfWrapper):
             self.is_fullscreen = True
 
     def clear_cb (self, *args):
-        clearer = Undo.UndoableObject(
-            self.do_clear, #action
-            self.undo_clear, #inverse
-            self.history #history
-            )
-        clearer.perform()
-
-    # add a check to stop the dancer if she is dancing
-    def do_clear (self, *args):
-        self.cleared.append(self.gsd.reset_grid())
-        self.stop_dancer()
-
-    # add a check for finish in the undo to clear
-    def undo_clear (self, *args):
-        for entry in self.cleared.pop():
-            self.gsd.add_value(*entry)
-        if self.gsd.grid.check_for_completeness():
-            self.gsd.emit('puzzle-finished')
+        self._main_model.reset_grid()
 
     def clear_notes_cb (self, *args):
         clearer = Undo.UndoableObject(



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]