
    G@d-                         d Z ddlmZ ddlZddlmZmZmZ ddlmZm	Z	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 Line Number panel
    )ceilN)QSizeQtQPointF)QPainterQColorQStaticTextQFontMetricsF)ima)Panel)DiagnosticSeverityc                        e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Z fdZ fdZd ZddZd Zd Z xZS )LineNumberAreaz=Line number area (on the left side of the text editor widget)c                    t          j        |            |                     d           d| _        t	          t
          j                  | _        d| _        t          j
        d          | _        t          j
        d          | _        t          j
        d          | _        t          j
        d          | _        t          j
        d          | _        d| _        d| _        d| _        d | _        d | _        d | _        d | _        d S )NTerrorwarninginformationhinttodo)r   __init__setMouseTracking
scrollabler   r   darkGraylinenumbers_color_markers_marginr   icon
error_iconwarning_icon	info_icon	hint_icon	todo_icon_margin_pressed	_released_width_cache_static_line_numbers_static_active_line_static_text_dpiselfs    Glib/python3.11/site-packages/spyder/plugins/editor/panels/linenumber.pyr   zLineNumberArea.__init__   s    td###!'!4!4  $ (7++HY//-00&))&))  ! %)!#'  !%    c                 F    t          |                                 d          S )Override Qt method.r   )r   compute_widthr*   s    r,   sizeHintzLineNumberArea.sizeHint?   s    T''))1---r-   c                    t          |                               |                                | j        j                   | j                                                                        fd}|                                 dz
  }t          ||          }| j	        rk| j        
                                }t          |          }|                                dk    r|                                n|                                | j        j        D ]\\  }}}	|	                                }
| j        r9|
r6|
j        rd}d}d}d}|
j        D ]S\  }}}}||t&          j        k    z  }||t&          j        k    z  }||t&          j        k    z  }||t&          j        k    z  }T|r& |d|| j                            |                     nw|r& |d|| j                            |                     nO|r& |d|| j                            |                     n'|r% |d|| j                            |                     |
j        r% |d|| j                            |                     ^dS )z?Override Qt method.

        Painting line number area
        c                     |                                 |                                z  }                    | t          ||z
  dz  z             |           d S )N   )heightdevicePixelRatio
drawPixmapr   )xleftytoppixmappixmap_heightfont_heightpainters       r,   draw_pixmapz.LineNumberArea.paintEvent.<locals>.draw_pixmapL   sc    "MMOOf.E.E.G.GGMT[6!;;<<    r-   r4   r      N)r   fillRectrecteditorsideareas_colorfontMetricsr5   get_markers_marginr   r#   fontr
   leadingdraw_linenumbersdraw_linenumbers_slowvisible_blocksuserDatar   code_analysisr   ERRORWARNINGINFORMATIONHINTr   r:   r   r    r!   r   r"   )r+   eventr>   size	icon_sizerF   fmtopline_numberblockdataerrorswarningsinfoshints_sevr<   r=   s                    @@r,   
paintEventzLineNumberArea.paintEventC   s   
 4..t{'BCCCk--//6688	 	 	 	 	 	 &&((1,$%%	< 	4;##%%Dt$$Bzz||q  %%g.... **7333'+{'A 	J 	J#Ce>>##D# J J% NF HEE(,(: @ @1c1#);)A"AA C+=+E$EE(:(F!FF(:(?!?? N#AsDO,B,B9,M,MNNNN! N#sD$5$<$<Y$G$GI I I I N#AsDN,A,A),L,LMMMM N#AsDN,A,A),L,LMMM9 JK3(=(=i(H(HIII3	J 	Jr-   c           	         t          | j        j                  dk    rdS | j                                                                        dz   }|                                 |                                 }d | j        j        D             }	 |                    |          }| j        j        |         d         }n# t          $ r d}Y nw xY wfd|D             }d	                    |          
                    dd          }| j                                        }	|	                    |	j                   |                    |	           |                    | j                   |                                 | j        k    r'|                                 | _        d| _        d| _        | j        r8|| j                                        k    r| j                            |           n/t/          |          | _        | j                            |		           | j        j        d         d         }
