a
    a.                     @   s   d Z ddlZddlZddlZddlmZ ddlZddl	m
Z
 ddlmZ ejdkZG dd dZG d	d
 d
eZe ZG dd deZG dd deZe Ze ZG dd deZe ZG dd dZdS )z"Custom stylesheets used in Spyder.    N)parse)OLD_PYQT)QStylePalettedarwinc                   @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )SpyderStyleSheetz"Base class for Spyder stylesheets.c                 C   s   t j | _|   d S N)	qstylizerZstyleZ
StyleSheet_stylesheetset_stylesheetself r   6lib/python3.9/site-packages/spyder/utils/stylesheet.py__init__   s    zSpyderStyleSheet.__init__c                 C   s   | j S r   )r	   r   r   r   r   get_stylesheet#   s    zSpyderStyleSheet.get_stylesheetc                 C   s
   | j  S r   )r	   toStringr   r   r   r   	to_string&   s    zSpyderStyleSheet.to_stringc                 C   s
   t | S )zo
        Return a copy of the sytlesheet.

        This allows it to be modified for specific widgets.
        )copydeepcopyr   r   r   r   get_copy)   s    zSpyderStyleSheet.get_copyc                 C   s   t dd S )NzkSubclasses need to implement this method to set the _stylesheet attribute as a Qstylizer StyleSheet object.)NotImplementedErrorr   r   r   r   r
   1   s    zSpyderStyleSheet.set_stylesheetc                 C   s   |   S )z`
        Get a string representation of the stylesheet object this class
        holds.
        )r   r   r   r   r   __str__7   s    zSpyderStyleSheet.__str__N)
__name__
__module____qualname____doc__r   r   r   r   r
   r   r   r   r   r   r      s   r   c                       s8   e Zd ZdZ fddZdd Zdd Zdd	 Z  ZS )
AppStylesheetzX
    Class to build and access the stylesheet we use in the entire
    application.
    c                    s   t    d | _d S r   )superr   _stylesheet_as_stringr   	__class__r   r   r   H   s    
zAppStylesheet.__init__c                 C   s   | j du r| j | _ | j S )z-Save stylesheet as a string for quick access.N)r   r	   r   r   r   r   r   r   L   s    
zAppStylesheet.to_stringc                 C   s"   t jtd}t|| _|   dS )zi
        This takes the stylesheet from QDarkstyle and applies our
        customizations to it.
        )ZpaletteN)
qdarkstyleZload_stylesheetr   parse_stylesheetr	   _customize_stylesheet)r   Z
stylesheetr   r   r   r
   R   s    
zAppStylesheet.set_stylesheetc                 C   sN  | j }|d jddd |d jdd |d jdd |jjdddd |d	 jddd
 |d jdddd |d jdddd tr|d jdd |d jdd |jjdd dD ]}|d|  jdd qdD ]}||  jdd qdD ]2}|dkrtj}ntj}|d|  j|d q|d jdd |d jd d d!S )"z+Apply our customizations to the stylesheet.ZQStackedWidget0px)borderpaddingzQToolButton:pressed)marginzQMenuBar::item:pressed)r&   )ZborderBottomr&   spacingz!QMainWindow::separator:horizontal)	marginTopZmarginBottomzQMainWindow::separator:vertical3px)
marginLeftmarginRightheightzQMenu::itemz1.4emz0.7emz4px 24px 4px 8px)r-   ZfontSizer&   z4px 24px 4px 28pxzQMenu#checkbox-padding::item)Zdisabledcheckedzchecked:disabledzQPushButton:)QToolButtonzQToolButton:disabledZtransparentZbackgroundColorhoverZpressedr.   zchecked:hoverr2   zQToolButton:zQDialog QPushButtonz3px 15px 3px 15pxz%QDialogButtonBox QPushButton:!defaultz3px 0px 3px 0pxN)r	   	setValuesQToolBarr   ZQPushButtonr   COLOR_BACKGROUND_2COLOR_BACKGROUND_3)r   cssstateelementcolorr   r   r   r#   ]   sz    

z#AppStylesheet._customize_stylesheet)	r   r   r   r   r   r   r
   r#   __classcell__r   r   r   r   r   B   s
   r   c                   @   s(   e Zd ZdZdZdZdZdZdd ZdS )ApplicationToolbarStylesheetz$Stylesheet for application toolbars.z2.7emz0.25emc                 C   s   | j }|jjtjd |jj| j| j| j| jddd dD ]0}|dkrNtj	}ntj
}|d|  j|d q:|d jdd	 d S )
Nr0   r$   )widthr-   r+   r,   r%   r&   r1   r2   zQToolBar QToolButton:z$QToolBar QToolButton::menu-indicatornoneZimage)r	   r4   r3   r   ZCOLOR_BACKGROUND_4r/   BUTTON_WIDTHBUTTON_HEIGHTBUTTON_MARGIN_RIGHTZCOLOR_BACKGROUND_5ZCOLOR_BACKGROUND_6)r   r7   r8   r:   r   r   r   r
      s,    	z+ApplicationToolbarStylesheet.set_stylesheetN)	r   r   r   r   r@   rA   ZBUTTON_MARGIN_LEFTrB   r
   r   r   r   r   r<      s   r<   c                   @   s    e Zd ZdZdZdZdd ZdS )PanesToolbarStyleSheetzStylesheet for pane toolbars.z2.2emc                 C   s@   | j }|jjdd |jj| j| jddd |d jdd d S )Nz0.3em)r(   r$   )r-   r=   r%   r'   zQToolButton::menu-indicatorr>   r?   )r	   r4   r3   r/   rA   r@   )r   r7   r   r   r   r
      s    z%PanesToolbarStyleSheet.set_stylesheetN)r   r   r   r   r@   rA   r
   r   r   r   r   rC      s   rC   c                       s,   e Zd ZdZdZ fddZdd Z  ZS )PanesTabBarStyleSheetzStylesheet for pane tabbarsz0.8emc                    s`  t    |  }tjdk}|d j| jdd|r4dnd|r>dndd |d jdd|rZdnd|rddndd	 d
