diff --git a/obs/properties-view.cpp b/obs/properties-view.cpp index 5c9fa8ba4..172684fee 100644 --- a/obs/properties-view.cpp +++ b/obs/properties-view.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -13,6 +14,7 @@ #include #include #include +#include "double-slider.hpp" #include "qt-wrappers.hpp" #include "properties-view.hpp" #include "obs-app.hpp" @@ -226,32 +228,92 @@ void OBSPropertiesView::AddPath(obs_property_t *prop, QFormLayout *layout, layout->addRow(*label, subLayout); } -QWidget *OBSPropertiesView::AddInt(obs_property_t *prop) +void OBSPropertiesView::AddInt(obs_property_t *prop, QFormLayout *layout, + QLabel **label) { + obs_number_type type = obs_property_int_type(prop); + QLayout *subLayout = new QHBoxLayout(); + const char *name = obs_property_name(prop); int val = (int)obs_data_get_int(settings, name); QSpinBox *spin = new QSpinBox(); - spin->setMinimum(obs_property_int_min(prop)); - spin->setMaximum(obs_property_int_max(prop)); - spin->setSingleStep(obs_property_int_step(prop)); + int minVal = obs_property_int_min(prop); + int maxVal = obs_property_int_max(prop); + int stepVal = obs_property_int_step(prop); + + spin->setMinimum(minVal); + spin->setMaximum(maxVal); + spin->setSingleStep(stepVal); spin->setValue(val); - return NewWidget(prop, spin, SIGNAL(valueChanged(int))); + WidgetInfo *info = new WidgetInfo(this, prop, spin); + children.push_back(std::move(unique_ptr(info))); + + if (type == OBS_NUMBER_SLIDER) { + QSlider *slider = new QSlider(); + slider->setMinimum(minVal); + slider->setMaximum(maxVal); + slider->setPageStep(stepVal); + slider->setValue(val); + slider->setOrientation(Qt::Horizontal); + subLayout->addWidget(slider); + + connect(slider, SIGNAL(valueChanged(int)), + spin, SLOT(setValue(int))); + connect(spin, SIGNAL(valueChanged(int)), + slider, SLOT(setValue(int))); + } + + connect(spin, SIGNAL(valueChanged(int)), info, SLOT(ControlChanged())); + + subLayout->addWidget(spin); + + *label = new QLabel(QT_UTF8(obs_property_description(prop))); + layout->addRow(*label, subLayout); } -QWidget *OBSPropertiesView::AddFloat(obs_property_t *prop) +void OBSPropertiesView::AddFloat(obs_property_t *prop, QFormLayout *layout, + QLabel **label) { + obs_number_type type = obs_property_float_type(prop); + QLayout *subLayout = new QHBoxLayout(); + const char *name = obs_property_name(prop); double val = obs_data_get_double(settings, name); QDoubleSpinBox *spin = new QDoubleSpinBox(); - spin->setMinimum(obs_property_float_min(prop)); - spin->setMaximum(obs_property_float_max(prop)); - spin->setSingleStep(obs_property_float_step(prop)); + double minVal = obs_property_float_min(prop); + double maxVal = obs_property_float_max(prop); + double stepVal = obs_property_float_step(prop); + + spin->setMinimum(minVal); + spin->setMaximum(maxVal); + spin->setSingleStep(stepVal); spin->setValue(val); - return NewWidget(prop, spin, SIGNAL(valueChanged(double))); + WidgetInfo *info = new WidgetInfo(this, prop, spin); + children.push_back(std::move(unique_ptr(info))); + + if (type == OBS_NUMBER_SLIDER) { + DoubleSlider *slider = new DoubleSlider(); + slider->setDoubleConstraints(minVal, maxVal, stepVal, val); + slider->setOrientation(Qt::Horizontal); + subLayout->addWidget(slider); + + connect(slider, SIGNAL(doubleValChanged(double)), + spin, SLOT(setValue(double))); + connect(spin, SIGNAL(valueChanged(double)), + slider, SLOT(setDoubleVal(double))); + } + + connect(spin, SIGNAL(valueChanged(double)), info, + SLOT(ControlChanged())); + + subLayout->addWidget(spin); + + *label = new QLabel(QT_UTF8(obs_property_description(prop))); + layout->addRow(*label, subLayout); } static void AddComboItem(QComboBox *combo, obs_property_t *prop, @@ -503,10 +565,10 @@ void OBSPropertiesView::AddProperty(obs_property_t *property, widget = AddCheckbox(property); break; case OBS_PROPERTY_INT: - widget = AddInt(property); + AddInt(property, layout, &label); break; case OBS_PROPERTY_FLOAT: - widget = AddFloat(property); + AddFloat(property, layout, &label); break; case OBS_PROPERTY_TEXT: widget = AddText(property); diff --git a/obs/properties-view.hpp b/obs/properties-view.hpp index 66a51a03a..2e59c74d1 100644 --- a/obs/properties-view.hpp +++ b/obs/properties-view.hpp @@ -74,8 +74,9 @@ private: QWidget *AddCheckbox(obs_property_t *prop); QWidget *AddText(obs_property_t *prop); void AddPath(obs_property_t *prop, QFormLayout *layout, QLabel **label); - QWidget *AddInt(obs_property_t *prop); - QWidget *AddFloat(obs_property_t *prop); + void AddInt(obs_property_t *prop, QFormLayout *layout, QLabel **label); + void AddFloat(obs_property_t *prop, QFormLayout *layout, + QLabel**label); QWidget *AddList(obs_property_t *prop, bool &warning); QWidget *AddButton(obs_property_t *prop); void AddColor(obs_property_t *prop, QFormLayout *layout, QLabel *&label);