|| j                                                                        z
  }|                    t7          ||
          | j                   ||	                    |	j                   |                    |	           |                    | j        j                   t=          |          }| j        r8|| j                                        k    r| j                            |           nSt/          |          | _        | j                            t@          j!                   | j                            |		           | j                                        }||                                z
  }|"                    tG          |          |tG          |                                          tG          |$                                          | j        j%                   |                    t7          ||          | j                   dS dS )
zDraw line numbers.r   Nr?   c                     g | ]\  }}}|	S  rb   ).0r]   lns      r,   
<listcomp>z3LineNumberArea.draw_linenumbers.<locals>.<listcomp>   s    GGG2qGGGr-   c                     g | ]	}| d 
S )drb   )rc   rd   number_digitss     r,   re   z3LineNumberArea.draw_linenumbers.<locals>.<listcomp>   s'    IIIR2}0000IIIr-   z<br> z&nbsp;)rF   )&lenrB   rJ   
textCursorblockNumbercompute_width_digitswidthindex
ValueErrorjoinreplacerF   	setWeightNormalsetFontsetPenr   logicalDpiXr)   r'   r(   textsetTextr	   preparerR   drawStaticTextr   Boldnormal_colorstrsetTextFormatr   	PlainTextr@   intr5   rC   )r+   r=   active_line_numberrn   visible_linesidx
active_topline_numberslinesrF   rU   leftrx   rR   rh   s                 @r,   rH   zLineNumberArea.draw_linenumbers}   s   t{)**a//F![3355AACCaG1133

GGDK,FGGG	%%&899C3C8;JJ 	 	 	JJJ	 JIII=III L))11#x@@
 {!!t{###t-...!666$($4$4$6$6D!(,D%'+D$$ 	91668888)11%888(3E(:(:D%%--4-888k(+A.t05577==???D# 9	; 	; 	; !NN49%%%OOD!!!NN4;3444)**D' <4388::::,44T:::+6t+<+<((66r|DDD(00d0;;;+0022D4::<<'D D		:s4::<<'8'8#dkkmm:L:L+   ""j))4+CE E E E E1 "!s   -B< <C
Cc                 @   | j                                         }| j                                                                         }| j                                                                         }|                                dz   }| j         j        D ]	\  }}}| j        r||k    rO|	                    |j
                   |                    |           |                    | j         j                   nI|	                    |j                   |                    |           |                    | j                   |                    d||                                 |t%          t&          j        t&          j        z            t-          |                     dS )zb
        Slower way (2x) to draw line numbers.

        This is necessary for some fonts.
        r?   r   N)rB   rF   rD   r5   rk   rW   rl   rJ   r#   rs   r|   ru   rv   r}   rt   r   drawTextrn   r   r   
