#!perl

##################
#
# This file was automatically generated by ZooZ.pl v1.2
# on Fri May 22 00:06:50 2009.
#
##################

#
# Headers
#
use strict;
use warnings;

use Tk 804;
use Tk::ROText;

#
# Global variables
#
my (
     # MainWindow
     $MW,

     # Hash of all widgets
     %ZWIDGETS,
    );

#
# User-defined variables (if any)
#
my $i = '0';
my $etatpresentindicatif = '0';
my $v = undef;
my $etatimparfaitindicatif = '0';
my @imparfaitindicatif = ();
my $verbe = 'chanter';
my @presentindicatif = ();
my $terminaison = undef;
my $pronom = undef;
my @pronoms = ();
my $radical = undef;


######################
#
# Create the MainWindow
#
######################

$MW = MainWindow->new;

######################
#
# Load any images and fonts
#
######################
ZloadImages();
ZloadFonts ();



# Widget Frame1 isa Frame
$ZWIDGETS{'Frame1'} = $MW->Frame()->grid(
   -row        => 0,
   -column     => 0,
   -rowspan    => 2,
   -columnspan => 4,
  );

# Widget Label1 isa Label
$ZWIDGETS{'Label1'} = $ZWIDGETS{Frame1}->Label(
   -font => 'Arial_10_bold_roman_',
   -text => 'Verbe à conjuguer :',
  )->grid(
   -row        => 0,
   -column     => 0,
   -columnspan => 2,
   -sticky     => 'w',
   -padx       => 10,
   -pady       => 10,
  );

# Widget Labelframe1 isa Labelframe
$ZWIDGETS{'Labelframe1'} = $ZWIDGETS{Frame1}->Labelframe(
   -font => 'Arial_10_bold_roman_',
   -text => 'Temps',
  )->grid(
   -row        => 1,
   -column     => 0,
   -rowspan    => 2,
   -columnspan => 4,
   -padx       => 10,
   -pady       => 10,
  );

# Widget Checkbutton1 isa Checkbutton
$ZWIDGETS{'Checkbutton1'} = $ZWIDGETS{Labelframe1}->Checkbutton(
   -font     => 'Arial_10_normal_roman_',
   -offvalue => 0,
   -onvalue  => 1,
   -text     => 'Présent de l\'indicatif',
   -variable => \$etatpresentindicatif,
  )->grid(
   -row        => 0,
   -column     => 0,
   -columnspan => 2,
   -sticky     => 'w',
  );

# Widget Checkbutton2 isa Checkbutton
$ZWIDGETS{'Checkbutton2'} = $ZWIDGETS{Labelframe1}->Checkbutton(
   -font     => 'Arial_10_normal_roman_',
   -offvalue => 0,
   -onvalue  => 1,
   -text     => 'Imparfait de l\'indicatif',
   -variable => \$etatimparfaitindicatif,
  )->grid(
   -row        => 1,
   -column     => 0,
   -columnspan => 2,
   -sticky     => 'w',
  );

# Widget Entry1 isa Entry
$ZWIDGETS{'Entry1'} = $ZWIDGETS{Frame1}->Entry(
   -font         => 'Arial_10_normal_roman_',
   -textvariable => \$verbe,
  )->grid(
   -row        => 0,
   -column     => 2,
   -columnspan => 2,
   -sticky     => 'w',
  );

# Widget Frame2 isa Frame
$ZWIDGETS{'Frame2'} = $MW->Frame()->grid(
   -row        => 2,
   -column     => 0,
   -rowspan    => 2,
   -columnspan => 4,
  );

# Widget Button1 isa Button
$ZWIDGETS{'Button1'} = $ZWIDGETS{Frame2}->Button(
   -command => 'main::reinitialiser',
   -font    => 'Arial_10_bold_roman_',
   -text    => 'Réinitialiser',
  )->grid(
   -row    => 0,
   -column => 0,
   -padx   => 10,
   -pady   => 10,
  );

# Widget Button2 isa Button
$ZWIDGETS{'Button2'} = $ZWIDGETS{Frame2}->Button(
   -command => 'main::conjuguer',
   -font    => 'Arial_10_bold_roman_',
   -text    => 'Conjuguer',
  )->grid(
   -row    => 0,
   -column => 1,
   -padx   => 10,
   -pady   => 10,
  );

