
2[                 @   s`  d  Z  d d l Td d l j Z d d l j Z d d l j	 Z
 d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d	 l m Z d d l m Z d d
 l m Z Gd d   d e  Z Gd d   d e  Z d d   Z Gd d   d e  Z e d k r\d d l  Z  e  j! d d d d d d d l" m# Z# e# e e  n  d S)a  IDLE Configuration Dialog: support user customization of IDLE by GUI

Customize font faces, sizes, and colorization attributes.  Set indentation
defaults.  Customize keybindings.  Colorization and keybindings can be
saved as user defined sets.  Select startup options including shell/editor
and default window size.  Define additional help sources.

Note that tab width in IDLE is currently fixed at eight due to Tk issues.
Refer to comments in EditorWindow autoindent code for details.

    )*N)idleConf)DynOptionMenu)TabbedPageSet)GetKeysDialog)GetCfgSectionNameDialog)GetHelpSourceDialog)macosxSupportc               @   s|  e  Z d  Z d d d d d  Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d    Z d! d"   Z d# d$   Z d% d&   Z d' d(   Z d) d*   Z d+ d,   Z d- d.   Z d/ d0   Z d1 d2   Z d3 d4   Z d5 d6   Z d7 d8   Z d9 d:   Z d; d<   Z d= d>   Z  d? d@   Z! dA dB   Z" dC dD   Z# dE dF   Z$ dG dH   Z% dI dJ   Z& dK dL   Z' dM dN   Z( dO dP   Z) dQ dR   Z* dS dT   Z+ dU dV   Z, dW dX   Z- dY dZ   Z. d[ d\   Z/ d] d^ d_  Z0 d` da   Z1 db dc   Z2 dd de   Z3 df dg   Z4 dh di   Z5 dj dk   Z6 dl dm   Z7 dn do   Z8 dp dq   Z9 dr ds   Z: dt du   Z; dv dw   Z< dx dy   Z= dz d{   Z> d| d}   Z? d~ d   Z@ d d   ZA d d   ZB d d   ZC d d   ZD d d   ZE d d   ZF d d   ZG d d   ZH d d   ZI d d   ZJ d] S)ConfigDialog Fc             C   s  t  j |  |  | |  _ | r+ i  | _ n  |  j   |  j d d  |  j | pT d  |  j d | j   d | j	   | s d n d f  i d3 d
 6d4 d 6d5 d 6d6 d 6d7 d 6d8 d 6d9 d 6d: d 6d; d" 6d< d% 6d= d( 6d> d+ 6d? d. 6|  _
 |  j   |  j   |  j d/ t d0 t  |  j |  |  j   |  j d1 |  j  |  j j   |  j   |  j   | s|  j   |  j   n  d2 S)@z
        _htest - bool, change box location when running htest
        _utest - bool, don't wait_window when running unittest
        borderwidth   zIDLE Preferencesz+%d+%d         normal00zNormal Textkeyword01zPython Keywords
definition02zPython Definitionsbuiltin03zPython Builtinscomment04zPython Commentsstring05zPython Stringshilite06zSelected Texthit07z
Found Textcursor08Cursorerror09z
Error Textconsole10zShell Normal Textstdout11zShell Stdout Textstderr12zShell Stderr TextheightwidthWM_DELETE_WINDOWN)r   r   )zkeywordr   )r   r   )r   r   )r   r   )zstringr   )r   r   )r   r    )zcursorr"   )zerrorr%   )r&   r'   )zstdoutr)   )zstderrr+   )Toplevel__init__parentinstance_dictwm_withdraw	configuretitlegeometrywinfo_rootxwinfo_rootythemeElementsResetChangedItemsCreateWidgets	resizableFALSE	transientgrab_setprotocolCanceltabPages	focus_setLoadConfigsAttachVarCallbackswm_deiconifywait_window)selfr1   r5   _htestZ_utest rJ   */usr/lib/python3.4/idlelib/configDialog.pyr0      sH    	
!





zConfigDialog.__init__c             C   s   t  |  d d d d d g |  _ |  j j d t d t d t  |  j   |  j   |  j   |  j	   |  j
   j d t  d  S)	N
page_namesz
Fonts/TabsHighlightingKeysGeneralsideexpandfill)r   rB   packTOPTRUEBOTHCreatePageFontTabCreatePageHighlightCreatePageKeysCreatePageGeneralcreate_action_buttonsBOTTOM)rH   rJ   rJ   rK   r;   O   s    	



