X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fmainwindow.cpp;h=d4c5f1f79ed27111c17bcbe9bee6a97902d4a7e8;hp=165d3a705db17551fcc1070da6a559c1daea2577;hb=6842b5fc481eb43d9aeea81f17e211820d6dc405;hpb=643f65f96d3996c32569e9ee7cd4aa29adc2819a diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index 165d3a70..d4c5f1f7 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include + #ifdef ENABLE_DECODE #include #endif @@ -28,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -60,7 +63,9 @@ #include using std::list; +using std::map; using std::shared_ptr; +using std::string; namespace pv { @@ -79,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", @@ -91,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"), @@ -116,12 +120,10 @@ void MainWindow::setup_ui() // File Menu QMenu *const menu_file = new QMenu; - menu_file->setTitle(QApplication::translate( - "MainWindow", "&File", 0, QApplication::UnicodeUTF8)); + menu_file->setTitle(tr("&File")); QAction *const action_open = new QAction(this); - action_open->setText(QApplication::translate( - "MainWindow", "&Open...", 0, QApplication::UnicodeUTF8)); + action_open->setText(tr("&Open...")); action_open->setIcon(QIcon::fromTheme("document-open", QIcon(":/icons/document-open.png"))); action_open->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O)); @@ -129,8 +131,7 @@ void MainWindow::setup_ui() menu_file->addAction(action_open); QAction *const action_save_as = new QAction(this); - action_save_as->setText(QApplication::translate( - "MainWindow", "&Save As...", 0, QApplication::UnicodeUTF8)); + action_save_as->setText(tr("&Save As...")); action_save_as->setIcon(QIcon::fromTheme("document-save-as", QIcon(":/icons/document-save-as.png"))); action_save_as->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_S)); @@ -140,17 +141,14 @@ void MainWindow::setup_ui() menu_file->addSeparator(); QAction *const action_connect = new QAction(this); - action_connect->setText(QApplication::translate( - "MainWindow", "&Connect to Device...", 0, - QApplication::UnicodeUTF8)); + action_connect->setText(tr("&Connect to Device...")); action_connect->setObjectName(QString::fromUtf8("actionConnect")); menu_file->addAction(action_connect); menu_file->addSeparator(); QAction *action_quit = new QAction(this); - action_quit->setText(QApplication::translate( - "MainWindow", "&Quit", 0, QApplication::UnicodeUTF8)); + action_quit->setText(tr("&Quit")); action_quit->setIcon(QIcon::fromTheme("application-exit", QIcon(":/icons/application-exit.png"))); action_quit->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q)); @@ -159,12 +157,10 @@ void MainWindow::setup_ui() // View Menu QMenu *menu_view = new QMenu; - menu_view->setTitle(QApplication::translate( - "MainWindow", "&View", 0, QApplication::UnicodeUTF8)); + menu_view->setTitle(tr("&View")); QAction *const action_view_zoom_in = new QAction(this); - action_view_zoom_in->setText(QApplication::translate( - "MainWindow", "Zoom &In", 0, QApplication::UnicodeUTF8)); + action_view_zoom_in->setText(tr("Zoom &In")); action_view_zoom_in->setIcon(QIcon::fromTheme("zoom-in", QIcon(":/icons/zoom-in.png"))); // simply using Qt::Key_Plus shows no + in the menu @@ -174,8 +170,7 @@ void MainWindow::setup_ui() menu_view->addAction(action_view_zoom_in); QAction *const action_view_zoom_out = new QAction(this); - action_view_zoom_out->setText(QApplication::translate( - "MainWindow", "Zoom &Out", 0, QApplication::UnicodeUTF8)); + action_view_zoom_out->setText(tr("Zoom &Out")); action_view_zoom_out->setIcon(QIcon::fromTheme("zoom-out", QIcon(":/icons/zoom-out.png"))); action_view_zoom_out->setShortcut(QKeySequence::ZoomOut); @@ -184,8 +179,7 @@ void MainWindow::setup_ui() menu_view->addAction(action_view_zoom_out); QAction *const action_view_zoom_fit = new QAction(this); - action_view_zoom_fit->setText(QApplication::translate( - "MainWindow", "Zoom to &Fit", 0, QApplication::UnicodeUTF8)); + action_view_zoom_fit->setText(tr("Zoom to &Fit")); action_view_zoom_fit->setIcon(QIcon::fromTheme("zoom-fit", QIcon(":/icons/zoom-fit.png"))); action_view_zoom_fit->setShortcut(QKeySequence(Qt::Key_F)); @@ -194,9 +188,7 @@ void MainWindow::setup_ui() menu_view->addAction(action_view_zoom_fit); QAction *const action_view_zoom_one_to_one = new QAction(this); - action_view_zoom_one_to_one->setText(QApplication::translate( - "MainWindow", "Zoom to &One-to-One", 0, - QApplication::UnicodeUTF8)); + action_view_zoom_one_to_one->setText(tr("Zoom to &One-to-One")); action_view_zoom_one_to_one->setIcon(QIcon::fromTheme("zoom-original", QIcon(":/icons/zoom-original.png"))); action_view_zoom_one_to_one->setShortcut(QKeySequence(Qt::Key_O)); @@ -212,20 +204,17 @@ void MainWindow::setup_ui() action_view_show_cursors->setShortcut(QKeySequence(Qt::Key_C)); action_view_show_cursors->setObjectName( QString::fromUtf8("actionViewShowCursors")); - action_view_show_cursors->setText(QApplication::translate( - "MainWindow", "Show &Cursors", 0, QApplication::UnicodeUTF8)); + action_view_show_cursors->setText(tr("Show &Cursors")); menu_view->addAction(action_view_show_cursors); // Decoders Menu #ifdef ENABLE_DECODE QMenu *const menu_decoders = new QMenu; - menu_decoders->setTitle(QApplication::translate( - "MainWindow", "&Decoders", 0, QApplication::UnicodeUTF8)); + menu_decoders->setTitle(tr("&Decoders")); pv::widgets::DecoderMenu *const menu_decoders_add = new pv::widgets::DecoderMenu(menu_decoders, true); - menu_decoders_add->setTitle(QApplication::translate( - "MainWindow", "&Add", 0, QApplication::UnicodeUTF8)); + menu_decoders_add->setTitle(tr("&Add")); connect(menu_decoders_add, SIGNAL(decoder_selected(srd_decoder*)), this, SLOT(add_decoder(srd_decoder*))); @@ -234,13 +223,11 @@ void MainWindow::setup_ui() // Help Menu QMenu *const menu_help = new QMenu; - menu_help->setTitle(QApplication::translate( - "MainWindow", "&Help", 0, QApplication::UnicodeUTF8)); + menu_help->setTitle(tr("&Help")); QAction *const action_about = new QAction(this); action_about->setObjectName(QString::fromUtf8("actionAbout")); - action_about->setText(QApplication::translate( - "MainWindow", "&About...", 0, QApplication::UnicodeUTF8)); + action_about->setText(tr("&About...")); menu_help->addAction(action_about); menu_bar->addAction(menu_file->menuAction()); @@ -255,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(); @@ -275,13 +263,94 @@ void MainWindow::setup_ui() addToolBar(_sampling_bar); // Set the title - setWindowTitle(QApplication::translate("MainWindow", "PulseView", 0, - QApplication::UnicodeUTF8)); + setWindowTitle(tr("PulseView")); // 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( @@ -298,6 +367,10 @@ void MainWindow::update_device_list() shared_ptr selected_device = _session.get_device(); list< shared_ptr > devices; + + if (_device_manager.devices().size() == 0) + return; + std::copy(_device_manager.devices().begin(), _device_manager.devices().end(), std::back_inserter(devices)); @@ -309,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(