mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-24 02:40:52 +00:00
Add option to instantly show tooltips over RDTreeWidget items
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
#include <QPainter>
|
||||
#include <QPen>
|
||||
#include <QStack>
|
||||
#include <QToolTip>
|
||||
|
||||
class RDTreeWidgetModel : public QAbstractItemModel
|
||||
{
|
||||
@@ -205,7 +206,7 @@ public:
|
||||
|
||||
return QVariant();
|
||||
}
|
||||
else if(role == Qt::ToolTipRole)
|
||||
else if(role == Qt::ToolTipRole && !widget->m_instantTooltips)
|
||||
{
|
||||
return item->m_tooltip;
|
||||
}
|
||||
@@ -573,6 +574,26 @@ void RDTreeWidget::mouseMoveEvent(QMouseEvent *e)
|
||||
m_model->itemChanged(old, roles);
|
||||
m_model->itemChanged(item, roles);
|
||||
|
||||
if(m_instantTooltips)
|
||||
{
|
||||
QToolTip::hideText();
|
||||
|
||||
if(m_currentHoverItem != NULL && !m_currentHoverItem->m_tooltip.isEmpty())
|
||||
{
|
||||
// the documentation says:
|
||||
//
|
||||
// "If text is empty the tool tip is hidden. If the text is the same as the currently shown
|
||||
// tooltip, the tip will not move. You can force moving by first hiding the tip with an empty
|
||||
// text, and then showing the new tip at the new position."
|
||||
//
|
||||
// However the actual implementation has some kind of 'fading' check, so if you hide then
|
||||
// immediately show, it will try to reuse the tooltip and end up not moving it at all if the
|
||||
// text hasn't changed.
|
||||
QToolTip::showText(QCursor::pos(), lit(" "), this);
|
||||
QToolTip::showText(QCursor::pos(), m_currentHoverItem->m_tooltip, this);
|
||||
}
|
||||
}
|
||||
|
||||
emit mouseMove(e);
|
||||
|
||||
QTreeView::mouseMoveEvent(e);
|
||||
@@ -597,6 +618,8 @@ void RDTreeWidget::leaveEvent(QEvent *e)
|
||||
if(m_currentHoverItem)
|
||||
{
|
||||
RDTreeWidgetItem *item = m_currentHoverItem;
|
||||
if(!item->m_tooltip.isEmpty() && m_instantTooltips)
|
||||
QToolTip::hideText();
|
||||
m_currentHoverItem = NULL;
|
||||
m_model->itemChanged(item, {Qt::DecorationRole, Qt::BackgroundRole, Qt::ForegroundRole});
|
||||
}
|
||||
|
||||
@@ -148,6 +148,8 @@ private:
|
||||
class RDTreeWidget : public QTreeView
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(bool instantTooltips READ instantTooltips WRITE setInstantTooltips)
|
||||
public:
|
||||
explicit RDTreeWidget(QWidget *parent = 0);
|
||||
~RDTreeWidget();
|
||||
@@ -163,6 +165,8 @@ public:
|
||||
void setHoverHandCursor(bool hand) { m_hoverHandCursor = hand; }
|
||||
void setHoverClickActivate(bool click) { m_activateOnClick = click; }
|
||||
void setClearSelectionOnFocusLoss(bool clear) { m_clearSelectionOnFocusLoss = clear; }
|
||||
bool instantTooltips() { return m_instantTooltips; }
|
||||
void setInstantTooltips(bool instant) { m_instantTooltips = instant; }
|
||||
RDTreeWidgetItem *invisibleRootItem() { return m_root; }
|
||||
void addTopLevelItem(RDTreeWidgetItem *item) { m_root->addChild(item); }
|
||||
RDTreeWidgetItem *topLevelItem(int index) const { return m_root->child(index); }
|
||||
@@ -236,6 +240,7 @@ private:
|
||||
|
||||
RDTreeWidgetItem *m_currentHoverItem = NULL;
|
||||
|
||||
bool m_instantTooltips = false;
|
||||
int m_hoverColumn = -1;
|
||||
QIcon m_normalHoverIcon;
|
||||
QIcon m_activeHoverIcon;
|
||||
|
||||
@@ -172,6 +172,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->iaLayouts->header()->setSectionResizeMode(8, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->iaLayouts->setClearSelectionOnFocusLoss(true);
|
||||
ui->iaLayouts->setInstantTooltips(true);
|
||||
ui->iaLayouts->setHoverIconColumn(8, action, action_hover);
|
||||
}
|
||||
|
||||
@@ -187,6 +188,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->iaBuffers->header()->setSectionResizeMode(5, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->iaBuffers->setClearSelectionOnFocusLoss(true);
|
||||
ui->iaBuffers->setInstantTooltips(true);
|
||||
ui->iaBuffers->setHoverIconColumn(5, action, action_hover);
|
||||
}
|
||||
|
||||
@@ -207,6 +209,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
tex->setHoverIconColumn(8, action, action_hover);
|
||||
tex->setClearSelectionOnFocusLoss(true);
|
||||
tex->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *samp : samplers)
|
||||
@@ -220,6 +223,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
samp->header()->setSectionResizeMode(4, QHeaderView::ResizeToContents);
|
||||
|
||||
samp->setClearSelectionOnFocusLoss(true);
|
||||
samp->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *cbuffer : cbuffers)
|
||||
@@ -234,6 +238,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
cbuffer->setHoverIconColumn(4, action, action_hover);
|
||||
cbuffer->setClearSelectionOnFocusLoss(true);
|
||||
cbuffer->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *cl : classes)
|
||||
@@ -245,6 +250,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
cl->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
|
||||
|
||||
cl->setClearSelectionOnFocusLoss(true);
|
||||
cl->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -260,6 +266,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->viewports->header()->setSectionResizeMode(6, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->viewports->setClearSelectionOnFocusLoss(true);
|
||||
ui->viewports->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -272,6 +279,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->scissors->header()->setSectionResizeMode(4, QHeaderView::Stretch);
|
||||
|
||||
ui->scissors->setClearSelectionOnFocusLoss(true);
|
||||
ui->scissors->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -290,6 +298,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
ui->targetOutputs->setHoverIconColumn(8, action, action_hover);
|
||||
ui->targetOutputs->setClearSelectionOnFocusLoss(true);
|
||||
ui->targetOutputs->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -307,6 +316,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->blends->header()->setSectionResizeMode(8, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->blends->setClearSelectionOnFocusLoss(true);
|
||||
ui->blends->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -320,6 +330,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->stencils->header()->setSectionResizeMode(4, QHeaderView::Stretch);
|
||||
|
||||
ui->stencils->setClearSelectionOnFocusLoss(true);
|
||||
ui->stencils->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -337,6 +348,7 @@ D3D11PipelineStateViewer::D3D11PipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
ui->csUAVs->setHoverIconColumn(8, action, action_hover);
|
||||
ui->csUAVs->setClearSelectionOnFocusLoss(true);
|
||||
ui->csUAVs->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
// this is often changed just because we're changing some tab in the designer.
|
||||
|
||||
@@ -201,6 +201,7 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->iaLayouts->header()->setSectionResizeMode(8, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->iaLayouts->setClearSelectionOnFocusLoss(true);
|
||||
ui->iaLayouts->setInstantTooltips(true);
|
||||
ui->iaLayouts->setHoverIconColumn(8, action, action_hover);
|
||||
}
|
||||
|
||||
@@ -216,6 +217,7 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->iaBuffers->header()->setSectionResizeMode(5, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->iaBuffers->setClearSelectionOnFocusLoss(true);
|
||||
ui->iaBuffers->setInstantTooltips(true);
|
||||
ui->iaBuffers->setHoverIconColumn(5, action, action_hover);
|
||||
}
|
||||
|
||||
@@ -241,6 +243,7 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
res->setHoverIconColumn(10, action, action_hover);
|
||||
res->setClearSelectionOnFocusLoss(true);
|
||||
res->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *uav : uavs)
|
||||
@@ -265,6 +268,7 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
uav->setHoverIconColumn(10, action, action_hover);
|
||||
uav->setClearSelectionOnFocusLoss(true);
|
||||
uav->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *samp : samplers)
|
||||
@@ -283,6 +287,7 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
samp->header()->setSectionResizeMode(6, QHeaderView::ResizeToContents);
|
||||
|
||||
samp->setClearSelectionOnFocusLoss(true);
|
||||
samp->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *cbuffer : cbuffers)
|
||||
@@ -302,6 +307,7 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
cbuffer->setHoverIconColumn(6, action, action_hover);
|
||||
cbuffer->setClearSelectionOnFocusLoss(true);
|
||||
cbuffer->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -317,6 +323,7 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->viewports->header()->setSectionResizeMode(6, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->viewports->setClearSelectionOnFocusLoss(true);
|
||||
ui->viewports->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -329,6 +336,7 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->scissors->header()->setSectionResizeMode(4, QHeaderView::Stretch);
|
||||
|
||||
ui->scissors->setClearSelectionOnFocusLoss(true);
|
||||
ui->scissors->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -347,6 +355,7 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
ui->targetOutputs->setHoverIconColumn(8, action, action_hover);
|
||||
ui->targetOutputs->setClearSelectionOnFocusLoss(true);
|
||||
ui->targetOutputs->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -364,6 +373,7 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->blends->header()->setSectionResizeMode(8, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->blends->setClearSelectionOnFocusLoss(true);
|
||||
ui->blends->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -377,6 +387,7 @@ D3D12PipelineStateViewer::D3D12PipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->stencils->header()->setSectionResizeMode(4, QHeaderView::Stretch);
|
||||
|
||||
ui->stencils->setClearSelectionOnFocusLoss(true);
|
||||
ui->stencils->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
// this is often changed just because we're changing some tab in the designer.
|
||||
|
||||
@@ -176,6 +176,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
ui->viAttrs->header()->setSectionResizeMode(6, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->viAttrs->setClearSelectionOnFocusLoss(true);
|
||||
ui->viAttrs->setInstantTooltips(true);
|
||||
ui->viAttrs->setHoverIconColumn(6, action, action_hover);
|
||||
}
|
||||
|
||||
@@ -192,6 +193,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
ui->viBuffers->header()->setSectionResizeMode(6, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->viBuffers->setClearSelectionOnFocusLoss(true);
|
||||
ui->viBuffers->setInstantTooltips(true);
|
||||
ui->viBuffers->setHoverIconColumn(6, action, action_hover);
|
||||
}
|
||||
|
||||
@@ -212,6 +214,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
|
||||
tex->setHoverIconColumn(8, action, action_hover);
|
||||
tex->setClearSelectionOnFocusLoss(true);
|
||||
tex->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *samp : samplers)
|
||||
@@ -225,6 +228,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
samp->header()->setSectionResizeMode(4, QHeaderView::ResizeToContents);
|
||||
|
||||
samp->setClearSelectionOnFocusLoss(true);
|
||||
samp->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *ubo : ubos)
|
||||
@@ -239,6 +243,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
|
||||
ubo->setHoverIconColumn(4, action, action_hover);
|
||||
ubo->setClearSelectionOnFocusLoss(true);
|
||||
ubo->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *sub : subroutines)
|
||||
@@ -249,6 +254,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
sub->header()->setSectionResizeMode(1, QHeaderView::Stretch);
|
||||
|
||||
sub->setClearSelectionOnFocusLoss(true);
|
||||
sub->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *ubo : readwrites)
|
||||
@@ -266,6 +272,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
|
||||
ubo->setHoverIconColumn(6, action, action_hover);
|
||||
ubo->setClearSelectionOnFocusLoss(true);
|
||||
ubo->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -281,6 +288,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
ui->viewports->header()->setSectionResizeMode(6, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->viewports->setClearSelectionOnFocusLoss(true);
|
||||
ui->viewports->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -295,6 +303,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
ui->scissors->header()->setSectionResizeMode(5, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->scissors->setClearSelectionOnFocusLoss(true);
|
||||
ui->scissors->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -312,6 +321,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
|
||||
ui->framebuffer->setHoverIconColumn(8, action, action_hover);
|
||||
ui->framebuffer->setClearSelectionOnFocusLoss(true);
|
||||
ui->framebuffer->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -329,6 +339,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
ui->blends->header()->setSectionResizeMode(8, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->blends->setClearSelectionOnFocusLoss(true);
|
||||
ui->blends->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -345,6 +356,7 @@ GLPipelineStateViewer::GLPipelineStateViewer(ICaptureContext &ctx, PipelineState
|
||||
ui->stencils->header()->setSectionResizeMode(7, QHeaderView::Stretch);
|
||||
|
||||
ui->stencils->setClearSelectionOnFocusLoss(true);
|
||||
ui->stencils->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
// this is often changed just because we're changing some tab in the designer.
|
||||
|
||||
@@ -177,6 +177,7 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
ui->viAttrs->setHoverIconColumn(6, action, action_hover);
|
||||
ui->viAttrs->setClearSelectionOnFocusLoss(true);
|
||||
ui->viAttrs->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -193,6 +194,7 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
ui->viBuffers->setHoverIconColumn(6, action, action_hover);
|
||||
ui->viBuffers->setClearSelectionOnFocusLoss(true);
|
||||
ui->viBuffers->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *res : resources)
|
||||
@@ -211,6 +213,7 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
res->setHoverIconColumn(7, action, action_hover);
|
||||
res->setClearSelectionOnFocusLoss(true);
|
||||
res->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
for(RDTreeWidget *ubo : ubos)
|
||||
@@ -228,6 +231,7 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
ubo->setHoverIconColumn(6, action, action_hover);
|
||||
ubo->setClearSelectionOnFocusLoss(true);
|
||||
ubo->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -243,6 +247,7 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->viewports->header()->setSectionResizeMode(6, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->viewports->setClearSelectionOnFocusLoss(true);
|
||||
ui->viewports->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -255,6 +260,7 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->scissors->header()->setSectionResizeMode(4, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->scissors->setClearSelectionOnFocusLoss(true);
|
||||
ui->scissors->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -272,6 +278,7 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
|
||||
ui->framebuffer->setHoverIconColumn(8, action, action_hover);
|
||||
ui->framebuffer->setClearSelectionOnFocusLoss(true);
|
||||
ui->framebuffer->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -289,6 +296,7 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->blends->header()->setSectionResizeMode(8, QHeaderView::ResizeToContents);
|
||||
|
||||
ui->blends->setClearSelectionOnFocusLoss(true);
|
||||
ui->blends->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
{
|
||||
@@ -305,6 +313,7 @@ VulkanPipelineStateViewer::VulkanPipelineStateViewer(ICaptureContext &ctx,
|
||||
ui->stencils->header()->setSectionResizeMode(7, QHeaderView::Stretch);
|
||||
|
||||
ui->stencils->setClearSelectionOnFocusLoss(true);
|
||||
ui->stencils->setInstantTooltips(true);
|
||||
}
|
||||
|
||||
// this is often changed just because we're changing some tab in the designer.
|
||||
|
||||
Reference in New Issue
Block a user