X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fmainwindow.cpp;h=e79b045945c1b255c18826ce9ee77723adfbd949;hb=cf0a3c9c7a8763eeb4427e4fb6fe2c921ae38f09;hp=aa0bf94894f156c303dd094e936cbed8d9704fc7;hpb=c52493c97570bfef5e4efb50e9f115da562ecf06;p=pulseview.git diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index aa0bf948..e79b0459 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -399,10 +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_file_format, string open_setup_file_name) { shared_ptr session = add_session(); - session->load_init_file(open_file_name, open_file_format); + session->load_init_file(open_file_name, open_file_format, open_setup_file_name); } void MainWindow::add_default_session() @@ -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();