+void MainWindow::on_run_stop_clicked()
+{
+ Session &session = get_active_view()->session();
+
+ switch (session.get_capture_state()) {
+ case Session::Stopped:
+ session.start_capture([&](QString message) {
+ session_error("Capture failed", message); });
+ break;
+ case Session::AwaitingTrigger:
+ case Session::Running:
+ session.stop_capture();
+ break;
+ }
+}
+
+void MainWindow::on_session_name_changed()
+{
+ // Update the corresponding dock widget's name(s)
+ Session *session = qobject_cast<Session*>(QObject::sender());
+ assert(session);
+
+ for (shared_ptr<views::ViewBase> view : session->views()) {
+ // Get the dock that contains the view
+ for (auto entry : view_docks_)
+ if (entry.second == view) {
+ entry.first->setObjectName(session->name());
+ entry.first->setWindowTitle(session->name());
+ }
+ }
+
+ // Refresh window title if the affected session has focus
+ shared_ptr<views::ViewBase> view = get_active_view();
+
+ if (view && session->has_view(view))
+ setWindowTitle(session->name() + " - " + WindowTitle);
+}
+
+void MainWindow::on_capture_state_changed(QObject *obj)
+{
+ Session *caller = qobject_cast<Session*>(obj);
+
+ // Ignore if caller is not the currently focused session
+ // unless there is only one session
+ if (sessions_.size() > 1) {
+ Session &focused_session = get_active_view()->session();
+
+ if (caller != &focused_session)
+ return;
+ }
+
+ int state = caller->get_capture_state();
+
+ const QIcon *icons[] = {&icon_grey_, &icon_red_, &icon_green_};
+ run_stop_button_->setIcon(*icons[state]);
+ run_stop_button_->setText((state == pv::Session::Stopped) ?
+ tr("Run") : tr("Stop"));
+}
+