U
    ÍZjû7  ã                   @   sÐ   d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ejZejZej Z ej!Z!ej"Z"ej#Z#ej$Z$ej%Z%G dd„ de&ƒZ'dd„ Z(dS )	é   )Ú_gi)Ústring_typesÚlong_)Ú	TYPE_NONEÚTYPE_INTERFACEÚ	TYPE_CHARÚ
TYPE_UCHARÚTYPE_BOOLEANÚTYPE_INTÚ	TYPE_UINTÚ	TYPE_LONGÚ
TYPE_ULONGÚ
TYPE_INT64ÚTYPE_UINT64Ú	TYPE_ENUMÚ
TYPE_FLAGSÚ
TYPE_FLOATÚTYPE_DOUBLEÚTYPE_STRINGÚTYPE_POINTERÚ
TYPE_BOXEDÚ
TYPE_PARAMÚTYPE_OBJECTÚTYPE_PYOBJECTÚ
TYPE_GTYPEÚ	TYPE_STRVÚTYPE_VARIANTc                   @   sN  e Zd ZdZeeeeee	e
eeeeeiZedededee ee eeeeediZeeeeededeeeeeeeeiZedededededededededi	Z G dd	„ d	e!ƒZ"d
d
d
d
dde#j$d
d
f	dd„Z%dd„ Z&dd„ Z'dd„ Z(dd„ Z)dd„ Z*dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd „ Z/d!d"„ Z0d#d$„ Z1d%d&„ Z2d'd(„ Z3d)d*„ Z4d+d,„ Z5d
S )-ÚPropertyaÄ  Creates a new Property which when used in conjunction with
    GObject subclass will create a Python property accessor for the
    GObject ParamSpec.

    :param callable getter:
        getter to get the value of the property
    :param callable setter:
        setter to set the value of the property
    :param type type:
        type of property
    :param default:
        default value, must match the property type.
    :param str nick:
        short description
    :param str blurb:
        long description
    :param GObject.ParamFlags flags:
        parameter flags
    :keyword minimum:
        minimum allowed value (int, float, long only)
    :keyword maximum:
        maximum allowed value (int, float, long only)

    .. code-block:: python

         class MyObject(GObject.Object):
             prop = GObject.Property(type=str)

         obj = MyObject()
         obj.prop = 'value'

         obj.prop  # now is 'value'

    The API is similar to the builtin :py:func:`property`:

    .. code-block:: python

        class AnotherObject(GObject.Object):
            value = 0

            @GObject.Property
            def prop(self):
                'Read only property.'
                return 1

            @GObject.Property(type=int)
            def propInt(self):
                'Read-write integer property.'
                return self.value

            @propInt.setter
            def propInt(self, value):
                self.value = value
    é    lûÿÿÿ         l   ÿÿÿÿ l   ÿÿÿÿ Ú g        c                   @   s   e Zd Zdd„ ZdS )zProperty.__metaclass__c                 C   s   dS )Nz<class 'GObject.Property'>© ©Úselfr    r    úU/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/gi/_propertyhelper.pyÚ__repr__�   s    zProperty.__metaclass__.__repr__N)Ú__name__Ú
__module__Ú__qualname__r$   r    r    r    r#   Ú__metaclass__Œ   s   r(   Nc
           
      C   s4  d | _ |d krt}|  |¡| _|  |¡| _|  ¡  t|tƒsDt	dƒ‚|| _
t|tƒs\t	dƒ‚|| _|| _|| _|r~|s~| j}n$|rŽ|sŽ| j}n|s¢|s¢| j}| j}|  |¡ || _|d k	rÞ||  ¡ k ræt	d| j|  ¡ f ƒ‚n|  ¡ }|| _|	d k	�r|	|  ¡ k�r$t	d| j|  ¡ f ƒ‚n|  ¡ }	|	| _d | _d S )Nznick must be a stringzblurb must be a stringz+Minimum for type %s cannot be lower than %dz,Maximum for type %s cannot be higher than %d)ÚnameÚobjectÚ_type_from_pythonÚtypeÚ_get_defaultÚdefaultÚ_check_defaultÚ
isinstancer   Ú	TypeErrorÚnickÚblurbÚ__doc__ÚflagsÚ_readonly_setterÚ_writeonly_getterÚ_default_getterÚ_default_setterÚgetterÚfsetÚ_get_minimumÚminimumÚ_get_maximumÚmaximumÚ_exc)
r"   r:   Úsetterr,   r.   r2   r3   r5   r=   r?   r    r    r#   Ú__init__�   sT    


