+ connect(&session_, SIGNAL(device_selected()), this,
+ SLOT(device_selected()));
+
+ // Setup view_ events
+ connect(view_, SIGNAL(sticky_scrolling_changed(bool)), this,
+ SLOT(sticky_scrolling_changed(bool)));
+ connect(view_, SIGNAL(always_zoom_to_fit_changed(bool)), this,
+ SLOT(always_zoom_to_fit_changed(bool)));
+}
+
+void MainWindow::select_init_device() {
+ QSettings settings;
+ map<string, string> dev_info;
+ list<string> key_list;
+
+ // 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) {
+ const QString k = QString::fromStdString(key);
+ if (!settings.contains(k))
+ continue;
+
+ const string value = settings.value(k).toString().toStdString();
+ if (!value.empty())
+ dev_info.insert(std::make_pair(key, value));
+ }
+
+ const shared_ptr<devices::HardwareDevice> device =
+ device_manager_.find_device_from_info(dev_info);
+ select_device(device);
+ update_device_list();
+
+ settings.endGroup();
+}
+
+void MainWindow::load_init_file(const std::string &file_name,
+ const std::string &format) {
+ shared_ptr<InputFormat> input_format;
+
+ if (!format.empty()) {
+ const map<string, shared_ptr<InputFormat> > formats =
+ device_manager_.context()->input_formats();
+ const auto iter = find_if(formats.begin(), formats.end(),
+ [&](const pair<string, shared_ptr<InputFormat> > f) {
+ return f.first == format; });
+ if (iter == formats.end()) {
+ cerr << "Unexpected input format: " << format << endl;
+ return;
+ }
+
+ input_format = (*iter).second;
+ }
+
+ load_file(QString::fromStdString(file_name), input_format);
+}
+
+
+void MainWindow::save_ui_settings()
+{
+ QSettings settings;
+
+ map<string, string> dev_info;
+ list<string> key_list;
+
+ settings.beginGroup("MainWindow");
+ settings.setValue("state", saveState());
+ settings.setValue("geometry", saveGeometry());
+ settings.endGroup();
+
+ 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;
+
+ settings.beginGroup("MainWindow");
+
+ if (settings.contains("geometry")) {
+ restoreGeometry(settings.value("geometry").toByteArray());
+ restoreState(settings.value("state").toByteArray());
+ } else
+ resize(1000, 720);