98 bool tabCycleForward =
true;
104 setCoordMap(&suggestedMinForCoord, default_min);
105 setCoordMap(&suggestedMaxForCoord, default_max);
106 setCoordMap(&suggestedStepForCoord, default_step);
111 json_object *forwardTabTraversal = NULL;
113 if (json_object_object_get_ex(details,
"forwardTabTraversal", &forwardTabTraversal))
114 tabCycleForward = json_object_get_boolean(forwardTabTraversal);
117 json_object *suggestedMinValue = NULL;
118 if (json_object_object_get_ex(details,
"suggestedMin", &suggestedMinValue))
121 setCoordMap(&suggestedMinForCoord, minTransform);
125 json_object *suggestedMaxValue = NULL;
126 if (json_object_object_get_ex(details,
"suggestedMax", &suggestedMaxValue))
129 setCoordMap(&suggestedMaxForCoord, maxTransform);
133 json_object *suggestedStepValue = NULL;
134 if (json_object_object_get_ex(details,
"suggestedStep", &suggestedStepValue))
137 setCoordMap(&suggestedStepForCoord, stepTransform);
142 spinboxForCoord[xTranslation] = initSpinBox(xTranslation, dialog, currentTransform.translation.x);
143 sliderForCoord[xTranslation] = initSlider(xTranslation, dialog, currentTransform.translation.x);
144 connect(sliderForCoord[xTranslation], &QSlider::valueChanged,
this, &VuoInputEditorTransform2d::onSliderUpdate);
145 connect(spinboxForCoord[xTranslation],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform2d::onSpinboxUpdate);
148 spinboxForCoord[yTranslation] = initSpinBox(yTranslation, dialog, currentTransform.translation.y);
149 sliderForCoord[yTranslation] = initSlider(yTranslation, dialog, currentTransform.translation.y);
150 connect(sliderForCoord[yTranslation], &QSlider::valueChanged,
this, &VuoInputEditorTransform2d::onSliderUpdate);
151 connect(spinboxForCoord[yTranslation],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform2d::onSpinboxUpdate);
154 spinboxForCoord[rotation] = initSpinBox(rotation, dialog, currentTransform.
rotation *
RAD2DEG);
155 sliderForCoord[rotation] = initSlider(rotation, dialog, currentTransform.
rotation *
RAD2DEG);
156 connect(sliderForCoord[rotation], &QSlider::valueChanged,
this, &VuoInputEditorTransform2d::onSliderUpdate);
157 connect(spinboxForCoord[rotation],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform2d::onSpinboxUpdate);
160 spinboxForCoord[xScale] = initSpinBox(xScale, dialog, currentTransform.scale.x);
161 sliderForCoord[xScale] = initSlider(xScale, dialog, currentTransform.scale.x);
162 connect(sliderForCoord[xScale], &QSlider::valueChanged,
this, &VuoInputEditorTransform2d::onSliderUpdate);
163 connect(spinboxForCoord[xScale],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform2d::onSpinboxUpdate);
166 spinboxForCoord[yScale] = initSpinBox(yScale, dialog, currentTransform.scale.y);
167 sliderForCoord[yScale] = initSlider(yScale, dialog, currentTransform.scale.y);
168 connect(sliderForCoord[yScale], &QSlider::valueChanged,
this, &VuoInputEditorTransform2d::onSliderUpdate);
169 connect(spinboxForCoord[yScale],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorTransform2d::onSpinboxUpdate);
172 QGridLayout* layout =
new QGridLayout;
173 dialog.setLayout(layout);
178 layout->setContentsMargins(4, 4, 16, 4);
179 layout->setSpacing(8);
181 unsigned int row = 0;
183 layout->addWidget(
makeLabel(
"X"), row, 1, Qt::AlignHCenter);
184 layout->addWidget(
makeLabel(
"Y"), row, 2, Qt::AlignHCenter);
188 layout->addWidget(
makeLabel(
"Translation"), row, 0);
189 layout->addWidget( spinboxForCoord[xTranslation], row, 1);
190 layout->addWidget( spinboxForCoord[yTranslation], row, 2);
194 layout->addWidget( sliderForCoord[xTranslation], row, 1);
195 layout->addWidget( sliderForCoord[yTranslation], row, 2);
199 layout->addWidget(
makeLabel(
"Rotation"), row, 0);
201 QHBoxLayout* rotation_layout =
new QHBoxLayout;
202 rotation_layout->addStretch(0);
203 QVBoxLayout* rotation_vertical =
new QVBoxLayout();
204 rotation_vertical->addWidget( spinboxForCoord[rotation] );
205 rotation_vertical->addWidget( sliderForCoord[rotation] );
206 rotation_layout->addLayout(rotation_vertical);
207 rotation_layout->addStretch(0);
209 layout->addLayout(rotation_layout, row, 1, 2, 2);
213 layout->addWidget(
makeLabel(
""), row, 0);
217 layout->addWidget(
makeLabel(
"Scale"), row, 0);
218 layout->addWidget( spinboxForCoord[xScale], row, 1);
219 layout->addWidget( spinboxForCoord[yScale], row, 2);
223 layout->addWidget( sliderForCoord[xScale], row, 1);
224 layout->addWidget( sliderForCoord[yScale], row, 2);
229 dialog.setMaximumWidth(1);
230 dialog.setMaximumHeight(1);
241 (tabCycleForward ? spinboxForCoord[xTranslation] : spinboxForCoord[yScale])->setFocus();
242 (tabCycleForward ? spinboxForCoord[xTranslation] : spinboxForCoord[yScale])->selectAll();