
    fk4                       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*y)    )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                  d    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
y)r   zs
    :param floats: List of extra Float objects to display.
    :param menu_items: List of `MenuItem` objects.
    Nc                ^    | _         | _        dg _        t               }t        d$ fd       }t        d$ fd       }|j                  d|      d% fd       }|j                  d|      d% fd       }	|j                  d	|      d% fd
       }
|j                  d|      |j                  d|      d%d              }|j                  d|      |j                  d|      |j                  d|      d% fd                     }|j                  d|      d% fd       }|j                  d|      d% fd       }|j                  d	|      d% fd       }|j                  d      d% fd       }t         j                  |dd       _        t        d j                  d       _
         j                  d      } j                  d      } j                  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|xs g z   |#       _        y )&Nr   c                 4    t         j                        dk(  S Nr   lenselected_menuselfs   W/var/www/cvtools/html/venv/lib/python3.12/site-packages/prompt_toolkit/widgets/menus.pyin_main_menuz,MenuContainer.__init__.<locals>.in_main_menu7   s    t))*a//    c                 4    t         j                        dkD  S r"   r#   r&   s   r(   in_sub_menuz+MenuContainer.__init__.<locals>.in_sub_menu;   s    t))*Q..r*   left)filterc                X    t        dj                  d   dz
        j                  d<   y )Nr   r   )maxr%   eventr'   s    r(   _leftz%MenuContainer.__init__.<locals>._leftA   s*    $'4+=+=a+@1+D$EDq!r*   rightc                    t        t        j                        dz
  j                  d   dz         j                  d<   y )Nr   r   )minr$   
