Przeglądaj źródła

UI: Add optional config button to volume controls

jp9000 10 lat temu
rodzic
commit
3c93345179
2 zmienionych plików z 38 dodań i 3 usunięć
  1. 29 2
      obs/volume-control.cpp
  2. 9 1
      obs/volume-control.hpp

+ 29 - 2
obs/volume-control.cpp

@@ -5,6 +5,8 @@
 #include <util/platform.h>
 #include <QHBoxLayout>
 #include <QVBoxLayout>
+#include <QPushButton>
+#include <QVariant>
 #include <QSlider>
 #include <QLabel>
 #include <QPainter>
@@ -99,7 +101,12 @@ void VolControl::SetName(const QString &newName)
 	nameLabel->setText(newName);
 }
 
-VolControl::VolControl(OBSSource source_)
+void VolControl::EmitConfigClicked()
+{
+	emit ConfigClicked();
+}
+
+VolControl::VolControl(OBSSource source_, bool showConfig)
 	: source        (source_),
 	  levelTotal    (0.0f),
 	  levelCount    (0.0f),
@@ -109,6 +116,7 @@ VolControl::VolControl(OBSSource source_)
 	QHBoxLayout *volLayout  = new QHBoxLayout();
 	QVBoxLayout *mainLayout = new QVBoxLayout();
 	QHBoxLayout *textLayout = new QHBoxLayout();
+	QHBoxLayout *botLayout  = new QHBoxLayout();
 
 	nameLabel = new QLabel();
 	volLabel  = new QLabel();
@@ -139,11 +147,30 @@ VolControl::VolControl(OBSSource source_)
 	volLayout->addWidget(mute);
 	volLayout->setSpacing(5);
 
+	botLayout->setContentsMargins(0, 0, 0, 0);
+	botLayout->setSpacing(0);
+	botLayout->addLayout(volLayout);
+
+	if (showConfig) {
+		config = new QPushButton(this);
+		config->setProperty("themeID", "configIconSmall");
+		config->setFlat(true);
+		config->setSizePolicy(QSizePolicy::Maximum,
+				QSizePolicy::Maximum);
+		config->setMaximumSize(22, 22);
+		config->setAutoDefault(false);
+
+		connect(config, &QAbstractButton::clicked,
+				this, &VolControl::EmitConfigClicked);
+
+		botLayout->addWidget(config);
+	}
+
 	mainLayout->setContentsMargins(4, 4, 4, 4);
 	mainLayout->setSpacing(2);
 	mainLayout->addItem(textLayout);
 	mainLayout->addWidget(volMeter);
-	mainLayout->addItem(volLayout);
+	mainLayout->addItem(botLayout);
 
 	setLayout(mainLayout);
 

+ 9 - 1
obs/volume-control.hpp

@@ -3,6 +3,8 @@
 #include <obs.hpp>
 #include <QWidget>
 
+class QPushButton;
+
 class VolumeMeter : public QWidget
 {
 	Q_OBJECT
@@ -48,6 +50,7 @@ private:
 	VolumeMeter     *volMeter;
 	QSlider         *slider;
 	MuteCheckBox    *mute;
+	QPushButton     *config = nullptr;
 	float           levelTotal;
 	float           levelCount;
 	obs_fader_t     *obs_fader;
@@ -57,6 +60,8 @@ private:
 	static void OBSVolumeLevel(void *data, calldata_t *calldata);
 	static void OBSVolumeMuted(void *data, calldata_t *calldata);
 
+	void EmitConfigClicked();
+
 private slots:
 	void VolumeChanged();
 	void VolumeMuted(bool muted);
@@ -66,8 +71,11 @@ private slots:
 	void SliderChanged(int vol);
 	void updateText();
 
+signals:
+	void ConfigClicked();
+
 public:
-	VolControl(OBSSource source);
+	VolControl(OBSSource source, bool showConfig = false);
 	~VolControl();
 
 	inline obs_source_t *GetSource() const {return source;}