# Widget Button3 isa Button
$ZWIDGETS{'Button3'} = $ZWIDGETS{Frame2}->Button(
   -command => 'main::quitter',
   -font    => 'Arial_10_bold_roman_',
   -text    => 'Quitter',
  )->grid(
   -row    => 0,
   -column => 2,
   -padx   => 10,
   -pady   => 10,
  );

# Widget Frame3 isa Frame
$ZWIDGETS{'Frame3'} = $MW->Frame()->grid(
   -row        => 4,
   -column     => 0,
   -rowspan    => 2,
   -columnspan => 4,
  );

# Widget Labelframe2 isa Labelframe
$ZWIDGETS{'Labelframe2'} = $ZWIDGETS{Frame3}->Labelframe(
   -font => 'Arial_10_bold_roman_',
   -text => 'Résultat',
  )->grid(
   -row        => 0,
   -column     => 0,
   -rowspan    => 2,
   -columnspan => 3,
   -padx       => 10,
   -pady       => 10,
  );

# Widget ROText1 isa ROText
$ZWIDGETS{'ROText1'} = $ZWIDGETS{Labelframe2}->Scrolled('ROText',
   -scrollbars => 'oe',
   -font       => 'Arial_10_normal_roman_',
   -height     => 20,
   -width      => 50,
  )->grid(
   -row        => 0,
   -column     => 0,
   -rowspan    => 2,
   -columnspan => 2,
   -sticky     => 'n',
  );

###############
#
# MainLoop
#
###############

MainLoop;

#######################
#
# Subroutines
#
#######################

sub ZloadImages {
}

sub ZloadFonts {
  $MW->fontCreate('Arial_10_normal_roman_',
   -weight     => 'normal',
   -underline  => 0,
   -family     => 'Arial',
   -slant      => 'roman',
   -size       => 10,
   -overstrike => 0,
  );
  $MW->fontCreate('Arial_10_bold_roman_',
   -weight     => 'bold',
   -underline  => 0,
   -family     => 'Arial',
   -slant      => 'roman',
   -size       => 10,
   -overstrike => 0,
  );
}

sub imparfaitindicatif {
	#On crée un tableau @pronoms auquel on affecte la liste de tous les pronoms personnels
	my @pronoms=("Je","Tu","Il","Nous","Vous","Ils");
	#On crée un tableau @imparfaitindicatif auquel on affecte la liste de toutes les terminaisons de l'imparfait de l'indicatif pour les verbes du 1er groupe
	my @imparfaitindicatif=("ais","ais","ait","ions","iez","aient");
	#On ajoute "Conjugaison du verbe " à la fin du contenu de la zone texte
	$ZWIDGETS{'ROText1'}->insert("end", "Conjugaison du verbe ");
	#On ajoute en bleu et en gras le contenu de la variable $v à la fin du contenu de la zone texte
	$ZWIDGETS{'ROText1'}->insert("end", $v, "bleugras");
	#On ajoute " à l'" à la fin du contenu de la zone texte
	$ZWIDGETS{'ROText1'}->insert("end", " à l'");
	#On ajoute en violet et gras "imparfait de l'indicatif" à la fin du contenu de la zone texte
	$ZWIDGETS{'ROText1'}->insert("end", "imparfait de l'indicatif", "violetgras");
	#On ajoute " :" suivi d'un retour à la ligne à la fin du contenu de la zone texte
	$ZWIDGETS{'ROText1'}->insert("end", " :\n");
	#On crée une boucle avec une variable $i comme compteur et qui est initialisé à 0
	#On incrémente à chaque passage ($i++) la variable $i
	#On exécute le bloc d'instructions (= Instructions contenues entre accolades) tant que la variable $i est inférieure ou égale à 5 (Donc on exécute 6 fois le bloc d'instructions)
	for ($i=0;$i<=5;$i++) {
		#On affecte à la variable $pronom l'élément numéro $i (Donc un nombre entre 0 et 5) du tableau $pronoms
		$pronom=$pronoms[$i];
		#On ajoute le contenu de la variable $pronom à la fin du contenu de la zone texte
		$ZWIDGETS{'ROText1'}->insert("end", $pronom);
		#On ajoute une tabulation à la fin du contenu de la zone texte
		$ZWIDGETS{'ROText1'}->insert("end", "\t");
		#On ajoute le contenu de la variable $radical à la fin du contenu de la zone texte
		$ZWIDGETS{'ROText1'}->insert("end", $radical);
		#On affecte à la variable $terminaison l'élément numéro $i (Donc un nombre entre 0 et 5) du tableau $imparfaitindicatif
		$terminaison=$imparfaitindicatif[$i];
		#On ajoute en rouge et gras le contenu de la variable $terminaison à la fin du contenu de la zone texte
		$ZWIDGETS{'ROText1'}->insert("end", $terminaison, "rougegras");
		#On ajoute un retour à la ligne à la fin du contenu de la zone texte
		$ZWIDGETS{'ROText1'}->insert("end", "\n");
	}
}