ÿÿ
ÿÿzProperty.__init__c                 C   s   d| j p
d| jj f S )Nz<GObject Property %s (%s)>z(uninitialized))r)   r,   r!   r    r    r#   r$   È   s    þzProperty.__repr__c                 C   s6   |d kr| S d | _ |  |¡}| j r2| j }d | _ |‚|S ©N)r@   Úfget)r"   ÚinstanceÚklassÚvalueÚexcr    r    r#   Ú__get__Í   s    
zProperty.__get__c                 C   s:   |d krt ‚d | _| | j|¡ | jr6| j}d | _|‚d S rC   )r1   r@   Zset_propertyr)   )r"   rE   rG   rH   r    r    r#   Ú__set__Ú   s    zProperty.__set__c                 C   s
   |   |¡S )z;Allows application of the getter along with init arguments.)r:   ©r"   rD   r    r    r#   Ú__call__å   s    zProperty.__call__c                 C   s    |j r|j | _|j | _ || _| S )z8Set the getter function to fget. For use as a decorator.)r4   r3   rD   rK   r    r    r#   r:   é   s
    zProperty.getterc                 C   s   || _ | js| jj| _| S )z8Set the setter function to fset. For use as a decorator.)r;   r)   rD   r%   )r"   r;   r    r    r#   rA   ò   s    
zProperty.setterc                 C   sŒ   || j kr| j | S t|tƒrBt|tjtjtjtjtj	fƒrB|j
S |tttttttttttttttttttttt fkrz|S t!d|f ƒ‚d S )NzUnsupported type: %r)"Ú_type_from_pytype_lookupr0   r,   Ú
issubclassr   ZGObjectZGEnumZGFlagsZGBoxedZ
GInterfaceÚ	__gtype__r   r   r   r   r
   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   )r"   Útype_r    r    r#   r+   ü   sB    


üÿ
             ûzProperty._type_from_pythonc                 C   s   |d k	r|S | j  | jd ¡S rC   )Ú_default_lookupÚgetr,   )r"   r.   r    r    r#   r-     s    zProperty._get_defaultc                 C   sz  | j }| j}|tkr.|dkr.td|f ƒ‚�nH|tkrJ|d k	rFtdƒ‚�n,|tkrf|d k	rbtdƒ‚�n| t¡r¤|d kr‚tdƒ‚n t 	|¡ |¡s¢td||f ƒ‚nÒ| t
¡rÐt 	|¡ |¡sÎtd||f ƒ‚n¦| t¡�r2|d k	�r2t|tƒ�stdt|ƒ ƒ‚|D ](}t |ƒttfk�rtd	t|ƒ ƒ‚�qnD| t¡�rv|d k	�rvt|d
ƒ�rft 	|¡ t¡�svtd||f ƒ‚d S )N)TFz%default must be True or False, not %rz)object types does not have default valuesz(GType types does not have default valuesz%enum properties needs a default valuez'enum value %s must be an instance of %rz(flags value %s must be an instance of %rzStrv value %s must be a listz'Strv value %s must contain only stringsrO   z*variant value %s must be an instance of %r)r,   r.   r	   r1   r   r   Úis_ar   r   ZGTyper   r   r0   ÚlistÚreprÚstrÚbytesr   Úhasattr)r"   Úptyper.   Úvalr    r    r#   r/     sF    ÿ

