##// END OF EJS Templates
Added static plugin support...
Added static plugin support In case of fully static exe even plugins must be static to allow single file executable. Small fix, when using resources in app from library they must be initialized with Q_INIT_RESOURCE. Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r1072:bf587f8540dd
r1156:247dc18789c6
Show More
DataSourceItemMergeHelper.cpp
55 lines | 1.7 KiB | text/x-c | CppLexer
/ core / src / DataSource / DataSourceItemMergeHelper.cpp
Alexandre Leroux
Inits merge method of two items
r1071 #include "DataSource/DataSourceItemMergeHelper.h"
#include <DataSource/DataSourceItem.h>
Alexandre Leroux
Implements merge method (1)
r1072 namespace {
/**
* Finds in a tree an item similar to the item passed in parameter
* @param item the item for which to find a similar item
* @param root the root item of the tree
* @return the similar item if found, nullptr otherwise
*/
DataSourceItem *findSimilarItem(const DataSourceItem &item, const DataSourceItem &root)
{
// An item is considered similar to the another item if:
// - the items are both nodes AND
// - the names of the items are identical
if (item.type() != DataSourceItemType::NODE) {
return nullptr;
}
DataSourceItem *result{nullptr};
bool found{false};
for (auto i = 0, count = root.childCount(); i < count && !found; ++i) {
auto child = root.child(i);
found = child->type() == DataSourceItemType::NODE
&& QString::compare(child->name(), item.name(), Qt::CaseInsensitive) == 0;
if (found) {
result = child;
}
}
return result;
}
} // namespace
Alexandre Leroux
Inits merge method of two items
r1071 void DataSourceItemMergeHelper::merge(const DataSourceItem &source, DataSourceItem &dest)
{
Alexandre Leroux
Implements merge method (1)
r1072 // Checks if the source item can be merged into the destination item (i.e. there is a child item
// similar to the source item)
if (auto subItem = findSimilarItem(source, dest)) {
// If there is an item similar to the source item, applies the merge recursively
for (auto i = 0, count = source.childCount(); i < count; ++i) {
merge(*source.child(i), *subItem);
}
}
else {
// If no item is similar to the source item, the item is copied as the child of the
// destination item
dest.appendChild(source.clone());
}
Alexandre Leroux
Inits merge method of two items
r1071 }