
    Je                         d Z ddlmZ ddlmZmZ ddlm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d Z G d de      Zy)z%
Contains the text debugger manager.
    N)QInputDialog	QLineEdit)CONF)_)to_text_string)Manager)BlockUserDatac                     t        j                  ddi       } t        | j                               D ]L  }t	        j
                  |      }||k7  s| j                  |      }|| v r| |   j                  |       H|| |<   N | S Nrunbreakpoints)r   getlistkeysospnormcasepopextend)bp_dictfilenamenew_filenamebps       F/usr/lib/python3/dist-packages/spyder/plugins/editor/utils/debugger.py_load_all_breakpointsr      s~    hhumR0G( +||H-8#X&Bw&%,,R0(*%+ N    c                     t               j                  t        j                  |       g       }|r$t	        |d   t
              r|D cg c]  }|d f }}|S c c}w Nr   )r   r   r   r   
isinstanceint)r   r   linenos      r   load_breakpointsr!   #   sS    ')--cll8.DbIKz+a.#64?@&~@@ As   Ac                 v    t               }||t        j                  |       <   t        j                  dd|       y r   )r   r   r   r   set)r   r   r   s      r   save_breakpointsr$   +   s-    #%G&1GCLL"#HHUM7+r   c                  2    t        j                  ddi        y r   )r   r#    r   r   clear_all_breakpointsr'   1   s    HHUM2&r   c                     t        |       }|r1|d d  D ]  }|d   |k(  s|j                  |        t        | |       y y r   )r!   remover$   )r   r    r   
breakpoints       r   clear_breakpointr+   5   sM    "8,K%a. 	/J!}&"":.	/ 	;/	 r   c                   X     e Zd ZdZ fdZd Z	 	 ddZd Zd Zd Z	d Z
d	 Zd
 Z xZS )DebuggerManagerz=
    Manages adding/removing breakpoint from the editor.
    c                    t         t        |   |       d | _        i | _        g | _        | j                  j                  j                  | j                         | j                  j                  j                  | j                         y N)superr-   __init__r   _breakpoint_blocksr   editorsig_breakpoints_changedconnectbreakpoints_changedsig_filename_changedset_filename)selfr3   	__class__s     r   r1   zDebuggerManager.__init__B   se    ot-f5"$++33D4L4LM((001B1BCr   c                     |y | j                   |k7  r=| j                   }|| _         | j                  rt        |g        | j                          y y y r/   )r   r   r$   )r9   r   old_filenames      r   r8   zDebuggerManager.set_filenameJ   sP    ==H$==L$DM r2%%'   %r   c                    | j                   j                         sy|)| j                   j                         j                         }n,| j                   j	                         j                  |dz
        }|j                         }|st        | j                         }d|_        n|s|j                   |_        d|_	        |||_	        |rp|j                  }t        j                  | j                   t        d      t        d      t        j                  |      \  }}|syd|_        |rt        |      nd|_	        |j                  rft!        |j#                               j%                         }t'        |      dk(  s|j)                  d      rd|_        n|| j*                  t-        |      <   |j/                  |       | j                   j0                  j3                          | j                   j4                  j3                          y)	zAdd/remove breakpoint.N   T
Breakpointz
Condition:r   )#"'F)r3   is_python_like
textCursorblockdocumentfindBlockByNumberuserDatar	   r*   breakpoint_conditionr   getTextr   r   Normalstrr   textstriplen
startswithr2   idsetUserDatasig_flags_changedemitr4   )r9   line_number	conditionedit_conditionrE   datavalidrM   s           r   toogle_breakpointz!DebuggerManager.toogle_breakpointT   s    {{))+KK**,224EKK((*<<[]KE~~ -D"DO"&//1DO(,D% (1D%11I+33DKK45lO45lO4=4D4D4=	 ?Iu
 "DO:CID%??!%**,/557D4yA~!A"'5:''5	2$%%**,++002r   c                 (   g }i }| j                   D ]w  }| j                   |   }|j                         s#|j                         }|s6|j                  sC|||<   |j	                         dz   }|j                  ||j                  f       y || _         |S )zGet breakpointsr>   )r2   isValidrH   r*   blockNumberappendrI   )r9   r   pruned_breakpoint_blocksblock_idrE   rX   rU   s          r   get_breakpointszDebuggerManager.get_breakpoints{   s    #% // 	BH++H5E}}~~'DOO9>,X6"'"3"3"5"9K&&$d&?&?@B	B #;r   c                     g | _         | j                  j                         D ]	  }d|_         i | _        | j                  j
                  j                          | j                  j                  j                          y)zClear breakpointsFN)r   r3   blockuserdata_listr*   r2   r4   rT   rS   )r9   rX   s     r   clear_breakpointsz!DebuggerManager.clear_breakpoints   sc    KK224 	$D#DO	$ #%++002%%**,r   c                     | j                          |D ]  \  }}| j                  ||        | j                         | _        y)zSet breakpointsN)rd   rZ   ra   r   )r9   r   rU   rV   s       r   set_breakpointszDebuggerManager.set_breakpoints   sC     &1 	;"K"";	:	;//1r   c                     | j                         }| j                  |k7  r<|| _        | j                          | j                  j                  j                          yy)zBreakpoint list has changedN)ra   r   r$   r3   sig_repaint_breakpointsrT   )r9   r   s     r   r6   z#DebuggerManager.breakpoints_changed   sM    **,{**D!!#KK//446 +r   c                 >   t        | j                        }t        | j                        }t        |      }t	        j
                  t	        j                  |            }|rt        |      }ng }t        ||       | j                  j                  j                          y r/   )reprr   r   r   r   normpathabspathevalr$   r3   sig_breakpoints_savedrT   )r9   r   r   s      r   r$   z DebuggerManager.save_breakpoints   ss    4++,!$--0$[1<<H 56{+KK;/))..0r   c                 L    | j                  t        | j                               y r/   )rf   r!   r   )r9   s    r   r!   z DebuggerManager.load_breakpoints   s    -dmm<=r   )NNF)__name__
__module____qualname____doc__r1   r8   rZ   ra   rd   rf   r6   r$   r!   __classcell__)r:   s   @r   r-   r-   >   s@    D( =A).%3N 
-27
1>r   r-   )rs   os.pathpathr   qtpy.QtWidgetsr   r   spyder.config.managerr   spyder.config.baser   spyder.py3compatr   spyder.api.managerr   "spyder.plugins.editor.utils.editorr	   r   r!   r$   r'   r+   r-   r&   r   r   <module>r}      sH     2 &   + & <,'0u>g u>r   