zConfigDialog.CreateWidgetsc          	   C   sC  t  j   r i  } n i d d 6d d 6} t |  d d } t | d d } t | d d d |  j d	 t | |  _ t | d d
 d |  j d	 t | |  _ t | d d d |  j	 d	 t | |  _
 |  j j d t d d  |  j j d t d d  |  j
 j d t d d  t | d d d d j d t  | j d t  | S)N   padx   pady   textOkcommand	takefocusApplyrA   rP   r   r,   r   r   )r	   ZisAquaTkFrameButtonrc   r=   ZbuttonOkrf   ZbuttonApplyrA   ZbuttonCancelrS   LEFTrT   r\   )rH   ZpaddingArgsZouterZbuttonsrJ   rJ   rK   r[   X   s(    	"z"ConfigDialog.create_action_buttonsc             C   s  |  j  } t |  |  _ t |  |  _ t |  |  _ t |  |  _ t j	 | d+  |  _
 |  j j d j } t | d d d t d d	 } t | d d d t d d
 } t |  } t |  } t | d t d d } t | d d d t d t |  _ |  j j d |  j  t |  } | j d |  j j  |  j j d | j  t | d d }	 t | |  j d  d |  j |  _ t | d |  j d d d d d d d |  j }
 t | d t  d d } t | d t d |  j
 d d |  _! t |  } t | d t d d } t" | d |  j d d d  d d! d d" d# |  _# | j$ d$ t d% d d& d d' t% d( t&  | j$ d$ t d% d d& d d( t'  | j$ d$ t( d% d d& d d( t)  | j$ d$ t( d% d d& d d( t)  | j$ d$ t( d) t*  |  j j$ d$ t d' t% d( t)  | j$ d$ t d( t'  |	 j$ d$ t d) t*  |  j j$ d$ t d) t*  |
 j$ d$ t d) t* d% d*  | j$ d$ t( d% d d& d d' t% d( t&  |  j! j$ d' t% d( t&  | j$ d$ t( d( t)  | j$ d$ t( d) t* d% d  |  j# j$ d$ t( d% d d( t)  | S),Ncourier
   r   z
Fonts/Tabsr   ra   reliefrb   z Base Editor Font z Indentation Width ZjustifyzFont Face :r,   r   re   exportselectionz<ButtonRelease-1>rd   yscrollcommandzSize :variableonvalue   offvaluer   ZBoldfontz,AaBbCcDdEe
FfGgHhIiJjK
1234567890
#:+=(){}[]zPython Standard: 4 Spaces!orientZ
horizontalZtickintervalZfrom_Zto   rP   r^   r`   rQ   rR   anchorr   )rj   rk   znormal)+r1   	StringVarfontSize
BooleanVarfontBoldfontNameIntVarspaceNumtkFontZFontZeditFontrB   pagesframe
LabelFrameGROOVErg   Labelri   Listboxr=   listFontNamebindOnListFontButtonRelease	Scrollbarconfigyviewsetr   SetFontSampleoptMenuFontSizeCheckbuttonSOLIDlabelFontSampleZScaleZscaleSpaceNumrS   rU   rV   YrT   XW)rH   r1   r   Z	frameFontZframeIndentZframeFontNameZframeFontParamZlabelFontNameTitleZ
scrollFontZlabelFontSizeTitleZcheckFontBoldZframeFontSampleZframeIndentSizeZlabelSpaceNumTitlerJ   rJ   rK   rW   w   sn    			("""(zConfigDialog.CreatePageFontTabc             C   s  |  j  } t |  |  _ t |  |  _ t |  |  _ t |  |  _ t |  |  _ t |  |  _ t |  |  _	 |  j
 j d j } t | d d d t d d } t | d d d t d d } t | d t d d d	 dX d d d d d d d t d d d t 	|  _ |  j } | j d d d    | j d d d    dw } x) | D]! } | j t | d | d  qHWx> |  j D]3 } | d? d@  }	 | j |  j | d dA |	  qwW| j dB t  t | d t d d |  _ t |  }
 t |  j d dC dD |  j d d } t |  j |  j	 d  d d |  _  t! |
 dE |  j dF d d dG dD |  j" |  _# t! |
 dE |  j dF d d dH dD |  j" |  _$ |  j j% d  t | d dI dD |  j& } t' | d dJ } t! | dE |  j dF d dD |  j( d dK |  _) t! | dE |  j dF d dD |  j( d dL |  _* t | |  j d  dD d  |  _+ t | |  j d  dD d  |  _, t | d dM dD |  j- |  _. | j/ dN t0 dO dP dQ dP dR t1 dS t2  | j/ dN t0 dO dP dQ dP dS t3  |  j j/ dN t4 dO dP dQ dP dR t1 dS t5  |
 j/ dN t4 dO dP dQ d  |  j j/ dN t4 dO dP dQ dP dR t1 dS t2  | j/ dN t4 dR t1 dS t5 dO dT dQ dU  |  j  j/ dN t4 dR t1 dS t5 dO dT dQ dV  |  j# j/ dN t0 dW t6  |  j$ j/ dN t7 dW t8  | j/ dN t9 dS t5 dO dP dQ dP  | j/ dN t4 dW t8 dO dP dQ dP  |  j) j/ dN t4 dW t8 dO dP  |  j* j/ dN t4 dW t8 dO dP dQ d  |  j+ j/ dN t4 dS t5 dO dP dQ dP  |  j, j/ dN t4 dS t5 dW t8 dO dP dQ dP  |  j. j/ dN t4 dS t5 dO dP dQ dP  | S)xNrM   r   ra   rl   rb   z Custom Highlighting z Highlighting Theme rq   rs   rj      r   r!   Zhand2r-      r,      re   highlightthicknessr   Zwrapz<Double-Button-1>c             S   s   d S)NbreakrJ   )erJ   rJ   rK   <lambda>   s    z2ConfigDialog.CreatePageHighlight.<locals>.<lambda>z<B1-Motion>c             S   s   d S)Nr   rJ   )r   rJ   rJ   rK   r      s    #you can click herer   
r   #to choose itemsdefr    funcr   (param):
  """string"""r   

  var0 = 'string'

  var1 = 
'selected'r   

  var2 = 'found'r   

  var3 = listr   (None)

 error r$   cursor |
 shellr&   r(   r*   c             S   s   |  j  j   j j |  d  S)N)ZwidgetZwinfo_toplevelhighlightTargetr   )eventelemrJ   rJ   rK   tem   s    z-ConfigDialog.CreatePageHighlight.<locals>.temz<ButtonPress-1>statezChoose Colour for :rd   ro   valueZ
ForegroundZ
BackgroundzSave as New Custom Themez	Select : za Built-in Themeza Custom ThemezDelete Custom ThemerP   r^   r   r`   rQ   rR         r_   rv   )zcourierr   r   r   commentr   normalr   r   r   r   zdefkeywordr   r   zfuncz
definitionr   r   r   stringr   r   r   r   r   r   r   zhiliter   r   r   zhitr   r   zlistzbuiltinr   r   zNoner   r   r   r   zerrorr   r   r   r!   r   r   zshellzconsoler   r   stdoutr   r   r   stderrr   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ):r1   rw   builtinThemecustomThemery   fgHilitecolourr{   themeIsBuiltinr   rB   r   r   r   r   ZTextr   r=   ZNONEtextHighlightSampler   insertENDr9   Ztag_bindr   DISABLEDrg   frameColourSetrh   	GetColourr   optMenuHighlightTargetRadiobuttonSetColourSampleBindingradioFgradioBgr   SaveAsNewThemer   SetThemeTypeZradioThemeBuiltinradioThemeCustomoptMenuThemeBuiltinoptMenuThemeCustomDeleteCustomThemebuttonDeleteCustomThemerS   ri   rU   rV   r   rT   r   ERIGHTr   r\   )rH   r1   r   frameCustomZ
frameThemerb   ZtextAndTagsZtxTaelementr   Z	frameFgBgZbuttonSetColourZbuttonSaveCustomThemeZlabelTypeTitlerJ   rJ   rK   rX      s    				              ("+(""%%+%z ConfigDialog.CreatePageHighlightc       
         s  |  j  } t |  |  _ t |  |  _ t |  |  _ t |  |  _ t |  |  _ |  j j	 d j
 } t | d d d t d d } t | d d d t d d   t |  } t | d d } t |  } t | d	 t } t | d
 t d t |  _ |  j j d |  j  | j d |  j j  | j d |  j j  |  j j d | j  |  j j d | j  t | d d d |  j d t |  _   f d d   t d  D } t | d d |  j d d d |  j  d d |  _! t | d d |  j d d d |  j  d d |  _" t# | d |  j d  d d  |  _$ t# | d |  j d  d d  |  _% t | d d d d |  j& |  _' t | d d d d |  j( }	 | j) d t* d d d d d  t+ d! t,    j) d t* d d d d d! t,  |  j j) d t* d! t- d d d d  | j) d t. d d d d d  t+ d! t,  | j/ d d" d | j0 d d" d | j1 d# d d$ d d% d d& t2  |  j j1 d# d d$ d d& t3  | j1 d# d d$ d d& t4  | j1 d# d d$ d d& t5  |  j! j1 d# d d$ d d& t2 t4  |  j" j1 d# d d$ d d& t2 t4  |  j$ j1 d# d d$ d d& t3  |  j% j1 d# d d$ d d& t3  |  j' j) d t. d! t- d  d' d d  |	 j) d t. d! t- d  d' d d  | d j) d t6 d! t, d  d'  | d j) d t6 d! t- d  d' d d  | S)(NrN   r   ra   rl   rb   z Custom Key Bindings z	 Key Set zAction - Key(s)rt   re   rm   z<ButtonRelease-1>rd   rn   ZxscrollcommandzGet New Keys for Selectionr   c          
      s.   g  |  ]$ } t    d  d d d d d  q S)r^   ra   r`   r   r   )rg   ).0i)frameKeySetsrJ   rK   
<listcomp>H  s   	z/ConfigDialog.CreatePageKeys.<locals>.<listcomp>r   ro   r   rq   zUse a Built-in Key SetzUse a Custom Key SetzDelete Custom Key SetzSave as New Custom Key SetrP   r^   r   r`   rQ   rR   weightrowcolumnZ
columnspanstickyT)7r1   rw   ZbindingTargetbuiltinKeys
customKeysry   keysAreBuiltin
keyBindingrB   r   r   r   r   rg   r   r   Z
HORIZONTALr   r=   listBindingsr   KeyBindingSelectedr   r   Zxviewr   rh   
GetNewKeysr   buttonNewKeysranger   SetKeysTypeZradioKeysBuiltinradioKeysCustomr   optMenuKeysBuiltinoptMenuKeysCustomDeleteCustomKeysbuttonDeleteCustomKeysSaveAsNewKeySetrS   r\   rU   rV   r   ri   columnconfigurerowconfiguregridr   NSEWZNSZEWrT   )
rH   r1   r   r   ZframeTargetZlabelTargetTitleZscrollTargetYZscrollTargetXZframesZbuttonSaveCustomKeysrJ   )r   rK   rY   '  s~    		("%("##%" &zConfigDialog.CreatePageKeysc             C   s  |  j  } t |  |  _ t |  |  _ t |  |  _ t |  |  _ t |  |  _ t |  |  _	 t |  |  _
 |  j j d j } t | d d d t d d } t | d d d t d d } t | d d d t } t | d d d t d d } t | d d	 } t | d
 |  j d d d |  j d d } t | d
 |  j d d d |  j d d }	 t | d d }
 t | d
 |  j d d d |  j d d } t | d
 |  j d d d |  j d d } t | d d } t | d d } t | d |  j d d } t | d d } t | d |  j d d } t |  } t |  } t |  } t | d d d t d t |  _ | j d |  j j  |  j j d | j  |  j j d |  j  t | d d  d! t d d" d |  j  |  _! t | d d# d d" d |  j" |  _# t | d d$ d! t d d" d |  j$ |  _% | j& d% t' d& d d' d d( t(  | j& d% t' d& d d' d d( t(  | j& d% t' d& d d' d d( t(  | j& d% t' d& d d' d d) t) d( t*  | j& d% t+ d* t, d& d d' d  |	 j& d% t- d* t, d& d d' d  | j& d% t- d* t, d& d d' d  |
 j& d% t+ d* t, d& d d' d  | j& d% t- d* t, d& d d' d  | j& d% t- d* t, d& d d' d  | j& d% t+ d* t, d& d d' d  | j& d% t- d* t. d& d+ d' d  | j& d% t- d* t. d' d  | j& d% t- d* t. d& d+ d' d  | j& d% t- d* t. d' d  | j& d% t- d& d d' d d( t/  | j& d% t' d& d d' d d) t) d( t*  | j& d% t- d* t, d( t/  |  j j& d% t+ d* t. d) t) d( t*  |  j! j& d% t' d* t, d' d  |  j# j& d% t' d* t,  |  j% j& d% t' d* t, d' d  | S),NrO   r   ra   rl   rb   z Startup Preferences z Autosave Preferences z Additional Help Sources z
At Startupro   r   rq   rd   zOpen Edit Windowr   zOpen Shell WindowzAt Start of Run (F5)  zPrompt to Savez	No Promptz$Initial Window Size  (in characters)ZWidthtextvariabler-   r_   ZHeightr,   r   re   rm   rn   z<ButtonRelease-1>ZEditr   r   ZAddZRemoverP   r^   r`   rR   rQ   rv   rk   )0r1   rw   winWidth	winHeightr|   startupEditautoSaveencodingry   ZuserHelpBrowserZhelpBrowserrB   r   r   r   r   rg   r   r   r
  Entryr   r   r=   listHelpr   r   r   r   HelpSourceSelectedrh   r   HelpListItemEditbuttonHelpListEditHelpListItemAddZbuttonHelpListAddHelpListItemRemovebuttonHelpListRemoverS   rT   r   rU   rV   ri   r   r   r   r   )rH   r1   r   ZframeRunZ	frameSaveZframeWinSizeZ	frameHelpZlabelRunChoiceTitleZradioStartupEditZradioStartupShellZlabelRunSaveTitleZradioSaveAskZradioSaveAutoZlabelWinSizeTitleZlabelWinWidthTitleZentryWinWidthZlabelWinHeightTitleZentryWinHeightZframeHelpListZframeHelpListButtonsZscrollHelpListrJ   rJ   rK   rZ   t  s    				"""(""""""""""(%zConfigDialog.CreatePageGeneralc             C   s  |  j  j d |  j  |  j j d |  j  |  j j d |  j  |  j j d |  j  |  j	 j d |  j
  |  j j d |  j  |  j j d |  j  |  j j d |  j  |  j j d |  j  |  j j d |  j  |  j j d |  j  |  j j d |  j  |  j j d |  j  |  j j d |  j  |  j j d |  j  |  j j d |  j   |  j! j d |  j"  |  j# j d |  j$  d  S)Nw)%rx   Ztrace_variableVarChanged_fontSizer{   VarChanged_fontNamerz   VarChanged_fontBoldr}   VarChanged_spaceNumr   VarChanged_colourr   VarChanged_builtinThemer   VarChanged_customThemer   VarChanged_themeIsBuiltinr   VarChanged_highlightTargetr  VarChanged_keyBindingr  VarChanged_builtinKeysr  VarChanged_customKeysr  VarChanged_keysAreBuiltinr  VarChanged_winWidthr  VarChanged_winHeightr  VarChanged_startupEditr  VarChanged_autoSaver  VarChanged_encoding)rH   rJ   rJ   rK   rE     s$    zConfigDialog.AttachVarCallbacksc             G   s)   |  j  j   } |  j d d d |  d  S)NmainEditorWindowz	font-size)rx   getAddChangedItem)rH   paramsr   rJ   rJ   rK   r$    s    z ConfigDialog.VarChanged_fontSizec             G   s)   |  j  j   } |  j d d d |  d  S)Nr6  r7  rs   )r{   r8  r9  )rH   r:  r   rJ   rJ   rK   r%    s    z ConfigDialog.VarChanged_fontNamec             G   s)   |  j  j   } |  j d d d |  d  S)Nr6  r7  z	font-bold)rz   r8  r9  )rH   r:  r   rJ   rJ   rK   r&    s    z ConfigDialog.VarChanged_fontBoldc             G   s)   |  j  j   } |  j d d d |  d  S)Nr6  Indentz
num-spaces)r}   r8  r9  )rH   r:  r   rJ   rJ   rK   r'    s    z ConfigDialog.VarChanged_spaceNumc             G   s   |  j    d  S)N)OnNewColourSet)rH   r:  rJ   rJ   rK   r(    s    zConfigDialog.VarChanged_colourc             G   s3   |  j  j   } |  j d d d |  |  j   d  S)Nr6  Themename)r   r8  r9  PaintThemeSample)rH   r:  r   rJ   rJ   rK   r)    s    z$ConfigDialog.VarChanged_builtinThemec             G   sB   |  j  j   } | d k r> |  j d d d |  |  j   n  d  S)Nz- no custom themes -r6  r=  r>  )r   r8  r9  r?  )rH   r:  r   rJ   rJ   rK   r*     s    z#ConfigDialog.VarChanged_customThemec             G   sF   |  j  j   } |  j d d d |  | r8 |  j   n
 |  j   d  S)Nr6  r=  default)r   r8  r9  r)  r*  )rH   r:  r   rJ   rJ   rK   r+    s
    z&ConfigDialog.VarChanged_themeIsBuiltinc             G   s   |  j    d  S)N)SetHighlightTarget)rH   r:  rJ   rJ   rK   r,    s    z'ConfigDialog.VarChanged_highlightTargetc             G   s   |  j  j   } |  j j   } |  j j t  j   d } t j |  rb |  j d | | |  n/ t j	 |  } | d } |  j d | | |  d  S)Nr   keysZ_cfgBindings
extensions)
r  r8  r  r  ANCHORsplitr   ZIsCoreBindingr9  ZGetExtnNameForEvent)rH   r:  r   keySetr   ZextNameZextKeybindSectionrJ   rJ   rK   r-    s    
z"ConfigDialog.VarChanged_keyBindingc             G   s6   |  j  j   } |  j d d d |  |  j |  d  S)Nr6  rN   r>  )r  r8  r9  LoadKeysList)rH   r:  r   rJ   rJ   rK   r.    s    z#ConfigDialog.VarChanged_builtinKeysc             G   sE   |  j  j   } | d k rA |  j d d d |  |  j |  n  d  S)Nz- no custom keys -r6  rN   r>  )r  r8  r9  rG  )rH   r:  r   rJ   rJ   rK   r/  "  s    z"ConfigDialog.VarChanged_customKeysc             G   sF   |  j  j   } |  j d d d |  | r8 |  j   n
 |  j   d  S)Nr6  rN   r@  )r  r8  r9  r.  r/  )rH   r:  r   rJ   rJ   rK   r0  (  s
    z&ConfigDialog.VarChanged_keysAreBuiltinc             G   s)   |  j  j   } |  j d d d |  d  S)Nr6  r7  r-   )r  r8  r9  )rH   r:  r   rJ   rJ   rK   r1  0  s    z ConfigDialog.VarChanged_winWidthc             G   s)   |  j  j   } |  j d d d |  d  S)Nr6  r7  r,   )r  r8  r9  )rH   r:  r   rJ   rJ   rK   r2  4  s    z!ConfigDialog.VarChanged_winHeightc             G   s)   |  j  j   } |  j d d d |  d  S)Nr6  rO   zeditor-on-startup)r  r8  r9  )rH   r:  r   rJ   rJ   rK   r3  8  s    z#ConfigDialog.VarChanged_startupEditc             G   s)   |  j  j   } |  j d d d |  d  S)Nr6  rO   autosave)r  r8  r9  )rH   r:  r   rJ   rJ   rK   r4  <  s    z ConfigDialog.VarChanged_autoSavec             G   s)   |  j  j   } |  j d d d |  d  S)Nr6  r7  r  )r  r8  r9  )rH   r:  r   rJ   rJ   rK   r5  @  s    z ConfigDialog.VarChanged_encodingc             C   s)   i i  d 6i  d 6i  d 6i  d 6|  _  d  S)Nr6  	highlightrB  rC  )changedItems)rH   rJ   rJ   rK   r:   D  s    zConfigDialog.ResetChangedItemsc             C   sL   t  |  } | |  j | k r3 i  |  j | | <n  | |  j | | | <d  S)N)strrJ  )rH   typsectionitemr   rJ   rJ   rK   r9  M  s    zConfigDialog.AddChangedItemc             C   s   i i  d 6i  d 6i  d 6i  d 6} x | D] } t  j d |  } xh | D]` } i  | | | <t  j | j |  } x3 | D]+ } t  j | j | |  | | | | <qy WqH Wq) W| S)Nr6  rI  rB  rC  r@  )r   GetSectionList
