From b6f37b1cb5af022be3804eea725897276229001e Mon Sep 17 00:00:00 2001 From: Davide Faconti Date: Mon, 27 May 2024 17:32:00 +0200 Subject: [PATCH] fix tooltip visualization --- plotjuggler_app/curvetree_view.cpp | 41 ++++++++++++++++++++++-------- plotjuggler_app/curvetree_view.h | 11 ++++---- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/plotjuggler_app/curvetree_view.cpp b/plotjuggler_app/curvetree_view.cpp index 25a6f2f83..cdeef4b3f 100644 --- a/plotjuggler_app/curvetree_view.cpp +++ b/plotjuggler_app/curvetree_view.cpp @@ -6,6 +6,7 @@ #include "curvetree_view.h" #include "curvelist_panel.h" +#include #include #include #include @@ -68,6 +69,27 @@ CurveTreeView::CurveTreeView(CurveListPanel* parent) setFocusPolicy(Qt::ClickFocus); } }); + _tooltip_timer = new QTimer(this); + connect(_tooltip_timer, &QTimer::timeout, this, [this]() { + if (_tooltip_item) + { + auto tooltip = _tooltip_item->data(0, CustomRoles::ToolTip); + if (tooltip.isValid()) + { + QToolTip::showText(_tooltip_pos, tooltip.toString(), this, QRect(), 10000); + } + } + }); + _tooltip_timer->start(100); +} + +void CurveTreeView::clear() +{ + _tooltip_item = nullptr; + _tooltip_timer->stop(); + QTreeWidget::clear(); + _leaf_count = 0; + _hidden_count = 0; } void CurveTreeView::addItem(const QString& group_name, const QString& tree_name, @@ -176,7 +198,6 @@ void CurveTreeView::refreshColumns() invisibleRootItem()->sortChildren(0, Qt::AscendingOrder); treeVisitor([&](QTreeWidgetItem* item) { item->sortChildren(0, Qt::AscendingOrder); }); header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); - // TODO emit updateFilter(); } std::vector CurveTreeView::getSelectedNames() @@ -286,16 +307,14 @@ bool CurveTreeView::eventFilter(QObject* object, QEvent* event) auto* item = itemAt(mouse_event->pos()); if (item) { - auto tooltip = item->data(0, CustomRoles::ToolTip); - if (tooltip.isValid()) - { - QToolTip::showText(mapToGlobal(mouse_event->pos()), tooltip.toString()); - } - else - { - QToolTip::hideText(); - } + _tooltip_pos = mapToGlobal(mouse_event->pos()); } + _tooltip_item = item; + } + + if (event->type() == QEvent::Leave) + { + _tooltip_item = nullptr; } bool ret = CurvesView::eventFilterBase(object, event); @@ -336,6 +355,8 @@ void CurveTreeView::removeCurve(const QString& to_be_deleted) } }; + // just in case + _tooltip_item = nullptr; treeVisitor(removeFunc); } diff --git a/plotjuggler_app/curvetree_view.h b/plotjuggler_app/curvetree_view.h index b858d637e..2995d095b 100644 --- a/plotjuggler_app/curvetree_view.h +++ b/plotjuggler_app/curvetree_view.h @@ -16,12 +16,7 @@ class CurveTreeView : public QTreeWidget, public CurvesView public: CurveTreeView(CurveListPanel* parent); - void clear() override - { - QTreeWidget::clear(); - _leaf_count = 0; - _hidden_count = 0; - } + void clear() override; void addItem(const QString& prefix, const QString& tree_name, const QString& plot_ID) override; @@ -58,6 +53,10 @@ class CurveTreeView : public QTreeWidget, public CurvesView int _hidden_count = 0; int _leaf_count = 0; + + QTimer* _tooltip_timer = nullptr; + QTreeWidgetItem* _tooltip_item = nullptr; + QPoint _tooltip_pos; }; #endif // CURVETREE_VIEW_H