o
    +	\b¼'  ã                   @   s¦   d dl mZ d dlmZ d dlmZmZmZ dd„ Zdd„ Z	dd	„ Z
d
d„ Zdd„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZdd„ ZG dd„ deƒZdgZdS )é    )Úabc)Úpartial)ÚGLibÚGObjectÚGioc                 C   sž   d }t | tjƒr|  |d ¡}nt| |d ƒ}|d u rtd| ƒ‚d}t |tjƒrAt|ƒdkr3td| ƒ‚|dd … }|d }||fS t	|ƒsKtd| ƒ‚||fS )NzHandler %s not found© r   z!Handler %s tuple can not be emptyé   z-Handler %s is not a method, function or tuple)
Ú
isinstancer   ÚMappingÚgetÚgetattrÚAttributeErrorÚSequenceÚlenÚ	TypeErrorÚcallable)Ú
obj_or_mapÚhandler_nameÚhandlerÚargsr   r   ú1/usr/lib/python3/dist-packages/gi/_gtktemplate.pyÚ_extract_handler_and_args   s    ýr   c                     s*   ddl m‰  G ‡ fdd„dtjˆ jƒ} | S )Nr   ©ÚGtkc                       s*   e Zd Zd‡ fdd„	Z‡fdd„Z‡  ZS )z*define_builder_scope.<locals>.BuilderScopeNc                    s   t ƒ  ¡  || _d S ©N)ÚsuperÚ__init__Ú_scope_object)ÚselfÚscope_object©Ú	__class__r   r   r   6   s   

z3define_builder_scope.<locals>.BuilderScope.__init__c                    s´   |  ¡ p| j}| js!|  ¡ }||jvrd S |j |¡ |j| }n| j}|}t|ˆ jj@ ƒ}|r8tdt	j
j ƒ‚t||ƒ\}}	|rMt|g|	¢R d|iŽ}
nt|g|	¢R Ž }
d|
_|
S )Nú%r not supportedÚ	swap_dataT)Úget_current_objectr   Ú__gtktemplate_methods__Ú__gtktemplate_handlers__ÚaddÚintÚBuilderClosureFlagsÚSWAPPEDÚRuntimeErrorr   ÚConnectFlagsr   r   Ú__gtk_template__)r   ÚbuilderÚ	func_nameÚflagsÚobjÚcurrent_objectr   Úswappedr   r   Úpr   r   r   Údo_create_closure:   s(   

ÿz<define_builder_scope.<locals>.BuilderScope.do_create_closurer   )Ú__name__Ú
__module__Ú__qualname__r   r5   Ú__classcell__r   r   r    r   ÚBuilderScope4   s    r:   )Úgi.repositoryr   r   r:   )r:   r   r   r   Údefine_builder_scope1   s   $r<   c                 C   s¸   ||j vrd S |j | }|  |j¡}|j |¡ t||ƒ}	t|tjj	@ ƒ}
t|tjj
@ ƒ}|r7tdtjj
 ƒ‚|d urL|
rA|j}n|j}|||	|ƒ d S |
rR|j}n|j}|||	ƒ d S )Nr"   )r%   Ú
get_objectÚ__gtype_name__r&   r'   r   r(   r   r,   ÚAFTERr*   r+   Úconnect_object_afterÚconnect_objectÚconnect_afterÚconnect)r.   r1   Úsignal_namer   rA   r0   ÚclsÚmethod_nameÚtemplate_instr   Úafterr3   Úfuncr   r   r   Úconnect_func[   s*   



ÿrJ   c           
         s0  ddl m} i }i }tˆj ¡ ƒD ]Z\}}t|tƒr@tˆ||jƒ |j	}|d u r*|}||v r;|| }t
d|||f ƒ‚|||< qt|tƒrk|j	}|d u rN|}||v r_|| }t
d|||f ƒ‚|||< ˆ ||jd¡ q|ˆ_|ˆ_|jdkr�tƒ }	ˆ |	ƒ ¡ nˆ tˆ¡ ˆj‰ ‡ ‡fdd„ˆ_ˆjˆ_d S )Nr   r   z>Error while exposing handler %r as %r, already available as %rz<Error while exposing child %r as %r, already available as %rz4.0c                    s   t | ˆˆ ƒS r   )Úinit_template)Ús©Úbase_init_templaterE   r   r   Ú<lambda>©   s    z#register_template.<locals>.<lambda>)r;   r   ÚlistÚ__dict__Úitemsr	   Ú	CallThingÚsetattrÚ_funcÚ_namer+   ÚChildÚbind_template_child_fullÚ	_internalr%   Ú__gtktemplate_widgets__Ú_versionr<   Úset_template_scopeÚset_connect_funcrJ   rK   Ú__dontuse_ginstance_init__)
rE   r   Úbound_methodsÚbound_widgetsÚ	attr_namer1   r   Úold_attr_nameÚwidget_namer:   r   rM   r   Úregister_templatez   sV   
ÿÿÿ

