
    Je$                         d 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	 Z G d
 de      Z d Z!e"dk(  r e!        yy)Project creation dialog.    N)getexistingdirectory)QtSignal)	QComboBoxQDialogQDialogButtonBoxQGridLayout	QGroupBoxQHBoxLayoutQLabel	QLineEditQPushButtonQRadioButtonQVBoxLayout)_get_home_dir)ima)create_toolbuttonc                     	 t        j                  |       }|j                          y# t        $ r,}|j                  t        j
                  k(  rY d}~yY d}~yd}~ww xY w)zCheck if path has write access)dirNFT)tempfileTemporaryFilecloseOSErrorerrnoEACCES)pathtestfilees      O/usr/lib/python3/dist-packages/spyder/plugins/projects/widgets/projectdialog.pyis_writabler"      sS    ))d3   77ell" #s   &) 	AAAc                   L     e Zd ZdZ eeee      Z	  fdZd Z	ddZ
d Z xZS )ProjectDialogr   c                    t         t        |   |       || _        || _        i | _        | j                  | j                         t        j                   z         d| _
        t               | _        d}t        t        d      j                  |            | _        | j                   j#                  d       | j                   j%                  d       t'               | _        t+        t        d            | _        t+        t        d            | _        t        t        d            | _        t        t        d	            | _        t        t        d
            | _        t7               | _        t7        t                     | _        t=               | _        t        d      | _         | j@                  jC                          tE        | | jF                  tI        jJ                  d      t        d            | _&        tO        t        d            | _(        tO        t        d            | _)        tU        t        jV                        | _,        | jX                  j[                  | jP                  tT        j\                         | jX                  j[                  | jR                  tT        j\                         | j,                  j_                  d       | j:                  ja                  d       | j:                  jc                  d       | jP                  je                  d       | jP                  jg                  d       | jR                  ja                  d       |ji                         D cg c]  \  }}||jk                         f c}}D ]!  \  }}| j>                  jm                  ||       # | jo                  t        d             tq               }|js                  | j,                         |ju                  d       |js                  | j.                         |ju                  d       | j(                  jw                  |       ty               }	|	js                  | j0                  dd       |	js                  | j8                  dddd       |	js                  | j2                  dd       |	js                  | j:                  dd       |	js                  | jL                  dd       |	js                  | j4                  dd       |	js                  | j>                  dddd       |	js                  | j@                  dddd       t{               }
|
js                  | j                          |
ju                  d       |
js                  | j(                         |
ju                  d       |
j}                  |	       |
ju                  d       |
js                  | jX                         |
j                  |
j                         | jw                  |
       | jR                  j                  j                  | j                         | jP                  j                  j                  | j                         | j.                  j                  j                  | j                         | j,                  j                  j                  | j                         | j8                  j                  j                  | j                         yc c}}w )r   )parentNz6http://docs.spyder-ide.org/current/panes/projects.htmlzSelect a new or existing directory to create a new Spyder project in it. To learn more about projects, take a look at our <a href="{0}">documentation</a>.TzNew directoryzExisting directoryzProject nameLocationzProject type DirOpenIconSelect directory)	triggeredicontipCancelCreateFzCreate new project      r               )Gsuperr$   __init__plugin_project_typesproject_datasetWindowFlagswindowFlagsr   WindowContextHelpButtonHintproject_namer   locationr   r   formatdescription_labelsetOpenExternalLinkssetWordWrapr   groupboxr   radio_new_dirradio_from_dirlabel_project_namelabel_locationlabel_project_typer   text_project_nametext_locationr   combo_project_typelabel_informationhider   select_locationr   r,   button_select_locationr   button_cancelbutton_creater	   
Horizontalbbox	addButton
ActionRole
setChecked
setEnabledsetReadOnly
setDefaultsetAutoDefaultitemsget_nameaddItemsetWindowTitler   	addWidget
addSpacing	setLayoutr
   r   	addLayoutsetSizeConstraintSetFixedSizeclickedconnectcreate_projectr   update_locationtextChanged)selfr&   project_typesprojects_urlpt_idptid_name
layout_toplayout_gridlayout	__class__s              r!   r7   zProjectDialog.__init__:   sU   mT+6+:+""@"@!@@	B !$ P!' 7 88>|8L"

 	33D9**40!)!O*<=*1-A+BC"(>):";$Qz]3"(>):";!*&|~6"++!'##%&7**-($%	'
