
    JeG                         d Z ddlmZ ddlmZ ddl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mZ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  G d de      Zy)z Appearance entry in Preferences.    )
dark_color)Slot)QFontComboBoxQGridLayout	QGroupBoxQMessageBoxQPushButtonQStackedWidgetQVBoxLayout)PluginConfigPage)_)get_fontis_dark_font_colorset_font)CONF)SchemeEditor)syntaxhighlighters)QStylePalette)SimpleCodeEditorc                        e Zd Z fdZd Zd Zd Zd Zed        Z	ed        Z
ed        Zed	        Zd
 Zd ZddZd Zd Zd Zd Z e       d        Zd Zd Zd Z xZS )AppearanceConfigPagec                 v    t         |   ||       | j                  | _        t	        j
                  dd       y )N
appearanceui_themesectionoption)super__init__check_color_scheme_notificationpre_apply_callbackr   restore_notifications)selfpluginparent	__class__s      D/usr/lib/python3/dist-packages/spyder/plugins/appearance/confpage.pyr   zAppearanceConfigPage.__init__   s2    ("&"F"F 	""<
K    c           
         | j                  d      }	 |j                  |j                  d             | j                  dg       }t	        t        d            }t        d      dft        d      dft        d	      d
fg}| j                  t        d      |dd      }|j                  | _        ddg}t        t        ||D cg c]  }|j                          c}            }| j                  t        d      |dd      }	t               }
|
j                  |j                  dd       |
j                  |j                  dd       |
j                  |	j                  dd       |
j                  |	j                  dd       t               }|j!                  |
       |j#                  |       t	        t        d            }t%        t        d            }t%        t        d            }t%        t        d            | _        t%        t        d            | _        t+        |       | _        t/        |       | _        t3        | | j0                        | _        i | _        | j                  ddgd      }|j                  | _        t        |      }| j8                  || j(                  || j&                  g}t;        |      D ]  \  }}|j                  ||d        |j=                  dd       |j=                  dd       |j=                  dd       |j?                  dddd       t	        t        d             }| jA                  d!t        d"      tB        jD                  d#      | _#        | jA                  d$t        d%      d&      | _$        t        |      }|j                  | jF                  jJ                  dd       |j                  | jF                  jL                  dd       |j                  | jF                  jN                  dd       |j                  | jF                  jP                  dd'       |j                  | jH                  jJ                  dd       |j                  | jH                  jL                  dd       |j                  | jH                  jN                  dd       |j                  | jH                  jP                  dd'       |jS                  |jU                         d       t               }|j                  |       |j                  |       |j                  |       t	        t        d(            }t               }|j                  | j,                         |j#                  |       t               }|jS                  dd       |j=                  dd)       |j!                  |dd       |j                  |dd       | j#                  |       |jV                  jY                  | jZ                         |jV                  jY                  | j\                         | j(                  jV                  jY                  | j^                         | j&                  jV                  jY                  | j`                         | j8                  jb                  jY                  | jd                         | j8                  jb                  jY                  | jf                         |D ]  }| j4                  ji                  |        |D ]  }| j4                  ji                  |d*       ! | jk                          | je                          y # t        $ r Y w xY wc c}w )+NnamesCustomcustom_nameszMain interface	Automatic	automaticLightlightDarkdarkzInterface themer   T)restartzSpyder 2zSpyder 3z
Icon theme
icon_themer      zSyntax highlighting themezEdit selected schemezCreate new schemezDelete schemezReset to defaults)r%   stack )r7   r7   selected      Fontsfontz
Plain text)r   titlefontfilterswithout_group	rich_fontz	Rich text)r   r=   r?      Previewd   custom)6
get_optionpopindex
ValueErrorr   r   create_comboboxcomboboxui_comboboxlistziplowerr   	addWidgetlabelr   	addLayout	setLayoutr	   delete_buttonreset_buttonr   preview_editorr
   stacked_widgetr   scheme_editor_dialogscheme_choices_dictschemes_combobox	enumeratesetColumnStretchsetContentsMarginscreate_fontgroupr   MonospacedFontsplain_text_fontrich_text_font	fontlabelfontbox	sizelabelsizeboxsetRowStretchrowCountclickedconnectcreate_new_schemeedit_schemereset_to_defaultdelete_schemecurrentIndexChangedupdate_previewupdate_buttonsadd_color_scheme_stackupdate_combobox)r#   r*   r,   theme_groupui_theme_choicesui_theme_combothemesthemeicon_choicesicons_combotheme_comboboxes_layouttheme_layoutsyntax_groupedit_buttoncreate_buttonschemes_combobox_widgetsyntax_layoutbtnsibtnfonts_groupfonts_layoutoptions_layoutpreview_grouppreview_layoutcombined_layoutnames                              r'   
