
    Je{                        d Z ddlZddlmZmZmZmZmZmZ ddl	m
Z
mZ ddlmZmZmZmZ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 dd	lmZ dd
lmZ ddl 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+y)zFind/Replace widget    N)QEventQSizeQtQTimerSignalSlot)QPixmapQTextCursor)	QActionQGridLayoutQHBoxLayoutQLabel	QLineEditQToolButtonQSizePolicyQSpacerItemQWidget)_)CONF)to_text_string)ima)regexp_error_msg)
TextHelper)create_toolbutton)get_eol_chars)PatternComboBoxc                     | |kD  S )zReturn True is pos1 > pos2 pos1pos2s     </usr/lib/python3/dist-packages/spyder/widgets/findreplace.pyis_position_supr#   $       $;    c                     | |k  S )zReturn True is pos1 < pos2r   r   s     r"   is_position_infr'   (   r$   r%   c                   $     e Zd Z fdZd Z xZS )
SearchTextc                 6    d| _         t        | 	  |d       y )Ni  Fadjust_to_minimum)recommended_widthsuper__init__)selfparent	__class__s     r"   r/   zSearchText.__init__/   s    !$59r%   c                 .    t        | j                  d      S )zRecommended size.
   )r   r-   r0   s    r"   sizeHintzSearchText.sizeHint3   s    T++R00r%   )__name__
__module____qualname__r/   r6   __classcell__r2   s   @r"   r)   r)   -   s    :1r%   r)   c                       e Zd ZdZ ed       ed      dZ ee      Z e       Z	 e       Z
d%dZ fdZd Zd Zd	 Zd
 Zd&dZ fdZ e       d        Zd Zd Zd Zd Zd Zd&dZ e       d&d       Z e       d&d       Zd Zd Zd Z	 	 d'dZ  e       d%d       Z! e       d        Z" e       d%d       Z#d(dZ$d Z%d Z&d  Z'd! Z(d)d"Z)d# Z*d$ Z+ xZ,S )*FindReplacezFind widgetzRegular expression errorz
