
    Je͐                        d Z ddlZddlmZ ddlmZ ddlmZm	Z	m
Z
m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mZmZmZmZmZmZmZ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* dd	l+m,Z, dd
l-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8  G d de(      Z9 G d de:      Z; G d de(      Z< G d de<e;      Z= G d de=      Z> G d d      Z?y)z&
Preferences plugin public facing API
    N)API)getexistingdirectorygetopenfilenamefrom_qvariantto_qvariant)QtSignalSlotQRegExp)QColorQRegExpValidatorQTextOption)QButtonGroup	QCheckBox	QComboBoxQDoubleSpinBoxQFileDialogQFontComboBoxQGridLayout	QGroupBoxQHBoxLayoutQLabel	QLineEditQMessageBoxQPlainTextEditQPushButtonQRadioButtonQSpinBox
QTabWidgetQVBoxLayoutQWidget)_)CONF)	NoDefault)to_text_string)ima)getcwd_or_home)ColorLayout)FileComboBoxc                       e Zd ZdZy)BaseConfigTabz#Stub class to declare a config tab.N)__name__
__module____qualname____doc__     @/usr/lib/python3/dist-packages/spyder/plugins/preferences/api.pyr+   r+   &   s    -r1   r+   c                   4    e Zd ZdZdZ	 	 ddZedfdZddZy)ConfigAccessMixinz0Namespace for methods that access config storageNc                 V    || j                   n|}t        j                  ||||       y )N)recursive_notification)CONF_SECTIONr#   set)selfoptionvaluesectionr6   s        r2   
set_optionzConfigAccessMixin.set_option/   s)    '.$##G&%(>	@r1   c                 P    || j                   n|}t        j                  |||      S N)r7   r#   get)r9   r:   defaultr<   s       r2   
get_optionzConfigAccessMixin.get_option5   s&    '.$##Gxx11r1   c                 P    || j                   n|}t        j                  ||       y r?   )r7   r#   remove_option)r9   r:   r<   s      r2   rD   zConfigAccessMixin.remove_option9   s#    '.$##G7F+r1   NFr?   )	r,   r-   r.   r/   r7   r=   r$   rB   rD   r0   r1   r2   r4   r4   +   s'    :L04*/@ *3D 2,r1   r4   c                   l    e Zd ZdZ ee      Z e       ZddZd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zy)
ConfigPagez0Base class for configuration page in PreferencesNc                 Z    t        j                  | |       d | _        || _        d| _        y rE   )r!   __init__pre_apply_callbackapply_callbackis_modified)r9   parentrK   s      r2   rI   zConfigPage.__init__E   s.    v& #' - r1   c                 D    | j                          | j                          y)z
        Initialize configuration page:
            * setup GUI widgets
            * load settings and change widgets accordingly
        N)
setup_pageload_from_confr9   s    r2   
initializezConfigPage.initializeP   s     	r1   c                     t         )zReturn configuration page nameNotImplementedErrorrQ   s    r2   get_namezConfigPage.get_nameY       !!r1   c                     t         )z&Return configuration page icon (24x24)rT   rQ   s    r2   get_iconzConfigPage.get_icon]   rW   r1   c                     t         )zSetup configuration page widgetrT   rQ   s    r2   rO   zConfigPage.setup_pagea   rW   r1   c                 H    || _         | j                  j                  |       y r?   )rL   apply_button_enabledemitr9   states     r2   set_modifiedzConfigPage.set_modifiede   s     !!&&u-r1   c                     t         ),Return True if all widget contents are validrT   rQ   s    r2   is_validzConfigPage.is_validi   rW   r1   c                 p   | j                   r| j                  | j                          | j                          | j                  | j                          | j                  dk(  r| j                          | j                  D ]"  }|| j                  v s| j                           n | j                  d       yy)zApply changes callbackNmainF)
rL   rJ   save_to_confrK   r7   
_save_langrestart_optionschanged_optionsprompt_restart_requiredr`   )r9   restart_options     r2   apply_changeszConfigPage.apply_changesm   s    &&2'')"".##%   G+!"&"6"6 !T%9%99002 e$+ r1   c                     t         )z%Load settings from configuration filerT   rQ   s    r2   rP   zConfigPage.load_from_conf   rW   r1   c                     t         )#Save settings to configuration filerT   rQ   s    r2   rf   zConfigPage.save_to_conf   rW   r1   r?   )r,   r-   r.   r/   r	   boolr\   show_this_pagerI   rR   rV   rY   rO   r`   rc   rl   rP   rf   r0   r1   r2   rG   rG   >   sJ    : "$<XN	!"""."%2""r1   rG   c            	          e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z ee      d        ZeddddddfdZedddddddfdZedej(                  ddddddf	dZeddddfdZeddfdZd ZedddfdZd!dZedddddfdZedddfdZedddfdZedddfdZedddddddfdZ	 	 d"dZ d Z!d Z"d Z#d Z$d  Z%y)#SpyderConfigPagez+Plugin configuration dialog box page widgetNc                 P    t         j                   | fd       i  _        i  _        i  _        i  _        i  _        i  _        i  _        i  _	        i  _
        i  _        i  _        t                _        t                _        d  _        |j$                   _        d  _        y )Nc                  :     j                   j                        S r?   )_apply_settings_tabsri   rQ   s   r2   <lambda>z+SpyderConfigPage.__init__.<locals>.<lambda>   s     55d6J6JK r1   )rK   )rG   rI   
