
    G@d͐                        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?dS )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dS )BaseConfigTabz#Stub class to declare a config tab.N)__name__
__module____qualname____doc__     >lib/python3.11/site-packages/spyder/plugins/preferences/api.pyr+   r+   &   s        --Dr1   r+   c                   6    e Zd ZdZdZ	 	 ddZedfdZddZdS )	ConfigAccessMixinz0Namespace for methods that access config storageNFc                 L    || j         n|}t          j        ||||           d S )N)recursive_notification)CONF_SECTIONr#   set)selfoptionvaluesectionr6   s        r2   
set_optionzConfigAccessMixin.set_option/   sE    '.$##G&%(>	@ 	@ 	@ 	@ 	@ 	@r1   c                 D    || j         n|}t          j        |||          S N)r7   r#   get)r9   r:   defaultr<   s       r2   
get_optionzConfigAccessMixin.get_option5   s'    '.$##Gx111r1   c                 F    || j         n|}t          j        ||           d S 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   +   sl        ::L04*/@ @ @ @ *3D 2 2 2 2, , , , , ,r1   r4   c                   z    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dS )
ConfigPagez0Base class for configuration page in PreferencesNc                 Z    t          j        | |           d | _        || _        d| _        d S rE   )r!   __init__pre_apply_callbackapply_callbackis_modified)r9   parentrK   s      r2   rI   zConfigPage.__init__E   s7    v&&& #' - r1   c                 V    |                                   |                                  dS )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                            |           d S 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                 f   | j         r| j        |                                  |                                  | j        |                                  | j        dk    r|                                  | j        D ]!}|| j        v r|                                   n"| 	                    d           dS dS )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  !T%99900222E : 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   >   s        :: "6$<<VXXN	! 	! 	! 	!  " " "" " "" " ". . ." " "% % %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%dS )#SpyderConfigPagez+Plugin configuration dialog box page widgetNc                 b    t                                | fd           i  _        i  _        i  _        i  _        i  _        i  _        i  _        i  _	        i  _
        i  _        i  _        t                       _        t                       _        d  _        |j         _        d  _        d S )Nc                  8                           j                  S r?   )_apply_settings_tabsri   rQ   s   r2   <lambda>z+SpyderConfigPage.__init__.<locals>.<lambda>   s     55d6JK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 ,L ,L ,L 	 	M 	M 	M %'""uu#vv$(!K				r1   c                    | j         t          | j                                                   D ]}| j                             |          }|                                }t          |                                          D ]r}|                    |                                          }t          |d          r9t          t          |          t                    r||
                                z  }s| 
                    |           d S )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    9 49??,,-- ? ?i&&q))v||~~.. ? ?A#]]1--4466Fv'788 ?%d6llMBB ?#v'<'<'>'>>G	?
 	G$$$$$r1   c                     t           r?   rT   r9   r   s     r2   r   zSpyderConfigPage.apply_settings       !!r1   c                     dS )zYThis method is called to check settings after configuration
        dialog has been shownNr0   rQ   s    r2   check_settingszSpyderConfigPage.check_settings   s	     	r1   c                 j    t                               | |           |st                      | _        d S d S r?   )rG   r`   r8   ri   r^   s     r2   r`   zSpyderConfigPage.set_modified   s<    e,,, 	)#&55D   	) 	)r1   c           	          d}| j         D ]}|| j        v r|                                rx| j        |         \  }}t          |                                          } ||          s<t          j        | |                                 | d| dt
          j                    dS | j	        |rt          | j	                                                  D ]}| j	                            |          }|                                }t          |                                          D ]j}|                    |                                          }	t          t!          |	          t"                    r||	                                z  }|s|c c S k|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---(2D2D2F2F-)-);H)E&	;%hmmoo66 y !(t}},7)K)K)K)K)K)49 9 9 !559 V 49??,,-- * *i&&q))v||~~.. * *A#]]1--4466F!$v,,>> *&//"3"33% *#)MMMMM* r1   c                     t           j                                                  D ]\  }\  }}}|                                         |||                     |j        t                                       ||f fd	           |j        r=||	                                 j
        |<   |	                                 j
        ||f<   t           j                                                  D ]~\  }\  }}}|                                         |||                     |j                            ||f fd	           |j        r#||j         j
        |<   m|j         j
        ||f<   t           j                                                  D ]\  }\  }}}                     |||          }t          |dd          t           k    rd                    |          }nt#          |          }|                    |           |j                            ||f fd	           |j        r#||j         j
        |<   |j         j
        ||f<   t           j                                                  D ]\  }\  }}}                     |||          }t          |dd          t           k    rd                    |          }n)t          |dd          t*          k    rt-          |          }|                    |           |j                            ||f fd	           |j        r#||j         j
        |<   |j         j
        ||f<   t           j                                                  D ]T\  }	\  }}}|	                                         |||                     |	j                            ||f fd		           Ut           j                                                  D ]\  }
