
    Kwg{                        d Z dZddlmZ ddl ddl ddlmZmZ ddl	m
Z
 ddlmZ ddl	mZ  G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d e      Z G d! d"e      Z G d# d$e      Z G d% d&e      Z G d' d(e      Z G d) d*e      Zd+ Ze d,k(  r e        y-y-).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
- CrossHair
    )colors)*)isStr	asUnicode)shapes)Widget)	renderPDFc                       e Zd ZdZdZ e eed       eed       eed       eed       ee       ee       ee       ee            Z	d Z
d	 Zy
)_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                     | j                   j                  dk7  sJ d       dx| _        x| _        x| _        | _        d| _        t        j                  | _	        d | _
        d| _        y )Nr   z#Abstract class _Symbol instantiatedr   d   皙?)	__class____name__r   r   r   r   r   r   redr   r   r   selfs    a/var/www/horilla/myenv/lib/python3.12/site-packages/reportlab/graphics/widgets/signsandsymbols.py__init__z_Symbol.__init__8   s^    ~~&&	1X3XX1.////$'DG	    c           
         t        j                  dd      }t        | j                        }| j	                         }d|_        d|_        |j                          |j                  |       |j                  t        j                  |j
                  |dz  z   |j                  dz
  |j                  j                  t        j                  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obs       r   demoz_Symbol.demo@   s    NN3$$))^^
		b		fmmBDD!A#JRLL11V\\V^%') 	* r!   N)r   
__module____qualname____doc___nodocAttrMapAttrMapValueisNumberisColorOrNone_attrMapr    r5    r!   r   r   r   (   sn     F'<='<=((HI((HIH% /"=1"8,	
Hr!   r   c                       e Zd ZdZd Zd Zy)	ETriangle#This draws an equilateral triangle.c                 .    t         j                  |        y N)r   r    r   s    r   r    zETriangle.__init__P   s    r!   c           	         t        | j                        }t        j                         }|dz  }t        j                  | j
                  | j                  | j
                  |z   | j                  | j
                  |dz  z   | j                  |z   g| j                  | j                  |dz        }|j                  |       |S )N      ?r%         I@pointsr   r   r   
r-   r   r   GroupPolygonr   r   r   r   r/   r   r3   gaetriangles        r   r.   zETriangle.drawS   s    $))LLN uW>>FFDFFFF1HdffFFAaCL,#  >>!--S5" 	
hr!   Nr   r6   r7   r8   r    r.   r?   r!   r   rA   rA   M   s    -r!   rA   c                       e Zd ZdZd Zd Zy)	RTrianglezThis draws a right-angled triangle.

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

        c                 f    d| _         d| _        d| _        t        j                  | _        d | _        y Nr   r   )r   r   r   r   greenr   r   r   s    r   r    zRTriangle.__init__l   s*    	r!   c           	      t   t        | j                        }t        j                         }|dz  }t        j                  | j
                  | j                  | j
                  |z   | j                  | j
                  | j                  |z   g| j                  | j                  |dz        }|j                  |       |S )NrF   rG   rH   rJ   rM   s        r   r.   zRTriangle.draws   s    $))LLN uW>>FFDFFFF1HdffFF466!8,  >>!--S5" 	
hr!   NrQ   r?   r!   r   rS   rS   d   s     r!   rS   c                       e Zd ZdZd Zd Zy)OctagonzvThis widget draws an Octagon.

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

    c                 f    d| _         d| _        d| _        t        j                  | _        d | _        y rU   )r   r   r   r   yellowr   r   r   s    r   r    zOctagon.__init__   s*    	r!   c                    t        | j                        }t        j                         }|dz  }t        j                  | j
                  |z   | j                  | j
                  | j                  |z   | j
                  | j                  |dz  z   | j
                  |z   | j                  |z   | j
                  |dz  z   | j                  |z   | j
                  |z   | j                  |dz  z   | j
                  |z   | j                  |z   | j
                  |dz  z   | j                  g| j                  | j                  d      }|j                  |       |S )N   r%   r(   rI   r   r   r   )
