o
    ˷e5#                     @   sX  d dl 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 d dl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mZ d dlmZ d dl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l,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 g dZ6					dAdedede7de7dee) de
e8 fddZ9edZ:ddg dfdeded eee7e:f  dee) de
e: f
d!d"Z;			#	$			%		dBdeded&e7d'e7d(ee d)ee+ d*edee) d+e7de
e7 fd,d-Z<			.	dCdeded&e7dee) de
d f
d/d0Z=			.	$			dDdeded&e7d'e7d1eeee:ef   d+ee: dee) de
e: fd2d3Z>			.	$			dDdeded&e7d'e7d1eeee:ef   d4eee:  dee) de
ee:  fd5d6Z?ddd7d8 dfdeded9eee@gdf ee7gdf gdf dee) de
d f
d:d;ZAd<e#dee) de
e fd=d>ZBdEd?d@ZCdS )F    N)AnyCallableListOptionalSequenceTupleTypeVar)Application)get_app)Buffer)	Completer)get_event_looprun_in_executor_with_context)FilterOrBool)AnyFormattedText)
focus_nextfocus_previous)load_key_bindings)KeyBindingsmerge_key_bindings)Layout)AnyContainerHSplit)	Dimension)	BaseStyle)	Validator)	BoxButtonCheckboxListDialogLabelProgressBar	RadioListTextAreaValidationToolbar)yes_no_dialogbutton_dialoginput_dialogmessage_dialogradiolist_dialogcheckboxlist_dialogprogress_dialog YesNotitletextyes_textno_textstylereturnc                 C   sJ   ddd}ddd}t | t|ddt||d	t||d	gdd
}t||S )z8
    Display a Yes/No dialog.
    Return a boolean.
    r4   Nc                   S      t  jdd d S )NTresultr
   exit r:   r:   W/var/www/ideatree/venv/lib/python3.10/site-packages/prompt_toolkit/shortcuts/dialogs.pyyes_handler6      z"yes_no_dialog.<locals>.yes_handlerc                   S   r5   )NFr6   r8   r:   r:   r:   r;   
no_handler9   r=   z!yes_no_dialog.<locals>.no_handlerTr0   dont_extend_heightr0   handlerr/   bodybuttonswith_backgroundr4   N)r   r    r   _create_app)r/   r0   r1   r2   r3   r<   r>   dialogr:   r:   r;   r%   *   s   






r%   _TrE   c                    sB   dt ddfdd t| t|dd fdd	|D dd
}t||S )zx
    Display a dialog with button choices (given as a list of tuples).
    Return the value associated with button.
    vr4   Nc                 S   s   t  j| d d S Nr6   r8   )rK   r:   r:   r;   button_handlerW   r=   z%button_dialog.<locals>.button_handlerTr?   c                    s$   g | ]\}}t |t |d qS )rA   )r   	functoolspartial).0trK   rM   r:   r;   
<listcomp>]   s    z!button_dialog.<locals>.<listcomp>rC   )rJ   r   r    rH   )r/   r0   rE   r3   rI   r:   rR   r;   r&   L   s   



r&   OKCancelFok_textcancel_text	completer	validatorpassworddefaultc	                    s   dt dtf fdd}	dfdd}
t||
d t|td}t|d	||||	d
t| tt|ddt gt	dddd |gdd}t
||S )zV
    Display a text input box.
    Return the given text, or None when cancelled.
    bufr4   c                    s   t  j  dS )NT)r
   layoutfocus)r\   )	ok_buttonr:   r;   acceptw   s   zinput_dialog.<locals>.acceptNc                         t  j jd d S rL   )r
   r9   r0   r:   )	textfieldr:   r;   
ok_handler{      z input_dialog.<locals>.ok_handlerrA   F)r0   	multilinerZ   rX   rY   accept_handlerTr?      )	preferredmaxpaddingrC   rG   )r   boolr   _return_noner#   r   r   r    r$   DrH   )r/   r0   rV   rW   rX   rY   rZ   r3   r[   r`   rc   cancel_buttonrI   r:   )r_   rb   r;   r'   g   s2   	


