diff --git a/src/effects/effectsrepository.cpp b/src/effects/effectsrepository.cpp index 1972aa5d50c74ec5792b29f86c000d0363c0dec9..066b37bdfcbccb1cb44a0dc52a4d70033b93f980 100644 --- a/src/effects/effectsrepository.cpp +++ b/src/effects/effectsrepository.cpp @@ -398,3 +398,12 @@ void EffectsRepository::deleteEffect(const QString &id) m_assets.erase(id); } } + +bool EffectsRepository::isAudioEffect(const QString &assetId) const +{ + if (m_assets.count(assetId) > 0) { + AssetListType::AssetType type = m_assets.at(assetId).type; + return type == AssetListType::AssetType::Audio || type == AssetListType::AssetType::CustomAudio; + } + return false; +} diff --git a/src/effects/effectsrepository.hpp b/src/effects/effectsrepository.hpp index 2fb57d5e5498762e144a806a5e090e23c79a3fcc..cb14b1b4cd13bbb0f5c7a347758ac0ee618d106c 100644 --- a/src/effects/effectsrepository.hpp +++ b/src/effects/effectsrepository.hpp @@ -55,6 +55,7 @@ public: /** @brief Returns true if this is an effect group */ bool isGroup(const QString &assetId) const; void deleteEffect(const QString &id); + bool isAudioEffect(const QString &assetId) const; protected: // Constructor is protected because class is a Singleton diff --git a/src/timeline2/view/qml/Clip.qml b/src/timeline2/view/qml/Clip.qml index 9fcc6e89c8d5d17a5c6094af303cb76bd72e0fb6..9028ef110ae0548e1c23eccdf053dfc0b69f0f34 100644 --- a/src/timeline2/view/qml/Clip.qml +++ b/src/timeline2/view/qml/Clip.qml @@ -258,7 +258,7 @@ Rectangle { controller.requestAddToSelection(clipRoot.clipId, true) } root.mainFrame = Math.round(mouse.x / timeline.scaleFactor) - root.showClipMenu() + root.showClipMenu(clipRoot.clipId) } } Keys.onShortcutOverride: event.accepted = clipRoot.isGrabbed && (event.key === Qt.Key_Left || event.key === Qt.Key_Right || event.key === Qt.Key_Up || event.key === Qt.Key_Down || event.key === Qt.Key_Escape) diff --git a/src/timeline2/view/qml/timeline.qml b/src/timeline2/view/qml/timeline.qml index 34761b920b8d86abbc330e0bbc616052148957b7..d6416f4535741425c85d745d22528b30bc53e604 100644 --- a/src/timeline2/view/qml/timeline.qml +++ b/src/timeline2/view/qml/timeline.qml @@ -15,7 +15,7 @@ Rectangle { signal clipClicked() signal mousePosChanged(int position) - signal showClipMenu() + signal showClipMenu(int cid) signal showCompositionMenu() signal showTimelineMenu() signal showRulerMenu() diff --git a/src/timeline2/view/timelinewidget.cpp b/src/timeline2/view/timelinewidget.cpp index 10ec942be429177cf74988ff572e0d0bc30e82b2..f4bb52e82ea47abb299510a1f2e1ca6730724c33 100644 --- a/src/timeline2/view/timelinewidget.cpp +++ b/src/timeline2/view/timelinewidget.cpp @@ -36,6 +36,7 @@ #include "qmltypes/thumbnailprovider.h" #include "timelinecontroller.h" #include "utils/clipboardproxy.hpp" +#include "effects/effectsrepository.hpp" #include // #include @@ -175,7 +176,7 @@ void TimelineWidget::setModel(const std::shared_ptr &model, M connect(rootObject(), SIGNAL(processingDrag(bool)), pCore->window(), SIGNAL(enableUndo(bool))); connect(m_proxy, &TimelineController::seeked, proxy, &MonitorProxy::setPosition); rootObject()->setProperty("dar", pCore->getCurrentDar()); - connect(rootObject(), SIGNAL(showClipMenu()), this, SLOT(showClipMenu())); + connect(rootObject(), SIGNAL(showClipMenu(int)), this, SLOT(showClipMenu(int))); connect(rootObject(), SIGNAL(showCompositionMenu()), this, SLOT(showCompositionMenu())); connect(rootObject(), SIGNAL(showTimelineMenu()), this, SLOT(showTimelineMenu())); connect(rootObject(), SIGNAL(showRulerMenu()), this, SLOT(showRulerMenu())); @@ -193,8 +194,24 @@ void TimelineWidget::mousePressEvent(QMouseEvent *event) QQuickWidget::mousePressEvent(event); } -void TimelineWidget::showClipMenu() +void TimelineWidget::showClipMenu(int cid) { + // Hide not applicable effects + QList effects = m_favEffects->actions(); + int tid = model()->getClipTrackId(cid); + bool isAudioTrack = false; + if (tid > -1) { + isAudioTrack = model()->isAudioTrack(tid); + } + m_favCompositions->setEnabled(!isAudioTrack); + for (auto ac : effects) { + const QString &id = ac->data().toString(); + if (EffectsRepository::get()->isAudioEffect(id) != isAudioTrack) { + ac->setVisible(false); + } else { + ac->setVisible(true); + } + } m_timelineClipMenu->popup(m_clickPos); } diff --git a/src/timeline2/view/timelinewidget.h b/src/timeline2/view/timelinewidget.h index 13444b7438f335cba85071d096c9da352d8f5912..f835bd507b627a8162d917f0d26e52ca01951522 100644 --- a/src/timeline2/view/timelinewidget.h +++ b/src/timeline2/view/timelinewidget.h @@ -72,7 +72,7 @@ public slots: private slots: void slotUngrabHack(); - void showClipMenu(); + void showClipMenu(int cid); void showCompositionMenu(); void showTimelineMenu(); void showRulerMenu();