r-   r   r   rK   rL   r   r   r   r   r/   )r   r3   rN   athirdoctagons        r   r.   zOctagon.draw   s   $))LLN s...2ffdffVm.2ffdfffQh6G.2ffVmTVVAX.2fffQh.?.2ffQhq8I.2ffQhv.2fffQh.?)I 594D4D26..24
6 	
gr!   NrQ   r?   r!   r   rY   rY      s     r!   rY   c                   J    e Zd ZdZ ee ee       ee            Z	d Z
d Zy)CrossboxzThis draws a black box with a red cross in it - a 'checkbox'.

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

    )BASE
crossColor
crosswidthc                     d| _         d| _        d| _        t        j                  | _        t        j                  | _        t        j                  | _	        d| _
        y Nr   r   r(   )r   r   r   r   whiter   r   rd   r1   r   re   r   s    r   r    zCrossbox.__init__   s@    	 **!<<r!   c           	      F   t        | j                        }t        j                         }t        j                  | j
                  dz   | j                  dz   |dz
  |dz
  | j                  | j                  d      }|j                  |       t        j                  | j
                  |dz  z   | j                  |dz  z   | j
                  |dz  z   | j                  |dz  z   | j                  | j                  | j                        }|j                  |       t        j                  | j
                  |dz  z   | j                  |dz  z   | j
                  |dz  z   | j                  |dz  z   | j                  | j                  | j                        }|j                  |       |S )Nr   r%   r   r   r   333333?333333?)r-   r   r   rK   Rectr   r   r   r   r/   Linerd   re   )r   r3   rN   box
crossLine1
crossLine2s         r   r.   zCrossbox.draw   sP   $))LLN kk$&&(DFF1Hac1Q3>>!-- 	
c
[[4$&&!D&/4661T6?TXTZTZ\]^b\bTc??!__!__.
 	
j[[4$&&!D&/4661T6?TXTZTZ\]^b\bTc??!__!__.
 	
jr!   Nr   r6   r7   r8   r:   r   r;   r=   r<   r>   r    r.   r?   r!   r   rb   rb      s/     G!-0!(+
H
r!   rb   c                   J    e Zd ZdZ ee ee       ee            Z	d Z
d Zy)TickboxzThis draws a black box with a red tick in it - another 'checkbox'.

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

)rc   	tickColor	tickwidthc                     d| _         d| _        d| _        t        j                  | _        t        j                  | _        t        j                  | _	        d| _
        y rg   )r   r   r   r   r   ru   r1   r   rh   r   rv   r   s    r   r    zTickbox.__init__   s@    	!<<r!   c                    t        | j                        }t        j                         }t        j                  | j
                  dz   | j                  dz   |dz
  |dz
  | j                  | j                  d      }|j                  |       t        j                  | j
                  |dz  z   | j                  |dz  z   | j
                  |dz  z   | j                  |dz  z   | j
                  |dz  z   | j                  |dz  z   | j
                  |dz  z   | j                  |dz  z   g| j                  | j                  | j                        }|j                  |       |S )Nr   r%   rj   rk   ffffff?rl   rH   )r-   r   r   rK   rm   r   r   r   r   r/   PolyLineru   rv   )r   r3   rN   ro   tickLines        r   r.   zTickbox.draw   s+   $))LLN kk$&&(DFF1Hac1Q3>>!-- 	
c
??TVVQtV_dffafotvvWXY]W]`d`f`fhijnhn`o-1VVQtV_dffafotvvWXY]W]`d`f`fhijnhn`o-q>>!^^!^^	-
 	
hr!   Nrr   r?   r!   r   rt   rt      s/     G / *
H
r!   rt   c                       e Zd ZdZd Zd Zy)
SmileyFacezkThis draws a classic smiley face.

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

    c                     t         j                  |        d| _        d| _        d| _        t
        j                  | _        t
        j                  | _	        y rU   )
