B
    νvV                 @   s:   d Z ddlmZmZ G dd deZG dd dejZdS )zD A generic Emacs-style kill ring, as well as a Qt-specific version.
    )QtCoreQtGuic               @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )KillRingz& A generic Emacs-style kill ring.
    c             C   s   |    d S )N)clear)self r   2lib/python3.7/site-packages/qtconsole/kill_ring.py__init__   s    zKillRing.__init__c             C   s   d| _ g | _dS )z Clears the kill ring.
        N)_index_ring)r   r   r   r   r      s    zKillRing.clearc             C   s   | j | dS )z, Adds some killed text to the ring.
        N)r   append)r   textr   r   r   kill   s    zKillRing.killc             C   s   t | j| _|  S )zr Yank back the most recently killed text.

        Returns
        -------
        A text string or None.
        )lenr   r   rotate)r   r   r   r   yank    s    zKillRing.yankc             C   s(   |  j d8  _ | j dkr$| j| j  S dS )z{ Rotate the kill ring, then yank back the new top.

        Returns
        -------
        A text string or None.
           r   N)r   r   )r   r   r   r   r   *   s    
zKillRing.rotateN)	__name__
__module____qualname____doc__r	   r   r   r   r   r   r   r   r   r      s   
r   c                   sP   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
  ZS )
QtKillRingz/ A kill ring attached to Q[Plain]TextEdit.
    c                sP   t |tjtjfsttt|   t | _	d| _
d| _|| _|j| j dS )zD Create a kill ring attached to the specified Qt text edit.
        NF)
isinstancer   Z	QTextEditZQPlainTextEditAssertionErrorsuperr   r	   r   r   
_prev_yank_skip_cursor
_text_editZcursorPositionChangedZconnect_cursor_position_changed)r   Z	text_edit)	__class__r   r   r	   >   s    zQtKillRing.__init__c             C   s   | j   d| _dS )z Clears the kill ring.
        N)r   r   r   )r   r   r   r   r   K   s    
zQtKillRing.clearc             C   s   | j | dS )z, Adds some killed text to the ring.
        N)r   r   )r   r   r   r   r   r   Q   s    zQtKillRing.killc             C   s"   |  }|r|  | | dS )z5 Kills the text selected by the give cursor.
        N)ZselectedTextZremoveSelectedTextr   )r   cursorr   r   r   r   kill_cursorV   s    zQtKillRing.kill_cursorc             C   s2   | j  }|r.d| _| j }|| || _dS )z2 Yank back the most recently killed text.
        TN)r   r   r   r   
textCursor
insertTextr   )r   r   r!   r   r   r   r   ^   s    


zQtKillRing.yankc             C   sV   | j rR| j }|rRd| _| j }|jtjj	tjj
t| j d || || _ dS )z; Rotate the kill ring, then yank back the new top.
        T)nN)r   r   r   r   r   r#   ZmovePositionr   ZQTextCursorZLeftZ
KeepAnchorr   r$   )r   r   r!   r   r   r   r   h   s    



zQtKillRing.rotatec             C   s   | j rd| _ nd | _d S )NF)r   r   )r   r   r   r   r   |   s    z#QtKillRing._cursor_position_changed)r   r   r   r   r	   r   r   r"   r   r   r   __classcell__r   r   )r    r   r   6   s   
r   N)r   Zqtconsole.qtr   r   objectr   ZQObjectr   r   r   r   r   <module>   s   (