-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmainwindow.cpp
More file actions
91 lines (75 loc) · 3.22 KB
/
Copy pathmainwindow.cpp
File metadata and controls
91 lines (75 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <QTimer>
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent, double dt)
: QMainWindow(parent)
, _ui(new Ui::MainWindow)
, _context(new Context(dt))
, _timer(new QTimer(this))
, _particleTemplates(QList<ParticleTemplate*>())
, _wallTemplates(QList<WallTemplate*>()) {
_ui->setupUi(this);
_viewport = _ui->viewport;
_viewport->setFixedWidth(700);
_viewport->setFixedHeight(500);
_viewport->setScale(1000);
_ui->particleTemplates->addStretch();
_ui->wallTemplates->addStretch();
_ui->springTemplates->addStretch();
newParticle();
newWall();
newSpring();
_viewport->setParticleTemplate(_particleTemplates.front());
_viewport->setWallTemplate(_wallTemplates.front());
_viewport->setContext(_context);
QColor accentColor = QApplication::palette().color(QPalette::Highlight);
_ui->newParticleButton->setStyleSheet(QString("background-color: %1; color: white;").arg(accentColor.name()));
_ui->newWallButton->setStyleSheet(QString("background-color: %1; color: white;").arg(accentColor.name()));
_ui->newSpringButton->setStyleSheet(QString("background-color: %1; color: white;").arg(accentColor.name()));
connect(_ui->newParticleButton, &QPushButton::clicked, this, &MainWindow::newParticle);
connect(_ui->newWallButton, &QPushButton::clicked, this, &MainWindow::newWall);
connect(_ui->newSpringButton, &QPushButton::clicked, this, &MainWindow::newSpring);
connect(_timer, &QTimer::timeout, _viewport, &Viewport::animate);
_timer->start(1);
}
MainWindow::~MainWindow() {
delete _ui;
delete _context;
delete _timer;
for (auto particleTemplate : _particleTemplates) {
delete particleTemplate;
}
for (auto wallTemplate : _wallTemplates) {
delete wallTemplate;
}
for (auto springTemplate : _springTemplates) {
delete springTemplate;
}
}
void MainWindow::addParticleTemplate(ParticleTemplate* particleTemplate) {
_particleTemplates.push_front(particleTemplate);
int index = _ui->particleTemplates->count() - 1;
_ui->particleTemplates->insertWidget(index, new ParticleFrame(this, particleTemplate, _viewport));
}
void MainWindow::addWallTemplate(WallTemplate* wallTemplate) {
_wallTemplates.push_front(wallTemplate);
int index = _ui->wallTemplates->count() - 1;
_ui->wallTemplates->insertWidget(index, new WallFrame(this, wallTemplate, _viewport));
}
void MainWindow::addSpringTemplate(SpringTemplate* springTemplate) {
_springTemplates.push_front(springTemplate);
int index = _ui->springTemplates->count() - 1;
_ui->springTemplates->insertWidget(index, new SpringFrame(this, springTemplate, _viewport));
}
void MainWindow::newParticle() {
ParticleTemplate* newParticleTemplate = new ParticleTemplate({10, 0.01, 0.6, Qt::blue, "Default particle"});
addParticleTemplate(newParticleTemplate);
}
void MainWindow::newWall() {
WallTemplate* newWallTemplate = new WallTemplate({0.05, Qt::black, "Default wall"});
addWallTemplate(newWallTemplate);
}
void MainWindow::newSpring() {
SpringTemplate* newSpringTemplate = new SpringTemplate({0.1, 0.1, Qt::red, "Default spring"});
addSpringTemplate(newSpringTemplate);
}