
    G@d*                     
   d Z ddlmZmZmZmZmZ ddlmZm	Z	m
Z
mZmZmZ ddl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 G d de          Z G d de          Z G d de          Z G d de          ZdS )z
Dock widgets for plugins
    )QEventQObjectQtQSizeSignal)QDockWidgetQHBoxLayoutQSizePolicyQTabBarQToolButtonQWidgetN)_)ima)QStylePalette)PanesToolbarStyleSheetc                   F    e Zd ZdZd Zd Zd Zd Zd Ze	d             Z
dS )		TabFilterz1Filter event attached to each DockWidget QTabBar.c                     t          j        |            || _        || _        d | _        | j                            | j                   d S N)r   __init__dock_tabbarmain
from_indexsetStyleSheet_tabbar_stylesheet)selfr   r   s      3lib/python3.11/site-packages/spyder/widgets/dock.pyr   zTabFilter.__init__   sI    &	&&t'>?????    c                 |    |                                 }|t          j        k    r|                     |           dS dS )zFilter mouse press events.

        Events that are captured and not propagated return True. Events that
        are not captured and are propagated return False.
        F)typer   MouseButtonPresstab_pressed)r   objevent
event_types       r   eventFilterzTabFilter.eventFilter"   s=     ZZ\\
000U###5ur   c                    | j                             |                                          | _        | j                             | j                   	 |                                t          j        k    r9| j        dk    r|                     |           dS | 	                    |           dS dS # t          $ r Y dS w xY w)z9Method called when a tab from a QTabBar has been pressed.N)r   tabAtposr   setCurrentIndexbuttonr   RightButtonshow_nontab_menushow_tab_menuAttributeErrorr   r$   s     r   r"   zTabFilter.tab_pressed.   s    *00==((999
	||~~//?b(())%00000&&u-----	 0/
  	 	 	 DD		s   AB/ B/ /
B=<B=c                 0    |                      |           dS )z'Show the context menu assigned to tabs.N)r.   r1   s     r   r/   zTabFilter.show_tab_menu?   s    e$$$$$r   c                     | j                                         }|                    | j                            |                                                     dS )z2Show the context menu assigned to nontabs section.N)r   createPopupMenuexec_r   mapToGlobalr*   )r   r$   menus      r   r.   zTabFilter.show_nontab_menuC   sF    y((**

4#//		<<=====r   c                     t           j                                        }|j                            d           |d                             dt
          j                    |                                S )Ncenter)	alignmentzQTabBar::tab:bottom:selectedz
2px solid )borderBottom)	qstylizerstyle
StyleSheetr   	setValuesr   COLOR_BACKGROUND_1toStringr   csss     r   r   zTabFilter._tabbar_stylesheetH   s|    o((** 	 	 	
 	
 	
 	*+55Hm&FHH 	6 	
 	
 	
 ||~~r   N)__name__
__module____qualname____doc__r   r&   r"   r/   r.   propertyr    r   r   r   r      s        ;;@ @ @
 
 
  "% % %> > >
   X  r   r   c                   D     e Zd ZdZ fdZd Zd Zed             Z xZ	S )
DragButtonzb
    Drag button for the title bar.

    This button pass all its mouse events to its parent.
    c                 r   t                                          |           || _        |                     |           |                     d           |                     t          j        d                     |                     t          d                     | 
                    | j                   d S )NTdrag_dock_widgetz*Drag and drop pane to a different position)superr   parentsetIconSizesetAutoRaisesetIconr   icon
setToolTipr   r   _stylesheetr   rO   button_size	__class__s      r   r   zDragButton.__init__e   s        	%%%$SX011222FGGHHH4+,,,,,r   c                 :    | j                             |           d S r   )rO   mouseReleaseEventr1   s     r   rZ   zDragButton.mouseReleaseEventp   s    %%e,,,,,r   c                 :    | j                             |           d S r   )rO   mousePressEventr1   s     r   r\   zDragButton.mousePressEvents   s    ##E*****r   c                     t           j                                        }|j                            dd           |                                S )N0px)borderRadiusborder)r<   r=   r>   r   r?   rA   rB   s     r   rU   zDragButton._stylesheetv   sJ    o((**!! 	" 	
 	
 	
 ||~~r   )
