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rt }	|	  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