#include "stepcreator.h" #include #include "model/step/tools.h" StepCreator::StepCreator(QString directory, QString name, QString code, bool exampleMode) : QObject() { _pluginDirectory = directory; _stepName = name; _pluginCode = code; _exampleMode = exampleMode; _shortDescription = ""; _detailledDescription = ""; _canBeAddedFirst = false; _hasAction = false; } void StepCreator::setInformation(const QString &shortDescription, const QString &detailledDescription, const bool &canBeAddedFirst, const bool &hasAction) { _shortDescription = shortDescription; _detailledDescription = detailledDescription; _canBeAddedFirst = canBeAddedFirst; _hasAction = hasAction; if (_shortDescription == "") _shortDescription = "No short description for this step"; if (_detailledDescription == "") _detailledDescription = "No detailled description for this step"; } void StepCreator::setCreator(ParametersCreator* model1, InModelCreator* model2, OutModelCreator* model3) { _parametersCreator = model1; _inModelCreator = model2; _outModelCreator = model3; } QString StepCreator::getFullName(const QString code, const QString name) { QString text = name; if (name == "") text = tr("Nom"); else text = Tools::getTitleCase(name); return QString("%1_Step%2").arg(code.toUpper(),text); } QString StepCreator::createStepFiles() { QString logMessage = ""; QDir(_pluginDirectory).mkdir("steps"); if (!createStepFile_h ()) logMessage.append(tr("Impossible de créer le fichier étape (.h)\n")); if (!createStepFile_cpp ()) logMessage.append(tr("Impossible de créer le fichier étape (.cpp)\n")); if (!modifyPluginManager_cpp()) logMessage.append(tr("Impossible de modifier le fichier PluginManager (.cpp)\n")); return logMessage; } bool StepCreator::createStepFile_h() { if (!_exampleMode) { QString input = ":/templates/PluginStep_h.txt"; QString output = QString("%1/steps/%2.h").arg(_pluginDirectory, getFullName(_pluginCode,_stepName).toLower()); QList > *tags = new QList >(); tags->append(QPair("{{CODE_UPPER}}" ,_pluginCode.toUpper())); tags->append(QPair("{{NAME_UPPER}}" ,_stepName.toUpper())); tags->append(QPair("{{NAME}}" ,_stepName)); tags->append(QPair("{{INCLUDES}}" ,getIncludesHeader())); tags->append(QPair("{{DESCRIPTION_SHORT}}",_shortDescription)); tags->append(QPair("{{DESCRIPTION_LONG}}" ,_detailledDescription.replace("\n", "\n * "))); tags->append(QPair("{{ATTRIBUTES_DESC}}" ,_parametersCreator->getParamatersDoc())); tags->append(QPair("{{MODEL_IN_DESC}}" ,_inModelCreator->getModelsDoc().replace("\n", "\n * "))); tags->append(QPair("{{MODEL_OUT_DESC}}" ,_outModelCreator->getModelsDoc().replace("\n", "\n * "))); tags->append(QPair("{{ATTRIBUTES_DECL}}" ,_parametersCreator->getParametersDeclaration())); tags->append(QPair("{{MODEL_IN_DECL}}" ,_inModelCreator->getModelsDeclaration())); tags->append(QPair("{{MODEL_OUT_DECL}}" ,_outModelCreator->getModelsDeclaration())); if (_hasAction) { QString action_incl = "#include \"actions/%1_actionstep%2.h\"\n" "#include \"documentinterface.h\""; action_incl = action_incl.arg(_pluginCode.toLower(),_stepName.toLower()); QString action_fct = " void initManualMode();\n" " void useManualMode(bool quit = false);"; QString action_atr = " %1_ActionStep%2::%1_ActionStep%2_dataContainer* _dataContainer;\n" " DocumentInterface* _m_doc;"; action_atr = action_atr.arg(_pluginCode.toUpper(),_stepName); tags->append(QPair("{{ACTION_INCL}}",action_incl)); tags->append(QPair("{{ACTION_FCT}}" ,action_fct)); tags->append(QPair("{{ACTION_ATR}}" ,action_atr)); } return Tools::parseTemplate(input, output, tags, _exampleMode); } else { QString name = _stepName + "01"; QString input = ":/templates/PluginStep_h.txt"; QString output = QString("%1/steps/%2.h").arg(_pluginDirectory, getFullName(_pluginCode,name).toLower()); QList > *tags = new QList >(); tags->append(QPair("{{CODE_UPPER}}",_pluginCode.toUpper())); tags->append(QPair("{{CODE_LOWER}}",_pluginCode.toLower())); tags->append(QPair("{{NAME_UPPER}}",name.toUpper() )); tags->append(QPair("{{NAME_LOWER}}",name.toLower() )); tags->append(QPair("{{NAME}}" ,name )); bool fileOK = Tools::parseTemplate(input, output, tags, _exampleMode); name = _stepName + "02"; input = ":/templates/PluginStep2_h.txt"; output = QString("%1/steps/%2.h").arg(_pluginDirectory, getFullName(_pluginCode,name).toLower()); tags->clear(); tags->append(QPair("{{CODE_UPPER}}",_pluginCode.toUpper())); tags->append(QPair("{{CODE_LOWER}}",_pluginCode.toLower())); tags->append(QPair("{{NAME_UPPER}}",name.toUpper() )); tags->append(QPair("{{NAME_LOWER}}",name.toLower() )); tags->append(QPair("{{NAME}}" ,name )); fileOK = fileOK && Tools::parseTemplate(input, output, tags, _exampleMode); name = _stepName + "03"; input = ":/templates/PluginStep3_h.txt"; output = QString("%1/steps/%2.h").arg(_pluginDirectory, getFullName(_pluginCode,name).toLower()); tags->clear(); tags->append(QPair("{{CODE_UPPER}}",_pluginCode.toUpper())); tags->append(QPair("{{CODE_LOWER}}",_pluginCode.toLower())); tags->append(QPair("{{NAME_UPPER}}",name.toUpper() )); tags->append(QPair("{{NAME_LOWER}}",name.toLower() )); tags->append(QPair("{{NAME}}" ,name )); fileOK = fileOK && Tools::parseTemplate(input, output, tags, _exampleMode); name = _stepName + "04"; input = ":/templates/PluginStep4_h.txt"; output = QString("%1/steps/%2.h").arg(_pluginDirectory, getFullName(_pluginCode,name).toLower()); tags->clear(); tags->append(QPair("{{CODE_UPPER}}",_pluginCode.toUpper())); tags->append(QPair("{{CODE_LOWER}}",_pluginCode.toLower())); tags->append(QPair("{{NAME_UPPER}}",name.toUpper() )); tags->append(QPair("{{NAME_LOWER}}",name.toLower() )); tags->append(QPair("{{NAME}}" ,name )); return fileOK && Tools::parseTemplate(input, output, tags, _exampleMode); } } bool StepCreator::createStepFile_cpp() { if (!_exampleMode) { QString input = ":/templates/PluginStep_cpp.txt"; QString output = QString("%1/steps/%2.cpp").arg(_pluginDirectory, getFullName(_pluginCode,_stepName).toLower()); QString compute = _inModelCreator->getComputeContent() + _outModelCreator->getComputeContent(); QList > *tags = new QList >(); tags->append(QPair("{{CODE_UPPER}}" ,_pluginCode.toUpper())); tags->append(QPair("{{CODE_LOWER}}" ,_pluginCode.toLower())); tags->append(QPair("{{NAME_UPPER}}" ,_stepName.toUpper())); tags->append(QPair("{{NAME_LOWER}}" ,_stepName.toLower())); tags->append(QPair("{{NAME}}" ,_stepName)); tags->append(QPair("{{INCLUDES}}" ,getIncludesSource())); tags->append(QPair("{{ATTRIBUTES_INIT}}" ,_parametersCreator->getParametersInitialization())); tags->append(QPair("{{DESCRIPTION_SHORT}}","\""+_shortDescription+"\"")); tags->append(QPair("{{DESCRIPTION_LONG}}" ,"\""+_detailledDescription.replace("\n * ", "
\"\n\"")+"\"")); tags->append(QPair("{{MODEL_IN_INIT}}" ,_inModelCreator->getCreateInResultModelListProtectedContent())); tags->append(QPair("{{MODEL_OUT_INIT}}" ,_outModelCreator->getCreateOutResultModelListProtectedContent())); tags->append(QPair("{{CONFIG_DIALOG}}" ,_parametersCreator->getParametersDialogCommands())); tags->append(QPair("{{COMPUTE}}" ,compute)); if (_hasAction) { QString action_incl = "#include \"interfacesforplugin.h\"\n" "#include \n"; QString action_init = "\n _dataContainer = new %1_ActionStep%2::%1_ActionStep%2_dataContainer();\n" " _m_doc = nullptr;"; action_init = action_init.arg(_pluginCode.toUpper(),_stepName); QString action_del = " delete _dataContainer;"; QString action_comp1 = " setManual(true);\n" " requestManualMode();\n"; QString action_comp2 = "\n _m_doc = nullptr;"; QString action_fct = "\n" "void %1_Step%2::initManualMode()\n" "{\n" " if(_m_doc == nullptr)\n" " {\n" " %1_ActionStep%2* action = new %1_ActionStep%2(_dataContainer);\n" "\n" " GuiContextInterface* context = this->guiContext();\n" " context->actionsManager()->addAction(action);\n" "\n" " _m_doc = context->documentManager()->new3DDocument();\n" " _m_doc->setCurrentAction(action);\n" " }\n" "\n" " QMessageBox::information(nullptr, tr(\"Manual action mode\"),\n" " tr(\"Please do you manual action (w/wo option parameters).\"),\n" " QMessageBox::Ok);\n" "}\n" "\n" "void %1_Step%2::useManualMode(bool quit)\n" "{\n" " Q_UNUSED(quit);\n" "}"; action_fct = action_fct.arg(_pluginCode.toUpper(),_stepName); tags->append(QPair("{{ACTION_INCL}}" ,action_incl)); tags->append(QPair("{{ACTION_INIT}}" ,action_init)); tags->append(QPair("{{ACTION_DEL}}" ,action_del)); tags->append(QPair("{{ACTION_COMP1}}",action_comp1)); tags->append(QPair("{{ACTION_COMP2}}",action_comp2)); tags->append(QPair("{{ACTION_FCT}}" ,action_fct)); } return Tools::parseTemplate(input, output, tags, _exampleMode); } else { QString name = _stepName + "01"; QString input = ":/templates/PluginStep_cpp.txt"; QString output = QString("%1/steps/%2.cpp").arg(_pluginDirectory, getFullName(_pluginCode,name).toLower()); QList > *tags = new QList >(); tags->append(QPair("{{CODE_UPPER}}",_pluginCode.toUpper())); tags->append(QPair("{{CODE_LOWER}}",_pluginCode.toLower())); tags->append(QPair("{{NAME_UPPER}}",name.toUpper() )); tags->append(QPair("{{NAME_LOWER}}",name.toLower() )); tags->append(QPair("{{NAME}}" ,name )); bool fileOK = Tools::parseTemplate(input, output, tags, _exampleMode); name = _stepName + "02"; input = ":/templates/PluginStep2_cpp.txt"; output = QString("%1/steps/%2.cpp").arg(_pluginDirectory, getFullName(_pluginCode,name).toLower()); tags->clear(); tags->append(QPair("{{CODE_UPPER}}",_pluginCode.toUpper())); tags->append(QPair("{{CODE_LOWER}}",_pluginCode.toLower())); tags->append(QPair("{{NAME_UPPER}}",name.toUpper() )); tags->append(QPair("{{NAME_LOWER}}",name.toLower() )); tags->append(QPair("{{NAME}}" ,name )); fileOK = fileOK && Tools::parseTemplate(input, output, tags, _exampleMode); name = _stepName + "03"; input = ":/templates/PluginStep3_cpp.txt"; output = QString("%1/steps/%2.cpp").arg(_pluginDirectory, getFullName(_pluginCode,name).toLower()); tags->clear(); tags->append(QPair("{{CODE_UPPER}}",_pluginCode.toUpper())); tags->append(QPair("{{CODE_LOWER}}",_pluginCode.toLower())); tags->append(QPair("{{NAME_UPPER}}",name.toUpper() )); tags->append(QPair("{{NAME_LOWER}}",name.toLower() )); tags->append(QPair("{{NAME}}" ,name )); fileOK = fileOK && Tools::parseTemplate(input, output, tags, _exampleMode); name = _stepName + "04"; input = ":/templates/PluginStep4_cpp.txt"; output = QString("%1/steps/%2.cpp").arg(_pluginDirectory, getFullName(_pluginCode,name).toLower()); tags->clear(); tags->append(QPair("{{CODE_UPPER}}",_pluginCode.toUpper())); tags->append(QPair("{{CODE_LOWER}}",_pluginCode.toLower())); tags->append(QPair("{{NAME_UPPER}}",name.toUpper() )); tags->append(QPair("{{NAME_LOWER}}",name.toLower() )); tags->append(QPair("{{NAME}}" ,name )); return fileOK && Tools::parseTemplate(input, output, tags, _exampleMode); } } bool StepCreator::modifyPluginManager_cpp() { if (!_exampleMode) { QString input = QString("%1/%2_pluginmanager.cpp").arg(_pluginDirectory,_pluginCode.toLower()); QString tag = "_pluginmanager.h\""; QString text = QString("#include \"steps/%1.h\"").arg(getFullName(_pluginCode,_stepName).toLower()); int offset = 1; bool fileOK = Tools::modifyManager(input, tag, text, offset); if (_canBeAddedFirst) { tag = "loadCanBeAddedFirstStep()"; text = QString(" addNewPointsStep<%1>(CT_StepsMenu::LP_Create);").arg(getFullName(_pluginCode,_stepName)); } else { tag = "loadGenericsStep()"; text = QString(" addNewPointsStep<%1>(CT_StepsMenu::LP_Transform);").arg(getFullName(_pluginCode,_stepName)); } return fileOK && Tools::modifyManager(input, tag, text, offset); } else { // Nothing to do return true; } } QString StepCreator::getIncludesHeader() { QSet list; _inModelCreator->getIncludes(list); _outModelCreator->getIncludes(list); return Tools::getQStringListConcat(list); } QString StepCreator::getIncludesSource() { return ""; }