r   r    r   r   r   r   r[   r   r1   r   r   s    r   r    zSmileyFace.__init__  s<    	!<<r!   c                 d   t        | j                        }t        j                         }|j	                  t        j
                  | j                  |dz  z   | j                  |dz  z   |dz  | j                  | j                  t        |dz  | j                                     dD ]  }|j	                  t        j                  | j                  |dz  |z  z   | j                  |dz  dz  z   |dz  |dz  | j                  | j                  t        |dz  | j                                      | j                  |dz  z   }| j                  |dz  z   }|dz  }|}|}d	}	d
}
d}g }|j                  }ddlm}m}m} |dz  }||z  }|	|z  }|
|z  }||k  r|d|z  z   }||k  r|}||k  r7| ||      |z  z   }| ||      |z  z   } ||        ||       ||z   }||k  r7t        j$                  || j                  | j                  t        |dz  | j                              }|j	                  |       |S )Nr%   g      C@cxcyrr   r   r   )r   r%   r]      r(   rj   r#   iT  r   r   sincospi     f@)r-   r   r   rK   r/   Circler   r   r   r   maxr   Ellipseappendmathr   r   r   rz   )r   r3   rN   icenterxcenteryradiusyradiusxradiusstartangledegreesendangledegreesdegreedelta
pointslistar   r   r   degreestoradiansradiansdelta
startangleendangleangler   r   smiles                            r   r.   zSmileyFace.draw  s9   $))LLN 	
fmmtvvqs|!!..d6F6F#d&6&679 	:  	>AEE&..1a!Qw"ad"..d>N>N #AcE$*:*: ;= >	> !!s
%%e8"#33&'77
"#33z!!!B$h z!Hn#e*V++A#e*W,,AaD!A$,&E	 Hn 
++!-- 3t'7'78: 	
er!   NrQ   r?   r!   r   r}   r}     s    (0r!   r}   c                   @    e Zd ZdZ ee eed            Zd Z	d Z
y)StopSignzbThis draws a (British) stop sign.

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

        zcolor of the word stopr   )rc   	stopColorc                     d| _         d| _        d| _        t        j                  | _        t        j                  | _        t        j                  | _	        y rU   )
r   r   r   r   r1   r   	orangeredr   
ghostwhiter   r   s    r   r    zStopSign.__init__R  s=    	!<<))**r!   c                 :   t        | j                        }t        j                         }|dz  }t        j                  | j
                  |z   | j                  | j
                  | j                  |z   | j
                  | j                  |dz  z   | j
                  |z   | j                  |z   | j
                  |dz  z   | j                  |z   | j
                  |z   | j                  |dz  z   | j
                  |z   | j                  |z   | j
                  |dz  z   | j                  g| j                  d d      }|j                  |       t        j                  | j
                  |z   |dz  z   | j                  |dz  z   | j
                  |dz  z   | j                  |z   |dz  z   | j
                  |dz  z   | j                  |dz  z   |dz  z
  | j
                  |z   |dz  z   | j                  |z   |dz  z
  | j
                  |dz  z   |dz  z
  | j                  |z   |dz  z
  | j
                  |z   |dz  z
  | j                  |dz  z   |dz  z
  | j
                  |z   |dz  z
  | j                  |z   |dz  z   | j
                  |dz  z   |dz  z
  | j                  |dz  z   gd | j                  d      }|j                  |       | j                  rX|j                  t        j                  | j
                  |dz  z   | j                  |dz  z   d	| j                  d
