
    G@dG                         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dS )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                     t                                          ||           | j        | _        t	          j        dd           d S )N
appearanceui_themesectionoption)super__init__check_color_scheme_notificationpre_apply_callbackr   restore_notifications)selfpluginparent	__class__s      Blib/python3.11/site-packages/spyder/plugins/appearance/confpage.pyr   zAppearanceConfigPage.__init__   sF    ((("&"F 	"<
KKKKKK    c                 b   |                      d          }	 |                    |                    d                     n# t          $ r Y nw xY w|                      dg           }t	          t          d                    }t          d          dft          d          dft          d	          d
fg}|                     t          d          |dd          }|j        | _        ddg}t          t          |d |D                                 }|                     t          d          |dd          }t                      }	|	                    |j        dd           |	                    |j        dd           |	                    |j        dd           |	                    |j        dd           t                      }
|
                    |	           |                    |
           t	          t          d                    }t#          t          d                    }t#          t          d                    }t#          t          d                    | _        t#          t          d                    | _        t)          |           | _        t-          |           | _        t1          | | j                  | _        i | _        |                     ddgd          }|j        | _        t          |          }| j        || j        || j        g}t9          |          D ]\  }}|                    ||d           |                    dd           |                    dd           |                    dd           |                    dd dd            t	          t          d!                    }|                     d"t          d#          t@          j!        d$          | _"        |                     d%t          d&          d'          | _#        t          |          }|                    | j"        j$        dd           |                    | j"        j%        dd           |                    | j"        j&        dd           |                    | j"        j'        dd(           |                    | j#        j$        dd           |                    | j#        j%        dd           |                    | j#        j&        dd           |                    | j#        j'        dd(           |(                    |)                                d           t                      }|                    |           |                    |           |                    |           t	          t          d)                    }t                      }|                    | j                   |                    |           t                      }|(                    dd           |                    dd*           |                    |dd           |                    |dd           |                     |           |j*        +                    | j,                   |j*        +                    | j-                   | j        j*        +                    | j.                   | j        j*        +                    | j/                   | j        j0        +                    | j1                   | j        j0        +                    | j2                   |D ]}| j        3                    |           |D ]}| j        3                    |d+           | 4                                 | 1                                 d S ),NnamesCustomcustom_nameszMain interface	Automatic	automaticLightlightDarkdarkzInterface themer   T)restartzSpyder 2zSpyder 3c                 6    g | ]}|                                 S  )lower).0themes     r'   
