B
    nôb\&  ã            
   @   s4  d Z ddlmZ ddlZddlmZ ddlmZ ddl	m
Z
mZmZmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ dd	lmZmZ yed
dƒZW n0 ek
rÎ Z zddlZejZW ddZ[X Y nX e  ¡ Z!G dd„ de
ƒ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r0e&ƒ  dS )zBreakpoint widgeté    N)ÚAPI)Úto_qvariant)ÚQAbstractTableModelÚQModelIndexÚ
QTextCodecÚQtÚSignal)ÚQItemDelegateÚQMenuÚ
QTableViewÚQVBoxLayoutÚQWidget)Úget_translation)ÚCONF)Úadd_actionsÚcreate_actionÚbreakpointsZspyder_breakpointsc               @   sv   e Zd ZdZdd„ Zdd„ Zeƒ fdd„Zeƒ fdd	„Ze	j
fd
d„Ze	jfdd„Zdd„ Ze	jfdd„Zdd„ ZdS )ÚBreakpointTableModelz5
    Table model for breakpoints dictionary
    
    c             C   s2   t  | |¡ |d kri }d | _d | _|  |¡ d S )N)r   Ú__init__Ú_datar   Úset_data)ÚselfÚparentÚdata© r   úHlib/python3.7/site-packages/spyder_breakpoints/widgets/breakpointsgui.pyr   0   s    zBreakpointTableModel.__init__c             C   sl   || _ t| ¡ ƒ}g | _xF|D ]>}|| }|rx,|| D ] }| j ||d |d df¡ q8W qW |  ¡  dS )zSet model datar   é   Ú N)r   ÚlistÚkeysr   ÚappendÚreset)r   r   r   ÚkeyZbp_listÚitemr   r   r   r   8   s    
$zBreakpointTableModel.set_datac             C   s
   t | jƒS )zArray row number)Úlenr   )r   Úqindexr   r   r   ÚrowCountD   s    zBreakpointTableModel.rowCountc             C   s   dS )zArray column counté   r   )r   r%   r   r   r   ÚcolumnCountH   s    z BreakpointTableModel.columnCountc             C   sV   |dkr.| j jdd„ d | j jdd„ d n|dkr8n|dkrBn|dkrJ|  ¡  d	S )
zOverriding sort methodr   c             S   s   | d S )Nr   r   )Ú
breakpointr   r   r   Ú<lambda>P   s    z+BreakpointTableModel.sort.<locals>.<lambda>)r"   c             S   s   t  | d ¡S )Nr   )ÚospÚbasename)r)   r   r   r   r*   R   s    r   é   é   N)r   Úsortr!   )r   ÚcolumnÚorderr   r   r   r/   L   s    zBreakpointTableModel.sortc             C   sP   |t jkrtƒ S t|ƒ}|t jkrFtdƒtdƒtdƒdf}t|| ƒS tƒ S dS )zOverriding method headerDataZFileZLineZ	Conditionr   N)r   ÚDisplayRoler   ÚintZ
HorizontalÚ_)r   ZsectionZorientationÚroleZi_columnZheadersr   r   r   Ú
headerData[   s    

zBreakpointTableModel.headerDatac             C   s   | j | ¡  | ¡  S )zReturn current value)r   Úrowr0   )r   Úindexr   r   r   Ú	get_valuef   s    zBreakpointTableModel.get_valuec             C   s    |  ¡ stƒ S |tjkrP| ¡ dkr<t |  |¡¡}t|ƒS |  |¡}t|ƒS nL|tjkrntt	tj
tjB ƒƒS |tjkrœ| ¡ dkr–|  |¡}t|ƒS tƒ S dS )zReturn data at table indexr   N)ZisValidr   r   r2   r0   r+   r,   r9   ZTextAlignmentRoler3   Z	AlignLeftZAlignVCenterZToolTipRole)r   r8   r5   Úvaluer   r   r   r   j   s    





zBreakpointTableModel.datac             C   s   |   ¡  |  ¡  d S )N)ZbeginResetModelZendResetModel)r   r   r   r   r!   ~   s    zBreakpointTableModel.resetN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r&   r(   r   ÚDescendingOrderr/   r2   r6   r9   r   r!   r   r   r   r   r   +   s   r   c               @   s   e Zd Zddd„ZdS )ÚBreakpointDelegateNc             C   s   t  | |¡ d S )N)r	   r   )r   r   r   r   r   r   „   s    zBreakpointDelegate.__init__)N)r;   r<   r=   r   r   r   r   r   r@   ƒ   s   r@   c               @   sV   e Zd ZeeeeƒZeeeƒZeƒ Zeƒ Z	dd„ Z
dd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚBreakpointTableViewc             C   sF   t  | |¡ t| |ƒ| _|  | j¡ t| ƒ| _|  | j¡ |  ¡  d S )N)	r   r   r   ÚmodelZsetModelr@   ZdelegateZsetItemDelegateÚsetup_table)r   r   r   r   r   r   r   Ž   s    
zBreakpointTableView.__init__c             C   s<   |   ¡  d¡ |  ¡  |  d¡ |  d¡ |  dtj¡ dS )zSetup tableTr   FN)ZhorizontalHeaderZsetStretchLastSectionÚadjust_columnsZcolumnAtZsetSortingEnabledÚsortByColumnr   r?   )r   r   r   r   rC   —   s
    

