
    Je,                        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(y)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        |   || j                         gt        j                         y )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          T/usr/lib/python3/dist-packages/spyder/plugins/findinfiles/widgets/results_browser.pyr&   zLineMatchItem.__init__'   sX    
+,
 =$	$--/!2O4H4HI    c                    t        | j                        j                         }d| j                   d| j                   d| j
                   d| j                  j                          d| j                  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    DJJ&&(!!% 1 2++fTZZL 1((,		(8(8(:'; <,,./uUG;H 	 r-   c                 "    | j                         S Nr'   r)   s    r,   __unicode__zLineMatchItem.__unicode__<       }}r-   c                 "    | j                         S r5   r6   r7   s    r,   __str__zLineMatchItem.__str__?   r9   r-   c                 4    | j                   |j                   k  S r5   r   r)   xs     r,   __lt__zLineMatchItem.__lt__B   s    {{QXX%%r-   c                 4    | j                   |j                   k\  S r5   r=   r>   s     r,   __ge__zLineMatchItem.__ge__E   s    {{ahh&&r-   )
__name__
__module____qualname__r&   r'   r8   r;   r@   rB   __classcell__r+   s   @r,   r   r   %   s"    J
&'r-   r   c                   *     e Zd Z fdZd Zd Z xZS )FileMatchItemc           	         || _         t        j                  |      | _        t        j                  |      }	 |j                  |      d   }|j                  t        j                        r|dd  }|| _	        d| dt        j                  |       d| d| j                   d	}t        	| -  ||gt        j                         | j                  dt        j                   |d             | j#                  d|       y # t        $ r |}Y w xY w)	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
IndexErrorrel_dirnamer%   r&   r   r(   setIconimaget_icon_by_extension_or_type
setToolTip)
r)   r*   pathrO   rL   r#   rP   rU   titler+   s
            r,   r&   zFileMatchItem.__init__K   s   X. ++h'
	"!---a0K%%cgg.)!"o ')l"S\\(-C,D E"", .##$ %	 	 	%/*>*>?Q99(CHI8$#  	"!K	"s   8C= =D
Dc                 b    | j                   d   t        k(  r| j                  |j                  k  S yNstatusFrL   ONrO   r>   s     r,   r@   zFileMatchItem.__lt__m   s)    <<!R'==1::--r-   c                 b    | j                   d   t        k(  r| j                  |j                  k\  S yr]   r_   r>   s     r,   rB   zFileMatchItem.__ge__s   s)    <<!R'==AJJ..r-   )rC   rD   rE   r&   r@   rB   rF   rG   s   @r,   rI   rI   I   s     %Dr-   rI   c                   *     e Zd Z fdZd Zd Z xZS )ItemDelegatec                 |    t         |   |       d | _        t        t        j
                        | _        d| _        y )Nr   )r%   r&   _marginr	   r   COLOR_BACKGROUND_3_background_colorwidth)r)   r*   r+   s     r,   r&   zItemDelegate.__init__~   s1     !'(H(H!I
r-   c                 :   t        |      }| j                  ||       |j                  t        j                         n|j                  j	                         }|j
                  t        j                  z  r&|j                  |j                  | j                         t               }|j                  }|j                  |       |j                  d       d|_        |j                  t        j                   ||       t#        j$                         }|j'                  t        j(                  |d       }	|j+                          |j-                  |	j/                         t1        dd      z          |j3                         j5                  ||       |j7                          y )Nr       )r   initStyleOptionwidgetr   stylestater   State_MouseOverfillRectrectrg   r   r   setHtmlsetDocumentMargindrawControlCE_ItemViewItemr   PaintContextsubElementRectSE_ItemViewItemTextsave	translatetopLeftr   documentLayoutdrawrestore)
r)   painteroptionindexoptionsrn   docr   ctxtextRects
             r,   paintzItemDelegate.paint   s:   &v.We,)0)?##%nn**, 	$ ==6111V[[$*@*@A o||Da  &00'7C)668''(B(B(/7(**,va|;<!!'3/r-   c                 R   t        |      }| j                  ||       t               }|j                  |j                         |j                  |j                  j                                t        | j                  t        |j                         j                                     }|S r5   )r   rl   r   rs   r   setTextWidthrr   rh   r   intsizeheight)r)   r   r   r   r   r   s         r,   sizeHintzItemDelegate.sizeHint   sw    &v.We,oGLL!++-.TZZSXXZ%6%6%8!9:r-   )rC   rD   rE   r&   r   r   rF   rG   s   @r,   rc   rc   |   s    +Zr-   rc   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 )ResultsBrowserc                    t         |   |       d | _        d | _        || _        d | _        d | _        d | _        i | _        t               | _
        d | _        d | _        d | _        || _        d | _        d| _        d| _        | j%                  d       | j'                  t(               | j+                  d       | j-                  t/        |              | j1                  d       | j3                  dt4        j6                         | j8                  d d | _        | j;                         j<                  j?                  | j@                         y )Nrj   FTr      )!r%   r&   search_textresultsmax_resultstotal_matches