setup_pagezAppearanceConfigPage.setup_page"   sm   (	IIekk),- ~r:  "2 34 {^[)wZ!vY

 -- 	 . 
 *22j)CF(K5(KLM**1\?L+7 + G #.-)).*>*>1E)).*A*A1aH))+*;*;QB))+*>*>1E"}67l+ !#>!?@ "!$:";<#A&9$:;(?);<'*=(>?.t4,T2$07;7J7J%L! $& "&"6"6rH:7A#C 7 @ @ $L1%%{D4E4Et113o 	/FAs##CA.	/&&q!,&&q!,&&q!,((B26  '
+  $44L/%55	  5    #33K. 4   #;/t33==q!Dt33;;QBt33==q!Dt33;;QBt22<<aCt22::AqAt22<<aCt22::AqA""<#8#8#:A> %  -  .  - "!I,/$  !4!45/ &-%%a+((C0!!.!Q7!!-A6' 	%%d&<&<=##D$4$45!!))$*?*?@""**4+=+=>1199$:M:MN1199$:M:MN  	CD%%<<TB	C ! 	PD%%<<T$<O	P 	C  		, )Ls    ] ]	]]c                     t        |      S )z"Return global font used in Spyder.r   )r   )r#   r   s     r'   r   zAppearanceConfigPage.get_font   s    v&&r(   c                     t        ||       | j                  j                  | j                  j                  z   }|D ]  }|j	                           y)zSet global font used in Spyder.r   N)r   main
widgetlistthirdparty_pluginsupdate_font)r#   r<   r   pluginsr$   s        r'   r   zAppearanceConfigPage.set_font   sG     	f%))&&)E)EE 	!F 	!r(   c                 .   | j                  d      }| j                  | j                  |      }|dk(  rH|r| j                  j	                  d       nsd| j                  v re| j                  j                  d       nId| j                  v r|s9| j                  j                  d       n|r| j                  j	                  d       dD ]  }t        j                  d|        | j                          | j                          t        | j                        S )Nr   r.   r8   r   r   r   )rF   "color_scheme_and_ui_theme_mismatchcurrent_schemechanged_optionsaddremover   r"   rr   ro   set)r#   r   mismatchr   s       r'   apply_settingsz#AppearanceConfigPage.apply_settings   s    ??:.::+ {"$$((4 !5!55((//
;T111((//
;((,,Z8 / 	LF&&|FK	L 	4''((r(   c                 6    | j                   j                         S N)rZ   currentTextr#   s    r'   current_scheme_namez(AppearanceConfigPage.current_scheme_name   s    $$0022r(   c                 4    | j                   | j                     S r   )rY   r   r   s    r'   r   z#AppearanceConfigPage.current_scheme   s    ''(@(@AAr(   c                 6    | j                   j                         S r   )rZ   currentIndexr   s    r'   current_scheme_indexz)AppearanceConfigPage.current_scheme_index   s    $$1133r(   c                 6    | j                   j                         S r   )rL   r   r   s    r'   current_ui_theme_indexz+AppearanceConfigPage.current_ui_theme_index   s    ,,..r(   c           
         | j                   }| j                  j                  d       | j                  d      }	 |j	                  |j                  d             | j                  dg       }||z   D ]8  }|| j                  t        | j                  dj                  |                  <   : |r
|dgz   |z   }n|}| j                  }|j                          |D ]@  }|t        | j                  dj                  |                  }|j                  ||       B |r|j                  t        |             | j                  j                  d       | j                  j                  |       y# t        $ r Y  w xY w)z Recreates the combobox contents.Tr*   r+   r,   {0}/nameNF)r   rZ   blockSignalsrF   rG   rH   rI   rY   strformatclearaddIteminsertSeparatorlensetCurrentIndex)	r#   rH   r*   r,   nchoicesrK   r   	item_names	            r'   rr   z$AppearanceConfigPage.update_combobox   sl   ))**40(	IIekk),- ~r: % 	A  $$DOOJ$5$5a$89:		 tfn|3GG(( 	.D| DOOJ,=,=d,CDEIY-	. $$SZ0**51--e4E  		s    E. .	E;:E;c                    | j                   }| j                  d      }	 |j                  |j                  d             ||v}| j
                  j                  |       | j                  j                  |        y# t        $ r Y Gw xY w)z6Updates the enable status of delete and reset buttons.r*   r+   N)r   rF   rG   rH   rI   rT   
