
    Je5j                        d Z ddlZddl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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]  } | jO                         |  c} Z(eD ch c]  }|jO                          c}Z)d Z* G d de+      Z, G d de      Z-g d\  Z.Z/Z0 G d de      Z1 G d de      Z2yc c} w c c}w )z)
Language servers configuration widgets.
    N)to_qvariant)QtSlotQAbstractTableModelQModelIndexQSize)QAbstractItemView	QCheckBox	QComboBoxQDialogQDialogButtonBox	QGroupBoxQGridLayoutQHBoxLayoutQLabel	QLineEditQSpinBox
QTableViewQVBoxLayout)_)get_font)SUPPORTED_LANGUAGES)check_connection_port)find_program)ItemDelegate)SimpleCodeEditorc              #      K   t         D ]2  } | |d       }|t        ||| |      }|j                          | 4 y w)N)default)language
set_option
get_optionremove_option)LANGUAGE_SET	LSPServerload)r!   r    r"   r   confservers         j/usr/lib/python3/dist-packages/spyder/plugins/completion/providers/languageserver/widgets/serversconfig.pyiter_serversr)   %   sL       (D1*4*4-:<F KKMLs   ?&?c                   R    e Zd ZdZdddddddi dddfdZd Zd	 Zd
 Zd Zd Z	d Z
y)r$   z;Convenience class to store LSP Server configuration values.N 	127.0.0.1$  Fc                     d| _         || _        | j                  t        v rt        | j                     | _        || _        || _        || _        || _        || _        || _        || _	        |	| _
        |
| _        || _        y Nr   )indexr   LSP_LANGUAGE_NAMEcmdargsconfigurationsporthostexternalstdior    r!   r"   )selfr   r2   r6   r5   r3   r7   r8   r4   r    r!   r"   s               r(   __init__zLSPServer.__init__4   sw     
 ==---dmm<DM	,		 
$$*    c                 Z   d}| j                   | j                  | j                  | j                  | j                  g}| j
                  r%d}| j                   | j                  | j                  g}| j                  r%d}| j                   | j                  | j                  g} |j                  | S )Nz[{0}] {1} {2} ({3}:{4})z[{0}] {1} {2}z[{0}] {1}:{2})r   r2   r3   r6   r5   r8   r7   format)r9   base_strfmt_argss      r(   __repr__zLSPServer.__repr__G   s    ,MM488TYYIItyy*::&Htxx;H==&Htyy$))<Hx))r;   c                 "    | j                         S Nr@   r9   s    r(   __str__zLSPServer.__str__S       }}r;   c                 "    | j                         S rB   rC   rD   s    r(   __unicode__zLSPServer.__unicode__V   rF   r;   c                     | j                   E| j                  | j                   j                               }| j                  j	                  |       y y rB   )r   r!   lower__dict__update)r9   states     r(   r%   zLSPServer.loadY   s>    ==$OODMM$7$7$9:EMM  ' %r;   c                 
   | j                   w| j                   j                         }t        | j                        }|j	                  d       |j	                  d       |j	                  d       | j                  ||d       y y )Nr    r!   r"   F)recursive_notification)r   rJ   dictrK   popr    )r9   r   	dict_reprs      r(   savezLSPServer.save^   sm    ==$}}**,HT]]+IMM,'MM,'MM/*OOHi38  : %r;   c                 t    | j                   ,| j                   j                         }| j                  |       y y rB   )r   rJ   r"   )r9   r   s     r(   deletezLSPServer.deleteh   s1    ==$}}**,Hx( %r;   )__name__
