]> sigrok.org Git - pulseview.git/blobdiff - pv/mainwindow.cpp
Fix #1440 by moving shortcuts from the main window to the view
[pulseview.git] / pv / mainwindow.cpp
index d07d3316afb3632a5b9e828c122330851d5f9918..f0a4c0714f12075a9d5ff2e6ca317d8392859595 100644 (file)
 #include "devices/hardwaredevice.hpp"
 #include "dialogs/settings.hpp"
 #include "globalsettings.hpp"
-#include "subwindows/decoder_selector/subwindow.hpp"
 #include "toolbars/mainbar.hpp"
 #include "util.hpp"
 #include "views/trace/view.hpp"
 #include "views/trace/standardbar.hpp"
 
+#ifdef ENABLE_DECODE
+#include "subwindows/decoder_selector/subwindow.hpp"
+#endif
+
 #include <libsigrokcxx/libsigrokcxx.hpp>
 
 using std::dynamic_pointer_cast;
@@ -258,7 +261,7 @@ shared_ptr<subwindows::SubWindowBase> MainWindow::add_subwindow(
        shared_ptr<subwindows::SubWindowBase> v;
 
        QMainWindow *main_window = nullptr;
-       for (auto entry : session_windows_)
+       for (auto& entry : session_windows_)
                if (entry.first.get() == &session)
                        main_window = entry.second;
 
@@ -267,8 +270,13 @@ shared_ptr<subwindows::SubWindowBase> MainWindow::add_subwindow(
        QString title = "";
 
        switch (type) {
+#ifdef ENABLE_DECODE
                case subwindows::SubWindowTypeDecoderSelector:
                        title = tr("Decoder Selector");
+                       break;
+#endif
+               default:
+                       break;
        }
 
        QDockWidget* dock = new QDockWidget(title, main_window);
@@ -279,8 +287,10 @@ shared_ptr<subwindows::SubWindowBase> MainWindow::add_subwindow(
        QMainWindow *dock_main = new QMainWindow(dock);
        dock_main->setWindowFlags(Qt::Widget);  // Remove Qt::Window flag
 
+#ifdef ENABLE_DECODE
        if (type == subwindows::SubWindowTypeDecoderSelector)
                v = make_shared<subwindows::decoder_selector::SubWindow>(session, dock_main);
+#endif
 
        if (!v)
                return nullptr;
@@ -294,7 +304,7 @@ shared_ptr<subwindows::SubWindowBase> MainWindow::add_subwindow(
                QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetClosable);
 
        QAbstractButton *close_btn =
-               dock->findChildren<QAbstractButton*>
+               dock->findChildren<QAbstractButton*>  // clazy:exclude=detaching-temporary
                        ("qt_dockwidget_closebutton").front();
 
        connect(close_btn, SIGNAL(clicked(bool)),
@@ -303,6 +313,9 @@ shared_ptr<subwindows::SubWindowBase> MainWindow::add_subwindow(
        if (v->has_toolbar())
                dock_main->addToolBar(v->create_toolbar(dock_main));
 
+       if (v->minimum_width() > 0)
+               dock->setMinimumSize(v->minimum_width(), 0);
+
        return v;
 }
 
@@ -386,10 +399,10 @@ void MainWindow::remove_session(shared_ptr<Session> 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> 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()
@@ -486,6 +499,7 @@ void MainWindow::setup_ui()
        icon.addFile(QString(":/icons/pulseview.png"));
        setWindowIcon(icon);
 
+       // Set up keyboard shortcuts that affect all views at once
        view_sticky_scrolling_shortcut_ = new QShortcut(QKeySequence(Qt::Key_S), this, SLOT(on_view_sticky_scrolling_shortcut()));
        view_sticky_scrolling_shortcut_->setAutoRepeat(false);
 
@@ -588,6 +602,19 @@ void MainWindow::restore_ui_settings()
        settings.endGroup();
 }
 
+void MainWindow::zoom_current_view(double steps)
+{
+       shared_ptr<Session> session = get_tab_session(session_selector_.currentIndex());
+
+       if (!session)
+               return;
+
+       shared_ptr<views::ViewBase> v = session.get()->main_view();
+       views::trace::View *tv =
+               qobject_cast<views::trace::View*>(v.get());
+       tv->zoom(steps);
+}
+
 shared_ptr<Session> MainWindow::get_tab_session(int index) const
 {
        // Find the session that belongs to the tab's main window
@@ -824,10 +851,14 @@ void MainWindow::on_tab_close_requested(int index)
 
 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<subwindows::decoder_selector::SubWindow>(entry.second)) {
+               shared_ptr<subwindows::SubWindowBase> decoder_selector =
+                       dynamic_pointer_cast<subwindows::decoder_selector::SubWindow>(entry.second);
+
+               if (decoder_selector && (&decoder_selector->session() == session)) {
                        sub_windows_.erase(dock);
                        dock->close();
                        return;
@@ -835,9 +866,10 @@ void MainWindow::on_show_decoder_selector(Session *session)
        }
 
        // We get a pointer and need a reference
-       for (shared_ptr<Session> s : sessions_)
+       for (shared_ptr<Session>& s : sessions_)
                if (s.get() == session)
                        add_subwindow(subwindows::SubWindowTypeDecoderSelector, *s);
+#endif
 }
 
 void MainWindow::on_sub_window_close_clicked()