From: Soeren Apel Date: Mon, 5 Jan 2015 17:34:53 +0000 (+0100) Subject: Fix #489 by implementing device tool button tooltip X-Git-Tag: pulseview-0.3.0~264 X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=commitdiff_plain;h=1982c6500d69f2ee005b35460944e6c2d323b465 Fix #489 by implementing device tool button tooltip --- diff --git a/pv/widgets/devicetoolbutton.cpp b/pv/widgets/devicetoolbutton.cpp index 27ba31a6..ffa1cc65 100644 --- a/pv/widgets/devicetoolbutton.cpp +++ b/pv/widgets/devicetoolbutton.cpp @@ -20,6 +20,9 @@ #include +#include +#include + #include #include @@ -54,6 +57,9 @@ DeviceToolButton::DeviceToolButton(QWidget *parent, connect(&mapper_, SIGNAL(mapped(QObject*)), this, SLOT(on_action(QObject*))); + + connect(&menu_, SIGNAL(hovered(QAction*)), + this, SLOT(on_menu_hovered(QAction*))); } shared_ptr DeviceToolButton::selected_device() @@ -88,6 +94,7 @@ void DeviceToolButton::update_device_list() a->setCheckable(true); a->setChecked(selected_device_ == dev); a->setData(qVariantFromValue((void*)dev.get())); + a->setToolTip(QString::fromStdString(device_manager_.get_full_name(dev))); mapper_.setMapping(a, a); connect(a, SIGNAL(triggered()), &mapper_, SLOT(map())); @@ -116,5 +123,30 @@ void DeviceToolButton::on_action(QObject *action) device_selected(); } +void DeviceToolButton::on_menu_hovered(QAction *action) +{ + assert(action); + + // Only show the tooltip for device entries (they hold + // device pointers in their data field) + if (!action->data().isValid()) + return; + + device_tooltip_ = action->toolTip(); + + if (QToolTip::isVisible()) + on_menu_hover_timeout(); + else + QTimer::singleShot(1000, this, SLOT(on_menu_hover_timeout())); +} + +void DeviceToolButton::on_menu_hover_timeout() +{ + if (device_tooltip_.isEmpty()) + return; + + QToolTip::showText(QCursor::pos(), device_tooltip_); +} + } // widgets } // pv diff --git a/pv/widgets/devicetoolbutton.hpp b/pv/widgets/devicetoolbutton.hpp index 1fb0a544..684d87b0 100644 --- a/pv/widgets/devicetoolbutton.hpp +++ b/pv/widgets/devicetoolbutton.hpp @@ -79,6 +79,10 @@ private: private Q_SLOTS: void on_action(QObject *action); + void on_menu_hovered(QAction *action); + + void on_menu_hover_timeout(); + Q_SIGNALS: void device_selected(); @@ -91,6 +95,8 @@ private: std::shared_ptr selected_device_; std::vector< std::weak_ptr > devices_; + + QString device_tooltip_; }; } // widgets