#include <libsigrokdecode/libsigrokdecode.h>
+#include <QLabel>
#include <QMenu>
#include <QToolBar>
#include <QVBoxLayout>
#include "pv/session.hpp"
#include "pv/util.hpp"
+using pv::data::SignalBase;
using pv::util::TimeUnit;
using pv::util::Timestamp;
namespace decoder_output {
View::View(Session &session, bool is_main_view, QMainWindow *parent) :
- ViewBase(session, is_main_view, 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())
{
QVBoxLayout *root_layout = new QVBoxLayout(this);
root_layout->setContentsMargins(0, 0, 0, 0);
- QToolBar* tool_bar = new QToolBar();
- tool_bar->setContextMenuPolicy(Qt::PreventContextMenu);
+ // Create toolbar
+ QToolBar* toolbar = new QToolBar();
+ toolbar->setContextMenuPolicy(Qt::PreventContextMenu);
+ parent->addToolBar(toolbar);
- parent->addToolBar(tool_bar);
+ // 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")));
reset_view_state();
}
{
}
+ViewType View::get_type() const
+{
+ return ViewTypeDecoderOutput;
+}
+
void View::reset_view_state()
{
ViewBase::reset_view_state();
void View::clear_decode_signals()
{
+ signal_selector_->clear();
+ format_selector_->setCurrentIndex(0);
}
void View::add_decode_signal(shared_ptr<data::DecodeSignal> 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<data::DecodeSignal> 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
(void)settings;
}
-void View::on_signal_name_changed()
+void View::on_signal_name_changed(const QString &name)
{
+ SignalBase *sb = qobject_cast<SignalBase*>(QObject::sender());
+ assert(sb);
+
+ int index = signal_selector_->findData(QVariant::fromValue(sb));
+ if (index != -1)
+ signal_selector_->setItemText(index, name);
}
} // namespace decoder_output