o
    gf                     @   s   d dl Z d dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
mZ dddZG dd de
ZG dd	 d	e
ZG d
d deZdd Zedkr`d dlmZ edddd d dlmZ ee dS dS )    N)ObjectTreeItemmake_objecttreeitem)TreeNodeTreeItemScrolledCanvasc                 C   sT   |d u r	t | }t|dddatjjddd t||attj	d ta
t
  d S )NZwhiter   )ZbgZhighlightthickness   Zboth)expandZfill)tkToplevelr   ZscframepackStackTreeItemitemr   ZcanvasZnoder   )rootflisttbtop r   I/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/idlelib/stackviewer.pyStackBrowser
   s   

r   c                   @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )r   Nc                 C   s    || _ | || _|  | _d S N)r   	get_stackstackget_exceptiontext)selfr   r   r   r   r   __init__   s   zStackTreeItem.__init__c                 C   sR   |d u rt j}g }|r|jd u r|j}|d ur'||j|jf |j}|d us|S r   )syslast_tracebacktb_frametb_nextappend	tb_lineno)r   r   r   r   r   r   r      s   zStackTreeItem.get_stackc                 C   s@   t j}t j}t|dr|j}t|}|d ur|d t| }|S )N__name__z: )r   	last_type
last_valuehasattrr#   str)r   typevaluesr   r   r   r   '   s   
zStackTreeItem.get_exceptionc                 C      | j S r   )r   r   r   r   r   GetText1      zStackTreeItem.GetTextc                 C   s*   g }| j D ]}t|| j}|| q|S r   )r   FrameTreeItemr   r!   )r   sublistinfor   r   r   r   
GetSubList4   s
   
zStackTreeItem.GetSubList)NN)r#   
__module____qualname__r   r   r   r-   r2   r   r   r   r   r      s    

r   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r/   c                 C   s   || _ || _d S r   )r1   r   )r   r1   r   r   r   r   r   >   s   
zFrameTreeItem.__init__c           	      C   sz   | j \}}z|jd }W n   d}Y |j}|j}|j}t||}| }|dv r3d|||f }|S d||||f }|S )Nr#   ?)r6    Nz%s, line %d: %sz%s.%s(...), line %d: %s)r1   	f_globalsf_codeco_filenameco_name	linecachegetlinestrip)	r   r   linenomodnamecodefilenamefuncnameZ
sourceliner   r   r   r   r-   B   s"   
zFrameTreeItem.GetTextc                 C   sR   | j \}}g }|j|jurtd|j| j}|| td|j| j}|| |S )Nz<locals>z	<globals>)r1   r8   f_localsVariablesTreeItemr   r!   )r   r   r?   r0   r   r   r   r   r2   T   s   


zFrameTreeItem.GetSubListc                 C   s>   | j r| j\}}|jj}tj|r| j || d S d S d S r   )r   r1   r9   r:   ospathisfileZgotofileline)r   r   r?   rB   r   r   r   OnDoubleClick^   s   
zFrameTreeItem.OnDoubleClickN)r#   r3   r4   r   r-   r2   rI   r   r   r   r   r/   <   s
    
r/   c                   @   r5   )
rE   c                 C   r+   r   )Z	labeltextr,   r   r   r   r-   h   r.   zVariablesTreeItem.GetTextc                 C   s   d S r   r   r,   r   r   r   GetLabelTextk   s   zVariablesTreeItem.GetLabelTextc                 C   s   t | jdkS )Nr   )lenobjectr,   r   r   r   IsExpandablen   s   zVariablesTreeItem.IsExpandablec              	   C   sd   g }| j  D ](}z| j | }W n	 ty   Y qw || j fdd}t|d ||}|| q|S )Nc                 S   s   | ||< d S r   r   )r)   keyrL   r   r   r   setfunctionx   s   z1VariablesTreeItem.GetSubList.<locals>.setfunctionz =)rL   keysKeyErrorr   r!   )r   r0   rN   r)   rO   r   r   r   r   r2   q   s   zVariablesTreeItem.GetSubListN)r#   r3   r4   r-   rJ   rM   r2   r   r   r   r   rE   f   s
    rE   c           	      C   s   ddl m} t| }|d tt|  ddd  \}}|d|d |d f  ||}zt	 W n t
yE   t \}}}Y nw |t_|t_|t_t||||d	 t`t`t`d S )
Nr   )PyShellFileListzTest StackViewer+r   z+%d+%d2      )r   r   r   )Zidlelib.pyshellrR   r	   r
   titlemapintZgeometrysplitZintentional_name_error	NameErrorr   exc_infor$   r%   r   r   )	parentrR   r   xyr   exc_type	exc_valueexc_tbr   r   r   _stack_viewer   s$   

 rb   __main__)mainz"idlelib.idle_test.test_stackviewer   F)	verbosityexit)run)NNN)r<   rF   r   tkinterr	   Zidlelib.debugobjr   r   Zidlelib.treer   r   r   r   r   r/   rE   rb   r#   Zunittestrd   Zidlelib.idle_test.htestrh   r   r   r   r   <module>   s"    
'*