| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | 
							- #pragma once
 
- #include <obs.hpp>
 
- #include <QWidget>
 
- #include <QSharedPointer>
 
- #include <QTimer>
 
- #include <QMutex>
 
- #include <QList>
 
- class QPushButton;
 
- class VolumeMeterTimer;
 
- class VolumeMeter : public QWidget
 
- {
 
- 	Q_OBJECT
 
- 	Q_PROPERTY(QColor bkColor READ getBkColor WRITE setBkColor DESIGNABLE true)
 
- 	Q_PROPERTY(QColor magColor READ getMagColor WRITE setMagColor DESIGNABLE true)
 
- 	Q_PROPERTY(QColor peakColor READ getPeakColor WRITE setPeakColor DESIGNABLE true)
 
- 	Q_PROPERTY(QColor peakHoldColor READ getPeakHoldColor WRITE setPeakHoldColor DESIGNABLE true)
 
- private:
 
- 	static QWeakPointer<VolumeMeterTimer> updateTimer;
 
- 	QSharedPointer<VolumeMeterTimer> updateTimerRef;
 
- 	float curMag = 0.0f, curPeak = 0.0f, curPeakHold = 0.0f;
 
- 	inline void calcLevels();
 
- 	QMutex dataMutex;
 
- 	float mag = 0.0f, peak = 0.0f, peakHold = 0.0f;
 
- 	float multiple = 0.0f;
 
- 	uint64_t lastUpdateTime = 0;
 
- 	QColor bkColor, magColor, peakColor, peakHoldColor;
 
- public:
 
- 	explicit VolumeMeter(QWidget *parent = 0);
 
- 	~VolumeMeter();
 
- 	void setLevels(float nmag, float npeak, float npeakHold);
 
- 	QColor getBkColor() const;
 
- 	void setBkColor(QColor c);
 
- 	QColor getMagColor() const;
 
- 	void setMagColor(QColor c);
 
- 	QColor getPeakColor() const;
 
- 	void setPeakColor(QColor c);
 
- 	QColor getPeakHoldColor() const;
 
- 	void setPeakHoldColor(QColor c);
 
- protected:
 
- 	void paintEvent(QPaintEvent *event);
 
- };
 
- class VolumeMeterTimer : public QTimer {
 
- 	Q_OBJECT
 
- public:
 
- 	inline VolumeMeterTimer() : QTimer() {}
 
- 	void AddVolControl(VolumeMeter *meter);
 
- 	void RemoveVolControl(VolumeMeter *meter);
 
- protected:
 
- 	virtual void timerEvent(QTimerEvent *event) override;
 
- 	QList<VolumeMeter*> volumeMeters;
 
- };
 
- class QLabel;
 
- class QSlider;
 
- class MuteCheckBox;
 
- class VolControl : public QWidget {
 
- 	Q_OBJECT
 
- private:
 
- 	OBSSource source;
 
- 	QLabel          *nameLabel;
 
- 	QLabel          *volLabel;
 
- 	VolumeMeter     *volMeter;
 
- 	QSlider         *slider;
 
- 	MuteCheckBox    *mute;
 
- 	QPushButton     *config = nullptr;
 
- 	float           levelTotal;
 
- 	float           levelCount;
 
- 	obs_fader_t     *obs_fader;
 
- 	obs_volmeter_t  *obs_volmeter;
 
- 	static void OBSVolumeChanged(void *param, float db);
 
- 	static void OBSVolumeLevel(void *data, float level, float mag,
 
- 			float peak, float muted);
 
- 	static void OBSVolumeMuted(void *data, calldata_t *calldata);
 
- 	void EmitConfigClicked();
 
- private slots:
 
- 	void VolumeChanged();
 
- 	void VolumeMuted(bool muted);
 
- 	void VolumeLevel(float mag, float peak, float peakHold, bool muted);
 
- 	void SetMuted(bool checked);
 
- 	void SliderChanged(int vol);
 
- 	void updateText();
 
- signals:
 
- 	void ConfigClicked();
 
- public:
 
- 	VolControl(OBSSource source, bool showConfig = false);
 
- 	~VolControl();
 
- 	inline obs_source_t *GetSource() const {return source;}
 
- 	QString GetName() const;
 
- 	void SetName(const QString &newName);
 
- };
 
 
  |