\  }}}                     |||          }t9          |
                                          D ]L}t=          |
                    |          t,                    }t-          |          t-          |          k    r nM|
                                d
k    rd}|r|
                     |           |
j!                            ||f fd	           |
j        r#||
j         j
        |<   |
j         j
        ||f<   t           j"                                                  D ]\  \  }}}d|#                                v rdnd} $                    |          }|%                    |           |                    |&                                           |d}n|}|j!                            |f fd	           |j                            |f fd	           t           j'                                                  D ]\  }\  }}}tQ          |          }|j)        }|j*        }|                                         |||                     tV          dk    s!|j                            ||f fd	           n |j                            ||f fd	           |j                            ||f fd	           t           j,                                                  D ]\  \  }}}\  }}}|j)        }|j*        }                     |||          }|rE|\  }}}|                    |           |                    |           |                    |           |j                            ||f fd	           |j        t                                       ||f fd	           |j        t                                       ||f fd	           |j        t                                       ||f fd	           dS )z&Load settings from configuration file.)r<   c                 0                         ||          S r?   has_been_modifiedr"   optsectr9   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>   s    +/+A+A$+L+L r1   Nc                 0                         ||          S r?   r   _foor   r   r9   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>   s    (,(>(>tS(I(I r1   content_typez, c                 0                         ||          S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>       )-)?)?c)J)J r1   c                 0                         ||           S r?   r   r   r   r9   s     r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>  r   r1   c                 0                         ||          S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>  r   r1   r   c                 0                         ||          S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>"  s    **455 r1   richTFplugin_fontc                 :                         j        |          S r?   r   r7   r   r   r9   s     r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>3  s%    040F0F484Es1L 1L r1   c                 :                         j        |          S r?   r   r   s     r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>6  s%    )-)?)?-1->*E *E r1   pysidec                 0                         ||          S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>@      $($:$:4$E$E r1   c                 0                         ||           S r?   r   r   s     r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>C  r   r1   c                 0                         ||          S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>E      %)%;%;D#%F%F r1   c                 0                         ||          S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>R  r   r1   c                 0                         ||          S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>T  s    &*&<&<T3&G&G r1   c                 0                         ||          S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>V  s    *.*@*@s*K*K r1   c                 0                         ||          S r?   r   r   s      r2   rw   z1SpyderConfigPage.load_from_conf.<locals>.<lambda>X  s    ,0,B,B4,M,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_5J5J5L5L0M0M 	J 	J,H,sFG M MNNNT"**c ,M ,M ,M ,M ,M N N N( J;3;==??D(00:B--//D(#v737!''))4+ 4+ 
	Q 
	Q/K/#vw""4??67;> $3 $@ $@ A A A''c )J )J )J )J )J K K K+ Q;3>3ID(00:E:PD(#v704T^5I5I5K5K0L0L 	N 	N,H,sFG??67C?@@Dx66$>>yy
 4yyT""" ((vC *K *K *K *K *K L L L( N;3;3FD(00:B:MD(#v704T^5I5I5K5K0L0L 	N 	N,H,sFG??67C?@@Dx66$>>yy>488D@@%d++!!$''' ((F *K *K *K *K *K L L L( N;3;3FD(00:B:MD(#v7/3DN4H4H4J4J/K/K 	L 	L+G+c67T__VWc_JJKKK ((&s *K *K *K *K *K L L L L04T_5J5J5L5L0M0M 	N 	N,H,sFGOOFGSOAAEx~~//00 	! 	!$X%6%6u%=%=~NN "$''>%+@+@@@E A >>##q(( E 0((///(00!'c 6 6 6 6 67 7 7 ( N;3;3FD(00:B:MD(#v7*.t~/C/C/E/E*F*F 	F 	F&Wg &&,,.. 8 8eI==++D""4(((T^^--...~(!'// 1L 1L 1L 1L 1L M M M  ((( *E *E *E *E *E F F F F 04DO4I4I4K4K/L/L 	H 	H+G+c67"6**H#D"CLL#FFGGG(??##V# %F %F %F %F %F G G G G ##vC %F %F %F %F %F G G G$$f3 &G &G &G &G &G H H H H +/t|/A/A/C/C*D*D	O 	O ' Wgy&fg#D"CoofgsoCCG -&-#tVU###""4((($$V,,,$$f3 &G &G &G &G &G H H HK%%vC 'H 'H 'H 'H 'H I I IOD!))6 +L +L +L +L +L M M Md#++V# -N -N -N -N -N O O O O#	O 	Or1   c                 
   t          | j                                                  D ]J\  }\  }}}|| j        v s||f| j        v r-|                                }|                     |||d           Kt          | j                                                  D ]H\  }\  }}}|| j        v s||f| j        v r+|                     ||                                |d           It          | j                                                  D ]\  }\  }}}|| j        v s||f| j        v rx|                                }t          |dd          }	|	t           k    r d |
                    d          D             }nt          |          }|                     |||d           t          | j                                                  D ]\  }
\  }}}|| j        v s||f| j        v r|
                                }t          |
dd          }	|	t          k    r,|rt          j        |          }nT|
                                }n?|	t$          t           fv r d |
                    d          D             }nt          |          }|                     |||d           t          | j                                                  D ]H\  }\  }}}|| j        v s||f| j        v r+|                     ||                                |d           It          | j                                                  D ]p\  }\  }}}|| j        v s||f| j        v rS|                    |                                          }|                     |t1          |t                    |d           qt          | j                                                  D ]i\  \  }}}| j        |f| j        v rQ|                                }|                    |                                           |                     ||           jt          | j                                                  D ]Z\  }\  }}}|| j        v s||f| j        v r=|                     |t          |j                                                  |d           [t          | j                                                   D ]\  \  }}}\  }}}|| j        v s||f| j        v rjt          |j                                                  }|                                }|                                }|                     ||||f|d           dS )ro   F)r<   r6   r   Nc                 6    g | ]}|                                 S r0   strip.0items     r2   
<listcomp>z1SpyderConfigPage.save_to_conf.<locals>.<listcomp>p       EEETDJJLLEEEr1   ,c                 6    g | ]}|                                 S r0   r   r   s     r2   r   z1SpyderConfigPage.save_to_conf.<locals>.<listcomp>  r   r1   )!r   rx   r   ri   	isCheckedr=   ry   rz   r   r   splitr%   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   r   r   r   r   r   r   r   r   r   r   r   r   s                         r2   rf   zSpyderConfigPage.save_to_conf[  s   15%%''2) 2) 	> 	>-H-sFH$...&MT%999 **,,s7<   > > >48!''))5+ 5+ 	> 	>0K0#vx$...&MT%999(=(=(?(?7<   > > >15dn6J6J6L6L1M1M 
	> 
	>-H-sFH$...&MT%999}}&xFF4''EETZZ__EEEDD)$//Dc7<   > > >15dn6J6J6L6L1M1M 	> 	>-H-sFH$...&MT%999++--&xFF4'' 7"/55'4466!eT]22EETZZ__EEEDD)$//Dc7<   > > >04T^5I5I5K5K0L0L 	> 	>,G,c68$...&MT%9997<   > > >15do6K6K6M6M1N1N 	K 	K-H-sFH$...&MT%999(()>)>)@)@AAdN(K(K(+E   K K K*.t~/C/C/E/E*F*F 	, 	,&Wg!6*d.BBB**,,!!'--//222dF+++04T_5J5J5L5L0M0M 	K 	K,G,c68$...&MT%999 .w/?/D/D/F/F G G(+E   K K K GK""$$G& G& 	> 	>B)Wgy+BC$...&MT%999&w'7'<'<'>'>??((**",,..f(=s7<   > > >	> 	>r1   c                     |                      d           || j                            |           d S | j                            ||f           d S )NT)r`   ri   add)r9   r<   r:   s      r2   r   z"SpyderConfigPage.has_been_modified  sZ    $? $$V,,,,, $$gv%677777r1   Fc
                      t          |          }
|||f j        |
<   || j        k    r
| j        |<   ||
                    |           #d fd	}|
j                            |           |	|
_        |
S )NFc                     | ssl3t          j                                        t           j                   7t          j                                        t           j                   d S d S d S r?   r   warningrV   r   information
is_checkedmsg_if_enabledmsg_infomsg_warningr9   s    r2   show_messagez6SpyderConfigPage.create_checkbox.<locals>.show_message       J^ J".#+D$--//,7I I I+#/dmmoo08+.J J J J JJ J ,+r1   )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 J J J J J J J $$\222$+!r1   c                 |    t          |          }|
|
 j        k    r
|
 j        |<   |" j        t	                      _         j        }|                    |           ||                    |           |
||f j        |<   " fd}|j        	                    |           |	|_
        ||_        |S )Nc                     | ssl3t          j                                        t           j                   7t          j                                        t           j                   d S d S d S 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,>,>)4L{+++?""3'''*167)C+&"h&:J J J J J J J J ''555'.$!%r1   Tc                    ||| j         k    r
|| j        |<   t          |          }|                    |           t	                      }|
|_        |t          j        k    rt                      nt                      }|
                    |           |
                    |           |                    dddd           |r|                    |           |r/|                    t          t          |                               |	r|                    |	           |||f| j        |<   t%          |           }||_        ||_        |                    |           ||_        ||_        |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  si    7d.?#?#?18D&v.t)$$${{("+r{":":!!!Q1--- 	!OOC    	@.wu~~>>??? 	1##K000 '9t    'r1   c                 L   ||| j         k    r
|| j        |<   t          |          }|                    d           t	                      }	||	_        |	                    t          j                   t                      }
|

                    |           |

                    |	           |
                    dddd           |r|	                    |           |||f| j        |	<   t          |           }||_        |	|_        |                    |
           ||	_        ||	_        |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222!!!Q1--- 	!OOC    '9t    'r1   c                                           ||||t          j                  } j        D ]|                              r nt          d          }t          j        |f j        <   t          t          j        d          d           }|                    t          d                     |j                             fd           t                      }	|	                    |           |	                    |           |	                    dddd           t%                     }
|
                    |	           |
S )Nr<   r'  zInvalid directory pathDirOpenIcon Select directoryc                  .                                    S r?   )select_directory)r   r9   s   r2   rw   z3SpyderConfigPage.create_browsedir.<locals>.<lambda>!  s    4+@+@+F+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  sJ   %%dFGW02 & ? ?N 	 	D""4(( ())$'Is#34  -!8!8"dCC
a 233444""#F#F#F#F#FGGG   $$$!!!Q1---DMM	F###r1   c                     t          |                                          }t          j        |          st	                      }t          d           }t          | ||          }|r|                    |           dS dS )r4  N)r%   r   r9  r:  r'   r"   r   r   )r9   r   basedirtitle	directorys        r2   r6  z!SpyderConfigPage.select_directory*  s}     --y!! 	'$&&G$%%(ug>>	 	$LL#####	$ 	$r1   c                                           ||||t          j                  } j        D ]|                              r nt          d          }t          j        |f j        <   t          t          j        d          d           }	|	                    t          d                     |	j                             fd           t                      }
|
                    |           |
                    |	           |
                    dddd           t%                     }|                    |
           |S )Nr1  Invalid file pathFileIconr3  Select filec                  0                                    S r?   select_file)r   filtersr9   s   r2   rw   z4SpyderConfigPage.create_browsefile.<locals>.<lambda>?  s    4+;+;D'+J+J r1   r   )r+  r   r7  rz   r8  r"   r9  isfiler|   r   r&   r;  r  r   r   r   r   r!  r!   r&  )r9   r   r:   rA   r  rK  r<   r   r<  r=  r   r>  r   s   `    `      @r2   create_browsefilez"SpyderConfigPage.create_browsefile4  sM   %%dFGW02 & ? ?N 	 	D""4(( #$$$'J#44  *!5!5r4@@
a..///""#J#J#J#J#J#JKKK   $$$!!!Q1---DMM	F###r1   c                 H   t          j        t          |                                                    }t          j        |          st                      }|t          d          }t          d          }t          | |||fi |\  }}|r|                    |           dS dS )zSelect FileNzAll files (*)rG  )	r9  dirnamer%   r   r:  r'   r"   r   r   )r9   r   rK  kwargsrA  rB  filename
_selfilters           r2   rJ  zSpyderConfigPage.select_fileH  s    +nTYY[[99::y!! 	'$&&G?((G-  .tUGW  9  917 9  9* 	#LL"""""	# 	#r1   c
                 *   |	|	| j         k    r
|	| j        |<   t          |           }
|rt          |          }||
_        nd }|rt          |          }||
_        nd }|^t          |          t          u rt                      }n#t                      }|
                    d           |                    |           nt                      }||                    |           ||                    |           ||                    |           |	||f| j        |<   t!                      }|||fD ]}||                    |           |                    d           |                    dddd           ||
