
    G@d4                     r    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d	S )
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        |            |                     d           d| _        d| _        d| _        d| _        t          j        d          t          j        d          t          j        d          t          j        d          d| _	        dS )	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    Elib/python3.11/site-packages/spyder/plugins/editor/panels/debugger.pyr   zDebuggerPanel.__init__   s    td### $#' 	 %(H-=$>$>%(X.F%G%G#&8,A#B#B"x(899; ;


    c                     || _         d S )N)r   )r    ns     r!   set_current_line_arrowz$DebuggerPanel.set_current_line_arrow'   s    #$   r"   c                    t          | j                                                  }t          |                                |                                          }|                                dk    r|                    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*   sm    
 $+**,,--"))++ryy{{33	??r!!r"""r"   c                 v   t          d||                                                                 |                                                                           }	 | j        |         }|                    ||           dS # t          $ r-}t          d                    |                     Y d}~dS 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4]]__++--/ /	&:i(D JJw%%%%%  	G 	G 	G;BB1EEFFFFFFFFF	Gs   B 
B8"B33B8c                 <    d| _         |                                  dS )z5Handle debugging state. The debugging is not running.TNr   updater   s    r!   
stop_cleanzDebuggerPanel.stop_cleanF   s     	r"   c                 <    d| _         |                                  dS )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        D ]\  }}}| j	        |k    r| 
                    ||d           | j        |k    r| j        s| 
                    ||d           |                                }||j        so|j        | 
                    ||d           | 
                    ||d           dS )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44..t{'BCCC'+{'A 	F 	F#Ce$33**3GGG';66ty6**3AAA>>##D|4?|(0**3FFFF**3EEEE	F 	Fr"   c                     | j                             |          }|                                t          j        z  }| j         j                            ||           dS )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   sf    
 kAA%HH!!B$44..{>C 	/ 	E 	E 	E 	E 	Er"   c                 l    | j                             |          | _        |                                  dS )zKOverride Qt method.

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

        Remove semitransparent breakpoint hint
        N)r   r<   rW   s     r!   
leaveEventzDebuggerPanel.leaveEvent}   s    
 !%r"   c                 :    | j                             |           dS )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                 f   |r| j         j                            | j                   | j         j                            | j                   | j         j        d                             | j                   | j         j                            | j                   dS | j         j        	                    | j                   | j         j        	                    | j                   | j         j        d         	                    | j                   | j         j        	                    | j                   dS )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      		EK/77EEEK&..t/JKKKK&r*224?CCCK'//0@AAAAAK/::4<HHHK&11$2MNNNK&r*55doFFFK'2243CDDDDDr"   )__name__
__module____qualname____doc__r   r%   r/   r9   r   r=   r?   rB   rU   rX   rZ   r\   rf   __classcell__)rL   s   @r!   r   r      s       MM; ; ;"% % %	 	 	& & &" 
TVV  V
 
TVV  V
F F F F F0E E E    & & &E E E E E 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      s     / . . . . . . . . . . . - - - - - - - - * ) ) ) ) ) " " " " " " * * * * * *HE HE HE HE HEE HE HE HE HE HEr"   