From ccf6a266d9b911075512b4de16fe2ce2c2e767c4 Mon Sep 17 00:00:00 2001 From: Miklos Marton Date: Wed, 10 Jul 2019 16:15:33 +0200 Subject: [PATCH] Add home and end shortcuts --- pv/mainwindow.cpp | 29 +++++++++++++++++++++++++++++ pv/mainwindow.hpp | 5 +++++ pv/views/trace/view.cpp | 12 ++++++++++++ pv/views/trace/view.hpp | 10 ++++++++++ 4 files changed, 56 insertions(+) diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index d04759cf..e33901a2 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -517,6 +517,12 @@ void MainWindow::setup_ui() zoom_out_shortcut_ = new QShortcut(QKeySequence(Qt::Key_Minus), this, SLOT(on_zoom_out_shortcut_triggered())); zoom_out_shortcut_->setAutoRepeat(false); + 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", @@ -978,6 +984,29 @@ 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(); diff --git a/pv/mainwindow.hpp b/pv/mainwindow.hpp index 6f2fded9..141e96e9 100644 --- a/pv/mainwindow.hpp +++ b/pv/mainwindow.hpp @@ -109,6 +109,7 @@ private: void restore_ui_settings(); void zoom_current_view(double steps); + void scroll_to_start_or_end(bool start); shared_ptr get_tab_session(int index) const; @@ -152,6 +153,8 @@ private Q_SLOTS: void on_zoom_out_shortcut_triggered(); void on_zoom_in_shortcut_triggered(); + void on_scroll_to_start_triggered(); + void on_scroll_to_end_triggered(); void on_close_current_tab(); @@ -184,6 +187,8 @@ private: QShortcut *close_current_tab_shortcut_; QShortcut *zoom_in_shortcut_; QShortcut *zoom_out_shortcut_; + QShortcut *home_shortcut_; + QShortcut *end_shortcut_; }; } // namespace pv diff --git a/pv/views/trace/view.cpp b/pv/views/trace/view.cpp index 56461e46..f2a3335e 100644 --- a/pv/views/trace/view.cpp +++ b/pv/views/trace/view.cpp @@ -510,6 +510,18 @@ void View::set_v_offset(int offset) viewport_->update(); } +void View::set_h_offset(int offset) +{ + scrollarea_->horizontalScrollBar()->setSliderPosition(offset); + header_->update(); + viewport_->update(); +} + +int View::get_h_scrollbar_maximum() const +{ + return scrollarea_->horizontalScrollBar()->maximum(); +} + unsigned int View::depth() const { return 0; diff --git a/pv/views/trace/view.hpp b/pv/views/trace/view.hpp index e056805b..a0e6f6bc 100644 --- a/pv/views/trace/view.hpp +++ b/pv/views/trace/view.hpp @@ -189,6 +189,16 @@ public: */ void set_v_offset(int offset); + /** + * Sets the visual h-offset. + */ + void set_h_offset(int offset); + + /** + * Gets the length of the horizontal scrollbar. + */ + int get_h_scrollbar_maximum() const; + /** * Returns the SI prefix to apply to the graticule time markings. */ -- 2.30.2