Current File : //usr/local/apps/python3/lib/python3.11/idlelib/__pycache__/multicall.cpython-311.pyc
�

�Ke�H���dZddlZddlZddlZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZd
ZdZdZdZ ej!dkr	dZ"eeee fZ#ndZ"eeeefZ#e$d�e%e&e"����D����Z'd Z(Gd!�d"��Z)e%de&e"��z��Z*d#�e*D��Z+d$�Z,e,e*��Z-gZ.e*D]CZ/dZ0e%e&e"����D]Z1de1ze/zre0e#e1zZ0�e.�2e0���DGd%�d&��Z3d'Z4e3fdze)fe&e4��dz
zzZ5e$d(�e%e&e4����D����Z6ej7d)��Z8ej7d*��Z9d+�Z:d,�Z;iZ<d-�Z=d.�Z>e?d/kr'dd0l@mAZAeAd1dd2�3��dd4lBmCZCeCe>��dSdS)5a�
MultiCall - a class which inherits its methods from a Tkinter widget (Text, for
example), but enables multiple calls of functions per virtual event - all
matching events will be called, not only the most specific one. This is done
by wrapping the event functions - event_add, event_delete and event_info.
MultiCall recognizes only a subset of legal event sequences. Sequences which
are not recognized are treated by the original Tk handling mechanism. A
more-specific event will be called before a less-specific event.

The recognized sequences are complete one-event sequences (no emacs-style
Ctrl-X Ctrl-C, no shortcuts like <3>), for all types of events.
Key/Button Press/Release events can have modifiers.
The recognized modifiers are Shift, Control, Option and Command for Mac, and
Control, Alt, Shift, Meta/M for other platforms.

For all events which were handled by MultiCall, a new member is added to the
event instance passed to the binded functions - mc_type. This is one of the
event type constants defined in this module (such as MC_KEYPRESS).
For Key/Button events (which are handled by MultiCall and may receive
modifiers), another member is added - mc_state. This member gives the state
of the recognized modifiers, as a combination of the modifier constants
also defined in this module (for example, MC_SHIFT).
Using these members is absolutely portable.

The order by which events are called is defined by these rules:
1. A more-specific event will be called before a less-specific event.
2. A recently-binded event will be called before a previously-binded event,
   unless this conflicts with the first rule.
