
:\c           @   s   d  Z  d d l m Z m Z m Z m 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 d
 a d   Z d e f d	     YZ d
 S(   s   Conda Packages Table model.i(   t   QAbstractTableModelt   QModelIndext   QSizet   Qt(   t   QColort   QIcont   QPalette(   t	   constants(   t   sort_versions(   t   MANAGER_TABLE_STYLESc          C   s   t  d k r i  a  x t j   D]p \ }  } |  j d  rI t |  } n< |  j d  rg t |  } n |  j d  r t |   } n  | t  |  <q Wn  t  S(   sD   Turn the styles palette into QIcons or QColors for use in the model.s   icon.s   color.s   size.N(   t   GLOBAL_PALLETEt   NoneR	   t   itemst
   startswithR   R   R   (   t   keyt   valuet   item(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   process_pallete   s    t   CondaPackagesModelc           B   s  e  Z d  Z d   Z d   Z e d    Z e j d  Z	 e e j d   Z
 e   d  Z e e   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  RS(   s=   Abstract Model to handle the packages in a conda environment.c         C   sZ   t  t |   j |  | |  _ | |  _ | |  _ d   t |  D |  _ t   |  _	 d S(   s=   Abstract Model to handle the packages in a conda environment.c         S   s&   i  |  ] \ } } | | t  j  q S(    (   t   Ct   COL_NAME(   t   .0t   it   r(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pys
   <dictcomp>4   s   	 N(
   t   superR   t   __init__t   _parentt	   _packagest   _rowst	   enumeratet   _name_to_indexR   t   _palette(   t   selft   parentt   packagest   data(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyR   .   s    			c         C   s;   |  j  | |  } |  j  | |  } |  j j | |  d  S(   N(   t   indext   dataChangedt   emit(   R    t   rowt   columnt   startt   end(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   _update_cell7   s    c         C   sg   |  j    } |  j   rS | t j t j g k r@ t j t j  St j t j  Sn t j t j  Sd S(   s   Override Qt method.N(   R(   t   isValidR   t	   COL_STARTt   COL_ENDR   t	   ItemFlagst   ItemIsEnabled(   R$   R(   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   flags<   s    c         C   s   | j    s9 d | j   k o3 t |  j  k  n r= d S| j   } | j   } |  j } |  j | | k r t j } d } d } d }	 d }
 d } nx |  j | t j } |  j | t j	 } |  j | t j
 } |  j | t j }	 |  j | t j }
 |  j | t j } |  j |  j | t j   } | t j k r| t j	 k rS| S| t j
 k rf| S| t j k ry|
 S| t j k r| S| t j k r|	 S| t j k r| SnG| t j k r&| t j
 t j g k rt t j t j B S| t j g k rt t j t j B St t j  Sn| t j k r| t j k r-| t j k r| t j k rj| d S| t j t j g k r| d S| t j t j t j g k r*| d Sq| 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 Sd Sq| t j	 k rq| t j" k rS| d S| t j# k rj| d Sd Sq| t j k r| r| d S| d Sqn`| t j$ k r| t j	 k r| t j" k rd S| t j# k rd Sq| t j k r| rd Sn | t j% k rt&   } | t j
 t j g k r| t j t j t j t j g k ru| j' t& j(  } t) d  } | S| t j g k r| j' t& j*  } | d } | Sq| t j g k r| r| d Sn/ | t j+ k r| t j, t j	 g k r| d Sd S(   s   Override Qt method.i    Nu    u   -is   icon.action.not_installeds   icon.action.installeds   icon.action.adds   icon.action.removes   icon.action.upgrades   icon.action.downgrades   icon.anacondas   icon.pythons   icon.upgrade.arrows   icon.spacers   Conda packages   Python packages   Update availables   #000s   color.foreground.not.installeds   color.foreground.upgrades
   size.icons(-   R,   R'   t   lenR   R(   R   R   t   ACTION_NONEt
   COL_ACTIONt   COL_PACKAGE_TYPER   t   COL_DESCRIPTIONt   COL_VERSIONt
   COL_STATUSt   is_upgradableR$   R   t   DisplayRolet   TextAlignmentRolet   intt	   AlignLeftt   AlignVCentert   AlignCentert   DecorationRolet   NOT_INSTALLEDt
   UPGRADABLEt   MIXGRADABLEt	   INSTALLEDt   DOWNGRADABLEt   ACTION_INSTALLt   ACTION_REMOVEt   ACTION_UPGRADEt   ACTION_UPDATEt   ACTION_DOWNGRADEt   CONDA_PACKAGEt   PIP_PACKAGEt   ToolTipRolet   ForegroundRoleR   t   colort
   WindowTextR   t   Midt   SizeHintRolet   ACTION_COLUMNS(   R    R$   t   roleR'   R(   t   Pt   actiont   type_t   namet   descriptiont   versiont   statusR9   t   paletteRO   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyR#   I   s    9				!
c         C   s   | t  j k r | t  j k r2 t t  j t  j B S| t  j k rT |  t j k rT d S| t  j	 k r |  t j k rv 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 Sd Sq n  d S(   s   Override Qt method.s   Package type: Conda, Pipt   Tt   Namet   Versiont   Descriptiont   StatusN(   R   t
   HorizontalR;   R<   R=   R>   RM   R   R5   R:   R   R7   R6   R8   (   t   sectiont   orientationRT   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt
   headerData   s"    c         C   s   t  |  j  S(   s   Override Qt method.(   R2   R   (   R    R$   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   rowCount   s    c         C   s   t  t j  S(   s   Override Qt method.(   R2   R   t   COLUMNS(   R$   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   columnCount   s    c         C   s   |  j  | S(   s   Return the row data.(   R   (   R    t   rownum(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyR'      s    c         C   s   |  j  d d  S(   s   Return the first model index.i    (   R$   (   R    (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   first_index   s    c         C   s$   |  j  |  j   d |  j   d  S(   s   Return the last model index.i   (   R$   Rf   Rh   (   R    (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt
   last_index   s    c         C   sU   | t  j k rQ |  j | } | | } | | | <| |  j | <|  j | |  n  d S(   s   Update the model index icon.N(   R   RS   R   R+   (   R    R'   R(   R   t   actual_state(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   update_row_icon   s    
c         C   s-   | j    } |  j | t j } | t j k S(   s-   Return if the pacakge index can be installed.(   R'   R   R   R8   RA   (   R    t   model_indexR'   R[   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   is_installable   s    c         C   sB   | j    } |  j | t j } | t j t j t j t j g k S(   s5   Return if the installed pacakge index can be removed.(   R'   R   R   R8   RB   RE   RD   RC   (   R    Rn   R'   R[   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   is_removable   s    c         C   s6   | j    } |  j | t j } | t j t j g k S(   s6   Return if the installed pacakge index can be upgraded.(   R'   R   R   R8   RB   RC   (   R    Rn   R'   R[   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyR9      s    c         C   s6   | j    } |  j | t j } | t j t j g k S(   s8   Return if the installed pacakge index can be downgraded.(   R'   R   R   R8   RE   RC   (   R    Rn   R'   R[   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   is_downgradable  s    c         C   s$   | j    } |  j | t j } | S(   s!   Return the current action status.(   R'   R   R   R4   (   R    Rn   R'   t   action_status(    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyRr     s    c         C   sN   | j    } | |  j | t j <| |  j | t j <|  j | | j    d S(   s   Set index status action.N(   R'   R   R   R4   t   COL_ACTION_VERSIONR+   R(   (   R    Rn   R[   RZ   R'   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   set_action_status  s    c         C   su   xn t  |  j  D]] \ } } t j |  j | t j <d |  j | t j <|  j | t j  |  j | t j  q Wd S(   s!   Clear the selected conda actions.N(   R   R   R   R3   R4   R   Rs   R+   (   R    R   R'   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   clear_actions  s
    c         C   s}   d } xp t  |  j  D]_ \ } } |  j | t j } |  j | t j } | t j k r | t j k r | d 7} q q W| S(   s3   Return the number of conda remove actions selected.i    i   (   R   R   R   R4   R5   RG   RK   (   R    t   countR   R'   RV   RW   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   count_remove_actions  s    c         C   s   d } x t  |  j  D]n \ } } |  j | t j } |  j | t j } | t j t j t j g k r | t j k r | d 7} q q W| S(   s<   Return number of install/upgrade/downgrade actions selected.i    i   (	   R   R   R   R5   R4   RJ   RF   RH   RK   (   R    Rv   R   R'   RW   RV   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   count_install_actions&  s    c         C   s   d } xs t  |  j  D]b \ } } |  j | t j } |  j | t j } | t j g k r | t j k r | d 7} q q W| S(   s<   Return number of update (no version given) actions selected.i    i   (   R   R   R   R5   R4   RI   RK   (   R    Rv   R   R'   RW   RV   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   count_update_actions2  s    !c         C   s!  i i g  t  j 6g  t  j 6g  t  j 6g  t  j 6g  t  j 6t  j 6i g  t  j 6t  j 6} x t |  j	  D] \ } } |  j	 | t  j
 } |  j	 | t  j } |  j	 | t  j } |  j	 | t  j } |  j |  } | t  j k rf | }	 | }
 | | | j i | d 6|	 d 6|
 d 6 qf qf W| S(   s"   Return the selected conda actions.RX   t   version_fromt
   version_to(   R   RF   RG   RH   RJ   RI   RK   RL   R   R   R4   R   R5   Rs   t   get_package_versionR3   t   append(   R    t   dicR   R'   RV   RX   RW   t   action_versiont   current_versionRz   R{   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   get_actions<  s0    



c         C   sZ   d } xM t  |  j  D]< \ } } |  j | t j } | t j k r | d 7} q q W| S(   s   Count selected actions.i    i   (   R   R   R   R4   R3   (   R    Rv   R   R'   RV   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   get_action_count^  s    c         C   sC   |  j  j |  } g  } | r? t t | j d g     } n  | S(   s   
        Return the package canonical name for a given package `name`.

        name : str
            Name of the package
        t   versions(   R   t   getR   t   list(   R    RX   t   package_dataR   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   get_package_versionsh  s
    !c         C   sM   | |  j  k rE |  j  | } |  j |  t j } | j t j d  Sd Sd S(   s6   Return the package version for a given package `name`.t    u    N(   R   R'   R   R7   t   replacet   UPGRADE_SYMBOL(   R    RX   R$   RZ   (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyR|   w  s
    N(!   t   __name__t
   __module__t   __doc__R   R+   t   staticmethodR1   R   R:   R#   Re   R   Rf   Rh   R'   Rj   Rk   Rm   Ro   Rp   R9   Rq   Rr   R   Rt   Ru   Rw   Rx   Ry   R   R   R   R|   (    (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyR   +   s8   			p												
		
	"	
	N(   R   t   qtpy.QtCoreR    R   R   R   t
   qtpy.QtGuiR   R   R   t   anaconda_navigator.utilsR   R   R   t   anaconda_navigator.utils.stylesR	   R   R
   R   R   (    (    (    sG   lib/python2.7/site-packages/anaconda_navigator/widgets/manager/model.pyt   <module>   s   "	