3030from .messages import UpdateMessage , LayoutMessage
3131from .message_pump import MessagePump
3232from .geometry import Point , Dimensions
33+ from .reactive import Reactive
3334
3435
3536if TYPE_CHECKING :
4243log = getLogger ("rich" )
4344
4445
45- ReactiveType = TypeVar ("ReactiveType" )
46-
47-
48- class Reactive (Generic [ReactiveType ]):
49- def __init__ (
50- self ,
51- default : ReactiveType ,
52- validator : Callable [[object , ReactiveType ], ReactiveType ] | None = None ,
53- layout : bool = False ,
54- ) -> None :
55- self ._default = default
56- self .validator = validator
57- self .layout = layout
58-
59- def __set_name__ (self , owner : "Widget" , name : str ) -> None :
60- self .name = name
61- self .internal_name = f"__{ name } "
62- setattr (owner , self .internal_name , self ._default )
63-
64- def __get__ (self , obj : "Widget" , obj_type : type [object ]) -> ReactiveType :
65- return getattr (obj , self .internal_name )
66-
67- def __set__ (self , obj : "Widget" , value : ReactiveType ) -> None :
68- if getattr (obj , self .internal_name ) != value :
69-
70- current_value = getattr (obj , self .internal_name , None )
71- validate_function = getattr (obj , f"validate_{ self .name } " , None )
72- if callable (validate_function ):
73- value = validate_function (value )
74-
75- if current_value != value :
76- setattr (obj , self .internal_name , value )
77-
78- update_function = getattr (obj , f"update_{ self .name } " , None )
79- if callable (update_function ):
80- update_function (current_value , value )
81-
82- if self .layout :
83- obj .require_layout ()
84- else :
85- obj .require_repaint ()
86-
87-
8846@rich .repr .auto
8947class Widget (MessagePump ):
9048 _id : ClassVar [int ] = 0
@@ -223,7 +181,7 @@ async def on_event(self, event: events.Event) -> None:
223181 await super ().on_event (event )
224182
225183 async def on_idle (self , event : events .Idle ) -> None :
226- if self .check_layout ():
184+ if self .check_layout ():
227185 self .reset_check_repaint ()
228186 self .reset_check_layout ()
229187 await self .update_layout ()
@@ -255,4 +213,4 @@ def __init__(self, renderable: RenderableType, name: str | None = None) -> None:
255213 self .renderable = renderable
256214
257215 def render (self ) -> RenderableType :
258- return self .renderable
216+ return self .renderable
0 commit comments