
    Mhk4                       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          Z) G 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                  Z    e Zd ZdZ	 	 dddZddZddZdddZed d            Z	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                    | _         | _        dg _        t                      }t          d) fd            }t          d) fd            }|                    d|          d* fd            }|                    d|          d* fd            }	|                    d|          d* fd            }
|                    d|          |                    d|          d*d                        }|                    d|          |                    d|          |                    d|          d* fd                                    }|                    d|          d* fd            }|                    d|          d* fd            }|                    d|          d* fd            }|                    d          d* fd            }t           j        |dd           _        t          d j        d           _
                             d          }                     d          }                     d           }t          d) fd!            }t          t           j
        |g          t          ddt          t!          |"          |#          $          t          |dddt          t!          |"          |t	           fd%          z  #          &          t          |dddt          t!          |"          |t	           fd'          z  #          &          g|pg z   |(           _        d S )+Nr   r'   boolc                 4    t           j                  dk    S Nr   lenselected_menuselfs   \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/prompt_toolkit/widgets/menus.pyin_main_menuz,MenuContainer.__init__.<locals>.in_main_menu7   s    t)**a//    c                 4    t           j                  dk    S r,   r-   r0   s   r2   in_sub_menuz+MenuContainer.__init__.<locals>.in_sub_menu;   s    t)**Q..r4   left)filtereventEr(   c                T    t          dj        d         dz
            j        d<   d S )Nr   r   )maxr/   r9   r1   s    r2   _leftz%MenuContainer.__init__.<locals>._leftA   s-    $'4+=a+@1+D$E$EDq!!!r4   rightc                ~    t          t          j                  dz
  j        d         dz             j        d<   d S )Nr   r   )minr.   r!   r/   r=   s    r2   _rightz&MenuContainer.__init__.<locals>._rightE   sA    $'DO$$q($*<Q*?!*C% %Dq!!!r4   downc                <    j                             d           d S Nr   )r/   appendr=   s    r2   _downz%MenuContainer.__init__.<locals>._downK   s     %%a(((((r4   zc-czc-gc                B    | j         j                                         dS )zLeave menu.N)applayout
focus_last)r9   s    r2   _cancelz'MenuContainer.__init__.<locals>._cancelO   s!     I'')))))r4   c                n    t          j                  dk    rj                                         dS dS )zGo back to parent menu.r   N)r.   r/   popr=   s    r2   _backz%MenuContainer.__init__.<locals>._backW   s>    
 4%&&**"&&((((( +*r4   c                                        t          j                  dz
            j        rj                            d           dS t          j                  dk    rj        d         t          j                  dz
  k     rtt          t          j                  dz
  j        d         dz             g_        j        j        d                  j        r j                            d           dS dS dS dS )zgo into sub menu.r   r      N)	_get_menur.   r/   childrenrF   r!   rA   r=   s    r2   _submenuz(MenuContainer.__init__.<locals>._submenu_   s	    ~~c$"4559::C 1"))!,,,,, D&''1,,&q)C,@,@1,DDD DO,,q0$2DQ2G!2KLL&" ?4#5a#89B 1&--a00000 -,DD
1 1r4   upc                F                        t          j                  dz
            }j        d         fdt          |j                  D             }|r|d         j        d<   dS t          j                  dk    rj                                         dS dS )z;Select previous (enabled) menu item or return to main menu.rQ   c                4    g | ]\  }}|k     |j         |S  disabled.0iitemindexs      r2   
<listcomp>zBMenuContainer.__init__.<locals>._up_in_submenu.<locals>.<listcomp>w   s4          Atu99T]9 99r4   N)rR   r.   r/   	enumeraterS   rN   )r9   menuprevious_indexesr`   r1   s      @r2   _up_in_submenuz.MenuContainer.__init__.<locals>._up_in_submenup   s     >>#d&8"9"9A"=>>D&r*E       (77        ))9")="2&&&T'((A--"&&((((( .-r4   c                                         t          j                  dz
            }j        d         fdt          |j                  D             }|r|d         j        d<   dS dS )z Select next (enabled) menu item.rQ   rW   c                4    g | ]\  }}|k    |j         |S rY   rZ   r\   s      r2   ra   zDMenuContainer.__init__.<locals>._down_in_submenu.<locals>.<listcomp>   s4       Atu99T]9 99r4   r   N)rR   r.   r/   rb   rS   )r9   rc   next_indexesr`   r1   s      @r2   _down_in_submenuz0MenuContainer.__init__.<locals>._down_in_submenu   s     >>#d&8"9"9A"=>>D&r*E   (77  L  9)5a"2&&&9 9r4   enterc                                         t          j                  dz
            }|j        r4| j        j                                         |                                 dS dS )zClick the selected menu item.r   N)rR   r.   r/   handlerrI   rJ   rK   )r9   r_   r1   s     r2   _clickz&MenuContainer.__init__.<locals>._click   sb     >>#d&8"9"9A"=>>D| 	 ++--- r4   TF)r%   	focusableshow_cursorr   class:menu-bar)heightcontentstylerQ   c                 F    t                      j        j         j        k    S N)r   rJ   current_windowwindowr0   s   r2   	has_focusz)MenuContainer.__init__.<locals>.has_focus   s    99#2dkAAr4   )r    )rr   r8   )xcursorycursorrr   c                 4    t           j                  dk    S r,   r-   r0   s   r2   <lambda>z(MenuContainer.__init__.<locals>.<lambda>       C0B,C,Cq,H r4   )attach_to_windowry   rz   allow_cover_cursorrr   c                 4    t           j                  dk    S )NrQ   r-   r0   s   r2   r|   z(MenuContainer.__init__.<locals>.<lambda>   r}   r4   )rr   r#   r%   )r'   r*   )r9   r:   r'   r(   )r    r!   r/   r   r   addr   _get_menu_fragmentscontrolr   rw   rT   r   r   r   r   r   	container)r1   r    r!   r#   r%   kbr3   r6   r>   rB   rG   rL   rO   rT   re   ri   rm   submenusubmenu2submenu3rx   s   `                    r2   __init__zMenuContainer.__init__)   s    	$S ]]		0 	0 	0 	0 	0 
	0 
	/ 	/ 	/ 	/ 	/ 
	/
 