|dz  d             |S )Nr]   r%   r   r^   K   r         ?皙?STOPr'   zHelvetica-Bold)r   r*   r+   fontName)r-   r   r   rK   rL   r   r   r   r/   r   r   r0   )r   r3   rN   r_   outerOctagoninnerOctagons         r   r.   zStopSign.drawZ  s   $))LLN s~~dffVmTVV.2ffdffVm.2ffdfffQh6G.2ffVmTVVAX.2fffQh.?.2ffQhq8I.2ffQhv.2fffQh.?.I 594D4D2623
5 	
l~~dffVmQrT.BDFFAbDM.2ffadmTVVF]AbD=Q.2ffadmTVVVAX=NPQRTPT=U.2ffVmQrT.BDFF1HaPRdO.2fffQh.?2.FPQTUVXTXHY/3vvax!B$.?PQARTUVXTXAY/3vvax!B$.?PQRTPTAU.2fffQh.?2.FPQRTPT.W 5926..23
5 	
l>>EE&--#tvvqu~"dnn%&qS3CE F r!   Nr   r6   r7   r8   r:   r   r;   r=   r>   r    r.   r?   r!   r   r   r   G  s*     G 4LM
H+'r!   r   c                   @    e Zd ZdZ ee eed            Zd Z	d Z
y)NoEntryzThis 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   )rc   innerBarColorc                     d| _         d| _        d| _        t        j                  | _        t        j                  | _        t        j                  | _	        y rU   )
r   r   r   r   r1   r   r   r   r   r   r   s    r   r    zNoEntry.__init__  s>    	!<<))#..r!   c                    t        | j                        }t        j                         }| j                  rW|j                  t        j                  | j                  |dz  z   | j                  |dz  z   |dz  d | j                  d             | j                  r]|j                  t        j                  | j                  |dz  z   | j                  |dz  z   |dz  |dz  z
  | j                  d d             | j                  }|rR|j                  t        j                  | j                  |dz  z   | j                  |dz  z   |dz  |d	z  ||dd
             |S )Nr%   r   r   r$   r   r   r   皙?皙?)widthheightr   r   strokeLineCapr   )r-   r   r   rK   r   r/   r   r   r   r   r   rm   )r   r3   rN   r   s       r   r.   zNoEntry.draw  sQ   $))LLN EE&--dffacl4661Q3<aPQc_csw  tD  tD  RS  T  U>>EE&--dffacl$&&!A#,qQRsUVWYUYlimiwiw  HL  Z[  \  ]**EE&++dffaendffaenAcERSTWRWer  CP  bc  st  u  vr!   Nr   r?   r!   r   r   r     s*     G$]8PQ
H/r!   r   c                   .    e Zd ZdZ ee      Zd Zd Zy)
NotAllowedzThis draws a 'forbidden' roundel (as used in the no-smoking sign).

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

        )rc   c                     d| _         d| _        d| _        t        j                  | _        t        j                  | _        y rU   )r   r   r   r   r   r   rh   r   r   s    r   r    zNotAllowed.__init__  s.    	!::r!   c           	         t        | j                        }t        j                         }| j                  }t        j
                  | j                  |dz  z   | j                  |dz  z   |dz  |dz  z
  | j                  ||dz        }|j                  |       | j                  |z   }| j                  |dz  z   |dz  z
  }||dz  z
  }|dz  }|dz  }	d}
d}d}g }|j                  }d	d
lm}m}m} |dz  }||z  }|
|z  }||z  }||k  r|d|z  z   }||k  r|}||k  r7| ||      |z  z   }| ||      |z  z   } ||        ||       ||z   }||k  r7t        j                  ||||dz        }|j                  |       |S )Nr%   r(   g      $@r      r   iZ   r   r   r   rj   )r-   r   r   rK   r   r   r   r   r   r/   r   r   r   r   r   rz   )r   r3   rN   r   outerCircler   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   crossbars                             r   r.   zNotAllowed.draw  s   $))LLN&& mm$&&!A#,tvvqs|STUVSVYZ[]Y]R^lplzlz  KV  de  fi  di  j	kq!ac"!A#w((
%%e8"#33&'77
"#33z!"}H z!Hn#e*V++A#e*W,,AaD!A$,&E	 Hn
 ??:;Vaqrsvqvw	hr!   N)	r   r6   r7   r8   r:   r   r>   r    r.   r?   r!   r   r   r     s     G 
H&#r!   r   c                       e Zd ZdZd Zd Zy)	NoSmokingz^This draws a no-smoking sign.

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

        c                 .    t         j                  |        y rD   )r   r    r   s    r   r    zNoSmoking.__init__  s    D!r!   c           	      2   t        | j                        }t        j                  |       }| j                  |dz  z   |dz  z
  }| j
                  |dz  z   |dz  z
  }t        j                  |||dz  |dz  t        j                  t        j                  d      }||dz  z   |dz  z   }|j                  d|       t        j                  |||d	z  |dz  t        j                  d d      }||d
