
    JeS3                     |   d 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
 ddlmZmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ dZdZ e eeez               \  ZZZZZ  ed       ed       ed      dfZ! G d d      Z" G d de      Z# G d de      Z$ G d dee      Z% G d de      Z&d Z'e(dk(  r e'        yy)z
Breakpoint widget.
    N)PYQT5)to_qvariant)QAbstractTableModelQModelIndexQtSignal)QItemDelegate
QTableViewQVBoxLayout_)PluginMainWidgetMenusPluginMainWidget)SpyderWidgetMixin)disambiguate_fname      FileLine	Condition c                       e Zd ZdZdZdZy)BreakpointTableViewActionsclear_all_breakpoints_actionclear_breakpoint_actionedit_breakpoint_actionN)__name__
__module____qualname__ClearAllBreakpointsClearBreakpointEditBreakpoint     P/usr/lib/python3/dist-packages/spyder/plugins/breakpoints/widgets/main_widget.pyr   r   +   s    8/O-Nr$   r   c                        e Zd ZdZ fdZd Z e       fdZ e       fdZe	j                  fdZe	j                  fdZd Ze	j                  fd	Zd
 Z xZS )BreakpointTableModelz1
    Table model for breakpoints dictionary.
    c                 ~    t         |   |       |i n|| _        d | _        | j	                  | j                         y N)super__init___databreakpointsset_dataselfparentdata	__class__s      r%   r+   zBreakpointTableModel.__init__9   s5     <RT
djj!r$   c           	         || _         g | _        g }|D ]  }||   s	||vs|j                  |         |D ]<  }||   D ]2  }| j                  j                  t        ||      |d   |d   d|f       4 > | j	                          y)z
        Set model data.

        Parameters
        ----------
        data: dict
            Breakpoint data to use.
        r   r   r   N)r,   r-   appendr   reset)r0   r2   fileskeyitems        r%   r.   zBreakpointTableModel.set_dataA   s     
 	"CCyS-S!	"
  	ECS	 E  '');E3)G)-a$q'2s)D EE	E
 	

r$   c                 ,    t        | j                        S )z#
        Array row number.
        )lenr-   r0   qindexs     r%   rowCountzBreakpointTableModel.rowCountZ   s     4##$$r$   c                     t         S )z%
        Array column count.
        )COLUMN_COUNTr<   s     r%   columnCountz BreakpointTableModel.columnCount`   s
     r$   c                     |t         k(  r;| j                  j                  d        | j                  j                  d        n|t        k(  rn|t        k(  rn
|t
        k(  r	 | j                          y)z)
        Overriding sort method.
        c                 &    t        | t                 S r)   )intCOL_LINEbreakps    r%   <lambda>z+BreakpointTableModel.sort.<locals>.<lambda>k   s    S9I5J r$   )r8   c                     | t            S r)   )COL_FILErF   s    r%   rH   z+BreakpointTableModel.sort.<locals>.<lambda>l   s    VH5E r$   N)rJ   r-   sortrE   COL_CONDITION	COL_BLANKr6   )r0   columnorders      r%   rK   zBreakpointTableModel.sortf   sf     X!!&J!K!!&E!Fx}$y 

r$   c                     |t         j                  k7  r
t               S t        |      }|t         j                  k(  rt        t
        |         S t               S )z/
        Overriding method headerData.
        )r   DisplayRoler   rD   
HorizontalCOLUMN_HEADERS)r0   sectionorientationrolei_columns        r%   
headerDatazBreakpointTableModel.headerDatav   sE     2>>!= w<"--'~h788= r$   c                 ^    | j                   |j                            |j                            S )z'
        Return current value.
        )r-   rowrN   )r0   indexs     r%   	get_valuezBreakpointTableModel.get_value   s&     		,U\\^<<r$   c                 |   |j                         s
t               S |t        j                  k(  r| j	                  |      }t        |      S |t        j
                  k(  r}|j                         t        k(  r3t        t        t        j                  t        j                  z              S t        t        t        j                  t        j                  z              S |t        j                  k(  rP|j                         t        k(  r/| j                  |j                            t            }t        |      S t               S y)z-
        Return data at table index.
        N)isValidr   r   rQ   r\   TextAlignmentRolerN   rE   rD   
AlignRightAlignVCenter	AlignLeftToolTipRolerJ   r-   rZ   COL_FULL)r0   r[   rV   values       r%   r2   zBreakpointTableModel.data   s     }}= 2>>!NN5)Eu%%R)))||~)"3r}}r'F#GHH"3r||boo'E#FGGR^^#||~)((5h?"5))"}$ $r$   c                 D    | j                          | j                          y r)   )beginResetModelendResetModelr0   s    r%   r6   zBreakpointTableModel.reset   s    r$   )r   r   r   __doc__r+   r.   r   r>   rA   r   DescendingOrderrK   rQ   rX   r\   r2   r6   __classcell__r3   s   @r%   r'   r'   4   s`    "2 *m % "-  "$!3!3   57NN !=  "~~ %0r$   r'   c                         e Zd Zd fd	Z xZS )BreakpointDelegatec                 $    t         |   |       y r)   )r*   r+   )r0   r1   r3   s     r%   r+   zBreakpointDelegate.__init__   s     r$   r)   )r   r   r   r+   rl   rm   s   @r%   ro   ro      s    ! !r$   ro   c                        e Zd ZdZ e       Z eee      Z eeee      Z	 e       Z
 fdZd Zd Zd Zd Zd Zd Zd	 Z xZS )
