
    Je*                         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y)z
Dock widgets for plugins
    )QEventQObjectQtQSizeSignal)QDockWidgetQHBoxLayoutQSizePolicyQTabBarQToolButtonQWidgetN)_)ima)QStylePalette)PanesToolbarStyleSheetc                   >    e Zd ZdZd Zd Zd Zd Zd Ze	d        Z
y)		TabFilterz1Filter event attached to each DockWidget QTabBar.c                     t        j                  |        || _        || _        d | _        | j                  j                  | j                         y N)r   __init__dock_tabbarmain
from_indexsetStyleSheet_tabbar_stylesheet)selfr   r   s      5/usr/lib/python3/dist-packages/spyder/widgets/dock.pyr   zTabFilter.__init__   s@    &	&&t'>'>?    c                 n    |j                         }|t        j                  k(  r| j                  |       yy)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"   s1     ZZ\
000U#r   c                 r   | j                   j                  |j                               | _        | j                   j	                  | j                         	 |j                         t        j                  k(  r3| j                  dk(  r| j                  |       y| j                  |       yy# t        $ r Y y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
	||~/??b())%0&&u-	 0
  	 		s   AB* B* *	B65B6c                 &    | j                  |       y)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                         }|j                  | j                  j	                  |j                                      y)z2Show the context menu assigned to nontabs section.N)r   createPopupMenuexec_r   mapToGlobalr*   )r   r$   menus      r   r.   zTabFilter.show_nontab_menuC   s7    yy((*

4##//		<=r   c                     t         j                  j                         }|j                  j	                  d       |d   j	                  dt
        j                          |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   sj    oo((* 	 	 	
 	*+55%m&F&F%GH 	6 	
 ||~r   N)__name__
__module____qualname____doc__r   r&   r"   r/   r.   propertyr    r   r   r   r      s3    ;@
"%>
  r   r   c                   >     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                 (   t         |   |       || _        | j                  |       | j	                  d       | j                  t        j                  d             | j                  t        d             | j                  | j                         y )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   sq      	%$SXX012FGH4++,r   c                 :    | j                   j                  |       y r   )rO   mouseReleaseEventr1   s     r   rZ   zDragButton.mouseReleaseEventp   s    %%e,r   c                 :    | j                   j                  |       y r   )rO   mousePressEventr1   s     r   r\   zDragButton.mousePressEvents   s    ##E*r   c                     t         j                  j                         }|j                  j	                  dd       |j                         S )N0px)borderRadiusborder)r<   r=   r>   r   r?   rA   rB   s     r   rU   zDragButton._stylesheetv   s?    oo((*!! 	" 	
 ||~r   )
