File indexing completed on 2024-04-21 04:51:04
0001 /* 0002 SPDX-FileCopyrightText: 2019 Jean-Baptiste Mardelle 0003 SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 */ 0005 0006 #pragma once 0007 0008 #include "definitions.h" 0009 #include <memory> 0010 #include <unordered_map> 0011 0012 #include <QSlider> 0013 #include <QWidget> 0014 0015 namespace Mlt { 0016 class Tractor; 0017 } 0018 0019 class MixerWidget; 0020 class QHBoxLayout; 0021 class TimelineItemModel; 0022 class QScrollArea; 0023 0024 /** MySlider class is only here to get the slider handle size used when painting the audio level scale */ 0025 class MySlider : public QSlider 0026 { 0027 public: 0028 explicit MySlider(QWidget *parent = nullptr); 0029 int getHandleHeight(); 0030 }; 0031 0032 class MixerManager : public QWidget 0033 { 0034 Q_OBJECT 0035 0036 public: 0037 MixerManager(QWidget *parent); 0038 /** @brief Shows the parameters of the given transition model */ 0039 void registerTrack(int tid, Mlt::Tractor *service, const QString &trackTag, const QString &trackName); 0040 void deregisterTrack(int tid); 0041 void setModel(std::shared_ptr<TimelineItemModel> model); 0042 void cleanup(); 0043 /** @brief Connect the mixer widgets to the correspondent filters */ 0044 void connectMixer(bool doConnect); 0045 void collapseMixers(); 0046 /** @brief Pause/unpause audio monitoring */ 0047 void pauseMonitoring(bool pause); 0048 /** @brief Release the timeline model ownership */ 0049 void unsetModel(); 0050 /** @brief Some features rely on a specific version of MLT's audiolevel filter, so check it */ 0051 void checkAudioLevelVersion(); 0052 /** @brief Enable/disable audio monitoring on a track */ 0053 void monitorAudio(int tid, bool monitor); 0054 /** @brief Track currently monitored that will be used for recording */ 0055 int recordTrack() const; 0056 /** @brief Return true if we have MLT's audiolevel filter version 2 or above (fixes reading track audio level) */ 0057 bool audioLevelV2() const; 0058 0059 public Q_SLOTS: 0060 void recordStateChanged(int tid, bool recording); 0061 0062 private Q_SLOTS: 0063 void resetSizePolicy(); 0064 0065 Q_SIGNALS: 0066 void updateLevels(int); 0067 void purgeCache(); 0068 void clearMixers(); 0069 void updateRecVolume(); 0070 void showEffectStack(int tid); 0071 0072 protected: 0073 std::unordered_map<int, std::shared_ptr<MixerWidget>> m_mixers; 0074 std::shared_ptr<MixerWidget> m_masterMixer; 0075 QSize sizeHint() const override; 0076 0077 private: 0078 std::shared_ptr<Mlt::Tractor> m_masterService; 0079 std::shared_ptr<TimelineItemModel> m_model; 0080 QHBoxLayout *m_box; 0081 QHBoxLayout *m_masterBox; 0082 QHBoxLayout *m_channelsLayout; 0083 QScrollArea *m_channelsBox; 0084 bool m_visibleMixerManager; 0085 int m_expandedWidth; 0086 QVector<int> m_soloMuted; 0087 int m_recommendedWidth; 0088 int m_monitorTrack; 0089 bool m_filterIsV2; 0090 int m_sliderHandle; 0091 };