summaryrefslogtreecommitdiff
path: root/rapid/prefs.py
diff options
context:
space:
mode:
Diffstat (limited to 'rapid/prefs.py')
-rw-r--r--rapid/prefs.py193
1 files changed, 0 insertions, 193 deletions
diff --git a/rapid/prefs.py b/rapid/prefs.py
deleted file mode 100644
index cc89c96..0000000
--- a/rapid/prefs.py
+++ /dev/null
@@ -1,193 +0,0 @@
-### Copyright (C) 2002-2006 Stephen Kennedy <stevek@gnome.org>
-
-### This program is free software; you can redistribute it and/or modify
-### it under the terms of the GNU General Public License as published by
-### the Free Software Foundation; either version 2 of the License, or
-### (at your option) any later version.
-
-### This program is distributed in the hope that it will be useful,
-### but WITHOUT ANY WARRANTY; without even the implied warranty of
-### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-### GNU General Public License for more details.
-
-### You should have received a copy of the GNU General Public License
-### along with this program; if not, write to the Free Software
-### Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
-### USA
-
-### Modified August 2007 by Damon Lynch to allow use of list value preferences
-### Modified May 2010 by Damon Lynch to allow preferences to be reset
-
-"""Module to help implement 'instant-apply' preferences.
-
-Usage:
-
-import prefs
-defaults = {
- "colour" : prefs.Value(prefs.STRING, "red")
- "size" : prefs.Value(prefs.INT, 10)
-}
-
-p = prefs.Preferences("/apps/myapp", defaults)
-# use variables as if they were normal attributes.
-draw(p.colour, p.size)
-# settings are persistent. (saved in gconf)
-p.color = "blue"
-
-"""
-
-class Value(object):
- """Represents a settable preference.
- """
-
- __slots__ = ["type", "default", "current"]
-
- def __init__(self, t, d):
- """Create a value.
-
- t : a string : one of ("bool", "int", "string", "list")
- d : the default value, also the initial value
- """
- self.type = t
- self.default = d
- self.current = d
-
- def setfunc(self, gconf, rootkey, attr):
- setfunc = getattr(gconf, "set_%s" % self.type)
- setfunc("%s/%s" % (rootkey, attr), self.current)
-
- def getfunc(self, gconf, rootkey, attr):
- getfunc = getattr(gconf, "get_%s" % self.type)
- return getfunc("%s/%s" % (rootkey, attr))
-
-
-class ListValue(Value):
- """
- Represents a list type settable preference.
- """
-
- __slots__ = Value.__slots__ + ["list_type"]
- def __init__(self, list_type, d):
- """
- Create a list value.
-
- d : the default value, also the initial value
- list_type: the type of elements the list contains
- """
- Value.__init__(self, LIST, d)
- self.list_type = list_type
-
- def setfunc(self, gconf, rootkey, attr):
- setfunc = getattr(gconf, "set_list")
- setfunc("%s/%s" % (rootkey, attr), self.list_type, self.current)
-
- def getfunc(self, gconf, rootkey, attr):
- getfunc = getattr(gconf, "get_list")
- return getfunc("%s/%s" % (rootkey, attr), self.list_type)
-
-
-# maybe fall back to ConfigParser if gconf is unavailable.
-import gconf
-
-# types of values allowed
-BOOL = "bool"
-INT = "int"
-STRING = "string"
-FLOAT = "float"
-LIST = "list"
-# PAIR = "pair"
-STRING_LIST = gconf.VALUE_STRING
-INT_LIST = gconf.VALUE_INT
-BOOL_LIST = gconf.VALUE_BOOL
-FLOAT_LIST = gconf.VALUE_FLOAT
-##
-
-class Preferences(object):
- """Persistent preferences object.
-
- Example:
- import prefs
- defaults = {"spacing": prefs.Value(prefs.INT, 4),
- "font": prefs.Value(prefs.STRING, "monospace") }
- p = prefs.Prefs("myapp", defaults)
- print p.font
- p.font = "sans" # written to gconf too
- p2 = prefs.Prefs("myapp", defaults)
- print p.font # prints "sans"
- """
-
- def __init__(self, rootkey, initial):
- """Create a preferences object.
-
- Settings are initialised with 'initial' and then overriden
- from values in the gconf database if available.
-
- rootkey : the root gconf key where the values will be stored
- initial : a dictionary of string to Value objects.
- """
- self.__dict__["_gconf"] = gconf.client_get_default()
- self.__dict__["_listeners"] = []
- self.__dict__["_rootkey"] = rootkey
- self.__dict__["_prefs"] = initial
- self._gconf.add_dir(rootkey, gconf.CLIENT_PRELOAD_NONE)
- self._gconf.notify_add(rootkey, self._on_preference_changed)
- for key, value in self._prefs.items():
- gval = self._gconf.get_without_default("%s/%s" % (rootkey, key) )
- if gval != None:
- value.current = value.getfunc(self._gconf, rootkey, key)
-
- def __getattr__(self, attr):
- return self._prefs[attr].current
-
- def get_default(self, attr):
- return self._prefs[attr].default
-
- def __setattr__(self, attr, val):
- value = self._prefs[attr]
-
- if value.current != val:
- value.current = val
- value.setfunc(self._gconf, self._rootkey, attr)
-
- try:
- for l in self._listeners:
- l(attr,val)
- except StopIteration:
- pass
-
- def _on_preference_changed(self, client, timestamp, entry, extra):
- attr = entry.key[ entry.key.rindex("/")+1 : ]
- try:
- valuestruct = self._prefs[attr]
- except KeyError: # unknown key, we don't care about it
- pass
- else:
- if entry.value != None: # value has changed
- newval = valuestruct.getfunc(self._gconf, self._rootkey, attr)
- setattr( self, attr, newval)
- else: # value has been deleted
- setattr( self, attr, valuestruct.default )
-
- def notify_add(self, callback):
- """Register a callback to be called when a preference changes.
-
- callback : a callable object which take two parameters, 'attr' the
- name of the attribute changed and 'val' the new value.
- """
- self._listeners.append(callback)
-
- def dump(self):
- """Print all preferences.
- """
- for k,v in self._prefs.items():
- print k, v.type, v.current
-
- def reset(self):
- """
- reset all preferences to defaults
- """
-
- for key in self._prefs:
- self.__setattr__(key, self.get_default(key))
-
-