checkboxesradiobuttons	lineedits	texteditsvalidate_data	spinboxes
comboboxes	fontboxes
coloreditssceditscross_section_optionsr8   ri   dictrh   default_button_groupre   tabs)r9   rM   s   ` r2   rI   zSpyderConfigPage.__init__   s    D&,L 	 	M %'""u#v$(!KK		r1   c                    | j                   t        | j                   j                               D ]  }| j                   j                  |      }|j	                         }t        |j                               D ][  }|j                  |      j                         }t        |d      s/t        t        |      t              sI||j                         z  }]  | j                  |       y )Napply_settings)r   rangecountwidgetlayoutitemAthasattr
issubclasstyper+   r   )r9   optionsitabr   r   s         r2   rv   z%SpyderConfigPage._apply_settings_tabs   s    99 499??,- ?ii&&q)v||~. ?A#]]1-446Fv'78%d6lMB#v'<'<'>>G	?? 	G$r1   c                     t         r?   rT   r9   r   s     r2   r   zSpyderConfigPage.apply_settings       !!r1   c                      y)zYThis method is called to check settings after configuration
        dialog has been shownNr0   rQ   s    r2   check_settingszSpyderConfigPage.check_settings   s     	r1   c                 T    t         j                  | |       |st               | _        y y r?   )rG   r`   r8   ri   r^   s     r2   r`   zSpyderConfigPage.set_modified   s$    e,#&5D  r1   c           	         d}| j                   D ]  }|| j                  v s|j                         s#| j                  |   \  }}t        |j	                               } ||      rWt        j                  | | j                         | d| dt
        j                          y | j                  |rt        | j                  j                               D ]  }| j                  j                  |      }|j                         }t        |j                               D ]V  }|j                  |      j                         }	t        t!        |	      t"              s<||	j%                         z  }|rR|c c S   |S )rb   Tz:<br><b>z</b>F)rz   r|   	isEnabledr%   textr   criticalrV   Okr   r   r   r   r   r   r   r   r+   rc   )
r9   statuslineedit	validatorinvalid_msgr   r   r   r   r   s
             r2   rc   zSpyderConfigPage.is_valid   s>    	!H4---(2D2D2F)-););H)E&	;%hmmo6 ((t}},7=d)K)49 !	! 99 V499??,- *ii&&q)v||~. *A#]]1-446F!$v,>&//"33%#)M** r1   c                     t         j                  j                               D ]  \  }\  }}}|j                   j	                  |||             |j
                  t           j                  ||f fd	       |j                  sb||j                          j                  |<   |j                          j                  ||f<    t         j                  j                               D ]  \  }\  }}}|j                   j	                  |||             |j                  j                  ||f fd	       |j                  s[||j                   j                  |<   w|j                   j                  ||f<    t         j                  j                               D ]  \  }\  }}} j	                  |||      }t        |dd      t         k(  rdj!                  |      }nt#        |      }|j%                  |       |j&                  j                  ||f fd	       |j                  s||j                   j                  |<   |j                   j                  ||f<    t         j(                  j                               D ]  \  }\  }}} j	                  |||      }t        |dd      t         k(  rdj!                  |      }nt        |dd      t*        k(  rt-        |      }|j/                  |       |j&                  j                  ||f fd	       |j                  s||j                   j                  |<   |j                   j                  ||f<    t         j0                  j                               D ]M  \  }	\  }}}|	j3                   j	                  |||             |	j4                  j                  ||f fd		       O t         j6                  j                               D ]  \  }
\  }}} j	                  |||      }t9        |
j;                               D ]:  }t=        |
j?                  |      t,              }t-        |      t-        |      k(  s: n |
j;                         d
k(  rd}r|
jA                  |       |
jB                  j                  ||f fd	       |
j                  s||
j                   j                  |<   |
j                   j                  ||f<    t         jD                  j                               D ]  \  \  }}}d|jG                         v rdnd} jI                  |      }|jK                  |       |j3                  |jM                                |d}n|}|jB                  j                  |f fd	       |j4                  j                  |f fd	        t         jN                  j                               D ]  \  }\  }}}tQ        |      }|jR                  }|jT                  }|j%                   j	                  |||             tV        dk(  s"|j
                  j                  ||f fd	       n!|j
                  j                  ||f fd	       |j&                  j                  ||f fd	        t         jX                  j                               D ]  \  \  }}}\  }}}|jR                  }|jT                  } j	                  |||      }|r9|\  }}}|j%                  |       |j                  |       |j                  |       |j&                  j                  ||f fd	       |j
                  t           j                  ||f fd	       |j
                  t           j                  ||f fd	       |j
                  t           j                  ||f fd	        y)z&Load settings from configuration file.)r<   c                 (    j                  ||      S r?   has_been_modifiedr"   optsectr9   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>   s    +/+A+A$+L r1   Nc                 (    j                  ||      S r?   r   _foor   r   r9   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>   s    (,(>(>tS(I r1   content_typez, c                 (    j                  ||      S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>       )-)?)?c)J r1   c                 (    j                  ||       S r?   r   r   r   r9   s     r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>  r   r1   c                 (    j                  ||      S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>  r   r1   r   c                 (    j                  ||      S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>"  s    **45 r1   richTFplugin_fontc                 <    j                  j                  |      S r?   r   r7   r   r   r9   s     r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>3  s"    040F0F484E4Es1L r1   c                 <    j                  j                  |      S r?   r   r   s     r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>6  s"    )-)?)?-1->->*E r1   pysidec                 (    j                  ||      S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>@      $($:$:4$E r1   c                 (    j                  ||       S r?   r   r   s     r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>C  r   r1   c                 (    j                  ||      S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>E      %)%;%;D#%F r1   c                 (    j                  ||      S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>R  r   r1   c                 (    j                  ||      S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>T  s    &*&<&<T3&G r1   c                 (    j                  ||      S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>V  s    *.*@*@s*K r1   c                 (    j                  ||      S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>X  s    ,0,B,B4,M r1   )-listrx   items
setCheckedrB   clickedrp   connectrestart_requiredr   rh   ry   toggled
label_textrz   getattrjoinstrsetTexttextChangedr{   r   r%   setPlainTextr}   setValuevalueChangedr~   r   r   r   itemDatasetCurrentIndexcurrentIndexChangedr   lowerget_fontsetCurrentFont	pointSizer   r   r   colorbtnr   r   )r9   checkboxsecr:   rA   radiobuttonr   datatexteditspinboxcomboboxr;   indexfontboxsizebox	rich_fontfontpropertyclayouteditbtncb_bold	cb_italicr   colorbolditalics   `                          r2   rP   zSpyderConfigPage.load_from_conf   s^   04T__5J5J5L0M 	J,H,sFG MNT"**c ,M N((;3;==?D((0:B--/D((#v7	J 48!!'')4+ 
	Q/K/#vw""4??67;> $3 $@ A''c )J K++;3>3I3ID((0:E:P:PD((#v7
	Q 15T^^5I5I5K0L 	N,H,sFG??67C?@Dx6$>yy
 4yT"  ((vC *K L((;3;3F3FD((0:B:M:MD((#v7!	N" 15T^^5I5I5K0L 	N,H,sFG??67C?@Dx6$>yy>48D@%d+!!$'  ((F *K L((;3;3F3FD((0:B:M:MD((#v7	N 04DNN4H4H4J/K 	L+G+c67T__VWc_JK  ((&s *K L	L 15T__5J5J5L0M 	N,H,sFGOOFGSOAEx~~/0 	!$X%6%6u%=~N "$'>%+@@	! >>#q( E((/((00!'c 67 ((;3;3F3FD((0:B:M:MD((#v7+	N. +/t~~/C/C/E*F 	F&Wg &&,,. 8eI==+D""4(T^^-.~(!''// 1L M   ((( *E F	F 04DOO4I4I4K/L 	H+G+c67"6*H##D""CLL#FG(?##V# %F G ##vC %F G$$f3 &G H	H +/t||/A/A/C*D	O ' Wgy&fg##D""CoofgsoCG&-#tVU#""4($$V,$$f3 &G HKK%%vC 'H IOOD!))6 +L Md#++V# -N O#	Or1   c                 
   t        | j                  j                               D ]M  \  }\  }}}|| j                  v s||f| j                  v s)|j	                         }| j                  |||d       O t        | j                  j                               D ]K  \  }\  }}}|| j                  v s||f| j                  v s)| j                  ||j	                         |d       M t        | j                  j                               D ]  \  }\  }}}|| j                  v s||f| j                  v s)|j                         }t        |dd      }	|	t         k(  r-|j                  d      D 
cg c]  }
|
j                          }}
nt        |      }| j                  |||d        t        | j                  j                               D ]  \  }\  }}}|| j                  v s||f| j                  v s)|j                         }t        |dd      }	|	t        k(  r)|rt!        j"                  |      }nW|j%                         }nF|	t&        t         fv r-|j                  d      D 
cg c]  }
|
j                          }}
nt        |      }| j                  |||d        t        | j(                  j                               D ]K  \  }\  }}}|| j                  v s||f| j                  v s)| j                  ||j+                         |d       M t        | j,                  j                               D ]j  \  }\  }}}|| j                  v s||f| j                  v s)|j/                  |j1                               }| j                  |t3        |t              |d       l t        | j4                  j                               D ]d  \  \  }}}| j6                  |f| j                  v s$|j9                         }|j;                  |j+                                | j=                  ||       f t        | j>                  j                               D ]^  \  }\  }}}|| j                  v s||f| j                  v s)| j                  |t        |j@                  j                               |d       ` t        | jB                  j                               D ]  \  \  }}}\  }}}|| j                  v s||f| j                  v s-t        |j@                  j                               }|j	                         }|j	                         }| j                  ||||f|d        yc c}
w c c}
w )ro   F)r<   r6   r   N,)"r   rx   r   ri   	isCheckedr=   ry   rz   r   r   splitstripr%   r{   toPlainTextr   astliteral_evalr   tupler}   r;   r~   r   currentIndexr   r   r7   currentFontsetPointSizeset_fontr   r   r   )r9   r   r   r:   _defaultr;   r   r   r   r   itemr   r   r   r   r   r   r   r   r   r   r   r   s                          r2   rf   zSpyderConfigPage.save_to_conf[  s<   15%%'2) 	>-H-sFH$...&MT%9%99 **,s7<   >	> 59!!'')5+ 	>0K0#vx$...&MT%9%99(=(=(?7<   >		> 26dnn6J6J6L1M 
	>-H-sFH$...&MT%9%99}}&xF4'59ZZ_ETDJJLEDE)$/Dc7<   >
	> 26dnn6J6J6L1M 	>-H-sFH$...&MT%9%99++-&xF4'"//5'446!eT]259ZZ_ETDJJLEDE)$/Dc7<   >	>  15T^^5I5I5K0L 	>,G,c68$...&MT%9%997<   >	>
 26doo6K6K6M1N 	K-H-sFH$...&MT%9%99(()>)>)@AdN(K(+E   K		K +/t~~/C/C/E*F 	,&Wg!!6*d.B.BB**,!!'--/2dF+		,
 15T__5J5J5L0M 	K,G,c68$...&MT%9%99 .w/?/?/D/D/F G(+E   K	K GK""$G& 	>B)Wgy+BC$...&MT%9%99&w'7'7'<'<'>?((*",,.f(=s7<   >	>W F  Fs   *U"U c                     | j                  d       || j                  j                  |       y | j                  j                  ||f       y )NT)r`   ri   add)r9   r<   r:   s      r2   r   z"SpyderConfigPage.has_been_modified  sB    $?  $$V,  $$gv%67r1   Fc
                     t        |      }