rD   rE   rF   rG   r   rZ   r\   rH   rU   __classcell__rX   s   @r   rK   rK   ^   s{         	- 	- 	- 	- 	-- - -+ + +   X    r   rK   c                   F     e Zd ZdZ fdZd Z fdZ fdZ fdZ xZ	S )CloseButtonzClose button for the title bar.c                 ~   t                                          |           || _        |                     |           |                     d           |                     t          j        d                     |                     t          d                     | 
                    t          j        d           d S )NT	lock_openz	Lock paner   )rN   r   rO   rP   rQ   rR   r   rS   rT   r   _apply_stylesheetr   COLOR_BACKGROUND_3rV   s      r   r   zCloseButton.__init__   s        	%%%$SXk**++++'''}?CCCCCr   c                     t           j                                        }|j                            t
          j        | dd|           |                     |                                           d S )Npxr^   )widthr_   r`   backgroundColor)	r<   r=   r>   r   r?   r   BUTTON_WIDTHr   rA   )r   bgcolorbradiusrC   s       r   rg   zCloseButton._apply_stylesheet   sm    o((**!!(5##	 	" 	
 	
 	
 	3<<>>*****r   c                 ^   |                      t          j                   |                     t          j        d           | j                            t          j                   |                     t          j
        d                     t                                          |           d S )N   lock)	setCursorr   ArrowCursorrg   r   COLOR_BACKGROUND_5rO   rh   rR   r   rS   rN   
enterEventr   r$   rX   s     r   rv   zCloseButton.enterEvent   s    r~&&&}?CCC%%m&FGGGSXf%%&&&5!!!!!r   c                     |                      t          j        d           t                                          |           d S )Nrq   )rg   r   COLOR_BACKGROUND_6rN   r\   rw   s     r   r\   zCloseButton.mousePressEvent   s:    }?CCC&&&&&r   c                     |                      t          j        d           | j                             t          j                   |                     t          j        d                     t                      	                    |           d S )Nr   rf   )
rg   r   rh   rO   ru   rR   r   rS   rN   
leaveEventrw   s     r   r{   zCloseButton.leaveEvent   so    }?CCC%%m&FGGGSXk**+++5!!!!!r   )
rD   rE   rF   rG   r   rg   rv   r\   r{   ra   rb   s   @r   rd   rd      s        ))	D 	D 	D 	D 	D	+ 	+ 	+" " " " "' ' ' ' '" " " " " " " " "r   rd   c                   H     e Zd ZdZ fdZd Zd Z fdZ fdZd Z	 xZ
S )DockTitleBarzs
    Custom title bar for our dock widgets.

    Inspired from
    https://stackoverflow.com/a/40894225/438386
    c                    t          t          |                               |           t          dd          }t	          | |          }t          |           }|                    |                                           |                    t          j
        t          j                   t          |           }|                    |                                           |                    t          j
        t          j                   t          | |          }|j                            |j                   t!          |           }|                    d           |                    dddd           |                    |           |                    |           |                    |           |                    |           |                     t*          j                   d S )N   r   )rN   r}   r   r   rK   r   rT   toolTipsetSizePolicyr
   	ExpandingMinimumrd   clickedconnectremove_title_barr	   
setSpacingsetContentsMargins	addWidgetrg   r   rh   )	r   rO   rW   drag_buttonleft_spacerright_spacerclose_buttonhlayoutrX   s	           r   r   zDockTitleBar.__init__   s   lD!!**6222Bmm {33dmm{2244555!!+"79LMMMt}} 3 3 5 5666"";#8+:MNNN"455$$V%<===d##1""1aA...+&&&+&&&,''','''}?@@@@@r   c                     |                      t          j                   |                     t          j                   t          j        | |           d S r   )rs   r   OpenHandCursorrg   r   ru   r   rZ   r1   s     r   rZ   zDockTitleBar.mouseReleaseEvent   sG    r()))}?@@@!$.....r   c                     |                      t          j                   |                     t          j                   t          j        | |           d S r   )rs   r   ClosedHandCursorrg   r   ry   r   r\   r1   s     r   r\   zDockTitleBar.mousePressEvent   sG    r*+++}?@@@e,,,,,r   c                     |                      t          j                   |                     t          j                   t                                          |           d S r   )rs   r   r   rg   r   ru   rN   rv   rw   s     r   rv   zDockTitleBar.enterEvent   sM    r()))}?@@@5!!!!!r   c                     |                                   |                     t          j                   t	                                          |           dS )z*Remove customizations when leaving widget.N)unsetCursorrg   r   rh   rN   r{   rw   s     r   r{   zDockTitleBar.leaveEvent   sJ    }?@@@5!!!!!r   c                     t           j                                        }|j                            t
          j        |           |                     |                                           d S )N)heightrl   )	r<   r=   r>   r   r?   r   BUTTON_HEIGHTr   rA   )r   rn   rC   s      r   rg   zDockTitleBar._apply_stylesheet   sa    o((**)7# 	 	
 	
 	
 	3<<>>*****r   )rD   rE   rF   rG   r   rZ   r\   rv   r{   rg   ra   rb   s   @r   r}   r}      s         A A A A A8/ / /
- - -
" " " " "" " " " "+ + + + + + +r   r}   c                        e Zd ZdZej        Zej        Ze	j
        e	j        z  Z e            Z ee          Z fdZd Zd Zd Zd Z xZS )SpyderDockWidgetz#Subclass to override needed methodsc                    t          t          |                               ||           || _        |                     | j                   || _        t          |           | _        t          |           | _
        d | _        t          | j                  }|                    dddd           |                    d           | j                            |           | j                            dd           | j                            dd           |                                  |                                  | j                            | j                   d S )Nr   )rN   r   r   titlesetFeaturesFEATURESr   r   empty_titlebarr}   titlebarr   r	   r   r   	setLayoutsetMinimumSizesetMaximumSizeset_title_barr   visibilityChangedr   install_tab_event_filter)r   r   rO   layoutrX   s       r   r   zSpyderDockWidget.__init__   s@   %%..uf===
''' 	%dmm$T**
 T011!!!Q1---!%%f---**1a000**1a000 	 	&&t'DEEEEEr   c                 8    | j                                          dS )z
        Reimplement Qt method to send a signal on close so that "Panes" main
        window menu can be updated correctly
        N)sig_plugin_closedemitr1   s     r   