# )85(85$R]]3			D..0@0K0KL		D..0@0K0KL 	%%d+%%d+&&t,%%d+))$/%%e,,2246yubUBKKM2 6 	7KS$##++D#6	7 	A234 !]
T//0b!T001c"
+!md55q!<d44aAqAd111a8d00!Q7d991a@d55q!<d55q!QBd44aAqA//0!'!%!#  !4!45v 	""**4+>+>?""**4::6##++D,@,@A""**4+?+?@**2243G3GHS6s   %[/c                    t        j                  t        | t        d      | j                              }|rX|dk7  rRt        |      rF|| _        | j                  j                  t        j                  |             | j                          yyyy)zSelect directory.r*   .N)
ospnormpathr   r   r?   r"   rJ   setTextbasenameri   )rk   r?   s     r!   rO   zProjectDialog.select_location   sz    << $%
 C8$ (&&..s||H/EF$$& % (8    c                 $   d}d}| j                   }| j                  j                         j                         }| j                  j	                  | j
                  j                                | j                  j                  d       | j                  j                          |r^| j
                  j                         rDt        j                  | j                   |      }t        j                  |       }|sit        d      }n]| j                  j                         rC| j                   }t        j                  t        j                  |d             }|st        d      }| j                  j                  |       | j                   j#                         }| j$                  |   j&                  } |||      \  }}	|s|r	|dz   |	z   }n|	}|r8| j                  j)                          | j                  j                  d|z          |xr |}
| j*                  j	                  |
       |
r7| j*                  j-                  d       | j*                  j/                  d       y	| j0                  j-                  d       | j0                  j/                  d       y	)
z(Update text of location and validate it.r(   FzThis directory already exists!z.spyprojectz+This directory is already a Spyder project!z


TN)r?   rJ   textstriprX   rE   	isCheckedrM   rz   rN   rx   joinisdirr   rF   rK   rL   currentDatar9   validate_nameshowrR   rZ   r[   rQ   )rk   r   msgpath_validationr   rq   project_type_idvalidate_funcproject_name_validationproject_msg	validateds              r!   ri   zProjectDialog.update_location   s   }}%%**,224 	))$*<*<*F*F*HI&&r*##%D&&00288DMM40D"%))D/1O"89  **, ==D"%))CHHT=,I"JJO"EF 	""4( 11==?++O<JJ/<T4/H,&Fl[0! ""'')""**4#:6 $?(?	%%i0 ))$/--d3))$/--d3r|   c                 2   | j                   j                         | j                  j                         d| _        | j
                  j                  | j                   j                         | j                  j                         g        | j                          y)zCreate project.)	root_pathproject_typeN)rK   r   rL   r   r:   sig_project_creation_requestedemitaccept)rk   s    r!   rh   zProjectDialog.create_project   sz     ++002 33??A
 	++00##%##//1	

 	r|   )r(   )__name__
__module____qualname____doc__r   strobjectr   r7   rO   ri   rh   __classcell__)ru   s   @r!   r$   r$   (   s2    "%+Cf%="cIJ' 84tr|   r$   c                      ddl m}  ddlm}  G d d|      } |        }t	        dd|i      }|j                          t        j                  |j                                y)zLocal test.r   )qapplication)BaseProjectTypec                   ,    e Zd Zed        Zed        Zy)test.<locals>.MockProjectTypec                       y)NBoo r   r|   r!   r]   z&test.<locals>.MockProjectType.get_name   s    r|   c                      y)N)FzBOOM!r   )r   rq   s     r!   r   z+test.<locals>.MockProjectType.validate_name  s    !r|   N)r   r   r   staticmethodr]   r   r   r|   r!   MockProjectTyper      s(    		 
	 
	" 
	"r|   r   Nempty)	spyder.utils.qthelpersr   spyder.plugins.projects.apir   r$   r   sysexitexec_)r   r   r   appdlgs        r!   testr      sI    3;"/ " .C
w8
9CHHJHHSYY[r|   __main__)#r   r   os.pathr   rx   r   r   qtpy.compatr   qtpy.QtCorer   r   qtpy.QtWidgetsr   r   r	   r
   r   r   r   r   r   r   r   spyder.config.baser   r   spyder.utils.icon_managerr   r   r   r"   r$   r   r   r   r|   r!   <module>r      sp       
  - "D D D D
 / ) 4LG L^* zF r|   