|||f j                  |
<   || j                  k7  r| j                  |<   ||
j	                  |       $d fd	}|
j
                  j                  |       |	|
_        |
S )Nc                     | ssn4t        j                  j                         t         j                         5t        j                  j                         t         j                         y y y r?   r   warningrV   r   information
is_checkedmsg_if_enabledmsg_infomsg_warningr9   s    r2   show_messagez6SpyderConfigPage.create_checkbox.<locals>.show_message  b    ^".#++D$--/,7I+#//dmmo08+..J ,	 &4r1   )F)r   rx   r7   r   
setToolTipr   r   r   )r9   r   r:   rA   tipr
  r	  r  r<   restartr   r  s   `    ```    r2   create_checkboxz SpyderConfigPage.create_checkbox  s     T?%,fg$>!7d.?.?#?18D&&v.?$"h&:J J $$\2$+!r1   c                     t        |      }|
|
 j                  k7  r|
 j                  |<   |( j                  t	                _         j                  }|j                  |       ||j                  |       |
||f j                  |<   # fd}|j                  j                  |       |	|_
        ||_        |S )Nc                     | ssn4t        j                  j                         t         j                         5t        j                  j                         t         j                         y y y r?   r  r  s    r2   r  z9SpyderConfigPage.create_radiobutton.<locals>.show_message  r  r1   )r   r7   r   r   r   	addButtonr  ry   r   r   r   r   )r9   r   r:   rA   r  r
  r	  r  button_groupr  r<   r   r  s   `    ```     r2   create_radiobuttonz#SpyderConfigPage.create_radiobutton  s     #4(7d.?.?#?18D&&v.((0,8,>)44L{+?""3'*167)C+&"h&:J ''5'.$!%r1   Tc                    ||| j                   k7  r|| j                  |<   t        |      }|j                  |       t	               }|
