Implemented qt port + e2e
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
/**
|
||||
* @file HistoryBar.cpp
|
||||
*/
|
||||
|
||||
#include "HistoryBar.h"
|
||||
#include "Hub.h"
|
||||
#include "PlotGrid.h"
|
||||
#include "Theme.h"
|
||||
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#include <QDateTime>
|
||||
|
||||
namespace shq {
|
||||
|
||||
static double nowSec() {
|
||||
return QDateTime::currentMSecsSinceEpoch() / 1000.0;
|
||||
}
|
||||
|
||||
HistoryBar::HistoryBar(Hub* hub, PlotGrid* grid, QWidget* parent)
|
||||
: QWidget(parent), hub_(hub), grid_(grid) {
|
||||
auto* lay = new QHBoxLayout(this);
|
||||
lay->setContentsMargins(6, 2, 6, 2);
|
||||
lay->setSpacing(4);
|
||||
|
||||
auto* title = new QLabel("History", this);
|
||||
title->setStyleSheet("color:#fab387; font-weight:bold;");
|
||||
lay->addWidget(title);
|
||||
|
||||
auto* liveBtn = new QPushButton("Live", this);
|
||||
connect(liveBtn, &QPushButton::clicked, this, [this]() {
|
||||
grid_->goLive();
|
||||
Q_EMIT liveRequested();
|
||||
});
|
||||
lay->addWidget(liveBtn);
|
||||
|
||||
rangeLbl_ = new QLabel("No range", this);
|
||||
rangeLbl_->setStyleSheet("color:#a6adc8;");
|
||||
rangeLbl_->setMinimumWidth(170);
|
||||
lay->addWidget(rangeLbl_);
|
||||
|
||||
auto* left = new QPushButton("\u25c0", this); /* pan left */
|
||||
left->setMaximumWidth(32);
|
||||
connect(left, &QPushButton::clicked, this, [this]() { grid_->panAll(-0.75); });
|
||||
lay->addWidget(left);
|
||||
auto* right = new QPushButton("\u25b6", this); /* pan right */
|
||||
right->setMaximumWidth(32);
|
||||
connect(right, &QPushButton::clicked, this, [this]() { grid_->panAll(0.75); });
|
||||
lay->addWidget(right);
|
||||
|
||||
/* Jump presets. */
|
||||
static const double kJumpSec[] = {10, 30, 60, 300, 600, 1800, 3600};
|
||||
static const char* kJumpLabel[] = {"10s","30s","1m","5m","10m","30m","1h"};
|
||||
for (int j = 0; j < 7; j++) {
|
||||
double sec = kJumpSec[j];
|
||||
auto* b = new QPushButton(kJumpLabel[j], this);
|
||||
b->setMaximumWidth(40);
|
||||
connect(b, &QPushButton::clicked, this, [this, sec]() {
|
||||
grid_->jumpAllAgo(sec);
|
||||
});
|
||||
lay->addWidget(b);
|
||||
}
|
||||
|
||||
auto* allBtn = new QPushButton("All", this);
|
||||
allBtn->setMaximumWidth(40);
|
||||
connect(allBtn, &QPushButton::clicked, this, &HistoryBar::showAll);
|
||||
lay->addWidget(allBtn);
|
||||
|
||||
lay->addStretch(1);
|
||||
}
|
||||
|
||||
void HistoryBar::showAll() {
|
||||
const auto& hi = hub_->historyInfo();
|
||||
double t0 = 1e300, t1 = -1e300;
|
||||
for (const auto& hs : hi.signals) {
|
||||
if (hs.t0 < t0) { t0 = hs.t0; }
|
||||
if (hs.t1 > t1) { t1 = hs.t1; }
|
||||
}
|
||||
if (t1 > t0) { grid_->setAllStoredX(t0, t1); }
|
||||
}
|
||||
|
||||
void HistoryBar::updateReadout() {
|
||||
double t0, t1;
|
||||
if (!grid_->currentRange(t0, t1)) {
|
||||
rangeLbl_->setText("Live");
|
||||
return;
|
||||
}
|
||||
double span = t1 - t0;
|
||||
double ago = nowSec() - t1;
|
||||
QString s;
|
||||
if (ago < 1.0) {
|
||||
s = QString("%1 s span | now").arg(span, 0, 'g', 3);
|
||||
} else if (ago < 60.0) {
|
||||
s = QString("%1 s span | %2 s ago").arg(span, 0, 'g', 3).arg(ago, 0, 'f', 0);
|
||||
} else if (ago < 3600.0) {
|
||||
s = QString("%1 s span | %2 min ago").arg(span, 0, 'g', 3).arg(ago / 60.0, 0, 'f', 1);
|
||||
} else {
|
||||
s = QString("%1 s span | %2 h ago").arg(span, 0, 'g', 3).arg(ago / 3600.0, 0, 'f', 1);
|
||||
}
|
||||
rangeLbl_->setText(s);
|
||||
}
|
||||
|
||||
} /* namespace shq */
|
||||
Reference in New Issue
Block a user