D ]0}|d|  jdd|rdnd|rdndd	 qp|d j|rdndd |d jtjddtj d dD ]0}|dkrtj	}ntj
}|d|  j|d qts$|d jdd |d jdd |d jddd d! |d" jddd d# d S )$Nr   zQTabBar::tabZ4pxZ10px)r)   
paddingToppaddingBottompaddingLeftpaddingRightzQTabBar::tab:hoverr*   Z9px)rE   rF   rG   rH   )Zselectedzselected:hoverzQTabBar::tab:zQTabBar::close-buttonz-5pxz-6px)rF   zQTabBar#pane-tabbar QToolButtonr$   z0.3em solid )
backgroundZborderRadiusZborderRightr1   r2   z QTabBar#pane-tabbar QToolButton:)rI   zQTabBar::scrollerz4.0em)r=   zQTabWidget::pane)Z	borderTopzQTabWidget::left-cornerz-1pxz-2pxZ1px)topbottomleftzQTabWidget::right-corner)rJ   rK   right)r   r
   r   sysplatformr3   
TOP_MARGINr   ZCOLOR_BACKGROUND_1r5   r6   r   )r   r7   Zis_macosr8   r:   r   r   r   r
     sn    











z$PanesTabBarStyleSheet.set_stylesheetc                 C   s$   | j  }tjdkr d}|| }|S )Nr   zAQTabWidget::tab-bar {alignment: left;}
QTabBar {alignment: left;})r	   r   rN   rO   )r   Z
css_stringZ	left_tabsr   r   r   r   d  s
    

zPanesTabBarStyleSheet.to_string)r   r   r   r   rP   r
   r   r;   r   r   r   r   rD     s   QrD   c                   @   sD   e Zd ZdZdZerdndZer$dndZer0dndZer<dnd	Z	d
S )DialogStylez1Style constants for tour, about and kite dialogs.g      ?Z19ptZ14ptZ15ptZ12ptZ13ptZ6pxz4px 10pxN)
r   r   r   r   ZIconScaleFactorMACZTitleFontSizeZContentFontSizeZButtonsFontSizeZButtonsPaddingr   r   r   r   rQ   v  s   rQ   )r   r   rN   r!   Zqstylizer.parserr   r"   Zqstylizer.styler   Zspyder.config.guir   Zspyder.utils.paletter   rO   rR   r   r   ZAPP_STYLESHEETr<   rC   ZAPP_TOOLBAR_STYLESHEETZPANES_TOOLBAR_STYLESHEETrD   ZPANES_TABBAR_STYLESHEETrQ   r   r   r   r   <module>   s$   
&{)d