
    Je
                         d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZmZ  ej                  e      Z G d d	      Z G d
 de	      Zy)z 
Language server Status widget.
    N)QPointSlot)QMenu)StatusBarWidget)_)add_actionscreate_actionc            
       `    e Zd ZdZdZdZdZe ed      e ed      e ed      e ed      iZy)ClientStatusstartingready
restartingdownN)	__name__
__module____qualname__STARTINGREADY
RESTARTINGDOWNr   STRINGS_FOR_TRANSLATION     c/usr/lib/python3/dist-packages/spyder/plugins/completion/providers/languageserver/widgets/status.pyr   r      sD    HEJD 	!J-qzAlOai	r   r   c                   v     e Zd ZdZdZ ed      ZdZ fdZd Z	ddZ
d Zd	 Z e       dd
       Zd Z xZS )LSPStatusWidgetz"Status bar widget for LSP  status.
lsp_statusz6Completions, linting, code
folding and symbols status.zLSP: {}c                    | j                   | _        t        |   |d       || _        d | _        t        |       | _        | j                  t        j                         | j                  j                  | j                         y )NT)show_spinner)status)BASE_TOOLTIPtooltipsuper__init__providercurrent_languager   menu
set_statusr   r   sig_clickedconnect	show_menu)selfparentr%   	__class__s      r   r$   zLSPStatusWidget.__init__5   sl    ((d3  $$K	 	|445 	  0r   c                      j                   y j                  } j                   j                         |j                          t	        d      j                  j                               }t         | fd      }t        ||g        j                         }t        j                  dk(  rdnd} j                  |j                         t        d|j                          |z
        z         }|j!                  |       y)	z+Display a menu when clicking on the widget.NzRestart {} Language Serverc                  >    j                   j                   d      S )NT)force)r%   restart_lsp)languager,   s   r   <lambda>z+LSPStatusWidget.show_menu.<locals>.<lambda>Q   s!    dmm77>B 8 D r   )text	triggerednt      i)r&   r'   lowerclearr   format
capitalizer	   r   contentsRectosnamemapToGlobaltopLeftr   heightpopup)r,   r'   r5   restart_actionrect	os_heightposr3   s   `      @r   r+   zLSPStatusWidget.show_menuC   s       (yy((..0

(**0&1D1D1F*G 	&D
 	D>*+  "DAb	LLNVC$++-))CDDF

3r   c                    |t         j                  t         j                  fv r5| j                  j	                          | j                  j                          n4| j                  j                          | j                  j                          |t         j                  k(  r| j                  d      | _
        nG|t         j                  t         j                  t         j                  fv r| j                  d      | _
        | j                          |9| j                  | j                  j                  |j!                                      yy)zSet LSP status.zlspserver.readylspserver.downN)r   r   r   spinnershowstarthidestopr   create_icon_iconr   set_icon	set_valueSTATUSr<   r=   r,   lsp_languager    s      r   r(   zLSPStatusWidget.set_status[   s     l++\-D-DEELLLL LLLL \'''))*;<DJ))<+@+@$//1 1))*:;DJ #NN4;;--l.E.E.GHI $r   c                     | j                   S )z*Reimplementation to get a dynamic tooltip.)r"   r,   s    r   get_tooltipzLSPStatusWidget.get_tooltipq   s    ||r   c                 $    | j                  d      S )NrJ   )rP   rX   s    r   get_iconzLSPStatusWidget.get_iconu   s     011r   c                    ||| j                   j                         }| j                  j                  j	                  |d      s| j                  d       y| j                  j                  j	                  |t        j                        }| j                  ||       | j                  d       y| j                   | j                   j                         |k7  ry| j                  | j                   |       | j                  d       y)zUpdate status message.NFT)
r&   r:   r%   clientsget
setVisibleclients_statusbarr   r   r(   rU   s      r   update_statuszLSPStatusWidget.update_statusx   s     FN00668L==((,,\4@&  88<<  )) f5% !!)%%++-=OOD116:OOD!r   c                 2    || _         | j                          y )N)r&   ra   )r,   r3   s     r   set_current_languagez$LSPStatusWidget.set_current_language   s     (r   )NN)r   r   r   __doc__IDr   r!   rT   r$   r+   r(   rY   r[   r   ra   rc   __classcell__)r.   s   @r   r   r   *   sV    ,	B	&L
 F10J,2 
V" "2r   r   )rd   loggingr?   qtpy.QtCorer   r   qtpy.QtWidgetsr   spyder.api.widgets.statusr   spyder.config.baser   spyder.utils.qthelpersr   r	   	getLoggerr   loggerr   r   r   r   r   <module>ro      sO   
  	 %   6   =			8	$ jo jr   