closeEventzSpyderDockWidget.closeEvent  s    
 	##%%%%%r   c                    d}	 | j                             t                    }n# t          $ r g }Y nw xY w|D ]J}t	          |                                          D ]&}|                    |          }|| j        k    r|} n'K|g|| _        t          | j        dd          Lt          | j        | j                   | j        _        | j                            | j        j                   dS dS dS )z
        Install an event filter to capture mouse events in the tabs of a
        QTabBar holding tabified dockwidgets.
        Nfilter)r   findChildrenr   RuntimeErrorrangecounttabTextr   r   getattrr   r   installEventFilter)r   valuer   tabbarstabbartabr   s          r   r   z)SpyderDockWidget.install_tab_event_filter!  s   
 	i,,W55GG 	 	 	GGG	  	 	FV\\^^,,  s++DJ&&"(KE ' "*Dt'488@*3D4D48I+? +? ' 33D4D4KLLLLL #" A@s   $ 33c                 n    | j                             d           |                     | j                   dS )zSet empty qwidget on title bar.FN)sig_title_bar_shownr   setTitleBarWidgetr   r   s    r   r   z!SpyderDockWidget.remove_title_bar>  s6     %%e,,,t233333r   c                 n    | j                             d           |                     | j                   dS )zSet custom title bar.TN)r   r   r   r   r   s    r   r   zSpyderDockWidget.set_title_barC  s5     %%d+++t}-----r   )rD   rE   rF   rG   r   AllDockWidgetAreasALLOWED_AREASLeftDockWidgetAreaLOCATIONr   DockWidgetClosableDockWidgetMovabler   r   r   boolr   r   r   r   r   r   ra   rb   s   @r   r   r      s        -- )M$H-0MMH  &,,F F F F F@& & &M M M:4 4 4
. . . . . . .r   r   )rG   qtpy.QtCorer   r   r   r   r   qtpy.QtWidgetsr   r	   r
   r   r   r   qstylizer.styler<   spyder.api.translationsr   spyder.utils.icon_managerr   spyder.utils.paletter   spyder.utils.stylesheetr   r   rK   rd   r}   r   rI   r   r   <module>r      s    ; : : : : : : : : : : : : :2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2     % % % % % % ) ) ) ) ) ) . . . . . . : : : : : :? ? ? ? ? ? ? ?J       D(" (" (" (" ("+ (" (" ("V@+ @+ @+ @+ @+7 @+ @+ @+FX. X. X. X. X.{ X. X. X. X. X.r   