sub quitter {
	#Ferme la fenêtre du programme
	exit;
}

sub reinitialiser {
	#On affecte à la variable $verbe la chaîne de caractères "chanter"
	$verbe="chanter";
	#On décoche la case Présent de l'indicatif
	$etatpresentindicatif=0;
	#On décoche la case Imparfait de l'indicatif
	$etatimparfaitindicatif=0;
	#On supprime le texte contenu dans la zone de texte
	$ZWIDGETS{'ROText1'}->delete("1.0", 'end');
}

sub presentindicatif {
	#On crée un tableau @pronoms auquel on affecte la liste de tous les pronoms personnels
	my @pronoms=("Je","Tu","Il","Nous","Vous","Ils");
	#On crée un tableau @presentindicatif auquel on affecte la liste de toutes les terminaisons du présent de l'indicatif pour les verbes du 1er groupe
	my @presentindicatif=("e","es","e","ons","ez","ent");
	#On ajoute "Conjugaison du verbe " à la fin du contenu de la zone texte
	$ZWIDGETS{'ROText1'}->insert("end", "Conjugaison du verbe ");
	#On ajoute en bleu et en gras le contenu de la variable $v à la fin du contenu de la zone texte
	$ZWIDGETS{'ROText1'}->insert("end", $v, "bleugras");
	#On ajoute " au " à la fin du contenu de la zone texte
	$ZWIDGETS{'ROText1'}->insert("end", " au ");
	#On ajoute en violet et gras "présent de l'indicatif" à la fin du contenu de la zone texte
	$ZWIDGETS{'ROText1'}->insert("end", "présent de l'indicatif", "violetgras");
	#On ajoute " :" suivi d'un retour à la ligne à la fin du contenu de la zone texte
	$ZWIDGETS{'ROText1'}->insert("end", " :\n");
	#On crée une boucle avec une variable $i comme compteur et qui est initialisé à 0
	#On incrémente à chaque passage ($i++) la variable $i
	#On exécute le bloc d'instructions (= Instructions contenues entre accolades) tant que la variable $i est inférieure ou égale à 5 (Donc on exécute 6 fois le bloc d'instructions)
	for ($i=0;$i<=5;$i++) {
		#On affecte à la variable $pronom l'élément numéro $i (Donc un nombre entre 0 et 5) du tableau $pronoms
		$pronom=$pronoms[$i];
		#On ajoute le contenu de la variable $pronom à la fin du contenu de la zone texte
		$ZWIDGETS{'ROText1'}->insert("end", $pronom);
		#On ajoute une tabulation à la fin du contenu de la zone texte
		$ZWIDGETS{'ROText1'}->insert("end", "\t");
		#On ajoute le contenu de la variable $radical à la fin du contenu de la zone texte
		$ZWIDGETS{'ROText1'}->insert("end", $radical);
		#On affecte à la variable $terminaison l'élément numéro $i (Donc un nombre entre 0 et 5) du tableau $presentindicatif
		$terminaison=$presentindicatif[$i];
		#On ajoute en rouge et gras le contenu de la variable $terminaison à la fin du contenu de la zone texte
		$ZWIDGETS{'ROText1'}->insert("end", $terminaison, "rougegras");
		#On ajoute un retour à la ligne à la fin du contenu de la zone texte
		$ZWIDGETS{'ROText1'}->insert("end", "\n");
	}
	#On ajoute un retour à la ligne à la fin du contenu de la zone texte
	$ZWIDGETS{'ROText1'}->insert("end", "\n");
}

