X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fmainwindow.cpp;h=500d2a435625cd20cde87f66f87c906c73cfa50a;hp=4aeecb260466c6a0885951f94a687dbe132058dc;hb=7b254679cb45fc4d032fe68c0797642a237f0fa6;hpb=5ccfc97e20bbea19b9bc37905dd4cf63ee1f6303 diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index 4aeecb26..500d2a43 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include "mainwindow.hpp" @@ -81,6 +82,7 @@ MainWindow::MainWindow(DeviceManager &device_manager, icon_grey_(":/icons/status-grey.svg") { qRegisterMetaType("util::Timestamp"); + qRegisterMetaType("uint64_t"); setup_ui(); restore_ui_settings(); @@ -213,6 +215,12 @@ shared_ptr MainWindow::add_view(const QString &title, this, SLOT(on_new_view(Session*))); main_bar->action_view_show_cursors()->setChecked(v->cursors_shown()); + + /* For the main view we need to prevent the dock widget from + * closing itself when its close button is clicked. This is + * so we can confirm with the user first. Regular views don't + * need this */ + close_btn->disconnect(SIGNAL(clicked()), dock, SLOT(close())); } else { /* Additional view, create a standard bar */ pv::views::trace::StandardBar *standard_bar = @@ -260,7 +268,7 @@ void MainWindow::remove_view(shared_ptr view) shared_ptr MainWindow::add_session() { static int last_session_id = 1; - QString name = tr("Untitled-%1").arg(last_session_id++); + QString name = tr("Session %1").arg(last_session_id++); shared_ptr session = make_shared(device_manager_, name); @@ -363,9 +371,11 @@ void MainWindow::setup_ui() run_stop_button_ = new QToolButton(); run_stop_button_->setAutoRaise(true); run_stop_button_->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - run_stop_button_->setShortcut(QKeySequence(Qt::Key_Space)); run_stop_button_->setToolTip(tr("Start/Stop Acquisition")); + run_stop_shortcut_ = new QShortcut(QKeySequence(Qt::Key_Space), run_stop_button_, SLOT(click())); + run_stop_shortcut_->setAutoRepeat(false); + settings_button_ = new QToolButton(); settings_button_->setIcon(QIcon::fromTheme("configure", QIcon(":/icons/configure.png"))); @@ -391,6 +401,11 @@ void MainWindow::setup_ui() session_selector_.setCornerWidget(static_tab_widget_, Qt::TopLeftCorner); session_selector_.setTabsClosable(true); + close_application_shortcut_ = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q), this, SLOT(close())); + close_application_shortcut_->setAutoRepeat(false); + + close_current_tab_shortcut_ = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this, SLOT(on_close_current_tab())); + connect(new_session_button_, SIGNAL(clicked(bool)), this, SLOT(on_new_session_clicked())); connect(run_stop_button_, SIGNAL(clicked(bool)), @@ -674,11 +689,16 @@ void MainWindow::on_view_close_clicked() if (!session->has_view(view)) continue; - // Also destroy the entire session if its main view is closing + // Also destroy the entire session if its main view is closing... if (view == session->main_view()) { - remove_session(session); + // ...but only if data is saved or the user confirms closing + if (session->data_saved() || (QMessageBox::question(this, tr("Confirmation"), + tr("This session contains unsaved data. Close it anyway?"), + QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)) + remove_session(session); break; } else + // All other views can be closed at any time as no data will be lost remove_view(view); } } @@ -727,4 +747,11 @@ void MainWindow::on_actionAbout_triggered() dlg.exec(); } +void MainWindow::on_close_current_tab() +{ + int tab = session_selector_.currentIndex(); + + on_tab_close_requested(tab); +} + } // namespace pv