Skip to content

Commit 5619ed6

Browse files
committed
Fix RDTreeWidget to allow for checkable items
1 parent 81ec99b commit 5619ed6

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

qrenderdoc/Widgets/Extended/RDTreeWidget.cpp

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ class RDTreeWidgetModel : public QAbstractItemModel
149149
if(!index.isValid())
150150
return 0;
151151

152-
return QAbstractItemModel::flags(index);
152+
return QAbstractItemModel::flags(index) | Qt::ItemIsUserCheckable;
153153
}
154154

155155
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
@@ -230,6 +230,63 @@ class RDTreeWidgetModel : public QAbstractItemModel
230230
return QVariant();
231231
}
232232

233+
bool setData(const QModelIndex &index, const QVariant &value, int role)
234+
{
235+
RDTreeWidgetItem *item = itemForIndex(index);
236+
237+
// invisible root element has no data
238+
if(!item->m_parent)
239+
return false;
240+
241+
bool ret = false;
242+
243+
if(role == Qt::DisplayRole)
244+
{
245+
if(index.column() < item->m_text.count())
246+
{
247+
item->m_text[index.column()] = value;
248+
ret = true;
249+
}
250+
}
251+
else if(role == Qt::DecorationRole)
252+
{
253+
if(index.column() < item->m_icons.count())
254+
{
255+
item->m_icons[index.column()] = value.value<QIcon>();
256+
ret = true;
257+
}
258+
}
259+
else if(role == Qt::BackgroundRole)
260+
{
261+
item->m_back = value.value<QBrush>();
262+
ret = true;
263+
}
264+
else if(role == Qt::ForegroundRole)
265+
{
266+
item->m_fore = value.value<QBrush>();
267+
ret = true;
268+
}
269+
else if(role == Qt::ToolTipRole && !widget->m_instantTooltips)
270+
{
271+
item->m_tooltip = value.toString();
272+
ret = true;
273+
}
274+
else if(role == Qt::FontRole)
275+
{
276+
ret = false;
277+
}
278+
else
279+
{
280+
item->setData(index.column(), role, value);
281+
ret = true;
282+
}
283+
284+
if(ret)
285+
widget->itemDataChanged(item, index.column(), role);
286+
287+
return ret;
288+
}
289+
233290
private:
234291
RDTreeWidget *widget;
235292
};

qrenderdoc/Widgets/Extended/RDTreeWidget.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,16 @@ class RDTreeWidgetItem
111111
dataChanged(0, Qt::ToolTipRole);
112112
}
113113

114+
inline Qt::CheckState checkState(int column) const
115+
{
116+
return static_cast<Qt::CheckState>(data(column, Qt::CheckStateRole).toInt());
117+
}
118+
inline void setCheckState(int column, Qt::CheckState state)
119+
{
120+
setData(column, Qt::CheckStateRole, static_cast<int>(state));
121+
dataChanged(column, Qt::CheckStateRole);
122+
}
123+
114124
private:
115125
friend class RDTreeWidget;
116126
friend class RDTreeWidgetModel;

0 commit comments

Comments
 (0)