diff --git a/qrenderdoc/Widgets/Extended/RDTreeWidget.cpp b/qrenderdoc/Widgets/Extended/RDTreeWidget.cpp index c3b93b04b..85415f656 100644 --- a/qrenderdoc/Widgets/Extended/RDTreeWidget.cpp +++ b/qrenderdoc/Widgets/Extended/RDTreeWidget.cpp @@ -149,7 +149,7 @@ public: if(!index.isValid()) return 0; - return QAbstractItemModel::flags(index); + return QAbstractItemModel::flags(index) | Qt::ItemIsUserCheckable; } QVariant headerData(int section, Qt::Orientation orientation, int role) const override @@ -230,6 +230,63 @@ public: return QVariant(); } + bool setData(const QModelIndex &index, const QVariant &value, int role) + { + RDTreeWidgetItem *item = itemForIndex(index); + + // invisible root element has no data + if(!item->m_parent) + return false; + + bool ret = false; + + if(role == Qt::DisplayRole) + { + if(index.column() < item->m_text.count()) + { + item->m_text[index.column()] = value; + ret = true; + } + } + else if(role == Qt::DecorationRole) + { + if(index.column() < item->m_icons.count()) + { + item->m_icons[index.column()] = value.value(); + ret = true; + } + } + else if(role == Qt::BackgroundRole) + { + item->m_back = value.value(); + ret = true; + } + else if(role == Qt::ForegroundRole) + { + item->m_fore = value.value(); + ret = true; + } + else if(role == Qt::ToolTipRole && !widget->m_instantTooltips) + { + item->m_tooltip = value.toString(); + ret = true; + } + else if(role == Qt::FontRole) + { + ret = false; + } + else + { + item->setData(index.column(), role, value); + ret = true; + } + + if(ret) + widget->itemDataChanged(item, index.column(), role); + + return ret; + } + private: RDTreeWidget *widget; }; diff --git a/qrenderdoc/Widgets/Extended/RDTreeWidget.h b/qrenderdoc/Widgets/Extended/RDTreeWidget.h index fa2065ddc..e1edecc00 100644 --- a/qrenderdoc/Widgets/Extended/RDTreeWidget.h +++ b/qrenderdoc/Widgets/Extended/RDTreeWidget.h @@ -111,6 +111,16 @@ public: dataChanged(0, Qt::ToolTipRole); } + inline Qt::CheckState checkState(int column) const + { + return static_cast(data(column, Qt::CheckStateRole).toInt()); + } + inline void setCheckState(int column, Qt::CheckState state) + { + setData(column, Qt::CheckStateRole, static_cast(state)); + dataChanged(column, Qt::CheckStateRole); + } + private: friend class RDTreeWidget; friend class RDTreeWidgetModel;