BreakpointTableViewz,
    Table to display code breakpoints.
    c                 L   t         rt        | 	  ||       n-t        j                  | |       t	        j                  | |       t        | |      | _        t        |       | _        | j                  d       | j                  | j                         | j                  | j                         | j                  | j                         | j                  | j                         | j!                          | j#                  d       | j%                         j'                  d       y )N)class_parentFr   T)r   r*   r+   r
   r   r'   modelro   delegatesetSortingEnabledsetSelectionBehavior
SelectRowssetSelectionModeSingleSelectionsetModelsetItemDelegateadjust_columnscolumnAthorizontalHeadersetStretchLastSectionr/   s      r%   r+   zBreakpointTableView.__init__   s    GV&9f-&&t&A *$5
*40 	u%!!$//2d223djj!T]]+a55d;r$   c                    | j                  t        j                  t        d      | j                        }| j                  t        j
                  t        d      | j                        }| j                  t        j                  t        d      | j                        }| j                  t        j                        | _        |||fD ]  }| j                  || j                         ! y )NzClear breakpoints in all files)	triggeredzClear selected breakpointzEdit selected breakpoint)menu)create_actionr   r    r   #sig_clear_all_breakpoints_requestedr!   clear_breakpointsr"   edit_breakpointscreate_menur   Context
popup_menuadd_item_to_menu)r0   clear_all_actionclear_actionedit_actionr9   s        r%   setupzBreakpointTableView.setup   s    --&::./>> . 

 ))&66)*,, * 

 ((&55()++ ) 
 **+@+H+HI%|[A 	>D!!$T__!=	>r$   c                    | j                  |j                               j                         }t        | j                  j
                        xr |du}| j                  t        j                        }| j                  t        j                        }|j                  |       |j                  |       | j                  j                  |j                                |j                          y)%
        Override Qt method.
        N)indexAtposrZ   boolru   r-   
get_actionr   r!   r"   
setEnabledr   popup	globalPosaccept)r0   eventc_rowenabledr   r   s         r%   contextMenuEventz$BreakpointTableView.contextMenuEvent   s     UYY[)--/tzz--.D53D&668oo&557(w'eoo/0r$   c                    | j                  |j                               }| j                  j                  rv|j	                         }| j                  j                  |   t
           }| j                  j                  |   t           }| j                  j                  |t        |      d       |j                         t        k(  r| j                  j                          yy)r   r   N)r   r   ru   r-   rZ   rd   rE   sig_edit_goto_requestedemitrD   rN   rL   $sig_conditional_breakpoint_requested)r0   r   index_clickedr   filenameline_number_strs         r%   mouseDoubleClickEventz)BreakpointTableView.mouseDoubleClickEvent   s     UYY[1::!!!%%'Ezz--e4X>H"jj44U;HEO((--#o.4 !]255::< 3r$   c                     | j                   j                  |       | j                          | j                  t        t
        j                         y)z
        Set the model breakpoint data dictionary.

        Parameters
        ----------
        data: dict
            Breakpoint data to use.
        N)ru   r.   r~   sortByColumnrJ   r   rk   r0   r2   s     r%   r.   zBreakpointTableView.set_data  s8     	

