MockPlugin.cpp
119 lines
| 4.9 KiB
| text/x-c
|
CppLexer
Alexandre Leroux
|
r129 | #include "MockPlugin.h" | ||
#include "CosinusProvider.h" | ||||
Alexandre Leroux
|
r780 | #include "MockDefs.h" | ||
Alexandre Leroux
|
r99 | |||
#include <DataSource/DataSourceController.h> | ||||
#include <DataSource/DataSourceItem.h> | ||||
Alexandre Leroux
|
r146 | #include <DataSource/DataSourceItemAction.h> | ||
Alexandre Leroux
|
r99 | |||
#include <SqpApplication.h> | ||||
Q_LOGGING_CATEGORY(LOG_MockPlugin, "MockPlugin") | ||||
namespace { | ||||
/// Name of the data source | ||||
const auto DATA_SOURCE_NAME = QStringLiteral("MMS"); | ||||
Alexandre Leroux
|
r129 | /// Creates the data provider relative to the plugin | ||
std::unique_ptr<IDataProvider> createDataProvider() noexcept | ||||
Alexandre Leroux
|
r99 | { | ||
Alexandre Leroux
|
r129 | return std::make_unique<CosinusProvider>(); | ||
Alexandre Leroux
|
r99 | } | ||
Alexandre Leroux
|
r780 | std::unique_ptr<DataSourceItem> createProductItem(const QVariantHash &data, | ||
Alexandre Leroux
|
r167 | const QUuid &dataSourceUid) | ||
Alexandre Leroux
|
r146 | { | ||
Alexandre Leroux
|
r780 | auto result = std::make_unique<DataSourceItem>(DataSourceItemType::PRODUCT, data); | ||
Alexandre Leroux
|
r1076 | |||
// Adds plugin name to product metadata | ||||
result->setData(DataSourceItem::PLUGIN_DATA_KEY, DATA_SOURCE_NAME); | ||||
r1263 | result->setData(DataSourceItem::ID_DATA_KEY, data.value(DataSourceItem::NAME_DATA_KEY)); | |||
Alexandre Leroux
|
r1076 | |||
Alexandre Leroux
|
r780 | auto productName = data.value(DataSourceItem::NAME_DATA_KEY).toString(); | ||
Alexandre Leroux
|
r146 | |||
// Add action to load product from DataSourceController | ||||
result->addAction(std::make_unique<DataSourceItemAction>( | ||||
Alexandre Leroux
|
r167 | QObject::tr("Load %1 product").arg(productName), | ||
[productName, dataSourceUid](DataSourceItem &item) { | ||||
Alexandre Leroux
|
r146 | if (auto app = sqpApp) { | ||
Alexandre Leroux
|
r167 | app->dataSourceController().loadProductItem(dataSourceUid, item); | ||
Alexandre Leroux
|
r146 | } | ||
})); | ||||
return result; | ||||
} | ||||
Alexandre Leroux
|
r129 | /// Creates the data source item relative to the plugin | ||
Alexandre Leroux
|
r167 | std::unique_ptr<DataSourceItem> createDataSourceItem(const QUuid &dataSourceUid) noexcept | ||
Alexandre Leroux
|
r99 | { | ||
// Magnetic field products | ||||
Alexandre Leroux
|
r343 | auto magneticFieldFolder = std::make_unique<DataSourceItem>(DataSourceItemType::NODE, | ||
Alexandre Leroux
|
r1083 | QStringLiteral("_Magnetic field")); | ||
Alexandre Leroux
|
r781 | magneticFieldFolder->appendChild( | ||
createProductItem({{DataSourceItem::NAME_DATA_KEY, QStringLiteral("Scalar 10 Hz")}, | ||||
Alexandre Leroux
|
r786 | {COSINUS_TYPE_KEY, "scalar"}, | ||
Alexandre Leroux
|
r781 | {COSINUS_FREQUENCY_KEY, 10.}}, | ||
dataSourceUid)); | ||||
magneticFieldFolder->appendChild( | ||||
createProductItem({{DataSourceItem::NAME_DATA_KEY, QStringLiteral("Scalar 60 Hz")}, | ||||
Alexandre Leroux
|
r786 | {COSINUS_TYPE_KEY, "scalar"}, | ||
Alexandre Leroux
|
r781 | {COSINUS_FREQUENCY_KEY, 60.}}, | ||
dataSourceUid)); | ||||
magneticFieldFolder->appendChild( | ||||
createProductItem({{DataSourceItem::NAME_DATA_KEY, QStringLiteral("Scalar 100 Hz")}, | ||||
Alexandre Leroux
|
r786 | {COSINUS_TYPE_KEY, "scalar"}, | ||
{COSINUS_FREQUENCY_KEY, 100.}}, | ||||
dataSourceUid)); | ||||
magneticFieldFolder->appendChild( | ||||
createProductItem({{DataSourceItem::NAME_DATA_KEY, QStringLiteral("Vector 10 Hz")}, | ||||
{COSINUS_TYPE_KEY, "vector"}, | ||||
{COSINUS_FREQUENCY_KEY, 10.}}, | ||||
dataSourceUid)); | ||||
magneticFieldFolder->appendChild( | ||||
createProductItem({{DataSourceItem::NAME_DATA_KEY, QStringLiteral("Vector 60 Hz")}, | ||||
{COSINUS_TYPE_KEY, "vector"}, | ||||
{COSINUS_FREQUENCY_KEY, 60.}}, | ||||
dataSourceUid)); | ||||
magneticFieldFolder->appendChild( | ||||
createProductItem({{DataSourceItem::NAME_DATA_KEY, QStringLiteral("Vector 100 Hz")}, | ||||
{COSINUS_TYPE_KEY, "vector"}, | ||||
Alexandre Leroux
|
r781 | {COSINUS_FREQUENCY_KEY, 100.}}, | ||
dataSourceUid)); | ||||
Alexandre Leroux
|
r901 | magneticFieldFolder->appendChild( | ||
createProductItem({{DataSourceItem::NAME_DATA_KEY, QStringLiteral("Spectrogram 1 Hz")}, | ||||
{COSINUS_TYPE_KEY, "spectrogram"}, | ||||
{COSINUS_FREQUENCY_KEY, 1.}}, | ||||
dataSourceUid)); | ||||
Alexandre Leroux
|
r99 | |||
// Electric field products | ||||
Alexandre Leroux
|
r343 | auto electricFieldFolder = std::make_unique<DataSourceItem>(DataSourceItemType::NODE, | ||
Alexandre Leroux
|
r1083 | QStringLiteral("_Electric field")); | ||
Alexandre Leroux
|
r99 | |||
// Root | ||||
Alexandre Leroux
|
r343 | auto root = std::make_unique<DataSourceItem>(DataSourceItemType::NODE, DATA_SOURCE_NAME); | ||
Alexandre Leroux
|
r99 | root->appendChild(std::move(magneticFieldFolder)); | ||
root->appendChild(std::move(electricFieldFolder)); | ||||
Alexandre Leroux
|
r129 | return root; | ||
} | ||||
} // namespace | ||||
void MockPlugin::initialize() | ||||
{ | ||||
if (auto app = sqpApp) { | ||||
// Registers to the data source controller | ||||
auto &dataSourceController = app->dataSourceController(); | ||||
auto dataSourceUid = dataSourceController.registerDataSource(DATA_SOURCE_NAME); | ||||
// Sets data source tree | ||||
Alexandre Leroux
|
r167 | dataSourceController.setDataSourceItem(dataSourceUid, createDataSourceItem(dataSourceUid)); | ||
Alexandre Leroux
|
r129 | |||
// Sets data provider | ||||
dataSourceController.setDataProvider(dataSourceUid, createDataProvider()); | ||||
} | ||||
else { | ||||
qCWarning(LOG_MockPlugin()) << tr("Can't access to SciQlop application"); | ||||
} | ||||
Alexandre Leroux
|
r99 | } | ||