AlignRightAlignBottomr~   )	r+   r=   rF   r<   active_blockr   rU   rV   rW   s	            r,   rI   z$LineNumberArea.draw_linenumbers_slow   sk    {!!k--//6688{--//5577)5577!;'+{'A 	3 	3#Ce| 3"444NN49---OOD)))NN4;#;<<<<NN4;///OOD)))NN4#9:::  C!,!$R]R^%C!D!D!$[!1!13 3 3	3 	3r-   c                 8    | j                                          dS r/   N)rB   hide_tooltipr+   rQ   s     r,   
leaveEventzLineNumberArea.leaveEvent   s      """""r-   c                    | j                             |          }| j                                                             |dz
            }|                                }| j        dk    }|r%|j        r|r| j                             ||           n| j                                          |	                                t          j        k    r.|| _        | j                             | j        | j                   dS dS )z^Override Qt method.

        Show code analisis, if left button pressed select lines.
        r?   r   N)rB   get_linenumber_from_mouse_eventdocumentfindBlockByNumberrK   r%   rL   show_code_analysis_resultsr   buttonsr   
LeftButtonselect_linesr$   )r+   rQ   rV   rW   rX   checks         r,   mouseMoveEventzLineNumberArea.mouseMoveEvent   s    
 kAA%HH$$&&88QGG~~ "$ 	'D& 	'5 	'K22;379 9 9 9 K$$&&&==??bm++(DNK$$T]DNCCCCC ,+r-   c                     | j                             |          }|| _        || _        | j                             | j        | j                   dS )zFOverride Qt method

        Select line, and starts selection
        N)rB   r   r$   r%   r   )r+   rQ   rV   s      r,   mousePressEventzLineNumberArea.mousePressEvent   sT    
 kAA%HH#$  !%	1 	1 	1 	1 	1r-   c                 "    d| _         d| _        dS )r/   r   N)r%   r$   r   s     r,   mouseReleaseEventz LineNumberArea.mouseReleaseEvent  s    r-   c                 :    | j                             |           dS r   )rB   
wheelEventr   s     r,   r   zLineNumberArea.wheelEvent  s    u%%%%%r-   c           	          | j                                         }t          dt          j        t          j        |dz                                 S )z4Compute and return line number area width in digits.r?   )rB   
blockCountmaxmathr   log10)r+   number_liness     r,   rm   z#LineNumberArea.compute_width_digits  sM    {--//1di
A! !     ! ! 	!r-   c                 B   | j         sdS |                                 }| j        | j        d         |k    r| j        d         S | j        r3d| j                                                            d|z            z   }nd}||                                 z   }||f| _        |S )z*Compute and return line number area width.r   Nr?      9)_enabledrm   r&   r#   rB   rD   rn   rE   )r+   rh   marginrn   s       r,   r0   zLineNumberArea.compute_width  s    } 	11133)!!$55$Q''< 	002288}9LMMMFFF00222*E2r-   c                     d| _         dS )zClear width cache.N)r&   r*   s    r,   _clear_width_cachez!LineNumberArea._clear_width_cache*  s     r-   c                     t          t          |                               |           |j                            | j                   dS )z!Clear width cache on font change.N)superr   
on_installsig_font_changedconnectr   )r+   rB   	__class__s     r,   r   zLineNumberArea.on_install.  sA    nd##..v666''(?@@@@@r-   c                     | j         j                            | j                   t	          t
          |                                            dS )zDisconnect signal.N)rB   r   
disconnectr   r   r   on_uninstall)r+   r   s    r,   r   zLineNumberArea.on_uninstall3  sA    $//0GHHHnd##0022222r-   c                 t    | j         r0| j                                                                        dz   }|S dS )zGet marker margins.r4   r   )r   rB   rD   r5   )r+   r<   s     r,   rE   z!LineNumberArea.get_markers_margin8  s<     	+1133::<<q@K1r-   Tc                 ^    d| _         || _        || _        |                     |p|           dS )zY
        Setup margin settings
        (except font, now set in editor.set_font)
        N)r&   r#   r   set_enabled)r+   linenumbersmarkerss      r,   setup_marginszLineNumberArea.setup_margins@  s:    
 !"&/00000r-   c                 >    || _         |                     |           d S )N)r   
setVisible)r+   states     r,   r   zLineNumberArea.set_enabledJ  s!    r-   c                 N    |                                                                  S )z%Return current line number area width)contentsRectrn   r*   s    r,   	get_widthzLineNumberArea.get_widthN  s       ""((***r-   )TT)__name__
__module____qualname____doc__r   r1   r_   rH   rI   r   r   r   r   r   rm   r0   r   r   r   rE   r   r   r   __classcell__)r   s   @r,   r   r      so       GG
% % %@. . .8J 8J 8JtIE IE IEV3 3 34# # #D D D,	1 	1 	1  
& & &! ! !  "! ! !A A A A A
3 3 3 3 3
  1 1 1 1  + + + + + + +r-   r   )r   r   r   qtpy.QtCorer   r   r   
qtpy.QtGuir   r   r	   r
   spyder.utils.icon_managerr   spyder.api.panelr   spyder.plugins.completion.apir   r   rb   r-   r,   <module>r      s    
        + * * * * * * * * * C C C C C C C C C C C C * ) ) ) ) ) " " " " " " < < < < < <w+ w+ w+ w+ w+U w+ w+ w+ w+ w+r-   