_        |
                    |           |
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   rU  rV  r   r   	subwidgets                   r2   create_spinboxzSpyderConfigPage.create_spinboxU  s    7d.?#?#?18D&v. 	F^^F"FMMF 	F^^F"FMMFDzzS  "**(**##A&&&!!$''''jjGt$$$t$$$?s####*FG"<w '62 	, 	,I$  +++!!!!Q1---    r1   c                 :   ||| j         k    r
|| j        |<   t          |          }t          t	          t
          j                  |           }|j                            d           ||	                    |           |||f| j
        |<   |r||fS t                      }	|	                    |           |	                    |           |	                    d           |	                    dddd           t!          |           }
|
                    |	           |
S )NP   rT  r   )r7   r   r   r(   r   r   blackr   setMaximumWidthr  r   r   r   	addLayoutr\  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fRX..55((,,,?s###$+VW#=  	"'>!!!!!!!!Q1---   r1   c                    ||| j         k    r
|| j        |<   t          |          }t          t	          t
          j                  |           }|j                            d           ||	                    |           t                      }	|	                    t          j        d                     |		                    t          d                     t                      }
|
                    t          j        d                     |
	                    t          d                     |||f| j        ||	|
f<   |r|||	|
fS t!                      }|                    |           |                    |           |                    d           |                    |	           |                    |
           |                    d           |                    dddd           t-          |           }|                    |           |S )	Nre  r   Boldr   Italic
   rT  r   )r7   r   r   r(   r   r   rf  r   rg  r  r   setIconr&   r;  r"   r   r   r   rh  
addSpacingr\  r!  r!   r&  )r9   r   r:   rA   r  ri  r<   r$  r   r   r   r   r   s                r2   create_sceditzSpyderConfigPage.create_scedit  s   7d.?#?#?18D&v.tfRX..55((,,,?s###++(()))1V99%%%KK	#(8,,---Qx[[)))7>7>7@gw	23 	6'7I55!!!"!!!###!!!!Q1---   r1   c                    ||| j         k    r
|| j        |<   t          |          }t                      }	||	                    |           |D ],\  }
}|
|#|	                    |
t          |                     -d}t          |          D ]+\  }}|\  }
}|
||	                    ||z              |dz  },|||f| j	        |	<   t                      }|                    |           |                    |	           |                    d           |                    dddd           t          |           }||_        |	|_        |                    |           ||	_        ||	_        |S )choices: couples (name, key)Nr   rT  )r7   r   r   r   r  addItemr   	enumerateinsertSeparatorr~   r   r   r\  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;;?$$$  	9 	9ID#LS[  {3'7'7888$W-- 	 	KE4ID#|((777
%,fg$>!"""!!!!Q1---"   $+!"r1   c                     |
|
 j         k    r
|
 j        |<   t           ||	          }||_        ||_        |                                |_        |_        |
||f j        <   ||                    |           |                    |           ||_	        t          d          }|r|nt          j        |f j        <   t          t          j        d          d           }|                    t          d                     t"          j        |j                             fd           t+                      }|                    |dddd	           |                    |dd
           |                    dddd           t1                     }||_        ||_        |                    |           |S )rs  N)adjust_to_contentsdefault_line_editrE  rF  r3  rG  c                  4                                    S )N)r   rI  )r   rK  r   r9   s   r2   rw   z7SpyderConfigPage.create_file_combobox.<locals>.<lambda>  s    D$$T7G$DD r1   r   	   rn  )r7   r   r)   r   r   lineEditrz   r  addItemsrw  r"   r9  rL  r|   r   r&   r;  r   DontResolveSymlinksr   r   r   r   r!  r!   r   r=  r&  )r9   r   rw  r:   rA   r  r  rK  r|  r}  r<   validate_callbackr   r<  r=  r   r   r   r   s   `      `         @@r2   create_file_comboboxz%SpyderConfigPage.create_file_combobox  s    7d.?#?#?18D&v.9K2CE E E$+!"  "" ' '9t?$$$'""""#$$!2B
