From 0f1f98fe5b6ccc7add3cedc035b0df5d8e5431eb Mon Sep 17 00:00:00 2001 From: Joel Holdsworth Date: Sun, 23 Nov 2014 19:24:53 +0000 Subject: [PATCH] LogicSignal: Added an icon cache --- pv/view/logicsignal.cpp | 23 +++++++++++++++++------ pv/view/logicsignal.hpp | 7 +++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/pv/view/logicsignal.cpp b/pv/view/logicsignal.cpp index c58b85d9..4b07c568 100644 --- a/pv/view/logicsignal.cpp +++ b/pv/view/logicsignal.cpp @@ -241,32 +241,32 @@ void LogicSignal::paint_caps(QPainter &p, QLineF *const lines, void LogicSignal::init_trigger_actions(QWidget *parent) { - trigger_none_ = new QAction(QIcon(":/icons/trigger-none.svg"), + trigger_none_ = new QAction(*get_icon(":/icons/trigger-none.svg"), tr("No trigger"), parent); trigger_none_->setCheckable(true); connect(trigger_none_, SIGNAL(triggered()), this, SLOT(on_trigger())); - trigger_rising_ = new QAction(QIcon(":/icons/trigger-rising.svg"), + trigger_rising_ = new QAction(*get_icon(":/icons/trigger-rising.svg"), tr("Trigger on rising edge"), parent); trigger_rising_->setCheckable(true); connect(trigger_rising_, SIGNAL(triggered()), this, SLOT(on_trigger())); - trigger_high_ = new QAction(QIcon(":/icons/trigger-high.svg"), + trigger_high_ = new QAction(*get_icon(":/icons/trigger-high.svg"), tr("Trigger on high level"), parent); trigger_high_->setCheckable(true); connect(trigger_high_, SIGNAL(triggered()), this, SLOT(on_trigger())); - trigger_falling_ = new QAction(QIcon(":/icons/trigger-falling.svg"), + trigger_falling_ = new QAction(*get_icon(":/icons/trigger-falling.svg"), tr("Trigger on falling edge"), parent); trigger_falling_->setCheckable(true); connect(trigger_falling_, SIGNAL(triggered()), this, SLOT(on_trigger())); - trigger_low_ = new QAction(QIcon(":/icons/trigger-low.svg"), + trigger_low_ = new QAction(*get_icon(":/icons/trigger-low.svg"), tr("Trigger on low level"), parent); trigger_low_->setCheckable(true); connect(trigger_low_, SIGNAL(triggered()), this, SLOT(on_trigger())); - trigger_change_ = new QAction(QIcon(":/icons/trigger-change.svg"), + trigger_change_ = new QAction(*get_icon(":/icons/trigger-change.svg"), tr("Trigger on rising or falling edge"), parent); trigger_change_->setCheckable(true); connect(trigger_change_, SIGNAL(triggered()), this, SLOT(on_trigger())); @@ -380,6 +380,17 @@ void LogicSignal::modify_trigger() new_trigger->stages().empty() ? nullptr : new_trigger); } +const QIcon* LogicSignal::get_icon(const char *path) +{ + const QIcon *icon = icon_cache_.take(path); + if (!icon) { + icon = new QIcon(path); + icon_cache_.insert(path, icon); + } + + return icon; +} + void LogicSignal::on_trigger() { QAction *action; diff --git a/pv/view/logicsignal.hpp b/pv/view/logicsignal.hpp index 6d6d89aa..7a1c62f5 100644 --- a/pv/view/logicsignal.hpp +++ b/pv/view/logicsignal.hpp @@ -21,10 +21,13 @@ #ifndef PULSEVIEW_PV_VIEW_LOGICSIGNAL_H #define PULSEVIEW_PV_VIEW_LOGICSIGNAL_H +#include + #include "signal.hpp" #include +class QIcon; class QToolBar; namespace sigrok { @@ -106,6 +109,8 @@ private: void populate_popup_form(QWidget *parent, QFormLayout *form); void modify_trigger(); + static const QIcon* get_icon(const char *path); + private Q_SLOTS: void on_trigger(); @@ -121,6 +126,8 @@ private: QAction *trigger_falling_; QAction *trigger_low_; QAction *trigger_change_; + + static QCache icon_cache_; }; } // namespace view -- 2.30.2