o
    PDi                     @  s   d dl mZ d dlmZmZmZmZmZmZ d dl	Z	d dl
mZ d dlmZmZ d dlmZ d dlmZ dd	lmZ dd
lmZ erHddlmZ G dd deZdS )    )annotations)TYPE_CHECKINGAnyDictListOptionalTupleN)RenderableType)ControlControlType)
LiveRender)Segment   )TextInputHandler)Element)	BaseStylec                      s   e Zd Z		d-d. fddZd/d0ddZed1ddZd2ddZd3ddZed4ddZ	d3ddZ
d4ddZd5d d!Zd5d"d#Zd6d$d%Zd7d'd(Zd7d)d*Zd+d, Z  ZS )8	ContainerNstyleOptional[BaseStyle]metadataOptional[Dict[Any, Any]]c                   s:   g | _ d| _d| _td| _t j||d | jj| _d S )Nr    )r   r   )	elementsactive_element_indexprevious_element_indexr   _live_rendersuper__init__r   console)selfr   r   	__class__ O/var/www/Datamplify/venv/lib/python3.10/site-packages/rich_toolkit/container.pyr      s   
zContainer.__init__Fdoneboolc                 C  s|   | j j| |d}| j| | j| j }t|dr|jnd}| jj	t
|g|  | jR   |s<| jj	|    d S d S )Nr$   should_show_cursorF)r   render_elementr   set_renderabler   r   hasattrr'   r   printr
   show_cursormove_cursor_at_beginningmove_cursor_to_active_element)r   r$   contentactive_elementr'   r"   r"   r#   _refresh!   s&   zContainer._refreshreturnr   c                 C  s   | j | j S N)r   r   r   r"   r"   r#   _active_element8      zContainer._active_elementelementTuple[int, int]c                 C  s2   | j j|d| d}| jj|| jjdd}t|S )NF)r$   parent)pad)r   r(   r   render_linesoptionsr   	get_shape)r   r7   
renderablelinesr"   r"   r#   	_get_size<   s   
zContainer._get_sizeelement_indexintc                 C  sZ   d}t |d D ]"}| j| }||kr|| jj|| dj7 }q| |}||d 7 }q|S )Nr   r   r9   )ranger   r   get_cursor_offset_for_elementtopr@   )r   rA   positionicurrent_elementsizer"   r"   r#   _get_element_positionC   s   

zContainer._get_element_positionc                 C     |  | jS r3   )rK   r   r4   r"   r"   r#   _active_element_positionS   r6   z"Container._active_element_positionc                 C  s.   | j jd u rdS | |}| j j\}}|| S Nr   )r   _shaperK   )r   rA   rG   _heightr"   r"   r#   get_offset_for_elementW   s
   
z Container.get_offset_for_elementc                 C  rL   r3   )rR   r   r4   r"   r"   r#   get_offset_for_active_elementa   s   z'Container.get_offset_for_active_elementTuple[Control, ...]c                 C  sJ   |   }|dkrttj|ffnd}| jj| j| dj}t|g|R S )Nr   r"   rC   )	rS   r
   r   	CURSOR_UPr   rE   r5   leftmove_to_column)r   move_upmove_cursorcursor_leftr"   r"   r#   r.   d   s   z'Container.move_cursor_to_active_elementc                 C  sN   | j jd u r
t fS | j  f}| | j}|dkr|S ttj|fg|R S rN   )r   rO   r
   position_cursorrR   r   r   CURSOR_DOWN)r   original	move_downr"   r"   r#   r-   q   s   z"Container.move_cursor_at_beginningc                 C  sL   ddl m} ddlm} | j| j }t|||fr$|  |jdu r$dS dS )Nr   )Input)MenuFT)	inputr_   menur`   r   r   
isinstanceon_validatevalid)r   r_   r`   r0   r"   r"   r#   handle_enter_key   s   
zContainer.handle_enter_keyNonec                 C  s@   |  j d7  _ | j t| jkrd| _ | jjdu r|   d S d S Nr   r   F)r   lenr   r5   	focusable_focus_nextr4   r"   r"   r#   rk      s   zContainer._focus_nextc                 C  sD   |  j d8  _ | j dk rt| jd | _ | jjdu r |   d S d S rh   )r   ri   r   r5   rj   _focus_previousr4   r"   r"   r#   rl      s   
zContainer._focus_previousc                 C  s   |    	 zEt }| j| _|tjtjfv r/t| j	dr!| j	
  |tjkr+|   n|   | j| j }|| |tjkrE|  rEW n#|    W n tyf   | jD ]}|  qT| j dd t  Y nw q| j dd d S )NTon_blurr&   )r1   clickgetcharr   r   r   SHIFT_TAB_KEYTAB_KEYr*   r5   rm   rl   rk   r   
handle_key	ENTER_KEYrf   KeyboardInterrupt	on_cancelexit)r   keyr0   r7   r"   r"   r#   run   s2   







zContainer.run)NN)r   r   r   r   )F)r$   r%   )r2   r   )r7   r   r2   r8   )rA   rB   r2   rB   )r2   rB   )r2   rT   )r2   r%   )r2   rg   )__name__
__module____qualname__r   r1   propertyr5   r@   rK   rM   rR   rS   r.   r-   rf   rk   rl   rx   __classcell__r"   r"   r    r#   r      s&    









		r   )
__future__r   typingr   r   r   r   r   r   rn   rich.consoler	   rich.controlr
   r   rich.live_renderr   rich.segmentr   _input_handlerr   r7   r   stylesr   r   r"   r"   r"   r#   <module>   s     