<listcomp>z3AppearanceConfigPage.setup_page.<locals>.<listcomp><   s     (K(K(K5(K(K(Kr(   z
Icon theme
icon_themer      zSyntax highlighting themezEdit selected schemezCreate new schemezDelete schemezReset to defaults)r%   stack )r=   r=   selected      Fontsfontz
Plain text)r   titlefontfilterswithout_group	rich_fontz	Rich text)r   rC   rE      Previewd   custom)5
get_optionpopindex
ValueErrorr   r   create_comboboxcomboboxui_comboboxlistzipr   	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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"   sw   ((	IIekk),,---- 	 	 	D	~r::  "2 3 344 {^^[)wZZ!vYY

 --  	 . 
 
 *2j)C(K(KF(K(K(KLLMM**1\??L+7 + G G #.--)).*>1EEE)).*A1aHHH))+*;QBBB))+*>1EEE"}}6777l+++ !#>!?!?@@ "!$:";";<<#A&9$:$:;;(?););<<'*=(>(>??.t44,T22$07;7J%L %L %L! $& "&"6"6rH:7A#C #C 7 @ $L11%{D4Et13oo 	/ 	/FAs##CA....&&q!,,,&&q!,,,&&q!,,,((B2666  '

++  $44L//%5	  5       #33K.. 4     #;//t3=q!DDDt3;QBBBt3=q!DDDt3;QBBBt2<aCCCt2:AqAAAt2<aCCCt2:AqAAA""<#8#8#:#:A>>> %  ---  ...  --- "!I,,//$  !4555/// &--%%a+++((C000!!.!Q777!!-A666''' 	%%d&<===##D$4555!))$*?@@@"**4+=>>>199$:MNNN199$:MNNN  	C 	CD%<<TBBBB  	P 	PD%<<T$<OOOOs   (A   
AA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 ]}|                                 dS )zSet global font used in Spyder.r   N)r   main
widgetlistthirdparty_pluginsupdate_font)r#   rB   r   pluginsr$   s        r'   r   zAppearanceConfigPage.set_font   sY     	f%%%%)&)EE 	! 	!F    	! 	!r(   c                 "   |                      d          }|                     | j        |          }|dk    rA|r| j                            d           nfd| j        v r| j                            d           nBd| j        v r|s| j                            d           n|r| j                            d           dD ]}t          j        d|           |                                  | 	                                 t          | j                  S )Nr   r.   r>   r   r   r   )rL   "color_scheme_and_ui_theme_mismatchcurrent_schemechanged_optionsaddremover   r"   rw   rt   set)r#   r   mismatchr   s       r'   apply_settingsz#AppearanceConfigPage.apply_settings   s5   ??:..::+ + {"" <$((4444 !555(//
;;;T111 <(//
;;; 9(,,Z888 / 	L 	LF&|FKKKKK4'(((r(   c                 4    | j                                         S N)r_   currentTextr#   s    r'   current_scheme_namez(AppearanceConfigPage.current_scheme_name   s    $00222r(   c                 &    | j         | j                 S r   )r^   r   r   s    r'   r   z#AppearanceConfigPage.current_scheme   s    '(@AAr(   c                 4    | j                                         S r   )r_   currentIndexr   s    r'   current_scheme_indexz)AppearanceConfigPage.current_scheme_index   s    $11333r(   c                 4    | j                                         S r   )rR   r   r   s    r'   current_ui_theme_indexz+AppearanceConfigPage.current_ui_theme_index   s    ,,...r(   c           
      D   | j         }| j                            d           |                     d          }	 |                    |                    d                     n# t          $ r Y nw xY w|                     dg           }||z   D ]?}|| j        t          |                     d	                    |                              <   @|r
|dgz   |z   }n|}| j        }|
                                 |D ]P}|t          |                     d	                    |                              }|                    ||           Q|r"|                    t          |                     | j                            d           | j                            |           dS )z Recreates the combobox contents.Tr*   r+   r,   {0}/nameNF)r   r_   blockSignalsrL   rM   rN   rO   r^   strformatclearaddIteminsertSeparatorlensetCurrentIndex)	r#   rN   r*   r,   nchoicesrQ   r   	item_names	            r'   rw   z$AppearanceConfigPage.update_combobox   s   )**4000((	IIekk),,---- 	 	 	D	~r:: % 	 	A  $DOOJ$5$5a$8$899::   	tfn|3GGG( 	. 	.D| DOOJ,=,=d,C,CDDEEIY---- 	1$$SZZ000**5111--e44444s   (A! !
A.-A.c                 $   | j         }|                     d          }	 |                    |                    d                     n# t          $ r Y nw xY w||v}| j                            |           | j                            |            dS )z6Updates the enable status of delete and reset buttons.r*   r+   N)r   rL   rM   rN   rO   rY   
setEnabledrZ   )r#   r   r*   delete_enableds       r'   ru   z#AppearanceConfigPage.update_buttons  s    ,((	IIekk),,---- 	 	 	D	'u4%%n555$$%788888s   (A 
AANc                     d}|| j         }| j                            t                      |dd           | j                            d           | j                            |           dS )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)rB   color_schemeshow_blanksscroll_past_endPython)r   r[   setup_editorr   set_languageset_text)r#   rN   scheme_nametexts       r'   rt   z#AppearanceConfigPage.update_preview  s    ' -K(($!	 	) 	
 	
 	
 	((222$$T*****r(   c                    |                      d          }|                      dg           }t          |          dz
  }d |D             }t          t          |                    D ]}||         |k    r|dz
  } nd                    |dz             }|                    |           |                     d|           t          j        D ]^}d                    ||          }d                    | j        |          }	|                      |	          }
|                     ||
           _|                     d                    |          |           | j	        }|
                    |d	           |                    |           |                                  |                                r|                                }|                     d                    |          |           ||z                       |          dz   }|                                  | j                            |           d
