U
    oufk4                     @  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dddd	d
ZdddddZddddZddddddZeddddZ	ddddZ
dS )r   zs
    :param floats: List of extra Float objects to display.
    :param menu_items: List of `MenuItem` objects.
    Nr   zlist[MenuItem]zlist[Float] | NonezKeyBindingsBase | NoneNone)body
menu_itemsfloatskey_bindingsreturnc                   s  | _ | _dg _t }tdd fdd}tdd fdd}|jd|d	d
dd fdd}|jd|d	d
dd fdd}	|jd|d	d
dd fdd}
|jd|d	|jd|d	d
dddd}|jd|d	|jd|d	|jd|d	d
dd fdd}|jd|d	d
dd fdd}|jd|d	d
dd fdd}|jd|d	d
dd fd d!}|d"d
dd fd#d$}t j|d%d&d' _t	d( jd)d* _
 d} d(} d+}tdd 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|pg  |d5 _d S )6Nr   boolr#   c                     s   t  jdkS Nr   lenselected_menu selfr*   @/tmp/pip-unpacked-wheel-8milen2s/prompt_toolkit/widgets/menus.pyin_main_menu7   s    z,MenuContainer.__init__.<locals>.in_main_menuc                     s   t  jdkS r&   r'   r*   r+   r*   r-   in_sub_menu;   s    z+MenuContainer.__init__.<locals>.in_sub_menuleft)filterEr   )eventr#   c                   s   t d jd d  jd< d S )Nr   r   )maxr)   r3   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)   r5   r+   r*   r-   _rightE   s     z&MenuContainer.__init__.<locals>._rightZdownc                   s    j d d S Nr   )r)   appendr5   r+   r*   r-   _downK   s    z%MenuContainer.__init__.<locals>._downzc-czc-gc                 S  s   | j j  dS )zLeave menu.N)applayout
focus_lastr5   r*   r*   r-   _cancelO   s    z'MenuContainer.__init__.<locals>._cancelc                   s   t  jdkr j  dS )zGo back to parent menu.r   N)r(   r)   popr5   r+   r*   r-   _backW   s    z%MenuContainer.__init__.<locals>._backc                   s     t jd jr$ jd nft jdkr jd t jd k rtt jd  jd d g _ j jd  jr jd dS )zgo into sub menu.r   r      N)	_get_menur(   r)   childrenr;   r    r8   r5   r+   r*   r-   _submenu_   s    z(MenuContainer.__init__.<locals>._submenuZupc                   sf    tjd }jd   fddt|jD }|rJ|d jd< ntjdkrbj  dS )z;Select previous (enabled) menu item or return to main menu.rC   c                   s"   g | ]\}}| k r|j s|qS r*   disabled.0iitemindexr*   r-   
<listcomp>w   s    zBMenuContainer.__init__.<locals>._up_in_submenu.<locals>.<listcomp>N)rD   r(   r)   	enumeraterE   rA   )r3   menuZprevious_indexesr+   rN   r-   _up_in_submenup   s    

z.MenuContainer.__init__.<locals>._up_in_submenuc                   sL    tjd }jd   fddt|jD }|rH|d jd< dS )z Select next (enabled) menu item.rC   rG   c                   s"   g | ]\}}| kr|j s|qS r*   rH   rJ   rN   r*   r-   rP      s    zDMenuContainer.__init__.<locals>._down_in_submenu.<locals>.<listcomp>r   N)rD   r(   r)   rQ   rE   )r3   rR   Znext_indexesr+   rN   r-   _down_in_submenu   s    

z0MenuContainer.__init__.<locals>._down_in_submenuZenterc                   s2     t jd }|jr.| jj  |  dS )zClick the selected menu item.r   N)rD   r(   r)   handlerr=   r>   r?   )r3   rM   r+   r*   r-   _click   s    z&MenuContainer.__init__.<locals>._clickTF)r"   Z	focusableZshow_cursorr   class:menu-bar)heightcontentstylerC   c                     s   t  jj jkS N)r   r>   Zcurrent_windowwindowr*   r+   r*   r-   	has_focus   s    z)MenuContainer.__init__.<locals>.has_focus)r   )rY   r1   )xcursorycursorrY   c                     s   t  jdkS r&   r'   r*   r+   r*   r-   <lambda>       z(MenuContainer.__init__.<locals>.<lambda>)Zattach_to_windowr^   r_   Zallow_cover_cursorrY   c                     s   t  jdkS )NrC   r'   r*   r+   r*   r-   r`      ra   )rY   r!   r"   )r   r    r)   r
   r   addr   _get_menu_fragmentscontrolr   r\   rF   r   r   r   r   r   	container)r,   r   r    r!   r"   kbr.   r/   r6   r9   r<   r@   rB   rF   rS   rT   rV   ZsubmenuZsubmenu2Zsubmenu3r]   r*   r+   r-   __init__)   s       


	  !zMenuContainer.__init__intr   )levelr#   c              	   C  sh   | j | jd  }t| jdd  D ]@\}}||k r"z|j| }W q" tk
r`   td Y   S X q"|S )Nr   r   debug)r    r)   rQ   rE   
IndexErrorr   )r,   ri   rR   rL   rO   r*   r*   r-   rD      s    zMenuContainer._get_menur	   r%   c                   s`   t  jj  sdg_dddd fdd}g }tjD ]\}}|||| qB|S )Nr   rh   r   Iterable[OneStyleAndTextTuple]rL   rM   r#   c                 3  s^   ddd fdd}dd|fV   j d krHrHd	d
|fV  d}nd}||j|fV  d S )Nr   r   mouse_eventr#   c                   sj   | j tjk}| j tjks |rf rft }|s^|jjrPjgkr^|j	  n|j
j g_d S r[   )
event_typer   
MOUSE_MOVEZ
MOUSE_DOWNr   r>   r]   r\   r)   r?   Zfocusro   Zhoverr=   )focusedrL   r,   r*   r-   mouse_handler   s    
zJMenuContainer._get_menu_fragments.<locals>.one_item.<locals>.mouse_handlerrW    r   [SetMenuPosition] class:menu-bar.selected-item)r)   textrL   rM   rt   rZ   rs   r,   )rL   r-   one_item   s    z3MenuContainer._get_menu_fragments.<locals>.one_item)r   r>   r]   r\   r)   rQ   r    extend)r,   r|   resultrL   rM   r*   r{   r-   rc      s    z!MenuContainer._get_menu_fragmentsr   r   c                   s$   d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
k
r   dY nX dddd	 fd
d}t jD ]\}}| ||| q| dtjf | dtj jd  f | dtjf | S )N
class:menu   rw   
r   rG   rh   r   rl   rm   c                 3  s   ddd fdd} kr.dV  d}nd}d	t jfV  jd
krh|d t jjd   |fV  n |dj jd |fV  jr|d|fV  n|d|fV   krdV  d	t jfV  dV  d S )Nr   r   rn   c                   sh   j r
d S | jtjk}| jtjks&|rdt }|sJjrJ|j    nj	d d   g _	d S r&   )
rI   rp   r   rq   ZMOUSE_UPr   rU   r>   r?   r)   rr   )rL   rM   ri   r,   r*   r-   rt     s     



z[MenuContainer._submenu.<locals>.get_text_fragments.<locals>.one_item.<locals>.mouse_handler)z[SetCursorPosition]rw   rx   rw   r   -zclass:menu-border   ru   >)rv   rw   r   )r   ZVERTICALry   
HORIZONTALwidthljustrE   rz   )ri   rR   selected_itemr,   )rL   rM   r-   r|     s,    
zDMenuContainer._submenu.<locals>.get_text_fragments.<locals>.one_item)r(   r)   rD   rE   r;   r   ZTOP_LEFTr   r   Z	TOP_RIGHTrk   rQ   r}   ZBOTTOM_LEFTZBOTTOM_RIGHT)r~   r|   rL   rM   ri   r,   )rR   r   r-   get_text_fragments  s&    


5z2MenuContainer._submenu.<locals>.get_text_fragmentsr   )rZ   )r   r   )r,   ri   r   r*   r   r-   rF     s    KzMenuContainer._submenuc                 C  s   | j jS r[   )re   r!   r+   r*   r*   r-   r!   Y  s    zMenuContainer.floatsr   c                 C  s   | j S r[   )re   r+   r*   r*   r-   __pt_container__]  s    zMenuContainer.__pt_container__)NN)r   )__name__
__module____qualname____doc__rg   rD   rc   rF   propertyr!   r   r*   r*   r*   r-   r   #   s   	   .)Nc                   @  s8   e Zd Zddddddd	d
ddZeddddZdS )r   rw   NFstrzCallable[[], None] | Nonezlist[MenuItem] | NonezSequence[Keys | str] | Noner$   r   )ry   rU   rE   shortcutrI   r#   c                 C  s,   || _ || _|pg | _|| _|| _d| _d S r:   )ry   rU   rE   r   rI   r   )r,   ry   rU   rE   r   rI   r*   r*   r-   rg   b  s    
zMenuItem.__init__rh   r%   c                 C  s"   | j rtdd | j D S dS d S )Nc                 s  s   | ]}t |jV  qd S r[   )r   ry   )rK   cr*   r*   r-   	<genexpr>t  s     z!MenuItem.width.<locals>.<genexpr>r   )rE   r4   r+   r*   r*   r-   r   q  s    zMenuItem.width)rw   NNNF)r   r   r   rg   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__r2   r   r   r*   r*   r*   r-   <module>   s*   $	  @