
\[\?                 @   s   d  d l  Z  d  d l Z d  d l Td  d l m Z d  d l m Z d  d l m Z Gd d   d e j	  Z
 Gd d	   d	  Z Gd
 d   d e  Z Gd d   d  Z d S)    N)*)ListedToplevel)ScrolledList)macosxSupportc               @   sL   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d S)Idbc             C   s   | |  _  t j j |   d  S)N)guibdbBdb__init__)selfr    r   &/usr/lib/python3.4/idlelib/Debugger.pyr
      s    	zIdb.__init__c             C   sC   |  j  |  r |  j   d  S|  j |  } |  j j | |  d  S)N)in_rpc_codeset_step_Idb__frame2messager   interaction)r   framemessager   r   r   	user_line   s
    
zIdb.user_linec             C   sF   |  j  |  r |  j   d  S|  j |  } |  j j | | |  d  S)N)r   r   r   r   r   )r   r   infor   r   r   r   user_exception   s
    
zIdb.user_exceptionc             C   sL   | j  j j d  r d S| j } | j  j j d  r; d S|  j |  Sd  S)Nzrpc.pyTzDebugger.pyF)f_codeco_filenamecountf_backr   )r   r   Z
prev_framer   r   r   r      s    	zIdb.in_rpc_codec             C   sf   | j  } | j } | j } t j j |  } d | | f } | j d k rb d | | j f } n  | S)Nz%s:%s?z%s: %s())r   r   f_linenoospathbasenameco_name)r   r   codefilenamelinenor   r   r   r   r   Z__frame2message'   s    			zIdb.__frame2messageN)__name__
__module____qualname__r
   r   r   r   r   r   r   r   r   r   	   s
   
r   c               @   sH  e  Z d  Z d Z Z Z Z d d d  Z d d   Z d d d  Z	 d d	   Z
 d d
 d  Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d Z d d   Z d d   Z d d   Z d Z d Z d  d!   Z d" d#   Z d$ d% d&  Z d' d(   Z d) d*   Z d+ d,   Z d- d.   Z d S)/DebuggerNc             C   sM   | d  k r t  |   } n  | |  _ | |  _ d  |  _ |  j   d |  _ d  S)Nr   )r   pyshellidbr   make_guiinteracting)r   r(   r)   r   r   r   r
   6   s    			
zDebugger.__init__c             G   s.   z d |  _  |  j j |   SWd  d |  _  Xd  S)N   r   )r+   r)   run)r   argsr   r   r   r-   ?   s    	zDebugger.runc             C   sZ   |  j  r |  j j   d  S|  j r< |  j j   d  |  _ n  |  j j   |  j j   d  S)N)r+   topZbellstackviewercloser(   Zclose_debuggerdestroy)r   eventr   r   r   r1   F   s    		 zDebugger.closec             C   s  |  j  } | j |  _ | j |  _ } t |  |  _ } |  j j d  |  j j d  | j d |  j  |  j j	 d |  j  t
 |  |  _ } |  j j d d  g  |  _ } t | d d d	 |  j |  _ } | j |  t | d d
 d	 |  j |  _ } | j |  t | d d d	 |  j |  _ } | j |  t | d d d	 |  j |  _ } | j |  t | d d d	 |  j |  _ } | j |  x. | D]& } | j d d  | j d d  qWt
 |  |  _ } |  j j d d  |  j s$t |  |  j _ |  j j d  n  t | d d d	 |  j  d |  j |  _! |  j! j" d d d d  |  j# st |  |  j _# n  t | d d d	 |  j$ d |  j# |  _% |  j% j" d d d d  |  j& st |  |  j _& |  j& j d  n  t | d d d	 |  j' d |  j& |  _( |  j( j" d d d d  |  j) sNt |  |  j _) n  t | d d d	 |  j* d |  j) |  _+ |  j+ j" d d d d  t, | d d |  _- |  j- j d d  t, | d d |  _. |  j. j d d d d  |  j. j/ d  |  _0 t
 | d d |  _1 |  j1 j d d d d   t
 |  |  _2 |  j2 j d d d d   t
 | d d |  _3 |  j3 j d d d d   |  j j4   r|  j    n  |  j& j4   r|  j'   n  |  j) j4   r|  j*   n  d  S)!NzDebug ControlZDebugZWM_DELETE_WINDOWz<Escape>anchorwtextZGocommandZStepZOverZOutZQuitstatedisabledsideleftr,   ZStackZvariablerowr   columnZSourceLocalsGlobalsfillx