ÿ
ÿÿzProperty._check_defaultc                 C   s   | j  | jd ¡S rC   )Ú_min_value_lookuprR   r,   r!   r    r    r#   r<   6  s    zProperty._get_minimumc                 C   s   | j  | jd ¡S rC   )Ú_max_value_lookuprR   r,   r!   r    r    r#   r>   9  s    zProperty._get_maximumc                 C   s   t |d| j |ƒ d S ©NZ_property_helper_)Úsetattrr)   ©r"   rE   rG   r    r    r#   r9   @  s    zProperty._default_setterc                 C   s   t |d| j | jƒS r]   )Úgetattrr)   r.   ©r"   rE   r    r    r#   r8   C  s    zProperty._default_getterc                 C   s   t d| jt|ƒjf ƒ| _d S )Nz%s property of %s is read-only©r1   r)   r,   r%   r@   r_   r    r    r#   r6   F  s     ÿzProperty._readonly_setterc                 C   s   t d| jt|ƒjf ƒ| _d S )Nz%s property of %s is write-onlyrb   ra   r    r    r#   r7   J  s     ÿzProperty._writeonly_getterc              	   C   s¸   | j }|ttttttttfkr0| j	| j
| jf}nl|tks^|tks^| t¡s^| t¡s^| t¡rh| jf}n4|ttfkrzd}n"| t¡sŽ| t¡r”d}nt|ƒ‚| j | j| jf| | jf S )Nr    )r,   r
   r   r   r   r   r   r   r   r=   r?   r.   r   r	   rS   r   r   r   r   r   r   r   ÚNotImplementedErrorr2   r3   r5   )r"   rY   Úargsr    r    r#   Úget_pspec_argsR  s,    
   ÿÿÿþ
zProperty.get_pspec_args)6r%   r&   r'   r4   r   r   Úintr
   Úboolr	   Úfloatr   rV   r   r*   r   rM   r   r   r   r   Ú
G_MAXFLOATÚG_MAXDOUBLEÚG_MININTÚ	G_MINLONGr   r[   Ú	G_MAXUINTÚ
G_MAXULONGÚG_MAXINTÚ	G_MAXLONGr\   rQ   r,   r(   r   ZPARAM_READWRITErB   r$   rI   rJ   rL   r:   rA   r+   r-   r/   r<   r>   r9   r8   r6   r7   re   r    r    r    r#   r   (   s¶   8      ù        ÷        ø         ÷   þ
8	
!r   c                    sø   ˆ j  di ¡}g }ˆ j  ¡ D ]b\}}t|tƒr|js:||_|j|krf||j | ¡ krXqtd|j ƒ‚| ¡ ||j< | |¡ q|sˆdS |ˆ _	dˆ j ks¢dˆ j krÔ|D ],}|j
|jksÂ|j|jkr¦tdˆ jf ƒ‚q¦dd„ }|ˆ _‡ fd	d
„}|ˆ _dS )z“
    Scans the given class for instances of Property and merges them
    into the classes __gproperties__ dict if it exists or adds it if not.
    Ú__gproperties__z0Property %s was already found in __gproperties__NÚdo_get_propertyÚdo_set_propertyzGObject subclass %r defines do_get/set_property and it also uses a property with a custom setter or getter. This is not allowedc                 S   s   |j  dd¡}t| |d ƒS ©Nú-Ú_)r)   Úreplacer`   )r"   Úpspecr)   r    r    r#   Úobj_get_property‹  s    z,install_properties.<locals>.obj_get_propertyc                    s.   |j  dd¡}tˆ |d ƒ}|r*| | |¡ d S rt   )r)   rw   r`   r;   )r"   rx   rG   r)   Úprop©Úclsr    r#   Úobj_set_property�  s    z,install_properties.<locals>.obj_set_property)Ú__dict__rR   Úitemsr0   r   r)   re   Ú
ValueErrorÚappendrq   rD   r8   r;   r9   r1   r%   rr   rs   )r|   ZgpropertiesÚpropsr)   rz   ry   r}   r    r{   r#   Úinstall_propertiese  s6    

ýÿrƒ   N))r   r   Z_compatr   r   Ú
_constantsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ri   rj   rk   ro   rm   rl   rp   rn   r*   r   rƒ   r    r    r    r#   Ú<module>   s   h  ?