zBreakpointTableView.setup_tablec             C   s    xt dƒD ]}|  |¡ q
W dS )z&Resize three first columns to contentsr.   N)ÚrangeZresizeColumnToContents)r   Úcolr   r   r   rD       s    z"BreakpointTableView.adjust_columnsc             C   sl   |   | ¡ ¡}| jjrR| jj| ¡  d }| jj| ¡  d }| j |t|ƒd¡ | ¡ dkrh| j	 ¡  dS )zReimplement Qt methodr   r   r   r-   N)
ÚindexAtÚposrB   r   r7   Ú	edit_gotoÚemitr3   r0   Ú"set_or_edit_conditional_breakpoint)r   ÚeventÚindex_clickedÚfilenameZline_number_strr   r   r   ÚmouseDoubleClickEvent¥   s    z)BreakpointTableView.mouseDoubleClickEventc                s*  ˆ   | ¡ ¡}g }tˆ ƒˆ _tˆ tdƒ‡ fdd„d}| |¡ ˆ jjrˆ jj| 	¡  d }t
ˆ jj| 	¡  d ƒ}tdks¤||f‡ fdd„	}||f‡ fd	d„	}n$||f‡ fd
d„	}||f‡ fdd„	}tˆ tdƒ|d}	| d|	¡ tˆ tdƒ|d}
| |
¡ tˆ j|ƒ ˆ j | ¡ ¡ | ¡  d S )NzClear breakpoints in all filesc                  s
   ˆ j  ¡ S )N)Úclear_all_breakpointsrK   r   )r   r   r   r*   µ   s    z6BreakpointTableView.contextMenuEvent.<locals>.<lambda>)Z	triggeredr   r   Zpysidec                s   ˆ j  ||¡S )N)Úclear_breakpointrK   )Ú_checkedrO   Úlineno)r   r   r   r*   ¼   s    c                s   ˆ j  ||d¡ˆ j ¡ fS )Nr   )rJ   rK   rL   )rS   rO   rT   )r   r   r   r*   ¾   s    c                s   ˆ j  | |¡S )N)rR   rK   )rO   rT   )r   r   r   r*   Â   s    c                s   ˆ j  | |d¡ˆ j ¡ fS )Nr   )rJ   rK   rL   )rO   rT   )r   r   r   r*   Ä   s    zClear this breakpointzEdit this breakpoint)rH   rI   r
   Z
popup_menur   r4   r    rB   r   r7   r3   r   Úinsertr   ZpopupZ	globalPosZaccept)r   rM   rN   ZactionsZclear_all_breakpoints_actionrO   rT   Z
clear_slotZ	edit_slotZclear_breakpoint_actionZedit_breakpoint_actionr   )r   r   ÚcontextMenuEvent¯   s4    



z$BreakpointTableView.contextMenuEventN)r;   r<   r=   r   Ústrr3   rJ   rR   rQ   rL   r   rC   rD   rP   rV   r   r   r   r   rA   ˆ   s   
		
rA   c               @   sV   e Zd ZdZdZeƒ Zeƒ Zeee	ƒZ
eee	eƒZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚBreakpointWidgetz
    Breakpoint widget
    z1.0.0c                sž   t  ˆ |¡ ˆ  d¡ tˆ ˆ  ¡ ƒˆ _tƒ }| ˆ j¡ ˆ  |¡ ˆ jj	 
‡ fdd„¡ ˆ jj 
‡ fdd„¡ ˆ jj 
‡ fdd„¡ ˆ jj 
‡ fdd„¡ d S )NZBreakpointsc                  s
   ˆ j  ¡ S )N)rQ   rK   r   )r   r   r   r*   ê   s    z+BreakpointWidget.__init__.<locals>.<lambda>c                s   ˆ j  | |¡S )N)rR   rK   )Ús1Úlino)r   r   r   r*   ì   s    c                s   ˆ j  | ||¡S )N)rJ   rK   )rY   rZ   Ús2)r   r   r   r*   î   s    c                  s
   ˆ j  ¡ S )N)rL   rK   r   )r   r   r   r*   ð   s    )r   r   ZsetWindowTitlerA   Ú_load_all_breakpointsÚ
dictwidgetr   Z	addWidgetZ	setLayoutrQ   ZconnectrR   rJ   rL   )r   r   Zlayoutr   )r   r   r   à   s    

zBreakpointWidget.__init__c             C   s<   t  ddi ¡}x(t| ¡ ƒD ]}t |¡s| |¡ qW |S )NÚrunr   )r   Úgetr   r   r+   ÚisfileÚpop)r   Úbp_dictrO   r   r   r   r\   ò   s
    
z&BreakpointWidget._load_all_breakpointsc             C   s   d S )Nr   )r   r   r   r   Úget_dataù   s    zBreakpointWidget.get_datac             C   s4   |   ¡ }| jj |¡ | j ¡  | j dtj¡ d S )Nr   )r\   r]   rB   r   rD   rE   r   r?   )r   rb   r   r   r   r   ü   s    
zBreakpointWidget.set_dataN)r;   r<   r=   r>   ZVERSIONr   rQ   rL   rW   r3   rR   rJ   r   r\   rc   r   r   r   r   r   rX   Ö   s   
rX   c              C   s4   ddl m}  | ƒ }tdƒ}| ¡  t | ¡ ¡ dS )zRun breakpoint widget testr   )ÚqapplicationN)Úspyder.utils.qthelpersrd   rX   ZshowÚsysÚexitZexec_)rd   ZappZwidgetr   r   r   Útest  s
    rh   Ú__main__)(r>   Úos.pathÚpathr+   rf   Zqtpyr   Zqtpy.compatr   Zqtpy.QtCorer   r   r   r   r   Zqtpy.QtWidgetsr	   r
   r   r   r   Zspyder.config.baser   Zspyder.config.mainr   re   r   r   r4   ÚKeyErrorÚerrorÚgettextZcodecForLocaleZlocale_codecr   r@   rA   rX   rh   r;   r   r   r   r   Ú<module>   s,   XN0	
