
    []c                     b    d Z ddlZddlZddlmZ ddlmZmZmZ  G d dej                        Z	y)z.A dropdown completer widget for the qtconsole.    N)QT6)QtCoreQtGui	QtWidgetsc                   r     e Zd ZdZd fd	Z fdZ fdZ fdZ fdZddZ	d Z
d	 Zd
 Zd Zd Z xZS )CompletionWidgetz& A widget for GUI tab completion.
    c                 J   |j                   }t        |t        j                  t        j                  f      sJ t
        |   |       || _        |dkD  r|n| j                         j                         | _
        | j                  t        j                  j                         | j                  t        j                  j                         | j!                  t        j                  j"                         | j%                  t&        j(                  j*                         | j-                  t&        j(                  j.                         |j1                         }| j3                  t&        j(                  j4                         |j3                  |       | j7                  | j                         | j9                  t        j:                  j<                         | j?                  t        j:                  j@                         | jB                  jE                  | jF                         y)zg Create a completion widget that is attached to the specified Qt
            text edit widget.
        )parentr   N)$_control
isinstancer   	QTextEditQPlainTextEditsuper__init__
_text_editsizeHintheight_height_maxsetEditTriggersQAbstractItemViewNoEditTriggerssetSelectionBehavior
SelectRowssetSelectionModeSingleSelectionsetWindowFlagsr   QtPopupsetAttributeWA_StaticContentsfocusPolicysetFocusPolicyNoFocussetFocusProxysetFrameShadowQFramePlainsetFrameShapeStyledPanelitemActivatedconnect_complete_current)selfconsole_widgetr   	text_editoriginal_policy	__class__s        =/usr/lib/python3/dist-packages/qtconsole/completion_widget.pyr   zCompletionWidget.__init__   s{    #++	)i&9&99;S;S%TUUU/#%+aZ6T]]_5K5K5MY88GGH!!)"="="H"HIi99IIJ 	FIIOO,&))556#//1FII--.  1 	4??+I,,2239++778""4#9#9:    c                 N   || u r|j                         t        j                  j                  k(  rf| j	                  |j                               }t        j                  j                  |      }|r| j                  |      s|| u ry| j                          t        | 1  ||      S )zj Reimplemented to handle mouse input and to auto-hide when the
            text edit loses focus.
        F)typer   QEventMouseButtonPressmapToGlobalposr   QApplicationwidgetAtisAncestorOfcancel_completionr   eventFilter)r-   objeventr9   targetr1   s        r2   r>   zCompletionWidget.eventFilter2   s     $;zz|v}}===&&uyy{3"//88=t008FdN **,w"3..r3   c                    |j                         }|t        j                  j                  t        j                  j                  t        j                  j
                  fv r| j                          y |t        j                  j                  k(  r| j                          y |t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  fv rt        | A  |      S t"        j$                  j'                  | j(                  |       y N)keyr   r   
Key_Return	Key_EnterKey_Tabr,   
Key_EscapehideKey_UpKey_Down
Key_PageUpKey_PageDownKey_HomeKey_Endr   keyPressEventr   r:   	sendEventr   )r-   r@   rD   r1   s      r2   rP   zCompletionWidget.keyPressEventA   s    iik699'')<)<99$$& &""$FII(((IIKVYY%%vyy'9'9YY))699+A+AYY''):):< < 7(//"",,T__eDr3   c                     t         |   |       	 | j                  j                  j	                  | j
                         | j                  |        y# t        $ r Y w xY w)zG Reimplemented to disconnect signal handlers and event filter.
        N)r   	hideEventr   cursorPositionChanged
disconnect_update_current	TypeErrorremoveEventFilterr-   r@   r1   s     r2   rS   zCompletionWidget.hideEventS   sY     	% 	OO11<<T=Q=QR 	t$  		s   /A 	AAc                     t         |   |       | j                  j                  j	                  | j
                         | j                  |        y)zD Reimplemented to connect signal handlers and event filter.
        N)r   	showEventr   rT   r+   rV   installEventFilterrY   s     r2   r[   zCompletionWidget.showEvent]   s>     	% --55d6J6JK%r3   c           
      B   | j                  |      }| j                          g }|D ]/  }t        j                  j	                  t        j                  j                  |j                  dd                  sLt        j                  j                  t        j                  j                  |j                  dd                  r"|j                  |j                  dd             t        j                         }|j                  t        j                  j                  |       |j                  |j!                  d      d          | j#                  |       2 t        j                  j%                  t        j                  j'                  |            }|D ]{  }	t        j                         }|j                  t        j                  j                  |	       |r|	j!                  |      d   }
