summaryrefslogtreecommitdiff
path: root/caribou/common/setting_types.py
diff options
context:
space:
mode:
Diffstat (limited to 'caribou/common/setting_types.py')
-rw-r--r--caribou/common/setting_types.py143
1 files changed, 143 insertions, 0 deletions
diff --git a/caribou/common/setting_types.py b/caribou/common/setting_types.py
new file mode 100644
index 0000000..17faa61
--- /dev/null
+++ b/caribou/common/setting_types.py
@@ -0,0 +1,143 @@
+import gobject
+
+GCONF_DIR="/apps/caribou/osk/"
+
+ENTRY_DEFAULT=0
+ENTRY_COMBO=1
+ENTRY_COLOR=2
+ENTRY_FONT=3
+ENTRY_SPIN=4
+ENTRY_SLIDER=5
+ENTRY_CHECKBOX=6
+ENTRY_RADIO=7
+
+class Setting(gobject.GObject):
+ __gsignals__ = {'value-changed' :
+ (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE,
+ (gobject.TYPE_PYOBJECT,)),
+ 'sensitivity-changed' :
+ (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE,
+ (gobject.TYPE_BOOLEAN,))}
+ def __init__(self, name, label, children=[]):
+ gobject.GObject.__init__(self)
+ self.name = name
+ self.label = label
+ self.children = children
+
+ @property
+ def sensitive(self):
+ return getattr(self, '_sensitive', True)
+
+ @sensitive.setter
+ def sensitive(self, sensitive):
+ changed = getattr(self, '_sensitive', sensitive) != sensitive
+ self._sensitive = sensitive
+ self.emit('sensitivity-changed', sensitive)
+
+
+ def __len__(self):
+ return len(self.children)
+
+ def __getitem__(self, i):
+ return self.children[i]
+
+ def __setitem__(self, i, v):
+ self.children[i] = v
+
+ def __delitem__(self, i):
+ del self.children[i]
+
+ def __iter__(self):
+ return self.children.__iter__()
+
+class SettingsGroup(Setting):
+ pass
+
+class ValueSetting(Setting):
+ gconf_type = ''
+ entry_type=ENTRY_DEFAULT
+ def __init__(self, name, label, default, short_desc="", long_desc="",
+ allowed=[], entry_type=ENTRY_DEFAULT, sensitive=None,
+ user_visible=True, children=[],
+ insensitive_when_false=[], insensitive_when_true=[]):
+ Setting.__init__(self, name, label, children)
+ self.short_desc = short_desc
+ self.long_desc = long_desc
+ self.allowed = allowed
+ self.entry_type = entry_type or self.__class__.entry_type
+ if sensitive is not None:
+ self.sensitive = sensitive
+ self.user_visible = user_visible
+ self.default = default
+ self.insensitive_when_false = insensitive_when_false
+ self.insensitive_when_true = insensitive_when_true
+
+ @property
+ def value(self):
+ return getattr(self, '_value', self.default)
+
+ @value.setter
+ def value(self, val):
+ _val = self.convert_value(val)
+ if self.allowed and _val not in [a for a, b in self.allowed]:
+ raise ValueError, "'%s' not a valid value" % _val
+ self._value = _val
+ self.emit('value-changed', _val)
+
+ @property
+ def gconf_key(self):
+ return GCONF_DIR + self.name
+
+ @property
+ def is_true(self):
+ return bool(self.value)
+
+ @property
+ def gconf_default(self):
+ return self.default
+
+class BooleanSetting(ValueSetting):
+ gconf_type = 'boolean'
+ entry_type = ENTRY_CHECKBOX
+ def convert_value(self, val):
+ # Almost anything could be a boolean.
+ return bool(val)
+
+ @property
+ def gconf_default(self):
+ str(self.default).lower()
+
+class IntegerSetting(ValueSetting):
+ gconf_type = 'int'
+ entry_type = ENTRY_SPIN
+ def __init__(self, *args, **kwargs):
+ self.min = kwargs.pop('min', gobject.G_MININT)
+ self.max = kwargs.pop('max', gobject.G_MAXINT)
+ ValueSetting.__init__(self, *args, **kwargs)
+
+ def convert_value(self, val):
+ return int(val)
+
+class FloatSetting(ValueSetting):
+ gconf_type = 'float'
+ entry_type = ENTRY_SPIN
+ def __init__(self, *args, **kwargs):
+ self.min = kwargs.pop('min', gobject.G_MINFLOAT)
+ self.max = kwargs.pop('max', gobject.G_MAXFLOAT)
+ ValueSetting.__init__(self, *args, **kwargs)
+
+ def convert_value(self, val):
+ return float(val)
+
+class StringSetting(ValueSetting):
+ gconf_type = 'string'
+ def convert_value(self, val):
+ return str(val)
+
+class ColorSetting(StringSetting):
+ entry_type = ENTRY_COLOR
+
+class FontSetting(StringSetting):
+ entry_type = ENTRY_FONT