
    f4                        S SK r SSKJr  SSKJr  SSKJrJrJrJ	r	J
r
JrJr  SSKJr  \\4  SSKJr  SSKJr  S	 r " S
 S\5      rS rS r " S S\5      r\R2                  " \5         " S S\\5      rS rS r " S S\\5      rg)    N   )TYPE_INVALID)generate_doc_string)InterfaceInfo
ObjectInfo
StructInfo	VFuncInforegister_interface_infohook_up_vfunc_implementation
GInterface)_gi)_propertyhelper)_signalhelperc                 ~    [         R                  " SSU 5      n[         R                  " SSU5      R                  5       $ )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   ,   s2    	"Hd	3B66%x4::<<    c                   8    \ rS rSrS rS rS rS rS rS r	Sr
g	)
MetaClassHelper1   c                 r    U R                   R                  5        H  n[        XR                  U5        M     g N)__info__get_methodssetattr__name__)clsmethod_infos     r   _setup_methodsMetaClassHelper._setup_methods2   s)    <<335KC--{; 6r   c                     U R                   nUR                  5       nUc  g UR                  5        H6  nUR                  n[	        X5      (       a  M!  [        X[        U5      5        M8     g r   )r   get_class_structr   r!   hasattrr    classmethod)r"   infoclass_structr#   r   s        r   _setup_class_methods$MetaClassHelper._setup_class_methods6   sZ    ||,,.'335K''D3%%;{#;<	 6r   c           	          U R                   R                  5        HM  nUR                  5       R                  SS5      n[	        X[        UR                  UR                  5      5        MO     g )N-_)r   
get_fieldsget_namereplacer    property	get_value	set_value)r"   
field_infor   s      r   _setup_fieldsMetaClassHelper._setup_fieldsA   sQ    ,,113J&&(00c:DCx
(<(<j>R>RST 4r   c                     U R                   R                  5        H/  nUR                  5       nUR                  5       n[	        XU5        M1     g r   )r   get_constantsr2   r5   r    )r"   constant_infor   values       r   _setup_constants MetaClassHelper._setup_constantsF   s?     \\779M ))+D!++-ECu% :r   c                 |   U R                   R                  5        GH  u  pUR                  S5      (       a  [        U5      (       d  M.  SnS nU R                   H  n[        XQS 5      nUb  [        U[        5      (       a  Un  O[        US5      (       a  [        UR                  S5      (       d  MY  [        UR                  R                  5       5      nUR                  R                  5        H%  nUSU< SUR                  5       < 3:X  d  M!  UnSn  O   U(       d  M    O   Uc"  [        U R                  U[!        S5      S  5      nUc  GM5  U(       d  [#        X@R                  5      n	U	b  UR%                  5       n
['        SU< SU R                  R)                  5       < S	U R                  R                  5       < S
U
R)                  5       < S	U
R                  5       < SU	R                  R)                  5       < S	U	R                  R                  5       < 35      e[+        X@R,                  U5        GM      g )Ndo_Fr   
get_vfuncsr0   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_namerB   r2   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_vfuncsMetaClassHelper._setup_vfuncsL   s   $'LL$6$6$8 J((//x7I7I#(  J 48%*VY*G*G!'JtZ00|8\8\&t}}'B'B'DE	113A!9ajjl%KK%&
/3,	 4 :% $4 !9#--TWX]T^T_I`a
% ,%A*mm%\N%1$.$<$<$>	')3),)C)C)E),)>)>)@)2)@)@)B)2););)=)7)@)@)N)N)P)7)@)@)I)I)K	)* 	+ 	+ -Z-57s %9r   c                    U R                   R                  S5      nUb  [        U[        5      (       d  g U R                  S:X  a  U R
                  S:X  a  g UR                  5        H  nSUR
                  -  n[        XU5        M      g )Nr   zgi.repository.GObjectObjectzdo_%s)rD   getrJ   r   
__module__r!   rB   r    )r"   
class_inforW   r   s       r   _setup_native_vfuncs$MetaClassHelper._setup_native_vfuncs   sw    
 \\%%j1
Z
J%G%G >>449Q$//1JZ000DCz* 2r    N)r!   rc   __qualname____firstlineno__r$   r,   r8   r>   r^   re   __static_attributes__rg   r   r   r   r   1   s"    <	=U
&;7z+r   r   c                 f   U  H  nU[         L d&  [        U[         5      (       a  [        US5      (       d  M4  [        UR                  [
        5      (       a;  UR                  R                  5        H  nUR                  5       U:X  d  M  Us  s  $    [        UR                  U5      nUc  M  Us  $    g )Nr   )
r   
issubclassr(   rJ   r   r   rB   r2   rL   rM   )basesrT   rX   vfuncs       r   rL   rL      s     :tZ00D*-- dmm]33113>>#z1 L 4
 -T^^ZHL) , r   c                 R   U H  n[        US5      (       a  [        UR                  S5      (       d  M1  UR                  R                  5       nU R                  5       nU H$  nUR                  5       U:X  d  M  XP:w  d  M   Us  s  $    [	        XR
                  5      nUc  M  Us  $    g )Nr   rB   )r(   r   rB   r2   rO   rM   )rn   rm   klassvfuncsrT   r[   aklasss          r   rO   rO      s    uj))ENNL99**,^^%
Azz|z)aj  .e__EM  r   c                   $    \ rS rSrSrS rS rSrg)_GObjectMetaBase   z8Metaclass for automatically registering GObject classes.c                     [         R                  XX#5        [        R                  " U 5        [        R
                  " U 5        U R                  U R                  5        g r   )type__init__propertyhelperinstall_propertiessignalhelperinstall_signals_type_registerrD   )r"   r   rm   dict_s       r   rx   _GObjectMetaBase.__init__   s>    c.))#.$$S)3<<(r   c                     SU;   a  g U R                   R                  S5      (       a  g [        R                  " XR	                  S5      5        g )NrS   zgi.overrides.__gtype_name__)rc   rF   r   type_registerrb   )r"   	namespaces     r   r}   _GObjectMetaBase._type_register   s?    )# >>$$_55#}}-=>?r   rg   N)r!   rc   rh   ri   __doc__rx   r}   rj   rg   r   r   rt   rt      s    B)
@r   rt   c                   B   ^  \ rS rSrSrU 4S jrS r\S 5       rSrU =r	$ )GObjectMeta   z+Meta class used for GI GObject based types.c                   > [         [        U ]  XU5        SnU R                  SU R                  R                  5       -   :X  a  SnSnU(       d   U R                  [        R                  :w  a  SnU(       a  U R                  5         g U(       a  [        U R                  [        5      (       a  U R                  5         U R                  5         U R                  5         U R                  5         [        U R                  [        5      (       a  U R                  5         g [        U R                  [        5      (       a$  [        U R                  R!                  5       5        g g g )NFgi.repository.T)superr   rx   rc   r   rR   r^   rJ   r   r,   r$   r>   re   r8   r   r
   
get_g_type)r"   r   rm   r~   is_gi_definedis_python_defined	__class__s         r   rx   GObjectMeta.__init__   s    k3(e<>>-0J0J0LLL M!;3I3I!I $#,,
33((*   "$$&#,,
33!!#CLL-88'(?(?(AB 9 r   c                     [        U 5      $ r   )mror"   s    r   r   GObjectMeta.mro   s    3xr   c                     U [         :X  a  gU R                  R                  SS5      nUb  U$ U R                  R	                  S5      (       a  [        U R                  5      $ g)zFMeta class property which shows up on any class using this meta-class. r   N)r   zgi.overrides)r   rD   rb   rc   rF   r   r   )r"   docs     r   r   GObjectMeta.__doc__   sY     +lly$/?J >>$$%GHH&s||44r   rg   )
r!   rc   rh   ri   r   rx   r   r4   rj   __classcell__r   s   @r   r   r      s%    5C0  r   r   c                 2   / nU //nU R                   (       aE  U R                    H  nU[        UR                  5      /-  nM     U[        U R                   5      /-  nU(       a  U HC  nUS   nU Vs/ s H  oeUSS ;   d  M  UPM     nnU(       a  [        UR                   ;  a  SnMC    O   Wc  [	        S5      eUR                  U5        USS  H4  nU(       d  M  US   U:X  d  M  US	 U(       a  M#  UR                  U5        M6     U(       a  M  U$ s  snf )aD  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   r   Nz8Cannot create a consistent method resolution order (MRO))rM   listrH   r   rQ   appendremove)Crm   bases_of_subclassesrX   subclass_bases	candidatesnot_heads           r   r   r     s"    E3%{{KKD  D$6#77   	Q[[ 122
1N&q)I#6M#6aqu:L#6HMJi.A.AA 	 2  * + + 	Y1!4N~."3y"@"1%%~'..~>	 5 
* L% Ns   2DDc                      g r   rg   )argskwargss     r   nothingr   =  s    r   c                   <   ^  \ rS rSrSrU 4S jr\S 5       rSrU =r$ )
StructMetaiA  z*Meta class used for GI Struct based types.c                   > [         [        U ]  XU5        U R                  R	                  5       nU[
        :w  a  UR                  b  g U R                  5         U R                  5         U R                  R                  5        H|  nUR                  5       (       d  M  UR                  S:X  d  M,  UR                  5       (       a   U R                  R                  5       S:X  d  Ma  [        U5      U l        [         U l          g    g )Nnewr   )r   r   rx   r   r   r   pytyper8   r$   r   is_constructorr!   get_argumentsget_sizestaticmethod__new__r   )r"   r   rm   r~   g_typer#   r   s         r   rx   StructMeta.__init__D  s    j#'U; ((*\!fmm&?<<335K))++((E1$2244\\**,1*;7  ' 6r   c                 B    U [         :X  a  g[        U R                  5      $ )Nr   )r   r   r   r   s    r   r   StructMeta.__doc__Z  s    *"3<<00r   rg   )	r!   rc   rh   ri   r   rx   r4   rj   r   r   s   @r   r   r   A  s    4, 1 1r   r   )r   
_constantsr   	docstringr   r   r   r   r   r	   r
   r   r   r   r   ry   r   r{   r   objectr   rL   rO   rw   rt   _install_metaclassr   r   r   r   rg   r   r   <module>r      s   . 
 $ *    
J  / +=
h+f h+V4"@t @*   ' (+"O +\-`	1 1r   