
    +d                          d dl mZ d dl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  G d	 d
e          Z G d de          ZdS )    )partialN   )	MAX_WIDTHBaseenable_widget   )Plots)Description)SourceSelectorc                        e Zd ZdZd fd	Zd Zd Zej        j	        d             Zd Z
d Zd	 Zd
 Zed             Zed             Zd Zd Zed             Z xZS )	SourceGUIa  
    Top level GUI panel that contains controls and all visible sub-panels

    This class is responsible for coordinating the inputs and outputs
    of various sup-panels and their effects on each other.

    Parameters
    ----------
    cats: list of catalogs, opt
        catalogs used to initalize, provided as objects.
    sources: list of sources, opt
        sources used to initalize, provided as objects.
    done_callback: func, opt
        called when the object's main job has completed. In this case,
        selecting source(s).

    Attributes
    ----------
    children: list of panel objects
        children that will be used to populate the panel when visible
    panel: panel layout object
        instance of a panel layout (row or column) that contains children
        when visible
    watchers: list of param watchers
        watchers that are set on children - cleaned up when visible
        is set to false.
    Nc           	         || _         || _        t          j        ddt                    | _        || _        t          j                            dddd          | _	        t          j                            d	ddd          | _
        | j	        | j
        g| _        t          j        d
d          | _        t                      | _        t!          | j         | j        | j                  | _        t'                      | _        | j        | j        _        t/          | j        | j	        j        t5          t6          | j	        d                    | _         t;                      j        di | d S )NEntriesmax)namewidth_policy	max_widthu   📊FT2   )r   valuedisabledwidthu   ⚙Controlsr   )r   margin)catssourcesdone_callbackr   )sourcevisiblevisible_callback )_cats_sourcespnColumnr   panelr   widgetsToggleplot_widgetpars_widgetcontrolsRowcontrol_panel
ParsEditorpars_editorr   callbackselectr
   descriptionr   r   r	   source_instancer   r   setattrplotsuper__init__)selfr   r   r   kwargs	__class__s        ;lib/python3.11/site-packages/intake/interface/source/gui.pyr6   zSourceGUI.__init__.   sP   
