ó
‹²,]c           @  s,  d  Z  d d l m Z d d l Z d d l j Z d d l Z d d l m	 Z	 d d l
 m Z m Z 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 d d l m Z d d	 l m Z d d
 l m Z d d l  m! Z! d e f d „  ƒ  YZ" d „  Z# e$ d k r(e# ƒ  n  d S(   s   Spyder path manageriÿÿÿÿ(   t   print_functionN(   t   getexistingdirectory(   t   Qtt   Signalt   Slot(   t   QDialogt   QDialogButtonBoxt   QHBoxLayoutt   QListWidgett   QListWidgetItemt   QMessageBoxt   QVBoxLayoutt	   QCheckBox(   t   _(   t   getcwd_or_home(   t   icon_manager(   t   create_toolbutton(   t   PY2t   PathManagerc           B  s×   e  Z e e ƒ Z d d d d e d  „ Z e d „  ƒ Z	 d „  Z
 d „  Z e d „ Z e ƒ  d „  ƒ Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d d „ Z d d d „ Z e ƒ  d „  ƒ Z e ƒ  d „  ƒ Z RS(   c   
      C  sÌ  t  j |  | ƒ |  j t j ƒ t | t ƒ s5 t ‚ | |  _ | d  k rS g  } n  | |  _
 | d  k rq g  } n  | |  _ t ƒ  |  _ |  j t d ƒ ƒ |  j t j d ƒ ƒ |  j d d ƒ g  |  _ t ƒ  } |  j | ƒ t ƒ  } | j | ƒ |  j | ƒ |  _ t |  ƒ |  _ |  j j j |  j ƒ |  j j  j |  j! ƒ | j" |  j ƒ t ƒ  } | j | ƒ d  |  _# |  j$ | | ƒ |  _% t& t& j' ƒ }	 |	 j( j |  j) ƒ | j" |	 ƒ |  j* ƒ  |  j ƒ  d  S(   Ns   PYTHONPATH managert
   pythonpathiô  i,  (+   R   t   __init__t   setAttributeR   t   WA_DeleteOnCloset
   isinstancet   listt   AssertionErrort   pathlistt   Nonet   not_active_pathlistt   ro_pathlistR   t	   last_patht   setWindowTitleR   t   setWindowIcont   imat   icont   resizet   selection_widgetsR   t	   setLayoutR   t	   addLayoutt   setup_top_toolbart   toolbar_widgets1R   t
   listwidgett   currentRowChangedt   connectt   refresht   itemChangedt   update_not_active_pathlistt	   addWidgett   sync_buttont   setup_bottom_toolbart   toolbar_widgets2R   t   Closet   rejectedt   rejectt   update_list(
   t   selft   parentR   R   R   t   synct   layoutt
   top_layoutt   bottom_layoutt   bbox(    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyR   !   sB    										
c         C  s)   g  |  j  D] } | |  j k r
 | ^ q
 S(   N(   R   R   (   R7   t   path(    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyt   active_pathlistU   s    c         C  s2   | j  t j ƒ x | D] } | j | ƒ q Wd  S(   N(   t   setAlignmentR   t	   AlignLeftR/   (   R7   R:   t   widgetst   widget(    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyt   _add_widgets_to_layoutZ   s    c      
     sN  g  } t  ˆ  d t d ƒ d t j d ƒ d ‡  f d †  d t ƒ} | j | ƒ t  ˆ  d t d ƒ d t j d	 ƒ d ‡  f d
 †  d t ƒ} | j | ƒ t  ˆ  d t d ƒ d t j d ƒ d ‡  f d †  d t ƒ} | j | ƒ t  ˆ  d t d ƒ d t j d ƒ d ‡  f d †  d t ƒ} | j | ƒ ˆ  j j | ƒ ˆ  j | | ƒ | S(   Nt   texts   Move to topR"   t   2uparrowt	   triggeredc             s   ˆ  j  d d ƒ S(   Nt   absolutei    (   t   move_to(    (   R7   (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyt   <lambda>d   t    t   text_beside_icons   Move upt   1uparrowc             s   ˆ  j  d d ƒ S(   Nt   relativeiÿÿÿÿ(   RI   (    (   R7   (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyRJ   j   RK   s	   Move downt
   1downarrowc             s   ˆ  j  d d ƒ S(   NRN   i   (   RI   (    (   R7   (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyRJ   p   RK   s   Move to bottomt
   2downarrowc             s   ˆ  j  d d ƒ S(   NRH   i   (   RI   (    (   R7   (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyRJ   v   RK   (	   R   R   R!   R"   t   Truet   appendR$   t   extendRD   (   R7   R:   t   toolbart   movetop_buttont   moveup_buttont   movedown_buttont   movebottom_button(    (   R7   s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyR'   _   s8    								c         C  s*  g  } t  |  d t d ƒ d t j d ƒ d |  j d t ƒ} | j | ƒ t  |  d t d ƒ d t j d ƒ d |  j d t ƒ} | j | ƒ |  j j | ƒ |  j	 | | ƒ | j
 d	 ƒ t j d
 k r&| r&t  |  d t d ƒ d t j d ƒ d |  j d t d ƒ d t ƒ|  _ | j |  j ƒ n  | S(   NRE   s   Add pathR"   t   edit_addRG   RL   s   Remove patht   edit_removei   t   nts   Synchronize...t
   fileimportt   tipsC   Synchronize Spyder's path list with PYTHONPATH environment variable(   R   R   R!   R"   t   add_pathRQ   RR   t   remove_pathR$   RD   t
   addStretcht   ost   namet   synchronizeR0   R/   (   R7   R:   R9   RT   t
   add_buttont   remove_button(    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyR1   }   s,    					c   	      C  s;  t  j |  t d ƒ t d ƒ t  j t  j Bt  j Bƒ } | t  j k rH d S| t  j k r` t } n t } d d l m	 } m
 } m } | ƒ  } | r¤ |  j |  j } ns | j d g  ƒ } t | t ƒ sÑ | g } n  g  | D]" } | |  j |  j k rØ | ^ qØ } | j |  j |  j ƒ | | d <| | | ƒ d |  ƒd S(   s   
        Synchronize Spyder's path list with PYTHONPATH environment variable
        Only apply to: current user, on Windows platforms
        t   Synchronizes  This will synchronize Spyder's path list with <b>PYTHONPATH</b> environment variable for current user, allowing you to run your Python modules outside Spyder without having to configure sys.path. <br>Do you want to clear contents of PYTHONPATH before adding Spyder's path list?Niÿÿÿÿ(   t   get_user_envt   set_user_envt   listdict2envdictt
   PYTHONPATHR8   (   R
   t   questionR   t   Yest   Not   CancelRQ   t   Falset   spyder.utils.environRg   Rh   Ri   R?   R   t   getR   R   RS   (	   R7   t   answert   removeRg   Rh   Ri   t   envt   ppathR>   (    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyRc   –   s(    			"
c         C  s   |  j  S(   s;   Return path list (does not include the read-only path list)(   R   (   R7   (    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyt   get_path_list¹   s    c         C  sE   | j  ƒ  } t | j ƒ  ƒ t k r4 |  j | ƒ n |  j | ƒ d  S(   N(   RE   t   boolt
   checkStateRQ   t   remove_from_not_active_pathlistt   add_to_not_active_pathlist(   R7   t   itemR>   (    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyR.   ½   s    c         C  s&   | |  j  k r" |  j  j | ƒ n  d  S(   N(   R   RR   (   R7   R>   (    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyRz   Ä   s    c         C  s&   | |  j  k r" |  j  j | ƒ n  d  S(   N(   R   Rs   (   R7   R>   (    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyRy   È   s    c         C  s  |  j  j ƒ  xé |  j |  j D]× } t | ƒ } | j t j d ƒ ƒ | |  j k r | j t	 j
 t	 j Bƒ | j t	 j ƒ nf | |  j k r» | j | j ƒ  t	 j Bƒ | j t	 j ƒ n* | j | j ƒ  t	 j Bƒ | j t	 j ƒ |  j  j | ƒ q W|  j ƒ  d S(   s   Update path listt   DirClosedIconN(   R)   t   clearR   R   R	   t   setIconR!   R"   t   setFlagsR   t   NoItemFlagst   ItemIsUserCheckablet   setCheckStatet   CheckedR   t   flagst	   Uncheckedt   addItemR,   (   R7   Rb   R{   (    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyR6   Ì   s    c         C  sk   x- |  j  D]" } | j |  j j ƒ  d k	 ƒ q
 W|  j j ƒ  d k } |  j d k	 rg |  j j | ƒ n  d S(   s   Refresh widgeti    N(   R$   t
   setEnabledR)   t   currentItemR   t   countR0   (   R7   t   rowRC   t	   not_empty(    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyR,   Þ   s
     c         C  s²   |  j  j ƒ  } | d  k	 r@ | r7 t |  j ƒ d } qJ d } n
 | | } t d t t |  j ƒ d | ƒ ƒ } |  j j | ƒ } |  j j | | ƒ |  j	 ƒ  |  j  j
 | ƒ d  S(   Ni   i    (   R)   t
   currentRowR   t   lenR   t   maxt   mint   popt   insertR6   t   setCurrentRow(   R7   RH   RN   t   indext	   new_indexR>   (    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyRI   æ   s    	
%
c         C  sƒ   t  j |  t d ƒ t d ƒ t  j t  j Bƒ } | t  j k r |  j j |  j j ƒ  ƒ |  j	 |  j j
 ƒ  j ƒ  ƒ |  j ƒ  n  d  S(   Ns   Remove paths+   Do you really want to remove selected path?(   R
   t   warningR   Rl   Rm   R   R   R)   RŒ   Ry   Rˆ   RE   R6   (   R7   Rr   (    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyR_   õ   s    	c         C  sx  |  j  j t ƒ t |  t d ƒ |  j ƒ } |  j  j t ƒ | rtt } t rª y | j d ƒ Wn t	 k
 rw t } n X| rª t
 j |  t d ƒ t d ƒ t
 j ƒ d  Sn  t j | ƒ } | |  _ | |  j k rT|  j j | t j ƒ d } | j t j ƒ t
 j |  t d ƒ t d ƒ t
 j t
 j Bƒ } | t
 j k rM|  j j | ƒ qTd  Sn  |  j j d | ƒ |  j ƒ  n  d  S(   Ns   Select directoryt   asciis   Add pathsd   You are using Python 2 and the path selected has Unicode characters. The new path will not be added.i    si   This directory is already included in Spyder path list.<br>Do you want to move it to the top of the list?(   t   redirect_stdiot   emitRo   R   R   R   RQ   R   t   decodet   UnicodeEncodeErrorR
   R•   t   Okt   ospt   abspathR   R)   t	   findItemsR   t   MatchExactlyR‚   Rƒ   Rk   Rl   Rm   Rs   R‘   R6   (   R7   t	   directoryt
   is_unicodeR{   Rr   (    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyR^      s<    
	
		N(   t   __name__t
   __module__R   Rw   R—   R   RQ   R   t   propertyR?   RD   R'   R1   R   Rc   Rv   R.   Rz   Ry   R6   R,   RI   R_   R^   (    (    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyR      s"   	3		#					c          C  s]   d d l  m }  |  ƒ  } t d d t j d  d t j d ƒ} | j ƒ  t | j ƒ  ƒ d S(   s   Run path manager testiÿÿÿÿ(   t   qapplicationR   iöÿÿÿR   N(	   t   spyder.utils.qthelpersR¥   R   R   t   sysR>   t   exec_t   printRv   (   R¥   t   _appt   test(    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyR«   '  s    	
t   __main__(%   t   __doc__t
   __future__R    Ra   t   os.pathR>   Rœ   R§   t   qtpy.compatR   t   qtpy.QtCoreR   R   R   t   qtpy.QtWidgetsR   R   R   R   R	   R
   R   R   t   spyder.config.baseR   t   spyder.utils.miscR   t   spyder.utilsR   R!   R¦   R   t   spyder.py3compatR   R   R«   R¢   (    (    (    s9   lib/python2.7/site-packages/spyder/widgets/pathmanager.pyt   <module>   s"   :ÿ 
	
