
    ce:@                        U d Z ddlmZmZmZ dgZddlZddlmZm	Z	 ddl
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 ddlmZmZmZmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z% ej&        d         Z' G d dej(                  Z) G d d          Z*ddde+fdZ, e)dd            e)d e*d                     e)d e*d                     e)de,          dZ-ej.        ej/        e'e)f                  e0d<   dddej1        e2e+e2e3f         fdZ4 G d  d!ej5                  Z6 G d" d#e          Z7 G d$ d%e          Z8 G d& d'e          Z9 G d( d)e           Z: G d* de"          Z;dS )+z
Home Tab.

This widget does not perform the actual actions but it emits signals that
should be connected to the final controller on the main window.
    )absolute_importdivisionprint_functionHomeTabN)QtSignal)QApplicationQHBoxLayoutQLabelQProgressBarQVBoxLayout)AnacondaAPI)types)	constants)	telemetry)common)ButtonNormalComboBoxBaseFrameTabContentFrameTabFooterFrameTabHeader	LabelBaseSpacerHorizontal
WidgetBase)ListItemApplicationListWidgetApplication)all	installeduninstalled	updatablec                   D    e Zd ZU dZeed<   ej        dgef         ed<   dS )ApplicationFilterDetailsz/Additional details for the application filters.verbose_nameapi_types.Applicationfilter_functionN)	__name__
__module____qualname____doc__str__annotations__typingCallablebool     Dlib/python3.11/site-packages/anaconda_navigator/widgets/tabs/home.pyr"   r"   +   s@         99_&=%>%DEEEEEEr0   r"   c                   R    e Zd ZdZdZdeddfdZedefd            Zdd	defd
Z	dS )CheckInstalledz
    Common checker for application installation state.

    :param target: Expected installation state of an application.
    )__targettargetreturnNc                     || _         dS )z1Initialize new :class:`~CheckInstalled` instance.N_CheckInstalled__target)selfr5   s     r1   __init__zCheckInstalled.__init__<   s    ,2r0   c                     | j         S )zExpected installation state.r8   r:   s    r1   r5   zCheckInstalled.target@   s     }r0   applicationr$   c                 <    |                     dd          | j        u S )z(Check if application installation state.r   F)getr9   )r:   r>   s     r1   __call__zCheckInstalled.__call__E   s    {E22dmCCr0   )
