[gnome-games/applygsoc2009: 39/76] XXX: Extract methods to make set_value shorter



commit c48c9c81bb5448028e28d1f24693319da9f8735a
Author: Pablo Castellano <pablog src gnome org>
Date:   Thu Aug 26 15:56:09 2010 +0200

    XXX: Extract methods to make set_value shorter

 gnome-sudoku/src/lib/gsudoku.py |   54 +++++++++++++++++++++++++-------------
 1 files changed, 35 insertions(+), 19 deletions(-)
---
diff --git a/gnome-sudoku/src/lib/gsudoku.py b/gnome-sudoku/src/lib/gsudoku.py
index 6aa04ee..252397e 100644
--- a/gnome-sudoku/src/lib/gsudoku.py
+++ b/gnome-sudoku/src/lib/gsudoku.py
@@ -526,32 +526,47 @@ class SudokuModel:
 
     def set_value(self, x, y, value):
         result = []
-        # first remove conflicts; grid.add should return conflicts together
-        # with ConflictError
-        old_conflicts = self._remove_related_conflicts(x, y)
+        old_conflicts = self._remove_old_conficts (x, y)
         new_conflicts = []
-        for entry in old_conflicts:
-            change = NumberBoxModel(x=entry[0], y=entry[1], conflict=False)
-            result.append(change)
 
-        if not value: # should use unified way to update the grid
-            self.grid.remove(x, y)
+        # Some value won't go into the grid, e.g. conflicts values?
+        # This makes things complicated.
+        if not value:
+            if self.grid._get_(x, y):
+                self.grid.remove(x, y)
         else:
             try:
-                self.grid.add(x, y, value) # force=True???
+                self.grid.add(x, y, value, force=True)
             except sudoku.ConflictError, err:
-                new_conflicts = self.grid.find_conflicts(x, y, value)
-        has_conflict = True if new_conflicts else False
-        result.append(NumberBoxModel(x, y, value, conflict=has_conflict))
+				new_conflicts = self._find_new_conflicts(x, y, value)
+
+        flag = True if new_conflicts else False
+        result.append(NumberBoxModel(x, y, value, conflict=flag))
+        result.extend(old_conflicts)
+        result.extend(new_conflicts)
+
+        print self.grid
+        self._signal_observers(result)
+        self._check_for_completeness()
+
+    def _remove_old_conficts(self, x, y):
+        result = []
+        old_conflicts = self._remove_related_conflicts(x, y)
+        for entry in old_conflicts:
+            change = NumberBoxModel(x=entry[0], y=entry[1], conflict=False)
+            result.append(change)
+        return result
+
+    def _find_new_conflicts(self, x, y, value):
+        result = []
+        new_conflicts = self.grid.find_conflicts(x, y, value)
+        print new_conflicts
         if new_conflicts:
-            self._record_conflicts(x, y, new_conflicts)
+            self.__error_pairs__[(x, y)] = new_conflicts
         for entry in new_conflicts:
             change = NumberBoxModel(x=entry[0], y=entry[1], conflict=True)
             result.append(change)
-        self._signal_observers(result)
-
-        if self.grid.check_for_completeness():
-            self._signal_completeness()
+        return result
 
     def _remove_related_conflicts(self, x, y):
         result = []
@@ -564,8 +579,9 @@ class SudokuModel:
                     result.append(coord)
         return result
 
-    def _record_conflicts(self, x, y, new_conflicts):
-        self.__error_pairs__[(x, y)] = new_conflicts
+    def _check_for_completeness(self):
+        if self.grid.check_for_completeness():
+            self._signal_completeness()
 
     def remove (self, x, y, *args):
         """Remove x, y from our visible grid.



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