|_        |t        j                  k(  r
t               n	t               }|j                  |       |j                  |       |j                  dddd       |r|j                  |       |r#|j                  t        t        |                   |	r|j!                  |	       |||f| j"                  |<   t%        |       }||_        ||_        |j+                  |       ||_        ||_        |S )Nr   )r7   r   r   setWordWrapr   r   r   Verticalr    r   	addWidgetsetContentsMarginsr  setValidatorr   r   setPlaceholderTextrz   r!   labeltextbox	setLayoutr   r   )r9   r   r:   rA   r  	alignmentregexr  	word_wrapplaceholderr   r<   r  r   r   r   s                   r2   create_lineeditz SpyderConfigPage.create_lineedit  s    7d.?.?#?18D&&v.t)${("+r{{":!!!Q1-OOC .wu~>?##K0 '9t  'r1   c                    ||| j                   k7  r|| j                  |<   t        |      }|j                  d       t	               }	||	_        |	j                  t        j                         t               }
|
j                  |       |
j                  |	       |
j                  dddd       |r|	j                  |       |||f| j                  |	<   t        |       }||_        |	|_        |j#                  |
       ||	_        ||	_        |S )NTr   )r7   r   r   r  r   r   setWordWrapModer   WordWrapr    r  r  r  r{   r!   r  r  r  r   r   )r9   r   r:   rA   r  r  r   r<   r  r   r   r   s               r2   create_texteditz SpyderConfigPage.create_textedit  s     7d.?.?#?18D&&v.t$([112!!!Q1-OOC  '9t  'r1   c                 X     j                  ||||t        j                        } j                  D ]  |j	                        s n t        d      }t        j                  |f j                  <   t        t        j                  d      d       }|j                  t        d             |j                  j                   fd       t               }	|	j!                  |       |	j!                  |       |	j#                  dddd       t%               }
