X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=pv%2Fmainwindow.cpp;h=a04396234c72efda44d4592c641500275f4b82da;hb=68ad932d712f9a59be529d5283b95617e6da1e28;hp=2f82cb19ca2c2fbea2ef67acf9e051e47cd6c51e;hpb=3b84fd0b5f02dedfb6f7160477a63467b613c502;p=pulseview.git diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index 2f82cb1..a043962 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -146,7 +146,7 @@ shared_ptr MainWindow::get_active_view() const // Get the view contained in the dock widget for (auto entry : view_docks_) - if (entry.first.get() == dock) + if (entry.first == dock) return entry.second; return nullptr; @@ -163,12 +163,12 @@ shared_ptr MainWindow::add_view(const QString &title, assert(main_window); if (type == views::ViewTypeTrace) { - shared_ptr dock = make_shared(title, main_window); + QDockWidget* dock = new QDockWidget(title, main_window); dock->setObjectName(title); - main_window->addDockWidget(Qt::TopDockWidgetArea, dock.get()); + main_window->addDockWidget(Qt::TopDockWidgetArea, dock); // Insert a QMainWindow into the dock widget to allow for a tool bar - QMainWindow *dock_main = new QMainWindow(dock.get()); + QMainWindow *dock_main = new QMainWindow(dock); dock_main->setWindowFlags(Qt::Widget); // Remove Qt::Window flag shared_ptr v = @@ -239,6 +239,8 @@ shared_ptr MainWindow::add_session() session_windows_[session] = window; session_selector_.addTab(window, name); + window->setDockNestingEnabled(true); + shared_ptr main_view = add_view(name, views::ViewTypeTrace, *session); @@ -307,7 +309,10 @@ void MainWindow::setup_ui() action_about_->setObjectName(QString::fromUtf8("actionAbout")); action_about_->setText(tr("&About...")); - setDockNestingEnabled(true); + session_selector_.setTabsClosable(true); + + connect(&session_selector_, SIGNAL(tabCloseRequested(int)), + this, SLOT(on_tab_close_requested(int))); connect(static_cast(QCoreApplication::instance()), SIGNAL(focusChanged(QWidget*, QWidget*)), @@ -469,7 +474,7 @@ void MainWindow::on_view_close_clicked() shared_ptr view; for (auto entry : view_docks_) - if (entry.first.get() == dock) + if (entry.first == dock) view = entry.second; // Deregister the view @@ -486,6 +491,18 @@ void MainWindow::on_view_close_clicked() } } +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; + } +} + void MainWindow::on_actionViewStickyScrolling_triggered() { shared_ptr viewbase = get_active_view();