
    Jef|                        d Z ddlZddlZddlmZ ddlm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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) e#D  ci c]  } | jU                         |  c} Z+e#D ch c]  }|jU                          c}Z, ejZ                  e#d      Z. e/e#      Z0e0jc                  e.d       g d\  Z2Z3Z4dddddgdde0D cg c]  }|jU                          c}dddddddgddddddd d!gdd"dddd#d$gdd%dd&d'dd(d)d*d)d+d,d)d-d.d/d0Z5d<d1Z6 G d2 d3      Z7 G d4 d5e      Z8 G d6 d7e      Z9 G d8 d9      Z: G d: d;e      Z;yc c} w c c}w c c}w )=z&
Text snippets configuration widgets.
    N)ValidationErrorvalidate)to_qvariant)QtSlotQAbstractTableModelQModelIndexQSize)QAbstractItemView	QCheckBox	QComboBoxQDialogQDialogButtonBox	QGroupBoxQGridLayoutQLabel	QLineEdit
QTableViewQVBoxLayout)_)CONF)get_font)SUPPORTED_LANGUAGES)build_snippet_ast)ItemDelegate)SimpleCodeEditorPython)r         arraySnippetsobjectlanguagetriggersstringzProgramming language)typedescriptionenumz2List of snippet triggers defined for this language triggerdescriptionsz#Text that triggers a snippet family)r'   r(   zSnippet informationr(   snippetzDescription of the snippettextremove_triggerzSnippet to insertbooleanz<If true, the snippet should remove the text that triggers itr.   r/   )r'   r(   required
propertiesr(   r-   )r'   itemsr+   r,   )r'   r(   r5   r$   r%   )r'   r2   r3   )r'   titler5   c                    g }|d u }|r || j                         i       }|D ]c  }||   }|D ]W  }|r!t        | ||||      }	|	j                          n!||   }
|
d   }|
d   }t        | ||||||      }	|j                  |	       Y e |S )Ndefault)r$   trigger_textr(   
get_option
set_optionr.   r/   r$   r<   r(   snippet_textr/   r=   r>   )lowerSnippetloadappend)r$   r=   r>   snippetslanguage_snippetsload_snippetsr+   trigger_descriptionsr(   this_snippetcurrent_snippetr.   r/   s                e/usr/lib/python3/dist-packages/spyder/plugins/completion/providers/snippets/widgets/snippetsconfig.pyiter_snippetsrL   p   s    $Mhnn.; 3'0/ 	3K&w3>2<2< > !!#"6{"C&v.!01A!B&4;3>486D2<2< > $$\2%	33*     c                   B    e Zd ZdZ	 	 	 d
dZd Zd Zd Zd Zd Z	d	 Z
y)rB   z)Convenience class to store user snippets.Nc                     d| _         || _        | j                  t        v rt        | j                     | _        || _        || _        || _        || _        || _        || _        || _	        || _
        y Nr   )indexr$   LANGUAGE_NAMESr<   r@   r(   r/   initial_trigger_textinitial_descriptionr>   r=   )selfr$   r<   r(   r@   r/   r=   r>   s           rK   __init__zSnippet.__init__   sl     
 ==N**4==9DM((&,$0!#. $$rM   c                     dj                  | j                  | j                  | j                  t	        | j
                              S )Nz[{0}] {1} ({2}): {3})formatr$   r<   r(   reprr@   rU   s    rK   __repr__zSnippet.__repr__   s:    %,,MM4,,d.>.>""#% 	%rM   c                 "    | j                         S N)r[   rZ   s    rK   __str__zSnippet.__str__   s    }}rM   c                 <    || _         || _        || _        || _        y r]   )r<   r(   r@   r/   rU   r<   description_textr@   r/   s        rK   updatezSnippet.update   s"    (+(,rM   c                     | j                   l| j                  dk7  r\| j                  | j                   j                               }|| j                     }|| j                     }|d   | _        |d   | _        y y y )Nr*   r.   r/   )r$   r<   r=   rA   r(   r@   r/   )rU   statetrigger_infosnippet_infos       rK   rC   zSnippet.load   sx    ==$):):b)@OODMM$7$7$9:E !2!23L'(8(89L ,V 4D"./?"@D *A$rM   c                 n   | j                   (| j                   j                         }| j                  |i       }| j                  | j                  d}| j
                  | j                  k7  s| j                  | j                  k7  ra| j
                  |v rS|| j
                     }|j                  | j                         t        |      dk(  r|j                  | j
                         |j                  | j                  i       }||| j                  <   ||| j                  <   | j                  ||d       y y )Nr:   r1   r   Frecursive_notification)r$   rA   r=   r@   r/   rS   r<   rT   r(   poplengetr>   )rU   r$   current_state	new_stater+   re   s         rK   savezSnippet.save   s   ==$}}**,H OOHbOAM))"&"5"5I ))T->->>,,0@0@@,,=+D,E,EFGKK 8 897|q(%))$*C*CD(,,T->->CL-6L))*/;M$++,OOHm38  :% %rM   c                 F   | j                   | j                   j                         }| j                  |i       }|| j                     }|j	                  | j
                         t        |      dk(  r|j	                  | j                         | j                  ||d       y y )Nr:   r   Frh   )r$   rA   r=   r<   rj   r(   rk   r>   )rU   r$   rm   r+   s       rK   deletezSnippet.delete   s    ==$}}**,H OOHbOAM#D$5$56GKK(()7|q !!$"3"34OOHm38  : %rM   )Nr*   r*   r*   FNN)__name__
