#include <QMessageBox>
#include <QSettings>
#include <QWidget>
+#include <QShortcut>
#include "mainwindow.hpp"
icon_grey_(":/icons/status-grey.svg")
{
qRegisterMetaType<util::Timestamp>("util::Timestamp");
+ qRegisterMetaType<uint64_t>("uint64_t");
setup_ui();
restore_ui_settings();
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 =
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")));
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)),
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);
}
}
dlg.exec();
}
+void MainWindow::on_close_current_tab()
+{
+ int tab = session_selector_.currentIndex();
+
+ on_tab_close_requested(tab);
+}
+
} // namespace pv