error_flag	completedrL   r   r$   datafiles
root_itemsr#   rZ   longest_file_itemlongest_line_item	set_titleset_sortingOFFsetSortingEnabledsetItemDelegaterc   setUniformRowHeightssortByColumnr   AscendingOrdercommon_actionsheadersectionClickedconnectsort_section)r)   r*   r#   r   r+   s       r,   r&   zResultsBrowser.__init__   s    &!J		
$	!#!# 	ru%\$/0!!$'!R../ #11"15 	$$,,T->->?r-   c                     | j                   j                  t        | j                                     }|4|\  }}}}| j                  j                  ||| j                  |||z
         yy)zDouble-click event.N)r   getidcurrentItemsig_edit_goto_requestedemitr   )r)   itemitemdatarO   r   r    colends          r,   	activatedzResultsBrowser.activated   se    99==D$4$4$6!78.6+HfeV((--&$"2"2E6E>K  r-   c                 n    || j                   d<   | j                         j                  |t        k(         y)z/Enable result sorting after search is complete.r^   N)rL   r   setSectionsClickabler`   )r)   flags     r,   r   zResultsBrowser.set_sorting   s(    !%X**42:6r-   c                 &    | j                  d       y )NT)r   )r)   idxs     r,   r   zResultsBrowser.sort_section   s    t$r-   c                     t        |t              r4|j                         r| j                  |       y| j	                  |       y| j                  |       y)zClick event.N)
isinstancerI   
isExpandedcollapseItem
expandItemr   )r)   r   s     r,   clickedzResultsBrowser.clicked   s<    dM* !!$'%NN4 r-   c                    t               | _        | j                          | j                  d       d| _        i | _        i | _        | j                  t               || _	        d|z  }t        d      }| j                  ||z          y )NFr   z'%s' - zString not found)r   r$   clearr   	num_filesr   r   r   r   r   r   r   )r)   r   r[   r   s       r,   clear_titlezResultsBrowser.clear_title   sr    J	

u%	
&K'#$ut|$r-   c                    t        | j                        | j                  k  rt        | | j                  || j
                  | j                        }|| j                  |<   |j                  d       | xj                  dz  c_	        t        j                  |j                  |j                        }t        |      t        | j                        kD  r|| _        yyy)zReal-time update of file items.TrK   N)lenr   r   rI   rZ   rL   r#   r   setExpandedr   rM   joinrU   rO   r   )r)   rO   r   	item_texts       r,   append_file_resultz!ResultsBrowser.append_file_result  s     tyy>D,,, 		D $(DJJx T"NNaN!1!14==AI9~D$:$: ;;)2& < -r-   c           	         t        | j                        | j                  k\  r5| j                  t	        d             | j
                  j                          y| j                  t        | j                        z
  }|t        |      k  r|d| }| j                  d       | j                  |       |D ]  }|\  }}}}}	| j                  j                  |d      }
|
s*t        |
|||| j                  | j                        }||||	f| j                  t        |      <   t        |j                        t        | j                        kD  s|j                  | _         | j                  d       y)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)   itemsr[   	availabler   rO   r   r    line	match_end	file_items              r,   append_resultzResultsBrowser.append_result  s>    tyy>T---NN1 5 6 7((--/$$s499~5	s5z!*9%Eu%u 		>D7;4HfeT9

x6I$Yt%)YYA'/	&J		"T(#t''(3t/E/E+FF-1-=-=D*		> 	t$r-   c                     || _         y)z%Set maximum amount of results to add.N)r   )r)   values     r,   set_max_resultszResultsBrowser.set_max_results9  s
     r-   c                     || _         y)z'Set path where the search is performed.N)rZ   )r)   rZ   s     r,   set_pathzResultsBrowser.set_path=  s	    	r-   c                    | j                         j                  t        j                  | j                        }|j                         }t        | j                        }t        | j                        }|t        k\  rt        t        t              z   dz   }||j                  d      z  }||kD  r|}n|}|dz   | j                         _        y)z/Set widget width according to its longest item.rK   W
   N)fontMetricsr   r   TextSingleLiner   rh   r
   r$   r   r   r   r   itemDelegate)r)   file_item_sizefile_item_widthmetricsline_item_charsline_item_widthrh   s          r,   	set_widthzResultsBrowser.set_widthA  s     ))+00""
 )..0 tyy)d445///#h-?!CO)GMM#,>> _,#E#E %*BJ!r-   )i  )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      s    $S#sC=$h@BK7
 
#Y% %!% 
&\3 3( 
&&% %6!/r-   r   ))__doc__os.pathrZ   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   rW   spyder.utils.paletter   spyder.widgets.onecolumntreer   r`   r   r   rI   rc   r    r-   r,   <module>r      s      8 7' 'C C & &! , . 6
 

!'O !'H.O .f<& <~]/] ]/r-   