|
j'                  |	       |
S )Nr<   r   zInvalid directory pathDirOpenIcon Select directoryc                  &    j                         S r?   )select_directory)r   r9   s   r2   rw   z3SpyderConfigPage.create_browsedir.<locals>.<lambda>!  s    4+@+@+F r1   r   )r$  r   
Horizontalrz   isAncestorOfr"   ospisdirr|   r   r&   iconr  r   r   r   r  r  r!   r  )r9   r   r:   rA   r  r<   r   msg
browse_btnr   	browsedirr   s   `          @r2   create_browsedirz!SpyderConfigPage.create_browsedir  s   %%dFGW02 & ?NN 	D""4(	 ()$'IIs#34  -!8"dC
a 234""#FG $!!!Q1-DM	F#r1   c                     t        |j                               }t        j                  |      s
t	               }t        d       }t        | ||      }|r|j                  |       yy)r-  N)r%   r   r2  r3  r'   r"   r   r   )r9   r   basedirtitle	directorys        r2   r/  z!SpyderConfigPage.select_directory*  sS     -yy!$&G$%(ug>	LL# r1   c                 \     j                  ||||t        j                        } j                  D ]  |j	                        s n t        d      }t        j                  |f j                  <   t        t        j                  d      d       }	|	j                  t        d             |	j                  j                   fd       t               }
|
j!                  |       |
j!                  |	       |
j#                  dddd       t%               }|j'                  |
       |S )Nr*  Invalid file pathFileIconr,  Select filec                  (    j                         S r?   select_file)r   filtersr9   s   r2   rw   z4SpyderConfigPage.create_browsefile.<locals>.<lambda>?  s    4+;+;D'+J r1   r   )r$  r   r0  rz   r1  r"   r2  isfiler|   r   r&   r4  r  r   r   r   r  r  r!   r  )r9   r   r:   rA   r  rD  r<   r   r5  r6  r   r7  r   s   `    `      @r2   create_browsefilez"SpyderConfigPage.create_browsefile4  s   %%dFGW02 & ?NN 	D""4(	 #$$'JJ#44  *!5r4@
a./""#JK $!!!Q1-DM	F#r1   c                    t        j                  t        |j                                     }t        j                  |      s
t               }|t        d      }t        d      }t        | |||fi |\  }}|r|j                  |       yy)zSelect FileNzAll files (*)r@  )	r2  dirnamer%   r   r3  r'   r"   r   r   )r9   r   rD  kwargsr:  r;  filename
_selfilters           r2   rC  zSpyderConfigPage.select_fileH  s{    ++nTYY[9:yy!$&G?(G- .tUGW  917 9*LL" r1   c
                    |	|	| j                   k7  r|	| j                  |<   t        |       }
|rt        |      }||
_        nd }|rt        |      }||
_        nd }|It        |      t        u rt               }nt               }|j                  d       |j                  |       n
t               }||j                  |       ||j                  |       ||j                  |       |	||f| j                  |<   t!               }|||fD ]  }||j#                  |        |j%                  d       |j'                  dddd       ||
_        |
j+                  |       |
S )N   r   )r7   r   r!   r   plabelslabelr   intr   r   setDecimalssetSingleStep
setMinimum
setMaximumr  r}   r   r  
addStretchr  r   r  )r9   prefixsuffixr:   rA   min_max_stepr  r<   r   rN  rO  r   r   	subwidgets                   r2   create_spinboxzSpyderConfigPage.create_spinboxU  sc    7d.?.?#?18D&&v.F^F"FMFF^F"FMFDzS "*(*##A&!!$'jGt$t$?s##*FG"<w '62 	,I$  +	, 	!!!!Q1-  r1   c                    ||| j                   k7  r|| j                  |<   t        |      }t        t	        t
        j                        |       }|j                  j                  d       ||j                  |       |||f| j                  |<   |r||fS t               }	|	j                  |       |	j                  |       |	j                  d       |	j                  dddd       t!        |       }
|
j#                  |	       |
S )NP   rM  r   )r7   r   r   r(   r   r   blackr   setMaximumWidthr  r   r   r  	addLayoutrU  r  r!   r  )r9   r   r:   rA   r  without_layoutr<   r  r   r   r   s              r2   create_coloreditz!SpyderConfigPage.create_coloredit  s    7d.?.?#?18D&&v.tfRXX.5((,?s#$+VW#= '>!!!!!!Q1- r1   c                    ||| j                   k7  r|| j                  |<   t        |      }t        t	        t
        j                        |       }|j                  j                  d       ||j                  |       t               }	|	j                  t        j                  d             |	j                  t        d             t               }
|
j                  t        j                  d             |
j                  t        d             |||f| j                  ||	|
f<   |r|||	|
fS t!               }|j#                  |       |j%                  |       |j'                  d       |j#                  |	       |j#                  |
       |j)                  d       |j+                  dddd       t-        |       }|j/                  |       |S )	Nr^  r   Boldr   Italic
   rM  r   )r7   r   r   r(   r   r   r_  r   r`  r  r   setIconr&   r4  r"   r   r   r  ra  
