§
    õŽ’j–/  ã                   óˆ   — d dl mZmZmZmZ  G d„ d¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Z G d„ d	¦  «        Zd
S )é    )Ú_apiÚbackend_toolsÚcbookÚwidgetsc                   ó   — e Zd ZdZdd„ZdS )Ú	ToolEventz)Event for tool manipulation (add/remove).Nc                 ó>   — || _         || _        || _        || _        d S ©N)ÚnameÚsenderÚtoolÚdata)Úselfr   r   r   r   s        úIC:\Projects\DSCons\.venv\Lib\site-packages\matplotlib\backend_managers.pyÚ__init__zToolEvent.__init__   s"   € ØˆŒ	ØˆŒØˆŒ	ØˆŒ	ˆ	ˆ	ó    r
   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   © r   r   r   r      s.   € € € € € Ø3Ð3ðð ð ð ð ð r   r   c                   ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )ÚToolTriggerEventz/Event to inform that a tool has been triggered.Nc                 ó^   •— t          ¦   «                              ||||¦  «         || _        d S r
   )Úsuperr   Úcanvasevent)r   r   r   r   r   r   Ú	__class__s         €r   r   zToolTriggerEvent.__init__   s/   ø€ Ý‰Œ×Ò˜˜v t¨TÑ2Ô2Ð2Ø&ˆÔÐÐr   )NN)r   r   r   r   r   Ú__classcell__)r   s   @r   r   r      sC   ø€ € € € € Ø9Ð9ð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r   r   c                   ó   — e Zd ZdZd„ ZdS )ÚToolManagerMessageEventzs
    Event carrying messages from toolmanager.

    Messages usually get displayed to the user by the toolbar.
    c                 ó0   — || _         || _        || _        d S r
   )r   r   Úmessage)r   r   r   r#   s       r   r   z ToolManagerMessageEvent.__init__   s   € ØˆŒ	ØˆŒØˆŒˆˆr   Nr   r   r   r   r!   r!      s-   € € € € € ðð ð
ð ð ð ð r   r!   c                   óè   — e Zd ZdZdd„Zed„ ¦   «         Zed„ ¦   «         Zej        d„ ¦   «         Zdd„Z	d	„ Z
d
„ Zdd„Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zed„ ¦   «         Zdd„ZdS )ÚToolManageraž  
    Manager for actions triggered by user interactions (key press, toolbar
    clicks, ...) on a Figure.

    Attributes
    ----------
    figure : `.Figure`
    keypresslock : `~matplotlib.widgets.LockDraw`
        `.LockDraw` object to know if the `canvas` key_press_event is locked.
    messagelock : `~matplotlib.widgets.LockDraw`
        `.LockDraw` object to know if the message is available to write.
    Nc                 ó  — d | _         i | _        i | _        i | _        t	          j        ¦   «         | _        t          j        ¦   «         | _	        t          j        ¦   «         | _
        d | _        |                      |¦  «         d S r
   )Ú_key_press_handler_idÚ_toolsÚ_keysÚ_toggledr   ÚCallbackRegistryÚ
_callbacksr   ÚLockDrawÚkeypresslockÚmessagelockÚ_figureÚ
set_figure©r   Úfigures     r   r   zToolManager.__init__.   sr   € à%)ˆÔ"àˆŒØˆŒ
ØˆŒÝÔ0Ñ2Ô2ˆŒõ $Ô,Ñ.Ô.ˆÔÝ"Ô+Ñ-Ô-ˆÔàˆŒØ�Š˜ÑÔÐÐÐr   c                 ó,   — | j         sdS | j         j        S )z Canvas managed by FigureManager.N)r0   Úcanvas©r   s    r   r5   zToolManager.canvas>   s   € ð Œ|ð 	Ø�4ØŒ|Ô"Ð"r   c                 ó   — | j         S )zFigure that holds the canvas.)r0   r6   s    r   r3   zToolManager.figureE   s   € ð Œ|Ðr   c                 ó0   — |                       |¦  «         d S r
   )r1   r2   s     r   r3   zToolManager.figureJ   s   € à�Š˜ÑÔÐÐÐr   Tc                 óü   — | j         r| j                             | j         ¦  «         || _        |r%| j                             d| j        ¦  «        | _         |r#| j                             ¦   «         D ]}||_        Œ
dS dS )zÌ
        Bind the given figure to the tools.

        Parameters
        ----------
        figure : `.Figure`
        update_tools : bool, default: True
            Force tools to update figure.
        Úkey_press_eventN)	r'   r5   Úmpl_disconnectr0   Úmpl_connectÚ
