U
    祡cG                     @   s   d dl Z d dlmZmZ e jdkr0d dlmZ nd dlmZ ddlmZ ddl	m
Z
mZmZmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ed ZG dd dZdS )    N)OptionalTuple)      )Literal   )	loop_last)ConsoleConsoleOptionsRenderableTypeRenderResult)Control)ControlTypeSegment)	StyleType)Text)cropellipsisZvisiblec                   @   sd   e Zd ZdZdeeeddddZeddd	d
Ze	dddZ
e	dddZeeedddZdS )
LiveRenderzCreates a renderable that may be updated.

    Args:
        renderable (RenderableType): Any renderable object.
        style (StyleType, optional): An optional style to apply to the renderable. Defaults to "".
     r   N)
renderablestylevertical_overflowreturnc                 C   s   || _ || _|| _d | _d S )N)r   r   r   _shape)selfr   r   r    r   4/tmp/pip-unpacked-wheel-qkhzhrww/rich/live_render.py__init__   s    zLiveRender.__init__)r   r   c                 C   s
   || _ dS )z|Set a new renderable.

        Args:
            renderable (RenderableType): Any renderable object, including str.
        N)r   )r   r   r   r   r   set_renderable'   s    zLiveRender.set_renderable)r   c                 C   sJ   | j dk	rD| j \}}ttjtjdfftjdftjdff|d   S t S )zGet control codes to move cursor to beginning of live render.

        Returns:
            Control: A control instance that may be printed.
        N   r   )r   r   r   CARRIAGE_RETURNERASE_IN_LINE	CURSOR_UPr   _heightr   r   r   position_cursor/   s    

zLiveRender.position_cursorc                 C   s>   | j dk	r8| j \}}ttjftjdftjdff|  S t S )zGet control codes to clear the render and restore the cursor to its previous position.

        Returns:
            Control: A Control instance that may be printed.
        Nr   r    )r   r   r   r!   r#   r"   r$   r   r   r   restore_cursorD   s    

zLiveRender.restore_cursor)consoleoptionsr   c                 c   s   | j }|| j}|j|||dd}t|}|\}}||jjkr| jdkrh|d |jj }t|}nN| jdkr|d |jjd  }t	ddddd	d
}	|
t||	 t|}|| _t }
t|D ]\}}|E d H  |s|
V  qd S )NF)r   padr   r   r   z...centerr   zlive.ellipsis)ZoverflowZjustifyendr   )r   Z	get_styler   Zrender_linesr   Z	get_shapesizer&   r   r   appendlistrenderr   liner   )r   r)   r*   r   r   linesshaper%   r&   Zoverflow_textnew_linelastr2   r   r   r   __rich_console__R   s4    




zLiveRender.__rich_console__)r   r   )__name__
__module____qualname____doc__r   r   VerticalOverflowMethodr   r   r   r'   r(   r	   r
   r   r7   r   r   r   r   r      s    
   r   )systypingr   r   version_infor   Ztyping_extensionsZ_loopr   r)   r	   r
   r   r   controlr   segmentr   r   r   r   textr   r<   r   r   r   r   r   <module>   s   