setEnabledrU   )r#   r   r*   delete_enableds       r'   rp   z#AppearanceConfigPage.update_buttons  s    ,,(	IIekk),- (u4%%n5$$%78	  		s    A; ;	BBc                     d}|| j                   }| j                  j                  t               |dd       | j                  j	                  d       | j                  j                  |       y)z
        Update the color scheme of the preview editor and adds text.

        Note
        ----
        'index' is needed, because this is triggered by a signal that sends
        the selected index.
        zl"""A string"""

# A comment

class Foo(object):
    def __init__(self):
        bar = 42
        print(bar)
NF)r<   color_schemeshow_blanksscroll_past_endPython)r   rV   setup_editorr   set_languageset_text)r#   rH   scheme_nametexts       r'   ro   z#AppearanceConfigPage.update_preview  sm    ' --K(($!	 	) 	
 	((2$$T*r(   c                    | j                  d      }| j                  dg       }t        |      dz
  }|D cg c]  }t        |j                  d      d         ! }}t	        t        |            D ]  }||   |k7  s|dz
  } n dj                  |dz         }|j                  |       | j                  d|       t        j                  D ]S  }dj                  ||      }	dj                  | j                  |      }
| j                  |
      }| j                  |	|       U | j                  dj                  |      |       | j                  }|j                  |d	
       |j                  |       | j                          |j                         rt|j!                         }	| j                  dj                  |      |	       ||z   j#                  |      dz   }| j%                          | j&                  j)                  |       y|j+                  |       | j                  d|       |j-                  |       yc c}w )z.Creates a new color scheme with a custom name.r*   r,   r5   -z
custom-{0}{0}/{1}r   TrD   N)rF   r   intsplitranger   append
set_optionr   COLOR_SCHEME_KEYSr   rX   rq   
set_schemeload_from_confexec_get_scheme_namerH   rr   rZ   r   r   delete_color_scheme_stack)r#   r*   r,   counterr   custom_indexr   custom_namekeyr   default_namer   dlgrH   s                 r'   rj   z&AppearanceConfigPage.create_new_scheme>  s   (~r: l#a'7CD!AGGCL,-DDs<() 	AA!#a%	 #))'!)4 	K(5%77 	*C##K5D$++D,?,?EL__\2FOOD&)		*
 	
))+6D ''"";t"<{#99;&&(DOOJ--k:DA \)00=AE  "!!11%8 ,OONL9))+6I Es   $H;c                    | j                   }|j                  | j                         |j                         rR|j	                         }|D ]*  }dj                  |      }||   }| j                  ||       , | j                  d       yy)zEdit current scheme.ztemp/{0}temp)r   N)rX   r   r   r   get_edited_color_schemer   r   ro   )r#   r   temporal_color_schemer   r   values         r'   rk   z AppearanceConfigPage.edit_schemek  s    ''t**+99;$'$?$?$A!, /#**3/-c2./ F3 r(   c                 8   | j                   }t        j                  | t        d      t        d      t        j                  t        j
                  z        }|t        j                  k(  r1| j                  d      }d}| j                         rd}| j                  j                  |j                  |             | j                  d|       | j                  dg       }||v r|j                  |       | j                  d|       t        j                  D ]4  }dj                  ||      }t!        j"                  | j$                  |       6 t!        j"                  | j$                  d	j                  |             | j'                          | j)                          y