No matches)regexp_error
no_matchesc           	          t        j                   |       | _        d  _        d  _        t               }|j                  dddd        j                  |       t          j                  t        j                  d             _        |j                   j                  dd        j                  j                          _        t!                _         j$                  j'                   fd        j(                  j'                   fd        j"                  j+                         j,                  j'                   j.                          j"                  j0                  j'                   j2                         t5                _         j"                  j8                  j:                  j'                   j<                         d _        t        j                  d	      jA                   j                         _!        d
 _"        t        j                  d       _#        t        j                  d       _$        tK                _&         jL                  jO                  d        j"                  j+                         jQ                   jL                  tR        jT                          j"                  j+                         jW                  tX              d    _-        d _.        t          j^                  t        j                  d      ta        d             _1         j                  s jb                  j                          t          jd                  t        j                  d      ta        d             _3        t          jh                  t        j                  d      ta        d             _5         jj                  jl                  j'                   jn                          jf                  jl                  j'                   jn                         t         t        j                  d      ta        d             _8         jp                  js                  d        jp                  jt                  j'                   fd       t         t        j                  d      ta        d             _;         jv                  js                  d        jv                  jt                  j'                   fd       t         t        j                  d      ta        d             _<         jx                  js                  d        jx                  jt                  j'                   fd         j                   j"                   jf                   jj                   jp                   jv                   jx                   jb                   j6                  g	 _=        t}               } jz                  dd! D ]  }|j                  |        |j                  t        d"d             |j                   j6                         |j                  t        ddt        j                               |j                  |dd       t         d#       _E         j                  j                  j'                   fd$        j                  j+                         j                  ta        d%             t         ta        d&      t        j                  d'       j                  (       _I        t         ta        d)      t        j                  d*       j                  (       _K         j                  jl                  j'                   j                          j                  jl                  j'                   jn                         t         ta        d+      t        j                  d,       j                  (       _N         j                  jl                  j'                   j                          j                  jl                  j'                   jn                         t}               } j                   j                   j                   j                  g}|D ]  }|j                  |        |j                  d       |j                  |dd        jz                  j                  |       | _Q         j                           j"                  j                   j"                   j                          j                  t        j                  t        j                          j                  |       _W        t                _Y         j                  j                  d        j                  j                  d-        j                  j                  j'                   j                          j"                  j                          t                __         j                  j                  d        j                  j                  d.        j                  j                  j'                   j                         y )/N      DialogCloseButton)	triggerediconr   c                  .     j                  dddd      S )NFchangedforwardrehighlightmultiline_replace_checkfindr5   s   r"   <lambda>z&FindReplace.__init__.<locals>.<lambda>[   s"    IIeU05  7 r%   c                  .     j                  dddd      S )NFTrG   rL   r5   s   r"   rN   z&FindReplace.__init__.<locals>.<lambda>a   s"    IIeTu05  7 r%   Fnumber_matches r?   error   replaceReplace text)toggledrE   tipfindpreviousFind previous)rD   rE   rW   findnext	Find nextregexzUse regular expressions)rE   rW   Tc                 $    j                         S NrL   stater0   s    r"   rN   z&FindReplace.__init__.<locals>.<lambda>   s    TYY[ r%   format_letter_casezEnable case sensitive searchesc                 $    j                         S r^   rL   r_   s    r"   rN   z&FindReplace.__init__.<locals>.<lambda>   s    tyy{ r%   format_letter_matcheszOnly search for whole wordsc                 $    j                         S r^   rL   r_   s    r"   rN   z&FindReplace.__init__.<locals>.<lambda>   s    		 r%   r4   r+   c                 (    j                  d      S )NT)focus_replace_text)replace_find)r   r0   s    r"   rN   z&FindReplace.__init__.<locals>.<lambda>   s    d''4'@ r%   ReplacezReplace next occurrencereplace_next)rW   rE   rD   z Replace occurrences in selectionreplace_selectionzReplace all occurrencesreplace_alli,     )ar   r/   enable_replaceeditoris_code_editorr   setContentsMargins	setLayoutr   hider   rE   close_button	addWidgeticonSize	icon_sizer)   search_textreturn_shift_pressedconnectreturn_pressedlineEdit
