a
    ãze-  ã                   @   s\   d dl Z ddgZdd„ ZG dd„ dƒZG dd„ dƒZG dd	„ d	ƒZd
d„ ZedkrXeƒ  dS )é    NÚ	dnd_startÚ
DndHandlerc                 C   s   t | |ƒ}|jr|S d S d S ©N)r   Úroot)ÚsourceÚeventÚh© r	   ú!/usr/lib/python3.9/tkinter/dnd.pyr   m   s    
c                   @   sD   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zdd
d„Zddd„Z	dS )r   Nc                 C   s®   |j dkrd S |j ¡ }z|j W d S  tyB   | |_|| _Y n0 || _d | _|j  | _}|j | _	}d||f | _
|d p€d| _| | j
| j¡ | d| j¡ d|d< d S )Né   z<B%d-ButtonRelease-%d>ÚcursorÚ ú<Motion>Zhand2)ÚnumÚwidgetÚ_rootÚ_DndHandler__dndÚAttributeErrorr   r   ÚtargetZinitial_buttonÚinitial_widgetÚrelease_patternÚsave_cursorÚbindÚ
on_releaseÚ	on_motion)Úselfr   r   r   Zbuttonr   r	   r	   r
   Ú__init__{   s$    

zDndHandler.__init__c                 C   s0   | j }d | _ |r,z|`W n ty*   Y n0 d S r   )r   r   r   ©r   r   r	   r	   r
   Ú__del__   s    zDndHandler.__del__c           	      C   s°   |j |j }}| j ||¡}| j}d }|r`z
|j}W n tyF   Y n0 |||ƒ}|rXq`|j}q&| j}||u r€|r¬| 	||¡ n,|r–d | _| 
||¡ |r¬| ||¡ || _d S r   )Úx_rootÚy_rootr   Zwinfo_containingr   Ú
dnd_acceptr   Zmasterr   Ú
dnd_motionÚ	dnd_leaveÚ	dnd_enter)	r   r   ÚxÚyZtarget_widgetr   Ú
new_targetÚattrZ
old_targetr	   r	   r
   r   ˜   s.    

zDndHandler.on_motionc                 C   s   |   |d¡ d S )Né   ©Úfinish©r   r   r	   r	   r
   r   ³   s    zDndHandler.on_releasec                 C   s   |   |d¡ d S )Nr   r*   r,   r	   r	   r
   Úcancel¶   s    zDndHandler.cancelr   c              
   C   sž   | j }| j}| j}| j}zr|`| j | j¡ | j d¡ | j|d< d  | _  | _ | _| _|r||rp| ||¡ n| 	||¡ W | 
||¡ n| 
||¡ 0 d S )Nr   r   )r   r   r   r   r   Zunbindr   r   Ú
dnd_commitr#   Údnd_end)r   r   Zcommitr   r   r   r   r	   r	   r
   r+   ¹   s    
zDndHandler.finish)N)r   )
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r-   r+   r	   r	   r	   r
   r   w   s   	
c                   @   sN   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚIconc                 C   s   || _ d  | _ | _| _d S r   )ÚnameÚcanvasÚlabelÚid)r   r4   r	   r	   r
   r   Ò   s    zIcon.__init__é
   c                 C   s€   || j u r | j  | j||¡ d S | j r.|  ¡  |s6d S tj|| jddd}|j|||dd}|| _ || _|| _| 	d| j
¡ d S )Né   Zraised)ÚtextZborderwidthZreliefZnw)ZwindowÚanchorz<ButtonPress>)r5   Úcoordsr7   ÚdetachÚtkinterZLabelr4   Zcreate_windowr6   r   Úpress)r   r5   r%   r&   r6   r7   r	   r	   r
   ÚattachÖ   s    

ÿzIcon.attachc                 C   sB   | j }|sd S | j}| j}d  | _  | _| _| |¡ | ¡  d S r   )r5   r7   r6   ÚdeleteZdestroy)r   r5   r7   r6   r	   r	   r
   r=   æ   s    