__module____qualname____doc__rV   r[   r^   rb   rC   ro   rq    rM   rK   rB   rB      s2    3CECG %"%
-A:,	:rM   rB   c            	            e Zd Z ed      Z ed      ZdZdZdZdZ	 e
dd      Zd	d
d
d
dg g d	d	f	 fd	Z e       d        Zd Z xZS )SnippetEditorzValid snippetzInvalid snippetz"QComboBox {border: 1px solid red;}z$QComboBox {border: 1px solid green;}z"QLineEdit {border: 1px solid red;}z$QLineEdit {border: 1px solid green;}iR  iX  Nr*   Fc           	          t         t           |       t        d      }| _        | _        | _        | _        | _        | _	        t        ||||||	|
       _        t        |       _         j                  j                  d       t        t        d             _        t!                _         j"                  j%                  d       t        t        d             _        t)                _        t-        t        d              _         j.                  j1                  t        d              j.                  j3                   j                         t        t        d	             _        t         j6                          _        t;        d        _        t?        t>        j@                  t>        jB                  z         _"         jD                  jG                  t>        j@                         _$         jD                  jG                  t>        jB                         _%         jM                  t        d
              j                  jO                  d        j"                  j1                  t        d              j"                  jQ                  |        j
                  dk7  r6|jS                   j
                        } j"                  jU                  |        j*                  jW                   j                          j*                  jX                  j[                   fd        j
                   j                   j                  f}t]        |D cg c]  }|dk7  	 c}      }|r jH                  j_                  d        j<                  ja                  | |	dd      ddtc                       j<                  je                  |        j<                  j1                  t        d              j<                  jg                  |       ti               }|jk                   j                         tm        t        d            }to               }|jk                   j                  dd       |jk                   j"                  dd       |jk                   j&                  dd       |jk                   j*                  dd       ti               }|jq                  |       |jk                   j.                         |js                  |       |jk                  |       ti               }|jk                   j4                         |jk                   j<                         |jk                   j8                         |jq                  |       |jk                   jD                          js                  |        j"                  jt                  j[                   jv                          j*                  jX                  j[                   jv                          j<                  jX                  j[                   jv                          jD                  jx                  j[                   jz                          jD                  j|                  j[                   j~                         |dk7  s|dk7  r jw                          y y c c}w )NzTo add a new text snippet, you need to define the text that triggers it, a short description (two words maximum) of the snippet and if it should delete the trigger text when inserted. Finally, you need to define the snippet body to insert.)r$   r<   r@   r(   r/   r=   r>   i  zTrigger text:TzDescription:z Remove trigger text on insertionzPCheck if the text that triggers this snippet should be removed when inserting itz<b>Snippet text:</b>zSnippet editorz$Trigger text for the current snippetr*   c                 $    j                         S r]   r   )_xrU   s    rK   <lambda>z(SnippetEditor.__init__.<locals>.<lambda>(  s    dmmo rM   selected
appearance)sectionF)r$   color_schemewraphighlight_current_linefontz!Snippet text completion to insertzTrigger informationr   r   )@superrx   rV   r   parentr<   r(   r/   r@   r,   rB   base_snippetr   snippet_settings_descriptionsetFixedWidthtrigger_text_labelr   trigger_text_cbsetEditabledescription_labelr   description_inputr   remove_trigger_cb
setToolTip
setCheckedsnippet_labelSNIPPET_INVALIDsnippet_valid_labelr   snippet_inputr   OkCancelbboxbutton	button_okbutton_cancelsetWindowTitlesetWordWrapaddItemsrQ   setCurrentIndexsetTexttextChangedconnectall
setEnabledsetup_editorr   set_languageset_textr   	addWidgetr   r   	addLayout	setLayouteditTextChangedr   acceptedacceptrejectedreject)rU   r   r$   r<   r(   r@   r/   trigger_textsr,   r=   r>   snippet_descriptionidxtext_inputsxnon_empty_textgeneral_layoutsnippet_settings_groupsettings_layoutall_settings_layouttext_layout	__class__s   `                    rK   rV   zSnippetEditor.__init__   sk    	mT+F3P
 (&,((#L%;)!j	: -33F,G)))77< #)?);"<(((. "(.(9!:!*4 "+014"9))! -@ +A 	B 	))$*=*=> $A&<$=>#)$*>*>#E -d3 %%5%8%8%5%<%<&= >	))*:*=*=>!YY--.>.E.EF 	A./0))55d;''45	7%%m4"%%d&7&78C  005&&t'7'78**223MN(($*:*:D<M<MN{;!a2g;<NN%%d+''#JE#' 	( 	
 	''1%%a(K&LM##L1 %  !B!BC!*1-B+C!D%-!!$"9"91a@!!$"6"61=!!$"8"8!Q?!!$"8"8!Q?)m%%o6%%d&<&<=(()<=  !78!md001d001d667  -  +~& 	,,44T]]C**224==A&&..t}}=		""4;;/		""4;;/ 2!3MMO "4c <s   [c                 p   | j                   j                         }| j                  j                         }| j                  j                         }d}	 t        |       | j                  j                  | j                         |dk(  r(d}| j                   j                  | j                         n%| j                   j                  | j                         || j                  v r| j                   |k7  r_|| j                  |   v r(d}| j                  j                  | j"                         n| j                  j                  | j$                         n|| j&                  k7  r_|| j                  |   v r(d}| j                  j                  | j"                         nK| j                  j                  | j$                         n%| j                  j                  | j$                         | j(                  j+                  |        y # t        $ r+ d}| j                  j                  | j                         Y w xY w)NFTr*   )r   currentTextr   r.   r   toPlainTextr   r   r   SNIPPET_VALIDSyntaxErrorr   setStyleSheetINVALID_CB_CSSVALID_CB_CSSr,   r<   INVALID_LINE_CSSVALID_LINE_CSSr(   r   r   )rU   r<   ra   r@   invalids        rK   r   zSnippetEditor.validate_  s   ++77911668))557	Cl+$$,,T-?-?@
 2G  ..t/B/BC  ..t/@/@A4,,,  L0#t'8'8'FF"G**88--/ **88++- $t'7'77'4+<+<\+JJ"&..<< 113 ..<< //1 **88++- 	!!g+.A  	CG$$,,T-A-AB	Cs   0H 0H54H5c                 &   | j                   j                         }| j                  j                         }| j                  j                         }| j                  j                         }| j                  j                  ||||       | j                  S r]   )
r   r   r   r.   r   r   r   	isCheckedr   rb   r`   s        rK   get_optionszSnippetEditor.get_options  s~    ++77911668))557//99;  *L.	J   rM   )rr   rs   rt   r   r   r   r   r   r   r   r   MIN_SIZErV   r   r   r   __classcell__r   s   @rK   rx   rx      sp    o&M)*O9N9L;;NS#H(,22 b Tdzx 
V)/ )/V!rM   rx   c                       e Zd ZdZdZddZd Zd Zej                  fdZ
ej                  fdZ e       fd	Z e       fd
Zd Zd Zy)SnippetsModelr   r   Nc                    t        j                  |        || _        g | _        g | _        i | _        g | _        g | _        d| _        t               | _
        g | _        |j                         }|2|j                         j                         j                         | _        n|| _        |2|j#                         j                         j                         | _        y || _        y )Nr*   )r	   rV   r   rE   delete_queuesnippet_map	rich_textnormal_textlettersr   labelwidthspaletter.   colorname
