
    G@d.                         d Z ddlZddlmZ ddlZddlZddlZddl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 Zdd	Zd
 Zd ZddZd Z G d de          ZdS )zExplorer widget utilities.    N)	QFileInfoSlot)QFileIconProviderQMessageBox)_)encoding)imac                    t           j        dk    rt          j        dd| g           d S t          j        dk    rmt          j                            |           rt          j        dd| g           d S t          j        dt          j                            |           g           d S t          j                            |           } t          j        d| g           d S )Ndarwinopenz-Rntexplorerz/select,zxdg-open)	sysplatform
subprocesscallosnamepathexistsdirname)filenames    Elib/python3.11/site-packages/spyder/plugins/explorer/widgets/utils.pyopen_file_in_external_explorerr      s    
|xx011111	D7>>(## 	EOZX>?????OZ)B)BCDDDDD7??8,,X./////    c                 l    t          | t          t          f          s| g} | D ]}t          |           dS )zcShow files in external file explorer

    Args:
        fnames (list): Names of files to show.
    N)
isinstancetuplelistr   )fnamesfnames     r   show_in_external_file_explorerr"   '   sK     fudm,,  . .&u----. .r   c                     t           j        dk    rt          j        nt          j        } |t          j        t          j        |                               S )zANormalize path fixing case, making absolute and removing symlinksr   )r   r   ospnormcasenormpathabspathrealpath)r   norms     r   fixpathr*   3   s=    7d??3<<D4CL..//000r   c           	      f   t           j                            g d          }	 t          j        t          |          | d           dS # t          $ r^}t          j        t          d          t          d          t          j        |           t          |          fz             Y d}~dS d}~ww xY w)zCreate a new Python script)z# -*- coding: utf-8 -*- r,   zutf-8z
Save Errorz;<b>Unable to save file '%s'</b><br><br>Error message:<br>%sN)r   linesepjoinr   writestrEnvironmentErrorr   criticalr   r$   basename)r!   texterrors      r   create_scriptr6   9   s    :??>>>??DFs4yy%11111 F F FQ|__  > ! !$'L$7$7U#DE	F 	F 	F 	F 	F 	F 	F 	F 	FFs   #A 
B0AB++B0.
\.pyc$|^\.Fc                    g }t          t          j                  g}t          j        t          |                     D ]}t          j        ||          rt          j        t          j        | |                    r|	                    |           U|rXt          j        ||          r|	                    |           t          |t           j                  t          |t           j                  z   S )zList files and directories)key)r0   r$   pardirr   listdirresearchisdirr.   appendsortedlower)r   includeexcludefolders_onlynamelistdirlistitems          r   r<   r<   E   s    H3:G
3t99%% " "9Wd## 	9SXdD))** 	"NN4     	"Yw%% 	"OOD!!!'sy)))F8,K,K,KKKr   c                 |    	 t          t          | ||d                    dk    S # t          t          f$ r Y dS w xY w)z&Return True if path has subdirectoriesT)rE      F)lenr<   IOErrorOSError)r   rC   rD   s      r   has_subdirectoriesrN   U   sR    74'EEEFFJJW   uus   #& ;;c                   p     e Zd ZdZ fdZ ee           ee           fd                        Z xZ	S )IconProviderz!Project tree widget icon providerc                 d    t          t          |                                            || _        d S N)superrP   __init__treeview)selfrU   	__class__s     r   rT   zIconProvider.__init__a   s*    lD!!**,,, r   c                    t          |t          j                  r(t          t          |                               |          S |}t          j        t          |	                                                    }t          j
        |          st          j        |          rt          j        |d          }nt          j        d          }|S )zReimplement Qt methodg      ?)scale_factorbinary)r   r   IconTyperS   rP   iconr$   r&   r0   absoluteFilePathisfiler?   r	   get_icon_by_extension_or_type)rV   icontype_or_qfileinfo	qfileinfor!   r\   rW   s        r   r\   zIconProvider.icone   s     +->-GHH 
	t,,112GHHH-ILY%?%?%A%A!B!BCCEz%   *CIe$4$4 *8FIK K K x))Kr   )
__name__
__module____qualname____doc__rT   r   intr   r\   __classcell__)rW   s   @r   rP   rP   ^   s}        ++! ! ! ! ! 
T#YY	T)__    _ Y    r   rP   rR   )r7   r8   F)re   r   os.pathr   r$   r=   r   r   qtpy.QtCorer   r   qtpy.QtWidgetsr   r   spyder.api.translationsr   spyder.utilsr   spyder.utils.icon_managerr	   r   r"   r*   r6   r<   rN   rP    r   r   <module>ro      sR   !   
			       				     



 ( ' ' ' ' ' ' ' 9 9 9 9 9 9 9 9 & % % % % % ! ! ! ! ! ! ) ) ) ) ) )
0 
0 
0	. 	. 	. 	.1 1 1	F 	F 	FL L L L       $     r   