r&   r'   r(   r)   	__slots__r.   r;   propertyr5   rA   r/   r0   r1   r3   r3   3   s          I3t 3 3 3 3 3     XD$; D D D D D D Dr0   r3   r>   r$   r6   c                     |                      dd          }|                      dd          }|                      dd          o)t          |          ot          |          o||d         k    S )z1Check if there is an update for an `application`.versionNversionsr/   r   F)r@   r.   )r>   rE   rF   s      r1   check_updatablerH   J   sd    $/OOIt$D$DG%0__Z%D%DH??;..q4==qT(^^qY`dlmodpYpqr0   zAll applicationsc                     dS )NTr/   )r>   s    r1   <lambda>rJ   R   s    D r0   zInstalled applicationsTzNot installed applicationsFzUpdatable applicationsAPPLICATION_FILTERSc                 h   |                      dd           }|                      dd           }|                      dd          }|t          j        j        t          j        j        fv rd}n|t          j        j        k    rd}nd}|                      d	d
                                          }||||fS )z'Prepare sorting key for an application.rankr   r   Fapp_typeN      display_name )r@   r   AppTypeINSTALLABLECONDAWEBlower)r>   rM   r   application_typecategoryrQ   s         r1   application_sorting_keyrZ   Y   s    +++D%//+u===I <G??:W[;\;\I-99;L;RSSS	Y.2	2	2#;;AACCLHl22r0   c                       e Zd ZdZdS )ButtonHomeRefreshz?QFrame used for CSS styling refresh button inside the Home Tab.Nr&   r'   r(   r)   r/   r0   r1   r\   r\   o   s        IIIIr0   r\   c                       e Zd ZdZdS )ComboHomeFilterWidget Used for CSS styling.Nr]   r/   r0   r1   r_   r_   s           &&&&r0   r_   c                       e Zd ZdZdS )ComboHomeEnvironmentr`   Nr]   r/   r0   r1   rc   rc   w   ra   r0   rc   c                       e Zd ZdZdS )ButtonHomeChannelsr`   Nr]   r/   r0   r1   re   re   {   ra   r0   re   c                       e Zd ZdZdS )	LabelHomez/QLabel used for CSS styling the Home Tab label.Nr]   r/   r0   r1   rg   rg      s        9999r0   rg   c            
           e Zd ZdZ eeee          Z eee          Z eeeeeeeee          Z	 eeeeeee          Z
 ee          Z eee          Z eee          Zd fd	Zd Zd ZddZd Zd	 Zd
 ZdeddfdZdeddfdZed             Zedd            Zej        dd            ZddZdeddfdZd ZddZd Z  xZ!S )r   Home applications tab.Nc                    t                                          |           || _        t                      | _        d| _        d| _        d| _        i | _        d| _	        t                      | _        t          d          | _        t                      | _        t!                      | _        t%          d          | _        t)                      | _        t-          |           | _        t1          |           | _        t5          |           | _        t9          d          | _        t9          d          | _        t?                      | _         | j        | _!        tE          j#                    | _$        | %                    d           | j         &                    d           | j        '                    tP          j)                   tT          +                                D ]%\  }}| j        ,                    |j-        |           &| j        .                    tT          | j	                 j-                   t_                      }|0                    | j                   |0                    tc                                 |0                    | j                   |0                    tc                                 |0                    | j                   |0                    tc                                 |0                    | j                   |0                    tc                                 |2                                 |0                    | j                   | j        3                    |           ti                      }|0                    | j$                   |0                    | j                   | j        3                    |           t_                      }|0                    | j                   |0                    tc                                 |0                    | j                   |2                                 |0                    | j                    | j        3                    |           ti                      }|0                    | j                   |0                    | j                   |0                    | j                   | 3                    |           | j        j5        6                    | j7                   | j        j8        6                    | j8                   | j        j9        6                    | j9                   | j        j:        6                    | j:                   | j        j;        6                    | j<                   | j        j;        6                    | j=                   | j         >                    d           dS )ri   Nr   ChannelsonrR   TabF)?superr;   _parentr   apiapplications
app_timerscurrent_prefix_HomeTab__applications_HomeTab__applications_filterr   listre   button_channelsr\   button_refreshr_   combo_filterrg   
label_homerc   combo_environmentr   	frame_topr   
frame_bodyr   frame_bottomr   label_status_actionlabel_statusr   progress_barfirst_widgetglobal_commonsTeamEditionServerAlertte_alertsetObjectNamesetTextVisiblesetVerticalScrollBarPolicyr   ScrollBarAlwaysOnrK   itemsaddItemr#   setCurrentTextr
   	addWidgetr   