zIcon.detachc                 C   s4   t | |ƒr0|j| _|j| _| j | j¡\| _| _	d S r   )
r   r%   Úx_offr&   Úy_offr5   r<   r7   Úx_origÚy_origr,   r	   r	   r
   r?   ð   s    
z
Icon.pressc                 C   s(   |   | j|¡\}}| j | j||¡ d S r   )Úwherer5   r<   r7   )r   r   r%   r&   r	   r	   r
   Úmoveø   s    z	Icon.movec                 C   s   | j  | j| j| j¡ d S r   )r5   r<   r7   rD   rE   )r   r	   r	   r
   Úputbackü   s    zIcon.putbackc                 C   s8   |  ¡ }| ¡ }|j| }|j| }|| j || j fS r   )Zwinfo_rootxZwinfo_rootyr   r    rB   rC   )r   r5   r   Zx_orgZy_orgr%   r&   r	   r	   r
   rF   ÿ   s
    

z
Icon.wherec                 C   s   d S r   r	   )r   r   r   r	   r	   r
   r/   	  s    zIcon.dnd_endN)r8   r8   )r0   r1   r2   r   r@   r=   r?   rG   rH   rF   r/   r	   r	   r	   r
   r3   Ð   s   


r3   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTesterc                 C   s>   t  |¡| _t j| jddd| _| jjddd | j| j_d S )Néd   )ÚwidthZheightZbothr)   )ÚfillÚexpand)r>   ZToplevelÚtopZCanvasr5   Úpackr!   r   r	   r	   r
   r     s    zTester.__init__c                 C   s   | S r   r	   ©r   r   r   r	   r	   r
   r!     s    zTester.dnd_acceptc                 C   sp   | j  ¡  | | j |¡\}}|j  |j¡\}}}}|| ||  }	}
| j  ||||	 ||
 ¡| _|  ||¡ d S r   )r5   Ú	focus_setrF   Úbboxr7   Zcreate_rectangleÚdndidr"   )r   r   r   r%   r&   Úx1Úy1Úx2Úy2ZdxZdyr	   r	   r
   r$     s    
zTester.dnd_enterc           	      C   sF   |  | j|¡\}}| j | j¡\}}}}| j | j|| || ¡ d S r   )rF   r5   rR   rS   rG   )	r   r   r   r%   r&   rT   rU   rV   rW   r	   r	   r
   r"      s    zTester.dnd_motionc                 C   s"   | j  ¡  | j | j¡ d | _d S r   )rN   rQ   r5   rA   rS   rP   r	   r	   r
   r#   %  s    
zTester.dnd_leavec                 C   s2   |   ||¡ | | j|¡\}}| | j||¡ d S r   )r#   rF   r5   r@   )r   r   r   r%   r&   r	   r	   r
   r.   *  s    zTester.dnd_commitN)	r0   r1   r2   r   r!   r$   r"   r#   r.   r	   r	   r	   r
   rI     s   rI   c                  C   sª   t  ¡ } |  d¡ t j| jdd ¡  t| ƒ}|j d¡ t| ƒ}|j d¡ t| ƒ}|j d¡ tdƒ}tdƒ}td	ƒ}| 	|j
¡ | 	|j
¡ | 	|j
¡ |  ¡  d S )
Nz+1+1ZQuit)Zcommandr:   z+1+60z+120+60z+240+60ZICON1ZICON2ZICON3)r>   ZTkZgeometryZButtonÚquitrO   rI   rN   r3   r@   r5   Zmainloop)r   Út1Út2Zt3Zi1Zi2Zi3r	   r	   r
   Útest0  s     
r[   Ú__main__)r>   Ú__all__r   r   r3   rI   r[   r0   r	   r	   r	   r
   Ú<module>f   s   
Y=#