diff --git a/src/widget/weffectchainpresetbutton.cpp b/src/widget/weffectchainpresetbutton.cpp index e4cb5d3128b..e33e46809ff 100644 --- a/src/widget/weffectchainpresetbutton.cpp +++ b/src/widget/weffectchainpresetbutton.cpp @@ -5,6 +5,7 @@ #include "effects/presets/effectpresetmanager.h" #include "moc_weffectchainpresetbutton.cpp" +#include "util/parented_ptr.h" #include "widget/effectwidgetutils.h" WEffectChainPresetButton::WEffectChainPresetButton(QWidget* parent, EffectsManager* pEffectsManager) @@ -43,6 +44,7 @@ void WEffectChainPresetButton::setup(const QDomNode& node, const SkinContext& co this, &WEffectChainPresetButton::populateMenu); } + m_pMenu->setToolTipsVisible(true); populateMenu(); } @@ -50,6 +52,7 @@ void WEffectChainPresetButton::populateMenu() { m_pMenu->clear(); // Chain preset items + const EffectsBackendManagerPointer bem = m_pEffectsManager->getBackendManager(); bool presetIsReadOnly = true; for (const auto& pChainPreset : m_pChainPresetManager->getPresetsSorted()) { QString title = pChainPreset->name(); @@ -58,9 +61,27 @@ void WEffectChainPresetButton::populateMenu() { QChar(' ') + title; presetIsReadOnly = pChainPreset->isReadOnly(); } - m_pMenu->addAction(title, this, [this, pChainPreset]() { - m_pChain->loadChainPreset(pChainPreset); - }); + QString tooltip = + QStringLiteral("") + pChainPreset->name() + QStringLiteral(""); + QStringList effectNames; + for (const auto& pEffectPreset : pChainPreset->effectPresets()) { + if (!pEffectPreset->isEmpty()) { + effectNames.append(bem->getDisplayNameForEffectPreset(pEffectPreset)); + } + } + if (effectNames.size() > 1) { + tooltip.append("
"); + tooltip.append(effectNames.join("
")); + } + parented_ptr pAction = make_parented(title, this); + connect(pAction, + &QAction::triggered, + this, + [this, pChainPreset]() { + m_pChain->loadChainPreset(pChainPreset); + }); + pAction->setToolTip(tooltip); + m_pMenu->addAction(pAction); } m_pMenu->addSeparator(); // This prevents showing the Update button for the empty '---' preset, in case diff --git a/src/widget/weffectchainpresetselector.cpp b/src/widget/weffectchainpresetselector.cpp index f8a0a924e54..d106b8e602e 100644 --- a/src/widget/weffectchainpresetselector.cpp +++ b/src/widget/weffectchainpresetselector.cpp @@ -74,13 +74,26 @@ void WEffectChainPresetSelector::populate() { presetList = m_pEffectsManager->getChainPresetManager()->getPresetsSorted(); } + const EffectsBackendManagerPointer bem = m_pEffectsManager->getBackendManager(); for (int i = 0; i < presetList.size(); i++) { auto pChainPreset = presetList.at(i); QString elidedDisplayName = metrics.elidedText(pChainPreset->name(), Qt::ElideMiddle, view()->width() - 2); addItem(elidedDisplayName, QVariant(pChainPreset->name())); - setItemData(i, pChainPreset->name(), Qt::ToolTipRole); + QString tooltip = + QStringLiteral("") + pChainPreset->name() + QStringLiteral(""); + QStringList effectNames; + for (const auto& pEffectPreset : pChainPreset->effectPresets()) { + if (!pEffectPreset->isEmpty()) { + effectNames.append(bem->getDisplayNameForEffectPreset(pEffectPreset)); + } + } + if (effectNames.size() > 1) { + tooltip.append("
"); + tooltip.append(effectNames.join("
")); + } + setItemData(i, tooltip, Qt::ToolTipRole); } slotChainPresetChanged(m_pChain->presetName());