addStretch	setLayoutr   currentIndexChangedconnect_filter_selectedsig_conda_action_requestedsig_url_clickedsig_launch_action_requestedclickedshow_channelsrefresh_cards
setVisible)	r:   parentapplication_filterapplication_filter_details
layout_toplayout_bodylayout_bottomlayout	__class__s	           r1   r;   zHomeTab.__init__   s       == "df:?" *++	1*==/11+--#D//!5!7!7'--)$//*400#)":: "2JJ(NN 2&=?? 	5!!!((///	,,R-ABBB ?R>W>W>Y>Y 	c 	c: :%%&@&MOabbbb(()<T=W)X)efff !]]
T.///-//000T_----//000T3444-//000T1222-//000T0111  ,,,!mmdm,,,di(((!!+...# 8999 0 2 2333 1222  """ 1222##M222((()))*+++v 	-55d6KLLL	,44T5TUUU	!))$*>???	-55d6VWWW$,,T-?@@@#++D,>???$$U+++++r0   c                    |                     d          }|                     d          }|                     d          | _        |                     |           |                     d          | _        |                                  dS )zSetup the tab content.processed_info__environmentsdefault_prefixrq   N)r@   rs   set_environmentsrt   update_applications)r:   
conda_dataconda_processed_infoenvironmentss       r1   setupzHomeTab.setup   s    )~~.>??+//0@AA2667GHHl+++(nn^<<  """""r0   c                 :   	 | j         j                                         n# t          $ r Y nw xY w| j                                          | j                                         }g }t          |                                          D ]q\  }\  }}|                    |	                    |                     | j         
                    ||           | j                             ||t          j                   rt          |                                          D ]\  }\  }}| j        |k    r nd}| j                             |           | j         j                            | j                   t%          |          dz   }| j                             |           dS )zSetup the environments list.r   @   N)r{   r   
disconnect	TypeErrorclearfontMetrics	enumerater   appendwidthr   setItemDatar   ToolTipRolers   setCurrentIndexr   _environment_selectedmaxsetMinimumWidth)r:   r   font_metricswidthsindex
env_prefixenv_namer   s           r1   r   zHomeTab.set_environments   s   	"6AACCCC 	 	 	D	 	$$&&&-99;; .7|7I7I7K7K-L-L 	R 	R)E)JMM,,,X66777"**8Z@@@"..uj".QQQQ-6|7I7I7K7K-L-L 	 	)E)J"j00 1 E..u5552::4;UVVV Fb ..u55555s   ! 
..r6   c           	         t          t          t          | j                 j        | j                            | j        | j                  	                                          t                    }| j                                         |D ]-}| j                            t          dd| j        i|           .| j                                         |                     d           |                                  dS )z@Build the list of applications present in the current conda env.prefix)keyr   TNr/   )sortedfilterrK   ru   r%   rp   process_appsrt   rs   valuesrZ   rv   r   r   r   update_style_sheetset_widgets_enabledupdate_status)r:   processed_applicationsapplication_datas      r1   r   zHomeTab.update_applications  s    GM#D$>?O%%d&9$BU%VV]]__  (H
 H
 H
 		 !7 	c 	cI1aa9LaP`aabbbb	$$&&&  &&&r0   c                 h    | j                                         }| j                            |          S )z(Return the current selected environment.)r{   currentTextrp   conda_get_prefix_envname)r:   r   s     r1   current_environmentzHomeTab.current_environment0  s,    .::<<x00:::r0   c                     t           j        j                            d            j                                          j                                          j                                        D ]4}|j        	                                s|j                                         5 j
                             j                  }|j                             fd                                ddd           dS )zRefresh application widgets.

        List widget items sometimes are hidden on resize. This method tries
        to compensate for that refreshing and repainting on user demand.
        zrefresh-applicationsr   c                 .                         |          S N)r   )_output__r:   s      r1   rJ   z'HomeTab.refresh_cards.<locals>.<lambda>C  s    

6@R@R r0   zRefreshing applicationsr   )actionvalue	max_valueN)r   	ANALYTICSinstanceeventrv   r   repaintr   widget	isVisiblerp   r   rs   sig_chain_finishedr   r   )r:   itemworkers   `  r1   r   zHomeTab.refresh_cards5  s     	$**+ABBB	$$&&&	IOO%% 	& 	&D;((** &##%%%$$D,?$@@!))*R*R*R*RSSS";1PQRRRRRr0   c                 Z    | j                             | j        t          j                   dS )z2Emit signal requesting the channels dialog editor.N)sig_channels_requestedemitrw   r   TAB_HOMEr=   s    r1   r   zHomeTab.show_channelsF  s'    #(()=y?QRRRRRr0   r   c                     | j                             |          }| j                             |          }| j                            ||t
          j                   dS )z4Notify that the item in combo (environment) changed.N)r{   itemTextitemDatasig_item_selectedr   r   r   )r:   r   namer   s       r1   r   zHomeTab._environment_selectedL  sR    *33E::,55e<<##D&)2DEEEEEr0   c                 D    | j                             |          | _        dS )z%Process change of application filter.N)ry   r   applications_filter)r:   r   s     r1   r   zHomeTab._filter_selectedR  s!    #'#4#=#=e#D#D   r0   c                     | j                                         r$| j                                         d         j        S dS )z?Return the last element of the list to be used in tab ordering.rG   N)rv   r   r   r=   s    r1   last_widgetzHomeTab.last_widgetV  s7     9?? 	09??$$R(//tr0   ApplicationFilterc                     | j         S )z/Current filter applied to the application list.)ru   r=   s    r1   r   zHomeTab.applications_filter]  s     ))r0   r   c                     | j         |k    rdS | j                            t          |         j                   || _         |                                  dS )z"Update `application_filter` value.N)ru   ry   r   rK   r#   r   )r:   r   s     r1   r   zHomeTab.applications_filterb  sW     %..F(()<U)C)PQQQ%*"  """""r0   c                 r    | j         | j        | j        | j        g}|| j                                        z  }|S )z%Return a list of the ordered widgets.)ry   r{   rw   rx   rv   ordered_widgets)r:   next_widgetr   s      r1   r   zHomeTab.ordered_widgetsl  sC     " 	
 	4944666r0   c                    | j                             |           | j                            |           | j                            |           | j                            |           | j                                        D ]N}|j                            |           |j                            |           |r|	                    |            OdS )zEnable or disable widgets.N)