sub conjuguer {
	#On crée un tag qui change la couleur du texte en bleu et en gras
	$ZWIDGETS{'ROText1'}->tagConfigure("bleugras", -foreground => "blue", -font => "Arial 10 bold");
	#On crée un tag qui change la couleur du texte en rouge et en gras
	$ZWIDGETS{'ROText1'}->tagConfigure("rougegras", -foreground => "red", -font => "Arial 10 bold");
	#On crée un tag qui change la couleur du texte en rouge et en gras
	$ZWIDGETS{'ROText1'}->tagConfigure("violetgras", -foreground => "purple", -font => "Arial 10 bold");
	#On met en minuscule tous les caractères contenus dans la variable $verbe
	my $verbe=lc($verbe);
	#Si le contenu de la variable $verbe est vide, on exécute le bloc d'instructions
	if ($verbe eq "") {
		#On affecte à la variable $v la chaîne de caractères "chanter"
		$v="chanter";
	}
	#Sinon si la condition n'est pas remplie, on exécute le bloc d'instructions
	else {
		#On affecte à la variable $v le contenu de la variable $verbe
		$v=$verbe;
	}
	#Si le contenu de la variable $v contient une chaîne de caractères composée de n'importe quel caractère minuscule compris entre a et z répété 1 à plusieurs fois et se terminant par er, on exécute le bloc d'instructions
	if ($v=~/([a-z]+)er$/) {
		#On affecte à la variable $radical le motif recherché qui se trouve dans la première paranthèse (Contenu dans la variable $1)
		$radical=$1;
		#Si seulement la case Présent de l'indicatif est cochée, on exécute le bloc d'instructions
		if (($etatpresentindicatif==1) && ($etatimparfaitindicatif==0)) {
			#On supprime le texte contenu dans la zone de texte
			$ZWIDGETS{'ROText1'}->delete("1.0", 'end');
			#On appelle la procédure &presentindicatif
			&presentindicatif();
		}
		#Sinon si seulement la case Imparfait de l'indicatif est cochée, on exécute le bloc d'instructions
		elsif (($etatpresentindicatif==0) && ($etatimparfaitindicatif==1)) {
			#On supprime le texte contenu dans la zone de texte
			$ZWIDGETS{'ROText1'}->delete("1.0", 'end');
			#On appelle la procédure &imparfaitindicatif
			&imparfaitindicatif();
		}
		#Sinon si les deux cases sont cochées, on exécute le bloc d'instructions
		elsif (($etatpresentindicatif==1) && ($etatimparfaitindicatif==1)) {
			#On supprime le texte contenu dans la zone de texte
			$ZWIDGETS{'ROText1'}->delete("1.0", 'end');
			#On appelle la procédure &presentindicatif
			&presentindicatif();
			#On appelle la procédure &imparfaitindicatif
			&imparfaitindicatif();
		}
		#Sinon si aucune des cases n'est cochée, on exécute le bloc d'instructions
		else {
			#On supprime le texte contenu dans la zone de texte
			$ZWIDGETS{'ROText1'}->delete("1.0", 'end');
			#On ajoute "Vous n'avez coché aucune case." suivi d'un retour à la ligne à la fin du contenu de la zone texte
			$ZWIDGETS{'ROText1'}->insert("end", "Vous n'avez coché aucune case.\n");
		}
	}
	#Sinon si la condition n'est pas remplie, on exécute le bloc d'instructions
	else {
		#On supprime le texte contenu dans la zone de texte
		$ZWIDGETS{'ROText1'}->delete("1.0", 'end');
		#On ajoute en bleu et en gras le contenu de la variable $v à la fin du contenu de la zone texte
		$ZWIDGETS{'ROText1'}->insert("end", $v, "bleugras");
		#On ajoute " n'est pas un verbe du premier groupe." suivi d'un retour à la ligne à la fin du contenu de la zone texte
		$ZWIDGETS{'ROText1'}->insert("end", " n'est pas un verbe du premier groupe.\n");
	}
}

