diff --git a/source/RobotAPI/libraries/armem_gui/query_widgets/SnapshotForm.cpp b/source/RobotAPI/libraries/armem_gui/query_widgets/SnapshotForm.cpp index 8e00d3811f24d12146df6aa0c782af2437a71711..f0ee979a814fff0257a4f87d1003b34ab0b3aa58 100644 --- a/source/RobotAPI/libraries/armem_gui/query_widgets/SnapshotForm.cpp +++ b/source/RobotAPI/libraries/armem_gui/query_widgets/SnapshotForm.cpp @@ -42,6 +42,22 @@ namespace armarx::armem::gui } + // Source: https://stackoverflow.com/a/26538572 + class LeadingZeroSpinBox : public QSpinBox + { + using QSpinBox::QSpinBox; + + int numDigits = 6; + int base = 10; + + virtual QString textFromValue(int value) const; + }; + QString LeadingZeroSpinBox::textFromValue(int value) const + { + return QString("%1").arg(value, numDigits, base, QChar('0')); + } + + SnapshotFormSingle::SnapshotFormSingle() { const QDateTime now = QDateTime::currentDateTime(); @@ -52,25 +68,41 @@ namespace armarx::armem::gui dateTime->setDisabled(true); setDateTimeDisplayFormat(dateTime); + microseconds = new LeadingZeroSpinBox(); + microseconds->setDisabled(true); + microseconds->setMinimum(0); + microseconds->setMaximum(1000 * 1000 - 1); + microseconds->setSingleStep(1); + microseconds->setValue(static_cast<int>(now.toMSecsSinceEpoch() % 1000) * 1000); + + QHBoxLayout* timestampLayout = new QHBoxLayout(); + timestampLayout->addWidget(dateTime); + timestampLayout->addWidget(microseconds); + latest = new QCheckBox("Latest"); latest->setChecked(true); QGridLayout* layout = new QGridLayout(this); layout->addWidget(label, 0, 0); - layout->addWidget(dateTime, 0, 1); + layout->addLayout(timestampLayout, 0, 1); layout->addWidget(latest, 0, 2); connect(latest, &QCheckBox::toggled, dateTime, &QDateTimeEdit::setDisabled); + connect(latest, &QCheckBox::toggled, microseconds, &QSpinBox::setDisabled); connect(dateTime, &QDateTimeEdit::dateTimeChanged, this, &SnapshotForm::queryChanged); + connect(microseconds, QOverload<int>::of(&QSpinBox::valueChanged), this, &SnapshotForm::queryChanged); connect(latest, &QCheckBox::toggled, this, &SnapshotForm::queryChanged); } + void SnapshotFormSingle::fillEntitySelector(client::query::SnapshotSelector& selector) { - selector.atTime(latest->isChecked() - ? Time::microSeconds(-1) - : Time::milliSeconds(dateTime->dateTime().toMSecsSinceEpoch())); + const Time time = latest->isChecked() + ? Time::microSeconds(-1) + : (Time::seconds(dateTime->dateTime().toSecsSinceEpoch())) + + Time::microSeconds(microseconds->value()); + selector.atTime(time); } diff --git a/source/RobotAPI/libraries/armem_gui/query_widgets/SnapshotForm.h b/source/RobotAPI/libraries/armem_gui/query_widgets/SnapshotForm.h index 4fa9b3a8d9148048747174c8c72ed155953dc8b3..0ca9950b33a0585c97a8157bf17ad3c272fc8abc 100644 --- a/source/RobotAPI/libraries/armem_gui/query_widgets/SnapshotForm.h +++ b/source/RobotAPI/libraries/armem_gui/query_widgets/SnapshotForm.h @@ -59,6 +59,7 @@ namespace armarx::armem::gui private: QLabel* label; QDateTimeEdit* dateTime; + QSpinBox* microseconds; QCheckBox* latest; };