+ value = settings.value(QString::fromUtf8(key.c_str())).toString().toStdString();
+
+ if (value.size() > 0)
+ dev_info.insert(std::make_pair(key, value));
+ }
+
+ device = device_manager_.find_device_from_info(dev_info);
+
+ if (device) {
+ select_device(device);
+ update_device_list();
+ }
+
+ settings.endGroup();
+}
+
+void MainWindow::session_error(
+ const QString text, const QString info_text)
+{
+ QMetaObject::invokeMethod(this, "show_session_error",
+ Qt::QueuedConnection, Q_ARG(QString, text),
+ Q_ARG(QString, info_text));
+}
+
+void MainWindow::update_device_list()
+{
+ assert(main_bar_);
+
+ shared_ptr<Device> selected_device = session_.device();
+ list< shared_ptr<Device> > devices;
+
+ if (device_manager_.devices().size() == 0)
+ return;
+
+ std::copy(device_manager_.devices().begin(),
+ device_manager_.devices().end(), std::back_inserter(devices));
+
+ if (std::find(devices.begin(), devices.end(), selected_device) ==
+ devices.end())
+ devices.push_back(selected_device);
+ assert(selected_device);
+
+ main_bar_->set_device_list(devices, selected_device);
+}
+
+void MainWindow::closeEvent(QCloseEvent *event)
+{
+ save_ui_settings();
+ event->accept();
+}
+
+void MainWindow::load_file(QString file_name)
+{
+ const QString errorMessage(
+ QString("Failed to load file %1").arg(file_name));
+ const QString infoMessage;
+
+ try {
+ session_.set_file(file_name.toStdString());
+ } catch(Error e) {
+ show_session_error(tr("Failed to load ") + file_name, e.what());
+ session_.set_default_device();
+ update_device_list();
+ return;
+ }
+
+ update_device_list();
+
+ session_.start_capture([&, errorMessage, infoMessage](QString) {
+ session_error(errorMessage, infoMessage); });
+}
+
+void MainWindow::show_session_error(
+ const QString text, const QString info_text)
+{
+ QMessageBox msg(this);
+ msg.setText(text);
+ msg.setInformativeText(info_text);
+ msg.setStandardButtons(QMessageBox::Ok);
+ msg.setIcon(QMessageBox::Warning);
+ msg.exec();