defaultCfgGetOptionListGet)rH   ZdItems
configTypeZsectionsrM  optionsZoptionrJ   rJ   rK   GetDefaultItemsS  s    "1zConfigDialog.GetDefaultItemsc             C   s   |  j  j   rK |  j j d t  |  j j d t  |  j j d t  nL |  j j d t  |  j j d t  |  j j d t  |  j j d t  d  S)Nr   )	r   r8  r   r   NORMALr   r   r   r   )rH   rJ   rJ   rK   r   _  s    zConfigDialog.SetThemeTypec             C   s   |  j  j   rK |  j j d t  |  j j d t  |  j j d t  nL |  j j d t  |  j j d t  |  j j d t  |  j j d t  d  S)Nr   )	r  r8  r  r   rV  r  r   r  r  )rH   rJ   rJ   rK   r
  j  s    zConfigDialog.SetKeysTypec             C   s  |  j  j t  } |  j  j |  } | j   d } |  j j   rU |  j j   } n |  j j   } t j	   } | |  j
 d k r |  j
 d | } x% | D] } | | j   | | <q Wn  t | j    } t |  d | |  j }	 |	 r|  j j   rJd }
 |  j |
  } | s:|  j  j |  |  j  j |  d  S|  j |  n  |  j  j |  |  j  j | | d |	  |  j  j |  |  j  j |  |  j j |	  n  |  j  j |  |  j  j |  d  S)Nr   rB  zGet New KeyszcYour changes will be saved as a new Custom Key Set. Enter a name for your new Custom Key Set below.z - )r  indexrD  r8  rE  r  r  r  r   ZGetCurrentKeySetrJ  r   valuesr   resultGetNewKeysName
