
\[\S                 @   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 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  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               @   sy  e  Z d  Z 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. d/   Z d0 d1   Z d2 d3   Z d4 d5   Z d6 d7   Z d8 d9   Z d: d;   Z d< d=   Z  d> d?   Z! d@ dA   Z" dB dC   Z# dD dE   Z$ dF dG   Z% dH dI   Z& dJ dK   Z' dL dM   Z( dN dO   Z) dP dQ   Z* dR dS   Z+ dT dU   Z, dV dW   Z- dX dY   Z. dZ d[   Z/ d\ d] d^  Z0 d_ d`   Z1 da db   Z2 dc dd   Z3 de df   Z4 dg dh   Z5 di dj   Z6 dk dl   Z7 dm dn   Z8 do dp   Z9 dq dr   Z: ds dt   Z; du dv   Z< dw dx   Z= dy dz   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)ConfigDialogFc             C   s  t  j |  |  | |  _ | r+ i  | _ n  |  j   |  j d d  |  j 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widthZ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_dictZwm_withdraw	configuretitleZgeometryZwinfo_rootxZwinfo_rootythemeElementsResetChangedItemsCreateWidgetsZ	resizableFALSEZ	transientZgrab_setZprotocolCanceltabPagesZ	focus_setLoadConfigsAttachVarCallbacksZwm_deiconifyZwait_window)selfr/   r2   Z_htestZ_utest r<   */usr/lib/python3.4/idlelib/configDialog.pyr.      sH    	
!





zConfigDialog.__init__c          	   C   s  t  |  d d d d d g |  _ t |  d d } t j   rH i  } n i d d	 6d
 d 6} t | d d d |  j d t | |  _ t | d d d |  j	 d t | |  _
 t | d d d |  j d t | |  _ |  j   |  j   |  j   |  j   |  j j d t d	 d  |  j
 j d t d	 d  |  j j d t d	 d  | j d t  t |  d d d d j d t  |  j j d t d t d t  d  S)NZ
page_namesz
Fonts/TabsHighlightingKeysGeneralpady      padx   textOkcommand	takefocusApplyr7   sider   r+   r   r   expandfill)r   r8   Framer	   ZisAquaTkButtonrG   r6   ZbuttonOkrJ   ZbuttonApplyr7   ZbuttonCancelCreatePageFontTabCreatePageHighlightCreatePageKeysCreatePageGeneralpackLEFTBOTTOMTOPTRUEBOTH)r;   ZframeActionButtonsZpaddingArgsr<   r<   r=   r5   O   s2    		