__module____qualname____doc__r:   r@   rE   rH   r%   rS   rU    r;   r(   r$   r$   1   sB    E $";e5 "t#+&
*(
:)r;   r$   c                   ~    e Zd ZdZdZdZdZdZdZdZ	 e
j                  d      Z e
j                  d      Z ed      Z ed	      Z ed
d      ZdZdZdddddddi dddf fd	Z e       d        Zd Z e       d        Zd Z ee       ee      d               Z ee       ee      d               Zd Z xZ S )LSPServerEditorr,   r-   r+   {}Fz^\w+([.]\w+)*$z^\S+$z
Valid JSONzInvalid JSONiR  iX  z"QLineEdit {border: 1px solid red;}z$QLineEdit {border: 1px solid green;}Nc                     t         t           |       t        d      }| _        | _        | _        |
 _        | _        t        |       _
        t                _        t        t        d              _        t        t        d             _        t!                _        t        t        d             _        t'                _        t        t        d             _        t!                _        t        t        d             _        t!                _        t         j2                          _        t        t        d             _        t9        d        _        t=        t<        j>                  t<        j@                  z         _!         jB                  jE                  t<        j>                         _#         jB                  jE                  t<        j@                         _$         jK                   jL                          jO                  t        d              j                  jQ                  d	        j                  jS                  t        d
              j                  jU                  t        d              j                  jW                  tX                jF                  j[                  d       |NtY        j\                  |      } j                  j_                  |dz           jF                  j[                  d	        j"                  ja                  d        j"                  jc                  |        j"                  jd                  jg                   fd        j(                  jS                  t        d              j(                  ji                  d        j(                  jk                  d        j(                  jm                  |        j(                  jn                  jg                   fd        j,                  jc                  |        j,                  ja                  d        j0                  jS                  t        d              j0                  jc                  |        j0                  ja                  d        j:                  jq                  d |
dd      dd	ts                       j:                  ju                  d        j:                  jS                  t        d             	 tw        jx                  |	dd	      } j:                  j}                  |        j                  jS                  t        d              j                  j                  |       t        t        d               _@         j                  jS                  t        d!              j                  j                  |       t               }t               }|j                   j                         t               }t        t        d"            }t               }|j                   j                         |j                  |       |j                  |       t        t        d#            }t               }|j                   j*                  d$d$       |j                   j,                  d$d       |j                   j.                  dd$       |j                   j0                  dd       |j                  |       |j                  |       t        t        d%            }t               }|j                   j                         |j                   j"                         t               }|j                   j$                         |j                   j(                         t               }|j                  |       |j                  |       |j                  |       |j                  |       t        t        d&            }t               }|j                   j                         |j                   j                         |j                  |       |j                  |       t               }|j                   j6                         |j                   j:                         |j                   j4                         |j                          |j                  |d'       |j                  |d(       |j                  |       |j                   jB                          j                  |        j                  d       |s( j,                  jd                  jg                   fd)        j                  j                  jg                   j                          j                  j                  jg                   j                          j                  j                  jg                   j                          j:                  jd                  jg                   j                          jB                  j                  jg                   j                          jB                  j                  jg                   j                         |I j                  d	        j                          |r j                  d	       |r j                  d	       y y y # tz        $ r d}Y w xY w)*Na  To create a new server configuration, you need to select a programming language, set the command to start its associated server and enter any arguments that should be passed to it on startup. Additionally, you can set the server's hostname and port if connecting to an external server, or to a local one using TCP instead of stdio pipes.<br><br><i>Note</i>: You can use the placeholders <tt>{host}</tt> and <tt>{port}</tt> in the server arguments field to automatically fill in the respective values.<br>zExternal serverzHost:zPort:zCommand:z
Arguments:z<b>Server Configuration:</b>zLSP server editorTz/Programming language provided by the LSP serverzSelect a languageF   r,   c                 $    j                         S rB   validater   r9   s    r(   <lambda>z*LSPServerEditor.__init__.<locals>.<lambda>   s    dmmo r;   zTCP port number of the serveri`  c                 $    j                         S rB   ra   rc   s    r(   rd   z*LSPServerEditor.__init__.<locals>.<lambda>        r;   z/absolute/path/to/commandz1Additional arguments required to start the serverz--host {host} --port {port}jsonselected
appearance)section)r   color_schemewraphighlight_current_linefontzAAdditional LSP server configuration set at runtime. JSON required   )indent	sort_keysr]   z-Check if the server runs on a remote locationz!Use stdio pipes for communicationz6Check if the server communicates using stdin/out pipesLanguagezLanguage serverr   zServer addressAdvanced      c                 $    j                         S rB   ra   )xr9   s    r(   rd   z*LSPServerEditor.__init__.<locals>.<lambda>#  rf   r;   )Tsuperr\   r:   r   parentr7   r    r!   r"   r   server_settings_descriptionr   lang_cbr
   external_cb
host_labelr   
host_input
port_labelr   port_spinner	cmd_label	cmd_input
args_label
args_input
JSON_VALID
json_label
conf_labelr   
conf_inputr   OkCancelbboxbutton	button_okbutton_cancelsetMinimumSizeMIN_SIZEsetWindowTitlesetWordWrap
setToolTipaddItemaddItemsr   
setEnabledr0   setCurrentIndexsetPlaceholderTextsetTexttextChangedconnect
setMinimum
setMaximumsetValuevalueChangedsetup_editorr   set_languagerg   dumps	Exceptionset_text
setCheckedstdio_cbr   r   	addWidgetr   	setLayoutr   	addLayout
addStretchform_statusstateChangedset_local_optionsset_stdio_optionscurrentIndexChangedlang_selection_changedrb   acceptedacceptrejectedreject) r9   ry   r   r2   r6   r5   r3   r7   r8   r4   r!   r    r"   kwargsdescriptionidx	conf_texthlayoutgeneral_vlayoutvlayout
lang_grouplang_layoutserver_groupserver_layoutaddress_grouphost_layoutport_layoutconn_info_layoutadvanced_groupadvanced_layoutconf_layout	__class__s    `                              r(   r:   zLSPServerEditor.__init__~   s+    	ot-f5	1
  $$* ,2++>( $Q'8%94@ 7,#D/ 7,$TN*."4 <1#D/ $7 #A!BC*40$%5%8%8%5%<%<&= >	))*:*=*=>!YY--.>.E.EF 	DMM*A123((44T:?@	BQ23412!!%(%++H5CLL((q1NN%%d+**;7%##++,EF$$Q'F%GH$$Q'$$U+""4(&&../HIs#))*EF""AB	D%**+IJ$$#JE#' 	% 	
 	$$V,""1 &E $F 	G	

>!tLI 	  +##=>	@##H-!!$G"H$O   $; "< 	=  ' -%-!!$"B"BC-q}-
!mdll+[)*% #4!56#1515A6A6}-,'!!$4"56!mdoo.doo.!mdoo.d//0&="";/"";/ 01-("1Z=1%-!!$"2"23!!$--0  1.)!mdoo.doo.doo.'1%+q)!!'*!!$)),' NN&&../HI%%--d.D.DE""**4+A+AB((001L1LM##++DMM:		""4;;/		""4;;/ T"MMO&&t,&&t,   e  	I	s   k& &k54k5c                    | j                   j                         }| j                  j                         }|dvr"d| _        | j                  j                  d       | j                  j                  |      s| j                  j                  d       | j                   j                  | j                         t        |      r%| j                   j                  t        d             n| j                   j                  t        d             nd| j                   j                  | j                         | j                   j                  t        d             | j                  j                  d       | j                  sU| j                   j                  |      se| j                  j                  d       | j                  j                  | j                         | j                  j                  t        d             y t#        |      e| j                  j                  d       | j                  j                  | j                         | j                  j                  t        d             n| j                  j                  | j                         | j                  j                  t        d	             | j                  j                  d       nLt%        | j&                  j                               }t)        ||      }|s| j                  j                  d       	 t+        j,                  | j.                  j1                                	 | j2                  j5                  | j6                         y # t8        $ r Y y w xY w# t:        $ rT 	 | j2                  j5                  | j<                         | j                  j                  d       Y y # t8        $ r Y Y y w xY ww xY w)
N)r,   	localhostTFzHostname must be validzUHostname or IP address of the host on which the server is running. Must be non empty.zHostname is validz?Command used to start the LSP server locally. Must be non emptyz$Program was not found on your systemz Program was found on your system)r~   textr   r7   r|   r   
HOST_REGEXmatchr   r   setStyleSheetINVALID_CSSboolr   r   	VALID_CSSNON_EMPTY_REGEXr   intr   r   rg   loadsr   toPlainTextr   r   r   r   
ValueErrorJSON_INVALID)r9   	host_textcmd_textr5   responses        r(   rb   zLSPServerEditor.validate4  s   OO((*	>>&&(66 DM''-$$Y/NN%%e,OO))$*:*:;I**1-E+FG** 7 89 OO))$..9OO&&q)<'=>NN%%d+}}''--h7))%0,,T-=-=>)) " #$ H%-))%0,,T-=-=>))! -= +> ? ,,T^^<))! -5 +6 7))$/t((--/0D,Y=H))%0	JJt2245''8  	''(9(9:))%0 		sI   -N %M2 2	M>;N =M>>N 	OA O	OOOOc                    | j                   j                  |       | j                  j                  |       | j                  j                  |       | j                  j                  |       | j
                  j                  |       | j                  j                  |       | j                  j                  |       | j                  j                  |       y rB   )