$4  !*!5!5r4@@
a..///1""DDDDDDD	F 	F 	F 1aA...Q+++!!!Q1---"&   r1   c                    |rt          |          }nt          t          d                    }t                      }||                    |           t          dt          d          z             }	t	                      }
|
                    dd           || j        ||
f<   t                      }|||	|
fD ]}|                    |           |	                    d           t          |           }||_        |	|_        ||_        |
|_        |                    |           |sN|t          d          }t!          |          }|                    |           ||                    |           |S |S )	z"Option=None -> setting plugin fontFontNz  Size   d   rT  z
Font style)r   r"   r   setFontFiltersr   setRanger   r   r   r\  r!   	fontlabel	sizelabelr   r   r&  r   r  )r9   r:   r   rB  r  fontfilterswithout_groupr  r   r  r   r   rb  r   groups                  r2   create_fontgroupz!SpyderConfigPage.create_fontgroup  sx     	*uIIqyy))I//""";///4!F))+,,	**C   -3)*#WiA 	( 	(IY''''!$$      	|dOOEOOF###  %%%LMr1   c                      t          |          }|j                            |           |j                            d fd	           |S )NFr3  c                 :                         j        |          S r?   r   )checkedr   r9   s     r2   rw   z0SpyderConfigPage.create_button.<locals>.<lambda>/  s    $*@*@!3+( +( r1   )Fr3  )r   r   r   )r9   r   callbackr   s   `   r2   create_buttonzSpyderConfigPage.create_button+  s`    $H%%%( ( ( ( (	) 	) 	) 
r1   c                     t                      }t                      }|D ]}|                    |           |                    d           |                    |           |S )zACreate simple tab widget page: widgets added in a vertical layoutrT  )r!   r    r   r\  r&  )r9   widgetsr   r   widgs        r2   
create_tabzSpyderConfigPage.create_tab3  sg     	# 	#DT""""!   r1   c                     t          d          }t          j        | t          d          |t          j        t          j        z            }|t          j        k    r|                                  dS dS )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=  so    *
 
 (mOkn,	
 
 [_$$LLNNNNN %$r1   c                 <    | j                             d           dS )zRestart Spyder.T)close_immediatelyN)re   r  rQ   s    r2   r  zSpyderConfigPage.restartO  s!    	D11111r1   c                     ||           }| j         t                      | _         |                                 }t                      }|                    |           | j                             |                     |          t          d                     | j                             |                     |          |j                   t                      }|
                    | j                    |                     |           n3| j                             |                     |          |j                   |                                  d S )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%   9 #DI[[]]F!))K!!&)))IT__[99y\\+ + +IT__V44#\+ + +!mmGdi(((NN7####IT__V4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/  r?  r6  rM  rJ  rc  rj  rq  rz  r  r  r  r  rj   r  r  r0   r1   r2   rs   rs      s       55L  *
% 
% 
%" " "  
) ) )
  2O O OBH> H> H>T 
T#YY8 8 Y8 5> dT',dE   , 8A#*/d#($   : 5> BKt %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 2 2    r1   rs   c                   6    e Zd ZdZdZdZdZd Zd Zd Z	d Z
dS )GeneralConfigPagez}Config page that maintains reference to main Spyder window
       and allows to specify page name and icon declaratively
    Nc                 J    t                               | |           || _        d S 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  
    y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  sk          LDD      " " " " "r1   r  c                       e Zd ZdZdS )PreferencePagesre   N)r,   r-   r.   r  r0   r1   r2   r  r    s        GGGr1   r  )@r/   r   os.pathpathr9  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     sf   
 


            & & & & & & & & & & & & 1 1 1 1 1 1 1 1 1 1 1 1 < < < < < < < < < <H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H H !           & & & & & & ( ( ( ( ( ( + + + + + + ) ) ) ) ) ) , , , , , , - - - - - - 2 2 2 2 2 2	 	 	 	 	G 	 	 	
, , , , , , , ,&N" N" N" N" N" N" N" N"bX X X X Xz#4 X X Xv" " " " "( " " "2         r1   