
    d#                        d Z dZddlZddlZ G d de      Z G d d      Z G d d	e      Z e       Z G d
 de      Z e       Zi Z	i Z
 ej                         ZeedfdZeedfdZefdZd Zd Z G d d      Zd Zd Zd Zy)z,Provides global signal dispatching services.z(Patrick K. O'Brien <pobrien@orbtech.com>    Nc                       e Zd ZddZy)DispatcherErrorNc                     || _         y N)args)selfr   s     2/usr/lib/python3/dist-packages/wx/py/dispatcher.py__init__zDispatcherError.__init__
   s	    	    r   )__name__
__module____qualname__r
    r   r	   r   r   	   s    r   r   c                       e Zd ZdZd Zy)	Parameterz+Used to represent default parameter values.c                 .    | j                   j                  S r   )	__class__r   r   s    r	   __repr__zParameter.__repr__   s    ~~&&&r   N)r   r   r   __doc__r   r   r   r	   r   r      s
    5'r   r   c                       e Zd Zy)AnyNr   r   r   r   r   r	   r   r          r   r   c                       e Zd Zy)	AnonymousNr   r   r   r	   r   r      r   r   r   Tc                 z   |t        d      |rt        |       } t        |      }i }|t        v r
t        |   }n8|t        |<   |dt        fvr%|fd}	 t        j                  ||      }|t        |<   g }||v r||   }n|||<   	 |j                  |        |j                  |        y#  Y 9xY w# t        $ r Y $w xY w)a  
    Connect receiver to sender for signal.

    * If sender is Any, receiver will receive signal from any sender.
    * If signal is Any, receiver will receive any signal from sender.
    * If sender is None, receiver will receive signal from Anonymous.
    * If signal is Any and sender is None, receiver will receive any
      signal from Anonymous.
    * If signal is Any and sender is Any, receiver will receive any
      signal from any sender.
    * If weak is true, weak references will be used.
    Nsignal cannot be Nonec                     t        |       y )N	senderkey)_removeSender)objectr!   s     r	   removezconnect.<locals>.remove8   s
    	2r   )r   safeRefidconnectionsr   weakrefrefsendersr$   
ValueErrorappend)	receiversignalsenderweakr!   signalsr$   
weakSender	receiverss	            r	   connectr4      s     ~5668$6
IGKi(!(I$$)2 3$[[8
%/	" IFO	#" X  s   B' B. 'B+.	B:9B:c           	      "   |t        d      |rt        |       } t        |      }	 t        |   |   }	 |j                  |        t        ||       y# t        $ r t        d|d|      w xY w# t        $ r t        d| d|d|      w xY w)zDisconnect receiver from sender for signal.

    Disconnecting is not required. The use of disconnect is the same as for
    connect, only in reverse. Think of it as undoing a previous connection.Nr   zNo receivers for signal z from sender zNo connection to receiver z for signal )r   r%   r&   r'   KeyErrorr$   r+   _cleanupConnections)r-   r.   r/   r0   r!   r3   s         r	   
disconnectr8   L   s    
 ~5668$6
I^	*62	x" 	6*  ^VU[\]]^  x]egmouvwwxs   A A0 A-0Bc                    t        |      }t        t              }g }	 |j                  t        |   |           g }	 t        |   t           }|D ](  }|j                  |      dk(  s|j                  |       * g }	 t        |   |    }|D ](  }|j                  |      dk(  s|j                  |       * g }	 t        |   t           }|D ](  }|j                  |      dk(  s|j                  |       * g }|D ]N  }t        |      t        j                  u st        |t              r
 |       }|8t        |f| |d|}	|||	fgz  }P |S # t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w)zSend signal from sender to all connected receivers.

    Return a list of tuple pairs [(receiver, response), ... ].
    If sender is not specified, signal is sent anonymously.r   )r.   r/   )r&   r   extendr'   r6   countr,   typer(   ReferenceType
