
    ce64                     |    d Z ddlmZmZ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 dad Z G d	 d
e          ZdS )zConda Packages Table model.    )QAbstractTableModelQModelIndexQSizeQt)QColorQIcon)	constants)sort_versions)MANAGER_TABLE_STYLESNc                  8   t           i a t          j                    D ]w\  } }|                     d          rt	          |          }nC|                     d          rt          |          }n|                     d          r	t          | }|t           | <   xt           S )zDTurn the styles palette into QIcons or QColors for use in the model.Nzicon.zcolor.zsize.)GLOBAL_PALLETEr   items
startswithr   r   r   )keyvalueitems      Hlib/python3.11/site-packages/anaconda_navigator/widgets/manager/model.pyprocess_palleter      s     .466 	' 	'JC~~g&& %U||)) %e}}(( %e}"&N3    c                   (    e Zd ZdZ fdZd Zed             Zej	        fdZ
eej	        fd            Z e            fdZe e            f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d Zd Zd Zd Zd Zd Zd Z  xZ!S )CondaPackagesModel=Abstract Model to handle the packages in a conda environment.c                     t                                          |           || _        || _        || _        d t          |          D             | _        t                      | _        dS )r   c                 :    i | ]\  }}|t           j                 |S  )CCOL_NAME).0irs      r   
<dictcomp>z/CondaPackagesModel.__init__.<locals>.<dictcomp>1   s$    LLLDAqq}aLLLr   N)	super__init___parent	_packages_rows	enumerate_name_to_indexr   _palette)selfparentpackagesdata	__class__s       r   r#   zCondaPackagesModel.__init__+   s]       !
LLIdOOLLL'))r   c                     |                      ||          }|                      ||          }| j                            ||           d S N)indexdataChangedemit)r*   rowcolumnstartends        r   _update_cellzCondaPackagesModel._update_cell4   sG    

3''jjf%%eS)))))r   c                     |                                  }|                                 r8|t          j        t          j        fv rt          j        t
          j                  S t          j        t
          j                  S Override Qt method.)r5   isValidr   	COL_STARTCOL_ENDr   	ItemFlagsItemIsEnabled)r1   r5   s     r   flagszCondaPackagesModel.flags9   sZ     ==?? 	21;	*B B B< 0111|B,---r   c                 
   |                                 r3d|                                cxk    rt          | j                  k     sn dS |                                }|                                }| j        }| j        |         |k    rt          j        }d}d}d}	d}
d}n| j        |         t          j                 }| j        |         t          j	                 }| j        |         t          j
                 }| j        |         t          j                 }	| j        |         t          j                 }
| j        |         t          j                 }|                     |                     |t          j                            }|t           j        k    rn|t          j	        k    r|S |t          j
        k    r|S |t          j        k    r|
S |t          j        k    r|S |t          j        k    r|	S |t          j        k    r|S n?|t           j        k    r|t          j
        t          j        fv r&t'          t           j        t           j        z            S |t          j        fv r&t'          t           j        t           j        z            S t'          t           j                  S |t           j        k    ri|t          j        k    r|t          j        k    ri|t          j        k    r|d         S |t          j        t          j        fv r|d         S |t          j        t          j        t          j        fv r|d         S n|t          j        k    r|d         S |t          j        k    r|d	         S |t          j        k    r|d
         S |t          j         k    r|d
         S |t          j!        k    r|d         S dS |t          j	        k    r2|t          j"        k    r|d         S |t          j#        k    r|d         S dS |t          j        k    r|r|d         S |d         S n'|t           j$        k    rJ|t          j	        k    r%|t          j"        k    rdS |t          j#        k    rdS n|t          j        k    r|rdS n|t           j%        k    r|t          j
        t          j        fv rW|t          j        t          j        t          j        t          j        fv rtM          d          S |t          j        fv r|d         S nL|t          j        fv r
