Développement des classes de base¶
Après une analyse du code initial + divers tests nous sommes arrivés à la création des objets de base suivants:
AbuleduMot¶
Cet objet permettra de développer les exercices centrés sur les mots (closure etc.).
Cette classe hérite de QLineEdit, objet qui offre des solutions à tous les besoins suivants:- possibilité d'afficher du texte en lecture seule
- possibilité de passer en mode "édition" pour demander à l'utilisateur de saisir du texte
- gestion du drag&drop (comme tout objet qt)
- affichage du texte contenu dans une couleur particulière
- positionnement et taille dans le conteneur
- vérification si le texte entré est le bon (vérification de la réponse)
C'est pour cette raison que nous avons créés une nouvelle classe: c'est donc un QLineEdit + une QString m_reponse;
AbuleduParagraphe¶
Cet objet permettra de développer les exercices centrés sur les phrases ou paragraphes (remettre le texte dans l'ordre etc.).
Cette classe hérite de QLabel (aucun besoin d'éditer une phrase ou un paragraphe pour l'instant en tout cas). On lui ajoute une information qui est sa "position correcte" qui nous permettra de valider (ou pas) si l'utilisateur a déplacé la phrase (mélangée) au bon endroit.
ExerciceALLER¶
Cette classe commune est l'interface des exercices. Cette classe, définie dans les fichiers exercicealler.cpp, exercicealler.h et exercicealler.ui propose le cadre de tous les exercices de Aller.
L'interface utilisateur ressemblera apriori ceci (ou un truc approchant): Interface_des_exercices
L'idée principale de cette classe commune est de pouvoir factoriser le code commun de tous les exercices au sein de cette classe et de permettre au développeur de spécialiser ensuite une classe dérivée de celle-ci. Par exemple certains exercices n'ont pas besoin d'afficher tous les boutons de l'interface de exercicealler.ui on aura donc une fonction pour cacher les boutons non nécessaires. Cette fonction sera "locale".
Attention, cette documentation est valable à la minute où elle est écrite, nous sommes en plein développement et modifions pas mal de choses au fur et à mesure de nos découvertes.
Illustration de l'organisation "idéale" (simplifiée) de cette classe sur un exemple simple (constructeur + appel à la méthode permettant de cacher les widgets inutiles) :
Note technique: http://www.bruno-garcia.net/www/Cours/heritage.html
Dérivation de ExerciceALLER¶
Comment créer une classe dérivée de ExerciceAller ? Par exemple je souhaite créer la classe ExerciceOrdreAlphabetique:
- fichier exerciceordrealphabetique.h
/**
* Classe ExerciceOrdreAlphabetique
* @see https://redmine.ryxeo.com/projects/ryxeo/wiki/Normalisation_des_%C3%A9changes_entre_l%27application_et_le_plugin
* @author 2010 Eric Seigne <eric.seigne@ryxeo.com>
* @see The GNU Public License (GNU/GPL) v3
*
*
*
*/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef EXERCICEORDREALPHABETIQUE_H
#define EXERCICEORDREALPHABETIQUE_H
#include "exercicealler.h"
class ExerciceOrdreAlphabetique : virtual public ExerciceAller
{
Q_OBJECT
public:
ExerciceOrdreAlphabetique(QMainWindow *parent = 0);
ExerciceOrdreAlphabetique(QString fichier, QMainWindow *parent = 0);
virtual void cacheWidgetsInutiles(); //obligation de la déclarer bien qu'elle soit héritée de exerciceAller
virtual ~ExerciceOrdreAlphabetique() {}
};
#endif // EXERCICEORDREALPHABETIQUE_H
- fichier exerciceordrealphabetique.cpp
/**
* Classe ExerciceOrdreAlphabetique
* @see https://redmine.ryxeo.com/projects/leterrier-aller
* @author 2010 Eric Seigne <eric.seigne@ryxeo.com>
* @see The GNU Public License (GNU/GPL) v2
*
*
*
*/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "exerciceordrealphabetique.h"
#include <QDebug>
ExerciceOrdreAlphabetique::ExerciceOrdreAlphabetique(QMainWindow *parent)
: ExerciceAller(parent)
{
qDebug()<<"ExerciceOrdreAlphabetique (begin)";
distributeurFonctions();
qDebug()<<"ExerciceOrdreAlphabetique (end)";
}
ExerciceOrdreAlphabetique::ExerciceOrdreAlphabetique(QString fichier, QMainWindow *parent)
: ExerciceAller(fichier,parent)
{
qDebug()<<"ExerciceOrdreAlphabetique avec fichier (begin)";
distributeurFonctions();
qDebug()<<"ExerciceOrdreAlphabetique avec fichier (end)";
}
/**
* On cache les objets dont on n'a pas besoin pour paragraphes melanges
*/
void ExerciceOrdreAlphabetique::cacheWidgetsInutiles()
{
ui->btnGauche->setVisible(false);
ui->btnDroite->setVisible(false);
ui->pbChronometre->setVisible(false);
ui->frBoiteAMots->setVisible(false);
}