[gnome-games/sudoku-tube] Can choose difficulty when starting network game



commit 6e082d456d0c07352faa67858b85f8d0a4e7d3fd
Author: Zhang Sen <zh jesse gmail com>
Date:   Thu Aug 20 11:51:49 2009 +0800

    Can choose difficulty when starting network game

 gnome-sudoku/data/contact_selector_dialog.ui |   70 +++++++++++++++++++++++++-
 gnome-sudoku/src/lib/contact_selector.py     |   22 +++++++-
 gnome-sudoku/src/lib/main.py                 |    9 +--
 3 files changed, 91 insertions(+), 10 deletions(-)
---
diff --git a/gnome-sudoku/data/contact_selector_dialog.ui b/gnome-sudoku/data/contact_selector_dialog.ui
index 98989e9..9e8d16a 100644
--- a/gnome-sudoku/data/contact_selector_dialog.ui
+++ b/gnome-sudoku/data/contact_selector_dialog.ui
@@ -14,11 +14,12 @@
         <property name="spacing">2</property>
         <child>
           <object class="GtkCheckButton" id="gamemode_button">
-            <property name="label" translatable="yes">Collaborate</property>
+            <property name="label" translatable="yes">_Collaborate</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <property name="receives_default">False</property>
             <property name="tooltip_text" translatable="yes">You will be able to see your friend's solutions, vice vesa</property>
+            <property name="use_underline">True</property>
             <property name="draw_indicator">True</property>
           </object>
           <packing>
@@ -27,6 +28,73 @@
             <property name="position">1</property>
           </packing>
         </child>
+        <child>
+          <object class="GtkRadioButton" id="radiobutton_easy">
+            <property name="label" translatable="yes">_Easy</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="use_underline">True</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="radiobutton_medium">
+            <property name="label" translatable="yes">_Medium</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="use_underline">True</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <property name="group">radiobutton_easy</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="radiobutton_hard">
+            <property name="label" translatable="yes">_Hard</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="use_underline">True</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <property name="group">radiobutton_easy</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="radiobutton_veryhard">
+            <property name="label" translatable="yes">_Very hard</property>
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="use_underline">True</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <property name="group">radiobutton_easy</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">5</property>
+          </packing>
+        </child>
         <child internal-child="action_area">
           <object class="GtkHButtonBox" id="action_area">
             <property name="visible">True</property>
diff --git a/gnome-sudoku/src/lib/contact_selector.py b/gnome-sudoku/src/lib/contact_selector.py
index 6e2c01d..9e45a85 100644
--- a/gnome-sudoku/src/lib/contact_selector.py
+++ b/gnome-sudoku/src/lib/contact_selector.py
@@ -308,6 +308,20 @@ class ContactSelector(gtk.ComboBox):
 
 
 def contact_selector_run(parent=None):
+    def read_game_level():
+        easy = builder.get_object("radiobutton_easy")
+        medium = builder.get_object("radiobutton_medium")
+        hard = builder.get_object("radiobutton_hard")
+        veryhard = builder.get_object("radiobutton_veryhard")
+        for button, level in [
+                (easy, "easy"),
+                (medium, "medium"),
+                (hard, "hard"),
+                (veryhard, "very_hard")]:
+            if button.get_active():
+                return level
+        return "easy" # shouldn't reach here
+
     out = None
 
     builder = gtk.Builder()
@@ -330,12 +344,14 @@ def contact_selector_run(parent=None):
         if selected:
             conn, handle, contact = selected
             mode = game_mode.get_active()
+            game_level = read_game_level()
             logger.debug("selected: %s\n"
                          "  connection: %s\n"
                          "  handle: %d\n"
-                         "  collaborate :%d" % (
-                    contact.alias, conn.service_name, handle, mode))
-            out = (conn, handle, mode)
+                         "  collaborate :%d\n"
+                         "  level: %s" % (
+                    contact.alias, conn.service_name, handle, mode, game_level))
+            out = (conn, handle, mode, game_level)
         else:
             logger.debug("canceled")
             out = None
diff --git a/gnome-sudoku/src/lib/main.py b/gnome-sudoku/src/lib/main.py
index b60cbc5..8441029 100644
--- a/gnome-sudoku/src/lib/main.py
+++ b/gnome-sudoku/src/lib/main.py
@@ -44,7 +44,6 @@ class SudokuGame(gconf_wrapper.GConfWrapper):
     initial_prefs = {'group_size':9,
                      'always_show_hints':False,
                      'difficulty':0.0,
-                     'game-level': 'easy',
                      'minimum_number_of_new_puzzles':MIN_NEW_PUZZLES,
                      'highlight':False,
                      'bg_color':'black',
@@ -118,9 +117,7 @@ class SudokuGame(gconf_wrapper.GConfWrapper):
             logger.debug("no saved game found")
             return None
 
-    def _generate_new_puzzle(self):
-        # TODO should use preconfigured or user-selected level
-        level = self.gconf['game-level']
+    def _generate_new_puzzle(self, level="easy"):
         # new_puzzle is a list, with the form of (<puzzle>, <difficulty>)
         puzzles = self.sudoku_maker.get_puzzles(1, [level])
         if puzzles:
@@ -468,9 +465,9 @@ class SudokuGame(gconf_wrapper.GConfWrapper):
             return
 
         self._is_initiator = True
-        conn, handle, mode = choice
+        conn, handle, mode, level = choice
 
-        puzzle = self._generate_new_puzzle()
+        puzzle = self._generate_new_puzzle(level)
         if not puzzle:
             logger.error("failed to genereate new puzzle")
             # should popup?



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