o
    ¬+ Zv  ã                   @   sf  d Z dZddlmZ ddlT ddlT ddlmZ ddlm	Z	 ddlm
Z
 G dd	„ d	e	ƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG d d!„ d!eƒZG d"d#„ d#eƒZG d$d%„ d%eƒZG d&d'„ d'eƒZd(d)„ Zed*kr±eƒ  d+S d+S ),z3.3.0aè  This file is a collection of widgets to produce some common signs and symbols.

Widgets include:

- ETriangle (an equilateral triangle),
- RTriangle (a right angled triangle),
- Octagon,
- Crossbox,
- Tickbox,
- SmileyFace,
- StopSign,
- NoEntry,
- NotAllowed (the red roundel from 'no smoking' signs),
- NoSmoking,
- DangerSign (a black exclamation point in a yellow triangle),
- YesNo (returns a tickbox or a crossbox depending on a testvalue),
- FloppyDisk,
- ArrowOne, and
- ArrowTwo
é    )Úcolors)Ú*)Úshapes)ÚWidget)Ú	renderPDFc                
   @   sl   e Zd ZdZdZeeedd�eedd�eedd�eedd�eeƒeeƒeeƒeeƒd�Z	dd	„ Z
d
d„ ZdS )Ú_SymbolzcAbstract base widget
    possible attributes:
    'x', 'y', 'size', 'fillColor', 'strokeColor'
    é   zsymbol x coordinate©Údesczsymbol y coordinatezsymbol x coordinate adjustment)ÚxÚyÚdxÚdyÚsizeÚ	fillColorÚstrokeColorÚstrokeWidthc                 C   sJ   | j jdks
J dƒ‚d | _ | _ | _| _d| _tj| _	d | _
d| _d S )Nr   z#Abstract class _Symbol instantiatedr   éd   çš™™™™™¹?)Ú	__class__Ú__name__r   r   r   r   r   r   Úredr   r   r   ©Úself© r   ú\/var/www/html/env/lib/python3.10/site-packages/reportlab/graphics/widgets/signsandsymbols.pyÚ__init__6   s   
z_Symbol.__init__c              
   C   sr   t  dd¡}t| jƒ}|  ¡ }d|_d|_| ¡  | |¡ | t j	|j|d  |jd |jj
tjddd	�¡ |S )
NéÈ   r   é2   r   é   é   Úmiddleé
   ©r   Ú
textAnchorÚfontSize)r   ÚDrawingÚfloatr   r   r   r   ÚdrawÚaddÚStringr   r   Úblack)r   ÚDÚsÚobr   r   r   Údemo>   s   

þz_Symbol.demoN)r   Ú
__module__Ú__qualname__Ú__doc__Ú_nodocÚAttrMapÚAttrMapValueÚisNumberÚisColorOrNoneÚ_attrMapr   r/   r   r   r   r   r   &   s    



ø
r   c                   @   ó    e Zd ZdZdd„ Zdd„ ZdS )Ú	ETrianglez#This draws an equilateral triangle.c                 C   s   d S ©Nr   r   r   r   r   r   N   s   zETriangle.__init__c                 C   sj   t | jƒ}t ¡ }|d }tj| j| j| j| | j| j|d  | j| g| j| j|d d�}| 	|¡ |S )Nç      À?r   ç      I@©Úpointsr   r   r   ©
r'   r   r   ÚGroupÚPolygonr   r   r   r   r)   ©r   r-   ÚgÚaeÚtriangler   r   r   r(   Q   s   
ýú
zETriangle.drawN©r   r0   r1   r2   r   r(   r   r   r   r   r:   K   s    r:   c                   @   r9   )Ú	RTrianglez€This draws a right-angled triangle.

        possible attributes:
        'x', 'y', 'size', 'fillColor', 'strokeColor'

        c                 C   ó$   d| _ d| _d| _tj| _d | _d S ©Nr   r   )r   r   r   r   Úgreenr   r   r   r   r   r   r   j   ó
   