select_setselect_anchorCreateNewKeySetdeleter   r  r   )rH   	listIndexbindingbindNameZcurrentKeySetNameZcurrentBindingskeySetChangesr   ZcurrentKeySequencesnewKeysmessage	newKeySetrJ   rJ   rK   r  u  s<    zConfigDialog.GetNewKeysc             C   s>   t  j d d  t  j d d  } t |  d | |  j } | S)NuserrB  r@  zNew Custom Key Set)r   rO  r   rY  )rH   rd  	usedNamesre  rJ   rJ   rK   rZ    s
    zConfigDialog.GetNewKeysNamec             C   s)   |  j  d  } | r% |  j |  n  d  S)NzNew Key Set Name:)rZ  r]  )rH   ZnewKeysNamerJ   rJ   rK   r    s    zConfigDialog.SaveAsNewKeySetc             C   s   |  j  j d t  d  S)Nr   )r  r   rV  )rH   r   rJ   rJ   rK   r    s    zConfigDialog.KeyBindingSelectedc       
      C   s&  |  j  j   r! |  j j   } n |  j j   } t j |  } i  } x; | D]3 } | d d  } d j | |  } | | | <qL W| |  j d k r |  j d | } x | D] } | | | | <q Wn  |  j | |  t j	 d d  }	 |	 j
   |  j j |	 |  |  j  j d  |  j   d  S)Nra   r   rB  rf  r   )r  r8  r  r  r   ZGetCoreKeysjoinrJ  SaveNewKeySetrO  sortr  SetMenur   r
  )
