26 lines
638 B
Python
26 lines
638 B
Python
from ngSkinTools2.api.python_compatibility import Object
|
|
from ngSkinTools2.signal import Signal
|
|
|
|
|
|
class Undefined(Object):
|
|
pass
|
|
|
|
|
|
class ObservableValue(Object):
|
|
def __init__(self, default_value=Undefined):
|
|
self.value = default_value
|
|
self.changed = Signal("observable value")
|
|
|
|
def set(self, value):
|
|
self.value = value
|
|
self.changed.emit()
|
|
|
|
def __call__(self, default=Undefined, *args, **kwargs):
|
|
if self.value != Undefined:
|
|
return self.value
|
|
|
|
if default != Undefined:
|
|
return default
|
|
|
|
raise Exception("using observable value before setting it")
|