a
     ³ŠaÝ!  ã                   @   sò   d Z ddlmZ ddlZddlZddlmZ ddlZddl	Z	ddl
mZ ddlmZmZ ddlmZmZmZmZmZmZmZ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d„ Z$G dd„ deƒZ%dd„ Z&e'dkrîe&ƒ  dS )úProject creation dialog.é    )Úprint_functionN)Úgetexistingdirectory)ÚQtÚSignal)Ú	QComboBoxÚQDialogÚQDialogButtonBoxÚQGridLayoutÚ	QGroupBoxÚQHBoxLayoutÚQLabelÚ	QLineEditÚQPushButtonÚQRadioButtonÚQVBoxLayout)Ú_Úget_home_dir)Úima)Úcreate_toolbutton)Úto_text_stringc              
   C   s\   zt j| d}| ¡  W n> tyV } z&|jtjkrBW Y d}~dS W Y d}~n
d}~0 0 dS )zCheck if path has write access)ÚdirNFT)ÚtempfileZTemporaryFileÚcloseÚOSErrorÚerrnoZEACCES)ÚpathZtestfileÚe© r   úLlib/python3.9/site-packages/spyder/plugins/projects/widgets/projectdialog.pyÚis_writable!   s    $r    c                       sF   e Zd ZdZeeeeƒZ‡ fdd„Zdd„ Z	ddd„Z
d	d
„ Z‡  ZS )ÚProjectDialogr   c           
         sÎ  t t| ƒj|d || _|| _i | _|  |  ¡ tj	 @ ¡ d 
ttjd ƒttjd ƒg¡}g d¢}||vr~| |¡ t|ƒ}d| _tƒ | _tƒ | _ttdƒƒ| _ttdƒƒ| _ttd	ƒƒ| _ttd
ƒƒ| _ttdƒƒ| _ttdƒƒ| _tƒ | _ttƒ ƒ| _ t!ƒ | _"t!ƒ | _#tdƒ| _$t%| | j&t' (d¡tdƒd| _)t*tdƒƒ| _+t*tdƒƒ| _,t-tj.ƒ| _/| j/ 0| j+t-j1¡ | j/ 0| j,t-j1¡ | j# 2|¡ | j 3d¡ | j  4d¡ | j  5d¡ | j+ 6d¡ | j+ 7d¡ | j, 4d¡ dd„ | 8¡ D ƒD ]\}}| j" 9||¡ qæ| j# :| ;|¡¡ |  <tdƒ¡ |  =d¡ | j >d¡ | j# >d¡ t?ƒ }| @| j¡ | @| j¡ | Ad¡ | j B|¡ tCƒ }| @| jdd¡ | @| jdddd¡ | @| jdd¡ | @| j dd¡ | @| j)dd¡ | @| jdd¡ | @| j"dddd¡ | @| jdd¡ | @| j#dddd¡ | @| j$dddd¡ tDƒ }	|	 @| j¡ |	 Ed¡ |	 F|¡ |	 A¡  |	 Ed¡ |	 @| j/¡ |  B|	¡ | j,jG H| jI¡ | j+jG H| jJ¡ | jjG H| jK¡ | jjG H| jK¡ | jjL H| jK¡ dS )r   )ÚparentÚ.r   é   )z2.7z3.4z3.5NzNew directoryzExisting directoryzProject nameZLocationzProject typezPython versionÚ ZDirOpenIconúSelect directory)Z	triggeredÚiconZtipZCancelZCreateTFc                 S   s   g | ]\}}||  ¡ f‘qS r   )Úget_name)Ú.0Zpt_idZptr   r   r   Ú
<listcomp>y   ó    z*ProjectDialog.__init__.<locals>.<listcomp>zCreate new projectiô  é   é   é   é
   é   )MÚsuperr!   Ú__init__ZpluginÚ_project_typesÚproject_dataZsetWindowFlagsZwindowFlagsr   ZWindowContextHelpButtonHintÚjoinr   ÚsysÚversion_infoÚappendÚsortedZproject_namer   Úlocationr   Zgroupboxr   r   Úradio_new_dirÚradio_from_dirr   Zlabel_project_nameZlabel_locationZlabel_project_typeZlabel_python_versionr   Útext_project_nameÚtext_locationr   Úcombo_project_typeZcombo_python_versionÚlabel_informationr   Úselect_locationr   r'   Zbutton_select_locationr   Zbutton_cancelÚbutton_creater	   Z