n|	}
|j                  |
       | j#                  |       } t(        r| j+                         j-                         }n-t        j.                  j1                         j-                  |       }|j3                         }t5        t7        | j8                  |dz
              }||j;                         z
  |z
  dk  r{| j<                  j?                  | j<                  jA                         jC                               }|j;                         }|jE                  t5        |t7        ||dz
        z
               | jG                  d      | jI                         jK                         jM                         z   d| jO                         z  z   }| jQ                  |jS                         |j;                         ||       |jU                  tV        jX                  jZ                  |	       |j]                         | _/        | ja                  d       | jc                          | je                          y
)ze Shows the completion widget with 'items' at the position specified
            by 'cursor'.
        " .2   r   
      )nN)3_get_top_left_positionclearospathisfileabspathreplaceisdirappendr   QListWidgetItemsetDatar   r   UserRolesetTextsplitaddItemdirnamecommonprefixr   screenavailableGeometryr:   desktopr   intminr   yr   r8   
cursorRecttopRightsetYsizeHintForColumnverticalScrollBarr   width
frameWidthsetGeometryxmovePositionr   QTextCursorLeftposition_start_positionsetCurrentRowraise_show)r-   cursoritemsprefix_lengthpoint
path_itemsitem	list_itemcommon_prefix	path_itemtextscreen_rectscreen_heightr   pyws                   r2   
show_itemszCompletionWidget.show_itemsh   s    ++F3


 	(D rwwt||D"/EFGGGMM"''//$,,tR2H"IJ!!$,,tR"89%557	!!&))"4"4d;!!$**S/""56Y'	( (<(<Z(HI# 	$I!113Ifii00)< }5b9 d#LL#	$ ++-99;K#0088:LLTRK#**,S))=2+=>?UWWY&/14OO//0J0J0L0U0U0WXEBJJs2FBG 4456##A&##%..06689""# 	EGGIq&9 	E--22mD%01		r3   c                     | j                   j                  | j                   j                         j                               S )z0 Get top left position for this widget.
        )r   r8   r}   bottomRightr-   r   s     r2   rf   z'CompletionWidget._get_top_left_position   s/     **4??+E+E+G+S+S+UVVr3   c                     | j                         j                  t        j                  j                        }| j                         j                  |       | j                          y)zB Perform the completion with the currently selected item.
        N)currentItemdatar   r   rq   _current_text_cursor
insertTextrI   )r-   r   s     r2   r,   z"CompletionWidget._complete_current   sG     !&&vyy'9'9:!!#..t4		r3   c                     | j                   j                         }|j                         | j                  k\  r4|j	                  | j                  t
        j                  j                         |S )zn Returns a cursor with text between the start position and the
            current position selected.
        )r   
textCursorr   r   setPositionr   r   
KeepAnchorr   s     r2   r   z%CompletionWidget._current_text_cursor   sU     ++-?? 4 44t33$00;;=r3   c                    | j                   j                         }| j                  |      }|j                  | j	                                | j                  |       | j                         j                         j                         }|rm| j                  |t        j                  j                  t        j                  j                  z        }|r| j                  |d          y| j                          y| j                          y)zh Updates the current item based on the current text and the
            position of the widget.
        r   N)r   r   rf   r   r|   mover   	selectiontoPlainText	findItemsr   r   MatchStartsWithMatchCaseSensitivesetCurrentItemrI   )r-   r   r   prefixr   s        r2   rV   z CompletionWidget._update_current   s    
 ++-++F3

4668		% **,668DDFNN6FII,E,E,2II,H,H-I KE##E!H-		IIKr3   c                 $    | j                          y rC   )rI   )r-   s    r2   r=   z"CompletionWidget.cancel_completion   s    		r3   )r   )__name__
__module____qualname____doc__r   r>   rP   rS   r[   r   rf   r,   r   rV   r=   __classcell__)r1   s   @r2   r   r   
   sC    ;@/E$%&4tW
,r3   r   )
r   rh   sysqtpyr   r   r   r   QListWidgetr    r3   r2   <module>r      s+    4 	 
  ) )Ey,, Er3   