YIEYWWW
*:,,&PT\^,__:,,%ut[],^^)4+;<VA>>>%<<$$*dm[_[hiii&=="&,!5t?O?Uhopwy}  zJ  LS  iT  iT  U  U  U	""6"""""    c                 ,   | j         j                            | j        d          | j        j                            | j        d          | j        j                            | j	        d          g| _
        | j                            | j                   d S )Nr   r   )r   )r(   paramwatchon_click_plot_widgetr)   on_click_pars_widgetr0   widgetlinkr1   watchersr4   on_plot_editedr7   s    r:   _setup_watcherszSourceGUI._setup_watchersB   s    "(()BGLL"(()BGLLK##D$4H#EE

 		+,,,,,r;   c           	         |                                   t          j        t          j        t          j        | j        j        | j        d          | j        j        d          | j        j        dd          g| _	        d S )Nr   )r   r   )r   r   )
rF   r#   r$   r+   r0   r%   r,   r1   r4   childrenrE   s    r:   setupzSourceGUI.setupJ   s    II)*   
 $*   	"  
r;   c                    || _         |rt          | j        j                  dk    r|                                  d| j        _        d| j        _        t          | j        j                  dk    r| j        	                    | j
                   | j        	                    | j                   n|st          | j        j                  dk    rj|                                  d| j        _        | j                                         d| j        _        d| j        _        | j                                         | j        r|                     |           dS dS )zCWhen visible changed, do setup or unwatch and call visible_callbackr   TFN)_visiblelen_panelobjectsrI   r0   r   r1   r,   extendr*   rH   unwatchclearr4   r   )r7   r   s     r:   r   zSourceGUI.visible]   sB      	 s4;.//14 	 JJLLL"&DK'+D$4%-..!3 9"))$-888Kt}---- 	 S!4559 	 LLNNN"'DK$$&&&',D$ %DIK  	+!!'*****	+ 	+r;   c                 N   t          | d          rd| j        _        t          |          }d| j        _        d| j        _        t          | j        |           t          | j        |o|d         j                   d| j	        _
        | j        r|                     |           dS dS )zdWhen a source is selected, enable widgets that depend on that condition
        and do done_callbackr4   Fr   TN)hasattrr4   r   boolr(   r   r)   r   _user_parametersr.   dirtyr   )r7   r   enables      r:   r/   zSourceGUI.callbackt   s     4   	& %DIg!&!&d&///d&(N71:3NOOO!% 	(w'''''	( 	(r;   c                 J    | j         | j        _        |j        | j        _        dS )zEWhen the plot control is toggled, set visibility and hand down sourceN)r2   r4   r   newr   r7   events     r:   r?   zSourceGUI.on_click_plot_widget   s!    /	!I	r;   c                    |j         rW| j        d         j        }| j                            |           | j        j                            | j        j                   d S | j        j                            | j        j                   d S )Nr   )	rY   r   rU   r.   remaker1   r%   appendremove)r7   r[   parss      r:   r@   zSourceGUI.on_click_pars_widget   s~    9 	B<?3D##D)))"))$*:*@AAAAA"))$*:*@AAAAAr;   c                 (    | j         | j        _        d S )N)r   r1   r   rZ   s     r:   rD   zSourceGUI.on_plot_edited   s    "&,r;   c                     | j         j        S )z3Sources that have been selected from the source GUI)r0   selectedrE   s    r:   r   zSourceGUI.sources   s     {##r;   c                 V    | j         j        }| j        j        }|r |d         di |S dS )z>DataSource from the current selection using current parametersr   Nr    )r0   rc   r.   r8   )r7   selargss      r:   r2   zSourceGUI.source_instance   sA     k"& 	"3q6>>D>>!	" 	"r;   c                     | j         | j                                        | j                            d          | j                            d          dS )z)Serialize the current state of the objectF)include_source)r   r0   r1   r4   )r   r0   __getstate__r1   r4   rE   s    r:   ri   zSourceGUI.__getstate__   sV     |k..00+888NNI**%*@@	
 
 	
r;   c                 
   |                     dd          | _        | j        r`| j                            |d                    | j                            |d                    | j                            |d                    | S )zSet the current state of the object from the serialized version.
        Works inplace. See ``__getstate__`` to get serialized version and
        ``from_state`` to create a new object.r   Tr0   r1   r4   )getr   r0   __setstate__r1   r4   )r7   states     r:   rl   zSourceGUI.__setstate__   sx     yyD11< 	2K$$U8_555))%*>???I""5=111r;   c                 B     | g g                                |          S )zCreate a new object from a serialized exising object.

        Example
        -------
        original = SourceGUI()
        copy = SourceGUI.from_state(original.__getstate__())
        )r   r   )rl   )clsrm   s     r:   
from_statezSourceGUI.from_state   s'     sB'''44U;;;r;   )NNN)__name__
__module____qualname____doc__r6   rF   rI   r   r   setterr/   r?   r@   rD   propertyr   r2   ri   rl   classmethodrp   __classcell__)r9   s   @r:   r   r      s4        8# # # # # #(- - -
 
 
& 
\+ + +,( ( ("& & &
B B B/ / / $ $ X$ " " X"
 
 
	 	 	 < < [< < < < <r;   r   c                   J    e Zd ZdZd Zd Zed             Zed             Z	dS )r-   z"Edit user parameters using widgetsc                 h    t          j        t          j                              | _        d| _        d S )NT)r#   r$   Spacerr%   rV   rE   s    r:   r6   zParsEditor.__init__   s$    Yry{{++



r;   c                     | j                                          |D ]/}| j                             |                     |                     0d| _        dS )z@Set up parameter widgets for given list of UserParameter objectsFN)r%   rQ   r^   par_to_widgetrV   )r7   uparsupars      r:   r]   zParsEditor.remake   sW    
 	8 	8DJd00667777


r;   c                 6    | j         ri S d | j        D             S )zThe current selectionsc                 (    i | ]}|j         |j        S r    )r   r   ).0ws     r:   
<dictcomp>z%ParsEditor.kwargs.<locals>.<dictcomp>   s    888AFAG888r;   )rV   r%   rE   s    r:   r8   zParsEditor.kwargs   s)     : 	9I88TZ8888r;   c                 N   | j         r&t          j                            | j                   }n| j        dv rt          j                                        }n| j        dk    r-t          j                            | j        | j        d          }n| j        dk    r,t          j        	                    | j        | j                  }nH| j        dk    rt          j        
                                }nt          j                                        }| j        |_        | j        |_        |S )	N)options)strunicodeintr   )startendstepfloat)r   r   datetime)allowedr#   r&   Selecttype	TextInput	IntSliderminr   FloatSliderDatetimeInputLiteralInputr   defaultr   )parr   s     r:   r}   zParsEditor.par_to_widget   s    ; 	*
!!#+!66AAX++ 		*
$$&&AAX 	*
$$37a$HHAAX  	*
&&SW#'&BBAAX# 	*
((**AA
''))A+r;   N)
rq   rr   rs   rt   r6   r]   rv   r8   staticmethodr}   r    r;   r:   r-   r-      sn        ,,     9 9 X9   \  r;   r-   )	functoolsr   r%   r#   baser   r   r   defined_plotsr	   r1   r
   r0   r   r   r-   r    r;   r:   <module>r      s              1 1 1 1 1 1 1 1 1 1             $ $ $ $ $ $ " " " " " "o< o< o< o< o< o< o< o<d& & & & & & & & & &r;   