1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| #include <QtGui>
#include "languagechooser.h"
#include "FenChoix.h"
#include "translatedMsg.h"
LanguageChooser::LanguageChooser(QWidget *parent) : QDialog(parent, Qt::WindowSystemMenuHint | Qt::WindowTitleHint)
{
groupBox = new QGroupBox("Languages");
buttonBox = new QDialogButtonBox;
QGridLayout* groupBoxLayout = new QGridLayout;
QStringList qmFiles = findQmFiles();
QVBoxLayout* mainLayout = new QVBoxLayout;
if (qmFiles.size() == 0) //Si aucun fichier qm trouvé, une checkbox défault pour utiliser les valeurs en brut dans le code
{
QCheckBox* checkBox = new QCheckBox(QString("Default"));
qmFileForCheckBoxMap.insert(checkBox, QString("Default"));
connect(checkBox, SIGNAL(toggled(bool)), this, SLOT(checkBoxToggled()));
groupBoxLayout->addWidget(checkBox, 0, 0);
}
for (int i = 0; i < qmFiles.size(); ++i)// Parcours de tous les fichiers, récupère la balise language ("English" par exemple), et ajoute une checkbox par nom dans l'interface
{
QCheckBox* checkBox = new QCheckBox(languageName(qmFiles[i]));
qmFileForCheckBoxMap.insert(checkBox, qmFiles[i]);
connect(checkBox, SIGNAL(toggled(bool)), this, SLOT(checkBoxToggled()));
groupBoxLayout->addWidget(checkBox, i / 2, i % 2);
}
groupBox->setLayout(groupBoxLayout);
mainLayout->addWidget(groupBox);
mainLayout->addWidget(buttonBox);
setLayout(mainLayout);
setWindowTitle("Language selection");
}
void LanguageChooser::closeEvent(QCloseEvent*)
{//Un peu brutal je sais
exit(0);
}
void LanguageChooser::setTranslatedMsg()
{// Liste de tous les messages pour toutes les fenêtres
/*FenChoix*/
s_msg.FenChoixUn = tr("Coucou");
s_msg.FenChoixDeux = tr("tout le monde");
/*FenInstall*/
s_msg.FenInstallUn = tr("Developpez.net");
s_msg.FenInstallDeux = tr("ROX !");
}
void LanguageChooser::checkBoxToggled()
{//Appelé lors d'un clic sur checkbox, défini la langue du prog à celle de la checkbox, puis appelle la "première" fenêtre du projet (FenChoix ici)
QCheckBox* checkBox = qobject_cast<QCheckBox *>(sender());
FenChoix* window = mainWindowForCheckBoxMap[checkBox];
if (!window)
{
QTranslator translator;// Défini la langue du prog
translator.load(qmFileForCheckBoxMap[checkBox]);
qApp->installTranslator(&translator);
setTranslatedMsg();
window = new FenChoix; //Création de la fenêtre suivante
window->setTrad(&s_msg); //méthode à implémenter dans chaque classe 'fenêtre', envoie la structure des msgs intialisée
}
window->setVisible(checkBox->isChecked()); //Affiche la "première" fenêtre
this->setShown(false); //Cache l'interface de langue
}
QStringList LanguageChooser::findQmFiles()
{
QDir dir("./");
QStringList fileNames = dir.entryList(QStringList("2RP*.qm"), QDir::Files, QDir::Name);
QMutableStringListIterator i(fileNames);
while (i.hasNext())
{
i.next();
i.setValue(dir.filePath(i.value()));
}
return fileNames;
}
QString LanguageChooser::languageName(const QString &qmFile)
{
QTranslator translator;
translator.load(qmFile);
// Cherche dans le fichier .qm, dans le context "LanguageChooser", le <message> de <source> "Language", et retourne sa <translation> (en l'occurence le langage en clair : English, Français, ...)
return translator.translate("LanguageChooser", "Language");
} |
Partager