75 const double max_dbl = std::numeric_limits<double>::max();
77 VuoPoint3d suggestedMin =
VuoPoint3d_make(-max_dbl, -max_dbl, -max_dbl);
81 bool hasMinMax =
true;
82 bool tabCycleForward =
true;
87 json_object *forwardTabTraversal = NULL;
88 if (json_object_object_get_ex(details,
"forwardTabTraversal", &forwardTabTraversal))
89 tabCycleForward = json_object_get_boolean(forwardTabTraversal);
92 json_object *suggestedMinValue = NULL;
93 if (json_object_object_get_ex(details,
"suggestedMin", &suggestedMinValue))
99 json_object *suggestedMaxValue = NULL;
100 if (json_object_object_get_ex(details,
"suggestedMax", &suggestedMaxValue))
108 (suggestedMax.y - suggestedMin.y)/10.,
109 (suggestedMax.z - suggestedMin.z)/10.);
110 json_object *suggestedStepValue = NULL;
111 if (json_object_object_get_ex(details,
"suggestedStep", &suggestedStepValue))
115 suggestedMinForCoord[coord_x] = suggestedMin.x;
116 suggestedMinForCoord[coord_y] = suggestedMin.y;
117 suggestedMinForCoord[coord_z] = suggestedMin.z;
119 suggestedMaxForCoord[coord_x] = suggestedMax.x;
120 suggestedMaxForCoord[coord_y] = suggestedMax.y;
121 suggestedMaxForCoord[coord_z] = suggestedMax.z;
123 suggestedStepForCoord[coord_x] = suggestedStep.x;
124 suggestedStepForCoord[coord_y] = suggestedStep.y;
125 suggestedStepForCoord[coord_z] = suggestedStep.z;
127 spinboxForCoord[coord_x] = initSpinBox(coord_x, dialog, current.x);
128 spinboxForCoord[coord_y] = initSpinBox(coord_y, dialog, current.y);
129 spinboxForCoord[coord_z] = initSpinBox(coord_z, dialog, current.z);
131 connect(spinboxForCoord[coord_x],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorPoint3d::onSpinboxUpdate);
132 connect(spinboxForCoord[coord_y],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorPoint3d::onSpinboxUpdate);
133 connect(spinboxForCoord[coord_z],
static_cast<void (QDoubleSpinBox::*)(
const QString &)
>(&QDoubleSpinBox::valueChanged),
this, &VuoInputEditorPoint3d::onSpinboxUpdate);
137 sliderForCoord[coord_x] = initSlider(coord_x, dialog, current.x);
138 sliderForCoord[coord_y] = initSlider(coord_y, dialog, current.y);
139 sliderForCoord[coord_z] = initSlider(coord_z, dialog, current.z);
141 connect(sliderForCoord[coord_x], &QSlider::valueChanged,
this, &VuoInputEditorPoint3d::onSliderUpdate);
142 connect(sliderForCoord[coord_y], &QSlider::valueChanged,
this, &VuoInputEditorPoint3d::onSliderUpdate);
143 connect(sliderForCoord[coord_z], &QSlider::valueChanged,
this, &VuoInputEditorPoint3d::onSliderUpdate);
147 QGridLayout* layout =
new QGridLayout;
148 dialog.setLayout(layout);
153 layout->setContentsMargins(4, 4, 16, 4);
154 layout->setSpacing(4);
158 layout->addWidget(
makeLabel(
"X"), row, 0, Qt::AlignHCenter);
159 layout->addWidget(spinboxForCoord[coord_x], row++, 1);
160 if(hasMinMax) layout->addWidget(sliderForCoord[coord_x], row++, 1);
162 layout->addWidget(
makeLabel(
"Y"), row, 0, Qt::AlignHCenter);
163 layout->addWidget(spinboxForCoord[coord_y], row++, 1);
164 if(hasMinMax) layout->addWidget(sliderForCoord[coord_y], row++, 1);
166 layout->addWidget(
makeLabel(
"Z"), row, 0, Qt::AlignHCenter);
167 layout->addWidget(spinboxForCoord[coord_z], row++, 1);
168 if(hasMinMax) layout->addWidget(sliderForCoord[coord_z], row++, 1);
171 dialog.setMaximumWidth(1);
172 dialog.setMaximumHeight(1);
183 (tabCycleForward ? spinboxForCoord[coord_x] : spinboxForCoord[coord_z])->setFocus();
184 (tabCycleForward ? spinboxForCoord[coord_x] : spinboxForCoord[coord_z])->selectAll();