BlockView interact pins while new bus from existing bus trace, #23

This commit is contained in:
2023-01-29 14:45:29 +03:00
parent e3f046cd2e
commit ef0963c878
2 changed files with 37 additions and 36 deletions

View File

@@ -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<BlockItemPin *>(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<BlockItemPin *>(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<QGraphicsItem *>() << item);
emit connectionsChanged();
tmp_bus.clear();
}