
    G@dH,                     *   d 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 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 dd	lmZ dd
lm Z  ddl!m"Z" dZ#dZ$ G d de          Z% G d de          Z& G d de          Z' G d de"          Z(dS )zResults browser.    N)QPointQSizeQtSignalSlot)QAbstractTextDocumentLayoutQColorQFontMetricsQTextDocument)QApplicationQStyleQStyledItemDelegateQStyleOptionViewItemQTreeWidgetItem)_)get_font)ELLIPSISMAX_RESULT_LENGTH)icon_manager)QStylePalette)OneColumnTreeonoffc                   <     e Zd Z fdZd Zd Zd Zd Zd Z xZ	S )LineMatchItemc                     || _         || _        |d         | _        |d         | _        || _        || _        t                                          ||                                 gt          j
                   d S )Nformatted_texttext)linenocolnomatchplain_match
text_colorfontsuper__init____repr__r   Type)selfparentr   r    r!   r$   r#   	__class__s          Rlib/python3.11/site-packages/spyder/plugins/findinfiles/widgets/results_browser.pyr&   zLineMatchItem.__init__'   sh    
+,
 =$	$--//!2O4HIIIII    c                     t          | j                                                  }d| j         d| j         d| j         d| j                                         d| j                                         d| d}|S )Nz'<!-- LineMatchItem --><p style="color:'z';">&nbsp;&nbsp;<b>z</b> (z): <span style='font-family:z;font-size:zpt;'>z</span></p>)	strr!   rstripr#   r   r    r$   family	pointSize)r)   r!   _strs      r,   r'   zLineMatchItem.__repr__0   s    DJ&&((H!%H H +H H &*ZH H )-	(8(8(:(:	H H
 ,,..H H
 6;H H H 	 r-   c                 *    |                                  S Nr'   r)   s    r,   __unicode__zLineMatchItem.__unicode__<       }}r-   c                 *    |                                  S r5   r6   r7   s    r,   __str__zLineMatchItem.__str__?   r9   r-   c                 "    | j         |j         k     S r5   r   r)   xs     r,   __lt__zLineMatchItem.__lt__B   s    {QX%%r-   c                 "    | j         |j         k    S r5   r=   r>   s     r,   __ge__zLineMatchItem.__ge__E   s    {ah&&r-   )
__name__
__module____qualname__r&   r'   r8   r;   r@   rB   __classcell__r+   s   @r,   r   r   %   s        J J J J J
 
 
    & & &' ' ' ' ' ' 'r-   r   c                   *     e Zd Z fdZd Zd Z xZS )FileMatchItemc           	      ,   || _         t          j        |          | _        t          j        |          }|                    |          d         }|                    t          j                  r
|dd          }|| _        d| dt          j        |           d| d| j         d	}t                      
                    ||gt          j                   |                     dt          j        |d                     |                     d|           d S )	N   z&<!-- FileMatchItem --><b style="color:z">z)</b>&nbsp;&nbsp;&nbsp;<span style="color:z"><em>z</em></span>r   g      ?)sortingospbasenamefilenamedirnamesplit
startswithseprel_dirnamer%   r&   r   r(   setIconimaget_icon_by_extension_or_type
setToolTip)
r)   r*   pathrO   rL   r#   rP   rT   titler+   s
            r,   r&   zFileMatchItem.__init__K   s!   X.. +h''mmD))!,!!#'** 	*%abb/K&) -0\(-C-C  #-  #	   	 	%/*>???Q9(CHHIII8$$$$$r-   c                 R    | j         d         t          k    r| j        |j        k     S dS NstatusFrL   ONrO   r>   s     r,   r@   zFileMatchItem.__lt__e   s(    <!R''=1:--5r-   c                 R    | j         d         t          k    r| j        |j        k    S dS r\   r^   r>   s     r,   rB   zFileMatchItem.__ge__k   s(    <!R''=AJ..5r-   )rC   rD   rE   r&   r@   rB   rF   rG   s   @r,   rI   rI   I   sV        % % % % %4        r-   rI   c                   *     e Zd Z fdZd Zd Z xZS )ItemDelegatec                     t                                          |           d | _        t          t          j                  | _        d| _        d S )Nr   )r%   r&   _marginr	   r   COLOR_BACKGROUND_3_background_colorwidth)r)   r*   r+   s     r,   r&   zItemDelegate.__init__v   s@       !'(H!I!I


