#!/usr/bin/env python

# Les deux lignes suivant sont necessaires seulement si le script n'est pas 
#  directement dans le dossier d'installation
import sys
#sys.path.append('/usr/share/inkscape/extensions')

# Utilisation du module inkex avec des effets predefinis
import inkex 
# Le module simplestyle fournit des fonctions pour le parsing des styles
from simplestyle import *

class CHello( inkex.Effect ):
	"""
	Exemple Inkscape 
	Cree un nouveau calque et dessine des elements de base
	"""
	def __init__(self):
		"""
		Constructeur
		Definit l'option "--strTexte" du script
		"""
		# Appel du constructeur.
		inkex.Effect.__init__(self)

		# Definit la chaine d'option "--strTexte" avec le raccourci "-w" et 
		#  la valeur par defaut "Hello".
		self.OptionParser.add_option('-w', '--strTexte', action = 'store',
		                             type = 'string', 
		                             dest = 'strTexte', default = 'Hello',
		                             help = 'Message a ecrire ?')

	def effect(self):
		"""
		Fonction principale
		Surchage la fonction de la classe de base
		Dessine quelques elements sur le docuement SVG
		"""
		# Recupere le document SVG principal
		svg = self.document.getroot()

		# Recuperation de la hauteur et de la largeur de la feuille
		width  = inkex.unittouu( svg.get('width') )
		height = inkex.unittouu( svg.attrib['height'] )
		
		# Creation d'un nouveau calque
		layer = inkex.etree.SubElement(svg, 'g')
		layer.set(inkex.addNS( 'label', 'inkscape'), 'Layer texte' )
		layer.set(inkex.addNS( 'groupmode', 'inkscape'), 'layer' )
		
		# Creation d'un element texte
		texte = inkex.etree.Element(inkex.addNS('text', 'svg'))
		# - Recuperation de la valeur de la variable "strTexte" saisie dans la 
		#    boite de dialogue
		strVal = self.options.strTexte
		texte.text = strVal
		
		# Reglages initiaux
		x_org = height / 10
		y_org = width / 10
		pas_x = width / 6
		pas_y = width / 10
		nLargeurTrait = 5
		
		# Set text position to center of document.
		texte.set('x', str( x_org ) )
		texte.set('y', str( y_org ) )
		
		# Center text horizontally with CSS style.
		style = {'text-align' : 'left', \
		         'text-anchor': 'top', \
		         'font-size': '48pt',\
		         'fill':'rgb(255, 0, 0)'}
		texte.set('style', formatStyle(style) )
		
		# Ajoute le texte au calque
		layer.append( texte )
		
		# Creation d'un rectangle 
		y_org += pas_y
		rectangle = inkex.etree.Element(inkex.addNS('rect', 'svg'))
		rectangle.set('x', str(x_org) )
		rectangle.set('y', str(y_org) )
		rectangle.set('width', str(pas_x - pas_x / 10.0) )
		rectangle.set('height', str(pas_y - pas_y / 10.0) )
		rectangle.set('fill', 'rgb( 0, 255, 0)');# couleur de remplissage
		rectangle.set('stroke', 'blue');# couleur du contour
		rectangle.set('stroke-width', str(nLargeurTrait) );# largeur du contour
		
		# Ajout du rectangle sur le calque
		layer.append( rectangle )
		
		# Creation d'un cercle
		y_org += pas_y
		cercle = inkex.etree.Element(inkex.addNS('circle', 'svg'))
		nRayon = ( pas_y - pas_y / 10.0) / 2.0
		y_org += 2 * nRayon
		cercle.set('cx', str(x_org) )
		cercle.set('cy', str(y_org) )
		cercle.set('r', str(nRayon) )
		cercle.set('fill', '#0000FF');
		cercle.set('stroke', 'red');
		cercle.set('stroke-width', str(nLargeurTrait) );
		
		# Ajout du cercle sur le calque
		layer.append( cercle )
		
		# Creation d'une ligne
		y_org += pas_y
		ligne = inkex.etree.Element(inkex.addNS('line', 'svg'))
		nRayon = ( pas_y - pas_y / 10.0) / 2.0
		y_org += nRayon
		ligne.set('x1', str(x_org) )
		ligne.set('y1', str(y_org) )
		ligne.set('x2', str(x_org + pas_x) )
		ligne.set('y2', str(y_org + pas_y) );
		ligne.set('stroke', 'rgb(10,10,10)');
		ligne.set('stroke-width', str(nLargeurTrait) );
		
		# Ajout de la ligne sur le calque
		layer.append( ligne )


# Execute la fonction "effect" de la classe "CHello"
hello = CHello()
hello.affect()

