##// END OF EJS Templates
Adds plugin column to variable widget...
Adds plugin column to variable widget To retrieve the "plugin" field, we add to the metadata of the variable the name of the data source root item

File last commit:

r551:b0a7e1650d9f
r551:b0a7e1650d9f
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...
r144 #include <DataSource/DataSourceItemAction.h>
Alexandre Leroux
Define a data source item
r35
#include <QVector>
Alexandre Leroux
Changes structure of data hold by the item...
r342 const QString DataSourceItem::NAME_DATA_KEY = QStringLiteral("name");
Alexandre Leroux
Adds action in the mock plugin to load products
r146
Alexandre Leroux
Define a data source item
r35 struct DataSourceItem::DataSourceItemPrivate {
Alexandre Leroux
(Minor) Uses QVariantHash alias in DataSourceItem
r407 explicit DataSourceItemPrivate(DataSourceItemType type, QVariantHash data)
Alexandre Leroux
Defines actions for a data source items...
r144 : 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...
r79 DataSourceItemType m_Type;
Alexandre Leroux
(Minor) Uses QVariantHash alias in DataSourceItem
r407 QVariantHash m_Data;
Alexandre Leroux
Defines actions for a data source items...
r144 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...
r342 DataSourceItem::DataSourceItem(DataSourceItemType type, const QString &name)
Alexandre Leroux
(Minor) Uses QVariantHash alias in DataSourceItem
r407 : DataSourceItem{type, QVariantHash{{NAME_DATA_KEY, name}}}
Alexandre Leroux
Changes structure of data hold by the item...
r342 {
}
Alexandre Leroux
(Minor) Uses QVariantHash alias in DataSourceItem
r407 DataSourceItem::DataSourceItem(DataSourceItemType type, QVariantHash data)
Alexandre Leroux
Adds type for a data source item...
r79 : 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...
r144 QVector<DataSourceItemAction *> DataSourceItem::actions() const noexcept
{
Alexandre Leroux
Minor fixes
r171 auto result = QVector<DataSourceItemAction *>{};
Alexandre Leroux
Defines actions for a data source items...
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));
}
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...
r342 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...
r342 return impl->m_Data.value(key);
Alexandre Leroux
Define a data source item
r35 }
Alexandre Leroux
(Minor) Uses QVariantHash alias in DataSourceItem
r407 QVariantHash DataSourceItem::data() const noexcept
Alexandre Leroux
Handles tooltip for a data source item
r346 {
return impl->m_Data;
}
Alexandre Leroux
Changes data source item icons (2)...
r345 bool DataSourceItem::isRoot() const noexcept
{
return impl->m_Parent == nullptr;
}
Alexandre Leroux
Adds action in the mock plugin to load products
r146 QString DataSourceItem::name() const noexcept
{
Alexandre Leroux
Changes structure of data hold by the item...
r342 return data(NAME_DATA_KEY).toString();
Alexandre Leroux
Adds action in the mock plugin to load products
r146 }
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...
r79
Alexandre Leroux
Adds plugin column to variable widget...
r551 const DataSourceItem &DataSourceItem::rootItem() const noexcept
{
return isRoot() ? *this : parentItem()->rootItem();
}
Alexandre Leroux
Implements DataSourceItem::setData() method...
r347 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...
r79 DataSourceItemType DataSourceItem::type() const noexcept
{
return impl->m_Type;
}
Alexandre Leroux
Adds operators for DataSourceItem
r348
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);
}