D!(B$6$67r$   c                 T    t        t        dz
        D ]  }| j                  |        y)z9
        Resize three first columns to contents.
        r   N)ranger@   resizeColumnToContents)r0   cols     r%   r~   z"BreakpointTableView.adjust_columns  s+     )* 	-C'',	-r$   c                 d   | j                         j                         }|r| j                  j                  ry|d   j	                         }| j                  j                  |   t
           }t        | j                  j                  |   t                 }| j                  j                  ||       yyy)z0
        Clear selected row breakpoint.
        r   N)
selectionModelselectedRowsru   r-   rZ   rd   rD   rE   sig_clear_breakpoint_requestedr   r0   rowsr   r   linenos        r%   r   z%BreakpointTableView.clear_breakpoints  s     ""$113DJJ**GKKMEzz--e4X>H//6x@AF//44XvF +4r$   c                    | j                         j                         }|r| j                  j                  r|d   j	                         }| j                  j                  |   t
           }t        | j                  j                  |   t                 }| j                  j                  ||d       | j                  j                          yyy)z9
        Edit selected row breakpoint condition.
        r   r   N)r   r   ru   r-   rZ   rd   rD   rE   r   r   r   r   s        r%   r   z$BreakpointTableView.edit_breakpoints'  s     ""$113DJJ**GKKMEzz--e4X>H//6x@AF((--hC55::< +4r$   )r   r   r   rj   r   r   strrD   r   r   r   r+   r   r   r   r.   r~   r   r   rl   rm   s   @r%   rr   rr      s_    
 +1('%+C%5"$S#s3+18(<.>. =$8-
G=r$   rr   c                        e Zd ZdZ e       Z	  eee      Z	  eeee      Z		  e       Z
	 d fd	Zd Zd Zd Zd Zd Z xZS )	BreakpointWidgetz
    Breakpoints widget.
    c                    t         |   |||       t        | i       | _        t	               }|j                  | j                         | j                  |       | j                  }|j                  j                  | j                         |j                  j                  | j                         |j                  j                  | j                         |j                  j                  | j                         y )N)r1   )r*   r+   rr   breakpoints_tabler   	addWidget	setLayoutr   connectr   r   r   )r0   namepluginr1   layoutbptr3   s         r%   r+   zBreakpointWidget.__init__a  s    vf5 "5T2!> //0v $$//7744	6**22//	1##++D,H,HI008855	7r$   c                     t        d      S )NBreakpointsr   ri   s    r%   	get_titlezBreakpointWidget.get_titlex  s    r$   c                     | j                   S r)   )r   ri   s    r%   get_focus_widgetz!BreakpointWidget.get_focus_widget{  s    %%%r$   c                 8    | j                   j                          y r)   )r   r   ri   s    r%   r   zBreakpointWidget.setup~  s    $$&r$   c                    | j                   j                         j                         }|r|d   nd }t        | j                   j                  j
                        xr |d u}| j                  t        j                        }| j                  t        j                        }|j                  |       |j                  |       y )Nr   )r   r   r   r   ru   r-   r   r   r!   r"   r   )r0   r   r   r   r   r   s         r%   update_actionszBreakpointWidget.update_actions  s    %%446CCEQT..44@@A )D( 	&668oo&557(w'r$   c                 :    | j                   j                  |       y)z
        Set breakpoint data on widget.

        Parameters
        ----------
        data: dict
            Breakpoint data to use.
        N)r   r.   r   s     r%   r.   zBreakpointWidget.set_data  s     	''-r$   )NNN)r   r   r   rj   r   r   r   rD   r   r   r   r+   r   r   r   r   r.   rl   rm   s   @r%   r   r   5  sn     +1('
 &,C%5"	 %S#s3 ,28(7. &'(	.r$   r   c                      ddl m}   |        }t               }|j                          t	        j
                  |j                                y)zRun breakpoint widget test.r   )qapplicationN)spyder.utils.qthelpersr   r   showsysexitexec_)r   appwidgets      r%   testr     s/    3
.CF
KKMHHSYY[r$   __main__))rj   r   qtpyr   qtpy.compatr   qtpy.QtCorer   r   r   r   qtpy.QtWidgetsr	   r
   r   spyder.api.translationsr   spyder.api.widgets.main_widgetr   r   spyder.api.widgets.mixinsr   spyder.utils.sourcecoder   r@   EXTRA_COLUMNSlistr   rJ   rE   rL   rM   rd   rS   r   r'   ro   rr   r   r   r   r#   r$   r%   <module>r      s      # D D A A &> 7 6
 9=	,
&':) 6(M9hF)QvY+=. .o. od! !F=*&7 F=Rd.' d.T zF r$   