X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fmainwindow.cpp;h=170d14e79ccffa4fa9f7d24fdf91fbc57062c050;hp=c3747e0256f945f81ce94fa5298ad7ce4c0c2904;hb=d260d425863efa6d80a5a5f3d920373a6d159aef;hpb=39eb0d45ab6c2910f08a1ad79ac60d188fa9f6ae diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index c3747e02..170d14e7 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -43,7 +43,6 @@ #include "mainwindow.h" #include "devicemanager.h" -#include "device/device.h" #include "dialogs/about.h" #include "dialogs/connect.h" #include "dialogs/storeprogress.h" @@ -54,16 +53,21 @@ #include "widgets/decodermenu.h" #endif -/* __STDC_FORMAT_MACROS is required for PRIu64 and friends (in C++). */ -#define __STDC_FORMAT_MACROS #include #include #include #include -#include +#include using std::list; +using std::map; +using std::pair; using std::shared_ptr; +using std::string; + +using sigrok::Device; +using sigrok::Error; +using sigrok::HardwareDevice; namespace pv { @@ -266,23 +270,54 @@ void MainWindow::setup_ui() // Setup _session events connect(&_session, SIGNAL(capture_state_changed(int)), this, SLOT(capture_state_changed(int))); - } void MainWindow::save_ui_settings() { QSettings settings; + map dev_info; + list 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; + shared_ptr device; + + map dev_info; + list key_list; + string value; + settings.beginGroup("MainWindow"); if (settings.contains("geometry")) { @@ -292,6 +327,33 @@ void MainWindow::restore_ui_settings() 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) { + _session.set_device(device); + update_device_list(); + } + + settings.endGroup(); } void MainWindow::session_error( @@ -306,8 +368,8 @@ void MainWindow::update_device_list() { assert(_sampling_bar); - shared_ptr selected_device = _session.get_device(); - list< shared_ptr > devices; + shared_ptr selected_device = _session.device(); + list< shared_ptr > devices; if (_device_manager.devices().size() == 0) return; @@ -320,7 +382,13 @@ void MainWindow::update_device_list() devices.push_back(selected_device); assert(selected_device); - _sampling_bar->set_device_list(devices, selected_device); + list< pair< shared_ptr, string> > device_list; + + for (auto device : devices) + device_list.push_back(make_pair( + device, _device_manager.get_display_name(device))); + + _sampling_bar->set_device_list(device_list, selected_device); } void MainWindow::closeEvent(QCloseEvent *event) @@ -337,8 +405,8 @@ void MainWindow::load_file(QString file_name) try { _session.set_file(file_name.toStdString()); - } catch(QString e) { - show_session_error(tr("Failed to load ") + file_name, e); + } catch(Error e) { + show_session_error(tr("Failed to load ") + file_name, e.what()); _session.set_default_device(); update_device_list(); return; @@ -457,7 +525,7 @@ void MainWindow::on_actionViewShowCursors_triggered() void MainWindow::on_actionAbout_triggered() { - dialogs::About dlg(this); + dialogs::About dlg(_device_manager.context(), this); dlg.exec(); }