y
)z3Deletes the currently selected custom color scheme.Warningz,Are you sure you want to delete this scheme?r*   spyderzspyder/darkr8   r,   r   r   N)r   r   warningr   YesNorF   is_dark_interfacerZ   r   rH   r   r   r   r   r   r   remove_optionCONF_SECTIONrr   ro   )r#   r   answerr*   default_themer,   r   r   s           r'   rm   z"AppearanceConfigPage.delete_schemey  sZ   ))$$T1Y<%& (6 &7%0__{~~%EG [__$OOG,E$M%%' -!!11%++m2LMOOJ6  ??>2>Ll*##K0OONL9 *;; >"))+s;""4#4#4f=> t00)00=?   "!/ %r(   c                 >    | j                   }|j                  |       y)zW
        Set the current stack in the dialog to the scheme with 'scheme_name'.
        N)rX   r   )r#   r   r   s      r'   r   zAppearanceConfigPage.set_scheme  s     ''{#r(   c                    | j                   }| j                  d      }||v rjt        j                  D ]F  }dj	                  ||      }t        j                  | j                  |      }| j                  ||       H | j                          yy)z1Restore initial values for default color schemes.r*   r   N)
r   rF   r   r   r   r   get_defaultr   r   r   )r#   schemer*   r   r   r   s         r'   rl   z%AppearanceConfigPage.reset_to_default  s     $$(U?);; /"))&#6(():):FC./
 ! r(   c                 4    t        t        j                        S )z
        Check if our interface is dark independently from our config
        system.

        We need to do this because when applying settings we can't
        detect correctly the current theme.
        )r   r   COLOR_BACKGROUND_1r   s    r'   r   z&AppearanceConfigPage.is_dark_interface  s     -::;;r(   c                     t        |       }|dk(  r.| j                         xr | xs | j                          xr |}|S | j                         xr |dk(  xs | j                          xr |dk(  }|S )a  
        Detect if there is a mismatch between the current color scheme and
        UI theme.

        Parameters
        ----------
        color_scheme: str
            Name of one of Spyder's color schemes. For instance: 'Zenburn' or
            'Monokai'.
        ui_theme: str
            Name of the one of Spyder's interface themes. This can 'automatic',
            'dark' or 'light'.
        r.   r0   r2   )r   r   )r#   r   r   is_dark_color_schemer   s        r'   r   z7AppearanceConfigPage.color_scheme_and_ui_theme_mismatch  s     $6l#CC{"'')F2F.F H++--F2F  	 '')Ah'.A F++--D(f2D 
 r(   c                     dddd}|| j                      }| j                  | j                  |      }|rdD ]  }t        j                  d|        yy)	zY
        Check if it's necessary to notify plugins to update their color scheme.
        r.   r0   r2   )r   r5   r9   r   r   r   N)r   r   r   r   disable_notifications)r#   ui_theme_mapr   r   r   s        r'   r    z4AppearanceConfigPage.check_color_scheme_notification  sf     '7v> ; ;<::+ 2 P**<OP r(   )NN)__name__
__module____qualname__r   r   r   r   r   propertyr   r   r   r   rr   rp   ro   rj   rk   rm   r   r   rl   r   r   r    __classcell__)r&   s   @r'   r   r      s    LEN'!)F 3 3 B B 4 4 / /)5V
9+>+7Z4"B$ 
V" "<:Pr(   r   N) __doc__qtconsole.stylesr   qtpy.QtCorer   qtpy.QtWidgetsr   r   r   r   r	   r
   r   spyder.api.preferencesr   spyder.api.translationsr   spyder.config.guir   r   r   spyder.config.managerr   !spyder.plugins.appearance.widgetsr   spyder.utilsr   spyder.utils.paletter   spyder.widgets.simplecodeeditorr   r    r(   r'   <module>r     sP    ' ' F F F 4 % D D & : + . <LP+ LPr(   