textEditedtext_has_been_editedsig_resized_resize_replace_textr   number_matches_textclear_actionrD   clear_matcheshide_number_matches_textpixmapnumber_matches_pixmapmatches_stringno_matches_icon
error_iconr   messages_action
setVisible	addActionr   TrailingPositionfindChildrenr   messages_button
replace_onchange_replace_stater   replace_text_buttonfind_previousprevious_button	find_nextnext_buttonclickedupdate_search_combo	re_buttonsetCheckablerV   case_buttonwords_buttonwidgetsr   addSpacerItemr   r   	Expanding	addLayoutr   replace_textvalidsetPlaceholderTextrh   replace_buttonreplace_find_selectionreplace_sel_buttonupdate_replace_comboreplace_find_allreplace_all_button
addStretchextendreplace_widgetshide_replacesetTabOrdersetSizePolicyFixedcreate_shortcuts	shortcutsr   highlight_timersetSingleShotsetIntervaltimeouthighlight_matchesinstallEventFiltershow_matches_timershow_matches)r0   r1   rn   glayoutsearch_layoutwidgetreplace_layoutr   s   `       r"   r/   zFindReplace.__init__C   s#   v&,"-""1aA.w-ii-.

 	$++Q2 **335 &d+!!))7	
 	##7	
 	!!#..66%%	'$$,,T-F-FG#)$< %%//778J8JK(-%HH%&--dnn= 	" !"xx5((7+&t}''.!!#--  )"<"<	>
 %%'44[A!D 	  #4--)$.!	$
  ""$$))+0((.)/"	 
 -nn*%+	
 	  (()A)AB$$,,T-E-EF*sxx(+,
 	##D)&&'@A,./23

 	%%d+  (()BC-12/0

 	&&t,!!))*CD   NN$$$$

 $ll1R( 	,F##F+	, 	##KA$67 8 89##1k334	
 	-A. ,#
 	''@	B""$77)E/+,.)''	
 #445-.11	#
 	''//0I0IJ''//0H0HI"3+,-(++	#
 	''//0I0IJ''//0H0HI$####	
  	-F$$V,	-!!!$.!Q/G$& 	$$T%5%5t7H7HI;00+2C2CD..v6  &d|**40((-$$,,T-C-CD 	++D1 #),--d3++B/''//0A0ABr%   c                 Z   t        |t              sy|j                         t        j                  k(  r|j	                         }|j                         t        j                  z  }|t        j                  k(  r7|r| j                  j                          n| j                  j                          |t        j                  k(  r]| j                  j                         r3| j                  j!                  | j                  j#                                | j%                          |j                         t        j&                  k(  r]| j(                  j+                  | j                  j-                         j/                         dz
  | j(                  j1                                t2        | i  ||      S )af  
        Event filter for search_text widget.

        Notes
        -----
        * Emit signals when Enter and Shift+Enter are pressed. These signals
          are used for search forward and backward.
        * Add crude hack to get tab working between the find/replace boxes.
        * Reduce space between the messages_button and the clear one.
        T*   )
isinstancer   typeKeyPresskey	modifiersr   ShiftModifier
Key_Returnry   emitr{   Key_Tabrx   hasFocusr   set_current_textcurrentTextfocusNextChildPaintr   mover|   widthyr.   eventFilter)r0   r   eventr   shiftr2   s        r"   r   zFindReplace.eventFilter  s5    %(::<6??*))+COO%(8(88Ebmm#--224'',,.bjj ##,,.%%66((4468##%::<6<<'  %%  ))+113b8$$&&(
 w"6511r%   c                 n   t        j                  | j                  dd|      }t        j                  | j                  dd|      }t        j                  | j                  dd|      }t        j                  | j
                  dd|      }t        j                  | j                  dd|       }|||||gS )z Create shortcuts for this widgetfind_replacer[   )contextnamer1   rY   z	Find textrU   zhide find and replace)r   config_shortcutr   r   showshow_replacers   )r0   r1   rZ   findprev
togglefindtogglereplacers   s          r"   r   zFindReplace.create_shortcuts6  s     ''NN"	 ''" 	 ))II"	
 ,,"	 ##II"(	 (JtDDr%   c                 T    | j                   D cg c]  }|j                   c}S c c}w )z
        Returns shortcut data, a list of tuples (shortcut, text, default)
        shortcut (QShortcut or QAction instance)
        text (string): action/shortcut description
        default (string): default key sequence
        )r   data)r0   scs     r"   get_shortcut_datazFindReplace.get_shortcut_dataY  s      #'..1B111s   %c                 h    | j                   j                         j                  j                          y r^   )rx   r|   returnPressedr   r5   s    r"   r   zFindReplace.update_search_combob  s#    !!#11668r%   c                 h    | j                   j                         j                  j                          y r^   )r   r|   r   r   r5   s    r"   r   z FindReplace.update_replace_comboe  s#    ""$22779r%   c                    t        j                  |        | j                          | j                  j	                  d       | j                          | j                  |r.| j                  d   j                         r,| j                          n| j                  j                  d       | j                  j                         }|st        |j                               dk  rd}|sUd}	 | j                  j                         }|j!                  t"        j$                         t'        |j)                               }|r| j,                  j/                         r|rT| j,                  j1                  |       | j,                  j3                         j5                          | j7                          n(| j,                  j3                         j5                          | j,                  j9                          yy# t*        $ r Y w xY w)Overrides Qt MethodTNr   rS   F)r   r   _width_adjustmentsvisibility_changedr   change_number_matchesro   r   	isVisibler   r   
setCheckedget_selected_textlen
splitlines
textCursorselectr
   WordUnderCursorr   selectedTextAttributeErrorrx   r   setEditTextr|   	selectAllrefreshsetFocus)r0   r   texthighlightedcursors        r"   r   zFindReplace.showh  s   T!$$T*""$;;"''*446%%'((33D9 ;;002Ds4??#45:" "'K!%!7!7!9k&A&AB-f.A.A.CD  0 0 < < >+$$006$$--/99;LLN$$--/99;%%'? #( * s   (AG0 0	G<;G<c                 D    t         |   |       | j                          y r^   )r.   resizeEventr   )r0   r   r2   s     r"   r   zFindReplace.resizeEvent  s    E"!r%   c                 J    |r| j                          y| j                          y)zShow and hide replace widgetN)r   r   )r0   r   s     r"   replace_widgetzFindReplace.replace_widget  s     r%   c                     | j                    | _         | j                  j                  | j                          | j                  | j                          y)z.Handle the change of the replace state widget.N)r   r   r   r   r5   s    r"   r   z FindReplace.change_replace_state  s:    "oo-  ++DOO<DOO,r%   c                 J   | j                   D ]  }|j                           t        j                  |        | j                  j	                  d       | j
                  j                  d       | j                  +| j                  j                          | j                          yy)r   FN)
r   rs   r   r   r   r   r   ro   r   r   r0   r   s     r"   rs   zFindReplace.hide  s    ** 	FKKM	T  ++E2$$U+;;"KK  "  #r%   c                     | j                   r4| j                  d       | j                  D ]  }|j                           yy)zShow replace widgetsF)r   N)rn   r   r   r  s     r"   r   zFindReplace.show_replace  s<    II5I)..  r%   c                 |    | j                   D ]-  }|j                          | j                  j                  d       / y)zHide replace widgetsFN)r   rs   r   r   r  s     r"   r   zFindReplace.hide_replace  s4    ** 	7FKKM$$//6	7r%   c                     | j                         r| j                  | j                          y| j                  du}| j                  D ]  }|j	                  |        |r| j                          yy)zRefresh widgetN)isHiddenro   r   r   
setEnabledrM   )r0   r`   r   s      r"   r   zFindReplace.refresh  sd    ==?{{&""$4'll 	%Fe$	%IIK r%   c                    	 ddl m} ddlm} | j                  j                  t        ||              | j                  j                  t        ||              t        ||      | _
        | j                  ;| j                  r/| j                  j                  j                  | j                         || _        | j                  r/| j                  j                  j                  | j                         |r| j!                          | j#                         r|| j%                          yyy# t        $ r t        d      }Y :w xY w)zSet associated editor.r   )QWebEngineViewN)
