##// END OF EJS Templates
Updates meson.build
Updates meson.build

File last commit:

r520:b0a7e1650d9f
r692:2e883759a2fd
Show More
DataSourceItem.cpp
145 lines | 4.0 KiB | text/x-c | CppLexer
Alexandre Leroux
Define a data source item
r35 #include <DataSource/DataSourceItem.h>
Alexandre Leroux
Defines actions for a data source items...
r135 #include <DataSource/DataSourceItemAction.h>
Alexandre Leroux
Define a data source item
r35
#include <QVector>
Alexandre Leroux
Changes structure of data hold by the item...
r315 const QString DataSourceItem::NAME_DATA_KEY = QStringLiteral("name");
Alexandre Leroux
Adds action in the mock plugin to load products
r137
Alexandre Leroux
Define a data source item
r35 struct DataSourceItem::DataSourceItemPrivate {
Alexandre Leroux
(Minor) Uses QVariantHash alias in DataSourceItem
r374 explicit DataSourceItemPrivate(DataSourceItemType type, QVariantHash data)
Alexandre Leroux
Defines actions for a data source items...
r135 : m_Parent{nullptr}, m_Children{}, m_Type{type}, m_Data{std::move(data)}, m_Actions{}
Alexandre Leroux
Define a data source item
r35 {
}
DataSourceItem *m_Parent;
std::vector<std::unique_ptr<DataSourceItem> > m_Children;
Alexandre Leroux
Adds type for a data source item...
r78 DataSourceItemType m_Type;
Alexandre Leroux
(Minor) Uses QVariantHash alias in DataSourceItem
r374 QVariantHash m_Data;
Alexandre Leroux
Defines actions for a data source items...
r135 std::vector<std::unique_ptr<DataSourceItemAction> > m_Actions;
Alexandre Leroux
Define a data source item
r35 };
Alexandre Leroux
Changes structure of data hold by the item...
r315 DataSourceItem::DataSourceItem(DataSourceItemType type, const QString &name)
Alexandre Leroux
(Minor) Uses QVariantHash alias in DataSourceItem
r374 : DataSourceItem{type, QVariantHash{{NAME_DATA_KEY, name}}}
Alexandre Leroux
Changes structure of data hold by the item...
r315 {
}
Alexandre Leroux
(Minor) Uses QVariantHash alias in DataSourceItem
r374 DataSourceItem::DataSourceItem(DataSourceItemType type, QVariantHash data)
Alexandre Leroux
Adds type for a data source item...
r78 : impl{spimpl::make_unique_impl<DataSourceItemPrivate>(type, std::move(data))}
Alexandre Leroux
Define a data source item
r35 {
}
Alexandre Leroux
Defines actions for a data source items...
r135 QVector<DataSourceItemAction *> DataSourceItem::actions() const noexcept
{
Alexandre Leroux
Minor fixes
r159 auto result = QVector<DataSourceItemAction *>{};
Alexandre Leroux
Defines actions for a data source items...
r135
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));
}
Alexandre Leroux
Define a data source item
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();
}
Alexandre Leroux
Changes structure of data hold by the item...
r315 QVariant DataSourceItem::data(const QString &key) const noexcept
Alexandre Leroux
Define a data source item
r35 {
Alexandre Leroux
Changes structure of data hold by the item...
r315 return impl->m_Data.value(key);
Alexandre Leroux
Define a data source item
r35 }
Alexandre Leroux
(Minor) Uses QVariantHash alias in DataSourceItem
r374 QVariantHash DataSourceItem::data() const noexcept
Alexandre Leroux
Handles tooltip for a data source item
r319 {
return impl->m_Data;
}
Alexandre Leroux
Changes data source item icons (2)...
r318 bool DataSourceItem::isRoot() const noexcept
{
return impl->m_Parent == nullptr;
}
Alexandre Leroux
Adds action in the mock plugin to load products
r137 QString DataSourceItem::name() const noexcept
{
Alexandre Leroux
Changes structure of data hold by the item...
r315 return data(NAME_DATA_KEY).toString();
Alexandre Leroux
Adds action in the mock plugin to load products
r137 }
Alexandre Leroux
Define a data source item
r35 DataSourceItem *DataSourceItem::parentItem() const noexcept
{
return impl->m_Parent;
}
Alexandre Leroux
Adds type for a data source item...
r78
Alexandre Leroux
Adds plugin column to variable widget...
r520 const DataSourceItem &DataSourceItem::rootItem() const noexcept
{
return isRoot() ? *this : parentItem()->rootItem();
}
Alexandre Leroux
Implements DataSourceItem::setData() method...
r320 void DataSourceItem::setData(const QString &key, const QVariant &value, bool append) noexcept
{
auto it = impl->m_Data.constFind(key);
if (append && it != impl->m_Data.constEnd()) {
// Case of an existing value to which we want to add to the new value
if (it->canConvert<QVariantList>()) {
auto variantList = it->value<QVariantList>();
variantList.append(value);
impl->m_Data.insert(key, variantList);
}
else {
impl->m_Data.insert(key, QVariantList{*it, value});
}
}
else {
// Other cases :
// - new value in map OR
// - replacement of an existing value (not appending)
impl->m_Data.insert(key, value);
}
}
Alexandre Leroux
Adds type for a data source item...
r78 DataSourceItemType DataSourceItem::type() const noexcept
{
return impl->m_Type;
}
Alexandre Leroux
Adds operators for DataSourceItem
r321
bool DataSourceItem::operator==(const DataSourceItem &other)
{
// Compares items' attributes
if (std::tie(impl->m_Type, impl->m_Data) == std::tie(other.impl->m_Type, other.impl->m_Data)) {
// Compares contents of items' children
return std::equal(std::cbegin(impl->m_Children), std::cend(impl->m_Children),
std::cbegin(other.impl->m_Children),
[](const auto &itemChild, const auto &otherChild) {
return *itemChild == *otherChild;
});
}
else {
return false;
}
}
bool DataSourceItem::operator!=(const DataSourceItem &other)
{
return !(*this == other);
}