[gnome-games/sudoku-tube: 81/82] Misc. updates



commit 094915a86f96e4d6c39124881a8ac846220730b5
Author: Zhang Sen <zh jesse gmail com>
Date:   Sat Nov 14 10:38:33 2009 +0800

    Misc. updates
    
    Make some code more readable

 gnome-sudoku/src/lib/networking.py   |   19 ++++++++------
 gnome-sudoku/src/lib/tube_handler.py |    2 +-
 gnome-sudoku/src/lib/view.py         |   45 +++++++++++++++++++---------------
 3 files changed, 37 insertions(+), 29 deletions(-)
---
diff --git a/gnome-sudoku/src/lib/networking.py b/gnome-sudoku/src/lib/networking.py
index 330c048..e77dc35 100644
--- a/gnome-sudoku/src/lib/networking.py
+++ b/gnome-sudoku/src/lib/networking.py
@@ -32,31 +32,34 @@ class SideViewProxy(dbus.service.Object):
     """A dbus object, which exports a sudoku game's side-view on dbus
     """
 
+    _COLLABORATE_BG = (0, 1, 0)
+    _COMPETITIVE_BG = (0, 0, 0)
+
     def __init__(self, bus, obj_path, mode, sudoku_view):
         dbus.service.Object.__init__(self, bus, obj_path)
-        self._view = sudoku_view
+        self._side_view = sudoku_view
         self._is_collaborate = mode
 
     @dbus.service.method(dbus_interface=view_interface,
             in_signature="iii", out_signature="")
     def set_value(self, x, y, value):
         if self._is_collaborate:
-            self._view.set_value(x, y, value)
-        # else is competitive mode
-        elif value:
-            self._view.set_invisible(x, y)
+            self._side_view.set_value_with_bg(x, y, value, self._COLLABORATE_BG)
         else:
-            self._view.set_empty(x, y)
+            self._side_view.set_value_with_bg(x, y, value, self._COMPETITIVE_BG)
 
     @dbus.service.method(dbus_interface=view_interface,
             in_signature="ii", out_signature="")
     def set_focus(self, x, y):
-        self._view.set_focus(x, y)
+        self._side_view.set_focus(x, y)
 
 class RemoteViewHandler:
 
     """A handler which has identical interface with SudokuView and will relay
-    commands to a remote SideViewProxy
+    commands to a remote SideViewProxy.
+
+    Commands go along such a route:
+        main_model->RemoteViewHandler->SideViewProxy->SudokuSideView
     """
 
     def __init__(self, remote_proxy):
diff --git a/gnome-sudoku/src/lib/tube_handler.py b/gnome-sudoku/src/lib/tube_handler.py
index 1737914..831e3a9 100644
--- a/gnome-sudoku/src/lib/tube_handler.py
+++ b/gnome-sudoku/src/lib/tube_handler.py
@@ -58,7 +58,7 @@ class TubeHandler(dbus.service.Object):
 
         bus = dbus.SessionBus()
         # this bus_name has to be retained, so make it a instance attribute
-        self.busname = dbus.service.BusName(bus_name, bus)
+        self.name_ownership = dbus.service.BusName(bus_name, bus)
         super(TubeHandler, self).__init__(bus, obj_path)
 
     @dbus.service.method(dbus_interface="org.gnome.Empathy.TubeHandler",
diff --git a/gnome-sudoku/src/lib/view.py b/gnome-sudoku/src/lib/view.py
index e4b9387..65bc078 100644
--- a/gnome-sudoku/src/lib/view.py
+++ b/gnome-sudoku/src/lib/view.py
@@ -453,9 +453,12 @@ class SudokuView(SudokuNumberGrid):
         return self._tracker.get_trackers_tracking()
 
 class SudokuSideView(SudokuNumberGrid):
+
+    _FOCUSED_BACKGROUND = (0, 1, 0)
+
     def __init__(self, group_size):
-        self._focus = None
-        self._focus_bg = None
+        self._cursor = None
+        self._cursor_bg = None # original bg color overridden by a cursor
 
         SudokuNumberGrid.__init__(self, group_size)
         for x in range(self.group_size):
@@ -467,26 +470,28 @@ class SudokuSideView(SudokuNumberGrid):
             for y in range(self.group_size):
                 self.set_value(x, y, 0)
                 self.set_background_color(x, y, None)
-        self._focus = None
-        self._focus_bg = None
-
-    def set_invisible(self, x, y):
-        self.set_background_color(x, y, (0, 0, 0))
-        if self._focus and (x, y) == (self._focus.x, self._focus.y):
-            self._focus_bg = (0, 0, 0)
+        self._cursor = None
+        self._cursor_bg = None
 
-    def set_empty(self, x, y):
-        self.set_value(x, y, 0)
-        self.set_background_color(x, y, None)
+    def set_value_with_bg(self, x, y, value, color):
+        self.set_value(x, y, value)
+        if not value: # zero means clearing
+            color = None
+        self.set_background_color(x, y, color)
+        if self._cursor and (x, y) == (self._cursor.x, self._cursor.y):
+            self._cursor_bg = color
 
     def set_focus(self, x, y):
         # restore previously focused entry
-        if self._focus:
-            self.set_background_color(self._focus.x, self._focus.y,
-                    self._focus_bg)
-        # highlight new focused entry
-        self._focus = self.__entries__[(x, y)]
-        self._focus_bg = self._focus.get_background_color()
-        self.set_background_color(x, y, (0, 1, 0))
-        # this _focus/_focus_bg is not at all elegant, but for now it does what
+        if self._cursor:
+            self.set_background_color(self._cursor.x, self._cursor.y,
+                    self._cursor_bg)
+        # Focusing an entry will override its original background;
+        # so save its coordinates and background, and restore it later when the
+        # cursor changes, as shown above.
+        self._cursor = self.__entries__[(x, y)]
+        self._cursor_bg = self._cursor.get_background_color()
+        self.set_background_color(x, y, self._FOCUSED_BACKGROUND)
+
+        # this _cursor/_cursor_bg is not at all elegant, but for now it does what
         # I need, should come up with a better solution



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