U e5d�,�@sTddlZdd�ZGdd�d�ZGdd�d�ZGdd �d �Zd d �Zed krPe�dS) �NcCst||�}|jr|SdSdS�N)� DndHandler�root)�source�event�h�r�#/usr/lib64/python3.8/tkinter/dnd.py� dnd_startls r c@sDeZdZdZdd�Zdd�Zdd�Zdd �Zdd d �Zdd d�Z dS)rNcCs�|jdkrdS|j��}z |jWdStk rD||_||_YnX||_d|_|j|_}|j|_ }d||f|_ |dp�d|_ |� |j |j �|� d|j�d|d<dS)N�z�cursor��Zhand2)Znum�widgetZ_root�_DndHandler__dnd�AttributeErrorrr�targetZinitial_button�initial_widget�release_pattern� save_cursor�bind� on_release� on_motion)�selfrrrZbuttonrrrr �__init__zs$     zDndHandler.__init__cCs2|j}d|_|r.z|`Wntk r,YnXdSr)rrr�rrrrr �__del__�szDndHandler.__del__c Cs�|j|j}}|j�||�}|j}d}|rbz |j}Wntk rHYnX|||�}|rZqb|j}q&|j}||kr�|r�|� ||�n,|r�d|_|� ||�|r�|� ||�||_dSr) �x_root�y_rootrZwinfo_containingr� dnd_acceptrZmasterr� dnd_motion� dnd_leave� dnd_enter) rr�x�yZ target_widgetr� new_target�attrZ old_targetrrr r�s.    zDndHandler.on_motioncCs|�|d�dS)N���finish�rrrrr r�szDndHandler.on_releasecCs|�|d�dS)Nrr(r*rrr �cancel�szDndHandler.cancelrc Cs�|j}|j}|j}|j}zf|`|j�|j�|j�d�|j|d<d|_|_|_|_|r||rp|� ||�n |� ||�W5|�||�XdS)Nrr ) rrrr�dnd_endrZunbindrr� dnd_commitr!)rrZcommitrrrrrrr r)�s  zDndHandler.finish)N)r) �__name__� __module__� __qualname__rrrrrr+r)rrrr rvs  rc@sNeZdZdd�Zddd�Zdd�Zdd �Zd d �Zd d �Zdd�Z dd�Z dS)�IconcCs||_d|_|_|_dSr)�name�canvas�label�id)rr2rrr r�sz Icon.__init__� cCs�||jkr |j�|j||�dS|jr.|��|s6dStj||jddd�}|j|||dd�}||_||_||_|� d|j �dS)N�Zraised)�textZ borderwidthZreliefZnw)ZwindowZanchorz ) r3�coordsr5�detach�tkinterZLabelr2Z create_windowr4r�press)rr3r#r$r4r5rrr �attach�s   �z Icon.attachcCsB|j}|sdS|j}|j}d|_|_|_|�|�|��dSr)r3r5r4�deleteZdestroy)rr3r5r4rrr r:�s z Icon.detachcCs4t||�r0|j|_|j|_|j�|j�\|_|_ dSr) r r#�x_offr$�y_offr3r9r5�x_orig�y_origr*rrr r<�s z Icon.presscCs(|�|j|�\}}|j�|j||�dSr)�wherer3r9r5)rrr#r$rrr �move�sz Icon.movecCs|j�|j|j|j�dSr)r3r9r5rArB)rrrr �putback�sz Icon.putbackcCs8|��}|��}|j|}|j|}||j||jfSr)Z winfo_rootxZ winfo_rootyrrr?r@)rr3rZx_orgZy_orgr#r$rrr rC�s   z Icon.wherecCsdSrr)rrrrrr r,sz Icon.dnd_endN)r6r6) r.r/r0rr=r:r<rDrErCr,rrrr r1�s   r1c@s<eZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd S)�TestercCs>t�|�|_tj|jddd�|_|jjddd�|j|j_dS)N�d)�widthZheightZbothr')Zfill�expand)r;ZToplevel�topZCanvasr3�packrrrrr rs zTester.__init__cCs|Srr�rrrrrr rszTester.dnd_acceptc Csp|j��|�|j|�\}}|j�|j�\}}}}||||} } |j�|||| || �|_|�||�dSr)r3� focus_setrC�bboxr5Zcreate_rectangle�dndidr ) rrrr#r$�x1�y1�x2�y2ZdxZdyrrr r"s  zTester.dnd_enterc CsF|�|j|�\}}|j�|j�\}}}}|j�|j||||�dSr)rCr3rNrOrD) rrrr#r$rPrQrRrSrrr r szTester.dnd_motioncCs"|j��|j�|j�d|_dSr)rJrMr3r>rOrLrrr r!$s zTester.dnd_leavecCs2|�||�|�|j|�\}}|�|j||�dSr)r!rCr3r=)rrrr#r$rrr r-)s zTester.dnd_commitN) r.r/r0rrr"r r!r-rrrr rF s rFcCs�t��}|�d�tj|jdd���t|�}|j�d�t|�}|j�d�t|�}|j�d�td�}td�}td �}|� |j �|� |j �|� |j �|� �dS) Nz+1+1ZQuit)Zcommandr8z+1+60z+120+60z+240+60ZICON1ZICON2ZICON3) r;ZTkZgeometryZButton�quitrKrFrJr1r=r3Zmainloop)r�t1�t2Zt3Zi1Zi2Zi3rrr �test/s        rW�__main__)r;r rr1rFrWr.rrrr �gs Y=#