S |                    |           |                     d|           |                    |           d
S )z.Creates a new color scheme with a custom name.r*   r,   r;   c                 ^    g | ]*}t          |                    d           d                   +S )-)intsplit)r7   r   s     r'   r9   z:AppearanceConfigPage.create_new_scheme.<locals>.<listcomp>E  s/    DDD!AGGCLL,--DDDr(   z
custom-{0}{0}/{1}r   TrJ   N)rL   r   ranger   append
set_optionr   COLOR_SCHEME_KEYSr   r]   rv   
set_schemeload_from_confexec_get_scheme_namerN   rw   r_   r   r   delete_color_scheme_stack)r#   r*   r,   countercustom_indexr   custom_namekeyr   default_namer   dlgrN   s                r'   ro   z&AppearanceConfigPage.create_new_scheme>  sv   ((~r:: l##a'DD|DDDs<(()) 	 	AA!##a% $ #))'!)44 	K(((555%7 	* 	*C##K55D$++D,?EEL__\22FOOD&))))
))+66DDD '"";t"<<<{###99;; 	7&&((DOOJ--k::DAAA \)00==AE  """!11%88888 ,,,OONL999))+66666r(   c                 8   | j         }|                    | j                   |                                rd|                                }|D ]5}d                    |          }||         }|                     ||           6|                     d           dS dS )zEdit current scheme.ztemp/{0}temp)r   N)r]   r   r   r   get_edited_color_schemer   r   rt   )r#   r   temporal_color_schemer   r   values         r'   rp   z AppearanceConfigPage.edit_schemek  s    't*+++99;; 	4$'$?$?$A$A!, / /#**3//-c2....F33333	4 	4r(   c                 \   | j         }t          j        | t          d          t          d          t          j        t          j        z            }|t          j        k    rK|                     d          }d}|                                 rd}| j        	                    |
                    |                     |                     d|           |                     dg           }||v r|                    |           |                     d|           t          j        D ]2}d                    ||          }t!          j        | j        |           3t!          j        | j        d	                    |                     |                                  |                                  d
S d
S )z3Deletes the currently selected custom color scheme.Warningz,Are you sure you want to delete this scheme?r*   spyderzspyder/darkr>   r,   r   r   N)r   r   warningr   YesNorL   is_dark_interfacer_   r   rN   r   r   r   r   r   r   remove_optionCONF_SECTIONrw   rt   )r#   r   answerr*   default_themer,   r   r   s           r'   rr   z"AppearanceConfigPage.delete_schemey  s   )$T1Y<<%& (6 &7 &7%0_{~%EG G [_$$OOG,,E$M%%'' . -!11%++m2L2LMMMOOJ666  ??>2>>Ll**##K000OONL999 *; > >"))+s;;"4#4f====t0)00==? ? ?   """!!!!!/ %$r(   c                 >    | j         }|                    |           dS )zW
        Set the current stack in the dialog to the scheme with 'scheme_name'.
        N)r]   r   )r#   r   r   s      r'   r   zAppearanceConfigPage.set_scheme  s$     '{#####r(   c                    | j         }|                     d          }||v rkt          j        D ]H}d                    ||          }t          j        | j        |          }|                     ||           I| 	                                 dS dS )z1Restore initial values for default color schemes.r*   r   N)
r   rL   r   r   r   r   get_defaultr   r   r   )r#   schemer*   r   r   r   s         r'   rq   z%AppearanceConfigPage.reset_to_default  s     $((U??); / /"))&#66():FC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/|                                 r| p|                                  o|}n5|                                 r|dk    p|                                  o|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C{""''))F2F.F H++---F2F H ''))Ah'.A F++---D(f2D 
 r(   c                     dddd}|| j                  }|                     | j        |          }|rdD ]}t          j        d|           dS dS )	zY
        Check if it's necessary to notify plugins to update their color scheme.
        r.   r0   r2   )r   r;   r?   r   r   r   N)r   r   r   r   disable_notifications)r#   ui_theme_mapr   r   r   s        r'   r    z4AppearanceConfigPage.check_color_scheme_notification  s     '7v>> ;<::+ +  	P2 P P*<OOOOO	P 	PP Pr(   )NN)__name__
__module____qualname__r   r   r   r   r   propertyr   r   r   r   rw   ru   rt   ro   rp   rr   r   r   rq   r   r   r    __classcell__)r&   s   @r'   r   r      s       L L L L LE E EN' ' '! ! !) ) )F 3 3 X3 B B XB 4 4 X4 / / X/)5 )5 )5V
9 
9 
9+ + + +>+7 +7 +7Z4 4 4" " "B$ $ $ 
TVV" " V"< < <  :P P P P P P 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   r5   r(   r'   <module>r	     s   ' & ' ' ' ' ' '      F F F F F F F F F F F F F F F F F F 4 3 3 3 3 3 % % % % % % D D D D D D D D D D & & & & & & : : : : : : + + + + + + . . . . . . < < < < < <LP LP LP LP LP+ LP LP LP LP LPr(   