CodeEditor)qtpy.QtWebEngineWidgetsr	  ImportErrorr   (spyder.plugins.editor.widgets.codeeditorr
  r   r   r   r   rp   ro   textChanged
disconnectupdate_matchesrz   r   r  r   )r0   ro   r   r	  r
  s        r"   
set_editorzFindReplace.set_editor  s   	(> 	H$$FN)K%KL!!j&H"HI(< ;;"t':':KK##..t/B/BC  KK##++D,?,?@LLN==?v1   2?+  	(!$ZN	(s   D+ +EEc                     | j                  dddd      }|r| j                  j                          | j                  j	                          |S )zFind next occurrenceFTrG   )rM   ro   r   rx   add_current_textr0   	set_focusr`   s      r"   r   zFindReplace.find_next  sJ     		%527  9KK  "))+r%   c                 h    | j                  dddd      }|r| j                  j                          |S )zFind previous occurrenceFrG   )rM   ro   r   r  s      r"   r   zFindReplace.find_previous  s8     		%E27  9KK  "r%   c                 ,    | j                  ddd       y)z
        Find text has been edited (this slot won't be triggered when setting
        the search pattern combo box text programmatically).
        T)rH   rI   start_highlight_timerNrL   )r0   r   s     r"   r~   z FindReplace.text_has_been_edited  s    
 			$D	Ir%   c                 ,   | j                   r| j                  j                         }| j                  j	                         }| j
                  j	                         }| j                  j	                         }| j                  j                  ||||       yy)zHighlight found results)wordregexpcaseN)	rp   rx   r   r   	isCheckedr   r   ro   highlight_found_results)r0   r   r  r  r  s        r"   r   zFindReplace.highlight_matches  s~    ##//1D##--/D$$..0D^^--/FKK//4T 0 ; r%   c                     d| _         | j                  j                  d       | j                  j	                          | j
                  r| j                  j                          yy)zClear all highlighted matchesrQ   FN)r   r   r   r   rs   rp   ro   clear_found_resultsr5   s    r"   r   zFindReplace.clear_matches	  sN     ''.  %%'KK++- r%   c                 .   |r]| j                   d   j                         r@| j                  j                         }t	        t        |      j                               dkD  ry| j                  j                         }t	        |      dk(  rH| j                  s| j                  j                  d       | j                          | j                          y| j                  j                         }| j                  j                         }	| j                   j                         }
