
    Je4                     j    d Z ddlmZmZmZmZ ddlmZmZ ddl	m
Z
 ddlmZ ddlmZ  G d de      Zy	)
z.
This module contains the DebuggerPanel panel
    )QSizeQtQRectSlot)QPainterQFontMetrics)ima)Panel)debug_printc                        e Zd ZdZd Zd Zd Zd Z e       d        Z	 e       d        Z
 fdZd	 Zd
 Zd Zd Zd Z xZS )DebuggerPanelzCDebugger panel for show information about the debugging in process.c                 8   t        j                  |        | j                  d       d| _        d| _        d| _        d| _        t        j                  d      t        j                  d      t        j                  d      t        j                  d      d| _	        y)	zInitialize panel.TNFbreakpoint_bigbreakpoint_transparentbreakpoint_cond_bigarrow_debugger)
breakpointtransparent	conditionarrow)
r
   __init__setMouseTracking
scrollableline_number_hint_current_line_arrowstopr	   iconiconsselfs    G/usr/lib/python3/dist-packages/spyder/plugins/editor/panels/debugger.pyr   zDebuggerPanel.__init__   sy    td# $#' 	 %(HH-=$>%(XX.F%G#&88,A#B"xx(89;
    c                     || _         y )N)r   )r    ns     r!   set_current_line_arrowz$DebuggerPanel.set_current_line_arrow'   s
    #$ r"   c                     t        | j                  j                               }t        |j	                         |j	                               }|j                         dkD  r|j                  d       |S )zcOverride Qt method.

        Returns the widget size hint (based on the editor font size).
           )r   editorfontr   heightwidthsetWidth)r    fm	size_hints      r!   sizeHintzDebuggerPanel.sizeHint*   sV    
 $++**,-"))+ryy{3	??r!r"r"   c                 4   t        d|| j                         j                         | j                         j                               }	 | j                  |   }|j                  ||       y# t        $ r$}t        dj                  |             Y d}~yd}~ww xY w)zDraw the given breakpoint pixmap.

        Args:
            top (int): top of the line to draw the breakpoint icon.
            painter (QPainter)
            icon_name (srt): key of icon to draw (see: self.icons)
        r   z!Breakpoint icon doesn't exist, {}N)	r   r/   r+   r*   r   paintKeyErrorr   format)r    toppainter	icon_namerectr   es          r!   _draw_breakpoint_iconz#DebuggerPanel._draw_breakpoint_icon5   s     QT]]_224]]_++-/	&::i(D JJw%  	G;BB1EFF	Gs   A* *	B3BBc                 2    d| _         | j                          y)z5Handle debugging state. The debugging is not running.TNr   updater   s    r!   
stop_cleanzDebuggerPanel.stop_cleanF   s     	r"   c                 2    d| _         | j                          y)z1Handle debugging state. The debugging is running.FNr;   r   s    r!   start_cleanzDebuggerPanel.start_cleanL   s     	r"   c                 ,   t         t        |   |       t        |       }|j	                  |j                         | j                  j                         | j                  j                  D ]  \  }}}| j                  |k(  r| j                  ||d       | j                  |k(  r| j                  s| j                  ||d       |j                         }||j                  sv|j                  | j                  ||d       | j                  ||d        y)z>Override Qt method.

        Paint breakpoints icons.
        r   r   Nr   r   )superr   
paintEventr   fillRectr7   r(   sideareas_colorvisible_blocksr   r9   r   r   userDatar   breakpoint_condition)r    eventr5   r4   line_numberblockdata	__class__s          r!   rB   zDebuggerPanel.paintEventR   s    
 	mT-e44.t{{'B'BC'+{{'A'A 	F#Ce$$3**3G'';6tyy**3A>>#D|4??((0**3F**3E	Fr"   c                     | j                   j                  |      }|j                         t        j                  z  }| j                   j
                  j                  ||       y)zLOverride Qt method

        Add/remove breakpoints by single click.
        )edit_conditionN)r(   get_linenumber_from_mouse_event	modifiersr   ShiftModifierdebuggertoogle_breakpoint)r    rH   rI   shifts       r!   mousePressEventzDebuggerPanel.mousePressEventj   sR    
 kkAA%H!B$4$44..{>C 	/ 	Er"   c                 d    | j                   j                  |      | _        | j                          y)zKOverride Qt method.

        Draw semitransparent breakpoint hint.
        N)r(   rO   r   r<   r    rH   s     r!   mouseMoveEventzDebuggerPanel.mouseMoveEventt   s'    
 !% K K!r"   c                 2    d| _         | j                          y)zLOverride Qt method.

        Remove semitransparent breakpoint hint
        N)r   r<   rW   s     r!   
leaveEventzDebuggerPanel.leaveEvent}   s    
 !%r"   c                 :    | j                   j                  |       y)zfOverride Qt method.

        Needed for scroll down the editor when scrolling over the panel.
        N)r(   
wheelEventrW   s     r!   r\   zDebuggerPanel.wheelEvent   s    
 	u%r"   c                    |r| j                   j                  j                  | j                         | j                   j                  j                  | j
                         | j                   j                  d   j                  | j                         | j                   j                  j                  | j                         y| j                   j                  j                  | j                         | j                   j                  j                  | j
                         | j                   j                  d   j                  | j                         | j                   j                  j                  | j                         y)zwChange visibility and connect/disconnect signal.

        Args:
            state (bool): Activate/deactivate.
         N)
r(   sig_repaint_breakpointsconnectrepaintsig_debug_stopr%   r=   sig_debug_startr?   
disconnect)r    states     r!   on_state_changedzDebuggerPanel.on_state_changed   s     KK//77EKK&&..t/J/JKKK&&r*224??CKK''//0@0@AKK//::4<<HKK&&11$2M2MNKK&&r*55dooFKK''2243C3CDr"   )__name__
__module____qualname____doc__r   r%   r/   r9   r   r=   r?   rB   rU   rX   rZ   r\   rf   __classcell__)rL   s   @r!   r   r      sg    M;"%	&" 
V 
 
V 
F0E&Er"   r   N)rj   qtpy.QtCorer   r   r   r   
qtpy.QtGuir   r   spyder.utils.icon_managerr	   spyder.api.panelr
   spyder.config.baser   r   r^   r"   r!   <module>rq      s0    / . - * " *HEE HEr"   