X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fmainwindow.cpp;h=3889d480fb0d12e1c2fd4cab880161e2de1c09be;hb=e23d7aa0d9980c3c269cbddb4cfbb32350d7425c;hp=d7f5c31a3e78e11857ee149473c3ff0f5f763d9b;hpb=f1f3fa718b6ad2640dfb2fef1d7212b2ed450b71;p=pulseview.git diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index d7f5c31a..3889d480 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -40,6 +40,7 @@ #include "mainwindow.hpp" +#include "application.hpp" #include "devicemanager.hpp" #include "devices/hardwaredevice.hpp" #include "dialogs/settings.hpp" @@ -51,7 +52,8 @@ #ifdef ENABLE_DECODE #include "subwindows/decoder_selector/subwindow.hpp" -#include "views/decoder_output/view.hpp" +#include "views/decoder_binary/view.hpp" +#include "views/tabular_decoder/view.hpp" #endif #include @@ -161,8 +163,10 @@ shared_ptr MainWindow::add_view(views::ViewType type, // This view will be the main view if there's no main bar yet v = make_shared(session, (main_bar ? false : true), dock_main); #ifdef ENABLE_DECODE - if (type == views::ViewTypeDecoderOutput) - v = make_shared(session, false, dock_main); + if (type == views::ViewTypeDecoderBinary) + v = make_shared(session, false, dock_main); + if (type == views::ViewTypeTabularDecoder) + v = make_shared(session, false, dock_main); #endif if (!v) @@ -221,6 +225,8 @@ shared_ptr MainWindow::add_view(views::ViewType type, } } + v->setFocus(); + return v; } @@ -256,7 +262,7 @@ shared_ptr MainWindow::add_subwindow( subwindows::SubWindowType type, Session &session) { GlobalSettings settings; - shared_ptr v; + shared_ptr w; QMainWindow *main_window = nullptr; for (auto& entry : session_windows_) @@ -287,14 +293,14 @@ shared_ptr MainWindow::add_subwindow( #ifdef ENABLE_DECODE if (type == subwindows::SubWindowTypeDecoderSelector) - v = make_shared(session, dock_main); + w = make_shared(session, dock_main); #endif - if (!v) + if (!w) return nullptr; - sub_windows_[dock] = v; - dock_main->setCentralWidget(v.get()); + sub_windows_[dock] = w; + dock_main->setCentralWidget(w.get()); dock->setWidget(dock_main); dock->setContextMenuPolicy(Qt::PreventContextMenu); @@ -311,13 +317,13 @@ shared_ptr MainWindow::add_subwindow( connect(close_btn, SIGNAL(clicked(bool)), this, SLOT(on_sub_window_close_clicked())); - if (v->has_toolbar()) - dock_main->addToolBar(v->create_toolbar(dock_main)); + if (w->has_toolbar()) + dock_main->addToolBar(w->create_toolbar(dock_main)); - if (v->minimum_width() > 0) - dock->setMinimumSize(v->minimum_width(), 0); + if (w->minimum_width() > 0) + dock->setMinimumSize(w->minimum_width(), 0); - return v; + return w; } shared_ptr MainWindow::add_session() @@ -327,8 +333,8 @@ shared_ptr MainWindow::add_session() shared_ptr session = make_shared(device_manager_, name); - connect(session.get(), SIGNAL(add_view(views::ViewType, Session*)), - this, SLOT(on_add_view(views::ViewType, Session*))); + connect(session.get(), SIGNAL(add_view(ViewType, Session*)), + this, SLOT(on_add_view(ViewType, Session*))); connect(session.get(), SIGNAL(name_changed()), this, SLOT(on_session_name_changed())); connect(session.get(), SIGNAL(device_changed()), @@ -348,7 +354,7 @@ shared_ptr MainWindow::add_session() window->setDockNestingEnabled(true); - shared_ptr main_view = add_view(views::ViewTypeTrace, *session); + add_view(views::ViewTypeTrace, *session); return session; } @@ -566,10 +572,16 @@ void MainWindow::setup_ui() void MainWindow::update_acq_button(Session *session) { - int state = session->get_capture_state(); + int state; + QString run_caption; - const QString run_caption = - session->using_file_device() ? tr("Reload") : tr("Run"); + if (session) { + state = session->get_capture_state(); + run_caption = session->using_file_device() ? tr("Reload") : tr("Run"); + } else { + state = Session::Stopped; + run_caption = tr("Run"); + } const QIcon *icons[] = {&icon_grey_, &icon_red_, &icon_green_}; run_stop_button_->setIcon(*icons[state]); @@ -844,6 +856,9 @@ void MainWindow::on_tab_close_requested(int index) tr("This session contains unsaved data. Close it anyway?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)) remove_session(session); + + if (sessions_.empty()) + update_acq_button(nullptr); } void MainWindow::on_show_decoder_selector(Session *session) @@ -866,6 +881,8 @@ void MainWindow::on_show_decoder_selector(Session *session) for (shared_ptr& s : sessions_) if (s.get() == session) add_subwindow(subwindows::SubWindowTypeDecoderSelector, *s); +#else + (void)session; #endif } @@ -884,6 +901,10 @@ void MainWindow::on_sub_window_close_clicked() sub_windows_.erase(dock); dock->close(); + + // Restore focus to the last used main view + if (last_focused_session_) + last_focused_session_->main_view()->setFocus(); } void MainWindow::on_view_colored_bg_shortcut()