"zConfigDialog.CreateWidgetsc             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   rB   reliefrF   z Base Editor Font z Indentation Width ZjustifyzFont Face :r+   r   rI   exportselectionz<ButtonRelease-1>rH   yscrollcommandzSize :variableZonvalue   Zoffvaluer   ZBoldfontz,AaBbCcDdEe
FfGgHhIiJjK
1234567890
#:+=(){}[]zPython Standard: 4 Spaces!orientZ
horizontalZtickintervalZfrom_Zto   rK   rD   rA   rL   rM   anchorr   )rZ   r[   znormal)+r/   	StringVarfontSize
BooleanVarfontBoldfontNameIntVarspaceNumtkFontZFontZeditFontr8   pagesframe
LabelFrameGROOVErN   LabelrU   Listboxr6   listFontNamebindOnListFontButtonRelease	Scrollbarconfigyviewsetr   SetFontSampleoptMenuFontSizeZCheckbuttonSOLIDlabelFontSampleZScaleZscaleSpaceNumrT   rX   rY   YrW   XW)r;   r/   rn   Z	frameFontZframeIndentZframeFontNameZframeFontParamZlabelFontNameTitleZ
scrollFontZlabelFontSizeTitleZcheckFontBoldZframeFontSampleZframeIndentSizeZlabelSpaceNumTitler<   r<   r=   rP   t   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)xNr>   r   rB   r\   rF   z Custom Highlighting z Highlighting Theme r`   ra   rZ       r    Zhand2r,      r+      rI   Zhighlightthicknessr   Zwrapz<Double-Button-1>c             S   s   d S)Nbreakr<   )er<   r<   r=   <lambda>   s    z2ConfigDialog.CreatePageHighlight.<locals>.<lambda>z<B1-Motion>c             S   s   d S)Nr   r<   )r   r<   r<   r=   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highlightTargetry   )eventelemr<   r<   r=   tem   s    z-ConfigDialog.CreatePageHighlight.<locals>.temz<ButtonPress-1>statezChoose Colour for :rH   r_   valueZ
ForegroundZ
BackgroundzSave as New Custom Themez	Select : za Built-in Themeza Custom ThemezDelete Custom ThemerK   rD   r   rA   rL   rM         rE   rd   )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   ):r/   re   builtinThemecustomThemerg   fgHilitecolourri   themeIsBuiltinr   r8   rm   rn   ro   rp   ZTextr|   r6   ZNONEtextHighlightSamplert   insertENDr3   Ztag_bindrw   DISABLEDrN   frameColourSetrO   	GetColourr   optMenuHighlightTargetRadiobuttonSetColourSampleBindingradioFgradioBgry   SaveAsNewThemerq   SetThemeTypeZradioThemeBuiltinradioThemeCustomoptMenuThemeBuiltinoptMenuThemeCustomDeleteCustomThemebuttonDeleteCustomThemerT   rU   rX   rY   r~   rW   r   ERIGHTr   rV   )r;   r/   rn   frameCustomZ
frameThemerF   ZtextAndTagsZtxTaelementr   Z	frameFgBgZbuttonSetColourZbuttonSaveCustomThemeZlabelTypeTitler<   r<   r=   rQ      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)(Nr?   r   rB   r\   rF   z Custom Key Bindings z	 Key Set zAction - Key(s)rb   rI   r]   z<ButtonRelease-1>rH   r^   ZxscrollcommandzGet New Keys for Selectionr   c          
      s.   g  |  ]$ } t    d  d d d d d  q S)rD   rB   rA   r   r   )rN   ).0i)frameKeySetsr<   r=   
<listcomp>E  s   	z/ConfigDialog.CreatePageKeys.<locals>.<listcomp>r   r_   r   r`   zUse a Built-in Key SetzUse a Custom Key SetzDelete Custom Key SetzSave as New Custom Key SetrK   rD   r   rA   rL   rM   ZweightrowcolumnZ
columnspanZstickyT)7r/   re   ZbindingTargetbuiltinKeys
customKeysrg   keysAreBuiltin
keyBindingr8   rm   rn   ro   rp   rN   rq   rv   Z
HORIZONTALrr   r6   listBindingsrt   KeyBindingSelectedrw   rx   Zxviewry   rO   
GetNewKeysr   buttonNewKeysranger   SetKeysTypeZradioKeysBuiltinradioKeysCustomr   optMenuKeysBuiltinoptMenuKeysCustomDeleteCustomKeysbuttonDeleteCustomKeysSaveAsNewKeySetrT   rV   rX   rY   r   rU   ZcolumnconfigureZrowconfigureZgridr   ZNSEWZNSZEWrW   )
r;   r/   rn   r   ZframeTargetZlabelTargetTitleZscrollTargetYZscrollTargetXZframesZbuttonSaveCustomKeysr<   )r   r=   rR   $  s~    		("%("##%" &zConfigDialog.CreatePageKeysc             C   s  |  j  } t |  |  _ 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 } 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 | 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)  | 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+ t- d' d d( d  | j' d& t. d+ t/ d' d, d( d  | j' d& t. d' d d( d d) t0  | j' d& t( d' d d( d d* t* d) t+  | j' d& t. d+ t- d) t0  |  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)-Nr@   r   rB   r\   rF   z Startup Preferences z Autosave Preferences z Additional Help Sources z
At Startupr_   r   r`   rH   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WidthZtextvariabler,   rE   ZHeightz(Paragraph reformat width (in characters)r+   r   rI   r]   r^   z<ButtonRelease-1>ZEditr   r   ZAddZRemoverK   rD   rA   rM   rL   rd   r[   )1r/   re   winWidth	winHeight	paraWidthrj   startupEditautoSaveencodingrg   ZuserHelpBrowserZhelpBrowserr8   rm   rn   ro   rp   rN   rq   r   r   ZEntryrv   rr   r6   listHelprw   rx   ry   rt   HelpSourceSelectedrO   r   HelpListItemEditbuttonHelpListEditHelpListItemAddZbuttonHelpListAddHelpListItemRemovebuttonHelpListRemoverT   rW   r   rX   rY   rU   r   r   r   r~   )r;   r/   rn   ZframeRunZ	frameSaveZframeWinSizeZframeParaSizeZ	frameHelpZlabelRunChoiceTitleZradioStartupEditZradioStartupShellZlabelRunSaveTitleZradioSaveAskZradioSaveAutoZlabelWinSizeTitleZlabelWinWidthTitleZentryWinWidthZlabelWinHeightTitleZentryWinHeightZlabelParaWidthTitleZentryParaWidthZframeHelpListZframeHelpListButtonsZscrollHelpListr<   r<   r=   rS   q  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$  |  j% j d |  j&  d  S)Nw)'rf   Ztrace_variableVarChanged_fontSizeri   VarChanged_fontNamerh   VarChanged_fontBoldrk   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_paraWidthr   VarChanged_startupEditr   VarChanged_autoSaver  VarChanged_encoding)r;   r<   r<   r=   r:     s&    zConfigDialog.AttachVarCallbacksc             G   s)   |  j  j   } |  j d d d |  d  S)NmainEditorWindowz	font-size)rf   getAddChangedItem)r;   paramsr   r<   r<   r=   r
    s    z ConfigDialog.VarChanged_fontSizec             G   s)   |  j  j   } |  j d d d |  d  S)Nr  r  ra   )ri   r  r   )r;   r!  r   r<   r<   r=   r    s    z ConfigDialog.VarChanged_fontNamec             G   s)   |  j  j   } |  j d d d |  d  S)Nr  r  z	font-bold)rh   r  r   )r;   r!  r   r<   r<   r=   r    s    z ConfigDialog.VarChanged_fontBoldc             G   s)   |  j  j   } |  j d d d |  d  S)Nr  Indentz
num-spaces)rk   r  r   )r;   r!  r   r<   r<   r=   r    s    z ConfigDialog.VarChanged_spaceNumc             G   s   |  j    d  S)N)OnNewColourSet)r;   r!  r<   r<   r=   r    s    zConfigDialog.VarChanged_colourc             G   s3   |  j  j   } |  j d d d |  |  j   d  S)Nr  Themename)r   r  r   PaintThemeSample)r;   r!  r   r<   r<   r=   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 -r  r$  r%  )r   r  r   r&  )r;   r!  r   r<   r<   r=   r  	  s    z#ConfigDialog.VarChanged_customThemec             G   sF   |  j  j   } |  j d d d |  | r8 |  j   n
 |  j   d  S)Nr  r$  default)r   r  r   r  r  )r;   r!  r   r<   r<   r=   r    s
    z&ConfigDialog.VarChanged_themeIsBuiltinc             G   s   |  j    d  S)N)SetHighlightTarget)r;   r!  r<   r<   r=   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   r  r   r   ANCHORsplitr   ZIsCoreBindingr   ZGetExtnNameForEvent)r;   r!  r   keySetr   ZextNameZextKeybindSectionr<   r<   r=   r    s    
z"ConfigDialog.VarChanged_keyBindingc             G   s6   |  j  j   } |  j d d d |  |  j |  d  S)Nr  r?   r%  )r   r  r   LoadKeysList)r;   r!  r   r<   r<   r=   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 -r  r?   r%  )r   r  r   r.  )r;   r!  r   r<   r<   r=   r  +  s    z"ConfigDialog.VarChanged_customKeysc             G   sF   |  j  j   } |  j d d d |  | r8 |  j   n
 |  j   d  S)Nr  r?   r'  )r   r  r   r  r  )r;   r!  r   r<   r<   r=   r  1  s
    z&ConfigDialog.VarChanged_keysAreBuiltinc             G   s)   |  j  j   } |  j d d d |  d  S)Nr  r  r,   )r   r  r   )r;   r!  r   r<   r<   r=   r  9  s    z ConfigDialog.VarChanged_winWidthc             G   s)   |  j  j   } |  j d d d |  d  S)Nr  r  r+   )r   r  r   )r;   r!  r   r<   r<   r=   r  =  s    z!ConfigDialog.VarChanged_winHeightc             G   s)   |  j  j   } |  j d d d |  d  S)Nr  FormatParagraph	paragraph)r   r  r   )r;   r!  r   r<   r<   r=   r  A  s    z!ConfigDialog.VarChanged_paraWidthc             G   s)   |  j  j   } |  j d d d |  d  S)Nr  r@   zeditor-on-startup)r   r  r   )r;   r!  r   r<   r<   r=   r  E  s    z#ConfigDialog.VarChanged_startupEditc             G   s)   |  j  j   } |  j d d d |  d  S)Nr  r@   autosave)r   r  r   )r;   r!  r   r<   r<   r=   r  I  s    z ConfigDialog.VarChanged_autoSavec             G   s)   |  j  j   } |  j d d d |  d  S)Nr  r  r  )r  r  r   )r;   r!  r   r<   r<   r=   r  M  s    z ConfigDialog.VarChanged_encodingc             C   s)   i i  d 6i  d 6i  d 6i  d 6|  _  d  S)Nr  	highlightr)  r*  )changedItems)r;   r<   r<   r=   r4   Q  s    zConfigDialog.ResetChangedItemsc             C   sL   t  |  } | |  j | k r3 i  |  j | | <n  | |  j | | | <d  S)N)strr3  )r;   typsectionitemr   r<   r<   r=   r   Z  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)Nr  r2  r)  r*  r'  )r   GetSectionList
defaultCfgZGetOptionListGet)r;   ZdItems
configTypeZsectionsr6  ZoptionsZoptionr<   r<   r=   GetDefaultItems`  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   r  r   rw   NORMALr   r   r   r   )r;   r<   r<   r=   r   l  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   r  r   rw   r=  r   r   r   r   )r;   r<   r<   r=   r   w  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   r)  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   indexr+  r  r,  r   r   r   r   ZGetCurrentKeySetr3  r   valuesr   resultGetNewKeysName
select_setselect_anchorCreateNewKeySetdeleter   r   ry   )r;   	listIndexbindingbindNameZcurrentKeySetNameZcurrentBindingskeySetChangesr   ZcurrentKeySequencesnewKeysmessage	newKeySetr<   r<   r=   r     s:    zConfigDialog.GetNewKeysc             C   s>   t  j d d  t  j d d  } t |  d | |  j } | S)Nuserr)  r'  zNew Custom Key Set)r   r8  r   r@  )r;   rK  	usedNamesrL  r<   r<   r=   rA    s    zConfigDialog.GetNewKeysNamec             C   s)   |  j  d  } | r% |  j |  n  d  S)NzNew Key Set Name:)rA  rD  )r;   ZnewKeysNamer<   r<   r=   r     s    zConfigDialog.SaveAsNewKeySetc             C   s   |  j  j d t  d  S)Nr   )r   rw   r=  )r;   r   r<   r<   r=   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)NrB   r   r)  rM  r   )r   r  r   r   r   ZGetCoreKeysjoinr3  SaveNewKeySetr8  sortr   SetMenury   r   )
r;   ZnewKeySetNameZprevKeySetNameZprevKeysrJ  r   Z	eventNamerG  rI  ZcustomKeyListr<   r<   r=   rD    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   r`   r   rB   r)  z - rO  )r   curselectionr>  r+  r   Z	GetKeySetr   r)  rR  rE  r   rP  r3  r   seerB  rC  )	r;   
keySetNameZreselectrL  rF  r-  Z	bindNamesrH  keyr<   r<   r=   r.    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 Setr/   r)  rM  r   z- no custom keys -r   r  r?   r'  r%  )r   r  tkMessageBoxaskyesnor   userCfgremove_sectionr3  Saver8  rR  r   rw   r   r   rS  r   ry   r9  r:  r   rJ   r   )r;   rV  delmsgitemListr<   r<   r=   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 Themer/   r2  rM  r   z- no custom themes -r   r  r$  r'  r%  )r   r  rX  rY  r   rZ  r[  r3  r\  r8  rR  r   rw   r   r   rS  r   ry   r9  r:  r   rJ   r   )r;   	themeNamer]  r^  r<   r<   r=   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bgr/   r2   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   r  r   ZcgettkColorChooserZaskcolorr   GetNewThemeNameCreateNewThemer   ry   )r;   targetZ
prevColourZ	rgbTupletZcolourStringrK  newThemer<   r<   r=   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)Nr`  
foreground
backgroundr   -r2  )r   r  r   rw   r   r3   r   r   
tag_configr   r   )r;   Z	newColourplaneZsampleElementthemeZthemeElementr<   r<   r=   r#  1  s    zConfigDialog.OnNewColourSetc             C   s>   t  j d d  t  j d d  } t |  d | |  j } | S)NrM  r2  r'  zNew Custom Theme)r   r8  r   r@  )r;   rK  rN  re  r<   r<   r=   rb  ;  s    zConfigDialog.GetNewThemeNamec             C   s)   |  j  d  } | r% |  j |  n  d  S)NzNew Theme Name:)rb  rc  )r;   newThemeNamer<   r<   r=   r   B  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'  rM  r2  r   )r   r  r   r   r   ZGetThemeDictr3  SaveNewThemer8  rR  r   rS  ry   r   )r;   rl  Z	themeTyper_  re  ZthemeChangesr   ZcustomThemeListr<   r<   r=   rc  G  s     
zConfigDialog.CreateNewThemec             C   s6   |  j  j t  } |  j j | j    |  j   d  S)N)rs   r  r+  ri   ry   lowerrz   )r;   r   ra   r<   r<   r=   ru   _  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)Nra   )ri   r  rh   rl   ZBOLDr=  rf   r}   rw   r   r1   )r;   r   ri   Z
fontWeightZnewFontr<   r<   r=   rz   d  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   r`   )
r   r  r   rw   r   r   r   ry   r=  SetColourSample)r;   r<   r<   r=   r(  k  s    zConfigDialog.SetHighlightTargetc             G   s   |  j    d  S)N)ro  )r;   argsr<   r<   r=   r   v  s    z#ConfigDialog.SetColourSampleBindingc             C   sa   |  j  |  j j   d } |  j j   r/ d n d } |  j j | |  } |  j j d |  d  S)Nr   rf  rg  r`  )r3   r   r  r   r   Ztag_cgetr   rw   )r;   tagrj  r   r<   r<   r=   ro  y  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fgBgr`  rg  r2  z-foregroundrf  z-background)r   r  r   r   r3   r   ZGetHighlightr3  r   ri  ro  )r;   rk  ZelementTitler   ZcoloursZ	themeDictr<   r<   r=   r&    s"    zConfigDialog.PaintThemeSamplec             C   s   |  j    d  S)N)SetHelpListButtonStates)r;   r   r<   r<   r=   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)Nr`   r   )r  sizer  rw   r   r  rT  r=  )r;   r<   r<   r=   rr    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   r`   )	r   r@  userHelpListappendr  r   r   UpdateUserHelpChangedItemsrr  )r;   
helpSourcer<   r<   r=   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filePathr`   )
r  r>  r+  rt  r   r@  rE  r   rv  rr  )r;   	itemIndexrw  ZnewHelpSourcer<   r<   r=   r    s    &
zConfigDialog.HelpListItemEditc             C   sD   |  j  j t  } |  j | =|  j  j |  |  j   |  j   d  S)N)r  r>  r+  rt  rE  rv  rr  )r;   rx  r<   r<   r=   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.changedItemsr  	HelpFilesr`   ;NrB   )r3  r   lenrt  r   r4  rP  )r;   Znumr<   r<   r=   rv    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)Nr  r  ra   r'  rZ   c             S   s   g  |  ] } | j     q Sr<   )rn  )r   sr<   r<   r=   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   rl   ZfamiliesrR  rs   r   r   r   	GetOptionrn  ri   ry   r>  rU  rB  rC  r{   rS  rh   rz   )r;   Zfontsra   ZconfiguredFontZlc_configuredFontZlc_fontsZcurrentFontIndexrf   r<   r<   r=   LoadFontCfg  s*    
	
zConfigDialog.LoadFontCfgc             C   s5   t  j d d d d d d d } |  j j |  d  S)Nr  r"  z
num-spacesr'  r   r}  r~  )r   r  rk   ry   )r;   rk   r<   r<   r=   
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)Nr  r$  r'  r}  r  r`   r2  rM  r   z- no custom themes -r   rW  c                s     j  |  d S)Nr`   )r3   )x)r;   r<   r=   r     s    z+ConfigDialog.LoadThemeCfg.<locals>.<lambda>)r   ry   r   r  ZCurrentThemer  r8  rR  r   rS  r   rw   r   r   r   r   r   r3   r)  r   r&  r(  )r;   currentOptionr^  Z
themeNamesr<   )r;   r=   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)Nr  r?   r'  r}  r  r`   r)  rM  r   z- no custom keys -r   )r   ry   r   r  ZCurrentKeysr  r8  rR  r   rS  r   rw   r   r   r   r   r.  )r;   r  r^  rV  r<   r<   r=   
LoadKeyCfg  s,    




