Lancement sélectif d'exercices¶
La demande de fonctionnalité #972 postée par Jonathan Tessé nous conduit à développer un module nommé abuledu-alacarte, dont le but est de lancer un logiciel du Terrier, et pourquoi pas n'importe quel logiciel d'AbulÉdu en spécifiant un nom d'exercice, éventuellement un niveau ou un paramètre particulier (ex : nombre dans les tables d'addition).
Pour être pouvoir être lancé depuis abuledu-alacarte, les logiciels devront comprendre (c'est pour les développeurs du Terrier et de RyXéo que je dis ça...) un fichier nommé "alacarte.conf", dont le paquet fera une copie dans abuledu-alacarte renommée "nomDuLogiciel.conf".
Le fichier alacarte.conf¶
Ce fichier devra se trouver dans le répertoire "conf" de l'application et avoir une structure prédéfinie dont voici un exemple :
[General] executable=leterrier-calcul-mental niveaux="niveau1;niveau2;niveau3;Personnel" [Exercices] exercice1\nom=addition exercice1\intitule=Addition exercice1\liste= exercice2\nom=soustraction exercice2\intitule=Soustraction exercice2\liste= exercice3\nom=multiplication exercice3\intitule=Multiplication exercice3\liste= exercice4\nom=approcheA exercice4\intitule=Ordre de grandeur sur des sommes exercice4\liste= exercice5\nom=approcheS exercice5\intitule=Ordre de grandeur sur des différences exercice5\liste= exercice6\nom=approcheM exercice6\intitule=Ordre de grandeur sur des produits exercice6\liste= exercice7\nom=complementA exercice7\intitule=Compléments additifs à exercice7\liste="10;20;100" exercice8\nom=complementM exercice8\intitule=Multiples de exercice8\liste="5;10;15;20;25;50" exercice9\nom=tableM exercice9\intitule=Table de multiplication par exercice9\liste="2;3;4;5;6;7;8;9" exercice10\nom=tableA exercice10\intitule=Table d'addition de exercice10\liste="2;3;4;5;6;7;8;9"
Les noms d'exercices¶
Le nom est celui du processus au lancement de l'exercice, l' intitulé est le nom qui apparaîtra dans la comboBox d'abuledu-alacarte et en titre de la fenêtre.
Le nom ne doit comporter ni accent, ni espace, ni... , l' intitulé doit être "convivial" .
L' intitulé sera dans le futur traduisible, le nom jamais.
Interface d'appel commune à tous les logiciels du terrier:¶
Cette interface n'est pas encore figée, elle doit être réfléchie pour couvrir tous les logiciels du terrier. Proposition d'utiliser les paramètres suivants:
- exercice
- niveau
- nombre
executable --niveau=x --exercice=y --nombre=z
Les paramètres de la ligne de commande sont récupérés parce qu'ils sont les paramètres de la fonction main, où int argc est le nombre de paramètres et char* argv[] un tableau de chaines de caractère (char* ± string)
Exemple :
int main(int argc, char *argv[]) { QString exo; QString nivo=""; int nombre=0; //Je teste si l'appel a des arguments, le premier étant forcément le nom de l'exercice if (argc>1) { exo= argv[1]; exo.remove("--exercice=", Qt::CaseInsensitive); exo.toLower();} qDebug()<<"exo : "<<exo; //Je teste si l'appel a d'autres arguments je récupère leur valeur QString deuze; QString troize; if (argc>2){ deuze= argv[2]; troize=argv[3]; deuze.remove("--niveau=", Qt::CaseInsensitive); deuze.prepend("Niveau"); nivo=deuze; qDebug()<<"nivo : "<<nivo; troize.remove("--nombre=", Qt::CaseInsensitive); nombre=troize.toInt(); qDebug()<<"nombre : "<<nombre; }
Après il reste à passer les paramètres nivo et nombre au constructeur d'exercice...
Attention au copier/coller : le code donné en exemple est tiré de leterrier-calcul-mental mais en simplifiant. J'espère qu'en simplifiant je n'ai pas oublié quelque chose d'important...
Les logiciels en Tcl/Tk¶
AbulÉdu-Alacarte peut aussi lancer les anciens logiciels du Terrier en Tcl/Tk... moyennant une ruse de sioux !!
La commande qui permet de les lancer contient un nombre qui n'a de sens qu'en tant qu'énumération, par contre le nom de l'activité (qui est aussi celui affiché dans la fenêtre) contient un autre nombre qui a un sens de progression. Un exemple rendra certainement cette explication plus claire :
Dans leterrier-anouslesnombre, l'exercice calapa présente 3 sous exercices : tri, marquage et énumération;
marquage a des niveaux 0 (rien, en fait), 1,2,3,4 et 5
Mais le nombre contenu dans la commande qui permet de lancer l'activité en niveau 3 (et qui s'appelle Marquage3) est 10 (les 6 premiers de calapa c'est pour tri , puis on a les niveaux 0,1 et 2 de marquage ).
L'astuce consiste dans la liste à associer ces deux nombres séparés par ":", c'est à dire écrire "nombreDansProgressionMarquage:nombreDansCalapa", soit "3:10"
Au final anouslesnombres.conf ressemblera à ça :
[General] executable=anous niveaux= [Exercices] exercice1\nom=calapa exercice1\intitule=Calapa exercice1\liste= exercice1\sousExercice1\nom= exercice1\sousExercice1\intitule=Tri exercice1\sousExercice1\liste="0:0;1:1;2:2;3:3;4:4;5:5;6:6" exercice1\sousExercice2\nom= exercice1\sousExercice2\intitule=Marquage exercice1\sousExercice2\liste="0:7;1:8;2:9;3:10;4:11;5:12" exercice1\sousExercice3\nom= exercice1\sousExercice3\intitule=Enumeration exercice1\sousExercice3\liste="0:13;1:14;2:15;3:16;4:17;5:18" exercice2\nom=barque exercice2\intitule=Barques exercice2\liste= exercice2\sousExercice1\nom=0 exercice2\sousExercice1\intitule=Visible exercice2\sousExercice1\liste="1:0;2:1;3:2;4:3;5:4" exercice2\sousExercice2\nom=7 exercice2\sousExercice2\intitule=Caches exercice2\sousExercice2\liste="1:5;2:6;3:7;4:8;5:9" exercice2\sousExercice3\nom=13 exercice2\sousExercice3\intitule=Addition exercice2\sousExercice3\liste="1:10;2:11;3:12;4:13;5:14;6:15" etc...