X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fmainwindow.cpp;h=d4c5f1f79ed27111c17bcbe9bee6a97902d4a7e8;hb=6842b5fc481eb43d9aeea81f17e211820d6dc405;hp=50cab695a8a87d850f4f2fda04f6b8f233ed8ee8;hpb=52a80eb3f81e1e4d8596164fe70d7ab8705d41eb;p=pulseview.git diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index 50cab69..d4c5f1f 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -62,7 +63,9 @@ #include using std::list; +using std::map; using std::shared_ptr; +using std::string; namespace pv { @@ -81,6 +84,7 @@ MainWindow::MainWindow(DeviceManager &device_manager, _session(device_manager) { setup_ui(); + restore_ui_settings(); if (open_file_name) { const QString s(QString::fromUtf8(open_file_name)); QMetaObject::invokeMethod(this, "load_file", @@ -93,8 +97,6 @@ void MainWindow::setup_ui() { setObjectName(QString::fromUtf8("MainWindow")); - resize(1024, 768); - // Set the window icon QIcon icon; icon.addFile(QString::fromUtf8(":/icons/sigrok-logo-notext.png"), @@ -240,6 +242,7 @@ void MainWindow::setup_ui() // Setup the toolbar QToolBar *const toolbar = new QToolBar(tr("Main Toolbar"), this); + toolbar->setObjectName(QString::fromUtf8("MainToolbar")); toolbar->addAction(action_open); toolbar->addAction(action_save_as); toolbar->addSeparator(); @@ -265,7 +268,89 @@ 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.get_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 = _session.get_device()->get_device_info(); + + 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")) { + 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) { + _session.set_device(device); + update_device_list(); + } + + settings.endGroup(); } void MainWindow::session_error( @@ -297,6 +382,12 @@ void MainWindow::update_device_list() _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(