zConfigDialog.LoadKeyCfgc          	   C   s2  |  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  |  j j t j d d
 d d d  t j	   |  _
 x( |  j
 D] } |  j j t | d	  qW|  j   d  S)Nr  r@   zeditor-on-startupr'  r`   r}  r  r1  r   r  r,   r~  r+   r/  r0  r  Znone)r   ry   r   r  r   r   r   r   r  ZGetAllExtraHelpSourcesListrt  r  r   r   rr  )r;   ZhelpItemr<   r<   r=   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  )r;   r<   r<   r=   r9   A  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
        r)  N)r   rZ  has_sectionadd_section	SetOption)r;   rV  r-  r   r   r<   r<   r=   rQ  P  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
        r2  N)r   rZ  r  r  r  )r;   r_  rk  r   r   r<   r<   r=   rm  \  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   r9  Z
has_optionr:  rZ  ZRemoveOptionr  )r;   r;  r6  r7  r   r<   r<   r=   SetUserValueh  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.r  Fry  Tr)  r2  N)r   rZ  r\  r3  r[  r  r4   )r;   r;  ZcfgTypeHasChangesr6  r7  r   r<   r<   r=   SaveAllChangedConfigsp  s     	z"ConfigDialog.SaveAllChangedConfigsc             C   s1   |  j  j j   } x | D] } | j   q Wd  S)N)r/   r0   r)  ZRemoveKeybindings)r;   winInstancesinstancer<   r<   r=   DeactivateCurrentConfig  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)r/   r0   r)  ZResetColorizerZ	ResetFontZset_notabs_indentwidthZApplyKeybindingsZreset_help_menu_entries)r;   r  r  r<   r<   r=   ActivateConfigChanges  s    