|r|d         S n2|t           j'        k    r"|t          j(        t          j	        fv r|d         S dS )r;   r   N -zicon.action.not_installedzicon.action.installedzicon.action.addzicon.action.removezicon.action.upgradezicon.action.downgradezicon.anacondazicon.pythonzicon.upgrade.arrowzicon.spacerzConda packagezPython packagezUpdate availablez#000zcolor.foreground.not.installedzcolor.foreground.upgradez
size.icons))r<   r4   lenr&   r5   r)   r   ACTION_NONE
COL_ACTIONCOL_PACKAGE_TYPEr   COL_DESCRIPTIONCOL_VERSION
COL_STATUSis_upgradabler1   r   DisplayRoleTextAlignmentRoleint	AlignLeftAlignVCenterAlignCenterDecorationRoleNOT_INSTALLED
UPGRADABLEMIXGRADABLE	INSTALLEDDOWNGRADABLEACTION_INSTALLACTION_REMOVEACTION_UPGRADEACTION_UPDATEACTION_DOWNGRADECONDA_PACKAGEPIP_PACKAGEToolTipRoleForegroundRoler   SizeHintRoleACTION_COLUMNS)r*   r1   roler4   r5   Pactiontype_namedescriptionversionstatusrM   s                r   r-   zCondaPackagesModel.dataA   s    }} 	a599;;&H&H&H&HTZ&H&H&H&H4iikkM:c?c!!]FEDKGFFZ_Q\2FJsOA$67E:c?1:.D*S/!*;<Kjoam4GZ_Q\2F**4::c1=+I+IJJ2>!!+++##&&%%***""%% &R)))!*a&78882<"/9:::!-((2<"/9:::r~&&&R&&&%%Q]**00 !<==!,!>>> !899!+q~q}!MMM !899 Nq///.//q..122q///233q..233q11145541---AO++_--AM))]++t1=((  3122'' )
 R^##+++AO++*?AM))++ *AM))})))R&&&!*a&7888ak1<WWW!&>>)ao...=>> / Q]O+++344bo%%Fq7GI[6\,\,\\?"tr   c                    |t           j        k    r|t           j        k    r&t          t           j        t           j        z            S |t           j        k    r| t          j        k    rdS |t           j	        k    r\| t          j        k    rdS | t          j
        k    rdS | t          j        k    rdS | t          j        k    rdS | t          j        k    rdS dS dS )r;   zPackage type: Conda, PipTNameVersionDescriptionStatusN)r   
HorizontalrO   rP   rQ   rR   ra   r   rI   rN   r   rK   rJ   rL   )sectionorientationre   s      r   
headerDatazCondaPackagesModel.headerData   s     "-''r+++2<"/9:::&&W8J-J-J11r~%%a0003aj((!6am++$9a///(=al**#8ttr   c                 *    t          | j                  S r:   )rF   r&   )r*   r1   s     r   rowCountzCondaPackagesModel.rowCount   s    4:r   c                 4    t          t          j                  S r:   )rF   r   COLUMNSr1   s    r   columnCountzCondaPackagesModel.columnCount   s     19~~r   c                     | j         |         S )zReturn the row data.)r&   )r*   rownums     r   r4   zCondaPackagesModel.row   s    z&!!r   c                 .    |                      dd          S )zReturn the first model index.r   r{   r*   s    r   first_indexzCondaPackagesModel.first_index   s    zz!Qr   c                     |                      |                                 dz
  |                                 dz
            S )zReturn the last model index.   )r1   rx   r|   r   s    r   
last_indexzCondaPackagesModel.last_index   s4    zz$--//A-t/?/?/A/AA/EFFFr   c                     |t           j        v r=| j        |         }||         }| ||<   || j        |<   |                     ||           dS dS )zUpdate the model index icon.N)r   rd   r&   r8   )r*   r4   r5   r    actual_states        r   update_row_iconz"CondaPackagesModel.update_row_icon   s_    Q%%%
3AV9L((AfIDJsOc6***** &%r   c                     |                                 }| j        |         t          j                 }|t          j        k    S )z-Return if the pacakge index can be installed.)r4   r&   r   rL   rU   r*   model_indexr4   rl   s       r   is_installablez!CondaPackagesModel.is_installable   s0    ooC.((r   c                     |                                 }| j        |         t          j                 }|t          j        t          j        t          j        t          j        fv S )z5Return if the installed pacakge index can be removed.)r4   r&   r   rL   rV   rY   rX   rW   r   s       r   is_removablezCondaPackagesModel.is_removable   s?    ooC.!,Q]SSSr   c                     |                                 }| j        |         t          j                 }|t          j        t          j        fv S )z6Return if the installed pacakge index can be upgraded.)r4   r&   r   rL   rV   rW   r   s       r   rM   z CondaPackagesModel.is_upgradable   s7    ooC.!,666r   c                     |                                 }| j        |         t          j                 }|t          j        t          j        fv S )z8Return if the installed pacakge index can be downgraded.)r4   r&   r   rL   rY   rW   r   s       r   is_downgradablez"CondaPackagesModel.is_downgradable   s7    ooC.!.!-888r   c                 h    |                                 }| j        |         t          j                 }|S )z!Return the current action status.)r4   r&   r   rH   )r*   r   r4   action_statuss       r   r   z CondaPackagesModel.action_status   s)    oo
35r   Nc                     |                                 }|| j        |         t          j        <   || j        |         t          j        <   |                     ||                                           dS )zSet index status action.N)r4   r&   r   rH   COL_ACTION_VERSIONr8   r5   )r*   r   rl   rk   r4   s        r   set_action_statusz$CondaPackagesModel.set_action_status   s^    oo(.
3%07
3,-#{113344444r   c                 
   t          | j                  D ]m\  }}t          j        |t          j        <   d|t          j        <   |                     |t          j                   |                     |t          j                   ndS )z!Clear the selected conda actions.N)r'   r&   r   rG   rH   r   r8   )r*   r   r4   s      r   clear_actionsz CondaPackagesModel.clear_actions  sx    