r-   c                 d   t          |          }|                     ||           |j        t          j                    n|j                                        }|j        t          j        z  r |                    |j	        | j
                   t                      }|j        }|                    |           |                    d           d|_        |                    t          j        ||           t#          j                    }|                    t          j        |d           }	|                                 |                    |	                                t1          dd          z              |                                                    ||           |                                 d S )Nr       )r   initStyleOptionwidgetr   stylestater   State_MouseOverfillRectrectrf   r   r   setHtmlsetDocumentMargindrawControlCE_ItemViewItemr   PaintContextsubElementRectSE_ItemViewItemTextsave	translatetopLeftr   documentLayoutdrawrestore)
r)   painteroptionindexoptionsrm   docr   ctxtextRects
             r,   paintzItemDelegate.paint|   s|   &v..We,,,)0)?#%%%n**,, 	$ =611 	BV[$*@AAA oo|Da    &0'7CCC)688''(B(/7 7(**,,va||;<<<!!'3///r-   c                    t          |          }|                     ||           t                      }|                    |j                   |                    |j                                                   t          | j        t          |
                                                                                    }|S r5   )r   rk   r   rr   r   setTextWidthrq   rg   r   intsizeheight)r)   r   r   r   r   r   s         r,   sizeHintzItemDelegate.sizeHint   s    &v..We,,,ooGL!!!++--...TZSXXZZ%6%6%8%8!9!9::r-   )rC   rD   rE   r&   r   r   rF   rG   s   @r,   rb   rb   t   sW            + + +Z      r-   rb   c                        e Zd Z eeeeee          Z e            Zd fd	Zd Z	d Z
 ee          d             Zd Zd Z ee          d             Z eee          d	             Zd
 Zd Zd Z xZS )ResultsBrowser  c                    t                                          |           d | _        d | _        || _        d | _        d | _        d | _        i | _        t                      | _
        d | _        d | _        d | _        || _        d | _        d| _        d| _        |                     d           |                     t(                     |                     d           |                     t/          |                      |                     d           |                     dt4          j                   | j        d d         | _        |                                 j                            | j                    d S )Nri   FTr      )!r%   r&   search_textresultsmax_resultstotal_matches
