From df9f72b85777d49be4392005279b58db7a7010fc Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 13 Jul 2017 13:57:33 +0100 Subject: [PATCH] Add option to ignore icon size when sizing rows in a RDTreeView --- qrenderdoc/Widgets/Extended/RDTreeView.cpp | 26 +++++++++++++++++++--- qrenderdoc/Widgets/Extended/RDTreeView.h | 6 +++-- qrenderdoc/Windows/EventBrowser.cpp | 1 + 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/qrenderdoc/Widgets/Extended/RDTreeView.cpp b/qrenderdoc/Widgets/Extended/RDTreeView.cpp index 113fc81bd..14594bd87 100644 --- a/qrenderdoc/Widgets/Extended/RDTreeView.cpp +++ b/qrenderdoc/Widgets/Extended/RDTreeView.cpp @@ -36,10 +36,30 @@ RDTreeViewDelegate::RDTreeViewDelegate(RDTreeView *view) : QStyledItemDelegate(v QSize RDTreeViewDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { - QSize ret = QStyledItemDelegate::sizeHint(option, index); + QSize ret; + + QVariant var = index.data(Qt::SizeHintRole); + if(var.canConvert()) + { + ret = var.value(); + } + else + { + QStyleOptionViewItem opt = option; + initStyleOption(&opt, index); + + if(m_View->ignoreIconSize()) + { + opt.icon = QIcon(); + opt.features &= ~QStyleOptionViewItem::HasDecoration; + opt.decorationSize = QSize(); + } + + ret = m_View->style()->sizeFromContents(QStyle::CT_ItemViewItem, &opt, QSize(), m_View); + } // expand a pixel for the grid lines - if(m_View->m_VisibleGridLines) + if(m_View->visibleGridLines()) { ret.setWidth(ret.width() + 1); ret.setHeight(ret.height() + 1); @@ -47,7 +67,7 @@ QSize RDTreeViewDelegate::sizeHint(const QStyleOptionViewItem &option, const QMo // ensure we have at least the margin on top of font size. If the style applied more, don't add to // it. - ret.setHeight(qMax(ret.height(), option.fontMetrics.height() + m_View->m_VertMargin)); + ret.setHeight(qMax(ret.height(), option.fontMetrics.height() + m_View->verticalItemMargin())); return ret; } diff --git a/qrenderdoc/Widgets/Extended/RDTreeView.h b/qrenderdoc/Widgets/Extended/RDTreeView.h index 3b0e63606..73de9b3c9 100644 --- a/qrenderdoc/Widgets/Extended/RDTreeView.h +++ b/qrenderdoc/Widgets/Extended/RDTreeView.h @@ -69,10 +69,13 @@ public: void hideBranches() { m_VisibleBranches = false; } void showGridLines() { m_VisibleGridLines = true; } void hideGridLines() { m_VisibleGridLines = false; } + bool visibleGridLines() { return m_VisibleGridLines; } void setTooltipElidedItems(bool tool) { m_TooltipElidedItems = tool; } bool tooltipElidedItems() { return m_TooltipElidedItems; } void setItemVerticalMargin(int vertical) { m_VertMargin = vertical; } int verticalItemMargin() { return m_VertMargin; } + void setIgnoreIconSize(bool ignore) { m_IgnoreIconSize = ignore; } + bool ignoreIconSize() { return m_IgnoreIconSize; } protected: void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override; void mouseMoveEvent(QMouseEvent *e) override; @@ -95,8 +98,7 @@ private: RDTipLabel *m_ElidedTooltip; int m_VertMargin = 6; + bool m_IgnoreIconSize = false; bool m_fillBranchRect = true; - - friend class RDTreeViewDelegate; }; diff --git a/qrenderdoc/Windows/EventBrowser.cpp b/qrenderdoc/Windows/EventBrowser.cpp index f21ccff5a..6c0ac77f5 100644 --- a/qrenderdoc/Windows/EventBrowser.cpp +++ b/qrenderdoc/Windows/EventBrowser.cpp @@ -91,6 +91,7 @@ EventBrowser::EventBrowser(ICaptureContext &ctx, QWidget *parent) ui->events->header()->setCascadingSectionResizes(false); ui->events->setItemVerticalMargin(3); + ui->events->setIgnoreIconSize(true); // set up default section layout. This will be overridden in restoreState() ui->events->header()->resizeSection(COL_EID, 80);