void MainWindow::show_session_error(const QString text, const QString info_text)
{
// TODO Emulate noquote()
- qDebug() << "Notifying user of session error:" << info_text;
+ qDebug() << "Notifying user of session error: " << text << "; " << info_text;
QMessageBox msg;
msg.setText(text + "\n\n" + info_text);
session_selector_.setCornerWidget(static_tab_widget_, Qt::TopLeftCorner);
session_selector_.setTabsClosable(true);
+#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ close_application_shortcut_ = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q), this, SLOT(close()));
+ close_current_tab_shortcut_ = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_W), this, SLOT(on_close_current_tab()));
+#else
close_application_shortcut_ = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this, SLOT(close()));
- close_application_shortcut_->setAutoRepeat(false);
-
close_current_tab_shortcut_ = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this, SLOT(on_close_current_tab()));
+#endif
+ close_application_shortcut_->setAutoRepeat(false);
connect(new_session_button_, SIGNAL(clicked(bool)),
this, SLOT(on_new_session_clicked()));
void MainWindow::on_run_stop_clicked()
{
- shared_ptr<Session> session = last_focused_session_;
+ GlobalSettings settings;
+ bool all_sessions = settings.value(GlobalSettings::Key_General_StartAllSessions).toBool();
- if (!session)
- return;
+ if (all_sessions)
+ {
+ vector< shared_ptr<Session> > hw_sessions;
- switch (session->get_capture_state()) {
- case Session::Stopped:
- session->start_capture([&](QString message) {
- show_session_error("Capture failed", message); });
- break;
- case Session::AwaitingTrigger:
- case Session::Running:
- session->stop_capture();
- break;
+ // Make a list of all sessions where a hardware device is used
+ for (const shared_ptr<Session>& s : sessions_) {
+ shared_ptr<devices::HardwareDevice> hw_device =
+ dynamic_pointer_cast< devices::HardwareDevice >(s->device());
+ if (!hw_device)
+ continue;
+ hw_sessions.push_back(s);
+ }
+
+ // Stop all acquisitions if there are any running ones, start all otherwise
+ bool any_running = any_of(hw_sessions.begin(), hw_sessions.end(),
+ [](const shared_ptr<Session> &s)
+ { return (s->get_capture_state() == Session::AwaitingTrigger) ||
+ (s->get_capture_state() == Session::Running); });
+
+ for (shared_ptr<Session> s : hw_sessions)
+ if (any_running)
+ s->stop_capture();
+ else
+ s->start_capture([&](QString message) {
+ show_session_error("Capture failed", message); });
+ } else {
+
+ shared_ptr<Session> session = last_focused_session_;
+
+ if (!session)
+ return;
+
+ switch (session->get_capture_state()) {
+ case Session::Stopped:
+ session->start_capture([&](QString message) {
+ show_session_error("Capture failed", message); });
+ break;
+ case Session::AwaitingTrigger:
+ case Session::Running:
+ session->stop_capture();
+ break;
+ }
}
}