z  z   }|j                  d|       t        j                  |||d	z  |dz  t        j                  d d      }||d
z  z   }|j                  d|       t        j                  |||d	z  |dz  t        j                  d d      }||d
z  z   }|j                  d|       |S )Nr%   g      @       r   r   r   r   r   r   r   r   @   P   #   )r-   r   r   r.   r   r   r   rm   r   r   grayinsertr   )	r   r3   rN   newxnewycigarrette1cigarrette2cigarrette3cigarrette4s	            r   r.   zNoSmoking.draw  s   $))OOD! vvqs|QsU#vvqs|QrT"kkdqsaPRd"--V[[VWY1Q3Z2	K kkdqtqQSt",,DaQAbDk	K kkdqtqQSt",,DaQAbDk	K kkdqtqQSt",,DaQAbDk	K r!   NrQ   r?   r!   r   r   r     s    "r!   r   c                       e Zd ZdZd Zd Zy)
DangerSignzThis draws a 'danger' sign: a yellow box with a black exclamation point.

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

        c                     d| _         d| _        d| _        t        j                  | _        t        j                  | _        | j                  dz  | _        y )Nr   r   rF   )	r   r   r   r   r1   r   goldr   r   r   s    r   r    zDangerSign.__init__  s>    	!<<99U?r!   c                 8   t        | j                        }t        j                         }| j                  }|dz  }| j                  }|dz  }t        j
                  | j                  | j                  | j                  |z   | j                  | j                  |dz  z   | j                  |z   gd | j                  d      }|j                  |       t        j
                  | j                  |dz  z   | j                  |dz  z   | j                  |z   |dz  z
  | j                  |dz  z   | j                  |dz  z   | j                  |z   |dz  z
  g| j                  d d      }|j                  |       t        j
                  | j                  |dz  z   |dz  z
  | j                  |dz  z   | j                  |dz  z   |dz  z   | j                  |dz  z   | j                  |dz  z   |dz  z   |dz  z   | j                  |d	z  z   | j                  |dz  z   |dz  z
  |dz  z
  | j                  |d	z  z   g| j                  d 
      }|j                  |       t        j
                  | j                  |dz  z   |dz  z
  | j                  |z   | j                  |dz  z   |dz  z   | j                  |z   | j                  |dz  z   |dz  z   | j                  |dz  z   | j                  |dz  z   |dz  z
  | j                  |dz  z   g| j                  d 
      }|j                  |       |S )NrF   r%   r   rH   r$   r   g      @r   g      @)rI   r   r   )r-   r   r   rK   r   rL   r   r   r   r/   r   )	r   r3   rN   ewrO   outerTriangleinnerTriangleexmarkexdots	            r   r.   zDangerSign.draw  s   $))LLNuW
 uWFFDFFFF1HdffFFAaCL1#  !-- 	
mFFAbDM4661R4=VVAX"tvvqt}FFAaCL$&&(QrT*1,  >>! 	
mffQqSj"Q$3ffQqSj"Q$3ffQqSjBqD"BqD)DFF2c6MffQqSjBqD"BqD)DFF2c6M	(;
  ++!# 	
fffQqSj"Q$ffQqSj"Q$ffQqSj"Q$1ffQqSj"Q$1	'.
  ++!# 	
er!   NrQ   r?   r!   r   r   r     s    +1r!   r   c                   ^    e Zd ZdZ ee ee       ee       ee            Z	d Z
d Zd Zy)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'

)rc   	tickcolor
crosscolor	testValuec                     d| _         d| _        d| _        t        j                  | _        t        j                  | _        d| _        y )Nr   r   r   )	r   r   r   r   rV   r   r   r   r   r   s    r   r    zYesNo.__init__a  s4    	 **r!   c                    | j                   rt               }| j                  |_        nt	               }| j
                  |_        | j                  |_        | j                  |_        | j                  |_	        |j                          |S rD   )r   rt   r   ru   rb   r   rd   r   r   r   r.   )r   yns     r   r.   z
