From a748e8a2990d9f7e95c3ce9c6061cfdc084374ae Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Wed, 22 Aug 2012 12:34:07 +0300 Subject: [PATCH] SANKORE-852 Draw lines and move --- src/board/UBBoardView.cpp | 12 +++++++++++- src/board/UBBoardView.h | 2 ++ src/domain/UBGraphicsStrokesGroup.cpp | 25 +++++++++++++++++++++++++ src/domain/UBGraphicsStrokesGroup.h | 3 +++ 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/board/UBBoardView.cpp b/src/board/UBBoardView.cpp index 4786c9d0..26ea969d 100644 --- a/src/board/UBBoardView.cpp +++ b/src/board/UBBoardView.cpp @@ -596,7 +596,7 @@ void UBBoardView::handleItemMousePress(QMouseEvent *event) mLastPressedMousePos = mapToScene(event->pos()); - if (movingItem && QGraphicsSvgItem::Type != movingItem->type() + if (movingItem && !hasSelectedParents(movingItem) && QGraphicsSvgItem::Type != movingItem->type() && UBGraphicsDelegateFrame::Type != movingItem->type() && !mMultipleSelectionIsEnabled) { @@ -1405,3 +1405,13 @@ UBBoardView::setToolCursor (int tool) controlViewport->setCursor (UBResources::resources ()->penCursor); } } + + +bool UBBoardView::hasSelectedParents(QGraphicsItem * item) +{ + if (item->isSelected()) + return true; + if (item->parentItem()==NULL) + return false; + return hasSelectedParents(item->parentItem()); +} diff --git a/src/board/UBBoardView.h b/src/board/UBBoardView.h index 34cf7fc7..98907b11 100644 --- a/src/board/UBBoardView.h +++ b/src/board/UBBoardView.h @@ -148,6 +148,8 @@ class UBBoardView : public QGraphicsView bool mIsDragInProgress; bool mMultipleSelectionIsEnabled; + static bool hasSelectedParents(QGraphicsItem * item); + private slots: void settingChanged(QVariant newValue); diff --git a/src/domain/UBGraphicsStrokesGroup.cpp b/src/domain/UBGraphicsStrokesGroup.cpp index 4f1be91f..2f98bed3 100644 --- a/src/domain/UBGraphicsStrokesGroup.cpp +++ b/src/domain/UBGraphicsStrokesGroup.cpp @@ -112,6 +112,31 @@ void UBGraphicsStrokesGroup::paint(QPainter *painter, const QStyleOptionGraphics QVariant UBGraphicsStrokesGroup::itemChange(GraphicsItemChange change, const QVariant &value) { + if (change == QGraphicsItem::ItemSelectedChange) + { + int a = 13; + } + QVariant newValue = mDelegate->itemChange(change, value); return QGraphicsItemGroup::itemChange(change, newValue); } + + +QPainterPath UBGraphicsStrokesGroup::shape () const +{ + QPainterPath path; + + if (isSelected()) + { + path.addRect(boundingRect()); + } + else + { + foreach(QGraphicsItem* item, childItems()) + { + path.addPath(item->shape()); + } + } + + return path; +} diff --git a/src/domain/UBGraphicsStrokesGroup.h b/src/domain/UBGraphicsStrokesGroup.h index 8339e1c2..b2310773 100644 --- a/src/domain/UBGraphicsStrokesGroup.h +++ b/src/domain/UBGraphicsStrokesGroup.h @@ -25,6 +25,9 @@ public: virtual void setUuid(const QUuid &pUuid); protected: + + virtual QPainterPath shape () const; + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);