
    ;eO                     z   	 d dl Z d dlZd dl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 d Zd Zd Zd	 Ze j        d
             Z G d d          Z G d de
          Z G d de          Z G d de
          Z G d de          Zd Zedk    r'd dlmZ  eddd           d dlmZ  ee           dS dS )    N)Font)idleConf)	Delegator)macosxc                 n    	 |                      |          }|rt          t          |                    nd S N)indexintfloat)textr	   
text_indexs      &/usr/lib/python3.11/idlelib/sidebar.py
get_linenor      s6    AE""J%/93uZ  !!!T9    c                 $    	 t          | d          S )Nzend-1c)r   r   s    r   get_end_linenumberr      s    AdH%%%r   c                 V    	 |                      | d| dd          }|r|d         ndS )Nz
 linestartz lineenddisplaylinesr   )count)r   r	   ress      r   get_displaylinesr      sG    J
**)))'''#% %C 3q66ar   c           
         	 |                                  }|dk    r|                                 }n-|dk    r|                                 }nt          d|           t	          t          | j        j        |d         |                     d          |                     d          g                    }t	          t          | j        j        |d         |                     d          |                     d          g                    }||fS )NpackgridzUnsupported geometry manager: padxborderpady)	winfo_manager	pack_info	grid_info
ValueErrorsummaptkgetintcget)widgetmanagerinfor   r   s        r   get_widget_paddingr+   !   s   E""$$G&!!	F		!!C'CCDDD s69#VFH&    D
 s69#VFH&    D
 :r   c              #      K   |                      t          j                   	 d V  |                      t          j                   d S # |                      t          j                   w xY w)Nstate)	configurer%   NORMALDISABLEDr   s    r   temp_enable_text_widgetr2   ;   sb      NNN###*R[)))))R[))))s   A
 
"A,c                   ^    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S )BaseSideBarc                     || _         |j        | _        |j        | _        d| _        |                                 | _        |                                  |                                  | 	                                 d S NF)
editwin
text_frameparentr   is_showninit_widgetsmain_widgetbind_eventsupdate_fontupdate_colors)selfr7   s     r   __init__zBaseSideBar.__init__F   ss    (L	,,..r   c                     	 t           r   NotImplementedErrorr@   s    r   r;   zBaseSideBar.init_widgetsT   s    J!!r   c                     	 t           r   rC   rE   s    r   r>   zBaseSideBar.update_fontX   s    I!!r   c                     	 t           r   rC   rE   s    r   r?   zBaseSideBar.update_colors\   s    K!!r   c                     	 t           r   rC   rE   s    r   r   zBaseSideBar.grid`   s    :!!r   c                 N    | j         s|                                  d| _         d S d S )NT)r:   r   rE   s    r   show_sidebarzBaseSideBar.show_sidebard   s.    } 	!IIKKK DMMM	! 	!r   c                 X    | j         r"| j                                         d| _         d S d S r6   )r:   r<   grid_forgetrE   s    r   hide_sidebarzBaseSideBar.hide_sidebari   s6    = 	"((***!DMMM	" 	"r   c                     	 t           r   rC   r@   argskwargss      r   yscroll_eventzBaseSideBar.yscroll_eventn   s    F!!r   c                 F    	  | j         j        j        |   | j        |i |S r   )r7   vbarsetrR   rO   s      r   redirect_yscroll_eventz"BaseSideBar.redirect_yscroll_eventr   s6    	 	t$$!t!426222r   c                 :    	 | j                                          dS Nbreak)r   	focus_setr@   events     r   redirect_focusin_eventz"BaseSideBar.redirect_focusin_eventz   s    F	wr   c                 ~    	 | j                                          | j                             |d|j                   dS )Nr   xyrY   )r   rZ   event_generatera   )r@   r\   
event_names      r   redirect_mousebutton_eventz&BaseSideBar.redirect_mousebutton_event   s=    J		  qEG <<<wr   c                 X    	 | j                             dd|j        |j                   dS )N<MouseWheel>r   )r`   ra   deltarY   )r   rb   ra   rg   r[   s     r   redirect_mousewheel_eventz%BaseSideBar.redirect_mousewheel_event   s9    E	  #$u{ 	! 	D 	D 	Dwr   c                    	
  j          j        d<    j                            d j                    j                            d j                    fd}dD ]C}d| dd| dd	| d
fD ]} |||           d| dd| dfD ]} ||d| d           Dd d d 	 fd

 fd} j                            d|            fd} j                            d|           
fd} j                            d|           	
 fd	 fd} j                            d|           	 fd} j                            d|           d S )Nyscrollcommandz	<FocusIn>rf   c                 t    t          j        j        |          }j                            | |           d S )N)rc   )	functoolspartialrd   r<   bind)rc   target_event_namehandlerr@   s      r   bind_mouse_eventz1BaseSideBar.bind_events.<locals>.bind_mouse_event   sD    '(G3DF F FG!!*g66666r   )            z<Button->z<ButtonRelease-z<Bz-Motion>)ro   z<Double-Button-z<Triple-Button-c                 6   	 t          j        d|            }t          |g          \  }}j                            ddd           j                            d| d|dz    d           j                            d||k    r|n|dz    d           d S )N@0,sel1.0endz.0   insert)r   r   sorted
tag_removetag_addmark_set)y_coordlinenoabr@   
start_lines       r   %drag_update_selection_and_insert_markzFBaseSideBar.bind_events.<locals>.drag_update_selection_and_insert_mark   s    H	???;;F:v.//DAqI  u555IeXXX!A#zzz:::Ix,2aKK&&VaZKKKM M M M Mr   c                     t          t          j                            d| j                                       | j         | j                   d S )Nrx   )r
   r   r   r	   ra   )r\   r   last_yr@   r   s    r   b1_mousedown_handlerz5BaseSideBar.bind_events.<locals>.b1_mousedown_handler   sP     U49?????#C#CDDEEJWF11%':::::r   z
<Button-1>c                 T    d d j                             dd| j                   d S )N<ButtonRelease-1>r   r_   )r   rb   ra   )r\   r   r@   r   s    r   b1_mouseup_handlerz3BaseSideBar.bind_events.<locals>.b1_mouseup_handler   s5    
 JFI$$%8A$IIIIIr   r   c                 >    d S | j          | j                    d S r   )ra   )r\   r   r   s    r   b1_drag_handlerz0BaseSideBar.bind_events.<locals>.b1_drag_handler   s-    ~WF11%':::::r   z<B1-Motion>c                     	 } | j                                        d d S | dk     r*j                            d| z   d            |            n`| j                                         k    rCj                            d| z   j                                         z
  d            |            j                             d          d S )Nr   pixelsr|   2   )r<   after_cancelr   yview_scrollwinfo_heightafter)ra   auto_scrolling_after_idr   r   r@   text_auto_scrolls    r   r   z1BaseSideBar.bind_events.<locals>.text_auto_scroll   s    H Ay --.EFFF*.'Q	&&rAvx88855a8888T%224444	&&q1ut/?/L/L/N/N'N'/1 1 155a888 &&r+;<< $##r   c                 T    $| j         j                            d          d S d S )Nr   )ra   r<   r   )r\   r   r   r@   r   s    r   b1_leave_handlerz1BaseSideBar.bind_events.<locals>.b1_leave_handler   s<     '.$**1.>?? ('' /.r   z
<B1-Leave>c                 H    j                                        d d S d S r   )r<   r   )r\   r   r@   s    r   b1_enter_handlerz1BaseSideBar.bind_events.<locals>.b1_enter_handler  s7     '2 --.EFFF*.''' 32r   z
<B1-Enter>)rV   r   r<   rn   r]   rh   )r@   rq   buttonrc   r   r   r   r   r   r   r   r   r   r   s   `        @@@@@r   r=   zBaseSideBar.bind_events   s   &*&A	"# 	k4+FGGG 	nd.LMMM	7 	7 	7 	7 	7
 # 	I 	IF3&333::::4F444! K K
 ! zJJJJJ  ;:::::::! I I
 ! 3Gf3G3G3GI I I I II 
  #'	M 	M 	M 	M 	M 	M	; 	; 	; 	; 	; 	; 	; 	; 	l,@AAA	J 	J 	J 	J 	J 	J 	J 	13EFFF	; 	; 	; 	; 	; 	; 	m_===	= 	= 	= 	= 	= 	= 	= 	= 	=&	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	l,<===	/ 	/ 	/ 	/ 	/ 	/ 	l,<=====r   N)__name__
__module____qualname__rA   r;   r>   r?   r   rJ   rM   rR   rV   r]   rd   rh   r=    r   r   r4   r4   D   s        /  " " "" " "" " "" " "! ! !
" " "
" " "3 3 3  
    |> |> |> |> |>r   r4   c                   &    e Zd Z	 d ZddZddZdS )EndLineDelegatorc                 <    t          j        |            || _        d S r   )r   rA   changed_callback)r@   r   s     r   rA   zEndLineDelegator.__init__  s!    4    0r   Nc                     | j                             |||           |                     t          | j                              d S r   )delegater}   r   r   )r@   r	   charstagss       r   r}   zEndLineDelegator.insert  sA    UE40000??@@@@@r   c                     | j                             ||           |                     t          | j                              d S r   )r   deleter   r   )r@   index1index2s      r   r   zEndLineDelegator.delete  s?    VV,,,0??@@@@@r   r   r   r   r   rA   r}   r   r   r   r   r   r   
  sZ        1 1 1A A A AA A A A A Ar   r   c                   D     e Zd Z	  fdZd Zd Zd Zd Zd Zd Z	 xZ
S )LineNumbersc                     t                                          |           t          | j                  }| j        j                            || j        j                   d S )Nr   )superrA   r   update_sidebar_textr7   perinsertfilterafterundo)r@   r7   end_line_delegator	__class__s      r   rA   zLineNumbers.__init__  sj    !!!-d.FGG 	**+=151B 	+ 	D 	D 	D 	D 	Dr   c           	         t          | j                  \  }}t          j        | j        dt          j        d|dd          | _        | j                            t          j                   d| _	        t          | j        d                   | _        t          | j                  5  | j                            ddd	           d d d            n# 1 swxY w Y   | j                            d
d
           | j                            d	t          j                   t!          | j                  }|                     |           | j        S )Nr|   rr   r   )widthwrapr   r   borderwidthhighlightthicknessr-   r   r}   1
linenumberF)	takefocusexportselection)justify)r+   r   r%   Textr9   NONEsidebar_textconfigr1   prev_endtype_sidebar_width_typer2   r}   
tag_configRIGHTr   r   )r@   _padxr   r{   s       r   r;   zLineNumbers.init_widgets'  sz   (33tGDKqrw)*01aI I I 	  r{ 333#'(9'(B#C#C $T%677 	B 	B$$XsLAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B  5% HHH$$\28$DDD ++  %%%  s   &CCCc                 T    | j                             ddt          j                   d S )Nr|   r   rowcolumnsticky)r   r   r%   NSEWrE   s    r   r   zLineNumbers.grid:  s(    1Qrw?????r   c                 P    t          j        | j        dd          }|| j        d<   d S )NmainEditorWindowfont)r   GetFontr   r   )r@   r   s     r   r>   zLineNumbers.update_font=  s+    	6>BB$(&!!!r   c                     	 t          j        t          j                    d          }|d         }|d         }| j                            |||||           d S )Nr   
foreground
background)fgbgselectforegroundselectbackgroundinactiveselectbackground)r   GetHighlightCurrentThemer   r   )r@   colorsr   r   s       r   r?   zLineNumbers.update_colorsA  sk    K&x'<'>'>MML)
L)
  j'*%/ 	! 	
 	
 	
 	
 	
r   c                    	 || j         k    rd S t          t          |                    t          t          | j                             z
  }|rIt          t	          | j        d                             }||z   }|                     |          | j        d<   t          | j                  5  || j         k    rrd                    t          j
        dgt          t          t          | j         dz   |dz                                           }| j                            d|d           n!| j                            |dz    dd           d d d            n# 1 swxY w Y   || _         d S )Nr   
 r|   zend -1cr   z.0 -1c)r   lenstrr
   r   r   r   r2   join	itertoolschainr$   ranger}   r   )r@   r{   width_difference	cur_width	new_widthnew_texts         r   r   zLineNumbers.update_sidebar_textL  s   	9
 $-Fs3xx==3s4=/A/A+B+BB 	ME$"3G"<==>>I!$44I)-)A)A))L)LDg&$T%677 	F 	FT]""99Y_DU4=1#4cAg>>??& &   !((X|LLLL!((CE)9)9)99EEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F s   ,BEEEc                 F    | j                             |d                    dS )Nr   rY   )r   yview_movetorO   s      r   rR   zLineNumbers.yscroll_eventg  s"    &&tAw///wr   )r   r   r   rA   r;   r   r>   r?   r   rR   __classcell__r   s   @r   r   r     s        2D D D D D! ! !&@ @ @) ) )	
 	
 	
  6      r   r   c                   $    e Zd Zd ZddZddZdS ) WrappedLineHeightChangeDelegatorc                 >    	 t          j        |            || _        d S r   )r   rA   callback)r@   r   s     r   rA   z)WrappedLineHeightChangeDelegator.__init__m  s%    	
 	4    r   Nc                     d|v}|rt          | |          }| j                            |||           |rt          | |          }||k    rd S |                                  d S )Nr   )r   r   r}   r   )r@   r	   r   r   is_single_linebefore_displaylinesafter_displayliness          r   r}   z'WrappedLineHeightChangeDelegator.insertv  sy    U* 	@"24"?"?UE4000 	!1$!>!>!%888r   c                    ||dz   }t          | |          t          | |          k    }|rt          | |          }| j                            ||           |rt          | |          }||k    rd S |                                  d S )Nz+1c)r   r   r   r   r   )r@   r   r   r   r   r   s         r   r   z'WrappedLineHeightChangeDelegator.delete  s    >e^F#D&11Zf5M5MM 	A"24"@"@VV,,, 	!1$!?!?!%888r   r   r   r   r   r   r   r   l  sK        ! ! !        r   r   c                   Z     e Zd Z	  fdZd Z fdZd Zd Zd Zd Z	d Z
d	 Zd
 Z xZS )ShellSidebarc                    d | _         i | _        t                                          |           t	          | j                  }| j        j        j        }|j	        | j
        ur7|j	        | j        j        j        ur|j	        }|j	        | j        j        j        u| j        j                            ||           d| _        d S )Nr   T)canvasline_promptsr   rA   r   change_callbackr7   r   topr   r   bottomr   r:   )r@   r7   change_delegatordr   s       r   rA   zShellSidebar.__init__  s    !!! -T-ABB 	 L :TY&&*DL$4$;;;J *DL$4$;;;**+;1*EEEr   c                     t          j        | j        dddd          | _        |                                  |                                  | j        S )N   r   F)r   r   r   r   )r%   Canvasr9   r  update_sidebarr   rE   s    r   r;   zShellSidebar.init_widgets  sQ    i2,-!*/1 1 1 			{r   c                     t                                                       | j                            t	          j                    rdnd| j                   d S )Nz
<Button-2>z
<Button-3>)r   r=   r<   rn   r   isAquaTkcontext_menu_event)r@   r   s    r   r=   zShellSidebar.bind_events  sX    "O--?LL<#	
 	
 	
 	
 	
r   c                 l    t          j         j        d          }t           j                            dd                    } fd}|                    d |d          |rdnd	
           |                    d |d          |rdnd	
           |                    |j        |j	                   dS )Nr   )tearoffry   rz   c                       fdS )Nc                  8    j                                        S r   )r   rb   	eventnamer@   s   r   <lambda>z@ShellSidebar.context_menu_event.<locals>.mkcmd.<locals>.<lambda>  s    4933I>> r   r   r  s   `r   mkcmdz.ShellSidebar.context_menu_event.<locals>.mkcmd  s    >>>>>>r   Copyz<<copy>>normaldisabled)labelcommandr.   zCopy with promptsz<<copy-with-prompts>>rY   )
