
    b^4                     (   d dl Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZ ddlmZ eef ddlmZ ddlmZ d	 Z G d
 de          Zd Zd Z G d de          Z ej        e            G d dee          Zd Zd Z G d dee          ZdS )    N   )TYPE_INVALID)generate_doc_string)InterfaceInfo
ObjectInfo
StructInfo	VFuncInforegister_interface_infohook_up_vfunc_implementation
GInterface)_gi)_propertyhelper)_signalhelperc                 ~    t          j        dd|           }t          j        dd|                                          S )Nz(.)([A-Z][a-z]+)z\1_\2z([a-z0-9])([A-Z]))resublower)names1s     */usr/lib/python3/dist-packages/gi/types.py
snake_caser   ,   s7    	"Hd	3	3B6%x44::<<<    c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )MetaClassHelperc                 j    | j                                         D ]}t          | |j        |           d S N)__info__get_methodssetattr__name__)clsmethod_infos     r   _setup_methodszMetaClassHelper._setup_methods2   sA    <3355 	< 	<KC-{;;;;	< 	<r   c                     | j         }|                                }|d S |                                D ]7}|j        }t	          | |          st          | |t          |                     8d S r   )r   get_class_structr   r    hasattrr   classmethod)r!   infoclass_structr"   r   s        r   _setup_class_methodsz$MetaClassHelper._setup_class_methods6   s    |,,..F'3355 	= 	=K'D3%% =T;{#;#;<<<		= 	=r   c           	          | j                                         D ]S}|                                                    dd          }t	          | |t          |j        |j                             Td S )N-_)r   
get_fieldsget_namereplacer   property	get_value	set_value)r!   
field_infor   s      r   _setup_fieldszMetaClassHelper._setup_fieldsA   ss    ,1133 	U 	UJ&&((00c::DCx
(<j>RSSTTTT	U 	Ur   c                     | j                                         D ];}|                                }|                                }t	          | ||           <d S r   )r   get_constantsr/   r2   r   )r!   constant_infor   values       r   _setup_constantsz MetaClassHelper._setup_constantsF   s`     \7799 	& 	&M ))++D!++--ECu%%%%	& 	&r   c                 P   | j                                         D ]
\  }}|                    d          rt          |          s+d}d }| j        D ]}t          ||d           }|t          |t                    r|} nt          |d          rt          |j	        d          sTt          |j	                                                  }|j	                                        D ]&}|d|d|                                k    r|}d} n'|r n|*t          | j        |t!          d          d                    }||st#          || j                  }	|	|                                }
t'          d|d| j	                                        d	| j	                                        d
|
                                d	|
                                d|	j	                                        d	|	j	                                                  t+          || j        |           d S )Ndo_Fr   
get_vfuncsr-   TzMethod z() on class .z+ is ambiguous with methods in base classes z and )__dict__items
startswithcallable__mro__getattr
isinstancer	   r&   r   r   get_type_namer=   r/   find_vfunc_info_in_interface	__bases__lenfind_vfunc_conflict_in_basesget_container	TypeErrorget_namespacer   	__gtype__)r!   
vfunc_namepy_vfuncskip_ambiguity_check
vfunc_infobasemethod	base_namevambiguous_base	base_infos              r   _setup_vfuncszMetaClassHelper._setup_vfuncsL   sx   $'L$6$6$8$8 :	7 :	7 J((// x7I7I #(  J   z488%*VY*G*G%!'JEtZ00 |8\8\ &t}'B'B'D'DEE	1133  A!z999ajjlll%KKK%&
/3, L
  E !9#-TWX]T^T^T_T_I`aa
% , +%A*cm%\%\N%1$.$<$<$>$>	'i)3),)C)C)E)E)E)E),)>)>)@)@)@)@)2)@)@)B)B)B)B)2););)=)=)=)=)7)@)N)N)P)P)P)P)7)@)I)I)K)K)K	)* 	+ 	+ 	+ -Z-57 7 7s:	7 :	7r   c                     | j                             d          }|t          |t                    sd S | j        dk    r| j        dk    rd S |                                D ]}d|j        z  }t          | ||           d S )Nr   zgi.repository.GObjectObjectzdo_%s)r?   getrE   r   
__module__r    r=   r   )r!   
class_inforR   r   s       r   _setup_native_vfuncsz$MetaClassHelper._setup_native_vfuncs   s    
 \%%j11
Z
J%G%GF >4449Q9QF$//11 	+ 	+JZ00DCz****	+ 	+r   N)	r    r]   __qualname__r#   r*   r5   r:   rY   r_    r   r   r   r   1   sr        < < <	= 	= 	=U U U
& & &;7 ;7 ;7z+ + + + +r   r   c                 L   | D ]}|t           u s%t          |t                     rt          |d          s1t          |j        t
                    r:|j                                        D ] }|                                |k    r|c c S !t          |j	        |          }||c S d S )Nr   )
