97 bool tabCycleForward =
true;
103 setCoordMap(&suggestedMinForCoord, default_min);
104 setCoordMap(&suggestedMaxForCoord, default_max);
105 setCoordMap(&suggestedStepForCoord, default_step);
110 json_object *forwardTabTraversal = NULL;
112 if (json_object_object_get_ex(details,
"forwardTabTraversal", &forwardTabTraversal))
113 tabCycleForward = json_object_get_boolean(forwardTabTraversal);
116 json_object *suggestedMinValue = NULL;
117 if (json_object_object_get_ex(details,
"suggestedMin", &suggestedMinValue))
120 setCoordMap(&suggestedMinForCoord, minTransform);
124 json_object *suggestedMaxValue = NULL;
125 if (json_object_object_get_ex(details,
"suggestedMax", &suggestedMaxValue))
128 setCoordMap(&suggestedMaxForCoord, maxTransform);
132 json_object *suggestedStepValue = NULL;
133 if (json_object_object_get_ex(details,
"suggestedStep", &suggestedStepValue))
136 setCoordMap(&suggestedStepForCoord, stepTransform);
141 spinboxForCoord[xTranslation] = initSpinBox(xTranslation, dialog, currentTransform.translation.x);
142 sliderForCoord[xTranslation] = initSlider(xTranslation, dialog, currentTransform.translation.x);
143 connect(sliderForCoord[xTranslation], &QSlider::valueChanged,
this, &VuoInputEditorTransform::onSliderUpdate);
144 connect(spinboxForCoord[xTranslation],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform::onSpinboxUpdate);
147 spinboxForCoord[yTranslation] = initSpinBox(yTranslation, dialog, currentTransform.translation.y);
148 sliderForCoord[yTranslation] = initSlider(yTranslation, dialog, currentTransform.translation.y);
149 connect(sliderForCoord[yTranslation], &QSlider::valueChanged,
this, &VuoInputEditorTransform::onSliderUpdate);
150 connect(spinboxForCoord[yTranslation],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform::onSpinboxUpdate);
153 spinboxForCoord[zTranslation] = initSpinBox(zTranslation, dialog, currentTransform.translation.z);
154 sliderForCoord[zTranslation] = initSlider(zTranslation, dialog, currentTransform.translation.z);
155 connect(sliderForCoord[zTranslation], &QSlider::valueChanged,
this, &VuoInputEditorTransform::onSliderUpdate);
156 connect(spinboxForCoord[zTranslation],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform::onSpinboxUpdate);
160 spinboxForCoord[xRotation] = initSpinBox(xRotation, dialog, rotation.x *
RAD2DEG);
161 sliderForCoord[xRotation] = initSlider(xRotation, dialog, rotation.x *
RAD2DEG);
162 connect(sliderForCoord[xRotation], &QSlider::valueChanged,
this, &VuoInputEditorTransform::onSliderUpdate);
163 connect(spinboxForCoord[xRotation],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform::onSpinboxUpdate);
166 spinboxForCoord[yRotation] = initSpinBox(yRotation, dialog, rotation.y *
RAD2DEG);
167 sliderForCoord[yRotation] = initSlider(yRotation, dialog, rotation.y *
RAD2DEG);
168 connect(sliderForCoord[yRotation], &QSlider::valueChanged,
this, &VuoInputEditorTransform::onSliderUpdate);
169 connect(spinboxForCoord[yRotation],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform::onSpinboxUpdate);
172 spinboxForCoord[zRotation] = initSpinBox(zRotation, dialog, rotation.z *
RAD2DEG);
173 sliderForCoord[zRotation] = initSlider(zRotation, dialog, rotation.z *
RAD2DEG);
174 connect(sliderForCoord[zRotation], &QSlider::valueChanged,
this, &VuoInputEditorTransform::onSliderUpdate);
175 connect(spinboxForCoord[zRotation],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform::onSpinboxUpdate);
178 spinboxForCoord[xScale] = initSpinBox(xScale, dialog, currentTransform.scale.x);
179 sliderForCoord[xScale] = initSlider(xScale, dialog, currentTransform.scale.x);
180 connect(sliderForCoord[xScale], &QSlider::valueChanged,
this, &VuoInputEditorTransform::onSliderUpdate);
181 connect(spinboxForCoord[xScale],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform::onSpinboxUpdate);
184 spinboxForCoord[yScale] = initSpinBox(yScale, dialog, currentTransform.scale.y);
185 sliderForCoord[yScale] = initSlider(yScale, dialog, currentTransform.scale.y);
186 connect(sliderForCoord[yScale], &QSlider::valueChanged,
this, &VuoInputEditorTransform::onSliderUpdate);
187 connect(spinboxForCoord[yScale],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform::onSpinboxUpdate);
190 spinboxForCoord[zScale] = initSpinBox(zScale, dialog, currentTransform.scale.z);
191 sliderForCoord[zScale] = initSlider(zScale, dialog, currentTransform.scale.z);
192 connect(sliderForCoord[zScale], &QSlider::valueChanged,
this, &VuoInputEditorTransform::onSliderUpdate);
193 connect(spinboxForCoord[zScale],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform::onSpinboxUpdate);
196 QGridLayout* layout =
new QGridLayout;
197 dialog.setLayout(layout);
202 layout->setContentsMargins(4, 4, 16, 4);
203 layout->setSpacing(8);
205 unsigned int row = 0;
207 layout->addWidget(
makeLabel(
"X"), row, 1, Qt::AlignHCenter);
208 layout->addWidget(
makeLabel(
"Y"), row, 2, Qt::AlignHCenter);
209 layout->addWidget(
makeLabel(
"Z"), row, 3, Qt::AlignHCenter);
213 layout->addWidget(
makeLabel(
"Translation"), row, 0);
214 layout->addWidget( spinboxForCoord[xTranslation], row, 1);
215 layout->addWidget( spinboxForCoord[yTranslation], row, 2);
216 layout->addWidget( spinboxForCoord[zTranslation], row, 3);
220 layout->addWidget( sliderForCoord[xTranslation], row, 1);
221 layout->addWidget( sliderForCoord[yTranslation], row, 2);
222 layout->addWidget( sliderForCoord[zTranslation], row, 3);
226 layout->addWidget(
makeLabel(
"Rotation"), row, 0);
227 layout->addWidget( spinboxForCoord[xRotation], row, 1);
228 layout->addWidget( spinboxForCoord[yRotation], row, 2);
229 layout->addWidget( spinboxForCoord[zRotation], row, 3);
233 layout->addWidget( sliderForCoord[xRotation], row, 1);
234 layout->addWidget( sliderForCoord[yRotation], row, 2);
235 layout->addWidget( sliderForCoord[zRotation], row, 3);
241 layout->addWidget(
makeLabel(
"Scale"), row, 0);
242 layout->addWidget( spinboxForCoord[xScale], row, 1);
243 layout->addWidget( spinboxForCoord[yScale], row, 2);
244 layout->addWidget( spinboxForCoord[zScale], row, 3);
248 layout->addWidget( sliderForCoord[xScale], row, 1);
249 layout->addWidget( sliderForCoord[yScale], row, 2);
250 layout->addWidget( sliderForCoord[zScale], row, 3);
254 dialog.setMaximumWidth(1);
255 dialog.setMaximumHeight(1);
266 (tabCycleForward ? spinboxForCoord[xTranslation] : spinboxForCoord[zScale])->setFocus();
267 (tabCycleForward ? spinboxForCoord[xTranslation] : spinboxForCoord[zScale])->selectAll();