text_colorhighlightedTexttext_color_highlight)rU   r   r   r   r   s        rK   rV   zSnippetsModel.__init__  s    $$T*X
 .."%lln22499;DO(DO''')//1668 % )=D%rM   c                 ^    t        | j                  d       | _        | j                          y )Nc                     | j                   S r]   )r<   )r   s    rK   r|   z*SnippetsModel.sortByName.<locals>.<lambda>  s
    ANN rM   )key)sortedrE   resetrZ   s    rK   
sortByNamezSnippetsModel.sortByName  s    t}}2JK

rM   c                     |j                         st        j                  S t        j                  t	        j
                  | |            S r]   )isValidr   ItemIsEnabled	ItemFlagsr	   flagsrU   rQ   s     rK   r   zSnippetsModel.flags  s4    }}###||/55dEBCCrM   c                    |j                         }|j                         r)d|cxk  r!t        | j                        k  st	               S  t	               S | j                  |   }|j                         }|t        j                  k(  rR|| j                  k(  rt	        |j                        S || j                  k(  rt	        |j                        S t	               S |t        j                  k(  r3t	        t        t        j                  t        j                  z              S |t        j                   k(  rt	        t#        d            S t	               S )Nr   zDouble-click to view or edit)rowr   rk   rE   r   columnr   DisplayRoleTRIGGERr<   DESCRIPTIONr(   TextAlignmentRoleintAlignHCenterAlignVCenterToolTipRoler   )rU   rQ   roler   r-   r   s         rK   datazSnippetsModel.data  s    iik}}qC'D#dmm2D'D=  (E= --$2>>!%"7#7#7884+++"7#6#677
 }	 R)))s2??R__#DEFFR^^#q!?@AA}rM   c                    |t         j                  k(  ry|t         j                  k(  r3t        t	        t         j
                  t         j                  z              S t        t	        t         j                  t         j                  z              S |t         j                  k7  r