|	,	,	F 	F 	F 	F 	F 
-	,	F 
	-	-	 	 	 	 	 
.	-	
 
|	,	,	) 	) 	) 	) 	) 
-	,	) 
l	+	+	l	+	+	* 	* 	* 
,	+ 
,	+	* 
{	+	+	k	*	*	k	*	*	) 	) 	) 	) 	) 
+	* 
+	* 
,	+	)
 
	,	,	1 	1 	1 	1 	1 
-	,	1  
[	)	)	) 	) 	) 	) 	) 
*	)	)$ 
{	+	+	9 	9 	9 	9 	9 
,	+	9 
	 	 	 	 	 
	 ,$2SX
 
 
 At|CSTTT--""==##==##		B 	B 	B 	B 	B 
	B ( K	    0 &G 4 4 4Y     %,  '+0 &H 5 5 5(#$H$H$H$HII J  
 
 
 %-  '+0 &H 5 5 5(#$H$H$H$HII J  
 
 
'@ |A B &U+
 +
 +
r4   levelintr   c                    | j         | j        d                  }t          | j        dd                    D ];\  }}||k     r0	 |j        |         }# t          $ r t          d          cY c S w xY w<|S )Nr   r   debug)r!   r/   rb   rS   
IndexErrorr   )r1   r   rc   r^   r`   s        r2   rR   zMenuContainer._get_menu   s    t1!45!$"4QRR"899 	- 	-HAu5yy-=/DD! - - -#G,,,,,,,-  s   AA-,A-r
   c                     t                      j                             j                  sdg _        d	 fd}g }t           j                  D ]$\  }}|                     |||                     %|S )
Nr   r^   r   r_   r   r'   Iterable[OneStyleAndTextTuple]c              3      K   d f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                d   | j         t          j        k    }| j         t          j        k    s|rrt	                      }|sd|j                            j                  r&j        gk    r|j        	                                 n|j        
                    j                   g_        d S d S d S ru   )
event_typer   
MOUSE_MOVE
MOUSE_DOWNr   rJ   rx   rw   r/   rK   focus)r   hoverrI   focusedr^   r1   s      r2   mouse_handlerzJMenuContainer._get_menu_fragments.<locals>.one_item.<locals>.mouse_handler   s    #..2KK*n.GGG H H
 "))C  :://<< :#1aS88 #
 5 5 7 7 7J,,T[999*+D&&& HGGGr4   rp    r   [SetMenuPosition] class:menu-bar.selected-itemr   r   r'   r(   )r/   text)r^   r_   r   rs   r   r1   s   `   r2   one_itemz3MenuContainer._get_menu_fragments.<locals>.one_item   s      - - - - - - - -" $S-8888D&q)))g)*B>>>>6(M111111r4   r^   r   r_   r   r'   r   )r   rJ   rx   rw   r/   rb   r!   extend)r1   r   resultr^   r_   r   s   `    @r2   r   z!MenuContainer._get_menu_fragments   s    ))",,T[99  	%"#D	2 	2 	2 	2 	2 	2 	24 &( 11 	- 	-GAtMM((1d++,,,,r4   r   r   c                P     d fd}t          t          |          d          S )Nr'   r
   c                 *   g } t          j                  k     rt                              j        rW|                     dt
          j        f           |                     dt
          j        j        dz   z  f           |                     dt
          j	        f           |                     d           	 j        dz            n# t          $ r dY nw xY wdfd}t          j                  D ]$\  }}|                      |||                     %|                     dt
          j        f           |                     dt
          j        j        dz   z  f           |                     dt
          j        f           | S )N