zRTriangle.__init__c                 C   sb   t | jƒ}t ¡ }|d }tj| j| j| j| | j| j| j| g| j| j|d d�}| 	|¡ |S )Nr<   r=   r>   r@   rC   r   r   r   r(   q   s   
ýú
zRTriangle.drawNrG   r   r   r   r   rH   b   ó    rH   c                   @   r9   )ÚOctagonzvThis widget draws an Octagon.

        possible attributes:
        'x', 'y', 'size', 'fillColor', 'strokeColor'

    c                 C   rI   rJ   )r   r   r   r   Úyellowr   r   r   r   r   r   r   Š   rL   zOctagon.__init__c                 C   s¾   t | jƒ}t ¡ }|d }tj| j| | j| j| j| | j| j|d  | j| | j| | j|d  | j| | j| | j|d  | j| | j| | j|d  | jg| j| jdd�}| 	|¡ |S )Né   r   r"   ©r?   r   r   r   )
r'   r   r   rA   rB   r   r   r   r   r)   )r   r-   rD   ÚathirdÚoctagonr   r   r   r(   ‘   s$   
ùö
zOctagon.drawNrG   r   r   r   r   rN   ‚   rM   rN   c                   @   ó6   e Zd ZdZeeeeƒeeƒd�Z	dd„ Z
dd„ ZdS )ÚCrossboxz¥This draws a black box with a red cross in it - a 'checkbox'.

        possible attributes:
        'x', 'y', 'size', 'crossColor', 'strokeColor', 'crosswidth'

    )ÚBASEÚ
crossColorÚ
crosswidthc                 C   ó4   d| _ d| _d| _tj| _tj| _tj| _	d| _
d S ©Nr   r   r"   )r   r   r   r   Úwhiter   r   rW   r+   r   rX   r   r   r   r   r   ´   ó   
zCrossbox.__init__c              	   C   sð   t | jƒ}t ¡ }tj| jd | jd |d |d | j| jdd�}| 	|¡ tj
| j|d  | j|d  | j|d  | j|d  | j| j| jd�}| 	|¡ tj
| j|d  | j|d  | j|d  | j|d  | j| j| jd�}| 	|¡ |S )Nr   r   ©r   r   r   ç333333Ã?ç333333ë?)r'   r   r   rA   ÚRectr   r   r   r   r)   ÚLinerW   rX   )r   r-   rD   ÚboxÚ
crossLine1Ú
crossLine2r   r   r   r(   ½   s*   
 ý
4ý
4ý
zCrossbox.drawN©r   r0   r1   r2   r4   r   r5   r7   r6   r8   r   r(   r   r   r   r   rU   §   ó    þ	rU   c                   @   rT   )ÚTickboxz¤This draws a black box with a red tick in it - another 'checkbox'.

        possible attributes:
        'x', 'y', 'size', 'tickColor', 'strokeColor', 'tickwidth'

)rV   Ú	tickColorÚ	tickwidthc                 C   rY   rZ   )r   r   r   r   r   rh   r+   r   r[   r   ri   r   r   r   r   r   å   r\   zTickbox.__init__c                 C   sÒ   t | jƒ}t ¡ }tj| jd | jd |d |d | j| jdd�}| 	|¡ tj
| j|d  | j|d  | j|d  | j|d  | j|d  | j|d  | j|d  | j|d  g| j| j| jd�}| 	|¡ |S )Nr   r   r]   r^   çffffffÖ?r_   r>   )r'   r   r   rA   r`   r   r   r   r   r)   ÚPolyLinerh   ri   )r   r-   rD   rb   ÚtickLiner   r   r   r(   î   s"   
 ý
40ÿü
zTickbox.drawNre   r   r   r   r   rg   Ø   rf   rg   c                   @   r9   )Ú
SmileyFacezkThis draws a classic smiley face.

        possible attributes:
        'x', 'y', 'size', 'fillColor'

    c                 C   s0   t  | ¡ d| _d| _d| _tj| _tj| _	d S rJ   )
