From ef0963c878fe09ca5800e3f767c1480dcf3eb13d Mon Sep 17 00:00:00 2001 From: peri4 Date: Sun, 29 Jan 2023 14:45:29 +0300 Subject: [PATCH] BlockView interact pins while new bus from existing bus trace, #23 --- libs/blockview/blockbusitem.cpp | 2 + libs/blockview/blockview.cpp | 71 ++++++++++++++++----------------- 2 files changed, 37 insertions(+), 36 deletions(-) diff --git a/libs/blockview/blockbusitem.cpp b/libs/blockview/blockbusitem.cpp index 6b8bcf5..29d5d7f 100644 --- a/libs/blockview/blockbusitem.cpp +++ b/libs/blockview/blockbusitem.cpp @@ -740,8 +740,10 @@ void BlockBusItem::mouseReleaseEvent(QGraphicsSceneMouseEvent * e) { if (btncnt == 0) mm_cancel = false; if (new_segment) { qobject_cast(scene()->views().back())->newBranchAccept(this); + simplify(); updateGeometry(); selPoint = selSegment = -1; + emitAction(BlockItemBase::BusAdd); } if (moved) { simplify(false); diff --git a/libs/blockview/blockview.cpp b/libs/blockview/blockview.cpp index 1fa0a2a..c89d814 100644 --- a/libs/blockview/blockview.cpp +++ b/libs/blockview/blockview.cpp @@ -323,10 +323,8 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { break; case QEvent::GraphicsSceneMouseMove: // qDebug() << "move" << (mm_ci != 0 ? mm_ci : 0) << mm_mods << mm_cancel << mm_drag; - if (cur_bus) { - return false; - } - // qDebug() << "move mm_ci" << mm_ci << mm_cancel; + // if (cur_bus) return false; + // qDebug() << "move mm_ci" << mm_ci << mm_cancel; if (mm_ci) if (mm_ci->data(bvidTmpItem).toBool()) { mm_ci = 0; @@ -335,42 +333,45 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { if (mm_ci->data(bvidItemSelection).toBool()) break; if (mm_ci->data(bvidDTHandle).toBool()) break; if (mm_cancel) return true; + // qDebug() << tmp_bus.isVisible(); + if ((me->buttons().testFlag(Qt::LeftButton) && mm_drag && tmp_bus.isVisible()) || new_branch) { + mil = scene_->items(me->scenePos()); + hpin = 0; + foreach(QGraphicsItem * i, mil) + if (i->data(bvidType).toInt() == bvitPin) { + hpin = qgraphicsitem_cast(i); + break; + } + if (hpin) { + if (hpin->state() == BlockItemPin::Accept) { + unhoverPins(hpin); + hoverAcceptedPin(hpin, true); + } else + hpin = 0; + } else + unhoverPins(); + if (!cur_bus) { + if (new_branch) { + matchBus(); + break; + } + trace(trace_from, me->scenePos(), &tmp_bus); + for (int i = 0; i < qMin(tmp_buses.size(), last_multiconnect_pl.size()); ++i) { + QPointF dp = last_multiconnect_pl[i]->scenePos() - trace_from; + // qDebug() << "trace" << i << dp; + trace(trace_from + dp, me->scenePos() + dp, tmp_buses[i], false); + tmp_buses[i]->show(); + } + matchBus(); + } + } + if (cur_bus) return false; if (me->buttons().testFlag(Qt::LeftButton)) { if (!mm_drag) { if ((screen_point - me->screenPos()).manhattanLength() >= QApplication::startDragDistance()) { mm_drag = fmm_drag = true; saveBusesState(); } - } else { - if (tmp_bus.isVisible()) { - mil = scene_->items(me->scenePos()); - hpin = 0; - foreach(QGraphicsItem * i, mil) - if (i->data(bvidType).toInt() == bvitPin) { - hpin = qgraphicsitem_cast(i); - break; - } - if (hpin) { - if (hpin->state() == BlockItemPin::Accept) { - unhoverPins(hpin); - hoverAcceptedPin(hpin, true); - } else - hpin = 0; - } else - unhoverPins(); - if (new_branch) { - matchBus(); - break; - } - trace(trace_from, me->scenePos(), &tmp_bus); - for (int i = 0; i < qMin(tmp_buses.size(), last_multiconnect_pl.size()); ++i) { - QPointF dp = last_multiconnect_pl[i]->scenePos() - trace_from; - // qDebug() << "trace" << i << dp; - trace(trace_from + dp, me->scenePos() + dp, tmp_buses[i], false); - tmp_buses[i]->show(); - } - matchBus(); - } } if (tmp_bus.isVisible()) return true; if (mm_mods.testFlag(Qt::ShiftModifier)) { @@ -1763,8 +1764,6 @@ void BlockView::newBranchAccept(BlockBusItem * item) { } item->updateGeometry(); newBusCreated(item); - emitActionEvent(BlockItemBase::BusAdd, QList() << item); - emit connectionsChanged(); tmp_bus.clear(); }