
    cea?                        d Z ddlmZmZmZmZ ddlZddlmZm	Z	m
Z
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 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&m'Z'm(Z( ddl)m*Z* ddl+m,Z, ej        Z- G d de#          Z. G d de!          Z/ G d de!          Z0 G d de"          Z1 G d de!          Z2 G d de!          Z3 G d de           Z4 G d de          Z5 G d de'          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; G d* d+e          Z<dS ),zConda Packager Manager Widget.    )absolute_importdivisionprint_functionwith_statementN)QEventQSizeQtSignal)QApplicationQDialogButtonBoxQHBoxLayoutQProgressBarQPushButtonQVBoxLayoutQWidget)AnacondaAPI)CONF)	constants)	telemetry)common)

ButtonBaseButtonDangerButtonNormalButtonPrimaryComboBoxBase	FrameBaseFrameTabFooterFrameTabHeader	LabelBaseSpacerHorizontal)LineEditSearch)TableCondaPackagesc                   D     e Zd ZdZ ee          Z fdZd Zd Z	 xZ
S )ComboBoxPackageFilterCombobox used in CSS styling.c                 x     t                      j        |i | | j                            | j                   dS )r%   N)super__init__currentIndexChangedconnect_handle_index_changed)selfargskwargs	__class__s      Klib/python3.11/site-packages/anaconda_navigator/widgets/manager/packages.pyr(   zComboBoxPackageFilter.__init__-   s?    $)&))) (()CDDDDD    c                     t          |t                    r/| j                            |                     |                     dS dS )z#Recreate signal not present in qt4.N)
isinstanceintcurrentTextChangedemititemTextr,   indexs     r0   r+   z+ComboBoxPackageFilter._handle_index_changed2   sG    eS!! 	?#((u)=)=>>>>>	? 	?r1   c                     t          |                                           D ]3}||                     |          k    r|                     |            dS 4dS )z#Recreate method not present in qt4.N)rangecountr7   setCurrentIndex)r,   textis      r0   setCurrentTextz$ComboBoxPackageFilter.setCurrentText7   sb    tzz||$$ 	 	At}}Q''''$$Q''' (	 	r1   )__name__
__module____qualname____doc__r
   strr5   r(   r+   r@   __classcell__r/   s   @r0   r$   r$   (   so        ''E E E E E
? ? ?
      r1   r$   c                       e Zd ZdZdS )ButtonPackageChannelsButton used in CSS styling.NrA   rB   rC   rD    r1   r0   rI   rI   ?           %%%%r1   rI   c                       e Zd ZdZdS )ButtonPackageOkrJ   NrK   rL   r1   r0   rO   rO   C   rM   r1   rO   c                       e Zd ZdZdS )ButtonPackageApplyrJ   NrK   rL   r1   r0   rQ   rQ   G   rM   r1   rQ   c                       e Zd ZdZdS )ButtonPackageCancelrJ   NrK   rL   r1   r0   rS   rS   K   rM   r1   rS   c                       e Zd ZdZdS )ButtonPackageUpdaterJ   NrK   rL   r1   r0   rU   rU   O   rM   r1   rU   c                       e Zd ZdZdS )ButtonPackageClearrJ   NrK   rL   r1   r0   rW   rW   S   rM   r1   rW   c                       e Zd ZdZdS )ProgressBarPackagez!Progress bar used in CSS styling.NrK   rL   r1   r0   rY   rY   W   s        ++++r1   rY   c                       e Zd ZdZdS )LabelPackageStatusLabel used in CSS styling.NrK   rL   r1   r0   r[   r[   [           $$$$r1   r[   c                       e Zd ZdZdS )LabelPackageStatusActionr\   NrK   rL   r1   r0   r_   r_   _   r]   r1   r_   c                       e Zd ZdZdS )FramePackageTopFrame used in CSS styling.NrK   rL   r1   r0   ra   ra   c   r]   r1   ra   c                       e Zd ZdZdS )FramePackageBottomrb   NrK   rL   r1   r0   rd   rd   g   r]   r1   rd   c                   Z     e Zd ZdZ e            Zd fd	Zed             Zd Z	d Z
 xZS )FirstRowWidget=Widget located before table to handle focus in and tab focus.Nc                     t                                                       || _        |                     t          j                   dS )rg   N)r'   r(   widget_beforesetAttributer	   WA_LayoutUsesWidgetRect)r,   ri   r/   s     r0   r(   zFirstRowWidget.__init__s   s>    *"455555r1   c                  "    t          dd          S Override Qt method.r   r   rL   r1   r0   sizeHintzFirstRowWidget.sizeHinty        Q{{r1   c                 8    | j                                          dS rn   N)sig_enter_firstr6   r,   events     r0   focusInEventzFirstRowWidget.focusInEvent~   s    !!#####r1   c                     |                                 t          j        k    r>|                                }|t          j        fv r| j                                         dS t          j	        | |          S rn   T)