rH   ZnewKeySetNameZprevKeySetNameZprevKeysrc  r   Z	eventNamer`  rb  ZcustomKeyListrJ   rJ   rK   r]    s&    
zConfigDialog.CreateNewKeySetc       	      C   sE  d } d } |  j  j   r6 d } |  j  j t  } n  t j |  } t | j    } | j   |  j  j	 d t
  x | D] } d j | |  } | d d  } | |  j d k r | |  j d | k r |  j d | | } q n  |  j  j t
 | d |  q{ W| rA|  j  j |  |  j  j |  |  j  j |  n  d  S)Nr   rq   r   ra   rB  z - rh  )r  curselectionrW  rD  r   Z	GetKeySetr   rB  rk  r^  r   ri  rJ  r   seer[  r\  )	rH   
keySetNameZreselectre  r_  rF  Z	bindNamesra  keyrJ   rJ   rK   rG    s(    
zConfigDialog.LoadKeysListc             C   s>  |  j  j   } d } t j d | | d |  s5 d  St j d j |  | |  j d k rm |  j d | =n  t j d j   t j	 d d  } | j
   | s |  j j d t  |  j j | d  n |  j j | | d  |  j j t j d	 j d
 d   |  j j t j d	 j d
 d   |  j   |  j   d  S)Nz0Are you sure you wish to delete the key set %r ?zDelete Key Setr1   rB  rf  r   z- no custom keys -r   r6  rN   r@  r>  )r  r8  tkMessageBoxaskyesnor   userCfgremove_sectionrJ  SaverO  rk  r  r   r   r  rl  r  r   rP  rR  r  rf   r
  )rH   ro  delmsgitemListrJ   rJ   rK   r    s&    
##
zConfigDialog.DeleteCustomKeysc             C   s>  |  j  j   } d } t j d | | d |  s5 d  St j d j |  | |  j d k rm |  j d | =n  t j d j   t j	 d d  } | j
   | s |  j j d t  |  j j | d  n |  j j | | d  |  j j t j d	 j d
 d   |  j j t j d	 j d
 d   |  j   |  j   d  S)Nz.Are you sure you wish to delete the theme %r ?zDelete Themer1   rI  rf  r   z- no custom themes -r   r6  r=  r@  r>  )r   r8  rq  rr  r   rs  rt  rJ  ru  rO  rk  r   r   r   r   rl  r   r   rP  rR  r   rf   r   )rH   	themeNamerv  rw  rJ   rJ   rK   r     s&    
##
zConfigDialog.DeleteCustomThemec             C   s   |  j  j   } |  j j d  } t j d |  d d | d |  \ } } | r | | k r |  j j   r d } |  j |  } | s d  S|  j |  |  j	 j
 |  q |  j	 j
 |  n  d  S)Nbgr1   r5   zPick new colour for : Zinitialcolorz_Your changes will be saved as a new Custom Theme. Enter a name for your new Custom Theme below.)r   r8  r   ZcgettkColorChooserZaskcolorr   GetNewThemeNameCreateNewThemer   r   )rH   targetZ
prevColourZ	rgbTupletZcolourStringrd  newThemerJ   rJ   rK   r     s    	zConfigDialog.GetColourc             C   s   |  j  j   } |  j j d |  |  j j   r7 d n d } |  j |  j j   d } |  j j | i | | 6 |  j	 j   } | d | } |  j
 d | | |  d  S)Nry  
foreground
backgroundr   -rI  )r   r8  r   r   r   r9   r   r   
tag_configr   r9  )rH   Z	newColourplaneZsampleElementthemeZthemeElementrJ   rJ   rK   r<  $  s    zConfigDialog.OnNewColourSetc             C   s>   t  j d d  t  j d d  } t |  d | |  j } | S)Nrf  rI  r@  zNew Custom Theme)r   rO  r   rY  )rH   rd  rg  r~  rJ   rJ   rK   r{  .  s
    zConfigDialog.GetNewThemeNamec             C   s)   |  j  d  } | r% |  j |  n  d  S)NzNew Theme Name:)r{  r|  )rH   newThemeNamerJ   rJ   rK   r   5  s    zConfigDialog.SaveAsNewThemec             C   s   |  j  j   r' d } |  j j   } n d } |  j j   } t j | |  } | |  j d k r |  j d | } x | D] } | | | | <qy Wn  |  j | |  t j d d  } | j	   |  j
 j | |  |  j  j d  |  j   d  S)Nr@  rf  rI  r   )r   r8  r   r   r   ZGetThemeDictrJ  SaveNewThemerO  rk  r   rl  r   r   )rH   r  Z	themeTyperx  r~  ZthemeChangesr   ZcustomThemeListrJ   rJ   rK   r|  :  s     
zConfigDialog.CreateNewThemec             C   s6   |  j  j t  } |  j j | j    |  j   d  S)N)r   r8  rD  r{   r   lowerr   )rH   r   rs   rJ   rJ   rK   r   R  s    z$ConfigDialog.OnListFontButtonReleaseNc             C   sr   |  j  j   } |  j j   r' t j n t j } | |  j j   | f } |  j j d |  |  j	 j
 d |  d  S)Nrs   )r{   r8  rz   r~   ZBOLDrV  rx   r   r   r   r4   )rH   r   r{   Z
fontWeightZnewFontrJ   rJ   rK   r   W  s
    !zConfigDialog.SetFontSamplec             C   s   |  j  j   d k rN |  j j d t  |  j j d t  |  j j d  n6 |  j j d t  |  j j d t  |  j j d  |  j	   d  S)Nr#   r   rq   )
r   r8  r   r   r   r   r   r   rV  SetColourSample)rH   rJ   rJ   rK   rA  ^  s    zConfigDialog.SetHighlightTargetc             G   s   |  j    d  S)N)r  )rH   argsrJ   rJ   rK   r   i  s    z#ConfigDialog.SetColourSampleBindingc             C   sa   |  j  |  j j   d } |  j j   r/ d n d } |  j j | |  } |  j j d |  d  S)Nr   r  r  ry  )r9   r   r8  r   r   Ztag_cgetr   r   )rH   tagr  r   rJ   rJ   rK   r  l  s    zConfigDialog.SetColourSamplec             C   s$  |  j  j   r! |  j j   } n |  j j   } x |  j D] } |  j | d } t j | |  } | d k r t j | d d d | d <n  | |  j d k r |  j d | } | d | k r | | d | d	 <n  | d
 | k r | | d
 | d <q n  |  j j	 | |  q: W|  j
   d  S)Nr   r!   r   ZfgBgry  r  rI  z-foregroundr  z-background)r   r8  r   r   r9   r   ZGetHighlightrJ  r   r  r  )rH   r  ZelementTitler   ZcoloursZ	themeDictrJ   rJ   rK   r?  s  s"    zConfigDialog.PaintThemeSamplec             C   s   |  j    d  S)N)SetHelpListButtonStates)rH   r   rJ   rJ   rK   r    s    zConfigDialog.HelpSourceSelectedc             C   s   |  j  j   d k  r> |  j j d t  |  j j d t  n^ |  j  j   rv |  j j d t  |  j j d t  n& |  j j d t  |  j j d t  d  S)Nrq   r   )r  sizer  r   r   r"  rm  rV  )rH   rJ   rJ   rK   r    s    z$ConfigDialog.SetHelpListButtonStatesc             C   sh   t  |  d  j } | rZ |  j j | d | d f  |  j j t | d  |  j   n  |  j   d  S)NzNew Help Sourcer   rq   )	r   rY  userHelpListappendr  r   r   UpdateUserHelpChangedItemsr  )rH   
helpSourcerJ   rJ   rK   r     s    zConfigDialog.HelpListItemAddc             C   s   |  j  j t  } |  j | } t |  d d | d d | d j } | sX | | k r\ d  S| |  j | <|  j  j |  |  j  j | | d  |  j   |  j	   d  S)NzEdit Help SourceZmenuItemr   ZfilePathrq   )
r  rW  rD  r  r   rY  r^  r   r  r  )rH   	itemIndexr  ZnewHelpSourcerJ   rJ   rK   r    s    
zConfigDialog.HelpListItemEditc             C   sD   |  j  j t  } |  j | =|  j  j |  |  j   |  j   d  S)N)r  rW  rD  r  r^  r  r  )rH   r  rJ   rJ   rK   r!    s
    

zConfigDialog.HelpListItemRemovec          	   C   sv   i  |  j  d d <x^ t d t |  j  d  D]@ } |  j d d t |  d j |  j | d d d    q. Wd S)z<Clear and rebuild the HelpFiles section in self.changedItemsr6  	HelpFilesrq   ;Nra   )rJ  r	  lenr  r9  rK  ri  )rH   ZnumrJ   rJ   rK   r    s
    #z'ConfigDialog.UpdateUserHelpChangedItemsc             C   sH  t  t j |    } | j   x! | D] } |  j j t |  q& Wt j d d d d d } | j	   } |  j
 j |  d d   | D } | | k r | j |  } |  j j |  |  j j |  |  j j |  n  t j d d d d	 d
 d d } |  j j d |  |  j j t j d d d d d d	 d  |  j   d  S)Nr6  r7  rs   r@  rj   c             S   s   g  |  ] } | j     q SrJ   )r  )r   srJ   rJ   rK   r     s   	 z,ConfigDialog.LoadFontCfg.<locals>.<listcomp>z	font-sizetypeintr'   789r)   r+   131416182022z	font-boldr   bool)r  r  r  z10z11z12r  r  r  r  r  r  )r   r~   Zfamiliesrk  r   r   r   r   	GetOptionr  r{   r   rW  rn  r[  r\  r   rl  rz   r   )rH   Zfontsrs   ZconfiguredFontZlc_configuredFontZlc_fontsZcurrentFontIndexrx   rJ   rJ   rK   LoadFontCfg  s*    
	
zConfigDialog.LoadFontCfgc             C   s5   t  j d d d d d d d } |  j j |  d  S)Nr6  r;  z
num-spacesr@  r   r  r  )r   r  r}   r   )rH   r}   rJ   rJ   rK   
LoadTabCfg  s    zConfigDialog.LoadTabCfgc          	      s    j  j t j d d d d d d d  t j   }   j  j   r t j d d  } | j     j j	 | |  t j d d  } | j   | s   j
 j d	 t    j j d
  q9  j j	 | | d  nb t j d d  } | j     j j	 | |  t j d d  } | j     j j	 | | d    j   t   j j    } | j d   f d d      j j	 | | d    j     j   d  S)Nr6  r=  r@  r  r  rq   rI  rf  r   z- no custom themes -r   rp  c                s     j  |  d S)Nrq   )r9   )x)rH   rJ   rK   r     s    z+ConfigDialog.LoadThemeCfg.<locals>.<lambda>)r   r   r   r  ZCurrentThemer8  rO  rk  r   rl  r   r   r   r   r   r   r   r9   rB  r   r?  rA  )rH   currentOptionrw  Z
themeNamesrJ   )rH   rK   LoadThemeCfg  s2    





zConfigDialog.LoadThemeCfgc          	   C   s`  |  j  j t j d d d d d d d  t j   } |  j  j   r t j d d  } | j   |  j j	 | |  t j d d  } | j   | s |  j
 j d	 t  |  j j d
  q9|  j j	 | | d  nb t j d d  } | j   |  j j	 | |  t j d d  } | j   |  j j	 | | d  |  j   t j   } |  j |  d  S)Nr6  rN   r@  r  r  rq   rB  rf  r   z- no custom keys -r   )r  r   r   r  ZCurrentKeysr8  rO  rk  r  rl  r  r   r   r  r  r
  rG  )rH   r  rw  ro  rJ   rJ   rK   