ry   
setEnabledr{   rw   rx   rv   r   button_installbutton_optionsset_loading)r:   r   r   s      r1   r   zHomeTab.set_widgets_enabledx  s    $$U+++))%000''...&&u---IOO%% 	, 	,D**5111**5111 ,  U+++	, 	,r0   c                 x    | j         r0| j                                         D ]}|                                 dS dS )zUpdate status of items in list.N)rv   r   r   )r:   r   s     r1   update_itemszHomeTab.update_items  sP    9 	%	)) % %""$$$$	% 	%% %r0   rR   c           	         t          j                                                                                    }t	          |dz  d          }d}| j                                        }|                    |t          j	        t	          ||z                      }|                    |t          j	        t	          |d|z
  z                      }| j        
                    |           | j        
                    |           ||| j                            d           dS | j                            d           | j                            |           | j                            |           dS )z%Update the application action status.gUUUUUU?r   gffffff?rO   NFT)r	   desktopavailableGeometryr   roundr   r   
elidedTextr   
ElideRightsetTextr   r   r   
setMaximumsetValue)	r:   r   messager   r   r   max_status_lengthmsg_percentr   s	            r1   r   zHomeTab.update_status  sN    $&&88::@@BB!%9"5q99/;;==((FWZeFe@f@fgg))'2=%HY]^al]lHmBnBnoo ((000!!'***((/////((...((333&&u-----r0   c                 8    | j                                          dS )zUpdate custom CSS style sheet.N)rv   r   r=   s    r1   r   zHomeTab.update_style_sheet  s    	$$&&&&&r0   r   )r6   N)r6   r   )r   r   r6   N)rR   rR   NN)"r&   r'   r(   r)   r   objectr   r   r.   r   r   r   sig_install_action_requestedsig_remove_action_requestedr;   r   r   r   r   r   r   intr   r   rC   r   r   setterr   r   r   r   r   __classcell__)r   s   @r1   r   r      sc         vvv66 $VFF33 #)&vvW]_e"f"f "(PV!W!W fVnnO $*6&&#9#9 "(&"8"8Q, Q, Q, Q, Q, Q,j# # #6 6 6@   ,; ; ;
S S S"S S SF3 F4 F F F FEc Ed E E E E   X * * * X* # # #  #
 
 
 
, ,$ , , , ,% % %. . . .*' ' ' ' ' ' 'r0   )<r)   
__future__r   r   r   __all__r,   qtpy.QtCorer   r   qtpy.QtWidgetsr	   r
   r   r   r   #anaconda_navigator.api.anaconda_apir   anaconda_navigator.apir   	api_typesanaconda_navigator.utilsr   r   anaconda_navigator.widgetsr   r   r   r   r   r   r   r   r   r   %anaconda_navigator.widgets.lists.appsr   r   Literalr   
NamedTupler"   r3   r.   rH   rK   FinalMappingr+   Tupler  r*   rZ   
IconButtonr\   r_   rc   re   rg   r   r/   r0   r1   <module>r      s     A @ @ @ @ @ @ @ @ @+  " " " " " " " " W W W W W W W W W W W W W W ; ; ; ; ; ; 5 5 5 5 5 5 . . . . . . . . . . . . ? ? ? ? ? ?                    ] \ \ \ \ \ \ \ N#QR F F F F Fv0 F F FD D D D D D D D.r!8 rT r r r r $#$68P8PQQ))*BNNSWDXDXYY++,H..Y^J_J_``))*BOTT	b b V\&.1BD\1\"]^   3)@ 3V\RUW[]`beReEf 3 3 3 3,J J J J J1 J J J' ' ' ' 'l ' ' '' ' ' ' '< ' ' '' ' ' ' ' ' ' ': : : : :	 : : :^' ^' ^' ^' ^'j ^' ^' ^' ^' ^'r0   