r   r   r   r   r   r   rO   r   r+   r   r   r   r   r   r     s   
zSmileyFace.__init__c                 C   sÀ  t | jƒ}t ¡ }| tj| j|d  | j|d  |d | j| j	t
|d | jƒd�¡ dD ]+}| tj| j|d |  | j|d d  |d |d | j	| j	t
|d | jƒd�¡ q-| j|d  }| j|d  }|d }|}|}d	}	d
}
d}g }|j}ddlm}m}m} |d }|| }|	| }|
| }||k r¢|d|  }||k s˜|}||k rÈ|||ƒ|  }|||ƒ|  }||ƒ ||ƒ || }||k s¨tj|| j	| j	t
|d | jƒd�}| |¡ |S )Nr   g      C@©ÚcxÚcyÚrr   r   r   )r   r   rP   é   r"   r]   r   iT  r   r   ©ÚsinÚcosÚpiç     €f@)r'   r   r   rA   r)   ÚCircler   r   r   r   Úmaxr   ÚEllipseÚappendÚmathrt   ru   rv   rk   )r   r-   rD   ÚiÚcenterxÚcenteryÚradiusÚyradiusÚxradiusÚstartangledegreesÚendangledegreesÚdegreedeltaÚ
pointslistÚart   ru   rv   ÚdegreestoradiansÚradiansdeltaÚ
startangleÚendangleÚangler   r   Úsmiler   r   r   r(     sV   
&þ4
þÿüý
zSmileyFace.drawNrG   r   r   r   r   rm     ó    rm   c                   @   ó4   e Zd ZdZeeeedd�d�Zdd„ Z	dd„ Z
d	S )
ÚStopSignzbThis draws a (British) stop sign.

        possible attributes:
        'x', 'y', 'size'

        zcolor of the word stopr	   )rV   Ú	stopColorc                 C   ó.   d| _ d| _d| _tj| _tj| _tj| _	d S rJ   )
r   r   r   r   r+   r   Ú	orangeredr   Ú
ghostwhiter‘   r   r   r   r   r   P  ó   zStopSign.__init__c                 C   s  t | jƒ}t ¡ }|d }tj| j| | j| j| j| | j| j|d  | j| | j| | j|d  | j| | j| | j|d  | j| | j| | j|d  | jg| jd dd�}| |¡ tj| j| |d  | j|d  | j|d  | j| |d  | j|d  | j|d  |d  | j| |d  | j| |d  | j|d  |d  | j| |d  | j| |d  | j|d  |d  | j| |d  | j| |d  | j|d  |d  | j|d  gd | j	dd�}| |¡ | j
�r| tj| j|d  | j|d  d	| j
d
|d dd�¡ |S )NrP   r   r   rQ   éK   r   ç      à?çš™™™™™Ù?ÚSTOPr!   zHelvetica-Bold)r   r$   r%   ÚfontName)r'   r   r   rA   rB   r   r   r   r)   r   r‘   r*   )r   r-   rD   rR   ÚouterOctagonÚinnerOctagonr   r   r   r(   X  sJ   
ùö
   $$  ùö
 þzStopSign.drawN©r   r0   r1   r2   r4   r   r5   r7   r8   r   r(   r   r   r   r   r�   E  s    
ÿr�   c                   @   r�   )
ÚNoEntryz�This draws a (British) No Entry sign - a red circle with a white line on it.

        possible attributes:
        'x', 'y', 'size'

        zcolor of the inner barr	   )rV   ÚinnerBarColorc                 C   r’   rJ   )
r   r   r   r   r+   r   r“   r   r”   rŸ   r   r   r   r   r   Ž  r•   zNoEntry.__init__c                 C   sÜ   t | jƒ}t ¡ }| jr'| tj| j|d  | j|d  |d d | jdd�¡ | j	rI| tj| j|d  | j|d  |d |d  | j	d dd�¡ | j
}|rl| tj| j|d  | j|d  |d |d	 ||ddd
�¡ |S )Nr   r   rn   r   r   r   r˜   çš™™™™™é?çš™™™™™É?)ÚwidthÚheightr   r   ÚstrokeLineCapr   )r'   r   r   rA   r   r)   rx   r   r   r   rŸ   r`   )r   r-   rD   rŸ   r   r   r   r(   –  s   
6><zNoEntry.drawNr�   r   r   r   r   rž   ‚  s    
ÿrž   c                   @   s*   e Zd ZdZeed�Zdd„ Zdd„ ZdS )Ú
NotAllowedzƒThis draws a 'forbidden' roundel (as used in the no-smoking sign).

        possible attributes:
        'x', 'y', 'size'

        )rV   c                 C   s&   d| _ d| _d| _tj| _tj| _d S rJ   )r   r   r   r   r   r   r[   r   r   r   r   r   r   ²  s
   zNotAllowed.__init__c                 C   sp  t | jƒ}t ¡ }| j}tj| j|d  | j|d  |d |d  | j||d d�}| 	|¡ | j| }| j|d  |d  }||d  }|d }|d }	d}
