o
    1 i_                     @  s   d dl mZ d dlmZmZmZmZmZ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 dd	lmZ erDdd
lmZ G dd deZdS )    )annotations)TYPE_CHECKINGAnyDictListOptionalTuple)ControlControlType)
LiveRender)Segment   )getchar)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__ b/home/app/PaddleOCR-VL-test/.venv_paddleocr/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}|r"d}| jj	t
|g|  | jR   |s@| jj	|    d S d S )Nr$   should_show_cursorFT)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_element<      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iZcurrent_elementsizer"   r"   r#   _get_element_positionG   s   

zContainer._get_element_positionc                 C     |  | jS r3   )rJ   r   r4   r"   r"   r#   _active_element_positionW   r6   z"Container._active_element_positionc                 C  s.   | j jd u rdS | |}| j j\}}|| S Nr   )r   _shaperJ   )r   rA   rG   _heightr"   r"   r#   get_offset_for_element[   s
   
z Container.get_offset_for_elementc                 C  rK   r3   )rQ   r   r4   r"   r"   r#   get_offset_for_active_elemente   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   )	rR   r	   r
   	CURSOR_UPr   rE   r5   leftmove_to_column)r   Zmove_upZmove_cursorZcursor_leftr"   r"   r#   r.   h   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 rM   )r   rN   r	   position_cursorrQ   r   r
   CURSOR_DOWN)r   originalZ	move_downr"   r"   r#   r-   u   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)	inputrZ   Zmenur[   r   r   
isinstanceZon_validateZvalid)r   rZ   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#   rc      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 r`   )r   ra   r   r5   rb   _focus_previousr4   r"   r"   r#   rd      s   
zContainer._focus_previousc                 C  s   |    	 zDt }| j| _|tjtjfv r.t| jdr | j	  |tjkr*| 
  n|   | j| j }|| |tjkrD|  rDW n#|    W n tye   | jD ]}|  qS| j dd t  Y nw q| j dd d S )NTon_blurr&   )r1   r   r   r   r   ZSHIFT_TAB_KEYZTAB_KEYr*   r5   re   rd   rc   r   Z
handle_keyZ	ENTER_KEYr^   KeyboardInterruptZ	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   rS   )r2   r%   )r2   r_   )__name__
__module____qualname__r   r1   propertyr5   r@   rJ   rL   rQ   rR   r.   r-   r^   rc   rd   ri   __classcell__r"   r"   r    r#   r      s&    









		r   N)
__future__r   typingr   r   r   r   r   r   Zrich.controlr	   r
   Zrich.live_renderr   Zrich.segmentr   Z_getcharr   Z_input_handlerr   r7   r   stylesr   r   r"   r"   r"   r#   <module>   s     