Executer::Executer(QObject *parent) : QObject(parent), mActionFactory(new ActionTools::ActionFactory(this)), mActionLoadingFailed(false) { connect(mActionFactory, SIGNAL(actionPackLoadError(QString)), this, SLOT(actionPackLoadError(QString))); }
void ActionFactory::loadActionPack(const QString &filename, const QString &locale) { QPluginLoader pluginLoader(filename); QObject *actionPackObject = pluginLoader.instance(); QString shortFilename = QFileInfo(filename).baseName(); if(!actionPackObject) { emit actionPackLoadError(tr("%1: \"%2\"").arg(shortFilename).arg(pluginLoader.errorString())); return; } ActionPack *actionPack = qobject_cast<ActionPack *>(actionPackObject); if(!actionPack) { emit actionPackLoadError(tr("%1: invalid definition version").arg(shortFilename)); return; } Tools::installTranslator(QString("actionpack%1").arg(actionPack->id()), locale); actionPack->createDefinitions(); for(ActionDefinition *definition: actionPack->actionsDefinitions()) { if(actionDefinition(definition->id())) { emit actionPackLoadError(tr("%1: <b>%2</b> already loaded").arg(shortFilename).arg(definition->id())); continue; } if(definition->worksUnderThisOS()) { QStringList missingFeatures; if(!definition->requirementCheck(missingFeatures)) { emit actionPackLoadError(tr("%1: <b>%2</b> cannot be loaded:<ul><li>%3</ul>") .arg(shortFilename) .arg(definition->id()) .arg(missingFeatures.join("<li>"))); continue; } } mActionDefinitions << definition; } actionPack->setFilename(filename); mActionPacks << actionPack; }