
    G@d,,                         d Z ddlZddl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 ddlmZ ddlmZ ddlmZ ddlmZ  G d	 d
e          Z G d de          Z G d de          ZdS )Project Explorer    N)QSortFilterProxyModelQtSignalSlot)QAbstractItemViewQHeaderViewQMessageBox)_)to_text_string)misc)DirViewc                   \     e Zd ZdZg dZdgZ fdZd Zej	        fdZ
d Zd Zd	 Z xZS )

ProxyModelz Proxy model to filter tree view.)
z.spyproject__pycache__z.ipynb_checkpointsz.gitz.hgz.svnz.pytest_cachez	.DS_Storez	Thumbs.dbz
.directoryz.githubc                     t          t          |                               |           d| _        g | _        |                     d           dS )zInitialize the proxy model.NT)superr   __init__	root_path	path_listsetDynamicSortFilterselfparent	__class__s     Olib/python3.11/site-packages/spyder/plugins/projects/widgets/projectexplorer.pyr   zProxyModel.__init__2   sI    j$((000!!$'''''    c                     t          j        t          |                    | _        d |D             | _        |                                  dS )z
        Setup proxy model filter parameters.

        Parameters
        ----------
        root_path: str
            Root path of the proxy model.
        path_list: list
            List with all the paths.
        c                 P    g | ]#}t          j        t          |                    $S  )ospnormpathstr.0ps     r   
<listcomp>z+ProxyModel.setup_filter.<locals>.<listcomp>E   s(    BBB1#,s1vv..BBBr   N)r!   r"   r#   r   r   invalidateFilter)r   r   r   s      r   setup_filterzProxyModel.setup_filter9   sH     c)nn55BB	BBBr   c                 V    |                                                      ||           dS )Reimplement Qt method.N)sourceModelsort)r   columnorders      r   r-   zProxyModel.sortH   s*    .....r   c           	         | j         dS |                                                     |d|          }t          j        t          j        t          |                                                     |                                        t          j        | j                                                 rdS d | j	        D             D ]s}|k    s"                    |t          j        z             rIt          fd| j        D                       s&t          fd| j        D                       r dS  dS  dS tdS )r+   NTr   c                 6    g | ]}t          j        |          S r    )r!   normcaser$   s     r   r'   z/ProxyModel.filterAcceptsRow.<locals>.<listcomp>X   s     >>>!cl1oo>>>r   c                 T    g | ]$}                     t          j        |z             %S r    endswithossepr%   dpaths     r   r'   z/ProxyModel.filterAcceptsRow.<locals>.<listcomp>Z   ;      =  =  =$% !%bfqj 9 9  =  =  =r   c                 T    g | ]$}                     t          j        |z             %S r    r4   r8   s     r   r'   z/ProxyModel.filterAcceptsRow.<locals>.<listcomp>\   r;   r   F)r   r,   indexr!   r2   r"   r#   filePath
startswithr   r6   r7   anyPATHS_TO_SHOWPATHS_TO_HIDE)r   rowparent_indexr=   r&   r:   s        @r   filterAcceptsRowzProxyModel.filterAcceptsRowL   su   >!4  ""((a>>|CL  ""++E22335 5 6 6 <''22488 	4>>t~>>>  199BF
 ; ;9  =  =  =  =)-); =  =  = > > $  =  =  =  =)-); =  =  = > > (#(55#'44#tt  ur   c                    |t           j        k    rb| j        d                             t          j                  d         }|                                |k    rt	          j        | j        |          S t          j        | ||          S )z8Show tooltip with full path only for the root directory.r   )
r   ToolTipRoler   splitr!   r7   datajoinr   r   )r   r=   roleroot_dirs       r   rJ   zProxyModel.dataf   sl    2>!!~a(..sw77;Hzz||x''x999$)$t<<<r   c                 v    |                                                      |                     |                    S )z
        Returns the type of file for the given index.

        Parameters
        ----------
        index: int
            Given index to search its type.
        )r,   typemapToSource)r   r=   s     r   rO   zProxyModel.typen   s2     !!&&t'7'7'>'>???r   )__name__
__module____qualname____doc__rB   rA   r   r)   r   AscendingOrderr-   rE   rJ   rO   __classcell__r   s   @r   r   r      s        **  M" 	M( ( ( ( (      "$!2 / / / /  4= = =	@ 	@ 	@ 	@ 	@ 	@ 	@r   r   c                   T     e Zd ZdZd fd	Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Z xZS )FilteredDirViewz"Filtered file/directory tree view.Nc                     t                                          |           d| _        |                                  d| _        dS )z!Initialize the filtered dir view.N)r   r   
proxymodelsetup_proxy_modelr   r   s     r   r   zFilteredDirView.__init__|   s?          r   c                 l    t          |           | _        | j                            | j                   dS )zSetup proxy model.N)r   r[   setSourceModelfsmodelr   s    r   r\   z!FilteredDirView.setup_proxy_model   s/    $T**&&t|44444r   c                 L    | j         |                     | j                   dS dS )zInstall proxy model.N)r   setModelr[   r`   s    r   install_modelzFilteredDirView.install_model   s,    >%MM$/***** &%r   c                 
   || _         |                                  | j                            |          }| j                            | j         g            |                     | j                            |                     dS )z~
        Set root path.

        Parameters
        ----------
        root_path: str
            New path directory.
        N)r   rc   r_   setRootPathr[   r)   setRootIndexmapFromSource)r   r   r=   s      r   set_root_pathzFilteredDirView.set_root_path   sv     #((33$$T^R888$/77>>?????r   c                     | j                             |          }|                                r5|                                | j         u r| j                            |          S dS dS )z
        Return index associated with filename.

        Parameters
        ----------
        filename: str
            String with the filename.
        N)r_   r=   isValidmodelr[   rg   )r   filenamer=   s      r   	get_indexzFilteredDirView.get_index   sc     ""8,,==?? 	8u{{}}<<?00777	8 	8<<r   c                 v      j         J  fd|D             } j                             j         |           dS )z
        Set folder names

        Parameters
        ----------
        folder_names: list
            List with the folder names.
        Nc                 D    g | ]}t          j        j        |          S r    )r!   rK   r   )r%   dirnamer   s     r   r'   z4FilteredDirView.set_folder_names.<locals>.<listcomp>   s7     2 2 2  Xdng66 2 2 2r   )r   r[   r)   )r   folder_namesr   s   `  r   set_folder_namesz FilteredDirView.set_folder_names   s[     ~)))2 2 2 2$02 2 2	$$T^Y?????r   c                     |rS| j                             | j                            |                    }t	          j        t          |                    S dS )z
        Return filename from index

        Parameters
        ----------
        index: int
            Index of the list of filenames
        N)r_   r>   r[   rP   r!   r"   r#   )r   r=   r:   s      r   get_filenamezFilteredDirView.get_filename   sQ      	+<(()D)DU)K)KLLD<D		***	+ 	+r   c                 d    dD ]}|                      |           |                     d           dS )zSetup view for projects.)         TN)
hideColumnsetHeaderHidden)r   is     r   setup_project_viewz"FilteredDirView.setup_project_view   s@     	 	AOOAT"""""r   c                     |rm|                                 r[|                     d          r|                     |           }n|                     |          }|                     ||           d S d S d S )Nsingle_click_to_open)rj   get_conf
isExpandedsetExpanded)r   rp   r=   states       r   directory_clickedz!FilteredDirView.directory_clicked   s     	+U]]__ 	+}}344 / OOE222..UE*****	+ 	+ 	+ 	+r   N)rQ   rR   rS   rT   r   r\   rc   rh   rm   rr   rt   r|   r   rV   rW   s   @r   rY   rY   z   s        ,,     5 5 5
+ + +
@ @ @8 8 8@ @ @+ + +# # #+ + + + + + +r   rY   c                       e Zd ZdZ e            Zd	dZ ee          d             Z	d Z
d Z e            d
d            ZdS )ProjectExplorerTreeWidgetzExplorer tree widgetTc                     t                               | |           d | _        |                     t           j                   || _        |                     d           |                     t           j                   d S )NT)	rY   r   last_foldersetSelectionModeExtendedSelectionshow_hscrollbarsetDragEnabledsetDragDropModeDragDrop)r   r   r   s      r   r   z"ProjectExplorerTreeWidget.__init__   sr      v...o?@@@. 	D!!!_566666r   c                 T   |                      d|           || _        |                                                     |            |                                                     t
          j                   |                                                     t          j	                   dS )zToggle horizontal scrollbarr   N)
set_confr   headersetStretchLastSectionsetHorizontalScrollModer   ScrollPerPixelsetSectionResizeModer	   ResizeToContents)r   checkeds     r   toggle_hscrollbarz+ProjectExplorerTreeWidget.toggle_hscrollbar   s     	'111&++K888--.?.NOOO**;+GHHHHHr   c                 *   |                      |                                          }|rU|                     |          }t          j        |          r|                                 dS |                                 dS |                                 dS )Reimplement Qt methodN)indexAtposrt   r!   isdiracceptProposedActionignore)r   eventr=   dsts       r   dragMoveEventz'ProjectExplorerTreeWidget.dragMoveEvent   s    UYY[[)) 	##E**Cy~~ **,,,,,LLNNNNNr   c                 @   |                                  |                                }|t          j        t          j        fvrdS |                     |                     |                                                    }d\  }}d |                                	                                D             }t          |          dk    rAt          j        t          j        z  t          j        z  t          j        z  t          j        z  }nt          j        t          j        z  }|D ]y}||k    r
t#          j        |t#          j        |                    }	t#          j        |	          r|||rLnt#          j        |	          rt          j        | t/          d          t/          d          |	z  |          }
|
t          j        k    r|
t          j        k    r dS |
t          j        k    rd}nt|
t          j        k    rd}n`t          j        | t/          d          t/          d          |	z  t          j                   |                    t          j                    dS 	 |t          j        k    r@t#          j        |          rt7          j        ||           ntt7          j        ||           n^t#          j        |          rt=          j        ||           nt7          j         ||           | j!        j"        #                    |           # tH          $ r}}|t          j        k    rt/          d	          }nt/          d
          }t          j        | t/          d          t/          d          ||tK          |          fz             Y d}~sd}~ww xY wdS )r   N)NNc                 P    g | ]#}t          |                                          $S r    )r   toString)r%   urls     r   r'   z7ProjectExplorerTreeWidget.dropEvent.<locals>.<listcomp>  s8     8 8 8 #3<<>>22 8 8 8r   rv   zProject explorerz>File <b>%s</b> already exists.<br>Do you want to overwrite it?Tz Folder <b>%s</b> already exists.copymover   z9<b>Unable to %s <i>%s</i></b><br><br>Error message:<br>%s)&r   
dropActionr   
MoveAction
CopyActionrt   r   r   mimeDataurlslenr
   YesYesToAllNoNoToAllCancelr!   rK   basenameexistsisfilewarningr   criticalOksetDropActionshutilr   copytreer   	move_filer   parent_widgetremovedemitEnvironmentErrorr#   )r   r   actionr   
yes_to_all	no_to_allsrc_listbuttonssrc	dst_fnameanswererror
action_strs                r   	dropEventz#ProjectExplorerTreeWidget.dropEvent   s   !!##"-777F
 UYY[[ 9 9:: *
I8 8$~~//44668 8 8x==1")=="~&(3(;<")*GG "o6G :	 :	Cczzcl3&7&788Iz)$$ )Y-B  ! !Z	** (0,-- 9 : :<EF F // ;#555;#777%)

;#666$(	  7  (,--<==	I#	   ''666FFR]**z# 2C----S1111z# .sC0000C---&.33C888#   R]**!"6JJ!"6J$()) 5 6 69CS9<U9EE       _:	 :	s   $B.L
NA2NNNc                    ||                                  }t          |          dk    }d}|D ]P}|| j        j        d         k    r| j                                         2|                     |||          }||s dS QdS )zDelete filesNrv   r   )get_selected_filenamesr   r[   r   sig_delete_projectr   delete_file)r   fnamesmultipler   fnames        r   deletez ProjectExplorerTreeWidget.deleteK  s     >0022Fv;;?
 	 	E1!444',,....!--eXzJJ
)*)EE	 	r   )Tr   )rQ   rR   rS   rT   r   r   r   r   boolr   r   r   r   r    r   r   r   r      s        7 7 7 7 
T$ZZI I ZI
 
 
N N N` 
TVV   V  r   r   )rT   r6   os.pathr:   r!   r   qtpy.QtCorer   r   r   r   qtpy.QtWidgetsr   r	   r
   spyder.api.translationsr   spyder.py3compatr   spyder.utilsr   (spyder.plugins.explorer.widgets.explorerr   r   rY   r   r    r   r   <module>r      so    
 
			        @ ? ? ? ? ? ? ? ? ? ? ? F F F F F F F F F F & % % % % % + + + + + +       < < < < < <\@ \@ \@ \@ \@& \@ \@ \@~X+ X+ X+ X+ X+g X+ X+ X+vD D D D D D D D D Dr   