d}d}g }|j
}d	d
lm}m}m} |d }|| }|
| }|| }||k r€|d|  }||k sv|}||k r¦|||ƒ|  }|||ƒ|  }||ƒ ||ƒ || }||k s†tj||||d d�}| 	|¡ |S )Nr   r"   g      $@rn   é   r   i°ÿÿÿéZ   r   rs   rw   r]   )r'   r   r   rA   r   rx   r   r   r   r)   r{   r|   rt   ru   rv   rk   )r   r-   rD   r   ÚouterCircler~   r   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rt   ru   rv   rˆ   r‰   rŠ   r‹   rŒ   r   r   Úcrossbarr   r   r   r(   ¹  sB   
<

ÿü
zNotAllowed.drawN)	r   r0   r1   r2   r4   r   r8   r   r(   r   r   r   r   r¥   §  s
    
r¥   c                   @   r9   )Ú	NoSmokingz^This draws a no-smoking sign.

        possible attributes:
        'x', 'y', 'size'

        c                 C   s   t  | ¡ d S r;   )r¥   r   r   r   r   r   r   ç  s   zNoSmoking.__init__c           	   	   C   s6  t | jƒ}t | ¡}| j|d  |d  }| j|d  |d  }tj|||d |d tj	tj
dd�}||d  |d  }| d|¡ tj|||d	 |d tjd dd�}||d
  }| d|¡ tj|||d	 |d tjd dd�}||d
  }| d|¡ tj|||d	 |d tjd dd�}||d
  }| d|¡ |S )Nr   g      @é    é   r   ©r   r   r¢   r£   r   r   r   é@   éÿÿÿÿéP   é#   )r'   r   r¥   r(   r   r   r   r`   r   r”   ÚgrayÚinsertr“   )	r   r-   rD   ÚnewxÚnewyÚcigarrette1Úcigarrette2Úcigarrette3Úcigarrette4r   r   r   r(   ê  s2   


ÿÿÿÿzNoSmoking.drawNrG   r   r   r   r   rª   ß  s    rª   c                   @   r9   )Ú
DangerSignz´This draws a 'danger' sign: a yellow box with a black exclamation point.

        possible attributes:
        'x', 'y', 'size', 'strokeColor', 'fillColor', 'strokeWidth'

        c                 C   s2   d| _ d| _d| _tj| _tj| _| jd | _d S )Nr   r   r<   )	r   r   r   r   r+   r   Úgoldr   r   r   r   r   r   r     s   zDangerSign.__init__c           	      C   s&  t | jƒ}t ¡ }| j}|d }| j}|d }tj| j| j| j| | j| j|d  | j| gd | jdd�}| 	|¡ tj| j|d  | j|d  | j| |d  | j|d  | j|d  | j| |d  g| j
d dd�}| 	|¡ tj| j|d  |d  | j|d  | j|d  |d  | j|d  | j|d  |d  |d  | j|d	  | j|d  |d  |d  | j|d	  g| jd d
�}| 	|¡ tj| j|d  |d  | j| | j|d  |d  | j| | j|d  |d  | j|d  | j|d  |d  | j|d  g| jd d
�}| 	|¡ |S )Nr<   r   r   r>   r   r–   g      @r¦   g      @)r?   r   r   )r'   r   r   rA   r   rB   r   r   r   r)   r   )	r   r-   rD   ÚewrE   ÚouterTriangleÚinnerTriangleÚexmarkÚexdotr   r   r   r(     s^   
ýú
ýú
  ((üú
  üú
zDangerSign.drawNrG   r   r   r   r   rº   	  rŽ   rº   c                   @   sD   e Zd ZdZeeeeƒeeƒeeƒd�Z	dd„ Z
dd„ Zdd„ Zd	S )
ÚYesNoaI  This widget draw a tickbox or crossbox depending on 'testValue'.

        If this widget is supplied with a 'True' or 1 as a value for
        testValue, it will use the tickbox widget. Otherwise, it will
        produce a crossbox.

        possible attributes:
        'x', 'y', 'size', 'tickcolor', 'crosscolor', 'testValue'

)rV   Ú	tickcolorÚ
crosscolorÚ	testValuec                 C   s,   d| _ d| _d| _tj| _tj| _d| _d S )Nr   r   r   )	r   r   r   r   rK   rÂ   r   rÃ   rÄ   r   r   r   r   r   _  s   
zYesNo.__init__c                 C   sH   | j rtƒ }| j|_ntƒ }| j|_| j|_| j|_| j	|_	| 
¡  |S r;   )rÄ   rg   rÂ   rh   rU   rÃ   rW   r   r   r   r(   )r   Úynr   r   r   r(   g  s   
z
YesNo.drawc              
   C   s  t  dd¡}tƒ }d|_d|_d|_d|_| ¡  | |¡ tƒ }d|_d|_d|_d|_| ¡  | |¡ d	}| t j	|j|jd
  |jd|  dt