LoadKeyCfg  s,    




zConfigDialog.LoadKeyCfgc          	   C   s  |  j  j t j d d d d d d d  |  j j t j d d d d d	 d d  |  j j t j d d
 d d d  |  j j t j d d
 d d d  |  j j t j d d
 d d d  t j   |  _	 x( |  j	 D] } |  j
 j t | d	  q W|  j   d  S)Nr6  rO   zeditor-on-startupr@  rq   r  r  rH  r   r7  r-   r  r,   r  Znone)r  r   r   r  r  r  r  r  ZGetAllExtraHelpSourcesListr  r  r   r   r  )rH   ZhelpItemrJ   rJ   rK   LoadGeneralCfg  s    zConfigDialog.LoadGeneralCfgc             C   s6   |  j    |  j   |  j   |  j   |  j   d S)z
        load configuration from default and user config files and populate
        the widgets on the config dialog pages.
        N)r  r  r  r  r  )rH   rJ   rJ   rK   rD   1  s
    



zConfigDialog.LoadConfigsc             C   sf   t  j d j |  s- t  j d j |  n  x2 | D]* } | | } t  j d j | | |  q4 Wd S)z
        save a newly created core key set.
        keySetName - string, the name of the new key set
        keySet - dictionary containing the new key set
        rB  N)r   rs  has_sectionadd_section	SetOption)rH   ro  rF  r   r   rJ   rJ   rK   rj  @  s
    