| j                  j                  |||||	|
      }d}|s |
rt#        |      }|r| j%                  |       |ry| j                  r|rt'        | j                  j)                               }t+        | j                        j-                  |       |s| j                  j.                  sX| j0                  j3                          |r| j0                  j5                          n!| j7                          n| j                          | j                  j9                  |||
|	      }t;        | j                  d      r | j                  j=                  |||
|	      }nd}| j                  ||	       |S )
zCall the find functionr   rS   NrQ   )r  r  r  Fr  r  r  get_match_number)current_matchtotal_matches)r   r   ro   r   r   r   r   rx   r   rp   	find_textr   r   r   r  r   r   r   
show_errorr
   r   r   unfold_if_colapsedfound_resultsr   stopstartr   get_number_matcheshasattrr#  )r0   rH   rI   rJ   r  rK   sel_textr   r  r  r  found	error_msgr   rP   match_numbers                   r"   rM   zFindReplace.find  s5    #t';';A'>'H'H'J{{446H>(+6689A=++-t9>&&%%b)&&( ##--/D$$..0D^^--/FKK))$t/3F * DE IV,T2	OOI. ""u$T[[%;%;%=>4;;'::6Bdkk&?&?((--/,,,224..0""$![[;;DtCIAE < GN t{{$67#{{;;DtCIAE  <  G  !&&\5C ' ELr%   c                     | j                   yt        | j                  j                               }t        | j                  j                               }d}| j
                  j                         }|rt        j                  n t        j                  t        j                  z  }| j                  j                         r*	 t        j                  ||      }|j                  |d       t        | j                   j                               }|r|n|j                         }|r|n|j                         }	d}
|8| j                   j!                         }|r||	k7  rJ| j#                  ddd      s6d}
n3t%        |j'                  |	            dk  r| j#                  ddd      sd}
d}|
rU| j                   j)                         }|j+                          |"|j-                          |j/                  |       nt        |j1                               }t3        | j                   j5                               }|j7                  d|      }|j-                          |j/                  |j                  ||             | j9                  d	      rv| j                   j)                         }|j;                  |j=                         t>        j@                         |j;                  |jC                         t>        jD                         ||jG                          |r| j                  jI                          n| j                   jI                          tK        | j                   d
d      r| j                   jM                          yy# t        j                  $ r Y yw xY w)zReplace and find.NflagsrQ   TF)rH   rI   rJ   r   u    )r  document_did_change)'ro   r   r   r   rx   r   r  re	MULTILINE
IGNORECASEr   compilesubrR   r   lowerhas_selected_textrM   r   findallr   beginEditBlockremoveSelectedText
insertTextr   r   toPlainTextrT   r   setPositionselectionStartr
   
MoveAnchorselectionEnd
KeepAnchorendEditBlockr   getattrr5  )r0   rg   r   rx   
re_patternr  re_flagsseltxtcmptxt1cmptxt2
do_replacehas_selectedr   eol_charfound_cursors                  r"   rh   zFindReplace.replace_findO  s    ;;%d&7&7&C&C&EF$T%5%5%A%A%CD
))+#'2<<R]]R\\-I >>##%ZZ8D
 |R0   = = ?@!%+;+<+<+> &flln