class:menu   r   
r   rW   r^   r   r_   r   r'   r   c              3  t   K   d fd} k    rdV  d}nd}d	t           j        fV  j        d
k    r!|dz   t           j        j        dz   z   |fV  n*|dj                             j        dz             |fV  j        r|d|fV  n|d|fV   k    rdV  d	t           j        fV  dV  d S )Nr   r   r'   r(   c                8   j         rd S | j        t          j        k    }| j        t          j        k    s|rct                      }|s6j        r/|j                                                                          d S j	        d dz            gz   _	        d S d S r,   )
r[   r   r   r   MOUSE_UPr   rl   rJ   rK   r/   )r   r   rI   r^   r_   r   r1   s      r2   r   z[MenuContainer._submenu.<locals>.get_text_fragments.<locals>.one_item.<locals>.mouse_handler  s    #} ' !'$/$:n>W$WE + 6.:Q Q Q#( !R '.ii', !, !,$'J$9$9$;$;$;$(LLNNNNN9=9K(3%!):&)*:,D$6$6$6 !R Qr4   )z[SetCursorPosition]r   r   r   r   -zclass:menu-border   r   >)r   r   r   r   )r   VERTICALr   
HORIZONTALwidthljustrS   )r^   r_   r   rs   r   rc   selected_itemr1   s   ``  r2   r   zDMenuContainer._submenu.<locals>.get_text_fragments.<locals>.one_item  s`     , , , , , , , , ,& --"====$BEE$&E+V_====9++ %(; ;#)#4
Q#G I -#     !& /DI 5 5dj1n E E -#     = >#(#}"=====#(#}"====--";;;;+V_====((((((r4   r   )r.   r/   rR   rS   rF   r   TOP_LEFTr   r   	TOP_RIGHTr   rb   r   BOTTOM_LEFTBOTTOM_RIGHT)r   r   r^   r_   rc   r   r   r1   s       @@r2   get_text_fragmentsz2MenuContainer._submenu.<locals>.get_text_fragments  s   )+Fs4-....~~e,,= DGMM<"ABBBMM<1BdjSTn1U"VWWWMM<1A"BCCCMM*---+(,(:519(E% + + +(*+3) 3) 3) 3) 3) 3) 3) 3) 3)j $-T]#;#; 9 94hhq$&7&78888MM<1C"DEEEMM<1BdjSTn1U"VWWWMM<1D"EFFFMs    C C C r   )rs   r'   r
   )r   r   )r1   r   r   s   `` r2   rT   zMenuContainer._submenu  sN    I	 I	 I	 I	 I	 I	 I	V *+=>>lSSSSr4   c                    | j         j        S ru   )r   r#   r0   s    r2   r#   zMenuContainer.floatsY  s    ~$$r4   r   c                    | j         S ru   )r   r0   s    r2   __pt_container__zMenuContainer.__pt_container__]  s
    ~r4   )NN)
r    r   r!   r"   r#   r$   r%   r&   r'   r(   )r   r   r'   r   r   )r   )r   r   r'   r   )r'   r$   )r'   r   )__name__
__module____qualname____doc__r   rR   r   rT   propertyr#   r   rY   r4   r2   r   r   #   s          &*/3k
 k
 k
 k
 k
Z
 
 
 
' ' ' 'RLT LT LT LT LT\ % % % X%     r4   c                  :    e Zd Z	 	 	 	 	 dddZedd            ZdS )r   r   NFr   strrl   Callable[[], None] | NonerS   list[MenuItem] | NoneshortcutSequence[Keys | str] | Noner[   r*   r'   r(   c                ^    || _         || _        |pg | _        || _        || _        d| _        d S rE   )r   rl   rS   r   r[   r   )r1   r   rl   rS   r   r[   s         r2   r   zMenuItem.__init__b  s9     	 B  r4   r   c                P    | j         rt          d | j         D                       S dS )Nc              3  >   K   | ]}t          |j                  V  d S ru   )r   r   )r]   cs     r2   	<genexpr>z!MenuItem.width.<locals>.<genexpr>t  s,      AAaz!&))AAAAAAr4   r   )rS   r<   r0   s    r2   r   zMenuItem.widthq  s0    = 	AA4=AAAAAA1r4   )r   NNNF)r   r   rl   r   rS   r   r   r   r[   r*   r'   r(   )r'   r   )r   r   r   r   r   r   rY   r4   r2   r   r   a  s^         -1*.04        X  r4   N)+
__future__r   typingr   r   r   "prompt_toolkit.application.currentr   prompt_toolkit.filtersr   "prompt_toolkit.formatted_text.baser	   r
   'prompt_toolkit.key_binding.key_bindingsr   r   (prompt_toolkit.key_binding.key_processorr   prompt_toolkit.keysr    prompt_toolkit.layout.containersr   r   r   r   r   r   r   prompt_toolkit.layout.controlsr   prompt_toolkit.mouse_eventsr   r   prompt_toolkit.utilsr   prompt_toolkit.widgetsr   baser   __all__r:   r   r   rY   r4   r2   <module>r      s   " " " " " " / / / / / / / / / / 6 6 6 6 6 6 , , , , , , W W W W W W W W P P P P P P P P B B B B B B $ $ $ $ $ $                  @ ? ? ? ? ? B B B B B B B B + + + + + + ) ) ) ) ) )       
 { { { { { { { {|	         r4   