zConfigDialog.SaveNewKeySetc             C   sf   t  j d j |  s- t  j d j |  n  x2 | D]* } | | } t  j d j | | |  q4 Wd S)z
        save a newly created theme.
        themeName - string, the name of the new theme
        theme - dictionary containing the new theme
        rI  N)r   rs  r  r  r  )rH   rx  r  r   r   rJ   rJ   rK   r  L  s
    
zConfigDialog.SaveNewThemec             C   sl   t  j | j | |  rR t  j | j | |  | k rR t  j | j | |  Sn  t  j | j | | |  S)N)r   rP  Z
has_optionrR  rs  RemoveOptionr  )rH   rS  rM  rN  r   rJ   rJ   rK   SetUserValueX  s    zConfigDialog.SetUserValuec             C   s  t  j d j   x |  j D] } d } x |  j | D] } | d k rd t  j d j d  d } n  xO |  j | | D]< } |  j | | | } |  j | | | |  rv d } qv qv Wq5 W| r t  j | j   q q Wx% d d g D] } t  j | j   q W|  j   d S)z3Save configuration changes to the user config file.r6  Fr  TrB  rI  N)r   rs  ru  rJ  rt  r  r:   )rH   rS  ZcfgTypeHasChangesrM  rN  r   rJ   rJ   rK   SaveAllChangedConfigs`  s     	z"ConfigDialog.SaveAllChangedConfigsc             C   s1   |  j  j j   } x | D] } | j   q Wd  S)N)r1   r2   rB  ZRemoveKeybindings)rH   winInstancesinstancerJ   rJ   rK   DeactivateCurrentConfigu  s    z$ConfigDialog.DeactivateCurrentConfigc             C   sY   |  j  j j   } x@ | D]8 } | j   | j   | j   | j   | j   q Wd S)z'Dynamically apply configuration changesN)r1   r2   rB  ZResetColorizerZ	ResetFontZset_notabs_indentwidthZApplyKeybindingsZreset_help_menu_entries)rH   r  r  rJ   rJ   rK   ActivateConfigChanges|  s    



z"ConfigDialog.ActivateConfigChangesc             C   s   |  j    d  S)N)destroy)rH   rJ   rJ   rK   rA     s    zConfigDialog.Cancelc             C   s   |  j    |  j   d  S)N)rf   r  )rH   rJ   rJ   rK   rc     s    
zConfigDialog.Okc             C   s"   |  j    |  j   |  j   d  S)N)r  r  r  )rH   rJ   rJ   rK   rf     s    

zConfigDialog.Applyc             C   s   d  S)NrJ   )rH   rJ   rJ   rK   Help  s    zConfigDialog.Help)K__name__
__module____qualname__r0   r;   r[   rW   rX   rY   rZ   rE   r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r:   r9  rU  r   r
  r  rZ  r  r  r]  rG  r  r   r   r<  r{  r   r|  r   r   rA  r   r  r?  r  r  r   r  r!  r  r  r  r  r  r  rD   rj  r  r  r  r  r  rA   rc   rf   r  rJ   rJ   rJ   rK   r
      s   4	DlM`	$
!
r
   c               @   s"   e  Z d  Z d Z d d   Z d S)VerticalScrolledFramezA pure Tkinter vertically scrollable frame.

    * Use the 'interior' attribute to place widgets inside the scrollable frame
    * Construct and pack/place/grid normally
    * This frame only allows vertical scrolling
    c                s0  t  j |  | | |  t |  d t } | j d t d t d t  t |  d d d d d | j	     j d t
 d t d t  | j d	   j    j d    j d  t     |  _    j d d d
  d t     f d d   }  j d |      f d d   }   j d |  d  S)Nrt   rR   rP   rQ   Zbdr   r   rn   rd   Zwindowrv   c                sa    j     j   f }   j d d |   j      j   k r]   j d  j     n  d  S)NZscrollregionz	0 0 %s %sr-   )winfo_reqwidthZwinfo_reqheightr   winfo_width)r   r  )canvasinteriorrJ   rK   _configure_interior  s    z;VerticalScrolledFrame.__init__.<locals>._configure_interiorz<Configure>c                s8    j      j   k r4   j  d   j   n  d  S)Nr-   )r  r  Zitemconfigure)r   )r  r  interior_idrJ   rK   _configure_canvas  s    z9VerticalScrolledFrame.__init__.<locals>._configure_canvas)rg   r0   r   ZVERTICALrS   r   r   r=   ZCanvasr   ri   rV   rU   r   r   Zxview_movetoZyview_movetor  Zcreate_windowNWr   )rH   r1   r  kwZ
vscrollbarr  r  rJ   )r  r  r  rK   r0     s     zVerticalScrolledFrame.__init__N)r  r  r  __doc__r0   rJ   rJ   rJ   rK   r    s   r  c             C   s9   |  s
 d Sy t  |   d SWn t k
 r4 d SYn Xd S)z(Return 's is blank or represents an int'TFN)r  