t               S |t         j                  k(  rF|| j                  k(  rt        t        d            S || j                  k(  rt        t        d            S t               S )NzTrigger textDescription)r   r   
Horizontalr   r   r   r   
AlignRightr   r   r   r   )rU   r   orientationr   s       rK   
headerDatazSnippetsModel.headerData  s    2'''bmm+"3r'H#IJJs2==2??#BCDD2>>!= "--'$,,&"1^#455D,,,"1]#344}rM   c                 ,    t        | j                        S r]   )rk   rE   r   s     rK   rowCountzSnippetsModel.rowCount  s    4==!!rM   c                      y)Nr    rv   r   s     rK   columnCountzSnippetsModel.columnCount  s    rM   c                      | j                   |   S r]   rE   )rU   row_nums     rK   r   zSnippetsModel.row  s    }}W%%rM   c                 D    | j                          | j                          y r]   )beginResetModelendResetModelrZ   s    rK   r   zSnippetsModel.reset  s    rM   NN)rr   rs   rt   r   r   rV   r   r   r   r   r   r   r
   r   r   r   r   rv   rM   rK   r   r     sZ    GK=4D
  "~~ & 57NN  )] " !, &rM   r   c                   D    e Zd Zd Zd
dZd Zdg fdZd Zd Zd Z	d	 Z
y)SnippetModelsProxyc                 .    i | _         i | _        || _        y r]   )modelsawaiting_queuer   )rU   r   s     rK   rV   zSnippetModelsProxy.__init__  s     rM   Nc                     || j                   vrLt        ||      }| j                  j                  |g       }| j	                  |||       || j                   |<   | j                   |   }|S )Nr   )to_add)r	  r   r
  rj   rG   )rU   tabler$   r   language_modelr  s         rK   	get_modelzSnippetModelsProxy.get_model  si    4;;&*5ZHN((,,Xr:FxG$2DKK!X.rM   c                     || j                   v r=| j                   |   }t        |j                        |_        | j	                  |||       y y r]   )r	  listrE   r   rG   )rU   r$   defaultsmodels       rK   reload_modelzSnippetModelsProxy.reload_model  sD    t{{"KK)E!%enn!5Ex9 #rM   c                    t        || j                  j                  | j                  j                  |      }t	        |      D ]  \  }}||_         |D ci c]  }|j                  |j                  f| }}|D ]O  }|j                  |j                  f}	|	|v r||	   }
|
j
                  |_        |||	<   ;t        |      |_        |||	<   Q t        |j                               |_        ||_        y c c}w )Nr   )rL   r   r=   r>   	enumeraterQ   r<   r(   rk   r  valuesrE   r   )rU   r$   r  rE   r  ir-   r   r   r   
to_replaces              rK   rG   z SnippetModelsProxy.load_snippets   s    4;;+A+A!%!7!7*24 $H- 	JAwGM	 !)* 69 * *  	+G'')<)<=Ck!(-
 * 0 0#*C  #K 0#*C 	+ k0023'*s    C2c                 "   t        i       }| j                  D ]  }||hz  }| j                  |   }t        |j                        dkD  rD|j                  j	                  d      }|j                          t        |j                        dkD  rD|j                  D ]  }|j                            t        | j                  j                               D ]:  }||hz  }| j                  j	                  |      }|D ]  }|j                           < |S rP   )setr	  rk   r   rj   rq   rE   ro   r  r
  keys)rU   language_changesr$   r  r-   language_queues         rK   save_snippetsz SnippetModelsProxy.save_snippets  s
   r7 		H
*![[2Nn112Q6(5599!<  n112Q6 *22 		 T005578 	H
*!0044X>N) 	
  rM   c           	      ,   t        ||||d   |d   | j                  j                  | j                  j                        }|| j                  v r| j                  |   }|j
                  }||f}||v r||   }	|	j                  |_        |||<   nt        |      |_        |||<   t        |j                               |_
        ||_        |j                          y | j                  j                  |g       }
|
j                  |       |
| j                  |<   y )Nr.   r/   r?   )rB   r   r=   r>   r	  r   rQ   rk   r  r  rE   r   r
  rl   rD   )rU   r$   r+   r(   r-   new_snippetr  r   r   old_snippetr  s              rK   update_or_enqueuez$SnippetModelsProxy.update_or_enqueue,  s   G "#34{{--{{--/ t{{"![[2N(44KK(Ck!)#.$/$5$5!#.C $'$4!#.C &*;+=+=+?&@N#)4N&  "!0044XrBN!!+.,:D)rM   c                 $   g }| j                   D ]  }| j                   |   }|g d}i }|j                  D ]t  }|j                  g d}|j                  |j                  |      }	|	d   j	                  |j
                  |j                  |j                  dd       |	||j                  <   v t        |j                               |d<   |j	                  |        t        |d      5 }
t        j                  ||
       d d d        y # 1 sw Y   y xY w)Nr7   r6   r,   r1   r4   r%   w)r	  rE   r<   rl   rD   r(   r@   r/   r  r  openjsondump)rU   filenamerE   r$   r  rF   r%   r-   default_triggerrf   fs              rK   export_snippetsz"SnippetModelsProxy.export_snippetsH  s!    	/H![[2N$! H)22 >&33$&#  (||((/ ;^,33#*#6#6 ' 4 4*1*@*@ 5  2>--.> -11B,Cj)OO-./	/2 (C  	#AIIh"	# 	# 	#s   &DDc           	         i }d}d}t        |d      5 }	 t        j                  |      }d d d        t        |      dk(  r	 t        t               t        |      dk(  rbD ]]  }|d
   }|d   }|D ]L  }|d   }|d   }|D ];  }|d   }|d   }|d   }|dz  }	 t        |       | j!                  ||||       |dz  }= N _ |||fS # t        $ r}|j                  |d<   Y d }~d }~ww xY w# 1 sw Y   xY w# t        $ rz}dg}|j                  D ]"  }	|j                  dj                  |	             $ dj                  |j                  dj                  |      |j                        }
|
|d	<   Y d }~$d }~ww xY w# t"        $ rD}|j%                  di       }dj                  |||      }|j                  ||<   ||d<   Y d }~Fd }~ww xY w)Nr   rloading)instanceschemarE   z[{0}]z{0} on instance {1}:<br>{2}r*   
validationr$   r%   r+   r,   r(   r-   r.   r   syntaxz{0}/{1}/{2})r'  r(  rC   
ValueErrormsgrk   json_validateSNIPPETS_SCHEMAr   absolute_pathrD   rX   messagejoinr1  r   r$  r   rl   )rU   r*  errorstotal_snippetsvalid_snippetsr,  rE   e
index_pathpartfull_messagelanguage_infor$   r%   re   r+   r,   description_infor(   r-   r@   syntax_errorsr   s                          rK   import_snippetsz"SnippetModelsProxy.import_snippetsf  s   (C  	*A*99Q<	* v;!	4xH v;!!) =(4(4$, =L*95G#/#?L,8 =(&6}&E"29"='.v&!+
=-l; 22 (';I*a/N===. ~v55O  *$%EEy!*	* 	* # 4(\
OO <D%%gnnT&:;<<CCIIrwwz2AJJ  (4|$44  + =,2JJx,DM"/"6"6 (';#@C12M#./<F8,=s_   C,CC8 $E>	C)C$C,$C))C,,C58	E;A/E66E;>	G	9G	G	r]   )rr   rs   rt   rV   r  r  rG   r   r$  r-  rF  rv   rM   rK   r  r    s1    
: 7;2 (0 (;8#<.6rM   r  c                   v     e Zd Zd fd	Z fdZ fdZd Zd Zd Zd Z	d Z
dd	Zd
 Zd Z fdZd Z xZS )SnippetTablec                    t         t        |           || _        || _        || _        |j                  | |j                         |      | _        | j                  | j                         | j                  t        t        |              | j                  t        j                         | j!                  t        j"                         | j%                  d       | j'                  t        j(                         | j+                         j,                  j/                  | j0                         | j3                         j5                          | j7                          y )Nr  T)r   rH  rV   _parentr$   proxyr  rA   source_modelsetModelsetItemDelegateForColumnCMDr   setSelectionBehaviorr   
SelectRowssetSelectionModeSingleSelectionsetSortingEnabledsetEditTriggersAllEditTriggersselectionModelselectionChangedr   	selectionverticalHeaderhidereset_plain)rU   r   rK  r$   r   r   s        rK   rV   zSnippetTable.__init__  s    lD*, 
!OO(.."z , ;d''(%%c<+=>!!"3">">?/??@t$.>>?..66t~~F""$rM   c                 ,    t         t        |   |       yzQt Override.N)r   rH  focusOutEventrU   r?  r   s     rK   r_  zSnippetTable.focusOutEvent  s     	lD/2rM   c                     t         t        |   |       | j                  | j	                         j                                yr^  )r   rH  focusInEvent	selectRowcurrentIndexr   r`  s     rK   rb  zSnippetTable.focusInEvent  s0    lD.q1t((*..01rM   c                     | j                          | j                          | j                  j                  j	                  d       y )NT)rb   isActiveWindowrJ  delete_snippet_btnr   r   s     rK   rY  zSnippetTable.selection  s/    ''2248rM   c                 b   | j                          | j                         j                         }| j                  j                  D cg c]  }|j                  |j                         }}|r| j                  t        t        |             | j                         j                  d       yc c}w )z%Adjust column size based on contents.TN)resizeColumnsToContentshorizontalHeaderfontMetricsrL  rE   widthr(   setColumnWidthrO  maxsetStretchLastSection)rU   fmsnamess       rK   adjust_cellszSnippetTable.adjust_cells  s    $$&""$002262C2C2L2LMQ!--(MMSZ055d; Ns   "B,c                 &   | j                   j                          | j                          | j                  | j                   j                  t
        j                         | j                         j                  j                  | j                         y r]   )rL  r   rs  sortByColumnr   r   AscendingOrderrW  rX  r   rY  rZ   s    rK   r\  zSnippetTable.reset_plain  sc    !$++33R5F5FG..66t~~FrM   c                 ,   |j                         | _        | j                  j                  | |j                               | _        | j                  | j                         | j                  j                  j                  d       | j                          y )NF)
rA   r$   rK  r  rL  rM  rJ  rg  r   r\  )rU   r$   s     rK   update_language_modelz"SnippetTable.update_language_model  sf     ( JJ00x~~7GHd''(''2259rM   c                    | j                   j                  j                  |      }| j                   j                  j	                  |       | j                   j
                  j                  |j                  |j                  f       | j                   j                          | j                          | j                  | j                   j                  t        j                         y r]   )rL  rE   rj   r   rD   r   r<   r(   r   rs  ru  r   r   rv  )rU   r   r-   s      rK   delete_snippetzSnippetTable.delete_snippet  s    ##,,005&&--g6%%))!!7#6#67	9!$++33R5F5FGrM   c                    t        | j                  j                  | j                  j                        }|s9| j	                         j                         }| j                  j                  |      }t        | j                  j                  j                               }t        |D ch c]  }|d   	 c}      }i }|D ]+  \  }}	|j                  |t        i             }
|
|	hz  }
|
||<   - t        | | j                  j                         |j                  |j                   |j"                  |j$                  ||| j                  j                  | j                  j                  
      }|j'                         r|j)                         }|j                  |j                   f}|| j                  j                  |<   t        | j                  j                  j+                               | j                  _        | j                  j/                          | j1                          | j3                  t4        t6        j8                         | j                  j;                  d       y y c c}w )N)r=   r>   r   )	r$   r<   r(   r/   r@   r   r,   r=   r>   T)rB   rJ  r=   r>   rd  r   rL  r  r   r  rl   r  rx   r$   rA   r<   r(   r/   r@   exec_r   r  rE   r   rs  ru  LANGUAGEr   rv  set_modified)rU   r"  r-   r   snippets_keysr   r   r,   r+   r(   rH   dialogr   s                rK   show_editorzSnippetTable.show_editor  s   T\\%<%<%)\\%<%<>##%))+C''++C0GT..::??ABM:qad:;$1 	9 G[#/#3#3GSW#E  [M1 $8L!	9
 tdmm.A.A.C,3,@,@+2+>+>.5.D.D,3,@,@-:,8*.,,*A*A*.,,*A*AC <<>((*G'')<)<=C18D))#.)-!!--446*8D&##%h(9(9:LL%%d+ ! ;s   'I!c                     | j                         j                         }| j                  j                         }|dz   |k(  rd}| j	                  |dz          y)z-Move to next row from currently selected row.r   Nrd  r   rL  r   rc  rU   r   rowss      rK   next_rowzSnippetTable.next_row  sM    !%%'  ))+7d?CsQwrM   c                     | j                         j                         }| j                  j                         }|dk(  r|}| j	                  |dz
         y)z1Move to previous row from currently selected row.r   r   Nr  r  s      rK   previous_rowzSnippetTable.previous_row  sI    !%%'  ))+!8CsQwrM   c                    |j                         }|t        j                  t        j                  fv r| j	                          y|t        j
                  fv r)| j                         j                  j                          y|t        j                  t        j                  t        j                  t        j                  fv rt        t        | ?  |       yt        t        | ?  |       yr^  )r   r   	Key_Enter
Key_Returnr  Key_Backtabr   	reset_btnsetFocusKey_UpKey_DownKey_Left	Key_Rightr   rH  keyPressEvent)rU   eventr   r   s      rK   r  zSnippetTable.keyPressEvent  s    iik2<<//R^^$$KKM##,,.RYYR[[",,GG,3E:,3E:rM   c                 $    | j                          yr^  )r  )rU   r  s     rK   mouseDoubleClickEventz"SnippetTable.mouseDoubleClickEvent  s    rM   r  )F)rr   rs   rt   rV   r_  rb  rY  rs  r\  rx  rz  r  r  r  r  r  r   r   s   @rK   rH  rH    sG    $32
9
<GH!,F  
;rM   rH  r]   )<ru   bisectr(  jsonschema.exceptionsr   
jsonschemar   r7  qtpy.compatr   qtpy.QtCorer   r   r	   r
   r   qtpy.QtWidgetsr   r   r   r   r   r   r   r   r   r   r   spyder.config.baser   spyder.config.managerr   spyder.config.guir   spyder.plugins.completion.apir   spyder.utils.snippets.astr   spyder.widgets.helperwidgetsr   spyder.widgets.simplecodeeditorr   rA   rR   LANGUAGE_SETbisect_left
PYTHON_POSr  SUPPORTED_LANGUAGES_PYinsertr}  ADDRrO  r8  rL   rB   rx   r   r  rH  )r   langs   00rK   <module>r     s  
   2 0 # I I@ @ @ @
 ! & & = 7 5 < )<<1!'')Q,<)<=

=V 3X>
12    j( 3 $ , !52HI$I  H$#%!*N ; %- E$ %,(0/D-:I,F 19,H4& 197L5;=M4N 9A4G5. 9B5G?.7*	0&/"	&!)(#	-	29
=AH:J: J:Zx!G x!vS' Sli6 i6XC: Ci ==$ Js   3E;F -F