ÿÿÿ€
ÿrd   c                 C   s€   dd„ | _ | j|urtdƒ‚tƒ | _|| ƒ | j ¡ D ]\}}|  ||¡| j|< q| j	 ¡ D ]\}}|| jvr=t
d| ƒ‚q.d S )Nc                   S   s   d S r   r   r   r   r   r   rO   °   s    zinit_template.<locals>.<lambda>zRInheritance from classes with @Gtk.Template decorators is not allowed at this timezUHandler '%s' was declared with @Gtk.Template.Callback but was not present in template)rK   r!   r   Úsetr&   rZ   rR   Úget_template_childrQ   r%   r+   )r   rE   rN   rc   ra   r   r   r   r   rK   ¯   s$   

ÿ
ÿÿÿÿrK   c                   @   s   e Zd Zddd„ZdS )rW   Nc                 K   s(   || _ | dd¡| _|rtd| ƒ‚d S )NÚinternalFzUnhandled arguments: %r)rV   ÚpoprY   r   )r   ÚnameÚkwargsr   r   r   r   Ç   s
   ÿzChild.__init__r   ©r6   r7   r8   r   r   r   r   r   rW   Å   s    rW   c                   @   s   e Zd Zdd„ ZdS )rS   c                 C   s   || _ || _d S r   )rV   rU   )r   ri   rI   r   r   r   r   Ð   s   
zCallThing.__init__Nrk   r   r   r   r   rS   Î   s    rS   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚCallbackNc                 C   s
   || _ d S r   )rV   )r   ri   r   r   r   r   ×   s   
zCallback.__init__c                 C   s   t | j|ƒS r   )rS   rV   )r   rI   r   r   r   Ú__call__Ú   s   zCallback.__call__r   )r6   r7   r8   r   rm   r   r   r   r   rl   Õ   s    
rl   c                 C   s>   zt  | t jj¡ W dS  tjy   t  | t jj¡ Y dS w )z4Raises GLib.Error in case the resource doesn't existN)r   Úresources_get_infoÚResourceLookupFlagsÚNONEr   ÚErrorÚresources_lookup_data)Úpathr   r   r   Úvalidate_resource_pathÞ   s
   ürt   c                   @   sH   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZeZe	Z	d	d
„ Z
dS )ÚTemplatec                 K   sp   d | _ d | _d | _d|v r| d¡| _ nd|v r| d¡| _nd|v r*| d¡| _ntdƒ‚|r6td| ƒ‚d S )NÚstringÚfilenameÚresource_pathzHRequires one of the following arguments: string, filename, resource_pathzUnhandled keyword arguments %r)rv   rw   rx   rh   r   )r   rj   r   r   r   r   ì   s   ÿÿzTemplate.__init__c                 C   ó
   | |d�S )N)rw   r   )rE   rw   r   r   r   Ú	from_fileþ   ó   
zTemplate.from_filec                 C   ry   )N)rv   r   )rE   rv   r   r   r   Úfrom_string  r{   zTemplate.from_stringc                 C   ry   )N)rx   r   )rE   rx   r   r   r   Úfrom_resource  r{   zTemplate.from_resourcec                 C   s  ddl m} t|tƒrt||jƒstdƒ‚d|jvr!td|j ƒ‚t	|dƒr*tdƒ‚| j
d urM| j
}t|tƒs<| d¡}tj |¡}| |¡ t|ƒ |S | jd urct| jƒ | | j¡ t|ƒ |S | jd usjJ ‚tj | j¡}tj | ¡ d	 ¡}| |¡ t|ƒ |S )
Nr   r   z%Can only use @Gtk.Template on Widgetsr>   zS%r does not have a __gtype_name__. Set it to the name of the class in your templater%   zCannot nest template classeszutf-8r   )r;   r   r	   ÚtypeÚ
issubclassÚWidgetr   rQ   r6   Úhasattrrv   ÚbytesÚencoder   ÚBytesÚnewÚset_templaterd   rx   rt   Úset_template_from_resourcerw   r   ÚFileÚnew_for_pathÚload_contents)r   rE   r   ÚdataÚbytes_Úfile_r   r   r   rm     s<   
ÿÿ







zTemplate.__call__N)r6   r7   r8   r   Úclassmethodrz   r|   r}   rl   rW   rm   r   r   r   r   ru   ê   s    


ru   N)Úcollectionsr   Ú	functoolsr   r;   r   r   r   r   r<   rJ   rd   rK   ÚobjectrW   rS   rl   rt   ru   Ú__all__r   r   r   r   Ú<module>   s   *5		
H