hivemind 1.0.0
Loading...
Searching...
No Matches
timeline.cpp
Go to the documentation of this file.
1#include "gui/timeline.h"
3#include <QComboBox>
4#include <QHBoxLayout>
5#include <QMessageBox>
6#include <QMouseEvent>
7#include <QPaintEvent>
8#include <QPainter>
9
10namespace Gui
11{
12
13 Timeline::Timeline(QWidget* parent)
14 : QWidget(parent), m_timeStamp(0.0f), m_activeAgentId(1),
15 m_pixelsPerSecond(11.75)
16 {
17 setObjectName("Timeline");
18 setMinimumHeight(100);
19
21 SIGNAL(KeyframeAdded()), this, SLOT(update()));
22 }
23
24 void
25 Timeline::paintEvent(QPaintEvent* event)
26 {
27 QPainter painter(this);
28 painter.setBrush(Qt::black);
29 painter.setPen(Qt::black);
30 painter.drawRect(0, 0, width(), height());
31 int numDivisions = 20;
32 float increment = width() / (float)numDivisions;
33 for (int i = 0; i <= numDivisions; ++i) {
34 float xPos = i * increment;
35 painter.setPen(Qt::lightGray);
36 painter.drawLine(xPos, 0, xPos, height());
37 QString timestampText = QString::number(i * 5);
38 painter.setPen(Qt::lightGray);
39 painter.drawText(QPointF(xPos + 2, height() - 5), timestampText);
40 }
41 float xPos = (m_timeStamp / 100.0f) * width();
42 m_pixelsPerSecond = width() / 100.0f;
43 painter.setBrush(Qt::red);
44 painter.setPen(Qt::red);
45 painter.drawLine(xPos, 0, xPos, height());
46
47 int squareSize = 10;
48
49 const std::vector<Core::Keyframe>& keyframes =
51 float secondsPerPixel = 1.0f / m_pixelsPerSecond;
52 for (const Core::Keyframe& kf : keyframes) {
53 float timeStamp = kf.TimeStamp;
54
55 int x = static_cast<int>((timeStamp / secondsPerPixel) -
56 (squareSize / 2));
57 int y = height() / 2 - squareSize / 2;
58
59 painter.setPen(Qt::NoPen);
60 painter.setBrush(Qt::red);
61 painter.drawRect(x, y, squareSize, squareSize);
62 }
63 }
64
65 void
66 Timeline::mouseReleaseEvent(QMouseEvent* event)
67 {
68 float xPosition = event->position().x();
69 float timeStamp = (xPosition / width()) * 100.0f;
70
71 bool keyframeClicked = false;
72
73 if (event->button() == Qt::RightButton) {
74 int squareSize = 10;
75 float secondsPerPixel = 1.0f / m_pixelsPerSecond;
76
77 const std::vector<Core::Keyframe>& keyframes =
79
80 for (size_t i = 0; i < keyframes.size(); ++i) {
81 const Core::Keyframe& kf = keyframes[i];
82 float kfTimeStamp = kf.TimeStamp;
83
84 int x = static_cast<int>((kfTimeStamp / secondsPerPixel) -
85 (squareSize / 2));
86 int y = height() / 2 - squareSize / 2;
87
88 QRect keyframeRect(x, y, squareSize, squareSize);
89
90 if (keyframeRect.contains(event->pos())) {
91 QMessageBox::StandardButton reply = QMessageBox::question(
92 this, "Delete keyframe",
93 "Do you want to delete this keyframe?",
94 QMessageBox::Yes | QMessageBox::No);
95
96 if (reply == QMessageBox::Yes) {
98 .RemoveKeyframe(kf);
99 update();
100 }
101
102 keyframeClicked = true;
103 break;
104 }
105 }
106 }
107
108 if (!keyframeClicked) {
109 m_timeStamp = timeStamp;
110 update();
112 }
113 }
114
115 void
116 Timeline::resizeEvent(QResizeEvent* event)
117 {
118 update();
119 QWidget::resizeEvent(event);
120 }
121
122} // namespace Gui
float m_timeStamp
The current timestamp.
Definition: timeline.h:68
void mouseReleaseEvent(QMouseEvent *event) override
Mouse release event handler.
Definition: timeline.cpp:66
Timeline(QWidget *parent=nullptr)
Constructor for the Timeline class.
Definition: timeline.cpp:13
void timeStampSelected(float timeStamp)
Signal that is emitted when a timestamp is selected.
void resizeEvent(QResizeEvent *event) override
Resize event handler.
Definition: timeline.cpp:116
void paintEvent(QPaintEvent *event) override
Paint event handler.
Definition: timeline.cpp:25
float m_pixelsPerSecond
Pixels per second on the timeline.
Definition: timeline.h:70
void RemoveKeyframe(const Core::Keyframe &keyframe)
Removes a keyframe from the keyframe list.
static KeyframeManager & Instance()
Returns the singleton instance of the KeyframeManager.
std::vector< Core::Keyframe > & GetKeyframes()
Returns a reference to the list of keyframes.
Definition: action.h:6
A structure representing an agent's position in cartesian space at a given point in time.
Definition: types.h:69
float TimeStamp
Definition: types.h:77