diff --git a/libs/blockview/blockbase.h b/libs/blockview/blockbase.h index 189f4ba..fe62f19 100644 --- a/libs/blockview/blockbase.h +++ b/libs/blockview/blockbase.h @@ -43,7 +43,7 @@ enum BlockviewItemData { bvidMoveParent , // bool flag for move parent bvidVisualizeSelection , // bool flag for visualize selection bvidItemSelection , // bool BlockItem selection - bvidInvalidItem , // bool item is NOT decor, ignore for function decors + bvidTmpItem , // bool item is temporary, ignore bvidBlockDecor , // bool item is BlockItem decor bvidDTHandle , // bool bvidCorrectMove , // bool diff --git a/libs/blockview/blockview.cpp b/libs/blockview/blockview.cpp index fd8411b..499688c 100644 --- a/libs/blockview/blockview.cpp +++ b/libs/blockview/blockview.cpp @@ -173,6 +173,7 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { case QEvent::GraphicsSceneMouseDoubleClick: mil = scene_->items(scene_point); foreach (QGraphicsItem * i, mil) { + if (i->data(bvidTmpItem).toBool()) continue; if (i->data(bvidType).toInt() == bvitBlock) { //emit blockDoubleClicked((BlockItem * )i); QMetaObject::invokeMethod(this, "blockDoubleClicked", Qt::QueuedConnection, Q_ARG(BlockItem * , (BlockItem*)i)); @@ -208,7 +209,7 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { break;*/ case QEvent::GraphicsSceneMousePress: if (mm_ci != 0) { - if (mm_ci->data(bvidInvalidItem).toBool()) { + if (mm_ci->data(bvidTmpItem).toBool()) { mm_ci = 0; break; } @@ -274,7 +275,7 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { while (!mil.isEmpty()) { mm_ci = mil.front(); if (mm_ci->data(bvidDTHandle).toBool()) return QGraphicsView::eventFilter(o, e); - if (mm_ci->data(bvidInvalidItem).toBool() || mm_ci->data(bvidItemSelection).toBool()) { + if (mm_ci->data(bvidTmpItem).toBool() || mm_ci->data(bvidItemSelection).toBool()) { mil.pop_front(); } else break; } @@ -361,7 +362,7 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { return false; } if (mm_ci) - if (mm_ci->data(bvidInvalidItem).toBool()) { + if (mm_ci->data(bvidTmpItem).toBool()) { mm_ci = 0; break; } @@ -408,7 +409,7 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { if (fmm_drag) { fmm_drag = false; if (mm_ci) { - if (mm_ci->data(bvidType).toInt() == bvitBlock) { + if ((mm_ci->data(bvidType).toInt() == bvitBlock) && !mm_ci->data(bvidTmpItem).toBool()) { if (!mm_ci->isSelected() && sel_items.isEmpty()) { clearSelection(); mm_ci->setSelected(true); @@ -424,7 +425,7 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { deleteCopyTemp(); QList bi; foreach (QGraphicsItem * i, sel_items) { - if (i->data(bvidType).toInt() == bvitBlock) { + if ((i->data(bvidType).toInt() == bvitBlock) && !i->data(bvidTmpItem).toBool()) { //qDebug() << "copy"; bi << qgraphicsitem_cast(i); BlockItem * ti = bi.back()->copy(); @@ -528,7 +529,7 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { return true; } if (mm_ci) - if (mm_ci->data(bvidInvalidItem).toBool()) { + if (mm_ci->data(bvidTmpItem).toBool()) { mm_ci = 0; break; } @@ -540,7 +541,7 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { QList ci; QList bi; foreach (QGraphicsItem * b, sel_items) - if (b->data(bvidType).toInt() == bvitBlock) { + if ((b->data(bvidType).toInt() == bvitBlock) && !b->data(bvidTmpItem).toBool()) { ci << qgraphicsitem_cast(b); ai << qgraphicsitem_cast(b); } @@ -999,7 +1000,7 @@ QList BlockView::buses() const { QList ret; QList gi = scene_->items(); foreach (QGraphicsItem * i, gi) - if (i->data(bvidType).toInt() == bvitBus) + if ((i->data(bvidType).toInt() == bvitBus) && !i->data(bvidTmpItem).toBool()) if (!copy_buses.contains((BlockBusItem*)i)) ret << qgraphicsitem_cast(i); return ret; @@ -1028,7 +1029,7 @@ QList BlockView::blocks() const { QList ret; QList gi = scene_->items(); foreach (QGraphicsItem * i, gi) - if (i->data(bvidType).toInt() == bvitBlock) + if ((i->data(bvidType).toInt() == bvitBlock) && !i->data(bvidTmpItem).toBool()) ret << qgraphicsitem_cast(i); return ret; } @@ -1037,7 +1038,7 @@ QList BlockView::blocks() const { QList BlockView::decors() const { QList ret, gi = scene_->items(); foreach (QGraphicsItem * i, gi) - if ((i->data(bvidType).toInt() == bvitDecor) && !i->data(bvidInvalidItem).toBool() && !i->data(bvidItemSelection).toBool() && (i->parentItem() == 0) + if ((i->data(bvidType).toInt() == bvitDecor) && !i->data(bvidTmpItem).toBool() && !i->data(bvidItemSelection).toBool() && (i->parentItem() == 0) && (i != &sel_rect) && (i != &tmp_bus) && !tmp_buses.contains((BlockBusItem*)i)) ret << i; return ret; @@ -1192,7 +1193,7 @@ QRectF BlockView::itemsBoundingRect() const { QRectF ret; foreach (QGraphicsItem * i, gi) if (i->isVisible() && (i != &tmp_bus) && !tmp_buses.contains((BlockBusItem*)i)) { - if (!(i->data(bvidItemSelection).toBool()) && !i->data(bvidInvalidItem).toBool()) { + if (!(i->data(bvidItemSelection).toBool()) && !i->data(bvidTmpItem).toBool()) { QRectF br = i->mapRectToScene(i->boundingRect()); if (br.width() <= 1 || br.height() <= 1) continue; if (f) ret = br; @@ -1665,7 +1666,7 @@ QList BlockView::selectedBlocks() const { QList ret; QList sil = scene()->selectedItems(); foreach (QGraphicsItem * b, sil) - if (b->data(bvidType).toInt() == bvitBlock) + if ((b->data(bvidType).toInt() == bvitBlock) && !b->data(bvidTmpItem).toBool()) ret << qgraphicsitem_cast(b); return ret; } @@ -2070,6 +2071,7 @@ void BlockView::removeSelected() { if (i->connectedBlocks().isEmpty()) dbuses << i; foreach (QGraphicsItem * i, gi) { + if (i->data(bvidTmpItem).toBool()) continue; if (i->data(bvidType).toInt() == bvitBlock) ai << qgraphicsitem_cast(i); if ((i->data(bvidType).toInt() == bvitBlock) || (i->data(bvidType).toInt() == bvitBus) || (i->data(bvidType).toInt() == bvitDecor)) { @@ -2095,10 +2097,11 @@ void BlockView::removeAll() { QList gi = scene_->items(), ai; blockSignals(true); foreach (QGraphicsItem * i, gi) { + if (i->data(bvidTmpItem).toBool()) continue; if (i->data(bvidType).toInt() == bvitBlock) ai << qgraphicsitem_cast(i); if ((i->data(bvidType).toInt() == bvitBlock) || (i->data(bvidType).toInt() == bvitBus) || (i->data(bvidType).toInt() == bvitDecor)) { - if ((i != &sel_rect) && (i != &tmp_bus) && (i->parentItem() == 0) && !(i->data(bvidInvalidItem).toBool()) && !(i->data(bvidItemSelection).toBool())) { + if ((i != &sel_rect) && (i != &tmp_bus) && (i->parentItem() == 0) && !(i->data(bvidItemSelection).toBool())) { //qDebug() << "delete" << i->data(1005).toInt(); scene_->sendEvent(i, new QGraphicsSceneEvent(QEvent::Close)); delete i;