U
    -ek4                     @  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*   ]/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/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>._submenu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+   rO   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   rH   c                   s"   g | ]\}}| kr|j s|qS r*   rI   rK   rO   r*   r-   rQ      s    zDMenuContainer.__init__.<locals>._down_in_submenu.<locals>.<listcomp>r   N)rD   r(   r)   rR   rE   )r3   rS   Znext_indexesr+   rO   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   rN   r+   r*   r-   _click   s    z&MenuContainer.__init__.<locals>._clickTF)r"   Z	focusable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   )r[   r1   )xcursorycursorr[   c                     s   t  jdkS r&   r'   r*   r+   r*   r-   <lambda>       z(MenuContainer.__init__.<locals>.<lambda>)Zattach_to_windowr`   ra   Zallow_cover_cursorr[   c                     s   t  jdkS )NrC   r'   r*   r+   r*   r-   rb      rc   )r[   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   rT   rU   rW   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)   rR   rE   
IndexErrorr   )r,   rk   rS   rM   rP   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   rj   r   Iterable[OneStyleAndTextTuple]rM   rN   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rq   Zhoverr=   )focusedrM   r,   r*   r-   mouse_handler   s    
zJMenuContainer._get_menu_fragments.<locals>.one_item.<locals>.mouse_handlerrY    r   [SetMenuPosition] class:menu-bar.selected-item)r)   textrM   rN   rv   r\   ru   r,   )rM   r-   one_item   s    z3MenuContainer._get_menu_fragments.<locals>.one_item)r   r>   r_   r^   r)   rR   r    extend)r,   r~   resultrM   rN   r*   r}   r-   re      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   ry   
r   rH   rj   r   rn   ro   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   rp   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&   )
rJ   rr   r   rs   ZMOUSE_UPr   rV   r>   r?   r)   rt   )rM   rN   rk   r,   r*   r-   rv     s     



z[MenuContainer._submenu.<locals>.get_text_fragments.<locals>.one_item.<locals>.mouse_handler)z[SetCursorPosition]ry   rz   ry   r   -zclass:menu-border   rw   >)rx   ry   r   )r   ZVERTICALr{   
HORIZONTALwidthljustrE   r|   )rk   rS   selected_itemr,   )rM   rN   r-   r~     s,    
zDMenuContainer._submenu.<locals>.get_text_fragments.<locals>.one_item)r(   r)   rD   rE   r;   r   ZTOP_LEFTr   r   Z	TOP_RIGHTrm   rR   r   ZBOTTOM_LEFTZBOTTOM_RIGHT)r   r~   rM   rN   rk   r,   )rS   r   r-   get_text_fragments  s&    


5z2MenuContainer._submenu.<locals>.get_text_fragmentsr   )r\   )r   r   )r,   rk   r   r*   r   r-   rF     s    KzMenuContainer._submenuc                 C  s   | j jS r]   )rg   r!   r+   r*   r*   r-   r!   Y  s    zMenuContainer.floatsr   c                 C  s   | j S r]   )rg   r+   r*   r*   r-   __pt_container__]  s    zMenuContainer.__pt_container__)NN)r   )__name__
__module____qualname____doc__ri   rD   re   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   ry   NFstrzCallable[[], None] | Nonezlist[MenuItem] | NonezSequence[Keys | str] | Noner$   r   )r{   rV   rE   shortcutrJ   r#   c                 C  s,   || _ || _|pg | _|| _|| _d| _d S r:   )r{   rV   rE   r   rJ   r   )r,   r{   rV   rE   r   rJ   r*   r*   r-   ri   b  s    
zMenuItem.__init__rj   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{   )rL   cr*   r*   r-   	<genexpr>t  s     z!MenuItem.width.<locals>.<genexpr>r   )rE   r4   r+   r*   r*   r-   r   q  s    zMenuItem.width)ry   NNNF)r   r   r   ri   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*   $	  @