Files
@ 31e2c8add85c
Branch filter:
Location: EI/VirtualLeaf/src/modelcatalogue.cpp
31e2c8add85c
3.1 KiB
text/x-c++src
Added -fPIC compile/link option consistently across project files.
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 93 94 95 96 97 98 99 100 101 102 103 104 105 | /*
*
* This file is part of the Virtual Leaf.
*
* The Virtual Leaf 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 3 of the License, or
* (at your option) any later version.
*
* The Virtual Leaf 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 the Virtual Leaf. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2010 Roeland Merks.
*
*/
#include <string>
#include "modelcatalogue.h"
#include <QVariant>
static const std::string _module_id("$Id$");
ModelCatalogue::ModelCatalogue(Mesh *_mesh, Main *_mainwin) {
mesh = _mesh;
mainwin = _mainwin;
LoadPlugins();
}
void ModelCatalogue::LoadPlugins() {
QDir pluginDir(QApplication::applicationDirPath());
QStringList plugin_filters; // filter for plugins, i.e "*.dll", "*.dylib"
#if defined(Q_OS_WIN)
if (pluginDir.dirName().toLower() =="debug"
||pluginDir.dirName().toLower() =="release")
pluginDir.cdUp();
plugin_filters << "*.dll";
#elif defined(Q_OS_MAC)
if (pluginDir.dirName() =="MacOS"){
pluginDir.cdUp();
pluginDir.cdUp();
pluginDir.cdUp();
}
plugin_filters << "*.dylib";
#endif
pluginDir.setNameFilters(plugin_filters);
if (!pluginDir.cd("models")) {
MyWarning::error("Directory 'models' not found!");
}
QVector<SimPluginInterface *> plugins;
foreach (QString fileName, pluginDir.entryList(QDir::Files)){
QPluginLoader loader(pluginDir.absoluteFilePath(fileName));
if (SimPluginInterface *plugin =
qobject_cast<SimPluginInterface *>(loader.instance())) {
models.append(plugin);
} else {
MyWarning::warning("Could not load plugin %s",fileName.toStdString().c_str());
}
}
}
void ModelCatalogue::InstallFirstModel() {
InstallModel(models[0]);
}
void ModelCatalogue::PopulateModelMenu() {
foreach (SimPluginInterface *model, models) {
QAction *modelaction = new QAction(model->ModelID(), mainwin);
QVariant data;
data.setValue(model);
modelaction->setData(data);
mainwin->modelmenu->addAction(modelaction);
}
connect(mainwin->modelmenu, SIGNAL(triggered(QAction *)), this, SLOT(InstallModel(QAction *)) );
}
void ModelCatalogue::InstallModel(QAction *modelaction) {
QVariant data = modelaction->data();
SimPluginInterface *model = data.value<SimPluginInterface *>();
cerr << "You chose model " << model->ModelID().toStdString() << "!\n";
mesh->Clean();
InstallModel(model);
}
void ModelCatalogue::InstallModel(SimPluginInterface *plugin) {
// make sure both main and plugin use the same static datamembers (ncells, nchems...)
plugin->SetCellsStaticDatamembers(CellBase::GetStaticDataMemberPointer());
mesh->SetSimPlugin(plugin);
Cell::SetNChem(plugin->NChem());
plugin->SetParameters(&par);
mainwin->RefreshInfoBar();
// mesh->StandardInit();
mainwin->Init(0);
}
|