33 if (json_object_object_get_ex(originalDetails,
"isDark", &o))
34 isDark = json_object_get_boolean(o);
37 dialog.setFont(getDefaultFont());
42 QPoint topLeftMargin = QPoint(margin.left(),margin.top());
43 foreach (QObject *widget, dialog.children())
44 static_cast<QWidget *
>(widget)->move(
static_cast<QWidget *
>(widget)->pos() + topLeftMargin);
47 dialog.resize(margin.left() + dialog.childrenRect().width() + margin.right(), margin.top() + dialog.childrenRect().height() + margin.bottom());
50 QPoint dialogTopLeft = portLeftCenter - QPoint(dialog.width() - margin.right(), dialog.height()/2.);
51 dialog.move(dialogTopLeft);
56 return (dialog.result() == QDialog::Accepted ?
getAcceptedValue() : originalDetails);
65 const int decimalPrecision = 6;
67 QValidator *validator =
static_cast<QValidator *
>(
new QDoubleValidator(NULL));
77 json_object_object_get_ex(originalDetails,
"suggestedMin", &suggestedMinValue);
80 json_object_object_get_ex(originalDetails,
"suggestedMax", &suggestedMaxValue);
83 json_object_object_get_ex(originalDetails,
"suggestedStep", &suggestedStepValue);
87 const int widgetVerticalSpacing = 10;
88 const int widgetHorizontalSpacing = 8;
90 labelForDetail[suggestedMinX] =
new QLabel(&dialog);
91 labelForDetail[suggestedMinX]->setText(tr(
"X Suggested Min"));
92 labelForDetail[suggestedMinX]->adjustSize();
94 labelForDetail[suggestedMaxX] =
new QLabel(&dialog);
95 labelForDetail[suggestedMaxX]->setText(tr(
"X Suggested Max"));
96 labelForDetail[suggestedMaxX]->adjustSize();
98 labelForDetail[suggestedStepX] =
new QLabel(&dialog);
99 labelForDetail[suggestedStepX]->setText(tr(
"X Suggested Step"));
100 labelForDetail[suggestedStepX]->adjustSize();
102 labelForDetail[suggestedMinY] =
new QLabel(&dialog);
103 labelForDetail[suggestedMinY]->setText(tr(
"Y Suggested Min"));
104 labelForDetail[suggestedMinY]->adjustSize();
106 labelForDetail[suggestedMaxY] =
new QLabel(&dialog);
107 labelForDetail[suggestedMaxY]->setText(tr(
"Y Suggested Max"));
108 labelForDetail[suggestedMaxY]->adjustSize();
110 labelForDetail[suggestedStepY] =
new QLabel(&dialog);
111 labelForDetail[suggestedStepY]->setText(tr(
"Y Suggested Step"));
112 labelForDetail[suggestedStepY]->adjustSize();
114 labelForDetail[suggestedMinZ] =
new QLabel(&dialog);
115 labelForDetail[suggestedMinZ]->setText(tr(
"Z Suggested Min"));
116 labelForDetail[suggestedMinZ]->adjustSize();
118 labelForDetail[suggestedMaxZ] =
new QLabel(&dialog);
119 labelForDetail[suggestedMaxZ]->setText(tr(
"Z Suggested Max"));
120 labelForDetail[suggestedMaxZ]->adjustSize();
122 labelForDetail[suggestedStepZ] =
new QLabel(&dialog);
123 labelForDetail[suggestedStepZ]->setText(tr(
"Z Suggested Step"));
124 labelForDetail[suggestedStepZ]->adjustSize();
126 labelForDetail[suggestedMinW] =
new QLabel(&dialog);
127 labelForDetail[suggestedMinW]->setText(tr(
"W Suggested Min"));
128 labelForDetail[suggestedMinW]->adjustSize();
130 labelForDetail[suggestedMaxW] =
new QLabel(&dialog);
131 labelForDetail[suggestedMaxW]->setText(tr(
"W Suggested Max"));
132 labelForDetail[suggestedMaxW]->adjustSize();
134 labelForDetail[suggestedStepW] =
new QLabel(&dialog);
135 labelForDetail[suggestedStepW]->setText(tr(
"W Suggested Step"));
136 labelForDetail[suggestedStepW]->adjustSize();
138 if (
dynamic_cast<QDoubleValidator *
>(validator))
139 static_cast<QDoubleValidator *
>(validator)->setDecimals(decimalPrecision);
142 lineEditForDetail[suggestedMinX] =
new QLineEdit(&dialog);
143 lineEditForDetail[suggestedMinX]->setValidator(validator);
144 lineEditForDetail[suggestedMaxX] =
new QLineEdit(&dialog);
145 lineEditForDetail[suggestedMaxX]->setValidator(validator);
146 lineEditForDetail[suggestedStepX] =
new QLineEdit(&dialog);
147 lineEditForDetail[suggestedStepX]->setValidator(validator);
150 lineEditForDetail[suggestedMinY] =
new QLineEdit(&dialog);
151 lineEditForDetail[suggestedMinY]->setValidator(validator);
152 lineEditForDetail[suggestedMaxY] =
new QLineEdit(&dialog);
153 lineEditForDetail[suggestedMaxY]->setValidator(validator);
154 lineEditForDetail[suggestedStepY] =
new QLineEdit(&dialog);
155 lineEditForDetail[suggestedStepY]->setValidator(validator);
158 lineEditForDetail[suggestedMinZ] =
new QLineEdit(&dialog);
159 lineEditForDetail[suggestedMinZ]->setValidator(validator);
160 lineEditForDetail[suggestedMaxZ] =
new QLineEdit(&dialog);
161 lineEditForDetail[suggestedMaxZ]->setValidator(validator);
162 lineEditForDetail[suggestedStepZ] =
new QLineEdit(&dialog);
163 lineEditForDetail[suggestedStepZ]->setValidator(validator);
166 lineEditForDetail[suggestedMinW] =
new QLineEdit(&dialog);
167 lineEditForDetail[suggestedMinW]->setValidator(validator);
168 lineEditForDetail[suggestedMaxW] =
new QLineEdit(&dialog);
169 lineEditForDetail[suggestedMaxW]->setValidator(validator);
170 lineEditForDetail[suggestedStepW] =
new QLineEdit(&dialog);
171 lineEditForDetail[suggestedStepW]->setValidator(validator);
217 lineEditForDetail[suggestedMinX]->move(labelForDetail[suggestedMinX]->pos().x()+labelForDetail[suggestedMinX]->width()+2*widgetHorizontalSpacing, lineEditForDetail[suggestedMinX]->pos().y());
218 labelForDetail[suggestedMinX]->show();
220 labelForDetail[suggestedMaxX]->move(0, labelForDetail[suggestedMinX]->pos().y() + labelForDetail[suggestedMinX]->height() + widgetVerticalSpacing);
221 lineEditForDetail[suggestedMaxX]->move(labelForDetail[suggestedMinX]->pos().x()+labelForDetail[suggestedMinX]->width()+2*widgetHorizontalSpacing, labelForDetail[suggestedMinX]->pos().y() + labelForDetail[suggestedMinX]->height() + widgetVerticalSpacing);
222 labelForDetail[suggestedMaxX]->show();
224 labelForDetail[suggestedStepX]->move(0, labelForDetail[suggestedMaxX]->pos().y() + labelForDetail[suggestedMaxX]->height() + widgetVerticalSpacing);
225 lineEditForDetail[suggestedStepX]->move(labelForDetail[suggestedMinX]->pos().x()+labelForDetail[suggestedMinX]->width()+2*widgetHorizontalSpacing, labelForDetail[suggestedMaxX]->pos().y() + labelForDetail[suggestedMaxX]->height() + widgetVerticalSpacing);
226 labelForDetail[suggestedStepX]->show();
229 labelForDetail[suggestedMinY]->move(0, labelForDetail[suggestedStepX]->pos().y() + labelForDetail[suggestedStepX]->height() + widgetVerticalSpacing);
230 lineEditForDetail[suggestedMinY]->move(labelForDetail[suggestedMinX]->pos().x()+labelForDetail[suggestedMinX]->width()+2*widgetHorizontalSpacing, labelForDetail[suggestedStepX]->pos().y() + labelForDetail[suggestedStepX]->height() + widgetVerticalSpacing);
231 labelForDetail[suggestedMinY]->show();
233 labelForDetail[suggestedMaxY]->move(0, labelForDetail[suggestedMinY]->pos().y() + labelForDetail[suggestedMinY]->height() + widgetVerticalSpacing);
234 lineEditForDetail[suggestedMaxY]->move(labelForDetail[suggestedMinX]->pos().x()+labelForDetail[suggestedMinX]->width()+2*widgetHorizontalSpacing, labelForDetail[suggestedMinY]->pos().y() + labelForDetail[suggestedMinY]->height() + widgetVerticalSpacing);
235 labelForDetail[suggestedMaxY]->show();
237 labelForDetail[suggestedStepY]->move(0, labelForDetail[suggestedMaxY]->pos().y() + labelForDetail[suggestedMaxY]->height() + widgetVerticalSpacing);
238 lineEditForDetail[suggestedStepY]->move(labelForDetail[suggestedMinX]->pos().x()+labelForDetail[suggestedMinX]->width()+2*widgetHorizontalSpacing, labelForDetail[suggestedMaxY]->pos().y() + labelForDetail[suggestedMaxY]->height() + widgetVerticalSpacing);
239 labelForDetail[suggestedStepY]->show();
242 labelForDetail[suggestedMinZ]->hide();
243 labelForDetail[suggestedMaxZ]->hide();
244 labelForDetail[suggestedStepZ]->hide();
245 lineEditForDetail[suggestedMinZ]->hide();
246 lineEditForDetail[suggestedMaxZ]->hide();
247 lineEditForDetail[suggestedStepZ]->hide();
249 labelForDetail[suggestedMinW]->hide();
250 labelForDetail[suggestedMaxW]->hide();
251 labelForDetail[suggestedStepW]->hide();
252 lineEditForDetail[suggestedMinW]->hide();
253 lineEditForDetail[suggestedMaxW]->hide();
254 lineEditForDetail[suggestedStepW]->hide();
256 if ((this->type->
getModuleKey() ==
"VuoPoint3d") || (this->type->getModuleKey() ==
"VuoPoint4d"))
259 labelForDetail[suggestedMinZ]->move(0, labelForDetail[suggestedStepY]->pos().y() + labelForDetail[suggestedStepY]->height() + widgetVerticalSpacing);
260 lineEditForDetail[suggestedMinZ]->move(labelForDetail[suggestedMinX]->pos().x()+labelForDetail[suggestedMinX]->width()+2*widgetHorizontalSpacing, labelForDetail[suggestedStepY]->pos().y() + labelForDetail[suggestedStepY]->height() + widgetVerticalSpacing);
261 labelForDetail[suggestedMinZ]->show();
262 lineEditForDetail[suggestedMinZ]->show();
264 labelForDetail[suggestedMaxZ]->move(0, labelForDetail[suggestedMinZ]->pos().y() + labelForDetail[suggestedMinZ]->height() + widgetVerticalSpacing);
265 lineEditForDetail[suggestedMaxZ]->move(labelForDetail[suggestedMinX]->pos().x()+labelForDetail[suggestedMinX]->width()+2*widgetHorizontalSpacing, labelForDetail[suggestedMinZ]->pos().y() + labelForDetail[suggestedMinZ]->height() + widgetVerticalSpacing);
266 labelForDetail[suggestedMaxZ]->show();
267 lineEditForDetail[suggestedMaxZ]->show();
269 labelForDetail[suggestedStepZ]->move(0, labelForDetail[suggestedMaxZ]->pos().y() + labelForDetail[suggestedMaxZ]->height() + widgetVerticalSpacing);
270 lineEditForDetail[suggestedStepZ]->move(labelForDetail[suggestedMinX]->pos().x()+labelForDetail[suggestedMinX]->width()+2*widgetHorizontalSpacing, labelForDetail[suggestedMaxZ]->pos().y() + labelForDetail[suggestedMaxZ]->height() + widgetVerticalSpacing);
271 labelForDetail[suggestedStepZ]->show();
272 lineEditForDetail[suggestedStepZ]->show();
277 labelForDetail[suggestedMinW]->move(0, labelForDetail[suggestedStepZ]->pos().y() + labelForDetail[suggestedStepZ]->height() + widgetVerticalSpacing);
278 lineEditForDetail[suggestedMinW]->move(labelForDetail[suggestedMinX]->pos().x()+labelForDetail[suggestedMinX]->width()+2*widgetHorizontalSpacing, labelForDetail[suggestedStepZ]->pos().y() + labelForDetail[suggestedStepZ]->height() + widgetVerticalSpacing);
279 labelForDetail[suggestedMinW]->show();
280 lineEditForDetail[suggestedMinW]->show();
282 labelForDetail[suggestedMaxW]->move(0, labelForDetail[suggestedMinW]->pos().y() + labelForDetail[suggestedMinW]->height() + widgetVerticalSpacing);
283 lineEditForDetail[suggestedMaxW]->move(labelForDetail[suggestedMinX]->pos().x()+labelForDetail[suggestedMinX]->width()+2*widgetHorizontalSpacing, labelForDetail[suggestedMinW]->pos().y() + labelForDetail[suggestedMinW]->height() + widgetVerticalSpacing);
284 labelForDetail[suggestedMaxW]->show();
285 lineEditForDetail[suggestedMaxW]->show();
287 labelForDetail[suggestedStepW]->move(0, labelForDetail[suggestedMaxW]->pos().y() + labelForDetail[suggestedMaxW]->height() + widgetVerticalSpacing);
288 lineEditForDetail[suggestedStepW]->move(labelForDetail[suggestedMinX]->pos().x()+labelForDetail[suggestedMinX]->width()+2*widgetHorizontalSpacing, labelForDetail[suggestedMaxW]->pos().y() + labelForDetail[suggestedMaxW]->height() + widgetVerticalSpacing);
289 labelForDetail[suggestedStepW]->show();
290 lineEditForDetail[suggestedStepW]->show();
297 lineEditForDetail[suggestedMinX]->setFocus();
298 lineEditForDetail[suggestedMinX]->selectAll();
311 lineEdit->setFocus();
312 lineEdit->selectAll();
314 lineEdit->adjustSize();
323 lineEditForDetail[suggestedMaxX]->text(),
324 lineEditForDetail[suggestedStepX]->text(),
325 lineEditForDetail[suggestedMinY]->text(),
326 lineEditForDetail[suggestedMaxY]->text(),
327 lineEditForDetail[suggestedStepY]->text(),
328 lineEditForDetail[suggestedMinZ]->text(),
329 lineEditForDetail[suggestedMaxZ]->text(),
330 lineEditForDetail[suggestedStepZ]->text(),
331 lineEditForDetail[suggestedMinW]->text(),
332 lineEditForDetail[suggestedMaxW]->text(),
333 lineEditForDetail[suggestedStepW]->text()
342 QString valueAsStringInUserLocale = QLocale::system().toString(value);
344 if (qAbs(value) >= 1000.0)
345 valueAsStringInUserLocale.remove(QLocale::system().groupSeparator());
347 return valueAsStringInUserLocale;
354 const QString &suggestedMaxXValueAsString,
355 const QString &suggestedStepXValueAsString,
356 const QString &suggestedMinYValueAsString,
357 const QString &suggestedMaxYValueAsString,
358 const QString &suggestedStepYValueAsString,
359 const QString &suggestedMinZValueAsString,
360 const QString &suggestedMaxZValueAsString,
361 const QString &suggestedStepZValueAsString,
362 const QString &suggestedMinWValueAsString,
363 const QString &suggestedMaxWValueAsString,
364 const QString &suggestedStepWValueAsString
368 QString suggestedMinXValueJSON = formatDoubleForJSON(suggestedMinXValueAsString);
369 QString suggestedMinYValueJSON = formatDoubleForJSON(suggestedMinYValueAsString);
370 QString suggestedMinZValueJSON = formatDoubleForJSON(suggestedMinZValueAsString);
371 QString suggestedMinWValueJSON = formatDoubleForJSON(suggestedMinWValueAsString);
374 QString suggestedMaxXValueJSON = formatDoubleForJSON(suggestedMaxXValueAsString);
375 QString suggestedMaxYValueJSON = formatDoubleForJSON(suggestedMaxYValueAsString);
376 QString suggestedMaxZValueJSON = formatDoubleForJSON(suggestedMaxZValueAsString);
377 QString suggestedMaxWValueJSON = formatDoubleForJSON(suggestedMaxWValueAsString);
380 QString suggestedStepXValueJSON = formatDoubleForJSON(suggestedStepXValueAsString);
381 QString suggestedStepYValueJSON = formatDoubleForJSON(suggestedStepYValueAsString);
382 QString suggestedStepZValueJSON = formatDoubleForJSON(suggestedStepZValueAsString);
383 QString suggestedStepWValueJSON = formatDoubleForJSON(suggestedStepWValueAsString);
386 struct json_object *details = json_object_new_object();
390 if (!suggestedMinXValueAsString.isEmpty() || !suggestedMinYValueAsString.isEmpty())
397 if (!suggestedMaxXValueAsString.isEmpty() || !suggestedMaxYValueAsString.isEmpty())
404 if (!suggestedStepXValueAsString.isEmpty() || !suggestedStepYValueAsString.isEmpty())
415 if (!suggestedMinXValueAsString.isEmpty() || !suggestedMinYValueAsString.isEmpty() ||
416 !suggestedMinZValueAsString.isEmpty())
424 if (!suggestedMaxXValueAsString.isEmpty() || !suggestedMaxYValueAsString.isEmpty() ||
425 !suggestedMaxZValueAsString.isEmpty())
433 if (!suggestedStepXValueAsString.isEmpty() || !suggestedStepYValueAsString.isEmpty() ||
434 !suggestedStepZValueAsString.isEmpty())
446 if (!suggestedMinXValueAsString.isEmpty() || !suggestedMinYValueAsString.isEmpty() ||
447 !suggestedMinZValueAsString.isEmpty() || !suggestedMinWValueAsString.isEmpty())
456 if (!suggestedMaxXValueAsString.isEmpty() || !suggestedMaxYValueAsString.isEmpty() ||
457 !suggestedMaxZValueAsString.isEmpty() || !suggestedMaxWValueAsString.isEmpty())
466 if (!suggestedStepXValueAsString.isEmpty() || !suggestedStepYValueAsString.isEmpty() ||
467 !suggestedStepZValueAsString.isEmpty() || !suggestedStepWValueAsString.isEmpty())
484 QString VuoDetailsEditorPoint::formatDoubleForJSON(QString doubleString)
486 double value = QLocale::system().toDouble(doubleString);
487 QString formattedDouble = QLocale(QLocale::C).toString(value);
489 if (qAbs(value) >= 1000.0)
490 formattedDouble.remove(QLocale(QLocale::C).groupSeparator());
492 if (! formattedDouble.isEmpty() && formattedDouble[0] ==
'.')
493 formattedDouble =
"0" + formattedDouble;
495 return formattedDouble;
501 QFont VuoDetailsEditorPoint::getDefaultFont(
void)