_key_pressr(   Úvaluesr3   )r   r3   Úupdate_toolsr   s       r   r1   zToolManager.set_figureN   s›   € ð Ô%ð 	CØŒK×&Ò& tÔ'AÑBÔBÐBØˆŒØð 	4Ø)-¬×)@Ò)@Ø! 4¤?ñ*4ô *4ˆDÔ&àð 	%Øœ×*Ò*Ñ,Ô,ð %ð %�Ø$�”�ð	%ð 	%ð%ð %r   c                 ó8   — | j                              ||¦  «        S )aÕ  
        Connect event with string *s* to *func*.

        Parameters
        ----------
        s : str
            The name of the event. The following events are recognized:

            - 'tool_message_event'
            - 'tool_removed_event'
            - 'tool_added_event'

            For every tool added a new event is created

            - 'tool_trigger_TOOLNAME', where TOOLNAME is the id of the tool.

        func : callable
            Callback function for the toolmanager event with signature::

                def func(event: ToolEvent) -> Any

        Returns
        -------
        cid
            The callback id for the connection. This can be used in
            `.toolmanager_disconnect`.
        )r,   Úconnect)r   ÚsÚfuncs      r   Útoolmanager_connectzToolManager.toolmanager_connectb   s   € ð8 Œ×&Ò& q¨$Ñ/Ô/Ð/r   c                 ó6   — | j                              |¦  «        S )zã
        Disconnect callback id *cid*.

        Example usage::

            cid = toolmanager.toolmanager_connect('tool_trigger_zoom', onpress)
            #...later
            toolmanager.toolmanager_disconnect(cid)
        )r,   Ú
disconnect)r   Úcids     r   Útoolmanager_disconnectz"ToolManager.toolmanager_disconnect€   s   € ð Œ×)Ò)¨#Ñ.Ô.Ð.r   c                 ój   — |€| }d}t          |||¦  «        }| j                             ||¦  «         dS )z!Emit a `ToolManagerMessageEvent`.NÚtool_message_event)r!   r,   Úprocess)r   r#   r   rB   Úevents        r   Úmessage_eventzToolManager.message_eventŒ   s@   € àˆ>ØˆFà ˆÝ'¨¨6°7Ñ;Ô;ˆØŒ×Ò  5Ñ)Ô)Ð)Ð)Ð)r   c                 ó   — | j         S )zCurrently toggled tools.)r*   r6   s    r   Úactive_togglezToolManager.active_toggle•   s   € ð Œ}Ðr   c                 óR   ‡— ˆfd„| j                              ¦   «         D ¦   «         }|S )a  
        Return the keymap associated with the specified tool.

        Parameters
        ----------
        name : str
            Name of the Tool.

        Returns
        -------
        list of str
            List of keys associated with the tool.
        c                 ó&   •— g | ]\  }}|‰k    ¯|‘ŒS r   r   )Ú.0ÚkÚir   s      €r   ú
<listcomp>z/ToolManager.get_tool_keymap.<locals>.<listcomp>©   s"   ø€ Ð>Ð>Ð>‘d�a˜°A¸²I°I�°I°I°Ir   )r)   Úitems)r   r   Úkeyss    ` r   Úget_tool_keymapzToolManager.get_tool_keymapš   s1   ø€ ð ?Ð>Ð>Ð>˜dœj×.Ò.Ñ0Ô0Ð>Ñ>Ô>ˆØˆr   c                 óF   — |                       |¦  «        D ]
}| j        |= Œd S r
   )rX   r)   )r   r   rS   s      r   Ú_remove_keyszToolManager._remove_keys¬   s4   € Ø×%Ò% dÑ+Ô+ð 	ð 	ˆAØ”
˜1��ð	ð 	r   c           	      ó  — || j         vrt          |›d�¦  «        ‚|                      |¦  «         t          |t          ¦  «        r|g}|D ]=}|| j        v r(t          j        d|› d| j        |         › d|› �¦  «         || j        |<   Œ>dS )zì
        Set the keymap to associate with the specified tool.

        Parameters
        ----------
        name : str
            Name of the Tool.
        key : str or list of str
            Keys to associate with the tool.
        z not in ToolszKey z changed from z to N)r(   ÚKeyErrorrZ   Ú
isinstanceÚstrr)   r   Úwarn_external)r   r   ÚkeyrS   s       r   Úupdate_keymapzToolManager.update_keymap°   s¿   € ð �t”{Ð"Ð"Ý˜dÐ3Ð3Ð3Ñ4Ô4Ð4Ø×Ò˜$ÑÔÐÝ�c�3ÑÔð 	Ø�%ˆCØð 	!ð 	!ˆAØ�D”JˆˆÝÔ"ØE˜1ÐEÐE¨D¬J°q¬MÐEÐE¸tÐEÐEñGô Gð Gà ˆDŒJ�q‰MˆMð		!ð 	!r   c                 ó  — |                       |¦  «        }t          |dd¦  «        r|                      |d¦  «         |                      |¦  «         t	          d| |¦  «        }| j                             |j        |¦  «         | j        |= dS )zƒ
        Remove tool named *name*.

        Parameters
        ----------
        name : str
            Name of the tool.
        ÚtoggledFÚtoolmanagerÚtool_removed_eventN)	Úget_toolÚgetattrÚtrigger_toolrZ   r   r,   rK   r   r(   )r   r   r   rL   s       r   Úremove_toolzToolManager.remove_toolÆ   s�   € ð �}Š}˜TÑ"Ô"ˆÝ�4˜ EÑ*Ô*ð 	3Ø×Ò˜d MÑ2Ô2Ð2Ø×Ò˜$ÑÔÐÝÐ.°°dÑ;Ô;ˆØŒ×Ò ¤
