1
from utils.Element import Element
2
from utils.datatypes import *
7
class ConfigWidget(Element):
9
Abstract base class for configuration widgets. Configuration widgets can
10
be directly addressed to get/set values or can be visualized to allow the
11
user to change settings.
14
def __init__(self, name, getter, setter, caller):
16
Element.__init__(self, name)
18
self.__may_set_back = False
19
self.__initialized = False
23
self.__getter = getter
24
self.__setter = setter
25
self.__caller = caller
28
self._register_property("bind", TYPE_STRING, self._setp_bind, None,
30
doc = "Binds the value to an object property")
31
self._register_property("callback", TYPE_STRING,
32
self._setp, self._getp, None,
33
doc = "Callback function")
34
self._register_property("help", TYPE_STRING, self._setp, self._getp,
35
"", doc = "Tooltip text")
36
self._register_property("label", TYPE_STRING,
37
self._setp_label, self._getp, "",
38
doc = "Description label text")
39
self._register_property("enabled", TYPE_BOOL,
40
self._setp_enabled, self._getp, True,
41
doc = "Whether the widget is enabled")
44
def _get_path(self): return self.__path
45
def set_path(self, path): self.__path = path
50
# Tells the config widget to update itself by reading from the bound object.
54
self.__may_set_back = True
56
old_value = self.get_prop("value")
58
new_value = self._get_config()
62
if (not self.__initialized or old_value != new_value):
63
self.__initialized = True
64
self.set_prop("value", new_value)
68
def _get_config(self):
70
return self.__getter(self.__bind)
73
def _set_config(self, v):
76
if (not self.__may_set_back): return
78
# get_datatype_of_property() doesn't throw here, since ConfigWidget has
80
datatype = self.get_datatype_of_property("value")
81
self.__setter(self.__bind, v, datatype)
83
self.call_callback(self.__bind, v)
86
def call_callback(self, *args):
88
# invoke the callback handler
89
callback = self.get_prop("callback")
91
# we get a much better startup performance with the idle handler
92
gobject.idle_add(self.__caller, callback, *args)
96
def get_widgets(self): raise NotImplementedError
98
def _set_enabled(self, value): raise NotImplementedError
99
def _set_label(self, value): raise NotImplementedError
102
def _setp_bind(self, key, value):
107
def _setp_enabled(self, key, value):
109
self._setp(key, value)
110
self._set_enabled(value)
113
def _setp_label(self, key, value):
115
self._setp(key, value)
116
self._set_label(value)