YesNo.drawi  s\    >>yBBLzB//BMVVVV		
		r!   c           
         t        j                  dd      }t               }d|_        d|_        d|_        d|_        |j                          |j                  |       t               }d|_        d|_        d|_        d|_        |j                          |j                  |       d	}|j                  t        j                  |j                  |j
                  d
z  z   |j                  d|z  z
  dt        j                  d|             |j                  t        j                  |j                  |j
                  d
z  z   |j                  d|z  z
  dt        j                  d|             d}|j                  t        j                  |j                  dz   |j                  dz
  | j                  j                  t        j                  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/   r0   r   r1   r   r   )r   r2   r   yn2labelFontSizes        r   r5   z
YesNo.demow  si   NN3$W
		b	g
	c
	fmmBDD"''!),bddC4E.F)V\\h%24 	5 	
fmmCEE388A:.s=7H0I)V\\h%24 	5 	fmmBDDGRTT"W NN33v||X`%24 	5 r!   N)r   r6   r7   r8   r:   r   r;   isColor	isBooleanr>   r    r.   r5   r?   r!   r   r   r   O  s<    	 G )!'* +
Hr!   r   c                   <    e Zd ZdZ ee ee            Zd Z	d Z
y)
FloppyDiskzyThis widget draws an icon of a floppy disk.

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

        )rc   	diskColorc                 X    d| _         d| _        d| _        t        j                  | _        y rU   )r   r   r   r   r1   r   r   s    r   r    zFloppyDisk.__init__  s"    	r!   c           	      <   t        | j                        }t        j                         }t        j                  | j
                  | j                  |dz  z   |||dz  z
  | j                  d d      }|j                  |       t        j                  | j
                  |dz  z   | j                  |z   |dz  z
  |dz  |dz  t        j                  d d      }|j                  |       t        j                  | j
                  |dz  z   | j                  |z   |dz  z
  |dz  |dz  t        j                  d d      }|j                  |       t        j                  | j
                  |d	z  z   | j                  d
|z  z   | j
                  |dz  z   | j                  d
|z  z   t        j                  t        j                  d      }|j                  |       t        j                  | j
                  |d	z  z   | j                  d|z  z   | j
                  |dz  z   | j                  d|z  z   t        j                  t        j                  d      }|j                  |       t        j                  | j
                  |d	z  z   | j                  d|z  z   | j
                  |dz  z   | j                  d|z  z   t        j                  t        j                  d      }|j                  |       t        j                  | j
                  |dz  z   | j                  |dz  |dz  t        j                  d d      }	|j                  |	       t        j                  | j
                  |dz  z   | j                  |dz  z   |dz  |dz  | j                  d d      }
|j                  |
       |S )Nr   r   r   r   r   r   gQ?g{Gz?rk   g333333?rl   )x1y1x2y2r   r   r   gffffff?r   ry   gQ?gQ?gQ?)r-   r   r   rK   rm   r   r   r   r/   r   
