blob: 212d2198600397fd35bf198cff2faa306fd6470f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
from Source import Source
from Components.Element import cached
from enigma import eTimer
# a small warning:
# you can use that boolean well to express screen-private
# conditional expressions.
#
# however, if you think that there is ANY interest that another
# screen could use your expression, please put your calculation
# into a seperate Source, providing a "boolean"-property.
class Boolean(Source, object):
def __init__(self, fixed = False, function = None, poll = 0):
Source.__init__(self)
self.function = function
self.fixed = fixed
if poll > 0:
self.poll_timer = eTimer()
self.poll_timer.callback.append(self.poll)
self.poll_timer.start(poll)
else:
self.poll_timer = None
@cached
def getBoolean(self):
if self.function is not None:
return self.function()
else:
return self.fixed
def setBoolean(self, value):
assert self.function is None
self.fixed = value
self.poll()
boolean = property(getBoolean, setBoolean)
def poll(self):
self.changed((self.CHANGED_ALL,))
def destroy(self):
if self.poll_timer:
self.poll_timer.callback.remove(self.poll)
Source.destroy(self)
|