From 1fe1b99a5afea488a801f303cb1eda0d9343a1f0 Mon Sep 17 00:00:00 2001 From: Sergiusz Bazanski Date: Fri, 27 Jul 2018 02:14:40 +0100 Subject: gui: ctrl click to select multiple elements --- gui/fpgaviewwidget.cc | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'gui/fpgaviewwidget.cc') diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc index 873800c5..5d7cb8ed 100644 --- a/gui/fpgaviewwidget.cc +++ b/gui/fpgaviewwidget.cc @@ -83,7 +83,7 @@ FPGAViewWidget::~FPGAViewWidget() {} void FPGAViewWidget::newContext(Context *ctx) { ctx_ = ctx; - onSelectedArchItem(std::vector()); + onSelectedArchItem(std::vector(), false); for (int i = 0; i < 8; i++) onHighlightGroupChanged(std::vector(), i); { @@ -508,11 +508,15 @@ void FPGAViewWidget::renderLines(void) } } -void FPGAViewWidget::onSelectedArchItem(std::vector decals) +void FPGAViewWidget::onSelectedArchItem(std::vector decals, bool keep) { { QMutexLocker locker(&rendererArgsLock_); - rendererArgs_->selectedDecals = decals; + if (keep) { + std::copy(decals.begin(), decals.end(), std::back_inserter(rendererArgs_->selectedDecals)); + } else { + rendererArgs_->selectedDecals = decals; + } rendererArgs_->changed = true; } pokeRenderer(); @@ -576,6 +580,8 @@ void FPGAViewWidget::mousePressEvent(QMouseEvent *event) lastDragPos_ = event->pos(); } if (event->buttons() & Qt::LeftButton) { + bool ctrl = QApplication::keyboardModifiers().testFlag(Qt::ControlModifier); + auto world = mouseToWorldCoordinates(event->x(), event->y()); auto closestOr = pickElement(world.x(), world.y()); if (!closestOr) @@ -583,9 +589,9 @@ void FPGAViewWidget::mousePressEvent(QMouseEvent *event) auto closest = closestOr.value(); if (closest.type == ElementType::BEL) { - clickedBel(closest.element.bel); + clickedBel(closest.element.bel, ctrl); } else if (closest.type == ElementType::WIRE) { - clickedWire(closest.element.wire); + clickedWire(closest.element.wire, ctrl); } } } -- cgit v1.2.3