whitesmoke	royalbluern   r1   silver)r   r3   rN   diskBodylabellabelsplashline1line2line3
metalcover	coverslots              r   r.   zFloppyDisk.draw  s   $))LLN ;;4661S5>1aPSe9>>! 	
hdffaenAcE0B!C%XYZ^X^!,,! 	
ekkDFFAcENtvvax!C%6HPQRUPU^_`d^d!++! 	
k tvvqv4663q5>dffaPTfoZ^Z`Z`befgbgZh!<<#\\ 	
etvvqv4663q5>dffaPTfoZ^Z`Z`befgbgZh!<<#\\ 	
etvvqv4663q5>dffaPTfoZ^Z`Z`befgbgZh!<<#\\ 	
e[[4661S5>dffQsUSTUYSY!==!
 	
jKK$&&!D&/dffqw5GqQUv^_`d^d>>!	 	
ir!   N)r   r6   r7   r8   r:   r   r;   r   r>   r    r.   r?   r!   r   r   r     s'     G )
H&8r!   r   c                       e Zd ZdZd Zd Zy)ArrowOnezuThis widget draws an arrow (style one).

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

        c                 t    d| _         d| _        d| _        t        j                  | _        d| _        d | _        y rU   )r   r   r   r   r   r   r   r   r   s    r   r    zArrowOne.__init__  s2    	r!   c                    t        | j                        }t        j                         }| j                  }| j
                  }|dz  }|dz  }|dz  }|j                  t        j                  |||z   ||d|z  z   ||z   |d|z  z   ||z   |d|z  z   ||z   ||z   ||z   ||z   ||z   ||z   g| j                  | j                  | j                               |S )Nr%   r]         rH   r-   r   r   rK   r   r   r/   rL   r   r   r   )r   r3   rN   r   r   s2s3s5s           r   r.   zArrowOne.draw  s    $))LLNFFFFqSqSqS	fnn()!B$()!AbD&()"QqtV()"QqtV()!AbD()"QrT()"QrT') !NN"..".. 	 r!   NrQ   r?   r!   r   r  r    s     r!   r  c                       e Zd ZdZd Zd Zy)ArrowTwozuThis widget draws an arrow (style two).

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

        c                 t    d| _         d| _        d| _        t        j                  | _        d| _        d | _        y rU   )r   r   r   r   bluer   r   r   r   s    r   r    zArrowTwo.__init__  s2    	r!   c                    t        | j                        }t        j                         }| j                  }| j
                  }|dz  }|dz  }|dz  }|dz  }|j                  t        j                  ||d|z  z   ||d|z  z   |d|z  z   |d|z  z   |d|z  z   |d|z  z   ||z   ||z   |d|z  z   ||z   |d|z  z   |d|z  z   g| j                  | j                  | j                               |S )	Nr%   r]   r           g     2@rH   r  )	r   r3   rN   r   r   r  r  r  s24s	            r   r.   zArrowTwo.draw  s   $))LLN FFFFqSqSqSd	fnna3ha3heCiK2c6adFAadFaC2adFAbDeCiK2c6 ****, 	 r!   NrQ   r?   r!   r   r  r  	  s     r!   r  c            	       P    e Zd ZdZ ee e eee	f      d            Z
d Zd Zy)	CrossHairrB   z( gap at centre as "x%" or points or Noner   )rc   innerGapc                     dx| _         x| _        x| _        | _        d| _        d | _        t        j                  | _        d| _	        d| _
        y )Nr   r(   r   z20%)r   r   r   r   r   r   r   r1   r   r   r  r   s    r   r    zCrossHair.__init__=  sG    .////$'DG	!<<r!   c                    t        | j                        }t        j                         }| j                  }| j
                  | j                  z   }| j                  | j                  z   }d| j                  z  }|s||z
  |||z   |f|||z
  |||z   fg}n~t        |      r@t        |      }|j                  d      r|t        |d d       z  dz  }nt        |      dz  }n|dz  }||z
  |||z
  |f||z   |||z   |f|||z
  |||z
  f|||z   |||z   fg}t        j                  | j                  | j                        }	|D ]+  \  }
}}}|	j                  |
|       |	j!                  ||       - |j#                  |	       |S )Nr   %r   g      Y@)r   r   )r-   r   r   rK   r  r   r   r   r   r   r   endswithPathr   r   moveTolineTor/   )r   r3   rN   igr   r   hsizeLgsPx0y0r   r   s                 r   r.   zCrossHair.drawE  s   $))LLN]]FF477NFF477NDIIE'!AeGA&1U71QuW(=>ARyr];;t$uRW~-e3Br3BVE'!AbD#ad1QuWQ%7!AeGAad9KaPQRTPTUVWXY^W^M_`AKKD$4$4AQAQR 	KBr"RHHROHHRO	 	
ar!   N)r   r6   r7   r8   r:   r   r;   EitherOrisStringisNumberOrNoner>   r    r.   r?   r!   r   r  r  7  s0    -G#Hh~-F$GMwx
Hr!   r  c                     d} t        j                  dd      }t               }d|_        d|_        |j                  |       |j                  t        j                  |j                  |j                  dz  z   |j                  d| z  z
  |j                  j                  t        j                  d| 	             t               }d
