DataSourceItem.cpp
86 lines
| 2.3 KiB
| text/x-c
|
CppLexer
|
r35 | #include <DataSource/DataSourceItem.h> | ||
|
r144 | #include <DataSource/DataSourceItemAction.h> | ||
|
r35 | |||
#include <QVector> | ||||
|
r342 | const QString DataSourceItem::NAME_DATA_KEY = QStringLiteral("name"); | ||
|
r146 | |||
|
r35 | struct DataSourceItem::DataSourceItemPrivate { | ||
|
r342 | explicit DataSourceItemPrivate(DataSourceItemType type, QHash<QString, QVariant> data) | ||
|
r144 | : m_Parent{nullptr}, m_Children{}, m_Type{type}, m_Data{std::move(data)}, m_Actions{} | ||
|
r35 | { | ||
} | ||||
DataSourceItem *m_Parent; | ||||
std::vector<std::unique_ptr<DataSourceItem> > m_Children; | ||||
|
r79 | DataSourceItemType m_Type; | ||
|
r342 | QHash<QString, QVariant> m_Data; | ||
|
r144 | std::vector<std::unique_ptr<DataSourceItemAction> > m_Actions; | ||
|
r35 | }; | ||
|
r342 | DataSourceItem::DataSourceItem(DataSourceItemType type, const QString &name) | ||
: DataSourceItem{type, QHash<QString, QVariant>{{NAME_DATA_KEY, name}}} | ||||
{ | ||||
} | ||||
DataSourceItem::DataSourceItem(DataSourceItemType type, QHash<QString, QVariant> data) | ||||
|
r79 | : impl{spimpl::make_unique_impl<DataSourceItemPrivate>(type, std::move(data))} | ||
|
r35 | { | ||
} | ||||
|
r144 | QVector<DataSourceItemAction *> DataSourceItem::actions() const noexcept | ||
{ | ||||
|
r171 | auto result = QVector<DataSourceItemAction *>{}; | ||
|
r144 | |||
std::transform(std::cbegin(impl->m_Actions), std::cend(impl->m_Actions), | ||||
std::back_inserter(result), [](const auto &action) { return action.get(); }); | ||||
return result; | ||||
} | ||||
void DataSourceItem::addAction(std::unique_ptr<DataSourceItemAction> action) noexcept | ||||
{ | ||||
action->setDataSourceItem(this); | ||||
impl->m_Actions.push_back(std::move(action)); | ||||
} | ||||
|
r35 | void DataSourceItem::appendChild(std::unique_ptr<DataSourceItem> child) noexcept | ||
{ | ||||
child->impl->m_Parent = this; | ||||
impl->m_Children.push_back(std::move(child)); | ||||
} | ||||
DataSourceItem *DataSourceItem::child(int childIndex) const noexcept | ||||
{ | ||||
if (childIndex < 0 || childIndex >= childCount()) { | ||||
return nullptr; | ||||
} | ||||
else { | ||||
return impl->m_Children.at(childIndex).get(); | ||||
} | ||||
} | ||||
int DataSourceItem::childCount() const noexcept | ||||
{ | ||||
return impl->m_Children.size(); | ||||
} | ||||
|
r342 | QVariant DataSourceItem::data(const QString &key) const noexcept | ||
|
r35 | { | ||
|
r342 | return impl->m_Data.value(key); | ||
|
r35 | } | ||
|
r146 | QString DataSourceItem::name() const noexcept | ||
{ | ||||
|
r342 | return data(NAME_DATA_KEY).toString(); | ||
|
r146 | } | ||
|
r35 | DataSourceItem *DataSourceItem::parentItem() const noexcept | ||
{ | ||||
return impl->m_Parent; | ||||
} | ||||
|
r79 | |||
DataSourceItemType DataSourceItem::type() const noexcept | ||||
{ | ||||
return impl->m_Type; | ||||
} | ||||