diff --git a/gui/include/DataSource/DataSourceTreeWidgetItem.h b/gui/include/DataSource/DataSourceTreeWidgetItem.h new file mode 100644 index 0000000..02b0122 --- /dev/null +++ b/gui/include/DataSource/DataSourceTreeWidgetItem.h @@ -0,0 +1,32 @@ +#ifndef SCIQLOP_DATASOURCETREEWIDGETITEM_H +#define SCIQLOP_DATASOURCETREEWIDGETITEM_H + +#include + +#include +#include + +Q_DECLARE_LOGGING_CATEGORY(LOG_DataSourceTreeWidgetItem) + +class DataSourceItem; + +/** + * @brief The DataSourceTreeWidgetItem is the graphical representation of a data source item. It is + * intended to be displayed in a QTreeWidget. + * @sa DataSourceItem + */ +class DataSourceTreeWidgetItem : public QTreeWidgetItem { +public: + explicit DataSourceTreeWidgetItem(const DataSourceItem *data, int type = Type); + explicit DataSourceTreeWidgetItem(QTreeWidget *parent, const DataSourceItem *data, + int type = Type); + + virtual QVariant data(int column, int role) const override; + virtual void setData(int column, int role, const QVariant &value) override; + +private: + class DataSourceTreeWidgetItemPrivate; + spimpl::unique_impl_ptr impl; +}; + +#endif // SCIQLOP_DATASOURCETREEWIDGETITEM_H diff --git a/gui/src/DataSource/DataSourceTreeWidgetItem.cpp b/gui/src/DataSource/DataSourceTreeWidgetItem.cpp new file mode 100644 index 0000000..a08624c --- /dev/null +++ b/gui/src/DataSource/DataSourceTreeWidgetItem.cpp @@ -0,0 +1,41 @@ +#include +#include + +Q_LOGGING_CATEGORY(LOG_DataSourceTreeWidgetItem, "DataSourceTreeWidgetItem") + +struct DataSourceTreeWidgetItem::DataSourceTreeWidgetItemPrivate { + explicit DataSourceTreeWidgetItemPrivate(const DataSourceItem *data) : m_Data{data} {} + + /// Model used to retrieve data source information + const DataSourceItem *m_Data; +}; + +DataSourceTreeWidgetItem::DataSourceTreeWidgetItem(const DataSourceItem *data, int type) + : DataSourceTreeWidgetItem{nullptr, data, type} +{ +} + +DataSourceTreeWidgetItem::DataSourceTreeWidgetItem(QTreeWidget *parent, const DataSourceItem *data, + int type) + : QTreeWidgetItem{parent, type}, + impl{spimpl::make_unique_impl(data)} +{ +} + +QVariant DataSourceTreeWidgetItem::data(int column, int role) const +{ + if (role == Qt::DisplayRole) { + return (impl->m_Data) ? impl->m_Data->data(column) : QVariant{}; + } + else { + return QTreeWidgetItem::data(column, role); + } +} + +void DataSourceTreeWidgetItem::setData(int column, int role, const QVariant &value) +{ + // Data can't be changed by edition + if (role != Qt::EditRole) { + QTreeWidgetItem::setData(column, role, value); + } +}