74 lines
2.3 KiB
C++
74 lines
2.3 KiB
C++
#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;
|
||
dc = new DroneController(json_doc.object());
|
||
playpause_action->setEnabled(true);
|
||
slider->setMinimum(0);
|
||
slider->setMaximum(dc->getDuration());
|
||
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);
|
||
slider->setEnabled(true);
|
||
}
|
||
|
||
|
||
void MainWindow::onOpenGLWidgetInitialized() {
|
||
if (qApp->arguments().size() == 2) {
|
||
open(qApp->arguments().at(1));
|
||
}
|
||
open_action->setEnabled(true);
|
||
}
|