error_flag	completedrL   r   r$   datafiles
root_itemsr#   rY   longest_file_itemlongest_line_item	set_titleset_sortingOFFsetSortingEnabledsetItemDelegaterb   setUniformRowHeightssortByColumnr   AscendingOrdercommon_actionsheadersectionClickedconnectsort_section)r)   r*   r#   r   r+   s       r,   r&   zResultsBrowser.__init__   sR      &!JJ		
$	!#!# 	ru%%%\$//000!!$'''!R./// #1"1"5 	$,,T->?????r-   c                     | j                             t          |                                                     }|/|\  }}}}| j                            ||| j        |||z
             dS dS )zDouble-click event.N)r   getidcurrentItemsig_edit_goto_requestedemitr   )r)   itemitemdatarO   r   r    colends          r,   	activatedzResultsBrowser.activated   s    9==D$4$4$6$6!7!788.6+HfeV(--&$"2E6E>K K K K K  r-   c                 z    || j         d<   |                                                     |t          k               dS )z/Enable result sorting after search is complete.r]   N)rL   r   setSectionsClickabler_   )r)   flags     r,   r   zResultsBrowser.set_sorting   s4    !%X**42:66666r-   c                 0    |                      d           d S )NT)r   )r)   idxs     r,   r   zResultsBrowser.sort_section   s    t$$$$$r-   c                     t          |t                    rB|                                r|                     |           dS |                     |           dS |                     |           dS )zClick event.N)
isinstancerI   
isExpandedcollapseItem
expandItemr   )r)   r   s     r,   clickedzResultsBrowser.clicked   sp    dM** 	!   &!!$'''''%%%%%NN4     r-   c                 B   t                      | _        |                                  |                     d           d| _        i | _        i | _        |                     t                     || _	        d|z  }t          d          }|                     ||z              d S )NFr   z'%s' - zString not found)r   r$   clearr   	num_filesr   r   r   r   r   r   r   )r)   r   rZ   r   s       r,   clear_titlezResultsBrowser.clear_title   s    JJ	

u%%%	
&K'#$$ut|$$$$$r-   c                    t          | j                  | j        k     r	 t          | | j        || j        | j                  }n# t          $ r Y dS w xY w|| j        |<   |	                    d           | xj
        dz  c_
        t          j        |j        |j                  }t          |          t          | j                  k    r|| _        dS dS dS )zReal-time update of file items.NTrK   )lenr   r   rI   rY   rL   r#   	Exceptionr   setExpandedr   rM   joinrT   rO   r   )r)   rO   r   	item_texts       r,   append_file_resultz!ResultsBrowser.append_file_result   s     ty>>D,,,	$ILO      $(DJx T"""NNaNN!14=AAI9~~D$: ; ;;;)2&&&+ -,( <;s   "A 
AAc           	         t          | j                  | j        k    r=|                     t	          d                     | j                                         dS | j        t          | j                  z
  }|t          |          k     r
|d|         }|                     d           |                     |           |D ]}|\  }}}}}	| j        	                    |d          }
|
rot          |
|||| j        | j                  }||||	f| j        t          |          <   t          |j                  t          | j                  k    r|j        | _        |                     d           dS )zReal-time update of line items.z<Maximum number of results reached! Try narrowing the search.NFT)r   r   r   r   r   sig_max_results_reachedr   setUpdatesEnabledr   r   r   r$   r#   r   r"   r   )r)   itemsrZ   	availabler   rO   r   r    line	match_end	file_items              r,   append_resultzResultsBrowser.append_result  su    ty>>T---NN1 5 6 6 7 7 7(--///F$s49~~5	s5zz!!*9*%Eu%%%u 		> 		>D7;4HfeT9
x66I >$Yt%)YA A'/	&J	"T((#t'((3t/E+F+FFF-1-=D*t$$$$$r-   c                     || _         dS )z%Set maximum amount of results to add.N)r   )r)   values     r,   set_max_resultszResultsBrowser.set_max_results6  s     r-   c                     || _         dS )z'Set path where the search is performed.N)rY   )r)   rY   s     r,   set_pathzResultsBrowser.set_path:  s    			r-   c                    |                                                      t          j        | j                  }|                                }t          | j                  }t          | j	                  }|t          k    rt          t          t                    z   dz   }||                    d          z  }||k    r|}n|}|dz   |                                 _        dS )z/Set widget width according to its longest item.rK   W
   N)fontMetricsr   r   TextSingleLiner   rg   r
   r$   r   r   r   r   itemDelegate)r)   file_item_sizefile_item_widthmetricsline_item_charsline_item_widthrg   s          r,   	set_widthzResultsBrowser.set_width>  s     ))++00"
 
 )..00 ty))d455////#h--?!CO)GMM#,>,>> _,,#EE#E %*BJ!!!r-   )r   )rC   rD   rE   r   r/   r   r   r   r&   r   r   r   r   r   r   objectr   r   r   r   r   rF   rG   s   @r,   r   r      sB       $fS#sC==$fhh@ @ @ @ @ @BK K K7 7 7
 
T#YY% % Y%! ! !% % % 
T&\\3 3 \32 
T&&% % %6! ! !  / / / / / / /r-   r   ))__doc__os.pathrY   rM   qtpy.QtCorer   r   r   r   r   
qtpy.QtGuir   r	   r
   r   qtpy.QtWidgetsr   r   r   r   r   spyder.api.translationsr   spyder.config.guir   0spyder.plugins.findinfiles.widgets.search_threadr   r   spyder.utilsr   rV   spyder.utils.paletter   spyder.widgets.onecolumntreer   r_   r   r   rI   rb   r    r-   r,   <module>r      s-           8 7 7 7 7 7 7 7 7 7 7 7 7 7' ' ' ' ' ' ' ' ' ' ' 'C C C C C C C C C C C C C C & % % % % % & & & & & &! ! ! ! ! ! ! ! , , , , , , . . . . . . 6 6 6 6 6 6
 

!' !' !' !' !'O !' !' !'H& & & & &O & & &V< < < < <& < < <~b/ b/ b/ b/ b/] b/ b/ b/ b/ b/r-   