o
     JAff                     @   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   )bgZhighlightthickness   Zboth)expandfill)tkToplevelr   ZscframepackStackTreeItemitemr   ZcanvasZnoder	   )rootflisttbtop r   */usr/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/   r4   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 )
r1   c                 C   s   || _ || _d S r   )r3   r   )r   r3   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%   ?)r8    Nz%s, line %d: %sz%s.%s(...), line %d: %s)r3   	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>)r3   r:   f_localsVariablesTreeItemr   r#   )r   r   rA   r2   r   r   r   r   r4   T   s   


zFrameTreeItem.GetSubListc                 C   s>   | j r| j\}}|jj}tj|r| j || d S d S d S r   )r   r3   r;   r<   ospathisfileZgotofileline)r   r   rA   rD   r   r   r   OnDoubleClick^   s   
zFrameTreeItem.OnDoubleClickN)r%   r5   r6   r   r/   r4   rK   r   r   r   r   r1   <   s
    
r1   c                   @   r7   )
rG   c                 C   r-   r   )Z	labeltextr.   r   r   r   r/   h   r0   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+   keyrN   r   r   r   setfunctionx   s   z1VariablesTreeItem.GetSubList.<locals>.setfunctionz =)rN   keysKeyErrorr   r#   )r   r2   rP   r+   rQ   r   r   r   r   r4   q   s   zVariablesTreeItem.GetSubListN)r%   r5   r6   r/   rL   rO   r4   r   r   r   r   rG   f   s
    rG   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.pyshellrT   r   r   titlemapintZgeometrysplitZintentional_name_error	NameErrorr   exc_infor&   r'   r    r   )	parentrT   r   xyr   exc_type	exc_valueexc_tbr   r   r   _stack_viewer   s$   

 rd   __main__)mainz"idlelib.idle_test.test_stackviewer   F)	verbosityexit)run)NNN)r>   rH   r   tkinterr   Zidlelib.debugobjr   r   Zidlelib.treer   r   r   r   r   r1   rG   rd   r%   Zunittestrf   Zidlelib.idle_test.htestrj   r   r   r   r   <module>   s"    
'*