o
    Zhk4                     @  s   d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	 d dl
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mZmZ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$ ddl%m&Z& ddgZ'eZ(G dd dZ)G dd dZ*dS )    )annotations)CallableIterableSequence)get_app)	Condition)OneStyleAndTextTupleStyleAndTextTuples)KeyBindingsKeyBindingsBase)KeyPressEvent)Keys)AnyContainerConditionalContainer	ContainerFloatFloatContainerHSplitWindow)FormattedTextControl)
MouseEventMouseEventType)
get_cwidth)Shadow   )BorderMenuContainerMenuItemc                   @  sX   e Zd ZdZ		d d!ddZd"ddZd#ddZd$d%ddZed&ddZ	d'ddZ
dS )(r   zs
    :param floats: List of extra Float objects to display.
    :param menu_items: List of `MenuItem` objects.
    Nbodyr   
menu_itemslist[MenuItem]floatslist[Float] | Nonekey_bindingsKeyBindingsBase | NonereturnNonec                   sP  | _ | _dg _t }td6 fdd}td6 fdd}|jd|d	d7 fdd}|jd|d	d7 fdd}	|jd|d	d7 fdd}
|jd|d	|jd|d	d7dd}|jd|d	|jd|d	|jd|d	d7 fdd}|jd|d	d7 fdd}|jd|d	d7 fdd}|jd|d	d7 fd d!}|d"d7 fd#d$}t j|d%d&d' _t	d( jd)d* _
 d} d(} d+}td6 fd,d-}tt j
|gtd%d%tt|d.|d/d0t|d%d%d%tt|d.|t fd1d2@ d/d3t|d%d%d%tt|d.|t fd4d2@ d/d3g|p g  |d5 _d S )8Nr   r%   boolc                     s   t  jdkS Nr   lenselected_menu selfr,   S/var/www/html/lang_env/lib/python3.10/site-packages/prompt_toolkit/widgets/menus.pyin_main_menu7      z,MenuContainer.__init__.<locals>.in_main_menuc                     s   t  jdkS r(   r)   r,   r-   r,   r/   in_sub_menu;   r1   z+MenuContainer.__init__.<locals>.in_sub_menuleft)filtereventEr&   c                   s   t d jd d  jd< d S )Nr   r   )maxr+   r5   r-   r,   r/   _leftA   s   z%MenuContainer.__init__.<locals>._leftrightc                   s(   t t jd  jd d  jd< d S )Nr   r   )minr*   r   r+   r8   r-   r,   r/   _rightE   s   z&MenuContainer.__init__.<locals>._rightZdownc                   s    j d d S Nr   )r+   appendr8   r-   r,   r/   _downK      z%MenuContainer.__init__.<locals>._downzc-czc-gc                 S  s   | j j  dS )zLeave menu.N)applayout
focus_lastr8   r,   r,   r/   _cancelO   s   z'MenuContainer.__init__.<locals>._cancelc                   s    t  jdkr j  dS dS )zGo back to parent menu.r   N)r*   r+   popr8   r-   r,   r/   _backW   s   z%MenuContainer.__init__.<locals>._backc                   s     t jd jr jd dS t jdkrH jd t jd k rJtt jd  jd d g _ j jd  jrL jd dS dS dS dS )zgo into sub menu.r   r      N)	_get_menur*   r+   childrenr>   r   r;   r8   r-   r,   r/   _submenu_   s   z(MenuContainer.__init__.<locals>._submenuupc                   sl    tjd }jd   fddt|jD }|r&|d jd< dS tjdkr4j  dS dS )z;Select previous (enabled) menu item or return to main menu.rG   c                   s"   g | ]\}}| k r|j s|qS r,   disabled.0iitemindexr,   r/   
<listcomp>w   
    zBMenuContainer.__init__.<locals>._up_in_submenu.<locals>.<listcomp>N)rH   r*   r+   	enumeraterI   rE   )r5   menuZprevious_indexesr-   rS   r/   _up_in_submenup   s   

