X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=mainwindow.cpp;h=54cc39ecea17cfe9d0fc412981d40e62f5db1fd0;hp=bf9711f29167803f657ce1dffcf5ba027cfe47be;hb=a8d3fb2df629023bb80b60cefb35c90b859206f8;hpb=30236a549137e5f183e19fb696c50d7150fc1124 diff --git a/mainwindow.cpp b/mainwindow.cpp index bf9711f2..54cc39ec 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -22,10 +22,20 @@ extern "C" { #include } -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "about.h" #include "mainwindow.h" -#include "ui_mainwindow.h" +#include "samplingbar.h" +#include "sigview.h" extern "C" { /* __STDC_FORMAT_MACROS is required for PRIu64 and friends (in C++). */ @@ -38,66 +48,128 @@ extern "C" { } MainWindow::MainWindow(QWidget *parent) : - QMainWindow(parent), - ui(new Ui::MainWindow) + QMainWindow(parent) { - ui->setupUi(this); + setup_ui(); } -MainWindow::~MainWindow() +void MainWindow::setup_ui() { - delete ui; + setObjectName(QString::fromUtf8("MainWindow")); + + resize(1024, 768); + + // Set the window icon + QIcon icon; + icon.addFile(QString::fromUtf8(":/icons/sigrok-logo-notext.png"), + QSize(), QIcon::Normal, QIcon::Off); + setWindowIcon(icon); + + // Setup the UI actions + _action_about = new QAction(this); + _action_about->setObjectName(QString::fromUtf8("actionAbout")); + + _action_view_zoom_in = new QAction(this); + _action_view_zoom_in->setIcon(QIcon::fromTheme("zoom-in")); + _action_view_zoom_in->setObjectName(QString::fromUtf8("actionViewZoomIn")); + + _action_view_zoom_out = new QAction(this); + _action_view_zoom_out->setIcon(QIcon::fromTheme("zoom-out")); + _action_view_zoom_out->setObjectName(QString::fromUtf8("actionViewZoomOut")); + + _action_open = new QAction(this); + _action_open->setIcon(QIcon::fromTheme("document-open")); + _action_open->setObjectName(QString::fromUtf8("actionOpen")); + + // Setup the menu bar + _menu_bar = new QMenuBar(this); + _menu_bar->setGeometry(QRect(0, 0, 400, 25)); + + _menu_file = new QMenu(_menu_bar); + _menu_file->addAction(_action_open); + + _menu_view = new QMenu(_menu_bar); + _menu_view->addAction(_action_view_zoom_in); + _menu_view->addAction(_action_view_zoom_out); + + _menu_help = new QMenu(_menu_bar); + _menu_help->addAction(_action_about); + + _menu_bar->addAction(_menu_file->menuAction()); + _menu_bar->addAction(_menu_view->menuAction()); + _menu_bar->addAction(_menu_help->menuAction()); + + setMenuBar(_menu_bar); + QMetaObject::connectSlotsByName(this); + + // Setup the toolbars + _toolbar = new QToolBar(this); + _toolbar->addAction(_action_open); + _toolbar->addSeparator(); + _toolbar->addAction(_action_view_zoom_in); + _toolbar->addAction(_action_view_zoom_out); + addToolBar(_toolbar); + + _sampling_bar = new SamplingBar(this); + connect(_sampling_bar, SIGNAL(run_stop()), this, + SLOT(run_stop())); + addToolBar(_sampling_bar); + + // Setup the central widget + _central_widget = new QWidget(this); + _vertical_layout = new QVBoxLayout(_central_widget); + _vertical_layout->setSpacing(6); + _vertical_layout->setContentsMargins(0, 0, 0, 0); + setCentralWidget(_central_widget); + + // Setup the status bar + _status_bar = new QStatusBar(this); + setStatusBar(_status_bar); + + setWindowTitle(QApplication::translate("MainWindow", "PulseView", 0, + QApplication::UnicodeUTF8)); + + _action_open->setText(QApplication::translate("MainWindow", "&Open...", 0, QApplication::UnicodeUTF8)); + _action_view_zoom_in->setText(QApplication::translate("MainWindow", "Zoom &In", 0, QApplication::UnicodeUTF8)); + _action_view_zoom_out->setText(QApplication::translate("MainWindow", "Zoom &Out", 0, QApplication::UnicodeUTF8)); + _action_about->setText(QApplication::translate("MainWindow", "&About...", 0, QApplication::UnicodeUTF8)); + + _menu_file->setTitle(QApplication::translate("MainWindow", "&File", 0, QApplication::UnicodeUTF8)); + _menu_view->setTitle(QApplication::translate("MainWindow", "&View", 0, QApplication::UnicodeUTF8)); + _menu_help->setTitle(QApplication::translate("MainWindow", "&Help", 0, QApplication::UnicodeUTF8)); + + _view = new SigView(_session, this); + _vertical_layout->addWidget(_view); +} + +void MainWindow::on_actionOpen_triggered() +{ + QString file_name = QFileDialog::getOpenFileName( + this, tr("Open File"), "", + tr("Sigrok Sessions (*.sr)")); + _session.load_file(file_name.toStdString()); +} + +void MainWindow::on_actionViewZoomIn_triggered() +{ + _view->zoom(1); +} + +void MainWindow::on_actionViewZoomOut_triggered() +{ + _view->zoom(-1); } void MainWindow::on_actionAbout_triggered() { - GSList *l; - struct sr_dev_driver **drivers; - struct sr_input_format **inputs; - struct sr_output_format **outputs; - struct srd_decoder *dec; - - QString s = tr("%1 %2
%3
%4\n

") - .arg(QApplication::applicationName()) - .arg(QApplication::applicationVersion()) - .arg(tr("GNU GPL, version 2 or later")) - .arg(QApplication::organizationDomain()); - - s.append("" + tr("Supported hardware drivers:") + ""); - drivers = sr_driver_list(); - for (int i = 0; drivers[i]; ++i) { - s.append(QString("") - .arg(QString(drivers[i]->name)) - .arg(QString(drivers[i]->longname))); - } - s.append("
%1%2

"); - - s.append("" + tr("Supported input formats:") + ""); - inputs = sr_input_list(); - for (int i = 0; inputs[i]; ++i) { - s.append(QString("") - .arg(QString(inputs[i]->id)) - .arg(QString(inputs[i]->description))); - } - s.append("
%1%2

"); - - s.append("" + tr("Supported output formats:") + ""); - outputs = sr_output_list(); - for (int i = 0; outputs[i]; ++i) { - s.append(QString("") - .arg(QString(outputs[i]->id)) - .arg(QString(outputs[i]->description))); - } - s.append("
%1%2

"); - - s.append("" + tr("Supported protocol decoders:") + ""); - for (l = srd_decoder_list(); l; l = l->next) { - dec = (struct srd_decoder *)l->data; - s.append(QString("") - .arg(QString(dec->id)) - .arg(QString(dec->longname))); - } - s.append("
%1%2
"); - - QMessageBox::about(this, tr("About"), s); + About dlg(this); + dlg.exec(); +} + +void MainWindow::run_stop() +{ + _session.start_capture( + _sampling_bar->get_selected_device(), + _sampling_bar->get_record_length(), + _sampling_bar->get_sample_rate()); }