@@ -0,0 +1,15 | |||
|
1 | #ifndef SCIQLOP_DATASOURCEITEMMERGEHELPER_H | |
|
2 | #define SCIQLOP_DATASOURCEITEMMERGEHELPER_H | |
|
3 | ||
|
4 | class DataSourceItem; | |
|
5 | ||
|
6 | /** | |
|
7 | * @brief The DataSourceItemMergeHelper struct is used to merge two data source items | |
|
8 | * @sa DataSourceItem::merge() | |
|
9 | */ | |
|
10 | struct DataSourceItemMergeHelper { | |
|
11 | /// Merges source item into dest item | |
|
12 | static void merge(const DataSourceItem &source, DataSourceItem &dest); | |
|
13 | }; | |
|
14 | ||
|
15 | #endif // SCIQLOP_DATASOURCEITEMMERGEHELPER_H |
@@ -0,0 +1,8 | |||
|
1 | #include "DataSource/DataSourceItemMergeHelper.h" | |
|
2 | ||
|
3 | #include <DataSource/DataSourceItem.h> | |
|
4 | ||
|
5 | void DataSourceItemMergeHelper::merge(const DataSourceItem &source, DataSourceItem &dest) | |
|
6 | { | |
|
7 | /// @todo ALX | |
|
8 | } |
@@ -64,6 +64,46 public: | |||
|
64 | 64 | /// Gets all data |
|
65 | 65 | QVariantHash data() const noexcept; |
|
66 | 66 | |
|
67 | /** | |
|
68 | * Merge in the item the source item passed as parameter. | |
|
69 | * | |
|
70 | * The merge is done by adding as child of the item the complete tree represented by the source | |
|
71 | * item. If a part of the tree already exists in the item (based on the name of the nodes), it | |
|
72 | * is merged by completing the existing tree by items "leaves" (products, components or nodes | |
|
73 | * with no child). | |
|
74 | * | |
|
75 | * For example, with item representing the tree: | |
|
76 | * R (root node) | |
|
77 | * - N1 (node) | |
|
78 | * -- N11 (node) | |
|
79 | * --- P1 (product) | |
|
80 | * --- P2 (product) | |
|
81 | * - N2 (node) | |
|
82 | * | |
|
83 | * and the source item representing the tree: | |
|
84 | * N1 (root node) | |
|
85 | * - N11 (node) | |
|
86 | * -- P3 (product) | |
|
87 | * - N12 (node) | |
|
88 | * | |
|
89 | * The leaves of the source item to merge into the item are N1/N11/P3 and N1/N12 => we therefore | |
|
90 | * have the following merge result: | |
|
91 | * R | |
|
92 | * - N1 | |
|
93 | * -- N11 | |
|
94 | * --- P1 | |
|
95 | * --- P2 | |
|
96 | * --- P3 (added leaf) | |
|
97 | * -- N12 (added leaf) | |
|
98 | * | |
|
99 | * @param item the source item | |
|
100 | * @remarks No control is performed on products or components that are merged into the same tree | |
|
101 | * part (two products or components may have the same name) | |
|
102 | * @remarks the merge is made by copy (source item is not changed and still exists after the | |
|
103 | * operation) | |
|
104 | */ | |
|
105 | void merge(const DataSourceItem &item); | |
|
106 | ||
|
67 | 107 | bool isRoot() const noexcept; |
|
68 | 108 | |
|
69 | 109 | QString name() const noexcept; |
@@ -31,6 +31,7 core_sources = [ | |||
|
31 | 31 | 'src/DataSource/DataSourceController.cpp', |
|
32 | 32 | 'src/DataSource/DataSourceItem.cpp', |
|
33 | 33 | 'src/DataSource/DataSourceItemAction.cpp', |
|
34 | 'src/DataSource/DataSourceItemMergeHelper.cpp', | |
|
34 | 35 | 'src/Network/NetworkController.cpp', |
|
35 | 36 | 'src/Plugin/PluginManager.cpp', |
|
36 | 37 | 'src/Settings/SqpSettingsDefs.cpp', |
@@ -1,5 +1,6 | |||
|
1 | 1 | #include <DataSource/DataSourceItem.h> |
|
2 | 2 | #include <DataSource/DataSourceItemAction.h> |
|
3 | #include <DataSource/DataSourceItemMergeHelper.h> | |
|
3 | 4 | |
|
4 | 5 | #include <QVector> |
|
5 | 6 | |
@@ -75,6 +76,11 QVariantHash DataSourceItem::data() const noexcept | |||
|
75 | 76 | return impl->m_Data; |
|
76 | 77 | } |
|
77 | 78 | |
|
79 | void DataSourceItem::merge(const DataSourceItem &item) | |
|
80 | { | |
|
81 | DataSourceItemMergeHelper::merge(item, *this); | |
|
82 | } | |
|
83 | ||
|
78 | 84 | bool DataSourceItem::isRoot() const noexcept |
|
79 | 85 | { |
|
80 | 86 | return impl->m_Parent == nullptr; |
General Comments 0
You need to be logged in to leave comments.
Login now