z.MenuContainer.__init__.<locals>._up_in_submenuc                   sP    tjd }jd   fddt|jD }|r&|d jd< dS dS )z Select next (enabled) menu item.rG   rL   c                   s"   g | ]\}}| kr|j s|qS r,   rM   rO   rS   r,   r/   rU      rV   zDMenuContainer.__init__.<locals>._down_in_submenu.<locals>.<listcomp>r   N)rH   r*   r+   rW   rI   )r5   rX   Znext_indexesr-   rS   r/   _down_in_submenu   s   

z0MenuContainer.__init__.<locals>._down_in_submenuZenterc                   s6     t jd }|jr| jj  |  dS dS )zClick the selected menu item.r   N)rH   r*   r+   handlerrA   rB   rC   )r5   rR   r-   r,   r/   _click   s
   z&MenuContainer.__init__.<locals>._clickTF)r#   Z	focusableshow_cursorr   class:menu-bar)heightcontentstylerG   c                     s   t  jj jkS N)r   rB   Zcurrent_windowwindowr,   r-   r,   r/   	has_focus   r@   z)MenuContainer.__init__.<locals>.has_focus)r   )r`   r4   )xcursorycursorr`   c                        t  jdkS r(   r)   r,   r-   r,   r/   <lambda>       z(MenuContainer.__init__.<locals>.<lambda>)Zattach_to_windowre   rf   Zallow_cover_cursorr`   c                     rg   )NrG   r)   r,   r-   r,   r/   rh      ri   )r`   r!   r#   )r%   r'   )r5   r6   r%   r&   )r   r   r+   r
   r   addr   _get_menu_fragmentscontrolr   rc   rJ   r   r   r   r   r   	container)r.   r   r   r!   r#   kbr0   r2   r9   r<   r?   rD   rF   rJ   rY   rZ   r\   ZsubmenuZsubmenu2Zsubmenu3rd   r,   r-   r/   __init__)   s   



	
 !zMenuContainer.__init__levelintr   c              	   C  sf   | j | jd  }t| jdd  D ]\}}||k r0z|j| }W q ty/   td Y   S w q|S )Nr   r   debug)r   r+   rW   rI   
IndexErrorr   )r.   rp   rX   rQ   rT   r,   r,   r/   rH      s   zMenuContainer._get_menur	   c                   sX   t  jj  sdg_d
 fdd	}g }tjD ]\}}|||| q|S )Nr   rQ   rq   rR   r   r%   Iterable[OneStyleAndTextTuple]c                 3  sZ    d fdd}dd|fV   j d	 kr"r"d
d|fV  d}nd}||j|fV  d S )Nmouse_eventr   r%   r&   c                   sr   | j tjk}| j tjks|r5 r7t }|s/|jjr(jgkr'|j	  n|j
j g_d S d S d S rb   )
event_typer   
MOUSE_MOVEZ
MOUSE_DOWNr   rB   rd   rc   r+   rC   Zfocusru   ZhoverrA   )focusedrQ   r.   r,   r/   mouse_handler   s   
zJMenuContainer._get_menu_fragments.<locals>.one_item.<locals>.mouse_handlerr^    r   [SetMenuPosition] class:menu-bar.selected-itemru   r   r%   r&   )r+   textrQ   rR   rz   ra   ry   r.   )rQ   r/   one_item   s   z3MenuContainer._get_menu_fragments.<locals>.one_itemrQ   rq   rR   r   r%   rt   )r   rB   rd   rc   r+   rW   r   extend)r.   r   resultrQ   rR   r,   r   r/   rk      s   z!MenuContainer._get_menu_fragmentsr   r   c                   s    d fdd}t t|ddS )Nr%   r	   c                    s  g } t jk r  jr| dtjf | dtj jd  f | dtj	f | d z	jd  W n t
yG   dY nw d fdd}t jD ]\}}| ||| qW| dtjf | dtj jd  f | dtjf | S )N
class:menu   r}   
r   rL   rQ   rq   rR   r   r%   rt   c                 3  s    d fdd} krdV  d}nd	}d
t jfV  jdkr2|d t jjd   |fV  n|dj jd |fV  jrL|d|fV  n|d|fV   krYdV  d
t jfV  dV  d S )Nru   r   r%   r&   c                   sn   j rd S | jtjk}| jtjks|r5t }|s&jr&|j    d S j	d d   g _	d S d S r(   )
rN   rv   r   rw   ZMOUSE_UPr   r[   rB   rC   r+   rx   )rQ   rR   rp   r.   r,   r/   rz     s    