r~   r   r   r|   r   r   r   r   r   
setVisible)r9   statuss     r(   r   zLSPServerEditor.form_statusq  s    ""6*$$V,##F+  (!!&)""6*""6*""6*r;   c                    | j                   j                         }|dk(  r=| j                          | j                  d       | j                  j                  d       y | j                  j                  t        |dz
           }| j                  d       |W| j                  j                  |j                         | j                  j                  |j                         | j                  j!                  |j"                         | j$                  j!                  |j&                         | j(                  j                  |j*                         | j,                  j                  |j.                         | j0                  j3                  t5        j6                  |j8                               | j:                  j                  | j<                         | j                  j                  d       y | j                          y )Nr   Fr_   T)r{   currentIndexset_defaultsr   r   r   ry   get_server_by_langr   r~   r   r6   r   r   r5   r|   r   r7   r   r8   r   r2   r   r3   r   r   rg   r   r4   r   r   r9   r   r'   s      r(   r   z&LSPServerEditor.lang_selection_changed{  sV   ll'')!8U#NN%%e,[[334Ga4PQFT"!''4!!**6;;7  ++FOO<((6&&vzz2''4((F4I4I)JK''8))$/!!#r;   c                    | j                   j                  d       | j                  j                  d       | j                  j                  | j                         | j
                  j                  | j                         | j                  j                  | j                         | j                  j                  | j                         | j                   j                  | j                         | j                  j                  | j                         | j                   j#                  | j$                         | j&                  j                  | j(                         y Nr+   )r   r   r~   r   DEFAULT_HOSTr   r   DEFAULT_PORTr|   r   DEFAULT_EXTERNALr   DEFAULT_STDIODEFAULT_CMDr   DEFAULT_ARGSr   r   DEFAULT_CONFIGURATIONr   r   rD   s    r(   r   zLSPServerEditor.set_defaults  s    $$R(%%b) 1 12""4#4#45##D$9$9:  !3!34t//0 1 12  !;!;<0r;   c                 P   || _         | j                  j                  d       | j                  j                  d       |r| j                  j                  d       | j                  j	                  d       | j                  j                  d       | j
                  j                  j                          | j
                  j                  d       | j
                  j                  d       n| j                  j                  d       | j                  j                  d       | j
                  j                  d       | j
                  j                  d       | j
                  j                  j                  | j                         	 | j                          y # t        $ r Y y w xY wNTFr+   )r7   r   r   r   r   r   r   
disconnectr   r   r   rb   r   r9   enableds     r(   r   z!LSPServerEditor.set_local_options  s(     !!$'""4(NN%%e,NN((,OO&&u-MM&&113MM$$U+MM$$U+NN%%d+OO&&t,MM$$T*MM$$U+MM&&..t/E/EF	MMO 		s   F 	F%$F%c                    || _         |r| j                  j                  d       | j                  j                  d       | j                  j
                  j                          | j                  j                  d       | j                  j                  d       | j                  j                  d       | j                  j                  d       | j                  j                  d       n| j                  j                  d       | j                  j                  d       | j                  j                  d       | j                  j                  d       | j                  j
                  j                  | j                         | j                  j                  d       | j                  j                  d       	 | j                          y # t        $ r Y y w xY wr   )r8   r   r   r   r|   r   r   r   r~   r   r   r   r   rb   r   r   s     r(   r   z!LSPServerEditor.set_stdio_options  s\    
NN%%d+OO&&t,))446''.''.OO))"-OO&&u-((/NN%%d+OO&&t,''.''-))11$2H2HIOO&&t,((.	MMO 		s   >G 	GGc                 z   | j                   j                         }t        |dz
     }| j                  j	                         }t        | j                  j                               }| j                  j                         }| j                  j                         }| j                  j	                         }| j                  j	                         }t        j                  | j                  j!                               }	t#        |j%                         |||||||	| j&                  | j(                  | j*                        }