¨EÑ2Ô2Ð2ØŒK˜ÐÐÐr   c                 ó   — t          j        t          | j        ¦  «        |¦  «        }|st	          dt          |¦  «        z  ¦  «        ‚|| j        v r!t          j        d¦  «         | j        |         S  || |g|¢R i |¤Ž}|| j        |<   |j	        �|  
                    ||j	        ¦  «         t          |t           j        ¦  «        rm|j        €(| j                             dt!          ¦   «         ¦  «         n | j                             |j        d¦  «         |j        r|                      |dd¦  «         |                     | j        ¦  «         t+          d| |¦  «        }| j                             |j        |¦  «         |S )a®  
        Add *tool* to `ToolManager`.

        If successful, adds a new event ``tool_trigger_{name}`` where
        ``{name}`` is the *name* of the tool; the event is fired every time the
        tool is triggered.

        Parameters
        ----------
        name : str
            Name of the tool, treated as the ID, has to be unique.
        tool : type
            Class of the tool to be added.  A subclass will be used
            instead if one was registered for the current canvas class.
        *args, **kwargs
            Passed to the *tool*'s constructor.

        See Also
        --------
        matplotlib.backend_tools.ToolBase : The base class for tools.
        zImpossible to find class for %sz;A "Tool class" with the same name already exists, not addedNÚtool_added_event)r   Ú_find_tool_classÚtyper5   Ú
