Add option to instantly show tooltips over RDTreeWidget items

This commit is contained in:
baldurk
2017-05-30 14:08:44 +01:00
parent 2c145fc64c
commit 641eaf4665
6 changed files with 73 additions and 1 deletions
+24 -1
View File
@@ -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.