]> sigrok.org Git - pulseview.git/blobdiff - pv/views/trace/signal.cpp
Implement MathSignal
[pulseview.git] / pv / views / trace / signal.cpp
index a286d95d3c6d07e9b299aefce8ef48701668a987..d1bae5e74789e05c0372fff3c055b102549bdcdc 100644 (file)
@@ -44,26 +44,30 @@ namespace trace {
 const char *const ChannelNames[] = {
        "CLK",
        "DATA",
+       "EN",
        "IN",
        "OUT",
        "RST",
        "TX",
        "RX",
-       "EN",
+       "SDA",
+       "SCL"
        "SCLK",
        "MOSI",
        "MISO",
+       "/CS",
+       "nCS",
        "/SS",
-       "SDA",
-       "SCL"
+       "nSS",
+       "/RST",
+       "nRST",
 };
 
 Signal::Signal(pv::Session &session,
-       shared_ptr<data::SignalBase> channel) :
-       Trace(channel),
+       shared_ptr<data::SignalBase> signal) :
+       Trace(signal),
        session_(session),
-       name_widget_(nullptr),
-       current_segment_(0)
+       name_widget_(nullptr)
 {
        assert(base_);
 
@@ -73,7 +77,7 @@ Signal::Signal(pv::Session &session,
 
 void Signal::set_name(QString name)
 {
-       Trace::set_name(name);
+       base_->set_name(name);
 
        if (name != name_widget_->currentText())
                name_widget_->setEditText(name);
@@ -89,26 +93,36 @@ shared_ptr<data::SignalBase> Signal::base() const
        return base_;
 }
 
-void Signal::set_current_segment(const int segment)
+void Signal::save_settings(QSettings &settings) const
 {
-       current_segment_ = segment;
+       std::map<QString, QVariant> settings_map = save_settings();
+
+       for (auto& entry : settings_map)
+               settings.setValue(entry.first, entry.second);
 }
 
-int Signal::get_current_segment() const
+std::map<QString, QVariant> Signal::save_settings() const
 {
-       return current_segment_;
+       return std::map<QString, QVariant>();
 }
 
-void Signal::save_settings(QSettings &settings) const
+void Signal::restore_settings(QSettings &settings)
 {
-       (void)settings;
+       std::map<QString, QVariant> settings_map;
+
+       QStringList keys = settings.allKeys();
+       for (int i = 0; i < keys.size(); i++)
+               settings_map[keys.at(i)] = settings.value(keys.at(i));
+
+       restore_settings(settings_map);
 }
 
-void Signal::restore_settings(QSettings &settings)
+void Signal::restore_settings(std::map<QString, QVariant> settings)
 {
        (void)settings;
 }
 
+
 void Signal::paint_back(QPainter &p, ViewItemPaintParams &pp)
 {
        if (base_->enabled())
@@ -138,19 +152,26 @@ void Signal::populate_popup_form(QWidget *parent, QFormLayout *form)
 
        form->addRow(tr("Name"), name_widget_);
 
-       add_colour_option(parent, form);
+       add_color_option(parent, form);
 }
 
-QMenu* Signal::create_context_menu(QWidget *parent)
+QMenu* Signal::create_header_context_menu(QWidget *parent)
 {
-       QMenu *const menu = Trace::create_context_menu(parent);
+       QMenu *const menu = Trace::create_header_context_menu(parent);
 
        menu->addSeparator();
 
-       QAction *const disable = new QAction(tr("Disable"), this);
-       disable->setShortcuts(QKeySequence::Delete);
-       connect(disable, SIGNAL(triggered()), this, SLOT(on_disable()));
-       menu->addAction(disable);
+       QString caption;
+
+       if (base_->is_generated())
+               caption = tr("Remove");
+       else
+               caption = tr("Disable");
+
+       QAction *const a = new QAction(caption, this);
+       a->setShortcuts(QKeySequence::Delete);
+       connect(a, SIGNAL(triggered()), this, SLOT(on_disable()));
+       menu->addAction(a);
 
        return menu;
 }
@@ -175,7 +196,10 @@ void Signal::on_name_changed(const QString &text)
 
 void Signal::on_disable()
 {
-       base_->set_enabled(false);
+       if (base_->is_generated())
+               session_.remove_generated_signal(base_);
+       else
+               base_->set_enabled(false);
 }
 
 void Signal::on_enabled_changed(bool enabled)