ValueErrorr^   r(   r   r_   Údefault_keymapra   r]   ÚToolToggleBaseÚradio_groupr*   Ú
setdefaultÚsetrc   Ú_handle_toggler1   r3   r   r,   rK   r   )r   r   r   ÚargsÚkwargsÚtool_clsÚtool_objrL   s           r   Úadd_toolzToolManager.add_tool×   sŽ  € õ. !Ô1µ$°t´{Ñ2CÔ2CÀTÑJÔJˆØð 	LÝÐ>ÅÀTÁÄÑJÑKÔKÐKà�4”;ÐÐÝÔð  3ñ 4ô 4ð 4à”;˜tÔ$Ð$à�8˜D $Ð8¨Ð8Ð8Ð8°Ð8Ð8ˆØ$ˆŒ�DÑàÔ"Ð.Ø×Ò˜t XÔ%<Ñ=Ô=Ð=õ �h¥Ô <Ñ=Ô=ð 
	:ð Ô#Ð+Ø”×(Ò(¨­s©u¬uÑ5Ô5Ð5Ð5à”×(Ò(¨Ô)=¸tÑDÔDÐDð Ôð :Ø×#Ò# H¨d°DÑ9Ô9Ð9Ø×Ò˜DœKÑ(Ô(Ð(åÐ,¨d°HÑ=Ô=ˆØŒ×Ò ¤
¨EÑ2Ô2Ð2àˆr   c                 óž  — |j         }|€a|j        | j        d         v r&| j        d                              |j        ¦  «         n%| j        d                              |j        ¦  «         dS | j        |         |j        k    rd}n?| j        |         €|j        }n*|                      | j        |         | ||¦  «         |j        }|| j        |<   dS )aO  
        Toggle tools, need to untoggle prior to using other Toggle tool.
        Called from trigger_tool.

        Parameters
        ----------
        tool : `.ToolBase`
        canvasevent : Event
            Original Canvas event or None.
        data : object
            Extra data to pass to the tool when triggering.
        N)rq   r   r*   ÚremoveÚaddrh   )r   r   r   r   rq   rc   s         r   rt   zToolManager._handle_toggle  sè   € ð Ô&ˆð ÐØŒy˜DœM¨$Ô/Ð/Ð/Ø”˜dÔ#×*Ò*¨4¬9Ñ5Ô5Ð5Ð5à”˜dÔ#×'Ò'¨¬	Ñ2Ô2Ð2ØˆFð Œ=˜Ô%¨¬Ò2Ð2ØˆGˆGð Œ]˜;Ô'Ð/Ø”iˆGˆGð ×Ò˜dœm¨KÔ8Ø"Ø)Ø"ñ$ô $ð $ð ”iˆGð &-ˆŒ�kÑ"Ð"Ð"r   c                 ó6  — |                       |¦  «        }|€dS |€| }t          |t          j        ¦  «        r|                      |||¦  «         |                     |||¦  «         d|z  }t          |||||¦  «        }| j                             ||¦  «         dS )a‰  
        Trigger a tool and emit the ``tool_trigger_{name}`` event.

        Parameters
        ----------
        name : str
            Name of the tool.
        sender : object
            Object that wishes to trigger the tool.
        canvasevent : Event
            Original Canvas event or None.
        data : object
            Extra data to pass to the tool when triggering.
        Nztool_trigger_%s)	rf   r]   r   rp   rt   Útriggerr   r,   rK   )r   r   r   r   r   r   rB   rL   s           r   rh   zToolManager.trigger_tool;  s©   € ð �}Š}˜TÑ"Ô"ˆØˆ<ØˆFàˆ>ØˆFå�d�MÔ8Ñ9Ô9ð 	9Ø×Ò  k°4Ñ8Ô8Ð8à�Š�V˜[¨$Ñ/Ô/Ð/à Ñ$ˆÝ   F¨D°+¸tÑDÔDˆØŒ×Ò  5Ñ)Ô)Ð)Ð)Ð)r   c                 óÀ   — |j         �| j                             ¦   «         rd S | j                             |j         d ¦  «        }|€d S |                      ||¬¦  «         d S )N)r   )r`   r.   Úlockedr)   Úgetrh   )r   rL   r   s      r   r=   zToolManager._key_pressZ  sc   € ØŒ9Ð Ô 1× 8Ò 8Ñ :Ô :ÐØˆFàŒz�~Š~˜eœi¨Ñ.Ô.ˆØˆ<ØˆFØ×Ò˜$¨EÐÑ2Ô2Ð2Ð2Ð2r   c                 ó   — | j         S )z,A dict mapping tool name -> controlled tool.)r(   r6   s    r   ÚtoolszToolManager.toolsc  s   € ð Œ{Ðr   c                 ó¸   — t          |t          j        ¦  «        r|j        | j        v r|S || j        vr|rt          j        d|›�¦  «         dS | j        |         S )aû  
        Return the tool object with the given name.

        For convenience, this passes tool objects through.

        Parameters
        ----------
        name : str or `.ToolBase`
            Name of the tool, or the tool itself.
        warn : bool, default: True
            Whether a warning should be emitted it no tool with the given name
            exists.

        Returns
        -------
        `.ToolBase` or None
            The tool or None if no tool with the given name exists.
        z"ToolManager does not control tool N)r]   r   ÚToolBaser   r(   r   r_   )r   r   Úwarns      r   rf   zToolManager.get_toolh  sx   € õ& �t�]Ô3Ñ4Ô4ð 	Ø”I ¤Ð,Ð,ØˆKØ�t”{Ð"Ð"Øð CÝÔ"ØA¸ÐAÐAñCô Cð Cà�4ØŒ{˜4Ô Ð r   r
   )T)NNN)r   r   r   r   r   Úpropertyr5   r3   Úsetterr1   rD   rH   rM   rO   rX   rZ   ra   ri   ry   rt   rh   r=   rƒ   rf   r   r   r   r%   r%       s”  € € € € € ðð ð ð  ð  ð  ð  ð#ð #ñ „Xð#ð ðð ñ „Xðð „]ð ð  ñ „]ð ð%ð %ð %ð %ð(0ð 0ð 0ð<
/ð 
/ð 
/ð*ð *ð *ð *ð ðð ñ „Xððð ð ð$ð ð ð!ð !ð !ð,ð ð ð"7ð 7ð 7ðr)-ð )-ð )-ðV*ð *ð *ð *ð>3ð 3ð 3ð ðð ñ „Xðð!ð !ð !ð !ð !ð !r   r%   N)	Ú
matplotlibr   r   r   r   r   r   r!   r%   r   r   r   ú<module>rŠ      sß   ðØ :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ñ ô ð ð'ð 'ð 'ð 'ð '�yñ 'ô 'ð 'ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ðc!ð c!ð c!ð c!ð c!ñ c!ô c!ð c!ð c!ð c!r   