++ 	7 	7FAs !C(,C$%a...a!56666		7 	7r   c                     d}| j         D ]K}|t          j                 }|t          j                 }|t          j        k    r|t          j        k    r|dz  }L|S )z3Return the number of conda remove actions selected.r   r   )r&   r   rH   rI   r[   r_   )r*   countr4   rg   rh   s        r   count_remove_actionsz'CondaPackagesModel.count_remove_actions  sY    : 	 	C&F*+E!/))0H0H
r   c                     d}| j         D ]`}|t          j                 }|t          j                 }|t          j        t          j        t          j        fv r|t          j        k    r|dz  }a|S )z<Return number of install/upgrade/downgrade actions selected.r   r   )r&   r   rI   rH   r^   rZ   r\   r_   r*   r   r4   rh   rg   s        r   count_install_actionsz(CondaPackagesModel.count_install_actions  sj    : 	 	C*+E&F1-q/?AQRRRY^bcbqYqYq
r   c                     d}| j         D ]J}|t          j                 }|t          j                 }|t          j        fv r|t          j        k    r|dz  }K|S )z<Return number of update (no version given) actions selected.r   r   )r&   r   rI   rH   r]   r_   r   s        r   count_update_actionsz'CondaPackagesModel.count_update_actions#  s\    : 	 	C*+E&F1?+++%1?2J2J
r   c                 
   t           j        t           j        g t           j        g t           j        g t           j        g t           j        g it           j        t           j        g ii}| j        D ]}|t           j	                 }|t           j
                 }|t           j                 }|t           j                 }|                     |          }|t           j        k    r)|}|}	||         |                             |||	d           |S )z"Return the selected conda actions.)ri   version_from
version_to)r   r_   rZ   r[   r\   r^   r]   r`   r&   rH   r   rI   r   get_package_versionrG   append)
r*   dicr4   rg   ri   rh   action_versioncurrent_versionr   r   s
             r   get_actionszCondaPackagesModel.get_actions-  s     O " ""B M
 : 	 	C&Fqz?D*+E !56N"66t<<O&&.+
E
6")) $0",+ +   
 
r   c                 l    d}| j         D ])}|t          j                 }|t          j        k    r|dz  }*|S )zCount selected actions.r   r   )r&   r   rH   rG   )r*   r   r4   rg   s       r   get_action_countz#CondaPackagesModel.get_action_countM  s@    : 	 	C&F&&
r   c                     | j                             |          }g }|r0t          t          |                    dg                               }|S )z
        Return the package canonical name for a given package `name`.

        name : str
            Name of the package
        versions)r%   getr
   list)r*   ri   package_datar   s       r   get_package_versionsz'CondaPackagesModel.get_package_versionsW  sQ     ~))$// 	M$T,*:*::r*J*J%K%KLLHr   c                     || j         v rR| j         |         }|                     |          t          j                 }|                    t          j        d          S dS )z6Return the package version for a given package `name`.rC   )r(   r4   r   rK   replaceUPGRADE_SYMBOL)r*   ri   r1   rk   s       r   r   z&CondaPackagesModel.get_package_versionf  sO    4&&&'-Ehhuooam4G??1#3R888rr   r0   )"__name__
__module____qualname____doc__r#   r8   staticmethodrA   r   rN   r-   rv   r   rx   r|   r4   r   r   r   r   r   rM   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r.   s   @r   r   r   (   s       GG* * * * ** * *
 . . \. !nh h h hT .0n    \0 )[]]     %+--    \" " "     G G G+ + +) ) )T T T7 7 79 9 9  5 5 5 57 7 7        @          r   r   )r   qtpy.QtCorer   r   r   r   
qtpy.QtGuir   r   anaconda_navigator.utilsr	   r   r
   anaconda_navigator.utils.stylesr   r   r   r   r   r   r   <module>r      s    " ! C C C C C C C C C C C C $ $ $ $ $ $ $ $ 3 3 3 3 3 3 2 2 2 2 2 2 @ @ @ @ @ @    D D D D D, D D D D Dr   