typer   KeyPresskeyr	   Key_Tabrt   r6   r   rv   r,   rv   r|   s      r0   rv   zFirstRowWidget.event   s`    ::<<6?**))++Crzl""$))+++t u---r1   N)rA   rB   rC   rD   r
   rt   r(   staticmethodrp   rw   rv   rF   rG   s   @r0   rf   rf   n   s        GGfhhO6 6 6 6 6 6   \$ $ $. . . . . . .r1   rf   c                   f     e Zd ZdZ e            Zd	 fd	Zd Zd Zd Z	d Z
ed             Z xZS )
LastRowWidget=Widget located after table to handle focus out and tab focus.Nc                     t                                                       |pg | _        |                     t          j                   |                     t          j                   dS )r   N)r'   r(   widgets_afterrj   r	   rk   setFocusPolicyStrongFocus)r,   r   r/   s     r0   r(   zLastRowWidget.__init__   sY    *0b"4555BN+++++r1   c                 8    | j                                          dS rs   )sig_enter_lastr6   ru   s     r0   rw   zLastRowWidget.focusInEvent   s      """""r1   c                 P    || j         v rdS | j                             |           dS )zAdd after focus widget.N)r   append)r,   widgets     r0   add_focus_widgetzLastRowWidget.add_focus_widget   s2    T'''F!!&)))))r1   c                     | j         D ]-}|                                r|                                  dS .|                                  dS )zHandle tab focus widget.N)r   	isVisiblesetFocus)r,   ws     r0   
handle_tabzLastRowWidget.handle_tab   sP    # 	 	A{{}} 

 	r1   c                     |                                 t          j        k    r>|                                }|t          j        fv r| j                                         dS t          j	        | |          S ry   )
rz   r   r{   r|   r	   Key_Backtabr   r6   r   rv   r~   s      r0   rv   zLastRowWidget.event   sa    ::<<6?**))++Cr~&&&#((***t u---r1   c                  "    t          dd          S rm   ro   rL   r1   r0   rp   zLastRowWidget.sizeHint   rq   r1   r   )rA   rB   rC   rD   r
   r   r(   rw   r   r   rv   r   rp   rF   rG   s   @r0   r   r      s        GGVXXN, , , , , ,# # #* * *  . . .   \    r1   r   c                       e Zd ZdZ e            Z e            Z eee          Z eee          Z	 ee          Z
 ee          Zef fd	Zd Zd ZddZd Zd Zd	 Zd
 Zd Zd Zd Zd Zd ZddZd Z xZS )CondaPackagesWidgetConda Packages Widget.c                     t                                          |           | _        d _        d _        d _        d _        t                       _        d _	        d _
        | _        t          t          j                   _        t!          d           _        t%          t'          d                     _        t+          t'          d                     _        t/          t'          d                     _        t3          t'          d                     _        t7          t'          d	                     _        t;                      _        t?                       _         tC                       _"        tG                      _$        tK                      _&        tO                      _(        tS                      _*        tW                      _,         j         j         j         j,         j*         j         j         j        g _-        t]           j,        
           _/        ta           j         j         j        g           _1         j&        2                                3                                } j,        2                                4                    d          } j        5                     j        t          j6                    j        7                    tq          dd                      j        9                    d            j        :                    d            j        ;                    tx          j=        dd                     j        >                    d            j$        ?                    t          |dz                        j$        A                    |dz              j$        B                    d            j$        9                    d            C                    tq          dd                      D                    t'          d                      j&        E                    t          |dz                        j,        A                    |            j,        >                    |            j,        F                    d            j/        ?                    d            j1        ?                    d            j1        9                    d            j/        9                    d           t          jH                     _I        t                      }|K                     j        dt          jL                   |K                    t                                 |K                     j        dt          jL                   |K                    t                                 |K                     j        dt          jL                   |N                                 |K                     j,        dt          jL                    j         O                    |           t                      }|K                     j/                   |K                     jI                   |K                     j*                   |K                     j1                   t                      }|K                     j(                   |K                    t                                 |K                     j&                   |N                                 |K                     j$                   |K                    t                                 |K                     j                   |K                    t                                 |K                     j                   |K                    t                                 |K                     j                    j"        O                    |           t                     }|K                     j                    |Q                    |           |K                     j"                    O                    |            j        jR        S                     fd            j        jT        S                     jU                    j        jR        S                     jV                    j        jR        S                     jW                    j        jR        S                     jX                    j        jR        S                     jY                    j,        jZ        S                     j[                    j*        j\        S                     j]                    j*        j^        S                     j_                    j*        j`        S                     j1        ja                    j*        jb        S                     j/        jc        jd                    j/        je        S                     jf                    j1        jg        S                     jh                    j        9                    d           dS )r   N FCancelChannelsOkzUpdate index...ApplyClear)ri   )r   000000000000000000000000r   Tx   g333333?   i  i,  zConda Package Managerg      ?zSearch Packagesc                  L     j                             t          j                  S r   )sig_cancel_requestedr6   CTAB_ENVIRONMENTr,   s   r0   <lambda>z.CondaPackagesWidget.__init__.<locals>.<lambda>5  s    43L3Q3QRSRc3d3d r1   )ir'   r(   _parent_current_model_index_current_action_name_current_table_scroll_hide_widgetsr   apiprefixmessageconfigr   r	   
