X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fmainwindow.cpp;h=2a4ebc251746e37c156e4ee028c7b640b1921b74;hp=ca514bf97a703eba3e7a8bc56dbebd23467c439a;hb=d29059343817896931df3cfce2b34ec5fcc7818b;hpb=363107a8c9f33d8aeebd9ee8d56f90af87c73ea2 diff --git a/pv/mainwindow.cpp b/pv/mainwindow.cpp index ca514bf9..2a4ebc25 100644 --- a/pv/mainwindow.cpp +++ b/pv/mainwindow.cpp @@ -19,7 +19,7 @@ */ #ifdef ENABLE_SIGROKDECODE -#include +#include #endif #include @@ -41,6 +41,7 @@ #include "devicemanager.h" #include "dialogs/about.h" #include "dialogs/connect.h" +#include "toolbars/contextbar.h" #include "toolbars/samplingbar.h" #include "view/view.h" @@ -52,15 +53,21 @@ #include #include +using namespace boost; using namespace std; namespace pv { +namespace view { +class SelectableItem; +} + MainWindow::MainWindow(DeviceManager &device_manager, const char *open_file_name, QWidget *parent) : QMainWindow(parent), - _device_manager(device_manager) + _device_manager(device_manager), + _session(device_manager) { setup_ui(); if (open_file_name) { @@ -91,6 +98,9 @@ void MainWindow::setup_ui() setCentralWidget(_central_widget); _view = new pv::view::View(_session, this); + connect(_view, SIGNAL(selection_changed()), this, + SLOT(view_selection_changed())); + _vertical_layout->addWidget(_view); // Setup the menu bar @@ -203,6 +213,10 @@ void MainWindow::setup_ui() SLOT(run_stop())); addToolBar(_sampling_bar); + // Setup the context bar + _context_bar = new toolbars::ContextBar(this); + addToolBar(_context_bar); + // Set the title setWindowTitle(QApplication::translate("MainWindow", "PulseView", 0, QApplication::UnicodeUTF8)); @@ -268,20 +282,29 @@ void MainWindow::show_session_error( void MainWindow::on_actionOpen_triggered() { + // Enumerate the file formats + QString filters(tr("Sigrok Sessions (*.sr)")); + filters.append(tr(";;All Files (*.*)")); + + // Show the dialog const QString file_name = QFileDialog::getOpenFileName( - this, tr("Open File"), "", - tr("Sigrok Sessions (*.sr)")); + this, tr("Open File"), "", filters); if (!file_name.isEmpty()) load_file(file_name); } void MainWindow::on_actionConnect_triggered() { + // Stop any currently running capture session + _session.stop_capture(); + dialogs::Connect dlg(this, _device_manager); - if (!dlg.exec()) - return; - struct sr_dev_inst *const sdi = dlg.get_selected_device(); + // If the user selected a device, select it in the device list. Select the + // current device otherwise. + struct sr_dev_inst *const sdi = dlg.exec() ? + dlg.get_selected_device() : _session.get_device(); + update_device_list(sdi); } @@ -331,6 +354,7 @@ void MainWindow::run_stop() QString("Capture failed"), _1)); break; + case SigSession::AwaitingTrigger: case SigSession::Running: _session.stop_capture(); break; @@ -339,7 +363,16 @@ void MainWindow::run_stop() void MainWindow::capture_state_changed(int state) { - _sampling_bar->set_sampling(state != SigSession::Stopped); + _sampling_bar->set_capture_state((pv::SigSession::capture_state)state); +} + +void MainWindow::view_selection_changed() +{ + assert(_context_bar); + + const list > items( + _view->selected_items()); + _context_bar->set_selected_items(items); } } // namespace pv