r%   Menur<   boolr   tag_nextrangeadd_commandtk_popupx_rooty_root)r@   r\   rmenuhas_selectionr  s   `    r   r  zShellSidebar.context_menu_event  s    (!444TY44UEBBCC	? 	? 	? 	? 	?"'%
"3"3,9 Iz 	 	K 	K 	K 	 3"'%(?"@"@,9 Iz 	 	K 	K 	K 	u|U\222wr   c                 X    | j                             ddt          j        dd           d S )Nr|   r   rr   )r   r   r   r   r   )r  r   r%   r   rE   s    r   r   zShellSidebar.grid  s+    QqqqIIIIIr   c                 @    | j         r|                                  d S d S r   )r:   r  rE   s    r   r  zShellSidebar.change_callback  s.    = 	"!!!!!	" 	"r   c           	         | j         }|j        }| j        }i x}| _        |                    t
          j                   |                    d          }|                    dd          d         dk    r|                    | d          }|	                    |          x}|d         } || d          }d|v rdnd	|v rd
nd }	|	rJ|
                    d|t
          j        |	| j        | j        d                    t          ||          }
|	||
<   |                    | d          }|	                    |          x}d S d S )Nz@0,0.r|   0z+1line linestartz linestart -1cconsolez>>>stdinz...rr   r   )anchorr   r   fillz+1line)r   	tag_namesr  r  r   r%   ALLr	   split	dlineinfocreate_textNWr   r   r   )r@   r   text_tagnamesr  r  r	   lineinfora   prev_newline_tagnamespromptr   s              r   r  zShellSidebar.update_sidebar  s{   y+--t(bf

6"";;sAq!S((JJ%999::E>>%000x=A$1MU2J2J2J$K$K!"&;;; $999 
  .""1aF(,	A # H H H#D%00'-V$JJ%///00E  >>%000x=====r   c                 0    	 |                                   dS rX   )r  rO   s      r   rR   zShellSidebar.yscroll_event  s     	 	wr   c                    	 t          j        | j        dd          }t          | j        |          t	          fddD                       }| j                            |dz  dz              || _        |                                  d S )	Nr   r   )r   c              3   B   K   | ]}                     |          V  d S r   )measure).0chartk_fonts     r   	<genexpr>z+ShellSidebar.update_font.<locals>.<genexpr>  s/      FF4..FFFFFFr   )rv   r)  rs   rt   )r   )	r   r   r   r   maxr  r/   r   r  )r@   r   
char_widthr?  s      @r   r>   zShellSidebar.update_font  s    I	6>BBtyt,,,FFFF:FFFFF
JNQ$6777	r   c                 0   	 t          j        t          j                    d          }t          j        t          j                    d          }|d         }|d         }||f| _        | j                            |           |                                  d S )Nr   r+  r   r   )r   )r   r   r   r   r  r/   r  )r@   linenumbers_colorsprompt_colorsr   r   s        r   r?   zShellSidebar.update_colors  s    K%283H3J3JLYY -h.C.E.EyQQ"<0
'5
!:.444r   )r   r   r   rA   r;   r=   r  r   r  r  rR   r>   r?   r   r   s   @r   r   r     s        :    $  
 
 
 
 
  J J J" " "1 1 14          r   r   c           
         ddl m} t          j        |           }t          j        |          }|                    t          j        t          j        d           |                    dd           |	                    dd           t          j        |dd          }t          j        |d	d
t          j        |          }|                    ddt          j                    ||          }t          j        |          |_        t%          |          }|                                 |                    dd                    d t-          dd          D                                  d S )Nr   )Dummy_editwinT)sider.  expandr|   )weightr   r   P      )r   heightr   r   r   rz   r   c              3       K   | ]	}d |z  V  
dS )r   Nr   )r=  is     r   r@  z._linenumbers_drag_scrolling.<locals>.<genexpr>  s&       > >1Q > > > > > >r   e   )idlelib.idle_test.test_sidebarrG  r%   ToplevelFramer   LEFTBOTHrowconfigurecolumnconfigurer   r   r   r   r   r   	ScrollbarrT   r   rJ   r}   r   r   )r9   rG  toplevelr8   r   r   r7   linenumberss           r   _linenumbers_drag_scrollingr[    sF   <<<<<<{6""H(##JOOrwtO<<<Aa(((q+++Hfn==D7:RtLLLDII!AbgI...mD!!G<
++GLg&&KKKtyy > >a > > >>>?????r   __main__)r   zidlelib.idle_test.test_sidebarrr   F)	verbosityexit)run)
contextlibrl   r   tkinterr%   tkinter.fontr   idlelib.configr   idlelib.delegatorr   idlelibr   r   r   r   r+   contextmanagerr2   r4   r   r   r   r   r[  r   unittestr   idlelib.idle_test.htestr_  r   r   r   <module>ri     sM                         # # # # # # ' ' ' ' ' '      : : :& & &
       4 * * *C> C> C> C> C> C> C> C>LA A A A Ay A A A$M M M M M+ M M M`& & & & &y & & &Rm m m m m; m m m`@ @ @, zD	)QUCCCC++++++C#$$$$$ r   