;;88:L7g#5yy-2 ! 4!&J:%%g./14yy-2 ! 4!&J[[++-F!!#!))+!!,/'(;(;(=> ))@)@)BC	8<))+!!*..v"FG~~~.#{{557""<#>#>#@#.#9#9;""<#<#<#>#.#9#9; !&&(KK  "4;; 5u=KK++- >s 88 s   >)M7 7NNc                    | j                   yt        | j                  j                               }t        | j                  j                               }d}| j
                  j                         }|rt        j                  n t        j                  t        j                  z  }| j                  j                         }|j                  dd      }|r+	 t        j                  ||      }|j                  |d       n*t        j                  t        j                  |      |      }| j                   j!                  dd      }| j                   j#                         }|j%                          |j'                          |j)                  |j                  ||             |j+                          | j                   j-                          y# t        j                  $ r Y yw xY w)z)Replace and find all matching occurrencesN\\\r3  rQ   sofeof)ro   strr   r   rx   r   r  r6  r7  r8  r   rT   r9  r:  rR   escape_select_textrA  r>  r?  r@  rG  r   )	r0   r   rx   rI  r  rJ  
re_enabledr   r   s	            r"   r   zFindReplace.replace_find_all  sn    ;;4,,88:;$**6689
))+#'2<<R]]R\\-I^^--/

 $++D%8 ZZ8D
 |R0
 BIIk$:(KJ))%7{{&&(!!#*..t<= 88 s   )G GGc                 p   | j                   t        | j                  j                               }t        | j                  j                               }| j
                  j                         }| j                  j                         }|rt        j                  n t        j                  t        j                  z  }d}| j                  j                         r|}n't        j                  |      }|j                  dd      }|rdj                  |      }	 t        j                  ||      }|j!                  |d       t        | j                   j%                               }	|j!                  ||	      }
|
|	k7  r| j                   j'                         }|j)                         }|j+                          |j-                          |j/                  |
       | j                   j1                  |       t3        t5        |
            D ]  }| j                   j7                  dd	         |j9                          |r| j                  j;                          n| j                   j;                          t=        | j                   d
d      r| j                   j?                          yyy# t        j"                  $ r Y yw xY w)z)Replace and find in the current selectionNrS  rT  z\b{pattern}\b)patternr3  rQ   	characterrightr5  F) ro   r   r   r   rx   r   r  r   r6  r7  r8  r   rX  rT   formatr9  r:  rR   r   r   rC  r>  r?  r@  set_cursor_positionranger   extend_selection_to_nextrG  r   rH  r5  )r0   rg   r   rx   r  r  rJ  rI  r\  selected_textreplacementr   	start_poscs                 r"   r   z"FindReplace.replace_find_selection  s%    ;;")$*;*;*G*G*IJL()9)9)E)E)GHK##--/D$$..0D'+r||1MHJ~~'')%))K0+33D%@*11'1BZZx@
 |R0
 +4;;+H+H+JKM$..}EKm+//1"113	%%'))+!!+.//	:s;/0 OAKK88gNO##%!!!**,$$&t{{$95A//1 B[ #, 88 s   )J J54J5c                 `   |r4|r2dj                  |t        d      |      | _        | j                          y|r1dj                  |t        d            | _        | j                          y| j                  j                          | j                  j                         r| j                          yy)z)Change number of match and total matches.z{} {} {}ofz{} {}matchesN)	r_  r   r   r   r   rs   rx   r   show_no_matches)r0   r$  r%  s      r"   r   z!FindReplace.change_number_matches  s    ]","3"3M1T74A#CD")..)"MD$$))+++-$$& .r%   c                 d   | j                         r| j                  j                  | j                  j	                         j                         | j                  j                         | j                  j                         | j                  j                               }| j                  |       yy)zAUpdate total number of matches if text has changed in the editor.r"  )r%  N)r   ro   r,  rx   r|   r   r   r  r   r   r   )r0   rP   s     r"   r  zFindReplace.update_matches  s    >>![[;;  ))+002%%//1~~//1&&002	 < N &&^&D r%   c                 &    | j                  d       y)z'Show a no matches message with an icon.r?   N_show_icon_messager5   s    r"   rj  zFindReplace.show_no_matches  s    -r%   c                    | j                   sy| j                  j                          | j                  j	                  d       | j
                  rK| j                  j                  | j                         | j                  j                  | j                          y| j                  j                  t                      | j                  j                  | j                          y)z1Show the number of matches found in the document.NF)r   r   r   r   r   r   	setPixmapr   