jd|d�¡ | t j	|j|jd
  |jd|  dt
jd|d�¡ d}| t j	|jd |jd | jjt
jd|d�¡ |S )Nr   r   é   é   éF   r   éx   r   é   r   ç333333ó?ztestValue=0r!   r#   ztestValue=1r"   éU   é   )r   r&   rÁ   r   r   r   rÄ   r(   r)   r*   r   r+   r   r   )r   r,   rÅ   Úyn2ÚlabelFontSizer   r   r   r/   u  s<   

"þ"þþz
YesNo.demoN)r   r0   r1   r2   r4   r   r5   ÚisColorÚ	isBooleanr8   r   r(   r/   r   r   r   r   rÁ   M  s    ýrÁ   c                   @   s0   e Zd ZdZeeeeƒd�Zdd„ Z	dd„ Z
dS )Ú
FloppyDiskzyThis widget draws an icon of a floppy disk.

        possible attributes:
        'x', 'y', 'size', 'diskcolor'

        )rV   Ú	diskColorc                 C   s   d| _ d| _d| _tj| _d S rJ   )r   r   r   r   r+   rÓ   r   r   r   r   r   ž  s   zFloppyDisk.__init__c              	   C   s8  t | jƒ}t ¡ }tj| j| j|d  |||d  | jd dd�}| |¡ tj| j|d  | j| |d  |d |d t	j
d dd�}| |¡ tj| j|d  | j| |d  |d |d t	jd dd�}| |¡ tj| j|d	  | jd
|  | j|d  | jd
|  t	jt	jdd�}| |¡ tj| j|d	  | jd|  | j|d  | jd|  t	jt	jdd�}| |¡ tj| j|d	  | jd|  | j|d  | jd|  t	jt	jdd�}| |¡ tj| j|d  | j|d |d t	jd dd�}	| |	¡ tj| j|d  | j|d  |d |d | jd dd�}
| |
¡ |S )Nr   r   r­   r   r—   r    g¸…ëQ¸Þ?g{®Gáz´?r^   g333333ã?r_   )Úx1Úy1Úx2Úy2r   r   r   gffffffæ?r¡   rj   gìQ¸…ëÑ?gìQ¸…ë¡?g¸…ëQ¸¾?)r'   r   r   rA   r`   r   r   rÓ   r)   r   Ú
whitesmokeÚ	royalbluera   r+   Úsilver)r   r-   rD   ÚdiskBodyÚlabelÚlabelsplashÚline1Úline2Úline3Ú
metalcoverÚ	coverslotr   r   r   r(   ¤  sf   
 ý
,ý
,ý
4ý
4ý
4ý
 ý
(ý
zFloppyDisk.drawN)r   r0   r1   r2   r4   r   r5   rÐ   r8   r   r(   r   r   r   r   rÒ   ’  s    ÿrÒ   c                   @   r9   )ÚArrowOnezuThis widget draws an arrow (style one).

        possible attributes:
        'x', 'y', 'size', 'fillColor'

        c                 C   ó*   d| _ d| _d| _tj| _d| _d | _d S rJ   )r   r   r   r   r   r   r   r   r   r   r   r   r   å  ó   