Each function will be called at most once for each event.
�N���������	�
���
���������� �@��darwin)��Shift��Control)�Option)�Command)r)�Altr)�Meta�Mc�6�g|]}t|D]}||f���S�)�
_modifiers��.0�number�names   �;/usr/local/apps/python3/lib/python3.11/idlelib/multicall.py�
<listcomp>r.7sF��9�9�9�#�%/��%7�9�9�!��v��9�9�9�9�zapplication has been destroyedc�&�eZdZd�Zd�Zd�Zd�ZdS)�
_SimpleBinderc��||_dt|dzdz|_||_||_g|_d|_dS)N�<r�>)�type�_types�sequence�widget�
widgetinst�bindedfuncs�	handlerid)�selfr5r8r9s    r-�__init__z_SimpleBinder.__init__JsC����	��F�4�L��O�+�C�/��
����$����������r/c��|js;|j|jfd�}|j�|j|j|��|_|j�|��dS)Nc��||_i}tt|��dz
dd��D]$}||}||vrd||<||��}|r|cS�%dS)Nr���T)�mc_type�range�len)�event�lrA�	wascalled�i�func�rs       r-�handlerz#_SimpleBinder.bind.<locals>.handlerTsy�� '��
��	��s�1�v�v�a�x��R�0�0�%�%�A��Q�4�D��9�,�,�*.�	�$�� �D��K�K���%�#$�H�H�H��
%�%r/)r;r:r5r8�bindr9r7�append)r<�tripletrHrJs    r-rKz_SimpleBinder.bindRsp���~�	F�#'�#3�t�y�	
%�	
%�	
%�	
%�"�[�-�-�d�o�.2�m�W�F�F�D�N������%�%�%�%�%r/c��|j�|��|js4|j�|j|j|j��d|_dSdS�N)r:�remover8�unbindr9r7r;)r<rMrHs   r-rQz_SimpleBinder.unbindbsY�������%�%�%���	"��K���t���
�t�~�N�N�N�!�D�N�N�N�	"�	"r/c���|jr`	|j�|j|j|j��dS#t
j$r }t|jdvr�Yd}~dSd}~wwxYwdS�Nr)	r;r8rQr9r7�tkinter�TclError�APPLICATION_GONE�args)r<�es  r-�__del__z_SimpleBinder.__del__hs����>�	�
���"�"�4�?�D�M���(�(�(�(�(���#�
�
�
�'�1�6�!�9�4�4��5�4�4�4�4�4�����
����		�	s�+6�A%�A � A%N)�__name__�
__module__�__qualname__r=rKrQrYr'r/r-r1r1IsP���������&�&�&� "�"�"�����r/r1c�v��g|]5�d��fd�tt��D������6S)�c3�D�K�|]\}}d|z�z�
|ddzV��dS)rr�-Nr')r*rG�m�ss   �r-�	<genexpr>z<listcomp>.<genexpr>wsP�����)�)� �A�q���F�a�<�)��!��S��)�)�)�)�)�)r/)�join�	enumerater(�r*rbs @r-r.r.wsg���"�"�"�����)�)�)�)�$-�j�$9�$9�)�)�)�)�)�"�"�"r/c����d�}g}|D]V�tt�fd�|D������}|�|d���|�|���W|S)z�For each item of states return a list containing all combinations of
    that item with individual bits reset, sorted by the number of set bits.
    c�B�d}|rt|d��\}}||z
}|�|S)znumber of bits set in n base 2rr)�divmod)�n�nb�rems   r-�nbitszexpand_substates.<locals>.nbits�s:��
���	��A�q�\�\�F�A�s��#�I�B��	��	r/c3�"�K�|]	}�|zV��
dSrOr')r*�x�states  �r-rcz#expand_substates.<locals>.<genexpr>�s'�����7�7�1�U�Q�Y�7�7�7�7�7�7r/T)�key�reverse)�list�set�sortrL)�statesrm�	statelist�	substatesrps    @r-�expand_substatesry|s��������I��$�$����7�7�7�7��7�7�7�7�7�8�8�	����5�$��/�/�/�����#�#�#�#��r/c�,�eZdZd�Zd�Zd�Zd�Zd�ZdS)�_ComplexBinderc�,�||||j|jfd�}|S)Nc�"�dg|dd�<||_||_i}d}|D]P}tt|��dz
dd��D](}	||	}
|
|vrd||
<||	|��}|rn�)|rn�Qg|dd�<|D]}|���
g|dd�<|r|SdS)NTrr@)rA�mc_staterBrC)rD�listsrAr~�ishandlerrunning�doafterhandlerrFrIrErGrH�fs            r-rJz0_ComplexBinder.__create_handler.<locals>.handler�s���$(�&��Q�Q�Q��#�E�M�%�E�N��I��A��	
�	
���s�1�v�v�a�x��R�0�0�"�"�A��Q�4�D��9�,�,�*.�	�$�� �A�a�D��K�K���"�!�E�����E��"$��Q�Q�Q��#�
�
�������� "�N�1�1�1���
���
�
r/)r�r�)r<rrAr~rJs     r-�__create_handlerz_ComplexBinder.__create_handler�s1��#(�%�(�'+�'<�%)�%8�	�	�	�	�4�r/c	����|�_t|d�_|�_|�_dd�t
D��i�_g�_g�_g�_	t
D]�}�fd�t|D��}��||t|��}dt|z�jzdz}�j�|�j��j||��f����dS)Nrc��g|]}g��Sr'r'rfs  r-r.z+_ComplexBinder.__init__.<locals>.<listcomp>�s��"7�"7�"7�!�2�"7�"7�"7r/c�6��g|]}�jd|��SrO)r:)r*rGr<s  �r-r.z+_ComplexBinder.__init__.<locals>.<listcomp>�s&���J�J�J�1�T�%�d�+�A�.�J�J�Jr/r3r4)r5r6�typenamer8r9�_statesr:�
handleridsr�r��_state_subsets�_ComplexBinder__create_handler�_state_codes�_state_namesrLrK)r<r5r8r9rbrrJ�seqs`       r-r=z_ComplexBinder.__init__�s�����	��t��Q���
����$��� �"7�"7�w�"7�"7�"7�8������!#��� ����	J�	J�A�J�J�J�J��q�8I�J�J�J�E��+�+�E�4��a��I�I�G��l�1�o�%�d�m�3�C�7�C��O�"�"�C���)9�)9�$�/�:=�w�*H�*H�$I�
J�
J�
J�
J�		J�	Jr/c	�������d�jvr�d�tD���j�d<tD]����fd��ddfD��}��|�jt���}dt
���j�d�d�d�}�j�|�j	�
�j||��f�������fd�}�js|��dS�j
�|��dS)Nrc��g|]}g��Sr'r'rfs  r-r.z'_ComplexBinder.bind.<locals>.<listcomp>�s��+@�+@�+@�1�B�+@�+@�+@r/c�V��g|]%}t�D]}�j||���&Sr')r�r:)r*�detailrGrbr<s   ��r-r.z'_ComplexBinder.bind.<locals>.<listcomp>�sP���=�=�=�$�#1�!�#4�=�=���*�6�2�1�5�=�=�=�=r/r3r`r4c�h���j�d�d����S�Nrr)r:rL�rHr<rMs���r-�<lambda>z%_ComplexBinder.bind.<locals>.<lambda>��*���t�'���
�3�G�A�J�?�F�F�t�L�L�r/)r:r�r�r5r�r�r�r�rLr8rKr9r�r�)r<rMrHrrJr��doitrbs```    @r-rKz_ComplexBinder.bind�s[�������1�:�T�-�-�-�+@�+@��+@�+@�+@�D��W�Q�Z�(��
N�
N��=�=�=�=�=�)0���T�(:�=�=�=���/�/��t�y�0<�Q��A�A���$0��O�O�T�]�]�]�G�A�J�J�J�O����&�&��T�[�-=�-=�d�o�>A�7�.L�.L�(M�N�N�N�N�L�L�L�L�L�L���$�	-��D�F�F�F�F�F���&�&�t�,�,�,�,�,r/c�t�������fd�}�js|��dS�j�|��dS)Nc�h���j�d�d����Sr�)r:rPr�s���r-r�z'_ComplexBinder.unbind.<locals>.<lambda>�r�r/)r�r�rL)r<rMrHr�s``` r-rQz_ComplexBinder.unbind�sP�����L�L�L�L�L�L���$�	-��D�F�F�F�F�F���&�&�t�,�,�,�,�,r/c���|jD]X\}}	|j�|j||���(#tj$r}t|jdvr�Yd}~�Qd}~wwxYwdSrS)r�r8rQr9rTrUrVrW)r<r��idrXs    r-rYz_ComplexBinder.__del__�s�����	�	�G�C��
���"�"�4�?�C��<�<�<�<���#�
�
�
�'�1�6�!�9�4�4��5�4�4�4�4�����
����	�	s�!0�A�A�AN)rZr[r\r�r=rKrQrYr'r/r-r{r{�sb���������:J�J�J�.-�-�-�$-�-�-�����r/r{))�KeyPress�Key)�
KeyRelease)�ButtonPress�Button)�
ButtonRelease)�Activate)�	Circulate)�Colormap)�	Configure)�
Deactivate)�Destroy)�Enter)�Expose)�FocusIn)�FocusOut)�Gravity)�Leave)�Map)�Motion)�
MouseWheel)�Property)�Reparent)�Unmap)�
Visibilityc�6�g|]}t|D]}||f���Sr')r6r)s   r-r.r.sE��1�1�1��!'���1�1���6�N�1�1�1�1r/z^\w+$z^[1-5]$c�B�|r|ddks|ddkrdS|dd��d��}d}|r<|dtvr-|dt|dzz}|d=|r|dtv�-|r&|dtvrt|d}|d=ndSt|tur	|s|rdSd}n[|d�d	D��vrt
}nt}|sd}n9t|��dkr$|�|d��r	|d}ndS|||fS)
a-Get a string which should describe an event sequence. If it is
    successfully parsed as one, return a tuple containing the state (as an int),
    the event type (as an index of _types), and the detail - None if none, or a
    string if there is one. If the parsing is unsuccessful, return None.
    rr3r@r4Nrr`c�(�g|]}t|��Sr')�_type_namesrfs  r-r.z#_parse_sequence.<locals>.<listcomp>$s��G�G�G�q�K��N�G�G�Gr/)r�r�)	�split�_modifier_namesr��_binder_classesr1�
_keysym_re�
_button_rerC�match)r7�words�	modifiersr5r��type_res      r-�_parse_sequencer�sq����x��{�c�)�)�X�b�\�S�-@�-@��t��Q�r�T�N� � ��%�%�E��I�
��E�!�H��/�/��Q�/�%��(�3�3�3�	��!�H���E�!�H��/�/�
���q��[�(�(��5��8�$���!�H�H��t��t��
�-�-��	��	��4��F�F��G�G�,F�G�G�G�G�G� �G�G� �G��	��F�F�
��Z�Z�1�_�_����u�Q�x�!8�!8�_��1�X�F�F��4��d�F�"�"r/c��|dr?dt|dzt|ddzdz|dzdzSdt|dzt|ddzdzS)Nrr3rrr`r4)r�r6)rMs r-�_triplet_to_sequencer�2s���q�z�F��<���
�+�+�F�7�1�:�,>�q�,A�A�#�E��q�z����	��<���
�+�+�F�7�1�:�,>�q�,A�A�#�E�Er/c�h���tvr
t�SG�fd�d���}|t�<|S)z�Return a MultiCall class which inherits its methods from the
    given widget class (for example, Tkinter.Text). This is used
    instead of a templating mechanism.
    c�~��eZdZe�ej��sJ��fd�Zd	�fd�	Zd