addSpacingrU  r  r!   r  )r9   r   r:   rA   r  rb  r<   r  r   r   r   r   r   s                r2   create_sceditzSpyderConfigPage.create_scedit  s   7d.?.?#?18D&&v.tfRXX.5((,?s#+()1V9%K	#((8,-Qx[)7>7>7@gw	23'7I55!"!#!!!!Q1- r1   c                    ||| j                   k7  r|| j                  |<   t        |      }t               }	||	j	                  |       |D ]%  \  }
}|
||	j                  |
t        |             ' d}t        |      D ])  \  }}|\  }
}|
||	j                  ||z          |dz  }+ |||f| j                  |	<   t               }|j                  |       |j                  |	       |j                  d       |j                  dddd       t        |       }||_        |	|_        |j#                  |       ||	_        ||	_        |S )choices: couples (name, key)r   rM  )r7   r   r   r   r  addItemr   	enumerateinsertSeparatorr~   r   r  rU  r  r!   r  r   r  r   r   )r9   r   choicesr:   rA   r  r  r<   r  r   namekeyr   r   r   r   r   s                    r2   create_comboboxz SpyderConfigPage.create_combobox  s]    7d.?.?#?18D&&v.t;?$  	9ID#LS[  {3'78	9 $W- 	KE4ID#|((7
		
 &-fg$>!"!!!!Q1-" $+!"r1   c                 N    |