zArrowOne.__init__c                 C   s°   t | jƒ}t ¡ }| j}| j}|d }|d }|d }| tj||| ||d|  || |d|  || |d|  || || || || || || g| j| j	| j
d�¡ |S )Nr   rP   é   é   r>   ©r'   r   r   rA   r   r   r)   rB   r   r   r   )r   r-   rD   r   r   Ús2Ús3Ús5r   r   r   r(   í  s*   
ù	õzArrowOne.drawNrG   r   r   r   r   rã   Þ  s    rã   c                   @   r9   )ÚArrowTwozuThis widget draws an arrow (style two).

        possible attributes:
        'x', 'y', 'size', 'fillColor'

        c                 C   rä   rJ   )r   r   r   r   Úbluer   r   r   r   r   r   r   r     rå   zArrowTwo.__init__c           	      C   sÐ   t | jƒ}t ¡ }| j}| j}|d }|d }|d }|d }| tj||d|  ||d|  |d|  |d|  |d|  |d|  || || |d|  || |d|  |d|  g| j| j	| j
d�¡ |S )	Nr   rP   ræ   é   é   é   g     À2@r>   rè   )	r   r-   rD   r   r   ré   rê   rë   Ús24r   r   r   r(     s,   
ù	ôzArrowTwo.drawNrG   r   r   r   r   rì     rŽ   rì   c               
   C   sD  d} t  dd¡}tƒ }d|_d|_| |¡ | t j|j|jd  |jd|   |jj	t
jd| d	�¡ tƒ }d
|_d|_| |¡ | t j|j|jd  |jd|   |jj	t
jd| d	�¡ tƒ }d|_d|_| |¡ |jj	d }| t j|j|jd  |jd|   |t
jd| d	�¡ | t jdddt
jd| d d	�¡ tƒ }d|_d|_| |¡ | t j|j|jd  |jd|   |jj	t
jd| d	�¡ tƒ }d
|_d|_| |¡ | t j|j|jd  |jd|   |jj	t
jd| d	�¡ tƒ }d|_d|_| |¡ | t j|j|jd  |jd|   |jj	t
jd| d	�¡ tƒ }	d|	_d|	_| |	¡ | t j|	j|	jd  |	jd|   |	jj	t
jd| d	�¡ tƒ }
d
|
_d|
_| |
¡ | t j|
j|
jd  |
jd|   |
jj	t
jd| d	�¡ tƒ }d|_d|_| |¡ | t j|j|jd  |jd|   |jj	t
jd| d	�¡ tƒ }d|_d|_| |¡ | t j|j|jd  |jd|   |jj	t
jd| d	�¡ tƒ }d
|_d|_| |¡ | t j|j|jd  |jd|   |jj	t
jd| d	�¡ tƒ }d|_d|_| |¡ | t j|j|jd  |jd|   |jj	t
jd| d	�¡ t |dd¡ tdƒ dS )z\This function produces a pdf with examples of all the signs and symbols from this file.
    r"   iÂ  iŠ  rÍ   i  r   rË   r!   r#   éª   i@  r   é‚   r¦   zT(The 'YesNo' widget returns a tickbox if testvalue=1, and a crossbox if testvalue=0)g      è?i�  i  éŒ   zsignsandsymbols.pdfzsignsandsymbols.pyzwrote file: signsandsymbols.pdfN)r   r&   rU   r   r   r)   r*   r   r   r   r   r+   rg   rÁ   r�   rž   rm   rº   r¥   rª   rã   rì   rÒ   r   Ú
drawToFileÚprint)rÏ   r,   ÚcbÚtbrÅ   Ú
tempstringÚssÚneÚsfÚdsÚnaÚnsÚa1Úa2Úfdr   r   r   Útest6  sÒ   
"þ
"þ
"þþ
"þ
"þ
"þ
"þ
"þ
"þ
"þ
"þ
"þr  Ú__main__N)Ú__version__r2   Úreportlab.libr   Úreportlab.lib.validatorsÚreportlab.lib.attrmapÚreportlab.graphicsr   Úreportlab.graphics.widgetbaser   r   r   r:   rH   rN   rU   rg   rm   r�   rž   r¥   rª   rº   rÁ   rÒ   rã   rì   r  r   r   r   r   r   Ú<module>   s8   % %1+B=%8*DEL)/n
ÿ