|
S )Nr_   )r   r2   r3   r6   r5   r7   r8   r4   r!   r    r"   )r{   r   r   r~   r   r   r   valuer|   	isCheckedr   r   r   rg   r   r   r   r$   rJ   r!   r    r"   )r9   language_idxr   r6   r5   r7   r8   r3   r2   r4   r'   s              r(   get_optionszLSPServerEditor.get_options  s    ||002&|a'78##%4$$**,-##--/'')##%nn!!#DOO$?$?$ABHNN$4#D $4(!&~&*oo&*oo)-););= r;   )!rV   rW   rX   r   r   r   r   r   r   r   recompiler   r   r   r   r   r   r   r   r   r:   r   rb   r   r   r   r   r   r   r   r   __classcell__r   s   @r(   r\   r\   n   s   LLKL M-.J bjj*O<J^$LS#H6K6I(,";e5 "t#t-l 
V: :x+ 
V$ $,
1 
$Z	#Y  , 
$Z	#Y  0r;   r\   )r   r_   rt   c                       e 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)LSPServersModelNc                    t        j                  |        || _        g | _        i | _        g | _        g | _        d| _        t               | _	        g | _
        |j                         }|2|j                         j                         j                         | _        n|| _        |2|j!                         j                         j                         | _        y || _        y r   )r   r:   _parentservers
