X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fmainwindow.cpp;h=0b68b1d7a9a9b2530bd58872b119f3ad5ae65fe2;hb=1fd847fedce2d8b93080ee7cd4d8c86aa916f6d2;hp=638d75b5179fbb63c2e0151d6c6d09ff215b95c5;hpb=611c86259f66dd1766b10b1e1b671b0fadd51fe2;p=pulseview.git diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index 638d75b5..0b68b1d7 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -261,7 +261,7 @@ shared_ptr MainWindow::add_subwindow( shared_ptr v; QMainWindow *main_window = nullptr; - for (auto entry : session_windows_) + for (auto& entry : session_windows_) if (entry.first.get() == &session) main_window = entry.second; @@ -304,7 +304,7 @@ shared_ptr MainWindow::add_subwindow( QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetClosable); QAbstractButton *close_btn = - dock->findChildren + dock->findChildren // clazy:exclude=detaching-temporary ("qt_dockwidget_closebutton").front(); connect(close_btn, SIGNAL(clicked(bool)), @@ -399,13 +399,10 @@ void MainWindow::remove_session(shared_ptr session) } void MainWindow::add_session_with_file(string open_file_name, - string open_file_format, - string open_setup_file_name) + string open_file_format, string open_setup_file_name) { shared_ptr session = add_session(); - session->load_init_file(open_file_name, - open_file_format, - open_setup_file_name); + session->load_init_file(open_file_name, open_file_format, open_setup_file_name); } void MainWindow::add_default_session() @@ -514,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", @@ -604,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 @@ -842,9 +868,12 @@ void MainWindow::on_show_decoder_selector(Session *session) { #ifdef ENABLE_DECODE // Close dock widget if it's already showing and return - for (auto entry : sub_windows_) { + 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; @@ -852,7 +881,7 @@ void MainWindow::on_show_decoder_selector(Session *session) } // We get a pointer and need a reference - for (shared_ptr s : sessions_) + for (shared_ptr& s : sessions_) if (s.get() == session) add_subwindow(subwindows::SubWindowTypeDecoderSelector, *s); #endif @@ -952,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();