X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fmainwindow.cpp;h=e79b045945c1b255c18826ce9ee77723adfbd949;hb=93dbad3ed4954c3e0c140c26e867bda219cd683f;hp=fb749f5701724e37be0fffae8d55c3edd3d22a7e;hpb=96dbf014dad1309d4ade9c14a8b46733e2f531c8;p=pulseview.git diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index fb749f57..e79b0459 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -511,6 +511,22 @@ void MainWindow::setup_ui() view_colored_bg_shortcut_ = new QShortcut(QKeySequence(Qt::Key_B), this, SLOT(on_view_colored_bg_shortcut())); view_colored_bg_shortcut_->setAutoRepeat(false); + zoom_in_shortcut_ = new QShortcut(QKeySequence(Qt::Key_Plus), this, SLOT(on_zoom_in_shortcut_triggered())); + zoom_in_shortcut_->setAutoRepeat(false); + + zoom_in_shortcut_2_ = new QShortcut(QKeySequence(Qt::Key_Up), this, SLOT(on_zoom_in_shortcut_triggered())); + + zoom_out_shortcut_ = new QShortcut(QKeySequence(Qt::Key_Minus), this, SLOT(on_zoom_out_shortcut_triggered())); + zoom_out_shortcut_->setAutoRepeat(false); + + zoom_out_shortcut_2_ = new QShortcut(QKeySequence(Qt::Key_Down), this, SLOT(on_zoom_out_shortcut_triggered())); + + home_shortcut_ = new QShortcut(QKeySequence(Qt::Key_Home), this, SLOT(on_scroll_to_start_triggered())); + home_shortcut_->setAutoRepeat(false); + + end_shortcut_ = new QShortcut(QKeySequence(Qt::Key_End), this, SLOT(on_scroll_to_end_triggered())); + end_shortcut_->setAutoRepeat(false); + // Set up the tab area new_session_button_ = new QToolButton(); new_session_button_->setIcon(QIcon::fromTheme("document-new", @@ -601,6 +617,19 @@ void MainWindow::restore_ui_settings() settings.endGroup(); } +void MainWindow::zoom_current_view(double steps) +{ + shared_ptr session = get_tab_session(session_selector_.currentIndex()); + + if (!session) + return; + + shared_ptr v = session.get()->main_view(); + views::trace::View *tv = + qobject_cast(v.get()); + tv->zoom(steps); +} + shared_ptr MainWindow::get_tab_session(int index) const { // Find the session that belongs to the tab's main window @@ -841,7 +870,10 @@ void MainWindow::on_show_decoder_selector(Session *session) // Close dock widget if it's already showing and return for (auto entry : sub_windows_) { QDockWidget* dock = entry.first; - if (dynamic_pointer_cast(entry.second)) { + shared_ptr decoder_selector = + dynamic_pointer_cast(entry.second); + + if (decoder_selector && (&decoder_selector->session() == session)) { sub_windows_.erase(dock); dock->close(); return; @@ -949,6 +981,39 @@ void MainWindow::on_settingViewShowAnalogMinorGrid_changed(const QVariant new_va } } +void MainWindow::on_zoom_out_shortcut_triggered() +{ + zoom_current_view(-1); +} + +void MainWindow::on_zoom_in_shortcut_triggered() +{ + zoom_current_view(1); +} + +void MainWindow::on_scroll_to_start_triggered() +{ + scroll_to_start_or_end(true); +} + +void MainWindow::on_scroll_to_end_triggered() +{ + scroll_to_start_or_end(false); +} + +void MainWindow::scroll_to_start_or_end(bool start) +{ + shared_ptr session = get_tab_session(session_selector_.currentIndex()); + + if (!session) + return; + + shared_ptr v = session.get()->main_view(); + views::trace::View *tv = + qobject_cast(v.get()); + tv->set_h_offset(start ? 0 : tv->get_h_scrollbar_maximum()); +} + void MainWindow::on_close_current_tab() { int tab = session_selector_.currentIndex();