aboutsummaryrefslogtreecommitdiff
path: root/src/main_window.cc
blob: 7bc7855d8daee4301f0908c7a0d67a84f9298ae9 (plain)
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
#include "main_window.hh"

#include <QApplication>
#include <QFile>
#include <QFileDialog>
#include <QJsonDocument>
#include <QStyle>


MainWindow::MainWindow(QWidget *parent) {
	(void) parent;
	connect(&glw, &OpenGLWidget::initialized,
			this, &MainWindow::onOpenGLWidgetInitialized);
	// connect(&timer, &QTimer::timeout, this, &MainWindow::step);
	setCentralWidget(&glw);
	addToolBar(Qt::TopToolBarArea, &top_tb);
	open_action = top_tb.addAction("Ouvrir…", [&]() {
		open(QFileDialog::getOpenFileName(this, "Ouvrir un fichier JSON"));
	});
	open_action->setEnabled(false);
	addToolBar(Qt::BottomToolBarArea, &bottom_tb);
	playpause_action = bottom_tb.addAction(style()->standardIcon(QStyle::SP_MediaPlay), "",
										   this, &MainWindow::play);
	playpause_action->setEnabled(false);
	slider = new QSlider(Qt::Horizontal);
	bottom_tb.addWidget(slider);
	slider->setEnabled(false);
}


void MainWindow::play() {
	dc->play();
	playpause_action->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
	disconnect(playpause_action, &QAction::triggered, nullptr, nullptr);
	connect(playpause_action, &QAction::triggered, this, &MainWindow::pause);
}


void MainWindow::pause() {
	dc->pause();
	playpause_action->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
	disconnect(playpause_action, &QAction::triggered, nullptr, nullptr);
	connect(playpause_action, &QAction::triggered, this, &MainWindow::play);
}


void MainWindow::open(const QString &path) {
	QFile file(path);
    if (!file.open(QIODevice::ReadOnly)) {
        qWarning("Impossible d’ouvrir le fichier.");
        return;
    }
    QByteArray data = file.readAll();
    QJsonDocument json_doc = QJsonDocument::fromJson(data);
	if (dc) delete dc;
	glw.meshes.clear();
	dc = new DroneController(json_doc.object());
	playpause_action->setEnabled(true);
	connect(dc, &DroneController::playing, this, &MainWindow::play);
	connect(dc, &DroneController::pausing, this, &MainWindow::pause);
	slider->setMinimum(0);
	slider->setMaximum(dc->getDuration());
	slider->setValue(0);
	connect(slider, &QSlider::sliderPressed, dc, &DroneController::suspend);
	connect(slider, &QSlider::sliderReleased, dc, &DroneController::resume);
	connect(slider, &QSlider::valueChanged, dc, &DroneController::seek);
	connect(dc, &DroneController::frameChanged, slider, &QSlider::setValue);
	pause();
	slider->setEnabled(true);
}


void MainWindow::onOpenGLWidgetInitialized() {
	if (qApp->arguments().size() == 2) {
		open(qApp->arguments().at(1));
	}
	open_action->setEnabled(true);
}