#include "view/plugin/createplugindialog.h" #include "ui_createplugindialog.h" #include "model/plugincreator.h" #include "model/stepcreator.h" #include "model/actioncreator.h" #include "model/metriccreator.h" #include "model/filtercreator.h" #include "model/readercreator.h" #include "model/exportercreator.h" #include "model/itemcreator.h" #include #include #include #include #include CreatePluginDialog::CreatePluginDialog(QWidget *parent) : QDialog(parent) { ui = new Ui::CreatePluginDialog; ui->setupUi(this); ui->pluginDirectory->setText(""); ui->pluginName->setText(""); ui->pluginCode->setText(""); QRegExp re("([A-Za-z]+)"); QRegExpValidator *validator = new QRegExpValidator(re, this); ui->pluginName->setValidator(validator); ui->pluginCode->setValidator(validator); connect(ui->pluginCode ,SIGNAL(textChanged(const QString)),this, SLOT(pluginCodeUpdate(const QString))); connect(ui->pb_directory,SIGNAL(clicked()),this, SLOT(selectDirectory())); } CreatePluginDialog::~CreatePluginDialog() { delete ui; } QString CreatePluginDialog::getDirectory() { return QString("%1/plugin%2").arg(ui->pluginDirectory->text(), ui->pluginName->text().toLower()); } QString CreatePluginDialog::getCode() { return ui->pluginCode->text(); } QString CreatePluginDialog::getName() { return ui->pluginName->text(); } void CreatePluginDialog::pluginCodeUpdate(const QString &newtext) { ui->pluginCode->setText(newtext.toUpper()); } void CreatePluginDialog::selectDirectory() { QString dir = QFileDialog::getExistingDirectory(this, tr("Choix du répertoire du plugin"), QDir::currentPath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); if (!QFileInfo::exists(dir)) { QString message = QString(tr("Le répertoire choisi n'existe pas")); QMessageBox(QMessageBox::Critical, tr("Erreur"),message).exec(); } else if (QDir(dir).entryList(QDir::NoDotAndDotDot|QDir::AllEntries).count() == 0) { QString message = QString(tr("Le répertoire choisi n'est pas vide, veuillez en choisir un autre")); QMessageBox(QMessageBox::Critical, tr("Erreur"),message).exec(); } else { ui->pluginDirectory->setText(dir); if (!QFileInfo::exists(QString("%1/../computreev6").arg(dir))) { QString message = QString(tr("Le plugin a besoin des sources de Computree pour compiler.\n" "Elles devraient se trouver relativement ici : ../computreev6\n" "Pensez à bien repositionner votre dossier avant d'essayer de compiler.")); QMessageBox(QMessageBox::Warning, tr("Attention"),message).exec(); } } } void CreatePluginDialog::accept() { if (!QFileInfo::exists(ui->pluginDirectory->text())) { QString message = tr("Le répertoire choisi n'existe pas"); QMessageBox(QMessageBox::Critical, tr("Erreur"),message).exec(); return; } if (ui->pluginName->text().length() < 2) { QString message = tr("Le nom doit faire plus d'un caractère"); QMessageBox(QMessageBox::Critical, tr("Erreur"),message).exec(); return; } if (ui->pluginCode->text().length() < 2) { QString message = tr("Le code doit faire plus d'un caractère"); QMessageBox(QMessageBox::Critical, tr("Erreur"),message).exec(); return; } PluginCreator creator(getDirectory(), getName(), getCode()); _logMessage = creator.createPluginFiles(); done(QDialog::Accepted); } CreateExamplePluginDialog::CreateExamplePluginDialog(QWidget *parent) : QObject(parent) { _parent = parent; _logMessage = ""; } QDialog::DialogCode CreateExamplePluginDialog::exec() { _pluginDirectory = QFileDialog::getExistingDirectory(_parent, tr("Choix du répertoire du plugin"), QDir::currentPath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks); if(_pluginDirectory.isEmpty() || _pluginDirectory.isNull()) { QString message = QString(tr("Le répertoire choisi n'existe pas\n")); QMessageBox(QMessageBox::Critical, tr("Erreur"),message).exec(); } else if (!QFileInfo::exists(_pluginDirectory)) { QString message = QString(tr("Le répertoire choisi n'existe pas\n")); QMessageBox(QMessageBox::Critical, tr("Erreur"),message).exec(); } else if (QDir(_pluginDirectory).entryList(QDir::NoDotAndDotDot|QDir::AllEntries).count() == 0) { QString message = QString(tr("Le répertoire choisi n'est pas vide, veuillez en choisir un autre\n")); QMessageBox(QMessageBox::Critical, tr("Erreur"),message).exec(); } else { _pluginName = "TutorialFR"; _pluginCode = "TUFR"; _pluginDirectory = QString("%1/plugin%2").arg(_pluginDirectory, _pluginName.toLower()); PluginCreator creator1(_pluginDirectory, _pluginName, _pluginCode, true); _logMessage = creator1.createPluginFiles(); StepCreator creator2(_pluginDirectory, "Tutorial", _pluginCode, true); _logMessage.append(creator2.createStepFiles()); ActionCreator creator3(_pluginDirectory, "StepTutorial", _pluginCode, true); _logMessage.append(creator3.createActionFiles()); FilterCreator creator4(_pluginDirectory, "Tutorial", _pluginCode, true); _logMessage.append(creator4.createFilterFiles()); MetricCreator creator5(_pluginDirectory, "Tutorial", _pluginCode, true); _logMessage.append(creator5.createMetricFiles()); ReaderCreator creator6(_pluginDirectory, "Tutorial", _pluginCode, true); _logMessage.append(creator6.createReaderFiles()); ExporterCreator creator7(_pluginDirectory, "Tutorial", _pluginCode, true); _logMessage.append(creator7.createExporterFiles()); ItemCreator creator8(_pluginDirectory, "Tutorial", _pluginCode, true); _logMessage.append(creator8.createItemFiles()); return QDialog::Accepted; } return QDialog::Rejected; } OpenPluginDialog::OpenPluginDialog(QWidget *parent) : QObject(parent) { _parent = parent; _logMessage = ""; _pluginDirectory = ""; _pluginName = ""; _pluginCode = ""; } QDialog::DialogCode OpenPluginDialog::exec() { QString fileName = QFileDialog::getOpenFileName(_parent, tr("Choisir un fichier projet *.pro"), QDir::currentPath(), "Plugin Project (*.pro)"); QFileInfo fileInfo(fileName); _pluginDirectory = fileInfo.path(); QFile file(fileName); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream stream(&file); while (!stream.atEnd()) { QString line = stream.readLine(); if (line.contains("PLUGIN_NAME")) { QStringList values = line.split(QRegExp("\\W+"), Qt::SkipEmptyParts); if (values.first() == "PLUGIN_NAME" && values.size() == 2) _pluginName = values.at(1); } if (line.contains("PLUGIN_CODE")) { QStringList values = line.split(QRegExp("\\W+"), Qt::SkipEmptyParts); if (values.first() == "PLUGIN_CODE" && values.size() == 2) _pluginCode = values.at(1); } } file.close(); } else { QString message = QString(tr("Impossible d'ouvrir le fichier choisi")); QMessageBox(QMessageBox::Critical, tr("Erreur"),message).exec(); return QDialog::Rejected; } if (_pluginName.length() < 2 || _pluginName.length() > 15) { QString message = QString(tr("Le nom doit faire entre 2 et 15 caractère : %1").arg(_pluginName)); QMessageBox(QMessageBox::Critical, tr("Erreur"),message).exec(); return QDialog::Rejected; } if (_pluginCode.length() < 2 || _pluginCode.length() > 5) { QString message = QString(tr("Le code doit faire entre 2 et 5 caractère %1").arg(_pluginCode)); QMessageBox(QMessageBox::Critical, tr("Erreur"),message).exec(); return QDialog::Rejected; } return QDialog::Accepted; }