Physics Simulation & Visualization Tool 0.1
A C++ physics simulation engine with real-time 3D visualization
Loading...
Searching...
No Matches
FrameGraphWidget.cpp
Go to the documentation of this file.
1#include "FrameGraphWidget.h"
2
3#include <QComboBox>
4#include <QHBoxLayout>
5#include <QLabel>
6#include <QVBoxLayout>
7
9#include "FrameGraphCanvas.h"
10
11namespace {
12 constexpr int kLayoutMargin = 6;
13 constexpr int kLayoutSpacing = 4;
14 constexpr int kHeaderMargin = 0;
15 constexpr int kHeaderSpacing = 4;
16 constexpr int kMinWidgetHeight = 150;
17 constexpr int kMaxWidgetHeight = 190;
18}
19
20FrameGraphWidget::FrameGraphWidget(QWidget* parent) : QWidget(parent) {
21 auto* layout = new QVBoxLayout(this);
22 layout->setContentsMargins(kLayoutMargin, kLayoutMargin, kLayoutMargin, kLayoutMargin);
23 layout->setSpacing(kLayoutSpacing);
24
25 auto* headerLayout = new QHBoxLayout();
26 headerLayout->setContentsMargins(kHeaderMargin, kHeaderMargin, kHeaderMargin, kHeaderMargin);
27 headerLayout->setSpacing(kHeaderSpacing);
28
29 titleLabel = new QLabel(metricLabel(currentMetric), this);
30 titleLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
31
32 metricSelector = new QComboBox(this);
33 for (int i = 0; i < static_cast<int>(Metric::Count); ++i) {
34 metricSelector->addItem(metricLabel(static_cast<Metric>(i)));
35 }
36
37 headerLayout->addWidget(titleLabel);
38 headerLayout->addStretch();
39 headerLayout->addWidget(metricSelector);
40
41 canvas = new FrameGraphCanvas(this);
42
43 layout->addLayout(headerLayout);
44 layout->addWidget(canvas, 1);
45
46 setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
47 setMinimumHeight(kMinWidgetHeight);
48 setMaximumHeight(kMaxWidgetHeight);
49
50 connect(metricSelector, &QComboBox::currentIndexChanged, this, [this](int index) {
51 setMetric(static_cast<Metric>(index));
52 });
53}
54
56 std::shared_ptr<const std::vector<ObjectSnapshot>> frames,
57 const std::array<std::pair<float, float>, kPlottableMetricCount>& valueMinMax,
58 float tMin, float tMax
59) {
60 canvas->setSharedData(std::move(frames), valueMinMax, tMin, tMax);
61}
62
64 canvas->clear();
65}
66
68 currentMetric = metric;
69 titleLabel->setText(metricLabel(metric));
70 metricSelector->blockSignals(true);
71 metricSelector->setCurrentIndex(static_cast<int>(metric));
72 metricSelector->blockSignals(false);
73 canvas->setMetric(metric);
74}
75
77 metricSelector->setVisible(visible);
78}
constexpr std::size_t kPlottableMetricCount
Definition Metric.h:21
QString metricLabel(Metric metric)
Definition Metric.h:23
Metric
Definition Metric.h:9
void setSharedData(std::shared_ptr< const std::vector< ObjectSnapshot > > frames, const std::array< std::pair< float, float >, kPlottableMetricCount > &valueMinMax, float tMin, float tMax)
void setMetric(Metric metric)
FrameGraphWidget(QWidget *parent=nullptr)
void setSelectorVisible(bool visible)
void setSharedData(std::shared_ptr< const std::vector< ObjectSnapshot > > frames, const std::array< std::pair< float, float >, kPlottableMetricCount > &valueMinMax, float tMin, float tMax)
void setMetric(Metric metric)