From 83e6a26327d93c0c6bb0fc385dccec730ce7ad92 Mon Sep 17 00:00:00 2001 From: shibakaneki Date: Tue, 21 Aug 2012 14:22:39 +0200 Subject: [PATCH 1/7] Removed a debug trace and a comment --- src/core/UBDocumentManager.cpp | 2 -- src/gui/UBDocumentNavigator.cpp | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/core/UBDocumentManager.cpp b/src/core/UBDocumentManager.cpp index b5a34af5..61fb764c 100644 --- a/src/core/UBDocumentManager.cpp +++ b/src/core/UBDocumentManager.cpp @@ -236,8 +236,6 @@ int UBDocumentManager::addFilesToDocument(UBDocumentProxy* document, QStringList UBGraphicsScene* scene = UBPersistenceManager::persistenceManager()->createDocumentSceneAt(document, pageIndex); importAdaptor->placeImportedItemToScene(scene, page); UBPersistenceManager::persistenceManager()->persistDocumentScene(document, scene, pageIndex); - - // TODO: Add an empty pixmap for the thumbnail here UBApplication::boardController->addEmptyThumbPage(); } diff --git a/src/gui/UBDocumentNavigator.cpp b/src/gui/UBDocumentNavigator.cpp index bac3ea61..e2de9970 100644 --- a/src/gui/UBDocumentNavigator.cpp +++ b/src/gui/UBDocumentNavigator.cpp @@ -84,8 +84,7 @@ void UBDocumentNavigator::generateThumbnails(UBDocumentContainer* source) for(int i = 0; i < source->selectedDocument()->pageCount(); i++) { - qDebug() << "source->selectedDocument()->pageCount: " << source->selectedDocument()->pageCount() << ", source->pageCount: " << source->pageCount() << ", source->pageAt(" << i << ")"; - const QPixmap* pix = source->pageAt(i); + const QPixmap* pix = source->pageAt(i); UBSceneThumbnailNavigPixmap* pixmapItem = new UBSceneThumbnailNavigPixmap(*pix, source->selectedDocument(), i); int pageIndex = UBDocumentContainer::pageFromSceneIndex(i); QString label = pageIndex == 0 ? tr("Title page") : tr("Page %0").arg(pageIndex); From 37b0eafa61e67a6bb30fae0ca8e2fc094995e452 Mon Sep 17 00:00:00 2001 From: Ilia Ryabokon Date: Tue, 21 Aug 2012 15:23:49 +0300 Subject: [PATCH 2/7] Sankore-834 --- src/domain/UBAbstractUndoCommand.h | 3 +- src/domain/UBGraphicsItemGroupUndoCommand.cpp | 58 +++++++++++++++++++ src/domain/UBGraphicsItemGroupUndoCommand.h | 30 ++++++++++ .../UBGraphicsItemTransformUndoCommand.h | 2 +- src/domain/UBGraphicsItemUndoCommand.cpp | 9 +++ src/domain/UBGraphicsItemUndoCommand.h | 6 +- src/domain/UBGraphicsScene.cpp | 3 +- src/domain/domain.pri | 6 +- 8 files changed, 109 insertions(+), 8 deletions(-) create mode 100644 src/domain/UBGraphicsItemGroupUndoCommand.cpp create mode 100644 src/domain/UBGraphicsItemGroupUndoCommand.h diff --git a/src/domain/UBAbstractUndoCommand.h b/src/domain/UBAbstractUndoCommand.h index da451769..a0c3d187 100644 --- a/src/domain/UBAbstractUndoCommand.h +++ b/src/domain/UBAbstractUndoCommand.h @@ -32,7 +32,8 @@ class UBAbstractUndoCommand : public QUndoCommand undotype_GRAPHICITEMTRANSFORM = 2, undotype_GRAPHICITEM = 3, undotype_GRAPHICTEXTITEM = 4, - undotype_PAGESIZE = 5 + undotype_PAGESIZE = 5, + undotype_GRAPHICSGROUPITEM = 6 }; virtual UndoType getType() { return undotype_UNKNOWN; } diff --git a/src/domain/UBGraphicsItemGroupUndoCommand.cpp b/src/domain/UBGraphicsItemGroupUndoCommand.cpp new file mode 100644 index 00000000..9b58dc1d --- /dev/null +++ b/src/domain/UBGraphicsItemGroupUndoCommand.cpp @@ -0,0 +1,58 @@ +#include "UBGraphicsItemGroupUndoCommand.h" + +#include "UBGraphicsGroupContainerItem.h" +#include "UBGraphicsScene.h" +#include "core/memcheck.h" + + +UBGraphicsItemGroupUndoCommand::UBGraphicsItemGroupUndoCommand(UBGraphicsScene *pScene, UBGraphicsGroupContainerItem *pGroupCreated) : + mScene (pScene), mGroup(pGroupCreated), mFirstRedo(true) + +{ + if (pGroupCreated->childItems().count()) { + foreach (QGraphicsItem *item, pGroupCreated->childItems()) { + mItems << item; + } + } +} + +UBGraphicsItemGroupUndoCommand::~UBGraphicsItemGroupUndoCommand() +{ +} + +void UBGraphicsItemGroupUndoCommand::undo() +{ + mGroup->destroy(); + foreach(QGraphicsItem *item, mItems) { + item->setSelected(true); + } +} + +void UBGraphicsItemGroupUndoCommand::redo() +{ + if (mFirstRedo) { + //Work around. TODO determine why does Qt call the redo function on pushing to undo + mFirstRedo = false; + return; + } + + foreach (QGraphicsItem *item, mItems) { + if (item->type() == UBGraphicsGroupContainerItem::Type) { + QList childItems = item->childItems(); + UBGraphicsGroupContainerItem *currentGroup = dynamic_cast(item); + if (currentGroup) { + currentGroup->destroy(); + } + foreach (QGraphicsItem *chItem, childItems) { + mGroup->addToGroup(chItem); + } + } else { + mGroup->addToGroup(item); + } + } + + mScene->addItem(mGroup); + mGroup->setVisible(true); + mGroup->setFocus(); + mGroup->setSelected(true); +} diff --git a/src/domain/UBGraphicsItemGroupUndoCommand.h b/src/domain/UBGraphicsItemGroupUndoCommand.h new file mode 100644 index 00000000..bbc0a022 --- /dev/null +++ b/src/domain/UBGraphicsItemGroupUndoCommand.h @@ -0,0 +1,30 @@ +#ifndef UBGRAPHICSITEMGROUPUNDOCOMMAND_H +#define UBGRAPHICSITEMGROUPUNDOCOMMAND_H + +#include +#include "UBAbstractUndoCommand.h" + +class UBGraphicsScene; +class UBGraphicsGroupContainerItem; + +class UBGraphicsItemGroupUndoCommand : public UBAbstractUndoCommand +{ +public: + UBGraphicsItemGroupUndoCommand(UBGraphicsScene *pScene, UBGraphicsGroupContainerItem *pGroupCreated); + virtual ~UBGraphicsItemGroupUndoCommand(); + + virtual UndoType getType() { return undotype_GRAPHICSGROUPITEM; } + +protected: + virtual void undo(); + virtual void redo(); + +private: + UBGraphicsScene *mScene; + UBGraphicsGroupContainerItem *mGroup; + QList mItems; + + bool mFirstRedo; +}; + +#endif // UBGRAPHICSITEMGROUPUNDOCOMMAND_H diff --git a/src/domain/UBGraphicsItemTransformUndoCommand.h b/src/domain/UBGraphicsItemTransformUndoCommand.h index 0f6b405d..07d8e0c3 100644 --- a/src/domain/UBGraphicsItemTransformUndoCommand.h +++ b/src/domain/UBGraphicsItemTransformUndoCommand.h @@ -32,7 +32,7 @@ class UBGraphicsItemTransformUndoCommand : public UBAbstractUndoCommand const QSizeF& prevSize = QSizeF()); virtual ~UBGraphicsItemTransformUndoCommand(); - virtual UndoType getType() { return undotype_GRAPHICITEMTRANSFORM; }; + virtual UndoType getType() { return undotype_GRAPHICITEMTRANSFORM; } protected: virtual void undo(); diff --git a/src/domain/UBGraphicsItemUndoCommand.cpp b/src/domain/UBGraphicsItemUndoCommand.cpp index 8d4ebf52..d9961fa0 100644 --- a/src/domain/UBGraphicsItemUndoCommand.cpp +++ b/src/domain/UBGraphicsItemUndoCommand.cpp @@ -24,6 +24,7 @@ #include "board/UBBoardController.h" #include "core/memcheck.h" +#include "domain/UBGraphicsGroupContainerItem.h" UBGraphicsItemUndoCommand::UBGraphicsItemUndoCommand(UBGraphicsScene* pScene, const QSet& pRemovedItems, const QSet& pAddedItems) @@ -81,6 +82,14 @@ void UBGraphicsItemUndoCommand::undo() { QGraphicsItem* item = itAdded.next(); + //if removing group + if (item->type() == UBGraphicsGroupContainerItem::Type) { + UBGraphicsGroupContainerItem *curGroup = qgraphicsitem_cast(item); + if (curGroup) { + curGroup->destroy(); + } + } + UBApplication::boardController->freezeW3CWidget(item, true); item->setSelected(false); mScene->removeItem(item); diff --git a/src/domain/UBGraphicsItemUndoCommand.h b/src/domain/UBGraphicsItemUndoCommand.h index 113c421e..78e7ec9a 100644 --- a/src/domain/UBGraphicsItemUndoCommand.h +++ b/src/domain/UBGraphicsItemUndoCommand.h @@ -34,10 +34,10 @@ class UBGraphicsItemUndoCommand : public UBAbstractUndoCommand virtual ~UBGraphicsItemUndoCommand(); - QSet GetAddedList() { return mAddedItems; }; - QSet GetRemovedList() { return mRemovedItems; }; + QSet GetAddedList() { return mAddedItems; } + QSet GetRemovedList() { return mRemovedItems; } - virtual UndoType getType() { return undotype_GRAPHICITEM; }; + virtual UndoType getType() { return undotype_GRAPHICITEM; } protected: virtual void undo(); diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 19a7e851..6b573710 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -47,6 +47,7 @@ #include "board/UBBoardView.h" #include "UBGraphicsItemUndoCommand.h" +#include "UBGraphicsItemGroupUndoCommand.h" #include "UBGraphicsTextItemUndoCommand.h" #include "UBGraphicsProxyWidget.h" #include "UBGraphicsPixmapItem.h" @@ -1521,7 +1522,7 @@ UBGraphicsGroupContainerItem *UBGraphicsScene::createGroup(QListsetFocus(); if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented - UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, 0, groupItem); + UBGraphicsItemGroupUndoCommand* uc = new UBGraphicsItemGroupUndoCommand(this, groupItem); UBApplication::undoStack->push(uc); } diff --git a/src/domain/domain.pri b/src/domain/domain.pri index d66c72ec..e8b46b4d 100644 --- a/src/domain/domain.pri +++ b/src/domain/domain.pri @@ -20,7 +20,8 @@ HEADERS += src/domain/UBGraphicsScene.h \ src/domain/UBAbstractUndoCommand.h\ src/domain/UBGraphicsGroupContainerItem.h \ src/domain/UBGraphicsGroupContainerItemDelegate.h \ - src/domain/UBGraphicsStrokesGroup.h + src/domain/UBGraphicsStrokesGroup.h \ + src/domain/UBGraphicsItemGroupUndoCommand.h HEADERS += src/domain/UBGraphicsItemDelegate.h \ src/domain/UBGraphicsTextItemDelegate.h \ @@ -51,7 +52,8 @@ SOURCES += src/domain/UBGraphicsScene.cpp \ src/domain/UBAbstractUndoCommand.cpp \ src/domain/ubgraphicsgroupcontaineritem.cpp \ src/domain/ubgraphicsgroupcontaineritemdelegate.cpp \ - src/domain/UBGraphicsStrokesGroup.cpp + src/domain/UBGraphicsStrokesGroup.cpp \ + src/domain/UBGraphicsItemGroupUndoCommand.cpp SOURCES += src/domain/UBGraphicsItemDelegate.cpp \ src/domain/UBGraphicsTextItemDelegate.cpp \ From 4e691d519728faf2d1de24a6f360ae5a479f0fd8 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Tue, 21 Aug 2012 15:32:04 +0300 Subject: [PATCH 3/7] Enabled garbage cleaning. Selected items can be moved by any frame of any item. --- src/board/UBBoardController.cpp | 11 ++-- src/domain/UBGraphicsDelegateFrame.cpp | 69 ++++++++++++++++++++++++++ src/domain/UBGraphicsDelegateFrame.h | 6 +++ 3 files changed, 81 insertions(+), 5 deletions(-) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index d5a383df..2410a74b 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -1466,12 +1466,13 @@ void UBBoardController::ClearUndoStack() while (itUniq.hasNext()) { QGraphicsItem* item = itUniq.next(); + UBGraphicsScene *scene = NULL; if (item->scene()) { - UBGraphicsScene *scene = dynamic_cast(item->scene()); - if(!scene) - { - mActiveScene->deleteItem(item); - } + scene = dynamic_cast(item->scene()); + } + if(!scene) + { + mActiveScene->deleteItem(item); } } diff --git a/src/domain/UBGraphicsDelegateFrame.cpp b/src/domain/UBGraphicsDelegateFrame.cpp index e2181020..f2e597c9 100644 --- a/src/domain/UBGraphicsDelegateFrame.cpp +++ b/src/domain/UBGraphicsDelegateFrame.cpp @@ -228,6 +228,9 @@ void UBGraphicsDelegateFrame::mousePressEvent(QGraphicsSceneMouseEvent *event) mCurrentTool = toolFromPos(event->pos()); setCursorFromAngle(QString("")); event->accept(); + + prepareFramesToMove(getLinkedFrames()); + } void UBGraphicsDelegateFrame::setCursorFromAngle(QString angle) @@ -469,6 +472,7 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { mTranslateX = move.dx(); mTranslateY = move.dy(); + moveLinkedItems(move); } QTransform tr = buildTransform(); @@ -534,6 +538,71 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event) event->accept(); } +QList UBGraphicsDelegateFrame::getLinkedFrames() +{ + QList linkedFrames; + QList sItems = mDelegate->delegated()->scene()->selectedItems(); + if (sItems.count()) + { + sItems.removeAll(delegated()); + + foreach(QGraphicsItem *item, sItems) + { + UBGraphicsItem *gitem = dynamic_cast(item); + if (gitem) + linkedFrames << gitem->Delegate()->frame(); + } + } + return linkedFrames; +} + +void UBGraphicsDelegateFrame::prepareFramesToMove(QList framesToMove) +{ + mLinkedFrames = framesToMove; + foreach (UBGraphicsDelegateFrame *frame, mLinkedFrames) + { + frame->prepareLinkedFrameToMove(); + } +} + +void UBGraphicsDelegateFrame::prepareLinkedFrameToMove() +{ + mDelegate->startUndoStep(); + + mStartingPoint = QPointF(0,0); + + initializeTransform(); + + mScaleX = 1; + mScaleY = 1; + mTranslateX = 0; + mTranslateY = 0; + mAngleOffset = 0; + + mInitialTransform = buildTransform(); + + mCurrentTool = Move; +} + +void UBGraphicsDelegateFrame::moveLinkedItems(QLineF movingVector, bool bLinked) +{ + if (bLinked) + { + mCurrentTool = Move; + + mTranslateX = movingVector.dx(); + mTranslateY = movingVector.dy(); + + delegated()->setTransform(buildTransform(), false); + } + else + { + foreach(UBGraphicsDelegateFrame* frame, mLinkedFrames) + { + frame->moveLinkedItems(movingVector, true); + } + } +} QTransform UBGraphicsDelegateFrame::buildTransform() { diff --git a/src/domain/UBGraphicsDelegateFrame.h b/src/domain/UBGraphicsDelegateFrame.h index b08ae219..142766fe 100644 --- a/src/domain/UBGraphicsDelegateFrame.h +++ b/src/domain/UBGraphicsDelegateFrame.h @@ -48,6 +48,10 @@ class UBGraphicsDelegateFrame: public QGraphicsRectItem, public QObject enum OperationMode {Scaling, Resizing, ResizingHorizontally}; void setOperationMode(OperationMode pMode) {mOperationMode = pMode;} bool isResizing(){return mResizing;} + void moveLinkedItems(QLineF movingVector, bool bLinked = false); + void prepareFramesToMove(QList framesToMove); + void prepareLinkedFrameToMove(); + QList getLinkedFrames(); private: QRectF bottomRightResizeGripRect() const; @@ -120,5 +124,7 @@ class UBGraphicsDelegateFrame: public QGraphicsRectItem, public QObject bool mResizing; bool mMirroredXAtStart; bool mMirroredYAtStart; + + QList mLinkedFrames; }; #endif /* UBGRAPHICSDELEGATEFRAME_H_ */ From 7a4edf75d69191a74068ddb596681d5a048fdd29 Mon Sep 17 00:00:00 2001 From: Ilia Ryabokon Date: Tue, 21 Aug 2012 16:33:33 +0300 Subject: [PATCH 4/7] Features selfdrop resolved --- src/gui/UBFeaturesWidget.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/gui/UBFeaturesWidget.cpp b/src/gui/UBFeaturesWidget.cpp index 85a41cad..78b4725e 100644 --- a/src/gui/UBFeaturesWidget.cpp +++ b/src/gui/UBFeaturesWidget.cpp @@ -379,6 +379,12 @@ void UBFeaturesListView::dragMoveEvent( QDragMoveEvent *event ) event->ignore(); return; } + foreach (UBFeature curFeature, fMimeData->features()) { + if (curFeature == onFeature) { + event->ignore(); + return; + } + } } if ( event->mimeData()->hasUrls() || event->mimeData()->hasImage() ) { From 370e5b37d06dd98e7409313f8ee1ea44debf71ad Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Wed, 22 Aug 2012 10:07:04 +0300 Subject: [PATCH 5/7] Page 1 (not title) can be deleted. --- src/board/UBBoardController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 2410a74b..34d94bf2 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -624,7 +624,7 @@ void UBBoardController::duplicateItem(UBItem *item) void UBBoardController::deleteScene(int nIndex) { - if (selectedDocument()->pageCount()>2) + if (selectedDocument()->pageCount()>=2) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); persistCurrentScene(); From a748e8a2990d9f7e95c3ce9c6061cfdc084374ae Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Wed, 22 Aug 2012 12:34:07 +0300 Subject: [PATCH 6/7] 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); From 97c2f6f7cebc13a93206bfbe3a4810fe7dc7af49 Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Wed, 22 Aug 2012 13:49:30 +0300 Subject: [PATCH 7/7] Removed debug code --- src/domain/UBGraphicsStrokesGroup.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/domain/UBGraphicsStrokesGroup.cpp b/src/domain/UBGraphicsStrokesGroup.cpp index 2f98bed3..a5320924 100644 --- a/src/domain/UBGraphicsStrokesGroup.cpp +++ b/src/domain/UBGraphicsStrokesGroup.cpp @@ -112,11 +112,6 @@ 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); }