isinstanceBoundMethodWeakref_call)
r.   r/   kwdsr!   anykeyr3   anyreceiversr-   	responsesresponses
             r	   sendrF   `   s   
 6
IWFIY/78 L"9-c2 ! '??8$)X&' L"6*62 ! '??8$)X&' L"6*3/ ! '??8$)X&'
 I 	,>W222h 23zHH&H4Hx*++		, U        sF   E E <E, 8E; 	EE	E)(E),	E87E8;	FFc                    t        | d      r8t        | j                  d      st        | j                  d      r| j                  } t        | d      r0| j                  j                  }|j                  d|j
                   }nLt        | d      r&| j                  }|j                  d|j
                   }nt        d| dt        |             |j                  dz  st        |      D ]
  }||vs||=   | d	i |S )
z0Call receiver with only arguments it can accept.__call____func____code__   r   zUnknown receiver z	 of type    r   )
hasattrrH   rI   rJ   co_varnamesco_argcountr   r<   co_flagslist)r-   rA   fc
acceptableargs        r	   r@   r@      s     x$!!:.'(:K:KZ2X $$x$''^^Abnn5
	:	&^^Abnn5
(DQYN[\\KK!O : 	C*$I	 dr   c                 6   t        | d      rt| j                  h| j                  }| j                  }|t        vrt	        j
                         t        |<   |t        |   vrt        |       t        |   |<   t        |   |   S t	        j                  | t              S )z4Return a *safe* weak reference to a callable object.__self__)boundMethod)	rM   rV   rI   _boundMethodsr(   WeakKeyDictionaryr?   r)   _removeReceiver)r#   selfkeyfunckeys      r	   r%   r%      s    vz"??& ooGooGm+)0)B)B)Dg&mG44"v6 g&w/ )'22;;v//r   c                   "    e Zd ZdZd Zd Zd Zy)r?   zBoundMethodWeakref class.c                     d| _         | fd}t        j                  |j                  |      | _        t        j                  |j
                  |      | _        y)z9Return a weak-reference-like instance for a bound method.r   c                 *    d|_         t        |       y)z=Set self.isDead to true when method or instance is destroyed.rK   )r-   N)isDeadrZ   )r#   r   s     r	   r$   z+BoundMethodWeakref.__init__.<locals>.remove   s    DKT*r   N)r`   r(   r)   rV   weakSelfrI   weakFunc)r   rW   r$   s      r	   r
   zBoundMethodWeakref.__init__   sC     $ 	+  K$8$8&AK$8$8&Ar   c                 <    d| j                   d| j                  dS )z"Return the closest representation.z<bound method weakref for .>)ra   rb   r   s    r	   r   zBoundMethodWeakref.__repr__   s    59]]DMMRRr   c                     | j                   ry| j                         }| j                         j                  }	 t	        ||      S # t
        $ r Y yw xY w)z.Return a strong reference to the bound method.N)r`   ra   rb   r   getattrAttributeError)r   r#   methods      r	   rH   zBoundMethodWeakref.__call__   sL    ;;]]_F]]_--Fvv..! s   A 	AAN)r   r   r   r   r
   r   rH   r   r   r	   r?   r?      s    #BSr   r?   c                     t         D cg c]  }t         |   D ]  }||f  }}}|D ]-  \  }}	 t         |   |   j                  |        t        ||       / yc c}}w #  Y xY w)z!Remove receiver from connections.N)r'   r$   r7   )r-   r!   r.   	list_keyss       r	   rZ   rZ      s     #.7*957 V$ 7$ 7I 7 ' /	6		"6*11(; 	Iv./	7	s   AAA#c                 V    t         |    |   }|st         |    }||= |st        |        yyy)zBDelete any empty signals for senderkey. Delete senderkey if empty.N)r'   r"   )r!   r.   r3   r1   s       r	   r7   r7      s:    I&v.Ii(FO)$ 	 r   c                 0    t         | = 	 t        | = y#  Y yxY w)z"Remove senderkey from connections.N)r'   r*   r    s    r	   r"   r"      s!    IIs    )r   
__author__typesr(   	Exceptionr   r   r   r   r'   r*   rY   rX   r4   r8   rF   r@   r%   r?   rZ   r7   r"   r   r   r	   <module>rq      s    27
  i 
' '
 ) 	e  	  K	 
)))+ !4 +Z !$Cd +( " 5n80" >/	%r   