server_map	rich_textnormal_textlettersr   labelwidthspaletter   colorname
text_colorhighlightedTexttext_color_highlight)r9   ry   r  r
  r  s        r(   r:   zLSPServersModel.__init__  s    $$T*X
 .."%lln22499;DO(DO''')//1668 % )=D%r;   c                 ^    t        | j                  d       | _        | j                          y)Qt Override.c                     | j                   S rB   r   )rw   s    r(   rd   z,LSPServersModel.sortByName.<locals>.<lambda>  s
    !** r;   )keyN)sortedr   resetrD   s    r(   
sortByNamezLSPServersModel.sortByName  s    dll0DE

r;   c                     |j                         st        j                  S t        j                  t	        j
                  | |            S r  )isValidr   ItemIsEnabled	ItemFlagsr   flagsr9   r0   s     r(   r  zLSPServersModel.flags  s4    }}###||/55dEBCCr;   c                 6   |j                         }|j                         r)d|cxk  r!t        | j                        k  st	               S  t	               S | j                  |   }|j                         }|t        j                  k(  r|t        k(  rt	        |j                        S |t        k(  r1dj                  |j                  |j                        }t	        |      S |t        k(  rZd}|j                  | j                        }|j                   rd}t	        |j                  |j"                  |j$                              S t	               S |t        j&                  k(  r3t	        t)        t        j*                  t        j,                  z              S t	               S )r  r   z{0}:{1}z,&nbsp;<tt style="color:{0}">{{0}} {{1}}</tt>z&nbsp;<tt>External server</tt>)rowr  lenr   r   columnr   DisplayRoleLANGUAGEr   ADDRr=   r6   r5   CMDr  r7   r2   r3   TextAlignmentRoler   AlignHCenterAlignVCenter)r9   r0   roler  r'   r  r   s          r(   datazLSPServersModel.data  s0   iik}}qC'C#dll2C'C=  (D= c"2>>!!"6??334 ''V[[A"4((3E{{4??3??;D"4;;vzz6;;#GHH } R)))s2??R__#DEFF}r;   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(  rW|t        k(  rt        t        d            S |t        k(  rt        t        d            S |t        k(  rt        t        d            S t               S )r  rr   AddresszCommand to execute)r   r"  
