Fix bug 298 by enhancing signal and trace popup behavior
[pulseview.git] / pv / view / signal.cpp
index 44341aeab5cfa406dd3fa65390169907e2089248..8ca5130b05430217097e9caad33886b093478d84 100644 (file)
 #include <math.h>
 
 #include <QApplication>
+#include <QFormLayout>
+#include <QLineEdit>
+#include <QMenu>
+
+#include <libsigrok/libsigrok.h>
 
 #include "signal.h"
 #include "view.h"
 
+#include <pv/device/devinst.h>
+
+using std::shared_ptr;
+
 namespace pv {
 namespace view {
 
@@ -48,8 +57,10 @@ const char *const ProbeNames[] = {
        "SCL"
 };
 
-Signal::Signal(pv::SigSession &session, sr_probe *const probe) :
-       Trace(session, probe->name),
+Signal::Signal(shared_ptr<pv::device::DevInst> dev_inst,
+       const sr_channel *const probe) :
+       Trace(probe->name),
+       _dev_inst(dev_inst),
        _probe(probe),
        _name_widget(NULL),
        _updating_name_widget(false)
@@ -72,11 +83,11 @@ bool Signal::enabled() const
 
 void Signal::enable(bool enable)
 {
-       _probe->enabled = enable;
+       _dev_inst->enable_probe(_probe, enable);
        visibility_changed();
 }
 
-const sr_probe* Signal::probe() const
+const sr_channel* Signal::probe() const
 {
        return _probe;
 }
@@ -89,6 +100,8 @@ void Signal::populate_popup_form(QWidget *parent, QFormLayout *form)
        for(unsigned int i = 0; i < countof(ProbeNames); i++)
                _name_widget->insertItem(i, ProbeNames[i]);
        _name_widget->setEditText(_probe->name);
+       _name_widget->lineEdit()->selectAll();
+       _name_widget->setFocus();
 
        connect(_name_widget, SIGNAL(editTextChanged(const QString&)),
                this, SLOT(on_text_changed(const QString&)));
@@ -105,12 +118,18 @@ QMenu* Signal::create_context_menu(QWidget *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);
 
        return menu;
 }
 
+void Signal::delete_pressed()
+{
+       on_disable();
+}
+
 void Signal::on_disable()
 {
        enable(false);