diff --git a/src/core/UB.h b/src/core/UB.h index e486d86c..afc0f91e 100644 --- a/src/core/UB.h +++ b/src/core/UB.h @@ -117,6 +117,9 @@ struct UBGraphicsItemData , ItemOwnZValue , itemLayerType //use instead of deprecated ItemLayerType , ItemUuid //storing uuid in QGraphicsItem for fast finding operations + //Duplicating delegate's functions to make possible working with pure QGraphicsItem + , ItemFlippable // (bool) + , ItemRotatable // (bool) }; }; diff --git a/src/domain/UBGraphicsGroupContainerItem.cpp b/src/domain/UBGraphicsGroupContainerItem.cpp index b35cbdbf..75e57711 100644 --- a/src/domain/UBGraphicsGroupContainerItem.cpp +++ b/src/domain/UBGraphicsGroupContainerItem.cpp @@ -29,6 +29,7 @@ UBGraphicsGroupContainerItem::UBGraphicsGroupContainerItem(QGraphicsItem *parent setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::ObjectItem)); //Necessary to set if we want z value to be assigned correctly + } void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item) @@ -42,6 +43,19 @@ void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item) return; } + //Check if group is allready rotatable or flippable + if (childItems().count()) { + if (UBGraphicsItem::isFlippable(this) && !UBGraphicsItem::isFlippable(item)) { + mDelegate->setFlippable(false); + } + if (UBGraphicsItem::isRotatable(this) && !UBGraphicsItem::isRotatable(item)) { + mDelegate->setRotatable(false); + } + } else { + mDelegate->setFlippable(UBGraphicsItem::isFlippable(item)); + mDelegate->setRotatable(UBGraphicsItem::isRotatable(item)); + } + // COMBINE bool ok; QTransform itemTransform = item->itemTransform(this, &ok); @@ -80,7 +94,7 @@ void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item) // ### Expensive, we could maybe use dirtySceneTransform bit for optimization item->setTransform(newItemTransform); -// item->d_func()->setIsMemberOfGroup(true); + // item->d_func()->setIsMemberOfGroup(true); prepareGeometryChange(); itemsBoundingRect |= itemTransform.mapRect(item->boundingRect() | item->childrenBoundingRect()); update(); @@ -270,6 +284,27 @@ void UBGraphicsGroupContainerItem::pRemoveFromGroup(QGraphicsItem *item) QGraphicsItem *newParent = parentItem(); + if (childItems().count()) { + if (!UBGraphicsItem::isFlippable(item) || !UBGraphicsItem::isRotatable(item)) { + bool flippableNow = true; + bool rotatableNow = true; + + foreach (QGraphicsItem *item, childItems()) { + if (!UBGraphicsItem::isFlippable(item)) { + flippableNow = false; + } + if (!UBGraphicsItem::isRotatable(item)) { + rotatableNow = false; + } + if (!rotatableNow && !flippableNow) { + break; + } + } + mDelegate->setFlippable(flippableNow); + mDelegate->setRotatable(rotatableNow); + } + } + // COMBINE bool ok; QTransform itemTransform; diff --git a/src/domain/UBGraphicsGroupContainerItemDelegate.cpp b/src/domain/UBGraphicsGroupContainerItemDelegate.cpp index d514c0e5..6d753cd8 100644 --- a/src/domain/UBGraphicsGroupContainerItemDelegate.cpp +++ b/src/domain/UBGraphicsGroupContainerItemDelegate.cpp @@ -16,7 +16,9 @@ UBGraphicsGroupContainerItemDelegate::UBGraphicsGroupContainerItemDelegate(QGrap UBGraphicsItemDelegate(pDelegated, parent, true, false, false), mDestroyGroupButton(0) { - + //Wrapper function. Use it to set correct data() to QGraphicsItem as well + setFlippable(false); + setRotatable(false); } UBGraphicsGroupContainerItem *UBGraphicsGroupContainerItemDelegate::delegated() diff --git a/src/domain/UBGraphicsItemDelegate.cpp b/src/domain/UBGraphicsItemDelegate.cpp index e3986e2a..f26d5ed1 100644 --- a/src/domain/UBGraphicsItemDelegate.cpp +++ b/src/domain/UBGraphicsItemDelegate.cpp @@ -158,6 +158,10 @@ void UBGraphicsItemDelegate::init() button->setFlag(QGraphicsItem::ItemIsSelectable, true); } } + + //Wrapper function. Use it to set correct data() to QGraphicsItem as well + setFlippable(false); + setRotatable(false); } @@ -410,7 +414,7 @@ void UBGraphicsItemDelegate::remove(bool canUndo) } -bool UBGraphicsItemDelegate::isLocked() +bool UBGraphicsItemDelegate::isLocked() const { return mDelegated->data(UBGraphicsItemData::ItemLocked).toBool(); } @@ -598,6 +602,22 @@ void UBGraphicsItemDelegate::showMenu() void UBGraphicsItemDelegate::setFlippable(bool flippable) { mFlippable = flippable; + + Q_ASSERT (mDelegated); + if (mDelegated) { + mDelegated->setData(UBGraphicsItemData::ItemFlippable, QVariant(flippable)); + } +} + +void UBGraphicsItemDelegate::setRotatable(bool pCanRotate) +{ + mCanRotate = pCanRotate; + + Q_ASSERT(mDelegated); + + if (mDelegated) { + mDelegated->setData(UBGraphicsItemData::ItemRotatable, QVariant(pCanRotate)); + } } bool UBGraphicsItemDelegate::isFlippable() diff --git a/src/domain/UBGraphicsItemDelegate.h b/src/domain/UBGraphicsItemDelegate.h index 88c598c7..c45fd8be 100644 --- a/src/domain/UBGraphicsItemDelegate.h +++ b/src/domain/UBGraphicsItemDelegate.h @@ -224,8 +224,8 @@ class UBGraphicsItemDelegate : public QObject UBGraphicsDelegateFrame* frame() { return mFrame; } - bool canRotate() { return mCanRotate; } - bool isLocked(); + bool canRotate() const { return mCanRotate; } + bool isLocked() const; bool canDuplicate() { return mCanDuplicate; } QMimeData* mimeData(){ return mMimeData; } @@ -233,6 +233,7 @@ class UBGraphicsItemDelegate : public QObject void setDragPixmap(const QPixmap &pix) {mDragPixmap = pix;} void setFlippable(bool flippable); + void setRotatable(bool pCanRotate); bool isFlippable(); void setButtonsVisible(bool visible); diff --git a/src/domain/UBGraphicsMediaItem.cpp b/src/domain/UBGraphicsMediaItem.cpp index f077bdf6..8e2778e5 100644 --- a/src/domain/UBGraphicsMediaItem.cpp +++ b/src/domain/UBGraphicsMediaItem.cpp @@ -131,7 +131,6 @@ UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsIte connect(mDelegate, SIGNAL(showOnDisplayChanged(bool)), this, SLOT(showOnDisplayChanged(bool))); connect(mMediaObject, SIGNAL(hasVideoChanged(bool)), this, SLOT(hasMediaChanged(bool))); - } diff --git a/src/domain/UBGraphicsMediaItemDelegate.cpp b/src/domain/UBGraphicsMediaItemDelegate.cpp index d34632ca..6a99a174 100644 --- a/src/domain/UBGraphicsMediaItemDelegate.cpp +++ b/src/domain/UBGraphicsMediaItemDelegate.cpp @@ -56,6 +56,10 @@ UBGraphicsMediaItemDelegate::UBGraphicsMediaItemDelegate(UBGraphicsMediaItem* pD { delegated()->setMute(true); } + + //Wrapper function. Use it to set correct data() to QGraphicsItem as well + setFlippable(false); + setRotatable(false); } bool UBGraphicsMediaItemDelegate::mousePressEvent(QGraphicsSceneMouseEvent *event) @@ -269,4 +273,4 @@ void UBGraphicsMediaItemDelegate::updateTicker(qint64 time) void UBGraphicsMediaItemDelegate::totalTimeChanged(qint64 newTotalTime) { mMediaControl->totalTimeChanged(newTotalTime); -} \ No newline at end of file +} diff --git a/src/domain/UBGraphicsPixmapItem.cpp b/src/domain/UBGraphicsPixmapItem.cpp index 936b9195..4e346256 100644 --- a/src/domain/UBGraphicsPixmapItem.cpp +++ b/src/domain/UBGraphicsPixmapItem.cpp @@ -28,10 +28,10 @@ UBGraphicsPixmapItem::UBGraphicsPixmapItem(QGraphicsItem* parent) : QGraphicsPixmapItem(parent) { - mDelegate = new UBGraphicsItemDelegate(this, 0, true, true, false); + mDelegate = new UBGraphicsItemDelegate(this, 0, true); mDelegate->init(); - mDelegate->setFlippable(true); + mDelegate->setRotatable(true); setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); setTransformationMode(Qt::SmoothTransformation); diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 08ecb49e..97659ec1 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -308,9 +308,10 @@ UBGraphicsScene::~UBGraphicsScene() void UBGraphicsScene::selectionChangedProcessing() { if (selectedItems().count()){ - qDebug() << "Selected item bounding rect: " << selectedItems().first()->boundingRect(); - UBApplication::showMessage("ZValue is " + QString::number(selectedItems().first()->zValue(), 'f') + "own z value is " - + QString::number(selectedItems().first()->data(UBGraphicsItemData::ItemOwnZValue).toReal(), 'f')); + // UBApplication::showMessage("ZValue is " + QString::number(selectedItems().first()->zValue(), 'f') + "own z value is " +// + QString::number(selectedItems().first()->data(UBGraphicsItemData::ItemOwnZValue).toReal(), 'f')); + qDebug() << "flippable" << selectedItems().first()->data(UBGraphicsItemData::ItemFlippable).toBool() << endl + << "rotatable" << selectedItems().first()->data(UBGraphicsItemData::ItemRotatable).toBool(); } } @@ -1998,8 +1999,6 @@ void UBGraphicsScene::moveMagnifier(QPoint newPos, bool forceGrab) QPoint dvZeroPoint = dView->mapToGlobal(QPoint(0,0)); - QRect qcr = cView->geometry(); - QRect qdr = dView->geometry(); int cvW = cView->width(); int dvW = dView->width(); qreal wCoeff = (qreal)dvW / (qreal)cvW; diff --git a/src/domain/UBGraphicsStrokesGroup.cpp b/src/domain/UBGraphicsStrokesGroup.cpp index 92cd1bf4..4f1be91f 100644 --- a/src/domain/UBGraphicsStrokesGroup.cpp +++ b/src/domain/UBGraphicsStrokesGroup.cpp @@ -9,6 +9,8 @@ UBGraphicsStrokesGroup::UBGraphicsStrokesGroup(QGraphicsItem *parent):QGraphicsI mDelegate = new UBGraphicsItemDelegate(this, 0, true, true, false); mDelegate->init(); mDelegate->setFlippable(true); + mDelegate->setRotatable(true); + setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); setUuid(QUuid::createUuid()); diff --git a/src/domain/UBGraphicsSvgItem.cpp b/src/domain/UBGraphicsSvgItem.cpp index b9976ae9..e393ef23 100644 --- a/src/domain/UBGraphicsSvgItem.cpp +++ b/src/domain/UBGraphicsSvgItem.cpp @@ -56,6 +56,7 @@ void UBGraphicsSvgItem::init() mDelegate = new UBGraphicsItemDelegate(this, 0, true, true, false); mDelegate->init(); mDelegate->setFlippable(true); + mDelegate->setRotatable(true); setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); diff --git a/src/domain/UBGraphicsTextItem.cpp b/src/domain/UBGraphicsTextItem.cpp index eb93f975..393a3640 100644 --- a/src/domain/UBGraphicsTextItem.cpp +++ b/src/domain/UBGraphicsTextItem.cpp @@ -38,6 +38,8 @@ UBGraphicsTextItem::UBGraphicsTextItem(QGraphicsItem * parent) mDelegate->init(); mDelegate->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing); + mDelegate->setFlippable(false); + mDelegate->setRotatable(true); mTypeTextHereLabel = tr(""); diff --git a/src/domain/UBGraphicsTextItemDelegate.cpp b/src/domain/UBGraphicsTextItemDelegate.cpp index f9220302..3ab8f973 100644 --- a/src/domain/UBGraphicsTextItemDelegate.cpp +++ b/src/domain/UBGraphicsTextItemDelegate.cpp @@ -402,4 +402,4 @@ void UBGraphicsTextItemDelegate::ChangeTextSize(qreal factor, textChangeMode cha void UBGraphicsTextItemDelegate::scaleTextSize(qreal multiplyer) { ChangeTextSize(multiplyer, scaleSize); -} \ No newline at end of file +} diff --git a/src/domain/UBGraphicsWebView.cpp b/src/domain/UBGraphicsWebView.cpp index 39c4f931..ea6a66ad 100644 --- a/src/domain/UBGraphicsWebView.cpp +++ b/src/domain/UBGraphicsWebView.cpp @@ -28,7 +28,7 @@ UBGraphicsWebView::UBGraphicsWebView(QGraphicsItem* parent) { setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); - mDelegate = new UBGraphicsItemDelegate(this, 0, true, false, false); + mDelegate = new UBGraphicsItemDelegate(this, 0, true); mDelegate->init(); setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); diff --git a/src/domain/UBItem.cpp b/src/domain/UBItem.cpp index f5098d23..9d999a94 100644 --- a/src/domain/UBItem.cpp +++ b/src/domain/UBItem.cpp @@ -34,3 +34,13 @@ void UBGraphicsItem::assignZValue(QGraphicsItem *item, qreal value) item->setZValue(value); item->setData(UBGraphicsItemData::ItemOwnZValue, value); } + +bool UBGraphicsItem::isFlippable(QGraphicsItem *item) +{ + return item->data(UBGraphicsItemData::ItemFlippable).toBool(); +} + +bool UBGraphicsItem::isRotatable(QGraphicsItem *item) +{ + return item->data(UBGraphicsItemData::ItemRotatable).toBool(); +} diff --git a/src/domain/UBItem.h b/src/domain/UBItem.h index 21519a1b..99c3e6a6 100644 --- a/src/domain/UBItem.h +++ b/src/domain/UBItem.h @@ -105,6 +105,9 @@ protected: public: static void assignZValue(QGraphicsItem*, qreal value); + static bool isRotatable(QGraphicsItem *item); + static bool isFlippable(QGraphicsItem *item); + virtual UBGraphicsItemDelegate *Delegate() const = 0; virtual void remove() = 0; diff --git a/src/gui/UBFeaturesWidget.h b/src/gui/UBFeaturesWidget.h index 583d7268..5a1b987e 100644 --- a/src/gui/UBFeaturesWidget.h +++ b/src/gui/UBFeaturesWidget.h @@ -248,7 +248,6 @@ private slots: void setFileNameList(const QStringList &pLst); void reactOnTextChanged(const QString &pStr); - private: QLineEdit *mLineEdit; QRegExpValidator *mValidator; diff --git a/src/tools/UBGraphicsCurtainItem.cpp b/src/tools/UBGraphicsCurtainItem.cpp index 746ed5c6..a84d0234 100644 --- a/src/tools/UBGraphicsCurtainItem.cpp +++ b/src/tools/UBGraphicsCurtainItem.cpp @@ -39,6 +39,7 @@ UBGraphicsCurtainItem::UBGraphicsCurtainItem(QGraphicsItem* parent) { mDelegate = new UBGraphicsCurtainItemDelegate(this, 0); mDelegate->init(); + setFlag(QGraphicsItem::ItemIsMovable, true); setFlag(QGraphicsItem::ItemIsSelectable, true);