aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/drone.cc1
-rw-r--r--src/main_window.cc20
-rw-r--r--src/settings_pane.cc7
-rw-r--r--src/settings_pane.hh13
4 files changed, 36 insertions, 5 deletions
diff --git a/src/drone.cc b/src/drone.cc
index b7e4007..0be11a6 100644
--- a/src/drone.cc
+++ b/src/drone.cc
@@ -29,6 +29,7 @@ Drone::Drone(const QJsonObject &json)
for (const QJsonValue &o : ja) {
waypoints.append(Waypoint(o.toObject()));
}
+ setTo(0);
}
diff --git a/src/main_window.cc b/src/main_window.cc
index e63bf0e..26d9601 100644
--- a/src/main_window.cc
+++ b/src/main_window.cc
@@ -30,6 +30,7 @@ MainWindow::MainWindow(QWidget *parent) {
QDockWidget *dock = new QDockWidget("Outils", this);
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
settings_pane = new SettingsPane();
+ settings_pane->setEnabled(false);
dock->setWidget(settings_pane);
addDockWidget(Qt::RightDockWidgetArea, dock);
}
@@ -62,9 +63,13 @@ void MainWindow::open(const QString &path) {
if (dc) delete dc;
glw.meshes.clear();
dc = new DroneController(json_doc.object());
- playpause_action->setEnabled(true);
+
+ // Play/Pause button
connect(dc, &DroneController::playing, this, &MainWindow::play);
connect(dc, &DroneController::pausing, this, &MainWindow::pause);
+ playpause_action->setEnabled(true);
+
+ // Seekbar slider
slider->setMinimum(0);
slider->setMaximum(dc->getDuration());
slider->setValue(0);
@@ -72,10 +77,19 @@ void MainWindow::open(const QString &path) {
connect(slider, &QSlider::sliderReleased, dc, &DroneController::resume);
connect(slider, &QSlider::valueChanged, dc, &DroneController::seek);
connect(dc, &DroneController::frameChanged, slider, &QSlider::setValue);
+ connect(settings_pane, &SettingsPane::collisionClicked,
+ slider, &QSlider::setValue);
+ slider->setEnabled(true);
+
connect(dc, &DroneController::collision, settings_pane, &SettingsPane::addCollision);
- dc->computeCollisions(10);
+ connect(settings_pane, &SettingsPane::sphereRadiusChanged,
+ [&](double _) { settings_pane->clearCollisions(); });
+ connect(settings_pane, &SettingsPane::sphereRadiusChanged,
+ dc, &DroneController::computeCollisions);
+ settings_pane->setEnabled(true);
+
+ dc->computeCollisions(.1);
pause();
- slider->setEnabled(true);
}
diff --git a/src/settings_pane.cc b/src/settings_pane.cc
index f37c14c..4e52d55 100644
--- a/src/settings_pane.cc
+++ b/src/settings_pane.cc
@@ -18,6 +18,8 @@ SettingsPane::SettingsPane(QWidget *parent)
this, &SettingsPane::toggledTrajectories);
connect(show_support_lines, &QCheckBox::stateChanged,
this, &SettingsPane::toggledSupportLines);
+ connect(collisions, &QListWidget::itemClicked,
+ [&](QListWidgetItem *item) { emit collisionClicked(((CollisionItem *) item)->getFrame()); });
QFormLayout *layout = new QFormLayout;
layout->addRow("Taille de la sphère de collision", sphere_radius);
@@ -29,8 +31,9 @@ SettingsPane::SettingsPane(QWidget *parent)
void SettingsPane::addCollision(int idA, int idB, int frame) {
- QListWidgetItem *item = new QListWidgetItem(QString::number(frame) + ": "
- + QString::number(idA) + " / " + QString::number(idB));
+ CollisionItem *item = new CollisionItem(QString::number(frame) + ": "
+ + QString::number(idA) + " / " + QString::number(idB),
+ frame);
item->setFlags(Qt::ItemIsEnabled | Qt::ItemNeverHasChildren);
collisions->addItem(item);
}
diff --git a/src/settings_pane.hh b/src/settings_pane.hh
index 434f3f7..25cdf6f 100644
--- a/src/settings_pane.hh
+++ b/src/settings_pane.hh
@@ -5,6 +5,18 @@
#include <QListWidget>
+class CollisionItem : public QListWidgetItem {
+ const int frame;
+
+public:
+ CollisionItem(QString text, int frame)
+ :QListWidgetItem(text),
+ frame(frame) {}
+
+ int getFrame() const { return frame; }
+};
+
+
class SettingsPane : public QWidget {
Q_OBJECT
@@ -21,6 +33,7 @@ signals:
void sphereRadiusChanged(double sqRadius);
void toggledTrajectories(int shown);
void toggledSupportLines(int shown);
+ void collisionClicked(int frame);
};