
    G@dS3                        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'             dS dS )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dS )BreakpointTableViewActionsclear_all_breakpoints_actionclear_breakpoint_actionedit_breakpoint_actionN)__name__
__module____qualname__ClearAllBreakpointsClearBreakpointEditBreakpoint     Nlib/python3.11/site-packages/spyder/plugins/breakpoints/widgets/main_widget.pyr   r   +   s        8/O-NNNr$   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                   d S N)super__init___databreakpointsset_dataselfparentdata	__class__s      r%   r+   zBreakpointTableModel.__init__9   sL       <RRT
dj!!!!!r$   c           	      ,   || _         g | _        g }|D ]#}||         r||vr|                    |           $|D ]F}||         D ];}| j                            t          ||          |d         |d         d|f           <G|                                  dS )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Cy "S--S!!!  	E 	ECS	 E E '');E3)G)G)-a$q'2s)D E E 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    r9| j                            d            | j                            d            n$|t          k    rn|t          k    rn|t
          k    r	 |                                  dS )z)
        Overriding sort method.
        c                 6    t          | t                             S r)   )intCOL_LINEbreakps    r%   <lambda>z+BreakpointTableModel.sort.<locals>.<lambda>k   s    S9I5J5J 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   s     X!!&J&J!KKK!!&E&E!FFFFx}$$y  

r$   c                     |t           j        k    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   sP     2>!!== w<<"-''~h7888== r$   c                 p    | j         |                                         |                                         S )z'
        Return current value.
        )r-   rowrN   )r0   indexs     r%   	get_valuezBreakpointTableModel.get_value   s'     		,U\\^^<<r$   c                    |                                 st                      S |t          j        k    r$|                     |          }t          |          S |t          j        k    r|                                t          k    r3t          t          t          j	        t          j
        z                      S t          t          t          j        t          j
        z                      S |t          j        k    rd|                                t          k    r9| j        |                                         t                    }t          |          S t                      S dS )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#GHHH"3r|bo'E#F#FGGGR^##||~~))(5h?"5)))"}}$ $#r$   c                 V    |                                   |                                  d S 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 *kmm % % % % "-     "$!3      57N ! ! ! != = =  "~ % % % %0      r$   r'   c                         e Zd Zd fd	Z xZS )BreakpointDelegateNc                 J    t                                          |           d S 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                    t           r$t                                          ||           n+t          j        | |           t	          j        | |           t          | |          | _        t          |           | _        | 	                    d           | 
                    | j                   |                     | j                   |                     | j                   |                     | j                   |                                  |                     d           |                                                     d           d S )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.    	BGGV&9999f---&t&AAAA *$55
*400 	u%%%!!$/222d2333dj!!!T]+++a55d;;;;;r$   c                    |                      t          j        t          d          | j                  }|                      t          j        t          d          | j                  }|                      t          j        t          d          | j                  }| 	                    t          j                  | _        |||fD ]}|                     || j                   d S )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)**, * 
 

 ((&5())+ ) 
 
 **+@+HII%|[A 	> 	>D!!$T_!====	> 	>r$   c                    |                      |                                                                          }t          | j        j                  o|du}|                     t          j                  }|                     t          j	                  }|
                    |           |
                    |           | j                            |                                           |                                 dS )%
        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[[))--//tz-..D53D&68 8oo&57 7(((w'''eoo//000r$   c                    |                      |                                          }| j        j        rw|                                }| j        j        |         t
                   }| j        j        |         t                   }| j                            |t          |          d           |
                                t          k    r| j                                         dS dS )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1:! 	4!%%''Ez-e4X>H"j4U;HEO(--#o..4 4 4 !!]225::<<<<< 32r$   c                     | j                             |           |                                  |                     t          t
          j                   dS )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  sK     	
D!!!(B$677777r$   c                 d    t          t          dz
            D ]}|                     |           dS )z9
        Resize three first columns to contents.
        r   N)ranger@   resizeColumnToContents)r0   cols     r%   r~   z"BreakpointTableView.adjust_columns  sA     )** 	- 	-C'',,,,	- 	-r$   c                 n   |                                                                  }|r| j        j        r|d                                         }| j        j        |         t
                   }t          | j        j        |         t                             }| j        	                    ||           dS dS dS )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3 	GDJ* 	GGKKMMEz-e4X>H/6x@AAF/44XvFFFFF	G 	G 	G 	Gr$   c                    |                                                                  }|r| j        j        r|d                                         }| j        j        |         t
                   }t          | j        j        |         t                             }| j        	                    ||d           | j
        	                                 dS dS dS )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3 	=DJ* 	=GKKMMEz-e4X>H/6x@AAF(--hCCC5::<<<<<	= 	= 	= 	=r$   )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&(('%+VC%5%5"$fS#s33+1688(< < < < <.> > >.   = = =$8 8 8- - -
G 
G 
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.
    Nc                    t                                          |||           t          | i           | _        t	                      }|                    | j                   |                     |           | j        }|j                            | j                   |j	                            | j	                   |j
                            | j
                   |j                            | j                   d S )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55 "5T2!>!> /000v $/774	6 	6 	6*22/	1 	1 	1#++D,HIII0885	7 	7 	7 	7 	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                                          d S r)   )r   r   ri   s    r%   r   zBreakpointWidget.setup~  s    $$&&&&&r$   c                    | j                                                                         }|r|d         nd }t          | j         j        j                  o|d u}|                     t          j                  }|                     t          j	                  }|
                    |           |
                    |           d S )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6CCEE)QT.4@AA )D( 	&68 8oo&57 7(((w'''''r$   c                 :    | j                             |           dS )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  s          +1&(('
 &,VC%5%5"	 %fS#s33 ,2688(7 7 7 7 7 7.     & & &' ' '( ( (	. 	. 	. 	. 	. 	. 	.r$   r   c                      ddl m}   |             }t                      }|                                 t	          j        |                                           dS )zRun breakpoint widget test.r   )qapplicationN)spyder.utils.qthelpersr   r   showsysexitexec_)r   appwidgets      r%   testr     sU    333333
,..CF
KKMMMHSYY[[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      se    


       # # # # # # D D D D D D D D D D D D A A A A A A A A A A & % % % % %> > > > > > > > 7 7 7 7 7 7 6 6 6 6 6 6
 9=	E,
&'':) :) 6(M9h!F))QQvYY+=. . . . . . . .o o o o o. o o od! ! ! ! ! ! ! !F= F= F= F= F=*&7 F= F= F=Rd. d. d. d. d.' d. d. d.T   zDFFFFF r$   