r   
issubclassr&   rE   r   r   r=   r/   rG   rH   )basesrO   rS   vfuncs       r   rG   rG      s       :tZ00 D*--   dm]33 	!1133 ! !>>##z11 LLLLL 2 -T^ZHHLLL  4r   c                 >   |D ]}t          |d          rt          |j        d          s(|j                                        }|                                 }|D ]&}|                                |k    r|| k    r|c c S 't	          | |j                  }||c S d S )Nr   r=   )r&   r   r=   r/   rJ   rH   )re   rd   klassvfuncsrO   rV   aklasss          r   rJ   rJ      s      uj)) 	ENL99	**,,^^%%
 	 	Azz||z))a5jj-eU_EEMMM 4r   c                       e Zd ZdZd Zd ZdS )_GObjectMetaBasez8Metaclass for automatically registering GObject classes.c                     t                               | |||           t          j        |            t	          j        |            |                     | j                   d S r   )type__init__propertyhelperinstall_propertiessignalhelperinstall_signals_type_registerr?   )r!   r   rd   dict_s       r   rn   z_GObjectMetaBase.__init__   sX    c4...)#...$S)))3<(((((r   c                     d|v rd S | j                             d          rd S t          j        | |                    d                     d S )NrN   zgi.overrides.__gtype_name__)r]   rA   r   type_registerr\   )r!   	namespaces     r   rs   z_GObjectMetaBase._type_register   sW    )##F >$$_55 	F#y}}-=>>?????r   N)r    r]   r`   __doc__rn   rs   ra   r   r   rk   rk      s=        BB) ) )
@ 
@ 
@ 
@ 
@r   rk   c                   >     e Zd ZdZ fdZd Zed             Z xZS )GObjectMetaz+Meta class used for GI GObject based types.c                    t          t          |                               |||           d}| j        d| j                                        z   k    rd}d}|s| j        t          j        k    rd}|r|                                  d S |rt          | j        t                    r| 	                                 | 
                                 |                                  |                                  t          | j        t                    r|                                  d S t          | j        t                    r*t          | j                                                   d S d S d S )NFgi.repository.T)superr{   rn   r]   r   rM   rY   rE   r   r*   r#   r:   r_   r5   r   r
   
get_g_type)r!   r   rd   rt   is_gi_definedis_python_defined	__class__s         r   rn   zGObjectMeta.__init__   su   k3((ue<<<>-0J0J0L0LLLL M! 	%;3I!I!I $ 	C 
	C#,
33 +((***     """$$&&&#,
33 C!!#####CL-88 C'(?(?(A(ABBBBB
	C 
	CC Cr   c                      t          |           S r   )mror!   s    r   r   zGObjectMeta.mro   s    3xxr   c                     | t           k    rdS | j                            dd          }||S | j                            d          rt          | j                  S dS )zFMeta class property which shows up on any class using this meta-class. ry   N)r}   zgi.overrides)r{   r?   r\   r]   rA   r   r   )r!   docs     r   ry   zGObjectMeta.__doc__   se     +2ly$//?J >$$%GHH 	5&s|444tr   )r    r]   r`   ry   rn   r   r1   __classcell__r   s   @r   r{   r{      sm        55C C C C C0     X    r   r{   c                    g }| gg}| j         r:| j         D ]}|t          |j                  gz  }|t          | j                   gz  }|r|D ]+}|d         fd|D             }|rt          j         vrd+ t	          d          |                               |dd         D ]*}|r&|d         k    r|d= |s|                    |           +||S )a\  Compute the class precedence list (mro) according to C3, with GObject
    interface considerations.

    We override Python's MRO calculation to account for the fact that
    GObject classes are not affected by the diamond problem:
    http://en.wikipedia.org/wiki/Diamond_problem

    Based on http://www.python.org/download/releases/2.3/mro/
    r   c                 ,    g | ]}|d d         v |S )r   Nra   ).0s	candidates     r   
<listcomp>zmro.<locals>.<listcomp>(  s+    MMMa)qu:L:L:L:L:Lr   Nz8Cannot create a consistent method resolution order (MRO))rH   listrC   r   rL   appendremove)Crd   bases_of_subclassesrS   subclass_basesnot_headr   s         @r   r   r     sT    E3%{ 3K 	8 	8D  D$6$6#77Q[ 1 122
 ?1 	 	N&q)IMMMM#6MMMH Ji.AAA 		 * + + + 	Y1!!!4 	? 	?N ?."3y"@"@"1%% ?'..~>>>'  ?* Lr   c                      d S r   ra   )argskwargss     r   nothingr   =  s    Dr   c                   8     e Zd ZdZ fdZed             Z xZS )
StructMetaz*Meta class used for GI Struct based types.c                 $   t          t          |                               |||           | j                                        }|t
          k    r	|j        d S |                                  |                                  | j        	                                D ]u}|
                                r_|j        dk    rT|                                r| j                                        dk    r#t          |          | _        t           | _         d S vd S )Nnewr   )r~   r   rn   r   r   r   pytyper5   r#   r   is_constructorr    get_argumentsget_sizestaticmethod__new__r   )r!   r   rd   rt   g_typer"   r   s         r   rn   zStructMeta.__init__D  s   j#''eU;;; ((**\!!fm&?F<3355 		 		K))++ (E11$2244 2\**,,11*;77  '		 		r   c                 D    | t           k    rdS t          | j                  S )Nr   )r   r   r   r   s    r   ry   zStructMeta.__doc__Z  s"    *2"3<000r   )r    r]   r`   ry   rn   r1   r   r   s   @r   r   r   A  sY        44    , 1 1 X1 1 1 1 1r   r   )r   
_constantsr   	docstringr   r   r   r   r   r	   r
   r   r   r   r   ro   r   rq   r   objectr   rG   rJ   rm   rk   _install_metaclassr{   r   r   r   ra   r   r   <module>r      s  . 
			 $ $ $ $ $ $ * * * * * *                        
J   / / / / / / + + + + + += = =
h+ h+ h+ h+ h+f h+ h+ h+V  4  "@ @ @ @ @t @ @ @*  ' ( ( (+ + + + +"O + + +\- - -`	 	 	1 1 1 1 1 1 1 1 1 1r   