aboutsummaryrefslogtreecommitdiffstats
path: root/gui/fpgaviewwidget.cc
diff options
context:
space:
mode:
authorSergiusz Bazanski <q3k@q3k.org>2018-07-27 02:14:40 +0100
committerSergiusz Bazanski <q3k@q3k.org>2018-07-27 02:14:40 +0100
commit1fe1b99a5afea488a801f303cb1eda0d9343a1f0 (patch)
tree16ef38f6dec23b462f0c7d40fe497346fbeed74c /gui/fpgaviewwidget.cc
parent83371248fca5ab217def81ee101ecdb0d299cee4 (diff)
downloadnextpnr-1fe1b99a5afea488a801f303cb1eda0d9343a1f0.tar.gz
nextpnr-1fe1b99a5afea488a801f303cb1eda0d9343a1f0.tar.bz2
nextpnr-1fe1b99a5afea488a801f303cb1eda0d9343a1f0.zip
gui: ctrl click to select multiple elements
Diffstat (limited to 'gui/fpgaviewwidget.cc')
-rw-r--r--gui/fpgaviewwidget.cc16
1 files changed, 11 insertions, 5 deletions
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<DecalXY>());
+ onSelectedArchItem(std::vector<DecalXY>(), false);
for (int i = 0; i < 8; i++)
onHighlightGroupChanged(std::vector<DecalXY>(), i);
{
@@ -508,11 +508,15 @@ void FPGAViewWidget::renderLines(void)
}
}
-void FPGAViewWidget::onSelectedArchItem(std::vector<DecalXY> decals)
+void FPGAViewWidget::onSelectedArchItem(std::vector<DecalXY> 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);
}
}
}