HorizontalZbboxZ	addButtonZ
ActionRoleZaddItemsZ
setCheckedÚ
setEnabledZsetReadOnlyZ
setDefaultZsetAutoDefaultÚitemsZaddItemZsetCurrentIndexÚindexZsetWindowTitleZsetFixedWidthZ
setVisibler   Z	addWidgetZ
addStretchZ	setLayoutr
   r   Z
addSpacingZ	addLayoutZclickedZconnectÚcreate_projectr   Úupdate_locationZtextChanged)
Úselfr"   Zproject_typesZcurrent_python_versionZpython_versionsZid_ÚnameZ
layout_topZlayout_gridZlayout©Ú	__class__r   r   r2   >   s°    ÿÿÿ

üÿÿ





zProjectDialog.__init__c                 C   s6   t  t| tdƒ| jƒ¡}|r2t|ƒr2|| _|  ¡  dS )zSelect directory.r&   N)ÚospÚnormpathr   r   r:   r    rG   )rH   r:   r   r   r   rA   ¨   s    ýÿzProjectDialog.select_locationr%   c                 C   sÚ   | j  | j ¡ ¡ | j  ¡  ¡ }|rR| j ¡ rRt | j|¡}| j	 
tj |¡¡ n0| j ¡ rp| j	 d¡ | j}n| j	 d¡ | j}| j |¡ | j ¡ }| j| j}|||ƒ\}}|rºdn|}| j |¡ | j	 |¡ dS )zUpdate text of location.TFr%   N)r=   rC   r;   Z	isCheckedÚtextÚstriprL   r5   r:   rB   ZsetDisabledÚosr   Úisdirr<   r>   ZsetTextr?   ÚcurrentDatar3   Úvalidate_namer@   )rH   rN   rI   r   Zproject_type_idZvalidate_funcZ	validatedÚmsgr   r   r   rG   ·   s"    

zProjectDialog.update_locationc                 C   s@   | j  ¡ | j ¡ dœ| _| j | j  ¡ | j ¡ g ¡ |  ¡  dS )zCreate project.)Z	root_pathZproject_typeN)r>   rN   r?   rR   r4   Úsig_project_creation_requestedÚemitZaccept)rH   r   r   r   rF   Ð   s    þýzProjectDialog.create_project)r%   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚobjectrU   r2   rA   rG   rF   Ú__classcell__r   r   rJ   r   r!   ,   s   j
r!   c                  C   sV   ddl m}  ddlm} G dd„ d|ƒ}| ƒ }tdd|iƒ}| ¡  t | ¡ ¡ dS )zLocal test.r   )Úqapplication)ÚBaseProjectTypec                   @   s$   e Zd Zedd„ ƒZedd„ ƒZdS )ztest.<locals>.MockProjectTypec                   S   s   dS )NZBoor   r   r   r   r   r(   å   s    z&test.<locals>.MockProjectType.get_namec                 S   s   dS )N)FzBOOM!r   )r   rI   r   r   r   rS   é   s    z+test.<locals>.MockProjectType.validate_nameN)rW   rX   rY   Ústaticmethodr(   rS   r   r   r   r   ÚMockProjectTypeã   s   
ra   NÚempty)	Úspyder.utils.qthelpersr^   Zspyder.plugins.projects.apir_   r!   Zshowr6   ÚexitZexec_)r^   r_   ra   ZappZdlgr   r   r   ÚtestÞ   s    re   Ú__main__)(rZ   Z
__future__r   r   rP   Úos.pathr   rL   r6   r   Zqtpy.compatr   Zqtpy.QtCorer   r   Zqtpy.QtWidgetsr   r   r	   r
   r   r   r   r   r   r   r   Zspyder.config.baser   r   Zspyder.utils.icon_managerr   rc   r   Zspyder.py3compatr   r    r!   re   rW   r   r   r   r   Ú<module>   s&   4 3