From: Soeren Apel Date: Sun, 9 Oct 2016 18:55:19 +0000 (+0200) Subject: MainWindow: Update session tab when focusing a different view X-Git-Tag: pulseview-0.4.0~233 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=e7aff437662e4a7dc891952bcb632d67c457d689;p=pulseview.git MainWindow: Update session tab when focusing a different view --- diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index 53ff35a9..39ce7ed6 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -330,6 +330,8 @@ void MainWindow::setup_ui() connect(&session_selector_, SIGNAL(tabCloseRequested(int)), this, SLOT(on_tab_close_requested(int))); + connect(&session_selector_, SIGNAL(currentChanged(int)), + this, SLOT(on_tab_changed(int))); connect(static_cast(QCoreApplication::instance()), @@ -393,6 +395,16 @@ void MainWindow::restore_ui_settings() } } +std::shared_ptr MainWindow::get_tab_session(int index) const +{ + // Find the session that belongs to the tab's main window + for (auto entry : session_windows_) + if (entry.second == session_selector_.widget(index)) + return entry.first; + + return nullptr; +} + void MainWindow::closeEvent(QCloseEvent *event) { save_ui_settings(); @@ -426,23 +438,39 @@ void MainWindow::on_add_view(const QString &title, views::ViewType type, void MainWindow::on_focus_changed() { - shared_ptr view; - bool title_set = false; - - view = get_active_view(); - - for (shared_ptr session : sessions_) { - if (!session->has_view(view)) - continue; - - setWindowTitle(session->name() + " - " + WindowTitle); - title_set = true; + static shared_ptr prev_session; + + shared_ptr view = get_active_view(); + + if (view) { + for (shared_ptr session : sessions_) { + if (session->has_view(view)) { + if (session != prev_session) { + // Activate correct tab if necessary + shared_ptr tab_session = get_tab_session( + session_selector_.currentIndex()); + if (tab_session != session) + session_selector_.setCurrentWidget( + session_windows_.at(session)); + + on_focused_session_changed(session); + } + + prev_session = session; + break; + } + } } - if (!title_set) + if (sessions_.empty()) setWindowTitle(WindowTitle); } +void MainWindow::on_focused_session_changed(shared_ptr session) +{ + setWindowTitle(session->name() + " - " + WindowTitle); +} + void MainWindow::on_new_session_clicked() { add_session(); @@ -464,7 +492,10 @@ void MainWindow::on_session_name_changed() } // Refresh window title if the affected session has focus - on_focus_changed(); + shared_ptr view = get_active_view(); + + if (view && session->has_view(view)) + setWindowTitle(session->name() + " - " + WindowTitle); } void MainWindow::on_new_view(Session *session) @@ -509,16 +540,22 @@ void MainWindow::on_view_close_clicked() } } +void MainWindow::on_tab_changed(int index) +{ + shared_ptr session = get_tab_session(index); + + if (session) + on_focused_session_changed(session); +} + void MainWindow::on_tab_close_requested(int index) { // TODO Ask user if this is intended in case data is unsaved - // Find the session that belongs to this main window and remove it - for (auto entry : session_windows_) - if (entry.second == session_selector_.widget(index)) { - remove_session(entry.first); - break; - } + shared_ptr session = get_tab_session(index); + + if (session) + remove_session(session); } void MainWindow::on_actionViewStickyScrolling_triggered() diff --git a/pv/mainwindow.hpp b/pv/mainwindow.hpp index 8dfe1bd0..9d5b0412 100644 --- a/pv/mainwindow.hpp +++ b/pv/mainwindow.hpp @@ -90,6 +90,8 @@ private: void restore_ui_settings(); + std::shared_ptr get_tab_session(int index) const; + private: void closeEvent(QCloseEvent *event); @@ -102,12 +104,14 @@ private Q_SLOTS: Session *session); void on_focus_changed(); + void on_focused_session_changed(std::shared_ptr session); void on_new_session_clicked(); void on_session_name_changed(); void on_new_view(Session *session); void on_view_close_clicked(); + void on_tab_changed(int index); void on_tab_close_requested(int index); void on_actionViewStickyScrolling_triggered();