ValueError)r  rJ   rJ   rK   is_int  s    
r  c               @   s   e  Z d  Z d Z d d d d  Z d d   Z d d	   Z e j Z d
 d   Z	 e j
 Z
 d d   Z e j Z d d   Z d d   Z d d   Z d S)ConfigExtensionsDialoga  A dialog for configuring IDLE extensions.

    This dialog is generic - it works for any and all IDLE extensions.

    IDLE extensions save their configuration options using idleConf.
    ConfigExtensionsDialog reads the current configuration using idleConf,
    supplies a GUI interface to change the configuration values, and saves the
    changes using idleConf.

    Not all changes take effect immediately - some may require restarting IDLE.
    This depends on each extension's implementation.

    All values are treated as text, and it is up to the user to supply
    reasonable values. The only exception to this are the 'enable*' options,
    which are boolean, and can be toggled with an True/False button.
    NFc             C   s^  t  j |  |  |  j   |  j d d  |  j d | j   d | j   | sU d n d f  |  j | pp d  t j	 d |  _	 t j
 d |  _
 |  j t  |  _ |  j   |  j   |  j d	 t d
 t  |  j |  |  j d |  j  |  j j   |  j   |  j |  j   d  |  j d	 t d
 t  |  j   | sZ|  j   |  j   n  d  S)Nr   r   z+%d+%dr   r   r   zIDLE Extensions ConfigurationrC  r,   r-   r.   rq   )r/   r0   r3   r4   r6   r7   r8   Zwm_titler   rP  rs  registerr  load_extensionscreate_widgetsr<   r=   r>   r@   rA   tabbed_page_setrC   updateZ
wm_minsizer  rU   rF   r?   rG   )rH   r1   r5   rI   rJ   rJ   rK   r0     s.    
!




zConfigExtensionsDialog.__init__c       
      C   s  i  |  _  x' t j d d  D] } g  |  j  | <q Wx|  j  D]} t |  j j |   } d d   | D } x | D] } | j |  qu W| | } x3| D]+} |  j j | | d d } y" i d d 6d d 6| } d	 } WnI t k
 r+y t	 |  } d
 } Wn t
 k
 r&| } d } Yn XYn Xy+ |  j j | | d | d d d | } Wn t
 k
 rq| } Yn Xt |   }	 |	 j t |   |  j  | j i | d 6| d 6| d 6| d 6|	 d 6 q Wq= Wd S)zAFill self.extensions with data from the default and user configs.Zactive_onlyFc             S   s%   g  |  ] } | j  d   r |  q S)enable)
startswith)r   opt_namerJ   rJ   rK   r   
  s   	 z:ConfigExtensionsDialog.load_extensions.<locals>.<listcomp>rawTTrueFalser  r  Nr  r@  r>  r   var)rC  r   ZGetExtensionssortedrP  rQ  removerR  KeyErrorr  r  rs  rw   r   rK  r  )
rH   ext_nameZopt_listZenablesr  Zdef_strZdef_objZopt_typer   r  rJ   rJ   rK   r     sF    	
	

	z&ConfigExtensionsDialog.load_extensionsc          
   C   s   |  j  d d d |  j  d d d |  j d d d t |  d |  j j   d d d d d	 t j |  _ |  j j d
 d d d d t  x |  j D] } |  j	 |  q W|  j
   j d
 d  d S)zCreate the dialog's widgets.r   r   rq   rL   Zn_rowsNZmax_tabs_per_rowr   Z
page_classr   r   r   )r  r  r   rC  rB  Z
PageRemover  r  r  create_tab_pager[   )rH   r  rJ   rJ   rK   r  -  s    z%ConfigExtensionsDialog.create_widgetsc       	      C   s  t  |  j j | j d d d d d t d d | } | j d t d d	 d d
 d d  t | d d d d } | j d t d t d t	  | j
 } | j d d d | j d d d xFt |  j |  D]1\ } } t | d | d } | j d | d d d t  | d } | d d k r{t | d | d | d d d d d t d  d! d" d# j d | d d d t d d$  q | d d% k rt | d | d& d' d( |  j d) f j d | d d d t d d$  q t | d | j d | d d d t d d$  q Wd* S)+z!Create the page for an extension.Zborderra   r^   rl   rb   z %s rR   rQ   Tr   r`   r,      rP   r   r   rq   r>  r   r   r   r  r  r  r  ro   rp   r  rr   r  ZindicatoronZselectcolorr   r-   r      r  Zvalidaterp  Zvalidatecommandz%PN)r   r  r   r   r   rS   rV   r  r\   rU   r  r  	enumeraterC  r   r  r  r   r=   r   r  r  r  )	rH   r  ZpageZscrolled_frameZ
entry_arear   optZlabelr  rJ   rJ   rK   r  @  s2    "	 
z&ConfigExtensionsDialog.create_tab_pagec             C   s   |  j    d  S)N)save_all_changed_configs)rH   rJ   rJ   rK   rf   g  s    
zConfigExtensionsDialog.Applyc             C   s   d  S)NrJ   )rH   rJ   rJ   rK   r  m  s    zConfigExtensionsDialog.Helpc             C   sv   | d } | d } | d j    j   p- | } | d j |  | | k r` |  j j | |  S|  j j | | |  S)Nr>  r@  r  )r8  stripr   rs  r  r  )rH   rM  r  r>  r@  r   rJ   rJ   rK   set_user_valuep  s    

z%ConfigExtensionsDialog.set_user_valuec             C   sm   d } xJ |  j  D]? } |  j  | } x) | D]! } |  j | |  r* d } q* q* Wq W| ri |  j j   n  d S)z3Save configuration changes to the user config file.FTN)rC  r  rs  ru  )rH   Zhas_changesr  rT  r  rJ   rJ   rK   r  |  s    z/ConfigExtensionsDialog.save_all_changed_configs)r  r  r  r  r0   r  r  r
   r[   r  rc   rf   rA   r  r  r  rJ   rJ   rJ   rK   r    s    -	%		r  __main__z#idlelib.idle_test.test_configdialog	verbosityra   exitF)run)$r  ZtkinterZtkinter.messageboxZ
messageboxrq  Ztkinter.colorchooserZcolorchooserrz  Ztkinter.fontrs   r~   Zidlelib.configHandlerr   Zidlelib.dynOptionMenuWidgetr   Zidlelib.tabbedpagesr   Zidlelib.keybindingDialogr   Zidlelib.configSectionNameDialogr   Zidlelib.configHelpSourceEditr   Zidlelibr	   r/   r
   rg   r  r  r  r  Zunittestr6  Zidlelib.idle_test.htestr  rJ   rJ   rJ   rK   <module>   s4   
    -