From 243c121223668bf721f62f290b309bbfa2b3b651 2017-11-28 13:37:12 From: Alexandre Leroux Date: 2017-11-28 13:37:12 Subject: [PATCH] Implements merge method (2) Implements clone() --- diff --git a/core/include/DataSource/DataSourceItem.h b/core/include/DataSource/DataSourceItem.h index 84e70c0..3d0666c 100644 --- a/core/include/DataSource/DataSourceItem.h +++ b/core/include/DataSource/DataSourceItem.h @@ -29,6 +29,8 @@ public: explicit DataSourceItem(DataSourceItemType type, const QString &name); explicit DataSourceItem(DataSourceItemType type, QVariantHash data = {}); + std::unique_ptr clone() const; + /// @return the actions of the item as a vector QVector actions() const noexcept; diff --git a/core/include/DataSource/DataSourceItemAction.h b/core/include/DataSource/DataSourceItemAction.h index 72f2a88..9bab4e3 100644 --- a/core/include/DataSource/DataSourceItemAction.h +++ b/core/include/DataSource/DataSourceItemAction.h @@ -35,6 +35,8 @@ public: */ explicit DataSourceItemAction(const QString &name, ExecuteFunction fun); + std::unique_ptr clone() const; + QString name() const noexcept; /// Sets the data source item concerned by the action diff --git a/core/src/DataSource/DataSourceItem.cpp b/core/src/DataSource/DataSourceItem.cpp index a0a80a5..208835c 100644 --- a/core/src/DataSource/DataSourceItem.cpp +++ b/core/src/DataSource/DataSourceItem.cpp @@ -29,6 +29,23 @@ DataSourceItem::DataSourceItem(DataSourceItemType type, QVariantHash data) { } +std::unique_ptr DataSourceItem::clone() const +{ + auto result = std::make_unique(impl->m_Type, impl->m_Data); + + // Clones children + for (const auto &child : impl->m_Children) { + result->appendChild(std::move(child->clone())); + } + + // Clones actions + for (const auto &action : impl->m_Actions) { + result->addAction(std::move(action->clone())); + } + + return result; +} + QVector DataSourceItem::actions() const noexcept { auto result = QVector{}; diff --git a/core/src/DataSource/DataSourceItemAction.cpp b/core/src/DataSource/DataSourceItemAction.cpp index 1677091..10b233a 100644 --- a/core/src/DataSource/DataSourceItemAction.cpp +++ b/core/src/DataSource/DataSourceItemAction.cpp @@ -22,6 +22,11 @@ DataSourceItemAction::DataSourceItemAction(const QString &name, ExecuteFunction { } +std::unique_ptr DataSourceItemAction::clone() const +{ + return std::make_unique(impl->m_Name, impl->m_Fun); +} + QString DataSourceItemAction::name() const noexcept { return impl->m_Name;