rD   rE   rF   rG   r   rZ   r\   rH   rU   __classcell__rX   s   @r   rK   rK   ^   s+    	--+  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                 2   t         |   |       || _        | j                  |       | j	                  d       | j                  t        j                  d             | j                  t        d             | j                  t        j                  d       y )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__   sp      	%$SXXk*++'}??Cr   c                     t         j                  j                         }|j                  j	                  t
        j                  | dd|       | j                  |j                                y )Npxr^   )widthr_   r`   backgroundColor)	r<   r=   r>   r   r?   r   BUTTON_WIDTHr   rA   )r   bgcolorbradiusrC   s       r   rg   zCloseButton._apply_stylesheet   sY    oo((*!!(55#9B#	 	" 	
 	3<<>*r   c                 <   | j                  t        j                         | j                  t        j
                  d       | j                  j                  t        j                         | j                  t        j                  d             t        | 1  |       y )N   lock)	setCursorr   ArrowCursorrg   r   COLOR_BACKGROUND_5rO   rh   rR   r   rS   rN   
enterEventr   r$   rX   s     r   rv   zCloseButton.enterEvent   sc    r~~&}??C%%m&F&FGSXXf%&5!r   c                 d    | j                  t        j                  d       t        |   |       y )Nrq   )rg   r   COLOR_BACKGROUND_6rN   r\   rw   s     r   r\   zCloseButton.mousePressEvent   s&    }??C&r   c                     | j                  t        j                  d       | j                  j                  t        j                         | j                  t        j                  d             t        | %  |       y )Nr   rf   )
rg   r   rh   rO   ru   rR   r   rS   rN   
leaveEventrw   s     r   r{   zCloseButton.leaveEvent   sS    }??C%%m&F&FGSXXk*+5!r   )
rD   rE   rF   rG   r   rg   rv   r\   r{   ra   rb   s   @r   rd   rd      s%    )	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                 D   t         t        |   |       t        dd      }t	        | |      }t        |       }|j                  |j                                |j                  t        j                  t        j                         t        |       }|j                  |j                                |j                  t        j                  t        j                         t        | |      }|j                  j                  |j                         t!        |       }|j#                  d       |j%                  dddd       |j'                  |       |j'                  |       |j'                  |       |j'                  |       | j)                  t*        j,                         y )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Bm {3dm{2245!!+"7"79L9LMt} 3 3 56"";#8#8+:M:MN"45$$V%<%<=d#1""1aA.+&+&,','}??@r   c                     | j                  t        j                         | j                  t        j
                         t        j                  | |       y r   )rs   r   OpenHandCursorrg   r   ru   r   rZ   r1   s     r   rZ   zDockTitleBar.mouseReleaseEvent   s8    r(()}??@!!$.r   c                     | j                  t        j                         | j                  t        j
                         t        j                  | |       y r   )rs   r   ClosedHandCursorrg   r   ry   r   r\   r1   s     r   r\   zDockTitleBar.mousePressEvent   s8    r**+}??@e,r   c                     | j                  t        j                         | j                  t        j
                         t        |   |       y r   )rs   r   r   rg   r   ru   rN   rv   rw   s     r   rv   zDockTitleBar.enterEvent   s6    r(()}??@5!r   c                     | j                          | j                  t        j                         t        |   |       y)z*Remove customizations when leaving widget.N)unsetCursorrg   r   rh   rN   r{   rw   s     r   r{   zDockTitleBar.leaveEvent   s0    }??@5!r   c                     t         j                  j                         }|j                  j	                  t
        j                  |       | j                  |j                                y )N)heightrl   )	r<   r=   r>   r   r?   r   BUTTON_HEIGHTr   rA   )r   rn   rC   s      r   rg   zDockTitleBar._apply_stylesheet   sM    oo((*)77# 	 	
 	3<<>*r   )rD   rE   rF   rG   r   rZ   r\   rv   r{   rg   ra   rb   s   @r   r}   r}      s'    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                 r   t         t        |   ||       || _        | j	                  | j
                         || _        t        |       | _        t        |       | _
        d | _        t        | j                        }|j                  dddd       |j                  d       | j                  j                  |       | j                  j!                  dd       | j                  j#                  dd       | j%                          | j'                          | j(                  j+                  | j,                         y )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=
' 	%dm$T*
 T001!!!Q1-!%%f-**1a0**1a0 	 	&&t'D'DEr   c                 8    | j                   j                          y)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                   j                  t              }|D ]D  }t	        |j                               D ]&  }|j                  |      }|| j                  k(  s$|} D F |~|| _        t        | j                  dd      _t        | j                  | j                         | j                  _        | j                  j                  | j                  j                         yyy# t        $ r g }Y w xY w)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    
 	ii,,W5G  	FV\\^, s+DJJ&"(K		 "*Dt''48@*3D4D4D48II+?  '  33D4D4D4K4KL A #  	G	s   C- -C;:C;c                 p    | j                   j                  d       | j                  | j                         y)zSet empty qwidget on title bar.FN)sig_title_bar_shownr   setTitleBarWidgetr   r   s    r   r   z!SpyderDockWidget.remove_title_bar>  s*      %%e,t223r   c                 p    | j                   j                  d       | j                  | j                         y)zSet custom title bar.TN)r   r   r   r   r   s    r   r   zSpyderDockWidget.set_title_barC  s(      %%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      sd    - ))M$$H--0M0MMH  ,F@&M: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      so    ; :2 2  % ) . :? ?J D("+ ("V@+7 @+FX.{ X.r   