o
    JAf|-  ã                   @   sb   	 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r/eƒ  dS dS )é    NÚ	dnd_startÚ
DndHandlerc                 C   s   t | |ƒ}|jd ur|S d S ©N)r   Úroot)ÚsourceÚeventÚh© r	   ú"/usr/lib/python3.10/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y!   | |_|| _Y nw || _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   s8   | j }d | _ |d urz|`W d S  ty   Y d S w d S r   )r   r   r   ©r   r   r	   r	   r
   Ú__del__   s   
ÿýzDndHandler.__del__c           	      C   sÔ   |j |j}}| j ||¡}| j}d }|d ur7z|j}W n	 ty%   Y nw |||ƒ}|d ur0n|j}|d us| j}||u rL|d urJ| 	||¡ d S d S |d urYd | _| 
||¡ |d urh| ||¡ || _d S 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   ˜   s6   
ÿ
÷
ÿ
þzDndHandler.on_motionc                 C   ó   |   |d¡ d S )Né   ©Úfinish©r   r   r	   r	   r
   r   ³   ó   zDndHandler.on_releasec                 C   r)   )Nr   r+   r-   r	   r	   r
   Úcancel¶   r.   zDndHandler.cancelr   c              
   C   sÄ   | j }| j}| j}| j}zN|`| j | j¡ | j d¡ | j|d< d  | _  | _ | _| _|d urI|r:| ||¡ n| 	||¡ W | 
||¡ d S W | 
||¡ d S W | 
||¡ d S | 
||¡ w )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.finishr   )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   r6   r	   r	   r
   r   Ò   s   zIcon.__init__é
   c                 C   sˆ   || j u r| j  | j||¡ d S | j d ur|  ¡  |d u rd 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>)r7   Úcoordsr9   ÚdetachÚtkinterZLabelr6   Zcreate_windowr8   r   Úpress)r   r7   r%   r&   r8   r9   r	   r	   r
   ÚattachÖ   s   


ÿzIcon.attachc                 C   sF   | j }|d u r	d S | j}| j}d  | _  | _| _| |¡ | ¡  d S r   )r7   r9   r8   ÚdeleteZdestroy)r   r7   r9   r8   r	   r	   r
   r?   æ   s   
zIcon.detachc                 C   s8   t | |ƒr|j| _|j| _| j | j¡\| _| _	d S d S r   )
r   r%   Úx_offr&   Úy_offr7   r>   r9   Úx_origÚy_origr-   r	   r	   r
   rA   ð   s
   
ûz
Icon.pressc                 C   s(   |   | j|¡\}}| j | j||¡ d S r   )Úwherer7   r>   r9   )r   r   r%   r&   r	   r	   r
   Úmoveø   s   z	Icon.movec                 C   s   | j  | j| j| j¡ d S r   )r7   r>   r9   rF   rG   )r   r	   r	   r
   Úputbackü   s   zIcon.putbackc                 C   s8   |  ¡ }| ¡ }|j| }|j| }|| j || j fS r   )Zwinfo_rootxZwinfo_rootyr   r    rD   rE   )r   r7   r   Zx_orgZy_orgr%   r&   r	   r	   r
   rH   ÿ   s
   

z
Icon.wherec                 C   s   d S r   r	   )r   r   r   r	   r	   r
   r1   	  ó   zIcon.dnd_endN)r:   r:   )r2   r3   r4   r   rB   r?   rA   rI   rJ   rH   r1   r	   r	   r	   r
   r5   Ð   s    


r5   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Canvasr7   Úpackr!   r   r	   r	   r
   r     s   zTester.__init__c                 C   s   | S r   r	   ©r   r   r   r	   r	   r
   r!     rK   zTester.dnd_acceptc                 C   sp   | j  ¡  | | j |¡\}}|j  |j¡\}}}}|| || }	}
| j  ||||	 ||
 ¡| _|  ||¡ d S r   )r7   Ú	focus_setrH   Úbboxr9   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   )rH   r7   rU   rV   rI   )	r   r   r   r%   r&   rW   rX   rY   rZ   r	   r	   r
   r"      s   zTester.dnd_motionc                 C   s"   | j  ¡  | j | j¡ d | _d S r   )rQ   rT   r7   rC   rV   rS   r	   r	   r
   r#   %  s   

zTester.dnd_leavec                 C   s2   |   ||¡ | | j|¡\}}| | j||¡ d S r   )r#   rH   r7   rB   )r   r   r   r%   r&   r	   r	   r
   r0   *  s   zTester.dnd_commitN)	r2   r3   r4   r   r!   r$   r"   r#   r0   r	   r	   r	   r
   rL     s    rL   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ÚquitrR   rL   rQ   r5   rB   r7   Zmainloop)r   Út1Út2Zt3Zi1Zi2Zi3r	   r	   r
   Útest0  s    
r^   Ú__main__)r@   Ú__all__r   r   r5   rL   r^   r2   r	   r	   r	   r
   Ú<module>   s    e
Y=#
ÿ