[gnome-games] sudoku: Use GSettings
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games] sudoku: Use GSettings
- Date: Wed, 11 Jan 2012 14:40:59 +0000 (UTC)
commit 7bb5395a439f41745aefe17fec32dc4c22e7516b
Author: Robert Ancell <robert ancell canonical com>
Date: Wed Jan 11 15:40:53 2012 +0100
sudoku: Use GSettings
gnome-sudoku/data/Makefile.am | 30 +--
gnome-sudoku/data/gnome-sudoku.schemas.in | 329 --------------------
.../data/org.gnome.gnome-sudoku.gschema.xml.in | 105 +++++++
gnome-sudoku/src/lib/gtk_goodies/Makefile.am | 1 -
gnome-sudoku/src/lib/gtk_goodies/gconf_wrapper.py | 205 ------------
gnome-sudoku/src/lib/main.py | 95 +++----
gnome-sudoku/src/lib/printing.py | 53 ++--
7 files changed, 179 insertions(+), 639 deletions(-)
---
diff --git a/gnome-sudoku/data/Makefile.am b/gnome-sudoku/data/Makefile.am
index c644336..f3dc54d 100644
--- a/gnome-sudoku/data/Makefile.am
+++ b/gnome-sudoku/data/Makefile.am
@@ -1,5 +1,10 @@
SUBDIRS = icons
+gsettings_in_file = org.gnome.gnome-sudoku.gschema.xml.in
+gsettings_SCHEMAS = $(gsettings_in_file:.xml.in=.xml)
+ INTLTOOL_XML_NOMERGE_RULE@
+ GSETTINGS_RULES@
+
desktopdir = $(datadir)/applications
desktop_in_files = gnome-sudoku.desktop.in.in
desktop_DATA = $(desktop_in_files:.desktop.in.in=.desktop)
@@ -21,23 +26,6 @@ ui_DATA = \
select_game.ui \
tracker.ui
-schema_in_files = gnome-sudoku.schemas.in
-if HAVE_GNOME
-schemadir = $(GCONF_SCHEMA_FILE_DIR)
-schema_DATA = $(schema_in_files:.schemas.in=.schemas)
-endif
-
-install-schemas-local: $(schema_DATA)
-if GCONF_SCHEMAS_INSTALL
- if test -z "$(DESTDIR)" ; then \
- for p in $^ ; do \
- GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $$p 2>&1 > /dev/null; \
- done \
- fi
-endif
-
-install-data-local: install-schemas-local
-
man_MANS = gnome-sudoku.6
EXTRA_DIST = \
@@ -45,17 +33,15 @@ EXTRA_DIST = \
$(desktop_DATA) \
$(puzzle_DATA) \
$(ui_DATA) \
- $(schema_in_files) \
+ $(gsettings_in_file) \
$(man_MANS)
CLEANFILES = \
$(desktop_DATA) \
- $(schema_DATA)
+ $(gsettings_SCHEMAS)
DISTCLEANFILES = \
$(desktop_DATA) \
- $(schema_DATA)
-
- INTLTOOL_SCHEMAS_RULE@
+ $(gsettings_SCHEMAS)
-include $(top_srcdir)/git.mk
diff --git a/gnome-sudoku/data/org.gnome.gnome-sudoku.gschema.xml.in b/gnome-sudoku/data/org.gnome.gnome-sudoku.gschema.xml.in
new file mode 100644
index 0000000..61c58ce
--- /dev/null
+++ b/gnome-sudoku/data/org.gnome.gnome-sudoku.gschema.xml.in
@@ -0,0 +1,105 @@
+<schemalist>
+ <schema id="org.gnome.gnome-sudoku" path="/org/gnome/gnome-sudoku/">
+ <key name="auto-save-interval" type="i">
+ <default>60</default>
+ <summary>The number of seconds between automatic saves</summary>
+ <description>The number of seconds between automatic saves</description>
+ </key>
+ <key name="number-of-sudokus-to-generate" type="i">
+ <default>10</default>
+ </key>
+ <key name="print-already-played-games" type="b">
+ <default>false</default>
+ <summary>Print games that have been played</summary>
+ <description>Print games that have been played</description>
+ </key>
+ <key name="mark-printed-as-played" type="b">
+ <default>false</default>
+ <summary>Mark printed games as played</summary>
+ <description>Mark printed games as played</description>
+ </key>
+ <key name="group-size" type="i">
+ <default>9</default>
+ </key>
+ <key name="generate-target-easy" type="b">
+ <default>true</default>
+ </key>
+ <key name="generate-target-medium" type="b">
+ <default>false</default>
+ </key>
+ <key name="generate-target-hard" type="b">
+ <default>true</default>
+ </key>
+ <key name="generate-target-very-hard" type="b">
+ <default>true</default>
+ </key>
+ <key name="print-easy" type="b">
+ <default>true</default>
+ </key>
+ <key name="print-medium" type="b">
+ <default>true</default>
+ </key>
+ <key name="print-hard" type="b">
+ <default>true</default>
+ </key>
+ <key name="print-very-hard" type="b">
+ <default>true</default>
+ </key>
+ <key name="minimum-number-of-new-puzzles" type="i">
+ <default>90</default>
+ </key>
+ <key name="difficulty" type="d">
+ <default>0.0</default>
+ </key>
+ <key name="width" type="i">
+ <default>700</default>
+ <summary>Width of application window in pixels</summary>
+ <description>Width of application window in pixels</description>
+ </key>
+ <key name="height" type="i">
+ <default>675</default>
+ <summary>Height of application window in pixels</summary>
+ <description>Height of application window in pixels</description>
+ </key>
+ <key name="print-multiple-sudokus-to-print" type="i">
+ <default>4</default>
+ </key>
+ <key name="highlight" type="b">
+ <default>false</default>
+ <summary>Show hint highlights</summary>
+ <description>Show hint highlights</description>
+ </key>
+ <key name="show-tracker" type="b">
+ <default>false</default>
+ </key>
+ <key name="bg-color" type="s">
+ <default>'black'</default>
+ <summary>Color of the grid border</summary>
+ <description>Color of the grid border</description>
+ </key>
+ <key name="show-toolbar" type="b">
+ <default>true</default>
+ <summary>Show the application toolbar</summary>
+ <description>Show the application toolbar</description>
+ </key>
+ <key name="show-impossible-implications" type="b">
+ <default>false</default>
+ </key>
+ <key name="always-show-hints" type="b">
+ <default>false</default>
+ <summary>Show hints</summary>
+ <description>Show hints</description>
+ </key>
+ <key name="generate-for-target" type="b">
+ <default>false</default>
+ </key>
+ <key name="generate-endlessly" type="b">
+ <default>true</default>
+ </key>
+ <key name="sudokus-per-page" type="i">
+ <default>2</default>
+ <summary>Number of puzzles to print on a page</summary>
+ <description>Number of puzzles to print on a page</description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/gnome-sudoku/src/lib/gtk_goodies/Makefile.am b/gnome-sudoku/src/lib/gtk_goodies/Makefile.am
index 9a3ad9e..1fe6f5f 100644
--- a/gnome-sudoku/src/lib/gtk_goodies/Makefile.am
+++ b/gnome-sudoku/src/lib/gtk_goodies/Makefile.am
@@ -1,7 +1,6 @@
gnomesudokudir = $(pythondir)/gnome_sudoku/gtk_goodies
gnomesudoku_PYTHON = \
dialog_extras.py \
- gconf_wrapper.py \
__init__.py \
Undo.py
diff --git a/gnome-sudoku/src/lib/main.py b/gnome-sudoku/src/lib/main.py
index 73d2912..3101957 100644
--- a/gnome-sudoku/src/lib/main.py
+++ b/gnome-sudoku/src/lib/main.py
@@ -5,7 +5,7 @@ import threading
import gi
gi.require_version("Gtk", "3.0")
-from gi.repository import Gtk,GdkPixbuf,GObject,Pango,Gdk
+from gi.repository import Gtk,GdkPixbuf,GObject,Pango,Gdk,Gio
from gettext import gettext as _
from gettext import ngettext
@@ -20,7 +20,7 @@ import timer
import tracker_info
from defaults import (APPNAME, APPNAME_SHORT, AUTHORS, COPYRIGHT, DESCRIPTION, DOMAIN,
IMAGE_DIR, MIN_NEW_PUZZLES, UI_DIR, VERSION, WEBSITE, WEBSITE_LABEL)
-from gtk_goodies import gconf_wrapper, Undo, dialog_extras
+from gtk_goodies import Undo, dialog_extras
from simple_debug import simple_debug, options
def inactivate_new_game_etc (fun):
@@ -60,7 +60,7 @@ def inactivate_new_game_etc (fun):
return ret
return inactivate_new_game_etc_
-class UI (gconf_wrapper.GConfWrapper):
+class UI:
ui = '''<ui>
<menubar name="MenuBar">
<menu name="Game" action="Game">
@@ -110,18 +110,6 @@ class UI (gconf_wrapper.GConfWrapper):
</toolbar>
</ui>'''
- initial_prefs = {'group_size':9,
- 'always_show_hints':False,
- 'difficulty':0.0,
- 'minimum_number_of_new_puzzles':MIN_NEW_PUZZLES,
- 'highlight':False,
- 'bg_color':'black',
- 'show_tracker':False,
- 'width': 700,
- 'height': 675,
- 'auto_save_interval':60 # auto-save interval in seconds...
- }
-
@simple_debug
def __init__ (self, run_selector = True):
"""run_selector means that we start our regular game.
@@ -130,9 +118,7 @@ class UI (gconf_wrapper.GConfWrapper):
run_selector=False to this method to avoid running the dialog
and allow a tester to set up a game programmatically.
"""
- gconf_wrapper.GConfWrapper.__init__(self,
- gconf_wrapper.GConfWrap('gnome-sudoku')
- )
+ self.settings = Gio.Settings("org.gnome.gnome-sudoku")
self.setup_gui()
self.timer = timer.ActiveTimer(self.w)
self.gsd.set_timer(self.timer)
@@ -168,11 +154,11 @@ class UI (gconf_wrapper.GConfWrapper):
self.gsd.change_grid(choice[1], 9)
if choice[0] == game_selector.NewOrSavedGameSelector.SAVED_GAME:
saver.open_game(self, choice[1])
- if self.gconf['show_toolbar']:
+ if self.settings.get_boolean('show-toolbar'):
self.tb.show()
- if self.gconf['always_show_hints']:
+ if self.settings.get_boolean('always-show-hints'):
self.gsd.update_all_hints()
- if self.gconf['highlight']:
+ if self.settings.get_boolean('highlight'):
self.gsd.toggle_highlight(True)
@@ -181,7 +167,6 @@ class UI (gconf_wrapper.GConfWrapper):
self.w.show()
def setup_gui (self):
- self.initialize_prefs()
self.setup_main_window()
self.gsd = gsudoku.SudokuGameDisplay()
self.gsd.set_parent_for(self.w)
@@ -198,7 +183,7 @@ class UI (gconf_wrapper.GConfWrapper):
def setup_main_window (self):
Gtk.Window.set_default_icon_name('gnome-sudoku')
self.w = Gtk.Window()
- self.w.set_default_size(self.gconf['width'], self.gconf['height'])
+ self.w.set_default_size(self.settings.get_int('width'), self.settings.get_int('height'))
self.w.set_title(APPNAME_SHORT)
self.w.connect('configure-event', self.resize_cb)
self.w.connect('delete-event', self.quit_cb)
@@ -286,12 +271,12 @@ class UI (gconf_wrapper.GConfWrapper):
def setup_color (self):
# setup background colors
- bgcol = self.gconf['bg_color']
+ bgcol = self.settings.get_string('bg-color')
if bgcol != '':
self.gsd.set_bg_color(bgcol)
def setup_autosave (self):
- GObject.timeout_add_seconds(self.gconf['auto_save_interval'] or 60, # in seconds...
+ GObject.timeout_add_seconds(self.settings.get_int('auto-save-interval') or 60, # in seconds...
self.autosave)
def setup_main_boxes (self):
@@ -316,34 +301,38 @@ class UI (gconf_wrapper.GConfWrapper):
self.main_area.pack_start(self.game_box, False, False, 12)
self.w.add(self.vb)
+ def wrap_toggle (self, key_name, action):
+ action.set_active(self.settings.get_boolean(key_name))
+ action.connect('toggled', self.set_key, key_name)
+
+ def set_key (self, action, key_name):
+ self.settings.set_boolean(key_name, action.get_active())
+
def setup_toggles (self):
- # sync up toggles with gconf values...
- map(lambda tpl: self.gconf_wrap_toggle(*tpl),
- [('always_show_hints',
+ # sync up toggles with gsettings values...
+ map(lambda tpl: self.wrap_toggle(*tpl),
+ [('always-show-hints',
self.main_actions.get_action('AlwaysShowPossible')),
- ('show_impossible_implications',
+ ('show-impossible-implications',
self.main_actions.get_action('ShowImpossibleImplications')),
- ('show_toolbar',
+ ('show-toolbar',
self.main_actions.get_action('ToggleToolbar')),
('highlight',
self.main_actions.get_action('ToggleHighlight')),
- ('show_tracker',
+ ('show-tracker',
self.main_actions.get_action('Tracker')),
])
@simple_debug
def start_worker_thread (self, *args):
n_new_puzzles = self.sudoku_maker.n_puzzles(new = True)
- try:
- if n_new_puzzles < self.gconf['minimum_number_of_new_puzzles']:
- self.worker = threading.Thread(target = lambda *args: self.sudoku_maker.work(limit = 5))
- self.worker_connections = [
- self.timer.connect('timing-started', self.sudoku_maker.resume),
- self.timer.connect('timing-stopped', self.sudoku_maker.pause)
- ]
- self.worker.start()
- except gconf_wrapper.GConfError:
- pass # assume we have enough new puzzles
+ if n_new_puzzles < self.settings.get_int('minimum-number-of-new-puzzles'):
+ self.worker = threading.Thread(target = lambda *args: self.sudoku_maker.work(limit = 5))
+ self.worker_connections = [
+ self.timer.connect('timing-started', self.sudoku_maker.resume),
+ self.timer.connect('timing-stopped', self.sudoku_maker.pause)
+ ]
+ self.worker.start()
return True
@simple_debug
@@ -369,7 +358,7 @@ class UI (gconf_wrapper.GConfWrapper):
return
self.won = True
# increase difficulty for next time.
- self.gconf['difficulty'] = self.gconf['difficulty'] + 0.1
+ self.settings.set_double('difficulty', self.settings.get_double('difficulty') + 0.1)
self.timer.finish_timing()
self.sudoku_tracker.finish_game(self)
if self.timer.active_time < 60:
@@ -404,14 +393,6 @@ class UI (gconf_wrapper.GConfWrapper):
)
@simple_debug
- def initialize_prefs (self):
- for k, v in self.initial_prefs.items():
- try:
- self.gconf[k]
- except:
- self.gconf[k] = v
-
- @simple_debug
@inactivate_new_game_etc
def new_cb (self, *args):
if (self.gsd.grid and self.gsd.grid.is_changed() and not self.won):
@@ -453,8 +434,8 @@ class UI (gconf_wrapper.GConfWrapper):
@simple_debug
def resize_cb (self, widget, event, user_data=None):
- self.gconf['width'] = event.width
- self.gconf['height'] = event.height
+ self.settings.set_int('width', event.width)
+ self.settings.set_int('height', event.height)
@simple_debug
def quit_cb (self, *args):
@@ -550,11 +531,11 @@ class UI (gconf_wrapper.GConfWrapper):
'''
self.cleared_notes.append((self.tinfo.current_tracker, self.gsd.clear_notes(side)))
# Turn off auto-hint if the player clears the bottom notes
- if side == 'Bottom' and self.gconf['always_show_hints']:
+ if side == 'Bottom' and self.settings.get_boolean('always_show_hints'):
always_show_hint_wdgt = self.main_actions.get_action('AlwaysShowPossible')
always_show_hint_wdgt.activate()
# Update the hints...in case we're redoing a clear of them
- if self.gconf['always_show_hints']:
+ if self.settings.get_boolean ('always_show_hints'):
self.gsd.update_all_hints()
def undo_clear_notes(self):
@@ -568,7 +549,7 @@ class UI (gconf_wrapper.GConfWrapper):
self.tracker_ui.select_tracker(cleared_tracker)
self.gsd.apply_notelist(cleared_notes)
# Update the hints...in case we're undoing over top of them
- if self.gconf['always_show_hints']:
+ if self.settings.get_boolean('always-show-hints'):
self.gsd.update_all_hints()
# Redraw the notes
self.gsd.update_all_notes()
@@ -703,7 +684,7 @@ class UI (gconf_wrapper.GConfWrapper):
@simple_debug
def print_multiple_games (self, *args):
- gp = printing.GamePrinter(self.sudoku_maker, self.gconf)
+ gp = printing.GamePrinter(self.sudoku_maker)
gp.run_dialog()
class TrackerBox (Gtk.VBox):
@@ -867,7 +848,7 @@ class TrackerBox (Gtk.VBox):
if selected_tracker_id != tracker_info.NO_TRACKER:
self.main_ui.gsd.show_track()
self.main_ui.gsd.update_all_notes()
- if self.main_ui.gconf['always_show_hints']:
+ if self.main_ui.settings.get_boolean('always-show-hints'):
self.main_ui.gsd.update_all_hints()
@simple_debug
diff --git a/gnome-sudoku/src/lib/printing.py b/gnome-sudoku/src/lib/printing.py
index e2d9270..6e8e052 100644
--- a/gnome-sudoku/src/lib/printing.py
+++ b/gnome-sudoku/src/lib/printing.py
@@ -1,10 +1,9 @@
# -*- coding: utf-8 -*-
-from gi.repository import Gtk
+from gi.repository import Gtk,Gio
import cairo
import time
import os.path
import sudoku, gsudoku, saver, defaults
-from gtk_goodies import gconf_wrapper
from gettext import gettext as _
def fit_squares_in_rectangle (width, height, n, margin = 0):
@@ -114,50 +113,54 @@ def print_sudokus(*args, **kwargs):
error_dialog.connect("response", lambda w, id: w.destroy())
error_dialog.show()
-class GamePrinter (gconf_wrapper.GConfWrapper):
+class GamePrinter:
ui_file = os.path.join(defaults.UI_DIR, 'print_games.ui')
- initial_prefs = {'sudokus_per_page':2,
- 'print_multiple_sudokus_to_print':4,
- 'print_minimum_difficulty':0,
- 'print_maximum_difficulty':0.9,
- 'print_easy':True,
- 'print_medium':True,
- 'print_hard':True,
- 'print_very_hard':True,
- }
-
- def __init__ (self, sudoku_maker, gconf):
- gconf_wrapper.GConfWrapper.__init__(self, gconf)
+ def __init__ (self, sudoku_maker):
self.sudoku_maker = sudoku_maker
+ self.settings = Gio.Settings("org.gnome.gnome-sudoku")
self.builder = Gtk.Builder()
self.builder.set_translation_domain(defaults.DOMAIN)
self.builder.add_from_file(self.ui_file)
# Set up toggles...
- for key, wname in [('mark_printed_as_played', 'markAsPlayedToggle'),
- ('print_already_played_games', 'includeOldGamesToggle'),
- ('print_easy', 'easyCheckButton'),
- ('print_medium', 'mediumCheckButton'),
- ('print_hard', 'hardCheckButton'),
- ('print_very_hard', 'very_hardCheckButton'),
+ for key, wname in [('mark-printed-as-played', 'markAsPlayedToggle'),
+ ('print-already-played-games', 'includeOldGamesToggle'),
+ ('print-easy', 'easyCheckButton'),
+ ('print-medium', 'mediumCheckButton'),
+ ('print-hard', 'hardCheckButton'),
+ ('print-very-hard', 'very_hardCheckButton'),
]:
setattr(self, wname, self.builder.get_object(wname))
try:
assert(getattr(self, wname))
except:
raise AssertionError('Widget %s does not exist' % wname)
- self.gconf_wrap_toggle(key, getattr(self, wname))
+ self.wrap_toggle(key, getattr(self, wname))
self.sudokusToPrintSpinButton = self.builder.get_object('sudokusToPrintSpinButton')
self.sudokusPerPageSpinButton = self.builder.get_object('sudokusPerPageSpinButton')
- for key, widg in [('print_multiple_sudokus_to_print', self.sudokusToPrintSpinButton.get_adjustment()),
- ('sudokus_per_page', self.sudokusPerPageSpinButton.get_adjustment())
+ for key, widg in [('print-multiple-sudokus-to-print', self.sudokusToPrintSpinButton.get_adjustment()),
+ ('sudokus-per-page', self.sudokusPerPageSpinButton.get_adjustment())
]:
- self.gconf_wrap_adjustment(key, widg)
+ self.wrap_adjustment(key, widg)
self.dialog = self.builder.get_object('dialog')
self.dialog.set_default_response(Gtk.ResponseType.OK)
self.dialog.connect('response', self.response_cb)
+ def wrap_toggle (self, key_name, action):
+ action.set_active(self.settings.get_boolean(key_name))
+ action.connect('toggled', self.set_boolean_key, key_name)
+
+ def set_boolean_key (self, action, key_name):
+ self.settings.set_boolean(key_name, action.get_active())
+
+ def wrap_adjustment (self, key_name, action):
+ action.set_value(self.settings.get_int(key_name))
+ action.connect('value-changed', self.set_int_key, key_name)
+
+ def set_int_key (self, action, key_name):
+ self.settings.set_int(key_name, action.get_value())
+
def response_cb (self, dialog, response):
if response not in (Gtk.ResponseType.ACCEPT, Gtk.ResponseType.OK):
self.dialog.hide()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]