z[MenuContainer._submenu.<locals>.get_text_fragments.<locals>.one_item.<locals>.mouse_handler)z[SetCursorPosition]r}   r~   r}   r   -zclass:menu-border   r{   >)r|   r}   r   r   )r   ZVERTICALr   
HORIZONTALwidthljustrI   r   )rp   rX   selected_itemr.   )rQ   rR   r/   r     s.   

zDMenuContainer._submenu.<locals>.get_text_fragments.<locals>.one_itemr   )r*   r+   rH   rI   r>   r   ZTOP_LEFTr   r   Z	TOP_RIGHTrs   rW   r   ZBOTTOM_LEFTZBOTTOM_RIGHT)r   r   rQ   rR   rp   r.   )rX   r   r/   get_text_fragments  s(   

5z2MenuContainer._submenu.<locals>.get_text_fragmentsr   )ra   r%   r	   )r   r   )r.   rp   r   r,   r   r/   rJ     s   KzMenuContainer._submenuc                 C  s   | j jS rb   )rm   r!   r-   r,   r,   r/   r!   Y  s   zMenuContainer.floatsr   c                 C  s   | j S rb   )rm   r-   r,   r,   r/   __pt_container__]  s   zMenuContainer.__pt_container__)NN)
r   r   r   r    r!   r"   r#   r$   r%   r&   )rp   rq   r%   r   r   )r   )rp   rq   r%   r   )r%   r"   )r%   r   )__name__
__module____qualname____doc__ro   rH   rk   rJ   propertyr!   r   r,   r,   r,   r/   r   #   s    	 
.
)Nc                   @  s0   e Zd Z					ddddZedddZdS )r   r}   NFr   strr[   Callable[[], None] | NonerI   list[MenuItem] | NoneshortcutSequence[Keys | str] | NonerN   r'   r%   r&   c                 C  s,   || _ || _|p	g | _|| _|| _d| _d S r=   )r   r[   rI   r   rN   r   )r.   r   r[   rI   r   rN   r,   r,   r/   ro   b  s   

zMenuItem.__init__rq   c                 C  s   | j rtdd | j D S dS )Nc                 s  s    | ]}t |jV  qd S rb   )r   r   )rP   cr,   r,   r/   	<genexpr>t  s    z!MenuItem.width.<locals>.<genexpr>r   )rI   r7   r-   r,   r,   r/   r   q  s   zMenuItem.width)r}   NNNF)r   r   r[   r   rI   r   r   r   rN   r'   r%   r&   )r%   rq   )r   r   r   ro   r   r   r,   r,   r,   r/   r   a  s    N)+
__future__r   typingr   r   r   Z"prompt_toolkit.application.currentr   Zprompt_toolkit.filtersr   Z"prompt_toolkit.formatted_text.baser   r	   Z'prompt_toolkit.key_binding.key_bindingsr
   r   Z(prompt_toolkit.key_binding.key_processorr   Zprompt_toolkit.keysr   Z prompt_toolkit.layout.containersr   r   r   r   r   r   r   Zprompt_toolkit.layout.controlsr   Zprompt_toolkit.mouse_eventsr   r   Zprompt_toolkit.utilsr   Zprompt_toolkit.widgetsr   baser   __all__r6   r   r   r,   r,   r,   r/   <module>   s,    $	  @