Horizontalr   r   r#  r$  
AlignRightr  r  r   r   r!  )r9   rj   orientationr%  s       r(   
headerDatazLSPServersModel.headerData%  s    2'''bmm+"3r'H#IJJs2==2??#BCDD2>>!= "--'(""1Z=11D"1Y<00C"1%9#:;;}r;   c                 ,    t        | j                        S r  )r  r   r  s     r(   rowCountzLSPServersModel.rowCount6  s    4<<  r;   c                      y)r  ru   rZ   r  s     r(   columnCountzLSPServersModel.columnCount:  s    r;   c                      | j                   |   S )z@Get row based on model index. Needed for the custom proxy model.)r   )r9   row_nums     r(   r  zLSPServersModel.row>  s    ||G$$r;   c                 D    | j                          | j                          y)z5"Reset model to take into account new search letters.N)beginResetModelendResetModelrD   s    r(   r  zLSPServersModel.resetB  s    r;   )NN)rV   rW   rX   r:   r  r  r   r  r&  r,  r   r.  r0  r  r  rZ   r;   r(   r   r     sP    =4
D  "~~ 2 57NN " )] ! !, %r;   r   c                   ~     e Zd ZddZ fdZ fdZd Z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 )LSPServerTablec                    t        j                  | |       || _        g | _        t	        | |      | _        | j                  | j
                         | j                  t        t        |              | j                  t        j                         | j                  t        j                         | j                  d       | j!                  t        j"                         | j%                         j&                  j)                  | j*                         | j-                         j/                          | j1                          y )N)r  T)r   r:   r   delete_queuer   source_modelsetModelsetItemDelegateForColumnr!  r   setSelectionBehaviorr	   
SelectRowssetSelectionModeSingleSelectionsetSortingEnabledsetEditTriggersAllEditTriggersselectionModelselectionChangedr   	selectionverticalHeaderhideload_servers)r9   ry   r  s      r(   r:   zLSPServerTable.__init__I  s    D&)+DZHd''(%%c<+=>!!"3">">?/??@t$.>>?..66t~~F""$r;   c                 ,    t         t        |   |       yr  N)rx   r7  focusOutEventr9   er   s     r(   rL  zLSPServerTable.focusOutEventY  s     	nd1!4r;   c                     t         t        |   |       | j                  | j	                         j                                yrK  )rx   r7  focusInEvent	selectRowr   r  rM  s     r(   rP  zLSPServerTable.focusInEvent_  s0    nd03t((*..01r;   c                     | j                          | j                          | j                  j                  j	                  d       y)zUpdate selected row.TN)rL   isActiveWindowr   
delete_btnr   r  s     r(   rF  zLSPServerTable.selectiond  s/    **40r;   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fontMetricsr:  r   widthr2   setColumnWidthr!  maxsetStretchLastSection)r9   fmsnamess       r(   adjust_cellszLSPServerTable.adjust_cellsj  s    $$&""$002*.*;*;*C*CDQ!%%DDSZ055d; Es   "B,c                 L    | j                   j                  j                  |      S rB   )r:  r   get)r9   langs     r(   r   z!LSPServerTable.get_server_by_langs  s      ++//55r;   c                 F   t        t        | j                  j                  | j                  j                  | j                  j
                              }t        |      D ]2  \  }}||_        t        |j                  j                            |_	        4 |D ci c]  }|j                  | }}|| j                  _        || j                  _        | j                  j                          | j                          | j!                  t"        t$        j&                         y c c}w rB   )listr)   r   r!   r    r"   	enumerater0   r1   r   rJ   r:  r   r   r  r`  sortByColumnr  r   AscendingOrder)r9   r   ir'   rw   r   s         r(   rI  zLSPServerTable.load_serversv  s    |DLL$;$;$(LL$;$;$(LL$>$>@ A #7+ 	IIAvFL/0E0E0GHFO	I .55ajj!m5
5$+!'1$!(B$5$56 6s   Dc                    t        i       }| j                  j                  D ]0  }||j                  j	                         hz  }|j                          2 t        | j                        dkD  rb| j                  j                  d      }||j                  j	                         hz  }|j                          t        | j                        dkD  rb|S r/   )
setr:  r   r   rJ   rS   r  r9  rQ   rU   )r9   language_setr'   s      r(   save_serverszLSPServerTable.save_servers  s    2w''// 	FV__22455LKKM	 $##$q(&&**1-FV__22455LMMO $##$q( r;   c                 ~   | j                   j                  j                  |      }| j                  j	                  |       | j                   j
                  j                  |j                         | j                   j                          | j                          | j                  t        t        j                         y rB   )r:  r   rQ   r9  appendr   r   r  r`  rg  r  r   rh  r   s      r(   delete_serverzLSPServerTable.delete_server  s    ""**..s3  ($$((9!(B$5$56r;   c                     t        fdt        | j                  j                        D        d       }|| j	                  |       y y )Nc              3   F   K   | ]  \  }}|j                   k(  r|  y wrB   r  ).0ri  rw   r   s      r(   	<genexpr>z7LSPServerTable.delete_server_by_lang.<locals>.<genexpr>  s(      /$!QzzX-  /s   !)nextrf  r:  r   rp  )r9   r   r   s    ` r(   delete_server_by_langz$LSPServerTable.delete_server_by_lang  sE     /)D,=,=,E,E"F /046?s# r;   c                    t        | j                  j                  | j                  j                  | j                  j                        }|s9| j                         j                         }| j                  j                  |      }t        | fi |j                  }|j                         r|j                         }|| j                  j                  |j                  <   t        | j                  j                  j                               | j                  _        | j                  j#                          | j%                          | j'                  t(        t*        j,                         | j                  j/                  d       y y )N)r!   r    r"   T)r$   r   r!   r    r"   r   r  r:  r\   rK   exec_r   r   r   re  valuesr   r  r`  rg  r  r   rh  set_modified)r9   
new_serverr'   r   dialogs        r(   show_editorzLSPServerTable.show_editor  s   dll&=&=&*ll&=&=)-)C)CE ##%))+C&&**3/F 99<<>'')F<BD((9(,!!,,335)7D%##%h(9(9:LL%%d+ r;   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r   r  r:  r.  rQ  r9   r  rowss      r(   next_rowzLSPServerTable.next_row  sM    !%%'  ))+7d?CsQwr;   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      r(   previous_rowzLSPServerTable.previous_row  sI    !%%'  ))+!8CsQwr;   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rK  )r  r   	Key_Enter
Key_Returnr}  Key_Backtabry   	reset_btnsetFocusKey_UpKey_DownKey_Left	Key_Rightrx   r7  keyPressEvent)r9   eventr  r   s      r(   r  zLSPServerTable.keyPressEvent  s    iik2<<//R^^$$KKM##,,.RYYR[[",,GG.$5e<.$5e<r;   c                 $    | j                          yrK  )r}  )r9   r  s     r(   mouseDoubleClickEventz$LSPServerTable.mouseDoubleClickEvent  s    r;   rB   )F)rV   rW   rX   r:   rL  rP  rF  r`  r   rI  rm  rp  rv  r}  r  r  r  r  r   r   s   @r(   r7  r7  H  sN     52
1<67	7$,$  
=r;   r7  )3rY   rg   r   qtpy.compatr   qtpy.QtCorer   r   r   r   r   qtpy.QtWidgetsr	   r
   r   r   r   r   r   r   r   r   r   r   r   spyder.config.baser   spyder.config.guir   spyder.plugins.completion.apir   spyder.utils.miscr   spyder.utils.programsr   spyder.widgets.helperwidgetsr   spyder.widgets.simplecodeeditorr   rJ   r1   r#   r)   objectr$   r\   r  r   r!  r   r7  )rw   rc  s   00r(   <module>r     s   
  	 $   ? ? ? ? ! & = 3 . 5 <+>?aQWWY\? )<=

=	:) :)zrg rj   $_) _DEZ EO @=s   +C
C!