|
 j                   k7  r|
 j                  |<   t         ||	      }||_        ||_        |j                         |_        |_        |
||f j                  <   ||j                  |       |j                  |       ||_	        t        d      }|r|nt        j                  |f j                  <   t        t        j                   d      d       }|j                  t        d             t"        j$                  |j&                  j)                   fd       t+               }|j-                  |dddd       |j-                  |dd	       |j/                  dddd       t1               }||_        ||_        |j7                  |       |S )
rl  )adjust_to_contentsdefault_line_editr>  r?  r,  r@  c                  ,    j                         S )N)r   rB  )r   rD  r   r9   s   r2   rw   z7SpyderConfigPage.create_file_combobox.<locals>.<lambda>  s    D$$T7G$D r1   r   	   rg  )r7   r   r)   r   r   lineEditrz   r  addItemsrp  r"   r2  rE  r|   r   r&   r4  r   DontResolveSymlinksr   r   r   r  r  r!   r   r6  r  )r9   r   rp  r:   rA   r  r  rD  ru  rv  r<   validate_callbackr   r5  r6  r   r   r   r   s   `      `         @@r2   create_file_comboboxz%SpyderConfigPage.create_file_combobox  s    7d.?.?#?18D&&v.9K2CE$+!"  " ' '9t?$'""#$!2

