X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=pv%2Fviews%2Fdecoder_output%2Fview.cpp;h=5c3b031dec55f4c7dbd6f56d551ad1b58ee4cc77;hb=01ba5ed7e7094dead8002ee430d67bde106f8835;hp=e6e42cbb965f2d11fcf3d5183a47f6889f981752;hpb=2bdc5796c866b9494b2c40051e973e4385d9c46f;p=pulseview.git diff --git a/pv/views/decoder_output/view.cpp b/pv/views/decoder_output/view.cpp index e6e42cbb..5c3b031d 100644 --- a/pv/views/decoder_output/view.cpp +++ b/pv/views/decoder_output/view.cpp @@ -19,14 +19,18 @@ #include +#include #include +#include #include #include "view.hpp" +#include "QHexView.hpp" #include "pv/session.hpp" #include "pv/util.hpp" +using pv::data::SignalBase; using pv::util::TimeUnit; using pv::util::Timestamp; @@ -36,14 +40,37 @@ namespace pv { namespace views { namespace decoder_output { -View::View(Session &session, bool is_main_view, QWidget *parent) : - ViewBase(session, is_main_view, parent) +View::View(Session &session, bool is_main_view, QMainWindow *parent) : + ViewBase(session, is_main_view, parent), // Note: Place defaults in View::reset_view_state(), not here + signal_selector_(new QComboBox()), + format_selector_(new QComboBox()), + stacked_widget_(new QStackedWidget()), + hex_view_(new QHexView()) { QVBoxLayout *root_layout = new QVBoxLayout(this); root_layout->setContentsMargins(0, 0, 0, 0); + // Create toolbar + QToolBar* toolbar = new QToolBar(); + toolbar->setContextMenuPolicy(Qt::PreventContextMenu); + parent->addToolBar(toolbar); + + // Populate toolbar + toolbar->addWidget(new QLabel(tr("Decoder:"))); + toolbar->addWidget(signal_selector_); + toolbar->addSeparator(); + toolbar->addWidget(new QLabel(tr("Show data as"))); + toolbar->addWidget(format_selector_); + + // Add format types + format_selector_->addItem(tr("Hexdump"), qVariantFromValue(QString("text/hexdump"))); + + // Add widget stack + root_layout->addWidget(stacked_widget_); + stacked_widget_->addWidget(hex_view_); + reset_view_state(); } @@ -51,6 +78,11 @@ View::~View() { } +ViewType View::get_type() const +{ + return ViewTypeDecoderOutput; +} + void View::reset_view_state() { ViewBase::reset_view_state(); @@ -63,17 +95,24 @@ void View::clear_signals() void View::clear_decode_signals() { + signal_selector_->clear(); + format_selector_->setCurrentIndex(0); } void View::add_decode_signal(shared_ptr signal) { connect(signal.get(), SIGNAL(name_changed(const QString&)), - this, SLOT(on_signal_name_changed())); + this, SLOT(on_signal_name_changed(const QString&))); + + signal_selector_->addItem(signal->name(), QVariant::fromValue(signal.get())); } void View::remove_decode_signal(shared_ptr signal) { - (void)signal; + int index = signal_selector_->findData(QVariant::fromValue(signal.get())); + + if (index != -1) + signal_selector_->removeItem(index); } void View::save_settings(QSettings &settings) const @@ -88,8 +127,14 @@ void View::restore_settings(QSettings &settings) (void)settings; } -void View::on_signal_name_changed() +void View::on_signal_name_changed(const QString &name) { + SignalBase *sb = qobject_cast(QObject::sender()); + assert(sb); + + int index = signal_selector_->findData(QVariant::fromValue(sb)); + if (index != -1) + signal_selector_->setItemText(index, name); } } // namespace decoder_output