+void Header::mouseLeftPressEvent(QMouseEvent *event)
+{
+ const bool ctrl_pressed =
+ QApplication::keyboardModifiers() & Qt::ControlModifier;
+
+ // Clear selection if control is not pressed and this item is unselected
+ const shared_ptr<RowItem> mouse_over =
+ get_mouse_over_row_item(event->pos());
+ if (!ctrl_pressed && (!mouse_over || !mouse_over->selected()))
+ for (shared_ptr<RowItem> r : _view)
+ r->select(false);
+
+ // Set the signal selection state if the item has been clicked
+ if (mouse_over) {
+ if (ctrl_pressed)
+ mouse_over->select(!mouse_over->selected());
+ else
+ mouse_over->select(true);
+ }
+
+ // Save the offsets of any signals which will be dragged
+ _mouse_down_point = event->pos();
+ for (const shared_ptr<RowItem> r : _view)
+ if (r->selected())
+ _drag_row_items.push_back(
+ make_pair(r, r->v_offset()));
+
+ selection_changed();
+ update();
+}
+