+ if (session_.device()) {
+ settings.beginGroup("Device");
+ key_list.push_back("vendor");
+ key_list.push_back("model");
+ key_list.push_back("version");
+ key_list.push_back("serial_num");
+ key_list.push_back("connection_id");
+
+ dev_info = device_manager_.get_device_info(
+ session_.device());
+
+ for (string key : key_list) {
+
+ if (dev_info.count(key))
+ settings.setValue(QString::fromUtf8(key.c_str()),
+ QString::fromUtf8(dev_info.at(key).c_str()));
+ else
+ settings.remove(QString::fromUtf8(key.c_str()));
+ }
+
+ settings.endGroup();
+ }
+}
+
+void MainWindow::restore_ui_settings()
+{
+ QSettings settings;
+
+ shared_ptr<HardwareDevice> device;
+
+ map<string, string> dev_info;
+ list<string> key_list;
+ string value;
+
+ settings.beginGroup("MainWindow");
+
+ if (settings.contains("geometry")) {
+ restoreGeometry(settings.value("geometry").toByteArray());
+ restoreState(settings.value("state").toByteArray());
+ } else
+ resize(1000, 720);
+
+ settings.endGroup();
+
+ // Re-select last used device if possible.
+ settings.beginGroup("Device");
+ key_list.push_back("vendor");
+ key_list.push_back("model");
+ key_list.push_back("version");
+ key_list.push_back("serial_num");
+ key_list.push_back("connection_id");
+
+ for (string key : key_list) {
+ if (!settings.contains(QString::fromUtf8(key.c_str())))
+ continue;
+
+ 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(sampling_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);
+
+ sampling_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();