$4  !*!5r4@
a./11""D	F 1aA.Q+!!!Q1-"& r1   c                 j   |rt        |      }nt        t        d            }t               }||j                  |       t        dt        d      z         }	t	               }
|
j                  dd       || j                  ||
f<   t               }|||	|
fD ]  }|j                  |        |j                  d       t        |       }||_        |	|_        ||_        |
|_        |j                  |       |s>|t        d      }t!        |      }|j                  |       ||j#                  |       |S |S )z"Option=None -> setting plugin fontFontz  Size   d   rM  z
Font style)r   r"   r   setFontFiltersr   setRanger   r   r  rU  r!   	fontlabel	sizelabelr   r   r  r   r  )r9   r:   r   r;  r  fontfilterswithout_groupr  r   r  r   r   r[  r   groups                  r2   create_fontgroupz!SpyderConfigPage.create_fontgroup  s)    uIqy)I/""";/4!F)+,	*C -3)*#WiA 	(IY'	(!$$   |dOEOOF#  %LMr1   c                      t        |      }|j                  j                  |       |j                  j                  d fd	       |S )Nc                 <    j                  j                  |      S r?   r   )checkedr   r9   s     r2   rw   z0SpyderConfigPage.create_button.<locals>.<lambda>/  s    $*@*@!!3+( r1   )Fr,  )r   r   r   )r9   r   callbackr   s   `   r2   create_buttonzSpyderConfigPage.create_button+  s=    $H%(	) 
r1   c                     t               }t               }|D ]  }|j                  |        |j                  d       |j	                  |       |S )zACreate simple tab widget page: widgets added in a vertical layoutrM  )r!   r    r  rU  r  )r9   widgetsr   r   widgs        r2   
create_tabzSpyderConfigPage.create_tab3  sN     	#DT"	#! r1   c                     t        d      }t        j                  | t        d      |t        j                  t        j                  z        }|t        j                  k(  r| j                          yy)z*Prompt the user with a request to restart.zlOne or more of the settings you changed requires a restart to be applied.<br><br>Do you wish to restart now?InformationN)r"   r   r  YesNor  )r9   messageanswers      r2   rj   z(SpyderConfigPage.prompt_restart_required=  s]    *
 ((mOOknn,	
 [__$LLN %r1   c                 <    | j                   j                  d       y)zRestart Spyder.T)close_immediatelyN)re   r  rQ   s    r2   r  zSpyderConfigPage.restartO  s    		D1r1   c                 j    ||       }| j                   t               | _         | j                         }t               }|j	                  |       | j                   j                  | j                  |      t        d             | j                   j                  | j                  |      |j                         t               }|j                  | j                          | j	                  |       n5| j                   j                  | j                  |      |j                         | j                          y )NGeneral)r   r   r   r!   r  addTabr  r"   TITLEr    r  rP   )r9   Widgetr   r   main_widgetvlayouts         r2   add_tabzSpyderConfigPage.add_tabS  s    99 #DI[[]F!)K!!&)IIT__[9y\+IIT__V4#\\+!mGdii(NN7#IIT__V4#\\+r1   r?   )NNNNNF)&r,   r-   r.   r/   r7   rI   rv   r   r   r`   rc   rP   rf   r
   r   r   r$   r  r  r   r  r$  r(  r8  r/  rF  rC  r\  rc  rj  rs  r}  r  r  r  rj   r  r  r0   r1   r2   rs   rs      sw   5L*
%"
)
2OBH>T 
#Y8 8 5> dT',dE, 8A#*/d#($: 5> BKKt %4%)4: 5> %d $2 6?D!%($ 7@T"&(# >G t$D#(T 6?D(-t* 3<%*D> >G %B CL!%ud05/4d/3	)V >BCH*X$2r1   rs   c                   4    e Zd ZdZdZdZdZd Zd Zd Z	d Z
y)GeneralConfigPagez}Config page that maintains reference to main Spyder window
       and allows to specify page name and icon declaratively
    Nc                 >    t         j                  | |       || _        y r?   )rs   rI   re   )r9   rM   re   s      r2   rI   zGeneralConfigPage.__init__s  s    !!$/	r1   c                     | j                   S )zConfiguration page name)NAMErQ   s    r2   rV   zGeneralConfigPage.get_namew      yyr1   c                     | j                   S )z"Loads page icon named by self.ICON)ICONrQ   s    r2   rY   zGeneralConfigPage.get_icon{  r  r1   c                     t         r?   rT   r   s     r2   r   z GeneralConfigPage.apply_settings  r   r1   )r,   r-   r.   r/   r7   r  r  rI   rV   rY   r   r0   r1   r2   r  r  j  s,     LDD"r1   r  c                       e Zd ZdZy)PreferencePagesre   N)r,   r-   r.   r  r0   r1   r2   r  r    s    Gr1   r  )@r/   r   os.pathpathr2  qtpyr   qtpy.compatr   r   r   r   qtpy.QtCorer   r	   r
   r   
qtpy.QtGuir   r   r   qtpy.QtWidgetsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   spyder.config.baser"   spyder.config.managerr#   spyder.config.userr$   spyder.py3compatr%   spyder.utils.icon_managerr&   spyder.utils.miscr'   spyder.widgets.colorsr(   spyder.widgets.comboboxesr)   r+   objectr4   rG   rs   r  r  r0   r1   r2   <module>r     s   
   & & 1 1 < <H H H H H H ! & ( + ) , - 2	G 	
, ,&N" N"bXz#4 Xv"( "2 r1   