From f61d116e8daaab75bf49ab06c0e881bbd3ebc5c4 2017-06-15 09:12:21 From: Alexandre Leroux Date: 2017-06-15 09:12:21 Subject: [PATCH] Adds action in the mock plugin to load products --- diff --git a/core/include/DataSource/DataSourceController.h b/core/include/DataSource/DataSourceController.h index 13c2192..3a495e9 100644 --- a/core/include/DataSource/DataSourceController.h +++ b/core/include/DataSource/DataSourceController.h @@ -54,6 +54,12 @@ public: void setDataProvider(const QUuid &dataSourceUid, std::unique_ptr dataProvider) noexcept; + /** + * Loads an item (product) as a variable in SciQlop + * @param productItem the item to load + */ + void loadProductItem(const DataSourceItem &productItem) noexcept; + public slots: /// Manage init/end of the controller void initialize(); diff --git a/core/include/DataSource/DataSourceItem.h b/core/include/DataSource/DataSourceItem.h index 72c4d1b..4ff7629 100644 --- a/core/include/DataSource/DataSourceItem.h +++ b/core/include/DataSource/DataSourceItem.h @@ -55,6 +55,8 @@ public: */ QVariant data(int dataIndex) const noexcept; + QString name() const noexcept; + /** * Get the item's parent * @return a pointer to the parent if it exists, nullptr if the item is a root diff --git a/core/src/DataSource/DataSourceController.cpp b/core/src/DataSource/DataSourceController.cpp index aeed99e..fc0bd48 100644 --- a/core/src/DataSource/DataSourceController.cpp +++ b/core/src/DataSource/DataSourceController.cpp @@ -76,6 +76,11 @@ void DataSourceController::setDataProvider(const QUuid &dataSourceUid, } } +void DataSourceController::loadProductItem(const DataSourceItem &productItem) noexcept +{ + /// @todo ALX +} + void DataSourceController::initialize() { qCDebug(LOG_DataSourceController()) << tr("DataSourceController init") diff --git a/core/src/DataSource/DataSourceItem.cpp b/core/src/DataSource/DataSourceItem.cpp index b01421a..c794bc2 100644 --- a/core/src/DataSource/DataSourceItem.cpp +++ b/core/src/DataSource/DataSourceItem.cpp @@ -3,6 +3,13 @@ #include +namespace { + +/// Index of the 'name' value in the item +const auto NAME_INDEX = 0; + +} // namespace + struct DataSourceItem::DataSourceItemPrivate { explicit DataSourceItemPrivate(DataSourceItemType type, QVector data) : m_Parent{nullptr}, m_Children{}, m_Type{type}, m_Data{std::move(data)}, m_Actions{} @@ -63,6 +70,11 @@ QVariant DataSourceItem::data(int dataIndex) const noexcept return impl->m_Data.value(dataIndex); } +QString DataSourceItem::name() const noexcept +{ + return data(NAME_INDEX).toString(); +} + DataSourceItem *DataSourceItem::parentItem() const noexcept { return impl->m_Parent; diff --git a/plugins/mockplugin/src/MockPlugin.cpp b/plugins/mockplugin/src/MockPlugin.cpp index 526a2fc..79d95d2 100644 --- a/plugins/mockplugin/src/MockPlugin.cpp +++ b/plugins/mockplugin/src/MockPlugin.cpp @@ -3,6 +3,7 @@ #include #include +#include #include @@ -19,19 +20,30 @@ std::unique_ptr createDataProvider() noexcept return std::make_unique(); } +std::unique_ptr createProductItem(const QString &productName) +{ + auto result = std::make_unique(DataSourceItemType::PRODUCT, + QVector{productName}); + + // Add action to load product from DataSourceController + result->addAction(std::make_unique( + QObject::tr("Load %1 product").arg(productName), [productName](DataSourceItem &item) { + if (auto app = sqpApp) { + app->dataSourceController().loadProductItem(item); + } + })); + + return result; +} + /// Creates the data source item relative to the plugin std::unique_ptr createDataSourceItem() noexcept { // Magnetic field products - auto fgmProduct = std::make_unique(DataSourceItemType::PRODUCT, - QVector{QStringLiteral("FGM")}); - auto scProduct = std::make_unique(DataSourceItemType::PRODUCT, - QVector{QStringLiteral("SC")}); - auto magneticFieldFolder = std::make_unique( DataSourceItemType::NODE, QVector{QStringLiteral("Magnetic field")}); - magneticFieldFolder->appendChild(std::move(fgmProduct)); - magneticFieldFolder->appendChild(std::move(scProduct)); + magneticFieldFolder->appendChild(createProductItem(QStringLiteral("FGM"))); + magneticFieldFolder->appendChild(createProductItem(QStringLiteral("SC"))); // Electric field products auto electricFieldFolder = std::make_unique(