|_        d|_        |j                  |       |j                  t        j                  |j                  |j                  dz  z   |j                  d| z  z
  |j                  j                  t        j                  d| 	             t               }d|_        d|_        |j                  |       |j                  j                  dz   }|j                  t        j                  |j                  |j                  dz  z   |j                  d| z  z
  |t        j                  d| 	             |j                  t        j                  dddt        j                  d| dz  	             t               }d|_        d|_        |j                  |       |j                  t        j                  |j                  |j                  dz  z   |j                  d| z  z
  |j                  j                  t        j                  d| 	             t               }d
|_        d|_        |j                  |       |j                  t        j                  |j                  |j                  dz  z   |j                  d| z  z
  |j                  j                  t        j                  d| 	             t!               }d|_        d|_        |j                  |       |j                  t        j                  |j                  |j                  dz  z   |j                  d| z  z
  |j                  j                  t        j                  d| 	             t#               }	d|	_        d|	_        |j                  |	       |j                  t        j                  |	j                  |	j                  dz  z   |	j                  d| z  z
  |	j                  j                  t        j                  d| 	             t%               }
d
|
_        d|
_        |j                  |
       |j                  t        j                  |
j                  |
j                  dz  z   |
j                  d| z  z
  |
j                  j                  t        j                  d| 	             t'               }d|_        d|_        |j                  |       |j                  t        j                  |j                  |j                  dz  z   |j                  d| z  z
  |j                  j                  t        j                  d| 	             t)               }d|_        d|_        |j                  |       |j                  t        j                  |j                  |j                  dz  z   |j                  d| z  z
  |j                  j                  t        j                  d| 	             t+               }d
|_        d|_        |j                  |       |j                  t        j                  |j                  |j                  dz  z   |j                  d| z  z
  |j                  j                  t        j                  d| 	             t-               }d|_        d|_        |j                  |       |j                  t        j                  |j                  |j                  dz  z   |j                  d| z  z
  |j                  j                  t        j                  d| 	             t/        j0                  |dd       t3        d       y)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,   rb   r   r   r/   r0   r   r   r   r   r1   rt   r   r   r   r}   r   r   r   r  r  r   r	   
drawToFileprint)r   r2   cbtbr   
tempstringssnesfdsnansa1a2fds                  r   testr@  b  s    Ms3A	BBDBDEE"IEE&--bggai("$$M0A*B<<00FLLU]$13 4 
BBDBDEE"IEE&--bggai("$$M0A*BLL11V\\V^%24 5
 
BBDBDEE"I&&,JEE&--bggai("$$M0A*B&&,,8%24 5 EE&--Ar  E  K  K  X`%24%79 :
 
BBDBDEE"IEE&--bggai("$$M0A*BLL11V\\V^%24 5 
BBDBDEE"IEE&--bggai("$$M0A*BLL11V\\V^%24 5 
BBDBDEE"IEE&--bggai("$$M0A*BLL11V\\V^%24 5 
BBDBDEE"IEE&--bggai("$$M0A*BLL11V\\V^%24 5 
BBDBDEE"IEE&--bggai("$$M0A*BLL11V\\V^%24 5 
BBDBDEE"IEE&--bggai("$$M0A*BLL11V\\V^%24 5 
BBDBDEE"IEE&--bggai("$$M0A*BLL11V\\V^%24 5 
BBDBDEE"IEE&--bggai("$$M0A*BLL11V\\V^%24 5 
BBDBDEE"IEE&--bggai("$$M0A*BLL11V\\V^%24 5 13GH	
+,r!   __main__N)!__version__r8   reportlab.libr   reportlab.lib.validatorsreportlab.lib.attrmapreportlab.lib.utilsr   r   reportlab.graphicsr   reportlab.graphics.widgetbaser   r	   r   rA   rS   rY   rb   rt   r}   r   r   r   r   r   r   r   r  r  r  r@  r   r?   r!   r   <module>rI     s)   	, ! & # 0 % 0 (#f #J . @#g #J.w .b)g )V@ @D:w :z#g #J5 5p'
 'TA AHCG CJJ JX'w 'R,x ,\( (Vl-\ ZF r!   