Browse Source

UI: Add floating point slider control

jp9000 10 years ago
parent
commit
17adf8f35e
3 changed files with 55 additions and 0 deletions
  1. 2 0
      obs/CMakeLists.txt
  2. 33 0
      obs/double-slider.cpp
  3. 20 0
      obs/double-slider.hpp

+ 2 - 0
obs/CMakeLists.txt

@@ -104,6 +104,7 @@ set(obs_SOURCES
 	window-log-reply.cpp
 	window-log-reply.cpp
 	window-remux.cpp
 	window-remux.cpp
 	properties-view.cpp
 	properties-view.cpp
+	double-slider.cpp
 	volume-control.cpp
 	volume-control.cpp
 	adv-audio-control.cpp
 	adv-audio-control.cpp
 	vertical-scroll-area.cpp
 	vertical-scroll-area.cpp
@@ -131,6 +132,7 @@ set(obs_HEADERS
 	window-remux.hpp
 	window-remux.hpp
 	properties-view.hpp
 	properties-view.hpp
 	display-helpers.hpp
 	display-helpers.hpp
+	double-slider.hpp
 	volume-control.hpp
 	volume-control.hpp
 	adv-audio-control.hpp
 	adv-audio-control.hpp
 	vertical-scroll-area.hpp
 	vertical-scroll-area.hpp

+ 33 - 0
obs/double-slider.cpp

@@ -0,0 +1,33 @@
+#include "double-slider.hpp"
+
+DoubleSlider::DoubleSlider(QWidget *parent) : QSlider(parent)
+{
+	connect(this, SIGNAL(valueChanged(int)),
+			this, SLOT(intValChanged(int)));
+}
+
+void DoubleSlider::setDoubleConstraints(double newMin, double newMax,
+		double newStep, double val)
+{
+	minVal = newMin;
+	maxVal = newMax;
+	minStep = newStep;
+
+	double total = maxVal - minVal;
+	int intMax = int(total / minStep);
+
+	setMinimum(0);
+	setMaximum(intMax);
+	setSingleStep(1);
+	setDoubleVal(val);
+}
+
+void DoubleSlider::intValChanged(int val)
+{
+	emit doubleValChanged(double(val) * minStep + minVal);
+}
+
+void DoubleSlider::setDoubleVal(double val)
+{
+	setValue(int((val - minVal) / minStep));
+}

+ 20 - 0
obs/double-slider.hpp

@@ -0,0 +1,20 @@
+#include <QSlider>
+
+class DoubleSlider : public QSlider {
+	Q_OBJECT
+
+	double minVal, maxVal, minStep;
+
+public:
+	DoubleSlider(QWidget *parent = nullptr);
+
+	void setDoubleConstraints(double newMin, double newMax,
+			double newStep, double val);
+
+signals:
+	void doubleValChanged(double val);
+
+public slots:
+	void intValChanged(int val);
+	void setDoubleVal(double val);
+};