menu_itemsr%   r1   s    r(   _rightz&MenuContainer.__init__.<locals>._rightE   s;    $'DOO$q($*<*<Q*?!*C%Dq!r*   downc                <    j                   j                  d       y Nr   )r%   appendr1   s    r(   _downz%MenuContainer.__init__.<locals>._downK   s    %%a(r*   zc-czc-gc                L    | j                   j                  j                          y)zLeave menu.N)applayout
focus_last)r2   s    r(   _cancelz'MenuContainer.__init__.<locals>._cancelO   s     II'')r*   c                l    t        j                        dkD  rj                  j                          yy)zGo back to parent menu.r   N)r$   r%   popr1   s    r(   _backz%MenuContainer.__init__.<locals>._backW   s/    
 4%%&*""&&( +r*   c                   j                  t        j                        dz
        j                  rj                  j	                  d       yt        j                        dk(  rj                  d   t        j
                        dz
  k  r{t        t        j
                        dz
  j                  d   dz         g_        j
                  j                  d      j                  rj                  j	                  d       yyyy)zgo into sub menu.r   r      N)	_get_menur$   r%   childrenr<   r7   r6   r1   s    r(   _submenuz(MenuContainer.__init__.<locals>._submenu_   s     ~~c$"4"459:CC""))!, D&&'1,&&q)C,@1,DD DOO,q0$2D2DQ2G!2KL&" ??4#5#5a#89BB&&--a0 C E -r*   upc                ~   j                  t        j                        dz
        }j                  d   }t        |j                        D cg c]  \  }}||k  r|j
                  s| }}}|r|d   j                  d<   yt        j                        dk(  rj                  j                          yyc c}}w )z;Select previous (enabled) menu item or return to main menu.rG   N)rH   r$   r%   	enumeraterI   disabledrD   )r2   menuindexiitemprevious_indexesr'   s         r(   _up_in_submenuz.MenuContainer.__init__.<locals>._up_in_submenup   s     >>#d&8&8"9A"=>D&&r*E  )7 Atu9T]]      )9")=""2&T''(A-""&&( . s   B9c                   j                  t        j                        dz
        }j                  d   }t        |j                        D cg c]  \  }}||kD  r|j
                  s| }}}|r|d   j                  d<   yyc c}}w )z Select next (enabled) menu item.rG   rM   r   N)rH   r$   r%   rN   rI   rO   )r2   rP   rQ   rR   rS   next_indexesr'   s         r(   _down_in_submenuz0MenuContainer.__init__.<locals>._down_in_submenu   s     >>#d&8&8"9A"=>D&&r*E  )7Atu9T]] L  )5a""2& s   Benterc                    j                  t        j                        dz
        }|j                  r5| j                  j
                  j                          |j                          yy)zClick the selected menu item.r   N)rH   r$   r%   handlerr?   r@   rA   )r2   rS   r'   s     r(   _clickz&MenuContainer.__init__.<locals>._click   sN     >>#d&8&8"9A"=>D||		  ++- r*   TF)key_bindings	focusableshow_cursorr   class:menu-bar)heightcontentstylerG   c                 Z    t               j                  j                   j                  k(  S N)r   r@   current_windowwindowr&   s   r(   	has_focusz)MenuContainer.__init__.<locals>.has_focus   s     9##22dkkAAr*   )body)rb   r.   )xcursorycursorrb   c                 4    t         j                        dk\  S r"   r#   r&   s   r(   <lambda>z(MenuContainer.__init__.<locals>.<lambda>       C0B0B,Cq,H r*   )attach_to_windowrj   rk   allow_cover_cursorrb   c                 4    t         j                        dk\  S )NrG   r#   r&   s   r(   rm   z(MenuContainer.__init__.<locals>.<lambda>   rn   r*   )rb   floatsr]   )returnbool)r2   Ers   None)ri   r7   r%   r   r   addr   _get_menu_fragmentscontrolr   rg   rJ   r   r   r   r   r   	container)r'   ri   r7   rr   r]   kbr)   r,   r3   r8   r=   rB   rE   rJ   rU   rX   r\   submenusubmenu2submenu3rh   s   `                    r(   __init__zMenuContainer.__init__)   s    	$S ]		0 
	0 
	/ 
	/
 
|	,	F 
-	F 
	-	 
.	
 
|	,	) 
-	) 
l	+	l	+	* 
, 
,	* 
{	+	k	*	k	*	) 
+ 
+ 
,	)
 
	,	1 
-	1  
[	)	) 
*	)$ 
{	+	9 
,	9 
	 
	 ,$$2SX
 At||CST--"==#==#		B 
	B ( KK	   0 &G 4Y %,  '+0 &H 5(#$HI J
 %-  '+0 &H 5(#$HI J
'@ |A B &U+
r*   c                    | j                   | j                  d      }t        | j                  dd        D ]  \  }}||k  s	 |j                  |   } |S # t        $ r t        d      cY c S w xY w)Nr   r   debug)r7   r%   rN   rI   
IndexErrorr   )r'   levelrP   rR   rQ   s        r(   rH   zMenuContainer._get_menu   s}    t11!45!$"4"4QR"89 	-HAu5y-==/D	-  " -#G,,-s   AA.-A.c                     t               j                  j                   j                        sdg _        d fd}g }t         j                        D ]  \  }}|j                   |||              |S )Nr   c              3      K   d fd}dd|f  j                   d   k(  rr
dd|f d}nd}||j                  |f y w)	Nc                   | j                   t        j                  k(  }| j                   t        j                  k(  s|rrt	               }|su|j
                  j                  j                        r+j                  gk(  r@|j
                  j                          n%|j
                  j                  j                         g_        y y y re   )
event_typer   
MOUSE_MOVE
MOUSE_DOWNr   r@   rh   rg   r%   rA   focus)mouse_eventhoverr?   focusedrR   r'   s      r(   mouse_handlerzJMenuContainer._get_menu_fragments.<locals>.one_item.<locals>.mouse_handler   s    #...2K2KK**n.G.GG ")C :://<#11aS8 #

 5 5 7JJ,,T[[9*+D&   r*   r`    r   [SetMenuPosition] class:menu-bar.selected-itemr   r   rs   rv   )r%   text)rR   rS   r   rc   r   r'   s   `   r(   one_itemz3MenuContainer._get_menu_fragments.<locals>.one_item   sX     -" $S-88D&&q))g*B>>6(M11s   AArR   intrS   r   rs   zIterable[OneStyleAndTextTuple])r   r@   rh   rg   r%   rN   r7   extend)r'   r   resultrR   rS   r   s   `    @r(   rx   z!MenuContainer._get_menu_fragments   sp    )"",,T[[9 "#D	24 &( 1 	-GAtMM(1d+,	- r*   c                @     d fd}t        t        |      d      S )Nc                 <   g } t        j                        k  rlj                        j                  rN| j	                  dt
        j                  f       | j	                  dt
        j                  j                  dz   z  f       | j	                  dt
        j                  f       | j	                  d       	 j                  dz      	 	 	 	 	 	 dfd}t        j                        D ]  \  }}| j                   |||              | j	                  dt
        j                  f       | j	                  dt
        j                  j                  dz   z  f       | j	                  dt
        j                  f       | S # t        $ r dY w xY w)N
class:menu   r   
r   rM   c              3     K   d fd} k(  rd d}nd}dt         j                  f j                  dk(  r*|dz   t         j                  j                  dz   z   |f n0|d	j                   j                  j                  dz         |f j                  r|d
|f n|d	|f  k(  rd dt         j                  f d y w)Nc                V   j                   ry | j                  t        j                  k(  }| j                  t        j                  k(  s|r_t               }|s7j                  r+|j                  j                          j                          y j                  d dz    gz   _	        y y r"   )
rO   r   r   r   MOUSE_UPr   r[   r@   rA   r%   )r   r   r?   rR   rS   r   r'   s      r(   r   z[MenuContainer._submenu.<locals>.get_text_fragments.<locals>.one_item.<locals>.mouse_handler  s    #}} !'$/$:$:n>W>W$WE + 6 6.:Q:Q Q#(&-i',$'JJ$9$9$;$(LLN9=9K9K(3%!):&)*:,D$6 $)r*   )z[SetCursorPosition]r   r   r   r   -zclass:menu-border   r   >)r   r   r   r   )r   VERTICALr   
HORIZONTALwidthljustrI   )rR   rS   r   rc   r   rP   selected_itemr'   s   ``  r(   r   zDMenuContainer._submenu.<locals>.get_text_fragments.<locals>.one_item  s     , ,& -"==$BE$&E+V__==99+ %(; ;#)#4#4

Q#G"H -#  !&"#DII; 5 5djj1n E -#   ==#(#}"==#(#}"==-";;+V__==((s   CCr   )r$   r%   rH   rI   r<   r   TOP_LEFTr   r   	TOP_RIGHTr   rN   r   BOTTOM_LEFTBOTTOM_RIGHT)r   r   rR   rS   rP   r   r   r'   s       @@r(   get_text_fragmentsz2MenuContainer._submenu.<locals>.get_text_fragments  sk   )+Fs4--..~~e,==MM<"ABMM<1B1BdjjSTn1U"VWMM<1A1A"BCMM*-+(,(:(:519(E3)3)&.3)73) 3)j $-T]]#; 94hq$&789 MM<1C1C"DEMM<1B1BdjjSTn1U"VWMM<1D1D"EFM} & +(*+s   F FFr   )rc   rs   r
   )r   r   )r'   r   r   s   `` r(   rJ   zMenuContainer._submenu  s     I	V *+=>lSSr*   c                .    | j                   j                  S re   )rz   rr   r&   s    r(   rr   zMenuContainer.floatsY  s    ~~$$$r*   c                    | j                   S re   )rz   r&   s    r(   __pt_container__zMenuContainer.__pt_container__]  s    ~~r*   )NN)
ri   r   r7   zlist[MenuItem]rr   list[Float] | Noner]   zKeyBindingsBase | Noners   rv   )r   r   rs   r   r   )r   )r   r   rs   r   )rs   r   )rs   r   )__name__
__module____qualname____doc__r   rH   rx   rJ   propertyrr   r    r*   r(   r   r   #   sw     &*/3k
k
 #k
 #	k

 -k
 
k
Z
'RLT\ % %r*   c                  H    e Zd Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZedd       Zy)r   Nc                `    || _         || _        |xs g | _        || _        || _        d| _        y r;   )r   r[   rI   shortcutrO   r   )r'   r   r[   rI   r   rO   s         r(   r   zMenuItem.__init__b  s3     	 B  r*   c                T    | j                   rt        d | j                   D              S y)Nc              3  F   K   | ]  }t        |j                          y wre   )r   r   ).0cs     r(   	<genexpr>z!MenuItem.width.<locals>.<genexpr>t  s     Aaz!&&)As   !r   )rI   r0   r&   s    r(   r   zMenuItem.widthq  s!    ==A4==AAAr*   )r   NNNF)r   strr[   zCallable[[], None] | NonerI   zlist[MenuItem] | Noner   zSequence[Keys | str] | NonerO   rt   rs   rv   )rs   r   )r   r   r   r   r   r   r   r*   r(   r   r   a  sf     -1*.04 + (	
 .  
  r*   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__ru   r   r   r   r*   r(   <module>r      sn    " / / 6 , W P B $   @ B + )  
 { {|	 r*   