]> sigrok.org Git - pulseview.git/blobdiff - pv/view/header.cpp
Header: Added group/ungroup key-combos
[pulseview.git] / pv / view / header.cpp
index 91a6ecfddc3415288ab2f9e0f6fd45305ec4c07a..7be491a9d73a9a59d38a126036c7decbcb7b323f 100644 (file)
@@ -39,6 +39,7 @@
 #include <pv/widgets/popup.h>
 
 using boost::make_filter_iterator;
+using std::dynamic_pointer_cast;
 using std::max;
 using std::make_pair;
 using std::min;
@@ -298,16 +299,16 @@ void Header::keyPressEvent(QKeyEvent *e)
 {
        assert(e);
 
-       switch (e->key())
-       {
-       case Qt::Key_Delete:
+       if (e->key() == Qt::Key_Delete)
        {
                for (const shared_ptr<RowItem> r : _view)
                        if (r->selected())
                                r->delete_pressed();
-               break;
-       }
        }
+       else if (e->key() == Qt::Key_G && e->modifiers() == Qt::ControlModifier)
+               on_group();
+       else if (e->key() == Qt::Key_U && e->modifiers() == Qt::ControlModifier)
+               on_ungroup();
 }
 
 void Header::on_signals_moved()
@@ -348,5 +349,22 @@ void Header::on_group()
        }
 }
 
+void Header::on_ungroup()
+{
+       bool restart;
+       do {
+               restart = false;
+               for (const shared_ptr<RowItem> r : _view) {
+                       const shared_ptr<TraceGroup> tg =
+                               dynamic_pointer_cast<TraceGroup>(r);
+                       if (tg && tg->selected()) {
+                               tg->ungroup();
+                               restart = true;
+                               break;
+                       }
+               }
+       } while(restart);
+}
+
 } // namespace view
 } // namespace pv