r'   Okc                 C   s,   t | t|ddt|tdgdd}t||S )zM
    Display a simple message box and wait until the user presses enter.
    Tr?   rA   rC   )r   r    r   rm   rH   )r/   r0   rV   r3   rI   r:   r:   r;   r(      s   	

r(   valuesc           	         h   |du rg }d fdd}t ||d t| tt|dd gdd	t||d
t|td
gdd}t||S )z
    Display a simple list of element the user can choose amongst.

    Only one element can be selected at a time using Arrow keys and Enter.
    The focus can be moved between the list and the Ok/Cancel button with tab.
    Nr4   c                      ra   rL   )r
   r9   current_valuer:   
radio_listr:   r;   rc      rd   z$radiolist_dialog.<locals>.ok_handler)rq   r[   Tr?   rg   rj   rA   rC   rG   )r"   r   r   r    r   rm   rH   )	r/   r0   rV   rW   rq   r[   r3   rc   rI   r:   rt   r;   r)          


r)   default_valuesc           	         rr   )z
    Display a simple list of element the user can choose multiple values amongst.

    Several elements can be selected at a time using Arrow keys and Enter.
    The focus can be moved between the list and the Ok/Cancel button with tab.
    Nr4   c                      ra   rL   )r
   r9   current_valuesr:   cb_listr:   r;   rc      rd   z'checkboxlist_dialog.<locals>.ok_handler)rq   rw   Tr?   rg   rj   rA   rC   rG   )r   r   r   r    r   rm   rH   )	r/   r0   rV   rW   rq   rw   r3   rc   rI   r:   ry   r;   r*      rv   r*   c                  G   s   d S Nr:   )ar:   r:   r;   <lambda>   s    r}   run_callbackc                    s   t  t tdtdddtttt|dttddg| dd	}t	|| d
t
ddf fdddtddf fddd fdddfdd} j|  S )zz
    :param run_callback: A function that receives as input a `set_percentage`
        function and it does the work.
    Fl    d(	 )rh   )	focusableheightr0   rg   rj   T)rD   r/   rF   valuer4   Nc                    s   t | _   d S r{   )int
percentage
invalidate)r   )appprogressbarr:   r;   set_percentage  s   
z'progress_dialog.<locals>.set_percentager0   c                    s    jj|     d S r{   )call_soon_threadsafebufferinsert_textr   r   )r   loop	text_arear:   r;   log_text"  s   z!progress_dialog.<locals>.log_textc                      s$   z W     d S     w r{   )r9   r:   )r   r   r~   r   r:   r;   start(  s   zprogress_dialog.<locals>.startc                      s   t   d S r{   )r   r:   )r   r:   r;   pre_run.  s   z progress_dialog.<locals>.pre_runrG   )r   r!   r#   rn   r   r   r   r    exactrH   r   strpre_run_callablesappend)r/   r0   r~   r3   rI   r   r:   )r   r   r   r   r~   r   r   r   r;   r+      s.   
r+   rI   c                 C   sB   t  }|dt |dt tt| tt |gd|ddS )Ntabzs-tabT)r]   key_bindingsmouse_supportr3   full_screen)r   addr   r   r	   r   r   r   )rI   r3   bindingsr:   r:   r;   rH   6  s   rH   c                   C   s   t    dS )z!Button handler that returns None.Nr8   r:   r:   r:   r;   rm   E  s   rm   )r,   r,   r-   r.   N)	r,   r,   rT   rU   NNFNr,   )r,   r,   rp   N)r,   r,   rp   rU   NNNrG   )DrN   typingr   r   r   r   r   r   r   prompt_toolkit.applicationr	   "prompt_toolkit.application.currentr
   prompt_toolkit.bufferr   prompt_toolkit.completionr   prompt_toolkit.eventloopr   r   prompt_toolkit.filtersr   prompt_toolkit.formatted_textr   )prompt_toolkit.key_binding.bindings.focusr   r   #prompt_toolkit.key_binding.defaultsr   'prompt_toolkit.key_binding.key_bindingsr   r   prompt_toolkit.layoutr    prompt_toolkit.layout.containersr   r   prompt_toolkit.layout.dimensionr   rn   prompt_toolkit.stylesr   prompt_toolkit.validationr   prompt_toolkit.widgetsr   r   r   r   r    r!   r"   r#   r$   __all__r   rl   r%   rJ   r&   r'   r(   r)   r*   r   r+   rH   rm   r:   r:   r:   r;   <module>   sF   $,

	

5

(


("
: