U
    Z+d4                     @  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
 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ListOptionalSequenceUnion)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-blk8czbf/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-   r0   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,   r6   r.   r-   r0   _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-   r0   _rightE   s     z&MenuContainer.__init__.<locals>._rightZdownc                   s    j d d S Nr   )r,   appendr8   r.   r-   r0   _downK   s    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-   r0   _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,   popr8   r.   r-   r0   _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#   r;   r8   r.   r-   r0   _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.rF   c                   s"   g | ]\}}| k r|j s|qS r-   disabled.0iitemindexr-   r0   
<listcomp>w   s    zBMenuContainer.__init__.<locals>._up_in_submenu.<locals>.<listcomp>N)rG   r+   r,   	enumeraterH   rD   )r6   menuZprevious_indexesr.   rQ   r0   _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.rF   rJ   c                   s"   g | ]\}}| kr|j s|qS r-   rK   rM   rQ   r-   r0   rS      s    zDMenuContainer.__init__.<locals>._down_in_submenu.<locals>.<listcomp>r   N)rG   r+   r,   rT   rH   )r6   rU   Znext_indexesr.   rQ   r0   _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)rG   r+   r,   handlerr@   rA   rB   )r6   rP   r.   r-   r0   _click   s    z&MenuContainer.__init__.<locals>._clickTF)r%   Z	focusableZshow_cursorr   class:menu-bar)heightcontentstylerF   c                     s   t  jj jkS N)r	   rA   Zcurrent_windowwindowr-   r.   r-   r0   	has_focus   s    z)MenuContainer.__init__.<locals>.has_focus)r"   )r\   r4   )xcursorycursorr\   c                     s   t  jdkS r)   r*   r-   r.   r-   r0   <lambda>       z(MenuContainer.__init__.<locals>.<lambda>)Zattach_to_windowra   rb   Zallow_cover_cursorr\   c                     s   t  jdkS )NrF   r*   r-   r.   r-   r0   rc      rd   )r\   r$   r%   )r"   r#   r,   r   r
   addr   _get_menu_fragmentscontrolr   r_   rI   r   r   r   r   r   	container)r/   r"   r#   r$   r%   kbr1   r2   r9   r<   r?   rC   rE   rI   rV   rW   rY   ZsubmenuZsubmenu2Zsubmenu3r`   r-   r.   r0   __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,   rT   rH   
IndexErrorr    )r/   rl   rU   rO   rR   r-   r-   r0   rG      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   rk   r    Iterable[OneStyleAndTextTuple]rO   rP   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	   rA   r`   r_   r,   rB   Zfocusrr   Zhoverr@   )focusedrO   r/   r-   r0   mouse_handler   s    
zJMenuContainer._get_menu_fragments.<locals>.one_item.<locals>.mouse_handlerrZ    r   [SetMenuPosition] class:menu-bar.selected-item)r,   textrO   rP   rw   r]   rv   r/   )rO   r0   one_item   s    z3MenuContainer._get_menu_fragments.<locals>.one_item)r	   rA   r`   r_   r,   rT   r#   extend)r/   r   resultrO   rP   r-   r~   r0   rf      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   rz   
r   rJ   rk   r    ro   rp   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!   rq   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)   )
rL   rs   r   rt   ZMOUSE_UPr	   rX   rA   rB   r,   ru   )rO   rP   rl   r/   r-   r0   rw     s     



z[MenuContainer._submenu.<locals>.get_text_fragments.<locals>.one_item.<locals>.mouse_handler)z[SetCursorPosition]rz   r{   rz   r   -zclass:menu-border   rx   >)ry   rz   r   )r   ZVERTICALr|   
HORIZONTALwidthljustrH   r}   )rl   rU   selected_itemr/   )rO   rP   r0   r     s,    
zDMenuContainer._submenu.<locals>.get_text_fragments.<locals>.one_item)r+   r,   rG   rH   r>   r   ZTOP_LEFTr   r   Z	TOP_RIGHTrn   rT   r   ZBOTTOM_LEFTZBOTTOM_RIGHT)r   r   rO   rP   rl   r/   )rU   r   r0   get_text_fragments  s&    


5z2MenuContainer._submenu.<locals>.get_text_fragmentsr   )r]   )r   r   )r/   rl   r   r-   r   r0   rI     s    KzMenuContainer._submenuc                 C  s   | j jS r^   )rh   r$   r.   r-   r-   r0   r$   Y  s    zMenuContainer.floatsr   c                 C  s   | j S r^   )rh   r.   r-   r-   r0   __pt_container__]  s    zMenuContainer.__pt_container__)NN)r   )__name__
__module____qualname____doc__rj   rG   rf   rI   propertyr$   r   r-   r-   r-   r0   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    rz   NFstrzCallable[[], None] | Nonezlist[MenuItem] | NonezSequence[Keys | str] | Noner'   r!   )r|   rX   rH   shortcutrL   r&   c                 C  s,   || _ || _|pg | _|| _|| _d| _d S r=   )r|   rX   rH   r   rL   r   )r/   r|   rX   rH   r   rL   r-   r-   r0   rj   b  s    
zMenuItem.__init__rk   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   r|   )rN   cr-   r-   r0   	<genexpr>t  s     z!MenuItem.width.<locals>.<genexpr>r   )rH   r7   r.   r-   r-   r0   r   q  s    zMenuItem.width)rz   NNNF)r   r   r   rj   r   r   r-   r-   r-   r0   r    a  s        N).
__future__r   typingr   r   r   r   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__r5   r   r    r-   r-   r-   r0   <module>   s*    $	  @