X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fmainwindow.cpp;h=8ab1a24b70b0f8ccf8c073231640880e93e3e28a;hp=d4d38b4dabcb0943f298d7885e1e3718a626eaed;hb=a45b9b9ee6f15da272c2e743122097e6696fc7b5;hpb=168bd8ac353d715257e7267dcf4eeb1aaef6365c diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index d4d38b4d..8ab1a24b 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -131,6 +131,16 @@ MainWindow::MainWindow(DeviceManager &device_manager, load_init_file(open_file_name, open_file_format); } +MainWindow::~MainWindow() +{ + for (auto entry : view_docks_) { + const std::shared_ptr dock = entry.first; + dock->setWidget(0); + const std::shared_ptr view = entry.second; + session_.deregister_view(view); + } +} + QAction* MainWindow::action_open() const { return action_open_; @@ -228,6 +238,43 @@ shared_ptr MainWindow::get_active_view() const return shared_ptr(); } +shared_ptr MainWindow::add_view(const QString &title, + view::ViewType type, Session &session) +{ + shared_ptr v; + + if (type == pv::view::TraceView) + v = make_shared(session, this); + + if (v) { + shared_ptr dock = make_shared(title, this); + dock->setWidget(v.get()); + dock->setObjectName(title); + addDockWidget(Qt::TopDockWidgetArea, dock.get()); + view_docks_[dock] = v; + + dock->setFeatures(QDockWidget::DockWidgetMovable | + QDockWidget::DockWidgetFloatable); + + if (type == view::TraceView) { + connect(&session, SIGNAL(trigger_event(util::Timestamp)), v.get(), + SLOT(trigger_event(util::Timestamp))); + connect(v.get(), SIGNAL(sticky_scrolling_changed(bool)), this, + SLOT(sticky_scrolling_changed(bool))); + connect(v.get(), SIGNAL(always_zoom_to_fit_changed(bool)), this, + SLOT(always_zoom_to_fit_changed(bool))); + + v->enable_sticky_scrolling(action_view_sticky_scrolling_->isChecked()); + v->enable_coloured_bg(action_view_coloured_bg_->isChecked()); + action_view_show_cursors_->setChecked(v->cursors_shown()); + } + + session.register_view(v); + } + + return v; +} + void MainWindow::run_stop() { switch (session_.get_capture_state()) { @@ -389,16 +436,9 @@ void MainWindow::setup_ui() // Set the window icon QIcon icon; - icon.addFile(QString(":/icons/sigrok-logo-notext.svg")); + icon.addFile(QString(":/icons/sigrok-logo-notext.png")); setWindowIcon(icon); - // Set up the initial view - shared_ptr view = make_shared(session_, this); - shared_ptr dock = make_shared(tr("Untitled"), this); - dock->setWidget(view.get()); - addDockWidget(Qt::TopDockWidgetArea, dock.get()); - view_docks_[dock] = view; - // Setup the menu bar pv::widgets::HidingMenuBar *const menu_bar = new pv::widgets::HidingMenuBar(this); @@ -509,10 +549,6 @@ void MainWindow::setup_ui() action_view_sticky_scrolling_->setText(tr("&Sticky Scrolling")); menu_view->addAction(action_view_sticky_scrolling_); - // TODO: Refactor this into a "new view" method - if (view) - view->enable_sticky_scrolling(action_view_sticky_scrolling_->isChecked()); - menu_view->addSeparator(); action_view_coloured_bg_->setCheckable(true); @@ -523,10 +559,6 @@ void MainWindow::setup_ui() action_view_coloured_bg_->setText(tr("Use &coloured backgrounds")); menu_view->addAction(action_view_coloured_bg_); - // TODO: Refactor this into a "new view" method - if (view) - view->enable_coloured_bg(action_view_coloured_bg_->isChecked()); - menu_view->addSeparator(); action_view_show_cursors_->setCheckable(true); @@ -538,10 +570,6 @@ void MainWindow::setup_ui() action_view_show_cursors_->setText(tr("Show &Cursors")); menu_view->addAction(action_view_show_cursors_); - // TODO: Refactor this into a "new view" method - if (view) - action_view_show_cursors_->setChecked(view->cursors_shown()); - // Decoders Menu #ifdef ENABLE_DECODE QMenu *const menu_decoders = new QMenu; @@ -579,6 +607,9 @@ void MainWindow::setup_ui() // Setup the toolbar main_bar_ = new toolbars::MainBar(session_, *this); + // Set up the initial view + add_view(tr("Untitled"), pv::view::TraceView, session_); + // Populate the device list and select the initially selected device update_device_list(); @@ -592,16 +623,6 @@ void MainWindow::setup_ui() SLOT(capture_state_changed(int))); connect(&session_, SIGNAL(device_selected()), this, SLOT(device_selected())); - - // TODO: Refactor this into a "new view" method - if (view) { - connect(&session_, SIGNAL(trigger_event(util::Timestamp)), view.get(), - SLOT(trigger_event(util::Timestamp))); - connect(view.get(), SIGNAL(sticky_scrolling_changed(bool)), this, - SLOT(sticky_scrolling_changed(bool))); - connect(view.get(), SIGNAL(always_zoom_to_fit_changed(bool)), this, - SLOT(always_zoom_to_fit_changed(bool))); - } } void MainWindow::select_init_device()