From d9b897c140ed6cb6b738d1e013116facc95c8d92 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Mon, 14 Jun 2021 15:01:46 +0200 Subject: [PATCH] Add microseconds to single snapshot selector --- .../armem_gui/query_widgets/SnapshotForm.cpp | 40 +++++++++++++++++-- .../armem_gui/query_widgets/SnapshotForm.h | 1 + 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/source/RobotAPI/libraries/armem_gui/query_widgets/SnapshotForm.cpp b/source/RobotAPI/libraries/armem_gui/query_widgets/SnapshotForm.cpp index 8e00d3811..f0ee979a8 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 4fa9b3a8d..0ca9950b3 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; }; -- GitLab