z"ConfigDialog.ActivateConfigChangesc             C   s   |  j    d  S)N)destroy)r;   r<   r<   r=   r7     s    zConfigDialog.Cancelc             C   s   |  j    |  j   d  S)N)rJ   r  )r;   r<   r<   r=   rG     s    
zConfigDialog.Okc             C   s"   |  j    |  j   |  j   d  S)N)r  r  r  )r;   r<   r<   r=   rJ     s    

zConfigDialog.Applyc             C   s   d  S)Nr<   )r;   r<   r<   r=   Help  s    zConfigDialog.Help)K__name__
__module____qualname__r.   r5   rP   rQ   rR   rS   r:   r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r4   r   r<  r   r   r   rA  r   r   rD  r.  r   r   r   r#  rb  r   rc  ru   rz   r(  r   ro  r&  r  rr  r  r  r  rv  r  r  r  r  r  r9   rQ  rm  r  r  r  r  r7   rG   rJ   r  r<   r<   r<   r=   r
      s   4%DlMk	$
!
r
   __main__z#idlelib.idle_test.test_configdialog	verbosityrB   exitF)run) __doc__ZtkinterZtkinter.messageboxZ
messageboxrX  Ztkinter.colorchooserZcolorchooserra  Ztkinter.fontra   rl   Zidlelib.configHandlerr   Zidlelib.dynOptionMenuWidgetr   Zidlelib.tabbedpagesr   Zidlelib.keybindingDialogr   Zidlelib.configSectionNameDialogr   Zidlelib.configHelpSourceEditr   Zidlelibr	   r-   r
   r  Zunittestr  Zidlelib.idle_test.htestr  r<   r<   r<   r=   <module>   s,   
    