HorizontalbboxrS   button_cancelrI   _button_channelsrO   	button_okrU   button_updaterQ   button_applyrW   button_clearr$   combobox_filterr   	frame_topr   frame_bottomrY   progress_barr[   label_statusr_   label_status_actionr"   tabler!   textbox_searchwidgetsrf   table_first_rowr   table_last_rowfontMetricsheightwidth	addButton
ActionRolesetMaximumSizer   
setVisiblesetCheckableaddItemsr   COMBOBOX_VALUES_ORDEREDsetMinimumWidthsetMaximumHeightr4   setMaximumWidthsetTextVisiblesetMinimumSizesetWindowTitlesetFixedHeightsetPlaceholderTextglobal_commonsTeamEditionServerAlertte_alertr   	addWidgetAlignCenterr    
addStretch	setLayoutr   	addLayoutclickedr*   r5   filter_packageapply_multiple_actionsclear_actionsshow_channelsupdate_package_indextextChangedsearch_packagesig_actions_updatedupdate_actionssig_status_updatedupdate_statussig_next_focusr   sig_previous_focusri   r   rt   _handle_tab_focusr   _handle_backtab_focus)
r,   parentr   
max_height	max_width
top_layoutmiddle_layoutbottom_layoutlayoutr/   s
   `        r0   r(   zCondaPackagesWidget.__init__   s      $(!$&!%)""== %R]33	0::4Qz]]CC(41103D1E1EFF.qzz::.qzz::4T::'))*,,.t44.t44#;D#A#A '--
,T22 4d6JDL_aeakND-t/@
  .D<OPPP+;
    &2244;;==
'3355;;HEE		DN,<,GHHH%%eAqkk222!!%((())$///%%a&?&BCCC,,S111**3zC/?+@+@AAA))*r/:::((///$$U+++E#sOO,,,A566777((Z#-=)>)>???++I666++I666../@AAA--a000,,Q///&&u---''...&=?? !]]
T11bnEEE-//000T11bnEEE-//000T/BNCCCT0!R^DDD  ,,,# 4555...
+++ 3444# 8999 0 2 2333 1222  """ 1222 0 2 2333 2333 0 2 2333 1222 0 2 2333 1222##M222T""((('''*+++v 	"**+d+d+d+deee/778KLLL!))$*EFFF!))$*<===$,,T-?@@@"**4+DEEE'//0CDDD
&..t/BCCC
%--d.@AAA
!))$*=*HIII
%--d.B.P.YZZZ,44T5KLLL*2243MNNN%%e,,,,,r1   c                     | j                                          | j         j        r<| j         j                            dd          }| j                             |           d S d S )Nr   )r   r   proxy_modelr9   r=   r8   s     r0   r   z%CondaPackagesWidget._handle_tab_focusH  sc    
:! 	.J*00A66EJ&&u-----	. 	.r1   c                 
   | j                                          | j         j        r]| j         j                                        dz
  }| j         j                            |d          }| j                             |           d S d S )N   r   )r   r   r   rowCountr9   r=   )r,   rowr9   s      r0   r   z)CondaPackagesWidget._handle_backtab_focusN  s~    
:! 	.*(1133a7CJ*00a88EJ&&u-----	. 	.r1   Nc                 0   | j                             ||           | j                                        }| j                            |           |                     |           | j                                          | j                                         dS )aY  
        Setup packages.

        Populate the table with `packages` information.

        Parameters
        ----------
        packages: dict
            Grouped package information by package name.
        blacklist: list of str
            List of conda package names to be excluded from the actual package
            manager view.
        N)	r   setup_modelr   currentTextr@   r   r   	sig_readyr6   )r,   packages
model_datar   combobox_texts        r0   setupzCondaPackagesWidget.setupW  s     	
x444,88::++M:::M***
r1   c                     | j                                         }|t          j                 }|t          j                 }| j                            ||           dS )z#Apply multiple actions on packages.N)r   get_actionsr   PIP_PACKAGECONDA_PACKAGEsig_packages_action_requestedr6   )r,   actionspip_actionsconda_actionss       r0   r   z*CondaPackagesWidget.apply_multiple_actionsn  sL    *((**am,0*//{KKKKKr1   c                 8    | j                                          dS )zClear the table actions.N)r   r   r   s    r0   r   z!CondaPackagesWidget.clear_actionsv  s    
  """""r1   c                 :    | j                             |           dS )zFilter packages by type.N)r   filter_status_changedr,   values     r0   r   z"CondaPackagesWidget.filter_packagez  s    
((/////r1   c                 :    | j                             |           dS )z#Search and filter packages by text.N)r   search_string_changed)r,   r>   s     r0   r   z"CondaPackagesWidget.search_package~  s    
((.....r1   c                 Z    | j                             | j        t          j                   dS )zShow channel dialog.N)sig_channels_requestedr6   r   r   r   r   s    r0   r   z!CondaPackagesWidget.show_channels  s3    #(( 	
 	
 	
 	
 	
r1   c                     | j                             t          |                     | j                            t          |                     dS )z.Update visibility of buttons based on actions.N)r   r   boolr   )r,   number_of_actionss     r0   r   z"CondaPackagesWidget.update_actions  sH    $$T*;%<%<===$$T*;%<%<=====r1   c                     t           j        j                            dddi           | j                            t          j                   dS )zUpdate pacakge index.zupdate-indexreasonzuser-requestN)r   	ANALYTICSinstancerv   sig_update_index_requestedr6   r   ENVIRONMENT_PACKAGE_MANAGERr   s    r0   r   z(CondaPackagesWidget.update_package_index  sC    $**>Hn;UVVV',,Q-JKKKKKr1   c                     d S r   rL   r   s    r0   ordered_widgetsz#CondaPackagesWidget.ordered_widgets  s    r1   c                    | j                             |           | j                            |           | j                            |           | j                            |            | j                            |            dS )z1Set the enabled status of widgets and subwidgets.N)r   
setEnabledr   r   r   r   r  s     r0   set_widgets_enabledz'CondaPackagesWidget.set_widgets_enabled  s~    
e$$$$$U+++$$U+++%%%i000%%%i00000r1   r   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 status of package widget.

        - progress == None and max_value == None -> Not Visible
        - progress == 0 and max_value == 0 -> Busy
        - progress == n and max_value == m -> Progress values
        g      ?r   gffffff?r   NFT)r   desktopavailableGeometryr   roundr   r   
elidedTextr	   
ElideRightsetTextr   r   r   
setMaximumsetValue)	r,   actionr   r  	max_valuer   max_status_lengthmsg_percentfms	            r0   r   z!CondaPackagesWidget.update_status  sJ    $&&88::@@BB!%9"5q99%1133vr}e<MP[<[6\6\]]-->OSTWbSb>c8d8dee ((000!!'***((/////((...((333&&u-----r1   c                     dS )zUpdate custom CSS style sheet.NrL   r   s    r0   update_style_sheetz&CondaPackagesWidget.update_style_sheet  s      r1   )NNN)r   r   NN)rA   rB   rC   rD   r
   r   r   objectr	  r  r  r   r   r(   r   r   r  r   r   r   r   r   r   r   r   r#  r   r3  rF   rG   s   @r0   r   r      s         IVXXN %+F66$:$:! $VFF33 "(!6&>>&* y- y- y- y- y- y-z. . .. . .   .L L L# # #0 0 0/ / /
 
 
> > >
L L L  1 1 1. . . .6- - - - - - -r1   r   )=rD   
__future__r   r   r   r   gettextqtpy.QtCorer   r   r	   r
   qtpy.QtWidgetsr   r   r   r   r   r   r   #anaconda_navigator.api.anaconda_apir   anaconda_navigator.configr   anaconda_navigator.utilsr   r   r   anaconda_navigator.widgetsr   r   r   r   r   r   r   r   r   r   r   r    (anaconda_navigator.widgets.helperwidgetsr!   (anaconda_navigator.widgets.manager.tabler"   r   r$   rI   rO   rQ   rS   rU   rW   rY   r[   r_   ra   rd   rf   r   r   rL   r1   r0   <module>r?     s!   % $ P P P P P P P P P P P P  1 1 1 1 1 1 1 1 1 1 1 1 w w w w w w w w w w w w w w w w w w ; ; ; ; ; ; * * * * * * 3 3 3 3 3 3 . . . . . . ? ? ? ? ? ?                        D C C C C C G G G G G G O    L   .& & & & &L & & && & & & &l & & && & & & & & & && & & & &, & & && & & & &, & & && & & & & & & &, , , , , , , ,% % % % % % % %% % % % %y % % %% % % % %i % % %% % % % % % % %. . . . .Z . . .<* * * * *J * * *^A- A- A- A- A-' A- A- A- A- A-r1   