From fd7465c449ae376ae81d4ccc26a6628459182b6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Thu, 12 Sep 2019 11:56:33 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@589 a8b55f48-bf90-11e4-a774-851b48703e85 --- qad/blockview/blockview.cpp | 94 +++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 41 deletions(-) diff --git a/qad/blockview/blockview.cpp b/qad/blockview/blockview.cpp index 0d510fc..1ca69bd 100644 --- a/qad/blockview/blockview.cpp +++ b/qad/blockview/blockview.cpp @@ -158,6 +158,7 @@ bool BlockView::event(QEvent * e) { bool BlockView::eventFilter(QObject * o, QEvent * e) { if (o == &widget_thumb) { QMouseEvent * me = (QMouseEvent*)e; + if(!me) return true; switch (e->type()) { case QEvent::Paint: drawThumb(); @@ -236,9 +237,12 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { } break;*/ case QEvent::GraphicsSceneMousePress: - if (mm_ci != 0) - if (mm_ci->data(1008).toBool()) + if (mm_ci != 0) { + if (mm_ci->data(1008).toBool()) { + mm_ci = 0; break; + } + } //qDebug() << "press"; if (me->buttons().testFlag(Qt::LeftButton)) btncnt++; if (me->buttons().testFlag(Qt::RightButton)) btncnt++; @@ -282,48 +286,53 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { return true; } mil = scene_->items(scene_point); - mm_ci = (mil.isEmpty() ? 0 : mil.front()); - if (mil.isEmpty()) return true; - if (mm_ci != 0) { - if (mm_ci->data(1008).toBool()) - break; - while (mm_ci->data(1005).toString() == "connection") { - if (qgraphicsitem_cast(mm_ci)) - if (qgraphicsitem_cast(mm_ci)->isBusSelected()) - break; - if (mil.size() > 1) { - mm_ci = mil[1]; - mil.pop_front(); - } else { - mm_ci = 0; + //qDebug() << mil; + while (!mil.isEmpty()) { + mm_ci = mil.front(); + if (mm_ci->data(1008).toBool()) { + mil.pop_front(); + } else break; + } + if (mil.isEmpty()) { + mm_ci = 0; + return true; + } + while (mm_ci->data(1005).toString() == "connection") { + if (qgraphicsitem_cast(mm_ci)) + if (qgraphicsitem_cast(mm_ci)->isBusSelected()) break; - } + if (mil.size() > 1) { + mm_ci = mil[1]; + mil.pop_front(); + } else { + mm_ci = 0; + break; } - if (mm_ci->data(1003).toBool()) { - if (mil.size() > 1) { - mm_ci = mil[1]; - mil.pop_front(); - if (mm_ci->data(1003).toBool()) - if (mil.size() > 1) - mm_ci = mil[1]; - } else - mm_ci = 0; - } - if (mm_ci->data(1002).toBool()) { - QGraphicsItem * ti = mm_ci; - while (mm_ci->parentItem() != 0) - mm_ci = mm_ci->parentItem(); - if (!ti->data(1010).toString().isEmpty()) { // text item, check for rect - BlockItem * bi = qgraphicsitem_cast(mm_ci); - if (bi) { - if (!bi->sceneRect().contains(scene_point)) { - //qDebug() << "return"; - mm_ci = 0; - } + } + if (mm_ci->data(1003).toBool()) { + if (mil.size() > 1) { + mm_ci = mil[1]; + mil.pop_front(); + if (mm_ci->data(1003).toBool()) + if (mil.size() > 1) + mm_ci = mil[1]; + } else + mm_ci = 0; + } + if (mm_ci->data(1002).toBool()) { + QGraphicsItem * ti = mm_ci; + while (mm_ci->parentItem() != 0) + mm_ci = mm_ci->parentItem(); + if (!ti->data(1010).toString().isEmpty()) { // text item, check for rect + BlockItem * bi = qgraphicsitem_cast(mm_ci); + if (bi) { + if (!bi->sceneRect().contains(scene_point)) { + //qDebug() << "return"; + mm_ci = 0; } } - return true; } + return true; } if (mm_ci) { if (mm_ci->data(1004) == "pin" && m_connect) { @@ -364,8 +373,10 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { ghost_->setPos(quantize(me->scenePos(), grid_step)); }*/ if (mm_ci) - if (mm_ci->data(1008).toBool()) + if (mm_ci->data(1008).toBool()) { + mm_ci = 0; break; + } if (mm_cancel) return true; if (me->buttons().testFlag(Qt::LeftButton)) { if (!mm_drag) { @@ -705,6 +716,7 @@ void BlockView::scrolled() { void BlockView::mouseMoveEvent(QMouseEvent * event) { + if (!event) return; if (navigation) { if (event->buttons().testFlag(Qt::MidButton) || event->buttons().testFlag(Qt::RightButton)) { QPoint dp = (press_point - event->pos()); @@ -952,7 +964,7 @@ void BlockView::clearSelection() { sel_items.clear(); QList gi = scene_->items(); foreach (QGraphicsItem * i, gi) - i->setSelected(false); + if (i->flags().testFlag(QGraphicsItem::ItemIsSelectable)) i->setSelected(false); }