�fd�	Z�fd�Z	�fd�Z
d
�fd�	Zd�ZdS)�#MultiCallCreator.<locals>.MultiCallc�����j�g|�Ri|��i�_��fd�ttt����D���_dS)Nc�>��g|]}t||������Sr')r�)r*rGr<r8s  ��r-r.z@MultiCallCreator.<locals>.MultiCall.__init__.<locals>.<listcomp>Ks:���;�;�;�"#�.�a�0��F�D�A�A�;�;�;r/)r=�_MultiCall__eventinforBrCr6�_MultiCall__binders)r<rW�kwargsr8s`  �r-r=z,MultiCallCreator.<locals>.MultiCall.__init__Esq�����F�O�D�2�4�2�2�2�6�2�2�2� "�D��;�;�;�;�;�',�S��[�[�'9�'9�;�;�;�D�N�N�Nr/Nc���t|��tur�t|��dkr�|dd�dkr�|dd�dkr�||jvr�|j|}|d�8|dD]/}|j|d�||d���0||d<|d�2|dD])}|j|d�||���*n|gg|j|<��||||��S)Nr�<<����>>rr)r5�strrCr�r�rQrK)r<r7rH�add�eirMr8s      �r-rKz(MultiCallCreator.<locals>.MultiCall.bindNs#����H�~�~��$�$��X����):�):�����|�t�#�#�����
��(=�(=��t�/�/�/��)�(�3�B��!�u�(�')�!�u�N�N�G� �N�7�1�:�6�=�=�g�r�!�u�M�M�M�M� �B�q�E��!�u�(�')�!�u�K�K�G� �N�7�1�:�6�;�;�G�T�J�J�J�J��26���D�$�X�.��;�;�t�X�t�S�9�9�9r/c�j��t|��tur�t|��dkrs|dd�dkre|dd�dkrW||jvrN|j|\}}|�<|D])}|j|d�||���*d|j|d<��|||��S)Nrr�r�r�rr)r5r�rCr�r�rQ)r<r7�funcidrH�tripletsrMr8s      �r-rQz*MultiCallCreator.<locals>.MultiCall.unbind`s�����H�~�~��$�$��X����):�):�����|�t�#�#�����
��(=�(=��4�+�+�+�!%�!1�(�!;���h��#�#+�I�I����w�q�z�2�9�9�'�4�H�H�H�H�48�D�$�X�.�q�1��=�=��x��8�8�8r/c�*��||jvrdgg|j|<|j|\}}|D]i}t|��}|���|||���+|�'|j|d�||��|�|���jdS�Nr)r�r��	event_addr�rKrL�r<�virtual�	sequencesrHr�r�rMr8s       �r-r�z-MultiCallCreator.<locals>.MultiCall.event_addks�����d�.�.�.�-1�2�J�� ��)�!�-�g�6�N�D�(� �
-�
-��)�#�.�.���?��$�$�T�7�C�8�8�8�8��'���w�q�z�2�7�7���F�F�F��O�O�G�,�,�,�,�
-�
-r/c���||jvrdS|j|\}}|D]i}t|��}|���|||���+|�'|j|d�||��|�|���jdSr�)r�r��event_deleter�rQrPr�s       �r-r�z0MultiCallCreator.<locals>.MultiCall.event_delete|s�����d�.�.�.���!�-�g�6�N�D�(� �
-�
-��)�#�.�.���?��'�'��g�s�;�;�;�;��'���w�q�z�2�9�9�'�4�H�H�H��O�O�G�,�,�,�,�
-�
-r/c����|�	||jvr��||��Sttt|j|d������||��zSr�)r��
event_info�tuple�mapr�)r<r�r8s  �r-r�z.MultiCallCreator.<locals>.MultiCall.event_info�sv�����'��1A�"A�"A��(�(��w�7�7�7��S�!5�!%�!1�'�!:�1�!=�?�?�@�@��(�(��w�7�7�8�8r/c��|jD]r}|j|\}}|r^|D][}	|j|d�||���+#tj$r}t
|jdvr�Yd}~�Td}~wwxYw�sdS)Nrr)r�r�rQrTrUrVrW)r<r�rHr�rMrXs      r-rYz+MultiCallCreator.<locals>.MultiCall.__del__�s����+�
&�
&��!%�!1�'�!:���h��&�#+�&�&��&� �N�7�1�:�6�=�=�g�t�L�L�L�L��&�/�&�&�&�#3�q�v�a�y�#@�#@� %�$A�#@�#@�#@�#@�����&�����

&�
&s�'A	�	A7�A2�2A7)NNNrO)
rZr[r\�
issubclassrT�Miscr=rKrQr�r�r�rY)r8s�r-�	MultiCallr�Bs���������z�&�'�,�/�/�/�/�/�	;�	;�	;�	;�	;�	:�	:�	:�	:�	:�	:�$		9�		9�		9�		9�		9�		9�	-�	-�	-�	-�	-�"	-�	-�	-�	-�	-�	8�	8�	8�	8�	8�	8�		&�		&�		&�		&�		&r/r�)�_multicall_dict)r8r�s` r-�MultiCallCreatorr�:sl���
�� � ��v�&�&�Y&�Y&�Y&�Y&�Y&�Y&�Y&�V�Y&�Y&�Y&�v(�O�F���r/c���tj|��}|�d��tt|����d��dd���\}}|�d||dzfz��ttj��|�����	��dgf�fd�	}|d��|d	��|d
��|d��|d��|d
��|d��|d��|d��|d��|d��|d��dS)NzTest MultiCall�+rz+%d+%d�rc�����fd�}��d|dz|����d|dz���|dxxdz
cc<dS)Nc�&��t���dSrO)�print)rDr�s �r-rJz-_multi_call.<locals>.bindseq.<locals>.handler�s����#�J�J�J�J�Jr/z
<<handler%d>>rr)rKr�)r�rjrJ�texts`  �r-�bindseqz_multi_call.<locals>.bindseq�sp����	�	�	�	�	��	�	�/�!�A�$�&��0�0�0�����q��t�+�S�1�1�1�	�!�����	�����r/z<Key>z
<Control-Key>z<Alt-Key-a>z<Control-Key-a>z<Alt-Control-Key-a>z<Key-b>z<Control-Button-1>z
<Button-2>z<Alt-Button-1>z
<FocusOut>z<Enter>z<Leave>)
rT�Toplevel�titler��int�geometryr�r��Text�pack)�parent�topro�yr�r�s     @r-�_multi_callr��s����
�
�6�
"�
"�C��I�I������s�F�O�O�%�%�+�+�C�0�0����4�5�5�D�A�q��L�L��Q��C��L�(�)�)�)�)��G�L�)�)�#�.�.�D��I�I�K�K�K��s��������G�G�����G�O�����G�M�����G������G�!�"�"�"��G�I�����G� �!�!�!��G�L�����G������G�L�����G�I�����G�I�����r/�__main__)�mainzidlelib.idle_test.test_mainmenuF)�	verbosity�exit)�run)D�__doc__�re�sysrT�MC_KEYPRESS�
MC_KEYRELEASE�MC_BUTTONPRESS�MC_BUTTONRELEASE�MC_ACTIVATE�MC_CIRCULATE�MC_COLORMAP�MC_CONFIGURE�
MC_DEACTIVATE�
MC_DESTROY�MC_ENTER�	MC_EXPOSE�
MC_FOCUSIN�MC_FOCUSOUT�
MC_GRAVITY�MC_LEAVE�MC_MAP�	MC_MOTION�
MC_MOUSEWHEEL�MC_PROPERTY�MC_REPARENT�MC_UNMAP�
MC_VISIBILITY�MC_SHIFT�
MC_CONTROL�MC_ALT�MC_META�	MC_OPTION�
MC_COMMAND�platformr(�_modifier_masks�dictrBrCr�rVr1r�r�ryr�r�rbrIrGrLr{r6r�r��compiler�r�r�r�r�r�r�rZ�unittestr��idlelib.idle_test.htestrr'r/r-�<module>r's�����<
�	�	�	�
�
�
�
�����
��Q�}�q��1�2B�
��A�|�1�{�1�l��
�A���x�b�I�R�*���2�
��x�2�F��y��
�b�+�b�+�2�(�R�}���d��T�F�T�7��	�t�*��<�8���F�J���Y�
�C�O�O�D�J�!�6�8�W�=�O��$�9�9�',�u�S�S��_�_�'=�'=�9�9�9�:�:��4��&�&�&�&�&�&�&�&�Z�%��S�S��_�_�$�
%�
%��"�"�!�"�"�"��
���$"�!�'�*�*����	���A�	�A�
�U�3�3�z�?�?�
#�
#�$�$��
��F�a�<�	$�
���#�#�A����������[�[�[�[�[�[�[�[�~
��"�#�a�'�=�*:�c�c�&�k�k�!�m�*L�L���d�1�1�#(�5���V���#5�#5�1�1�1�2�2���R�Z��
!�
!�
�
�R�Z�
�
#�
#�
�%#�%#�%#�NF�F�F���d�d�d�N���4�z����������D�	*�a�e�D�D�D�D�+�+�+�+�+�+��C��������r/