28 QLabel* label =
new QLabel(text);
29 label->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
36 VuoDoubleSpinBox* VuoInputEditorReal::initSpinBox(QDialog& dialog,
double initialValue)
39 const int decimalPrecision = DBL_MAX_10_EXP + DBL_DIG;
40 spin->setDecimals(decimalPrecision);
41 spin->setFixedWidth(100);
44 spin->setSingleStep(suggestedStep);
45 spin->setValue(initialValue);
52 QSlider* VuoInputEditorReal::initSlider(QDialog& dialog,
double initialValue)
54 double min = suggestedMin;
55 double max = suggestedMax;
56 double step = suggestedStep;
57 double range = max - min;
59 QSlider* slider =
new QSlider(&dialog);
60 slider->setOrientation(Qt::Horizontal);
61 slider->setFocusPolicy(Qt::NoFocus);
62 slider->setMinimum(0);
63 slider->setMaximum(slider->width());
64 slider->setSingleStep( fmax(1,
step * (slider->maximum() - slider->minimum()) / range ) );
77 suggestedMin = -DBL_MAX;
78 suggestedMax = DBL_MAX;
82 automatic = -INFINITY;
84 bool hasMinMax =
true, hasAutoValue =
false;
91 if (json_object_object_get_ex(details,
"default", &suggestedDefaultValue))
96 if (json_object_object_get_ex(details,
"suggestedMin", &suggestedMinValue))
103 if (json_object_object_get_ex(details,
"suggestedMax", &suggestedMaxValue))
110 suggestedStep = (suggestedMax - suggestedMin)/10.;
112 if (json_object_object_get_ex(details,
"suggestedStep", &suggestedStepValue))
116 if(json_object_object_get_ex(details,
"auto", &autoValue))
123 if(json_object_object_get_ex(details,
"autoSupersedesDefault", &autoSupersedesValue))
127 spinbox = initSpinBox(dialog, current);
128 connect(
spinbox,
static_cast<void (QDoubleSpinBox::*)(
double)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorReal::onSpinboxUpdate);
132 slider = initSlider(dialog, current);
133 connect(slider, &QSlider::valueChanged,
this, &VuoInputEditorReal::onSliderUpdate);
137 QGridLayout* layout =
new QGridLayout;
138 dialog.setLayout(layout);
141 layout->setContentsMargins(4, 4, 12, 4);
142 layout->setSpacing(4);
143 if(hasAutoValue) layout->setHorizontalSpacing(8);
149 checkbox =
new QCheckBox(
"Auto");
150 connect(checkbox, &QCheckBox::stateChanged,
this, &VuoInputEditorReal::setIsAuto);
152 checkbox->setChecked(currentIsAuto);
154 previous = defaultValue;
156 layout->addWidget(checkbox, row++, 0);
157 checkbox->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
160 layout->addWidget(
spinbox, row++, 0);
166 QHBoxLayout* sliderLayout =
new QHBoxLayout();
167 sliderLayout->setContentsMargins(-2, 0, 2, 0);
168 sliderLayout->addWidget(slider);
169 layout->addLayout(sliderLayout, row++, 0);
172 dialog.setMaximumWidth(1);
173 dialog.setMaximumHeight(1);
185 void VuoInputEditorReal::setIsAuto(
int state)
187 if(state == Qt::Unchecked)
189 spinbox->setSpecialValueText(
"");
190 spinbox->setMinimum(suggestedMin);
191 spinbox->setMaximum(suggestedMax);
193 if(previous != automatic)
196 current = (suggestedMax + suggestedMin) * .5;
203 spinbox->setSpecialValueText(
"Auto");
204 spinbox->setMinimum(automatic);
205 spinbox->setMaximum(automatic);
209 spinbox->setEnabled(!checkbox->isChecked());
210 if(slider) slider->setEnabled(!checkbox->isChecked());
216 void VuoInputEditorReal::onSliderUpdate(
int sliderValue)
225 disconnect(
spinbox,
static_cast<void (QDoubleSpinBox::*)(
double)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorReal::onSpinboxUpdate);
227 connect(
spinbox,
static_cast<void (QDoubleSpinBox::*)(
double)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorReal::onSpinboxUpdate);
238 void VuoInputEditorReal::onSpinboxUpdate(
double spinboxValue)
240 current = spinboxValue;
251 disconnect(slider, &QSlider::valueChanged,
this, &VuoInputEditorReal::onSliderUpdate);
252 slider->setValue( sliderValue );
253 connect(slider, &QSlider::valueChanged,
this, &VuoInputEditorReal::onSliderUpdate);