From fd4d2201b60d3028801cbafcdf3add1955d63757 Mon Sep 17 00:00:00 2001 From: Ilia Ryabokon Date: Fri, 7 Jun 2013 20:13:48 +0300 Subject: [PATCH] Remove button implemented --- src/domain/UBGraphicsItemDelegate.h | 1 + src/domain/UBSelectionFrame.cpp | 116 +++++++++++++++++++++++++++- src/domain/UBSelectionFrame.h | 13 +++- 3 files changed, 125 insertions(+), 5 deletions(-) diff --git a/src/domain/UBGraphicsItemDelegate.h b/src/domain/UBGraphicsItemDelegate.h index 0b74a4c0..a183c7a1 100644 --- a/src/domain/UBGraphicsItemDelegate.h +++ b/src/domain/UBGraphicsItemDelegate.h @@ -314,6 +314,7 @@ class UBGraphicsItemDelegate : public QObject virtual void freeButtons(); virtual void decorateMenu(QMenu *menu); virtual void updateMenuActionState(); + QList buttons() {return mButtons;} QGraphicsItem* mDelegated; diff --git a/src/domain/UBSelectionFrame.cpp b/src/domain/UBSelectionFrame.cpp index 163b77dc..3ce08672 100644 --- a/src/domain/UBSelectionFrame.cpp +++ b/src/domain/UBSelectionFrame.cpp @@ -11,11 +11,37 @@ UBSelectionFrame::UBSelectionFrame() : mThickness(UBSettings::settings()->objectFrameWidth) , mAntiscaleRatio(1.0) + , mDeleteButton(0) + , mDuplicateButton(0) + , mZOrderUpButton(0) + , mZOrderDownButton(0) { setLocalBrush(QBrush(UBSettings::paletteColor)); setPen(Qt::NoPen); setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Control)); - setFlags(QGraphicsItem::ItemSendsGeometryChanges /*| QGraphicsItem::ItemIsSelectable*/ | ItemIsMovable); + setFlags(QGraphicsItem::ItemSendsGeometryChanges | QGraphicsItem::ItemIsSelectable | ItemIsMovable); + + + mDeleteButton = new DelegateButton(":/images/close.svg", this, 0, Qt::TopLeftSection); + mButtons << mDeleteButton; + connect(mDeleteButton, SIGNAL(clicked()), this, SLOT(remove())); + + mDuplicateButton = new DelegateButton(":/images/duplicate.svg", this, 0, Qt::TopLeftSection); + // connect(mDuplicateButton, SIGNAL(clicked(bool)), this, SLOT(duplicate())); + mButtons << mDuplicateButton; + + mZOrderUpButton = new DelegateButton(":/images/z_layer_up.svg", this, 0, Qt::BottomLeftSection); + mZOrderUpButton->setShowProgressIndicator(true); + // connect(mZOrderUpButton, SIGNAL(clicked()), this, SLOT(increaseZLevelUp())); + // connect(mZOrderUpButton, SIGNAL(longClicked()), this, SLOT(increaseZlevelTop())); + mButtons << mZOrderUpButton; + + mZOrderDownButton = new DelegateButton(":/images/z_layer_down.svg", this, 0, Qt::BottomLeftSection); + mZOrderDownButton->setShowProgressIndicator(true); + // connect(mZOrderDownButton, SIGNAL(clicked()), this, SLOT(increaseZLevelDown())); + // connect(mZOrderDownButton, SIGNAL(longClicked()), this, SLOT(increaseZlevelBottom())); + mButtons << mZOrderDownButton; + connect(UBApplication::boardController, SIGNAL(zoomChanged(qreal)), this, SLOT(onZoomChanged(qreal))); } @@ -61,6 +87,9 @@ QPainterPath UBSelectionFrame::shape() const void UBSelectionFrame::setEnclosedItems(const QList pGraphicsItems) { + mButtons.clear(); + mButtons.append(mDeleteButton); + QRegion resultRegion; mEnclosedtems.clear(); foreach (QGraphicsItem *nextItem, pGraphicsItems) { @@ -74,6 +103,9 @@ void UBSelectionFrame::setEnclosedItems(const QList pGraphicsIte QRectF resultRect = resultRegion.boundingRect(); setRect(resultRect); + placeButtons(); + + if (resultRect.isEmpty()) { hide(); } @@ -89,6 +121,8 @@ void UBSelectionFrame::updateRect() QRectF result = resultRegion.boundingRect(); setRect(result); + placeButtons(); + if (result.isEmpty()) { setVisible(false); } @@ -143,7 +177,7 @@ void UBSelectionFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void UBSelectionFrame::mouseReleaseEvent(QGraphicsSceneMouseEvent */*event*/) { - mPressedPos = mLastMovedPos = QPointF(); + mPressedPos = mLastMovedPos = mLastTranslateOffset = QPointF(); // foreach (UBGraphicsItemDelegate *curDelegate, mEnclosedtems) { // qDebug() << "TransformBefore" << curDelegate->delegated()->transform(); // } @@ -152,12 +186,86 @@ void UBSelectionFrame::mouseReleaseEvent(QGraphicsSceneMouseEvent */*event*/) void UBSelectionFrame::onZoomChanged(qreal pZoom) { - mAntiscaleRatio = pZoom; - updateScale(); +// mAntiscaleRatio = pZoom; +// updateScale(); +} + +void UBSelectionFrame::remove() +{ + foreach (UBGraphicsItemDelegate *d, mEnclosedtems) { + d->remove(true); + } + + updateRect(); } void UBSelectionFrame::translateItem(QGraphicsItem */*item*/, const QPointF &/*translatePoint*/) { } +void UBSelectionFrame::placeButtons() +{ + QTransform tr; +// tr.scale(mAntiScaleRatio, mAntiScaleRatio); + + mDeleteButton->setParentItem(this); +// mDeleteButton->setTransform(tr); + + qreal topX = rect().left() - mDeleteButton->renderer()->viewBox().width() /** mAntiScaleRatio*/ * 1.2; + qreal topY = rect().top() - mDeleteButton->renderer()->viewBox().height() /** mAntiScaleRatio*/ * 1.2; + + qreal bottomX = rect().left() - mDeleteButton->renderer()->viewBox().width() /** mAntiScaleRatio*/ / 2; + qreal bottomY = rect().bottom() - mDeleteButton->renderer()->viewBox().height() /** mAntiScaleRatio*/ / 2; + + mDeleteButton->setPos(topX, topY); +// mDeleteButton->setPos(0, 0); + +// if (!mDeleteButton->scene()) +// { +// if (scene()) +// scene()->addItem(mDeleteButton); +// } + mDeleteButton->show(); + +// if (showUpdated) +// mDeleteButton->show(); + +// int i = 1, j = 0, k = 0; +// while ((i + j + k) < mButtons.size()) { +// DelegateButton* button = mButtons[i + j]; + +// if (button->getSection() == Qt::TopLeftSection) { +// button->setParentItem(mFrame); +// button->setPos(topX + (i++ * 1.6 * mFrameWidth * mAntiScaleRatio), topY); +// button->setTransform(tr); +// } else if (button->getSection() == Qt::BottomLeftSection) { +// button->setParentItem(mFrame); +// button->setPos(bottomX + (++j * 1.6 * mFrameWidth * mAntiScaleRatio), bottomY); +// button->setTransform(tr); +// } else if (button->getSection() == Qt::TitleBarArea || button->getSection() == Qt::NoSection){ +// ++k; +// } +// if (!button->scene()) +// { +// if (mDelegated->scene()) +// mDelegated->scene()->addItem(button); +// } +// if (showUpdated) { +// button->show(); +// button->setZValue(delegated()->zValue()); +// } +// } +} + +void UBSelectionFrame::clearButtons() +{ + foreach (DelegateButton *b, mButtons) + { + b->setParentItem(0); + b->hide(); + } + + mButtons.clear(); +} + diff --git a/src/domain/UBSelectionFrame.h b/src/domain/UBSelectionFrame.h index de006541..888176f8 100644 --- a/src/domain/UBSelectionFrame.h +++ b/src/domain/UBSelectionFrame.h @@ -4,6 +4,7 @@ #include #include +class DelegateButton; class UBGraphicsItemDelegate; class UBSelectionFrame : public QObject, public QGraphicsRectItem @@ -19,7 +20,7 @@ public: void setLocalBrush(const QBrush &pBrush) {mLocalBrush = pBrush;} QBrush localBrush() const {return mLocalBrush;} - void setEnclosedItems(const QList pEncItems) {mEnclosedtems = pEncItems; updateRect();} +// void setEnclosedItems(const QList pEncItems) {mEnclosedtems = pEncItems; updateRect();} void setEnclosedItems(const QList pGraphicsItems); void updateRect(); void updateScale(); @@ -33,9 +34,12 @@ protected: private slots: void setAntiScaleRatio(qreal pAntiscaleRatio) {mAntiscaleRatio = pAntiscaleRatio;} void onZoomChanged(qreal pZoom); + void remove(); private: void translateItem(QGraphicsItem *item, const QPointF &translatePoint); + void placeButtons(); + void clearButtons(); private: int mThickness; @@ -46,6 +50,13 @@ private: QPointF mPressedPos; QPointF mLastMovedPos; QPointF mLastTranslateOffset; + + QList mButtons; + + DelegateButton *mDeleteButton; + DelegateButton *mDuplicateButton; + DelegateButton *mZOrderUpButton; + DelegateButton *mZOrderDownButton; }; #endif // UBSELECTIONFRAME_H