backgroundheightexpandboth)5r(   flistrootr   r/   Zwm_titleZwm_iconnameZwm_protocolr1   ZbindFramebframepackbuttonsZButtoncontZbcontappendstepZbstepnextZbnextretZbretquit	configurecframevstackZ
BooleanVar	__class__setZCheckbutton
show_stackZbstackgridvsourceshow_sourceZbsourcevlocalsshow_localsZblocalsvglobalsshow_globalsZbglobalsLabelstatuserrorZcgeterrorbgfstackflocalsfglobalsget)r   r(   rG   r/   rI   ZblbrS   r   r   r   r*   S   s    	"""""								zDebugger.make_guic             C   s  | |  _  |  j j d |  | r | \ } } } y | j } Wn" t k
 rb d t |  } Yn X| d  k	 r y d | t |  f } Wq Yq Xn  d } n d } d  } |  j } |  j j d | d |  |  j }	 |	 r|  j	 j
 |  j  |  \ }
 } |	 j |
 |  n  |  j d  |  j j   r7|  j   n  x! |  j D] } | j d d	  qAW|  j j   |  j j   x! |  j D] } | j d d
  qW|  j j d d  |  j j d d d |  j  d  |  _  d  S)Nr6   z%sz%s: %sZyellow rB   r,   r8   Znormalr9   )r   r`   rR   r$   AttributeErrorstrrb   ra   r0   r)   	get_stack
load_stackshow_variablesrY   rf   sync_source_linerK   r/   wakeuprG   Zmainloop)r   r   r   r   typevaluetbZm1Zbgsvstackirg   r   r   r   r      sD    				zDebugger.interactionc             C   sx   |  j  } | s d  S|  j |  \ } } | d  d  | d d   d k rt t j j |  rt |  j j | |  n  d  S)Nr,   z<>)r   _Debugger__frame2fileliner   r   existsrF   Zgotofileline)r   r   r"   r#   r   r   r   rn      s    	6zDebugger.sync_source_linec             C   s%   | j  } | j } | j } | | f S)N)r   r   r   )r   r   r!   r"   r#   r   r   r   Z__frame2fileline   s    			zDebugger.__frame2filelinec             C   s   |  j  j   |  j j   d  S)N)r)   Zset_continuerG   rQ   )r   r   r   r   rL      s    zDebugger.contc             C   s   |  j  j   |  j j   d  S)N)r)   r   rG   rQ   )r   r   r   r   rN      s    zDebugger.stepc             C   s$   |  j  j |  j  |  j j   d  S)N)r)   Zset_nextr   rG   rQ   )r   r   r   r   rO      s    zDebugger.nextc             C   s$   |  j  j |  j  |  j j   d  S)N)r)   Z
set_returnr   rG   rQ   )r   r   r   r   rP      s    zDebugger.retc             C   s   |  j  j   |  j j   d  S)N)r)   Zset_quitrG   rQ   )r   r   r   r   rQ      s    zDebugger.quitc             C   s   |  j  ru |  j j   ru t |  j |  j |   |  _  } |  j r |  j j |  j d   \ } } | j	 | |  q nB |  j  } | r |  j j   r d  |  _  | j
   n  d |  j d <d  S)Nr,   rC   )r0   rT   rf   StackViewerrc   rF   r   r)   rk   rl   r1   )r   rs   rt   ru   r   r   r   rW      s    			zDebugger.show_stackc             C   s    |  j  j   r |  j   n  d  S)N)rY   rf   rn   )r   r   r   r   rZ      s    zDebugger.show_sourcec             C   s   | d |  _  |  j   d  S)Nr   )r   rm   )r   Z	stackitemr   r   r   
show_frame   s    zDebugger.show_framec             C   sp   |  j  } |  j j   r9 | sb t |  j d  |  _  qb n) | rb d  |  _  | j   d |  j d <n  |  j   d  S)Nr>   r,   rC   )localsviewerr[   rf   NamespaceViewerrd   r1   rm   )r   lvr   r   r   r\     s    		
zDebugger.show_localsc             C   sp   |  j  } |  j j   r9 | sb t |  j d  |  _  qb n) | rb d  |  _  | j   d |  j d <n  |  j   d  S)Nr?   r,   rC   )globalsviewerr]   rf   r|   re   r1   rm   )r   gvr   r   r   r^     s    		
zDebugger.show_globalsr   c             C   s   |  j  } |  j } |  j } | s. d  } } n3 | j } | j } | ra | ra | | k ra d  } n  | r | j | | |  j j j  n  | r | j | | |  j j j  n  d  S)N)	r{   r~   r   f_locals	f_globals	load_dictr(   ZinterpZrpcclt)r   forcer}   r   r   ZldictZgdictr   r   r   rm     s    						zDebugger.show_variablesc             C   s   |  j  j | |  d  S)N)r)   Z	set_break)r   r"   r#   r   r   r   set_breakpoint_here.  s    zDebugger.set_breakpoint_herec             C   s   |  j  j | |  d  S)N)r)   Zclear_break)r   r"   r#   r   r   r   clear_breakpoint_here1  s    zDebugger.clear_breakpoint_herec             C   s   |  j  j |  d  S)N)r)   Zclear_all_file_breaks)r   r"   r   r   r   clear_file_breaks4  s    zDebugger.clear_file_breaksc             C   sj   xc |  j  j j D]R } | j j } y( x! | j D] } |  j | |  q/ WWq t k
 ra w Yq Xq Wd S)z=Load PyShellEditorWindow breakpoints into subprocess debuggerN)r(   rF   Zinversedictior"   Zbreakpointsr   ri   )r   Zeditwinr"   r#   r   r   r   load_breakpoints7  s    zDebugger.load_breakpoints) r$   r%   r&   rT   rY   r[   r]   r
   r-   r1   r*   r   rn   rw   rL   rN   rO   rP   rQ   r0   rW   rZ   rz   r{   r~   r\   r^   rm   r   r   r   r   r   r   r   r   r'   2   s4   	K,r'   c               @   s   e  Z d  Z d d   Z d d d  Z d d   Z d d	   Z d
 d   Z d d   Z d d   Z	 d d   Z
 d d   Z d S)ry   c             C   sT   t  j   r t j |  |  n t j |  | d d | |  _ | |  _ g  |  _ d  S)NwidthP   )r   ZisAquaTkr   r
   rF   r   rt   )r   masterrF   r   r   r   r   r
   C  s    		zStackViewer.__init__Nc             C   s%  | |  _  |  j   x t t |   D] } | | \ } } y | j d } Wn d } Yn X| j } | j } | j }	 d d  l }
 |
 j	 | |  } | j
   } |	 d k r d | | | f } n d | |	 | | f } | | k r d | } n  |  j |  q& W| d  k	 r!|  j |  n  d  S)	Nr$   r   r   rh   z%s, line %d: %sz%s.%s(), line %d: %sz> )r   rh   N)rt   clearrangelenr   r   r   r    	linecachegetlinestriprM   Zselect)r   rt   indexru   r   r#   modnamer!   r"   Zfuncnamer   Z
sourcelineitemr   r   r   rl   O  s.    	
				zStackViewer.load_stackc             C   s   |  j  r t j |  |  Sd S)zoverride base methodN)rt   r   popup_event)r   r3   r   r   r   r   i  s    	zStackViewer.popup_eventc             C   s?   |  j  } | j d d d |  j  | j d d d |  j  d S)zoverride base methodlabelzGo to source liner7   zShow stack frameN)menuZadd_commandgoto_source_lineshow_stack_frame)r   r   r   r   r   	fill_menun  s
    	
zStackViewer.fill_menuc             C   sC   d | k o  t  |  j  k  n r? |  j j |  j |  n  d S)zoverride base methodr   N)r   rt   r   rz   )r   r   r   r   r   	on_selectv  s    %zStackViewer.on_selectc             C   s   |  j  |  d S)zoverride base methodN)rZ   )r   r   r   r   r   	on_double{  s    zStackViewer.on_doublec             C   s#   |  j  j d  } |  j |  d  S)Nactive)listboxr   rZ   )r   r   r   r   r   r     s    zStackViewer.goto_source_linec             C   sU   |  j  j d  } d | k o2 t |  j  k  n rQ |  j j |  j |  n  d  S)Nr   r   )r   r   r   rt   r   rz   )r   r   r   r   r   r     s    %zStackViewer.show_stack_framec             C   s   d | k o  t  |  j  k  n s) d  S|  j | \ } } | j } | j } t j j |  r |  j j |  } | r | j	 |  q n  d  S)Nr   )
r   rt   r   r   r   r   isfilerF   openZgotoline)r   r   r   r#   r!   r"   Zeditr   r   r   rZ     s    %		zStackViewer.show_source)r$   r%   r&   r
   rl   r   r   r   r   r   r   rZ   r   r   r   r   ry   A  s   ry   c               @   sC   e  Z d  Z d d d  Z d
 Z d d d d  Z d d	   Z d S)r|   Nc          	   C   s  d } d } | r% d t  |  } n  | |  _ | |  _ d d  l } | j   |  _ d |  j _ d |  j _ t |  |  _	 } |  j	 j
 d d d d  t | d	 | d
 d d d |  _ |  j j
 d d  t | d d |  _ } | j
 d d d d  t | d t d t d |   d d d | | f |  _ }	 |	 j
 d d d d d d  |	 j | d <| j |	 d <t |	  |  _ }
 |	 j d d d |
 d d |  _ |  j |  d  S)Nr   (      <   rD   r,   r@   rE   r6   borderwidth   ZreliefZgrooverA   namevbarr:   rightyrC   i,  scrollregionr;   r7   ZyscrollcommandZwindowr4   nw)r   r   titlereprlibReprrepr	maxstringmaxotherrH   r   rJ   r_   r   Z	Scrollbarr   ZCanvasminmaxcanvasZyviewrV   subframeZcreate_windowZsfidr   )r   r   r   dictr   rC   r   r   r   r   r   r   r   r   r
     s2    		!	!zNamespaceViewer.__init__r,   r   c             C   s  | |  j  k r | r d  S|  j } |  j } x' t | j j    D] } | j   qB Wd  |  _  | s t | d d } | j d d d d  n | j	   } t
 |  }	 d }
 x |	 D] } | | } |  j j |  } | r | d d  } n  t | d | } | j d |
 d d d d  t | d	 d d
 d } | j d |  | j d |
 d d d d  |
 d }
 q W| |  _  | j   | j   } | j   } |  j } d d | | f |  j d <| d k rd | d <| j d d  n | | d <| j d d  d  S)Nr6   Noner<   r   r=   r,   Zstickyr   r   r   r   i,  rC   rD   rv   )r   r   r   listZchildrenvaluesr2   r_   rX   keyssortedr   ZEntryinsertZupdate_idletasksZwinfo_reqwidthZwinfo_reqheightr   rJ   )r   r   r   Z
rpc_clientr   r   clZ	keys_listnamesr<   r   rq   Zsvaluer   rC   r   r   r   r   r     sF    			
	
	

zNamespaceViewer.load_dictc             C   s   |  j  j   d  S)N)r   r2   )r   r   r   r   r1     s    zNamespaceViewer.closerv   )r$   r%   r&   r
   r   r   r1   r   r   r   r   r|     s   6r|   )r   r   ZtkinterZidlelib.WindowListr   Zidlelib.ScrolledListr   Zidlelibr   r	   r   r'   ry   r|   r   r   r   r   <module>   s   
) S