setToolTipr	   setTextr5   s    r"   r   zFindReplace.show_matches  s    ""  %%'''.(($$..t/I/IJ$$//0C0CD$$..wy9$$,,T-@-@Ar%   c                 *    | j                  d|       y)z)Show a regexp error message with an icon.rR   )
extra_infoNrm  )r0   r0  s     r"   r'  zFindReplace.show_error$  s    I>r%   c                 2   |dk(  r| j                   d   }| j                  }n| j                   d   }| j                  }|r|dz   |z   }| j                  j	                  |       | j                  j                  |       | j                  j                  d       y)aK  
        Show a message to users with an icon when no matches can be found or
        there's an error in the passed regexp.

        Parameters
        ----------
        kind: str
            The kind of message. It can be 'no_matches' or 'error'.
        extra_info:
            Extra info to add to the icon's tooltip.
        r?   r>   z: TN)TOOLTIPr   r   r   setIconrq  r   )r0   kindrt  tooltiprE   s        r"   rn  zFindReplace._show_icon_message(  s     <ll<0G''Dll>2G??Dnz1G$$T*''0''-r%   c                    | j                   j                         t        | j                        dz
  z  }| j	                         j                         }| j
                  j	                         j                         }| j                  j                  |z   |z   }||k  r#| j                  j                  d       d| _	        n.| j                  j                  t        |dz               d| _	        | j                  j                          y)z:Several adjustments according to the widget's total width.      TFN)rw   r   r   r   sizer   rx   r-   setMinimumWidthr   intr   r+  )r0   buttons_widthtotal_widthmatches_widthminimal_widths        r"   r   zFindReplace._width_adjustmentsB  s     ,,.#dll2Ca2GHiik'')00557==?..>N 	 &,,R0,0D),,Sq-AB,1D)
 	%%'r%   c                     | j                   j                  |j                                | j                   j                  |j                                y)zT
        Resize replace_text combobox to match the width of the search one.
        N)r   r~  r   setMaximumWidth)r0   r}  old_sizes      r"   r   z FindReplace._resize_replace_textZ  s8     	))$**,7))$**,7r%   )F)T)TTTFT)r   r   r^   )-r7   r8   r9   __doc__r   rv  r   boolr   ry   r{   r/   r   r   r   r   r   r   r   r   r   r   rs   r   r   r   r  r   r   r~   r   r   rM   rh   r   r   r   r  rj  r   r'  rn  r   r   r:   r;   s   @r"   r=   r=   8   sW   45oG
  !8XNHCT'2R!EF29:'(R" 
V   -	!7
!< 
V  
V J;. <@BF<| 
VK. K.Z 
V% %N 
V02 02d'	E.B?.4(08r%   r=   ),r  r6  qtpy.QtCorer   r   r   r   r   r   
qtpy.QtGuir	   r
   qtpy.QtWidgetsr   r   r   r   r   r   r   r   r   spyder.config.baser   spyder.config.managerr   spyder.py3compatr   spyder.utils.icon_managerr   spyder.utils.miscr   "spyder.plugins.editor.utils.editorr   spyder.utils.qthelpersr   spyder.utils.sourcecoder   spyder.widgets.comboboxesr   r#   r'   r)   r=   r   r%   r"   <module>r     sk     
 @ ? +% % %
 ! & + ) . 9 4 1 5
1 1g8' g8r%   