From 8f06cfd8a1c4e17248544174baf96f23fc99508f Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Tue, 28 Aug 2012 19:15:11 +0300 Subject: [PATCH 01/24] SANKORE-1026 Navigation palette: thumbnails isn't refeshed after application added to the page Improvement of scene update flag setting --- src/domain/UBGraphicsScene.cpp | 16 ++++------------ src/domain/UBGraphicsScene.h | 12 ------------ src/frameworks/UBCoreGraphicsScene.cpp | 4 ++++ src/frameworks/UBCoreGraphicsScene.h | 13 +++++++++++++ 4 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index b4cbfc4e..6d1f5459 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -263,7 +263,6 @@ UBGraphicsScene::UBGraphicsScene(UBDocumentProxy* parent) , mCrossedBackground(false) , mIsDesktopMode(false) , mZoomFactor(1) - , mIsModified(true) , mBackgroundObject(0) , mPreviousWidth(0) , mInputDeviceIsPressed(false) @@ -1564,7 +1563,6 @@ UBGraphicsTextItem *UBGraphicsScene::addTextHtml(const QString &pString, const Q void UBGraphicsScene::addItem(QGraphicsItem* item) { - setModified(true); UBCoreGraphicsScene::addItem(item); UBGraphicsItem::assignZValue(item, mZLayerController->generateZLevel(item)); @@ -1577,8 +1575,6 @@ void UBGraphicsScene::addItem(QGraphicsItem* item) void UBGraphicsScene::addItems(const QSet& items) { - setModified(true); - foreach(QGraphicsItem* item, items) { UBCoreGraphicsScene::addItem(item); UBGraphicsItem::assignZValue(item, mZLayerController->generateZLevel(item)); @@ -1591,7 +1587,6 @@ void UBGraphicsScene::addItems(const QSet& items) void UBGraphicsScene::removeItem(QGraphicsItem* item) { - setModified(true); UBCoreGraphicsScene::removeItem(item); UBApplication::boardController->freezeW3CWidget(item, true); @@ -1603,8 +1598,6 @@ void UBGraphicsScene::removeItem(QGraphicsItem* item) void UBGraphicsScene::removeItems(const QSet& items) { - setModified(true); - foreach(QGraphicsItem* item, items) UBCoreGraphicsScene::removeItem(item); @@ -1762,7 +1755,6 @@ void UBGraphicsScene::addRuler(QPointF center) addItem(ruler); ruler->setVisible(true); - setModified(true); } void UBGraphicsScene::addProtractor(QPointF center) @@ -1780,7 +1772,6 @@ void UBGraphicsScene::addProtractor(QPointF center) protractor->moveBy(center.x() - itemSceneCenter.x(), center.y() - itemSceneCenter.y()); protractor->setVisible(true); - setModified(true); } void UBGraphicsScene::addTriangle(QPointF center) @@ -1798,7 +1789,6 @@ void UBGraphicsScene::addTriangle(QPointF center) triangle->moveBy(center.x() - itemSceneCenter.x(), center.y() - itemSceneCenter.y()); triangle->setVisible(true); - setModified(true); } void UBGraphicsScene::addMagnifier(UBMagnifierParams params) @@ -1857,6 +1847,7 @@ void UBGraphicsScene::moveMagnifier() { QPoint magnifierPos = QPoint(magniferControlViewWidget->pos().x() + magniferControlViewWidget->size().width() / 2, magniferControlViewWidget->pos().y() + magniferControlViewWidget->size().height() / 2 ); moveMagnifier(magnifierPos, true); + setModified(true); } } @@ -1889,6 +1880,7 @@ void UBGraphicsScene::moveMagnifier(QPoint newPos, bool forceGrab) void UBGraphicsScene::closeMagnifier() { DisposeMagnifierQWidgets(); + setModified(true); } void UBGraphicsScene::zoomInMagnifier() @@ -1906,6 +1898,7 @@ void UBGraphicsScene::zoomOutMagnifier() { magniferControlViewWidget->setZoom(magniferControlViewWidget->params.zoom - 0.5); magniferDisplayViewWidget->setZoom(magniferDisplayViewWidget->params.zoom - 0.5); + setModified(true); } } @@ -1917,6 +1910,7 @@ void UBGraphicsScene::resizedMagnifier(qreal newPercent) magniferControlViewWidget->grabPoint(); magniferDisplayViewWidget->setSize(newPercent); magniferDisplayViewWidget->grabPoint(); + setModified(true); } } @@ -1932,7 +1926,6 @@ void UBGraphicsScene::addCompass(QPointF center) compass->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool)); compass->setVisible(true); - setModified(true); } void UBGraphicsScene::addCache() @@ -1962,7 +1955,6 @@ void UBGraphicsScene::addMask(const QPointF ¢er) curtain->setRect(rect); curtain->setVisible(true); curtain->setSelected(true); - setModified(true); } void UBGraphicsScene::setRenderingQuality(UBItem::RenderingQuality pRenderingQuality) diff --git a/src/domain/UBGraphicsScene.h b/src/domain/UBGraphicsScene.h index 738bd429..6f8c8def 100644 --- a/src/domain/UBGraphicsScene.h +++ b/src/domain/UBGraphicsScene.h @@ -179,16 +179,6 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem bool isEmpty() const; - bool isModified() const - { - return mIsModified; - } - - void setModified(bool pModified) - { - mIsModified = pModified; - } - void setDocument(UBDocumentProxy* pDocument); UBDocumentProxy* document() const @@ -380,8 +370,6 @@ public slots: bool mIsDesktopMode; qreal mZoomFactor; - bool mIsModified; - QGraphicsItem* mBackgroundObject; QPointF mPreviousPoint; diff --git a/src/frameworks/UBCoreGraphicsScene.cpp b/src/frameworks/UBCoreGraphicsScene.cpp index fd4948ec..7caec260 100644 --- a/src/frameworks/UBCoreGraphicsScene.cpp +++ b/src/frameworks/UBCoreGraphicsScene.cpp @@ -23,6 +23,7 @@ UBCoreGraphicsScene::UBCoreGraphicsScene(QObject * parent) : QGraphicsScene ( parent ) + , mIsModified(true) { //NOOP } @@ -51,6 +52,8 @@ void UBCoreGraphicsScene::addItem(QGraphicsItem* item) if (item->scene() != this) QGraphicsScene::addItem(item); + + setModified(true); } @@ -63,6 +66,7 @@ void UBCoreGraphicsScene::removeItem(QGraphicsItem* item, bool forceDelete) delete item; item = 0; } + setModified(true); } bool UBCoreGraphicsScene::deleteItem(QGraphicsItem* item) diff --git a/src/frameworks/UBCoreGraphicsScene.h b/src/frameworks/UBCoreGraphicsScene.h index d518db4c..19ed9da9 100644 --- a/src/frameworks/UBCoreGraphicsScene.h +++ b/src/frameworks/UBCoreGraphicsScene.h @@ -33,8 +33,21 @@ class UBCoreGraphicsScene : public QGraphicsScene void removeItemFromDeletion(QGraphicsItem* item); void addItemToDeletion(QGraphicsItem *item); + bool isModified() const + { + return mIsModified; + } + + void setModified(bool pModified) + { + mIsModified = pModified; + } + + private: QSet mItemsToDelete; + + bool mIsModified; }; #endif /* UBCOREGRAPHICSSCENE_H_ */ From d12a2a80e1241fe7fa10622a7f3513c77346c6c4 Mon Sep 17 00:00:00 2001 From: shibakaneki Date: Thu, 30 Aug 2012 13:59:20 +0200 Subject: [PATCH 02/24] Fixed issue 633 again --- src/board/UBBoardPaletteManager.cpp | 4 +--- src/desktop/UBDesktopAnnotationController.cpp | 20 ++++++++++--------- src/gui/UBPropertyPalette.cpp | 2 ++ src/gui/UBPropertyPalette.h | 2 ++ 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/board/UBBoardPaletteManager.cpp b/src/board/UBBoardPaletteManager.cpp index 5c55521c..2652bb15 100644 --- a/src/board/UBBoardPaletteManager.cpp +++ b/src/board/UBBoardPaletteManager.cpp @@ -710,9 +710,7 @@ void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode, bool is mLeftPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView()); mRightPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView()); mStylusPalette->raise(); - // Maybe threre is a reason to keep that functions but with them right palette in desktop mode is not interactable - // mRightPalette->lower(); - // mLeftPalette->lower(); + if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) { diff --git a/src/desktop/UBDesktopAnnotationController.cpp b/src/desktop/UBDesktopAnnotationController.cpp index 6ca9ba87..e86dca46 100644 --- a/src/desktop/UBDesktopAnnotationController.cpp +++ b/src/desktop/UBDesktopAnnotationController.cpp @@ -86,7 +86,7 @@ UBDesktopAnnotationController::UBDesktopAnnotationController(QObject *parent) mTransparentDrawingView->setScene(mTransparentDrawingScene); mTransparentDrawingScene->setDrawingMode(true); - mDesktopPalette = new UBDesktopPalette(mTransparentDrawingView); + mDesktopPalette = new UBDesktopPalette(NULL); // FIX #633: The palette must be 'floating' in order to stay on top of the library palette if (UBPlatformUtils::hasVirtualKeyboard()) { @@ -119,13 +119,13 @@ UBDesktopAnnotationController::UBDesktopAnnotationController(QObject *parent) connect(UBDrawingController::drawingController(), SIGNAL(stylusToolChanged(int)), this, SLOT(stylusToolChanged(int))); // Add the desktop associated palettes - mDesktopPenPalette = new UBDesktopPenPalette(mTransparentDrawingView); + mDesktopPenPalette = new UBDesktopPenPalette(NULL); // FIX #633: The palette must be 'floating' in order to stay on top of the library palette connect(mDesktopPalette, SIGNAL(maximized()), mDesktopPenPalette, SLOT(onParentMaximized())); connect(mDesktopPalette, SIGNAL(minimizeStart(eMinimizedLocation)), mDesktopPenPalette, SLOT(onParentMinimized())); - mDesktopMarkerPalette = new UBDesktopMarkerPalette(mTransparentDrawingView); - mDesktopEraserPalette = new UBDesktopEraserPalette(mTransparentDrawingView); + mDesktopMarkerPalette = new UBDesktopMarkerPalette(NULL); // FIX #633: The palette must be 'floating' in order to stay on top of the library palette + mDesktopEraserPalette = new UBDesktopEraserPalette(NULL); // FIX #633: The palette must be 'floating' in order to stay on top of the library palette mDesktopPalette->setBackgroundBrush(UBSettings::settings()->opaquePaletteColor); mDesktopPenPalette->setBackgroundBrush(UBSettings::settings()->opaquePaletteColor); @@ -154,6 +154,12 @@ UBDesktopAnnotationController::UBDesktopAnnotationController(QObject *parent) connect(UBApplication::boardController->paletteManager()->rightPalette(), SIGNAL(resized()), this, SLOT(refreshMask())); #endif onDesktopPaletteMaximized(); + + // FIX #633: Ensure that these palettes stay on top of the other elements + mDesktopEraserPalette->raise(); + mDesktopMarkerPalette->raise(); + mDesktopPenPalette->raise(); + mDesktopPalette->raise(); } UBDesktopAnnotationController::~UBDesktopAnnotationController() @@ -243,11 +249,7 @@ void UBDesktopAnnotationController::setAssociatedPalettePosition(UBActionPalette if(act->objectName() == actionName) { int iAction = actions.indexOf(act); - yPen = iAction * mDesktopPalette->buttonSize().height(); - - // Add the borders - yPen += (iAction) * (mDesktopPalette->border() + 4); // 4 has been set after some experiment. We must determine why this value is good - + yPen = iAction * (mDesktopPalette->buttonSize().height() + 2 * mDesktopPalette->border() +6); // This is the mysterious value (6) break; } } diff --git a/src/gui/UBPropertyPalette.cpp b/src/gui/UBPropertyPalette.cpp index 8d587c99..643f87a7 100644 --- a/src/gui/UBPropertyPalette.cpp +++ b/src/gui/UBPropertyPalette.cpp @@ -25,6 +25,7 @@ UBPropertyPalette::UBPropertyPalette(QWidget *parent, const char *name):UBAction { setObjectName(name); mbGrip = false; + setMaximumHeight(MAX_HEIGHT); } /** @@ -35,6 +36,7 @@ UBPropertyPalette::UBPropertyPalette(QWidget *parent, const char *name):UBAction UBPropertyPalette::UBPropertyPalette(Qt::Orientation orientation, QWidget *parent):UBActionPalette(orientation, parent) { mbGrip = false; + setMaximumHeight(MAX_HEIGHT); } /** diff --git a/src/gui/UBPropertyPalette.h b/src/gui/UBPropertyPalette.h index 777e976e..47bacf13 100644 --- a/src/gui/UBPropertyPalette.h +++ b/src/gui/UBPropertyPalette.h @@ -20,6 +20,8 @@ #include "UBActionPalette.h" +#define MAX_HEIGHT 20 + class UBPropertyPalette : public UBActionPalette { Q_OBJECT From 4a7cd59250d57f214b34a5b4518c5ce99bb988b6 Mon Sep 17 00:00:00 2001 From: maximXbs Date: Thu, 30 Aug 2012 16:40:19 +0200 Subject: [PATCH 03/24] fixed Sankore-704 bug --- .../locales/fr/scripts/blackYellow.js | 31 ++++++++++++++++--- .../locales/ru/scripts/blackYellow.js | 31 ++++++++++++++++--- .../Contraste.wgt/scripts/blackYellow.js | 29 ++++++++++++++--- 3 files changed, 77 insertions(+), 14 deletions(-) diff --git a/resources/library/interactivities/Contraste.wgt/locales/fr/scripts/blackYellow.js b/resources/library/interactivities/Contraste.wgt/locales/fr/scripts/blackYellow.js index 34de0859..3fbfd9aa 100644 --- a/resources/library/interactivities/Contraste.wgt/locales/fr/scripts/blackYellow.js +++ b/resources/library/interactivities/Contraste.wgt/locales/fr/scripts/blackYellow.js @@ -326,6 +326,15 @@ function init(){ $(".closeItem").live("click", function(){ if(!shadowOver){ $(this).parent().remove(); + if($(".editContainer").size() > 0){ + var prev = $(".editContainer:first"); + if((prev.position().left == 54) && (prev.position().top != 60)) + prev.css("top", "60px"); + var prevBottom = prev.position().top + prev.height(), + prevLeft = prev.position().left; + if(prev.next().length) + recursionCall(prevBottom, prevLeft, prev.next()); + } } }); @@ -339,8 +348,7 @@ function init(){ }) function recursionCall(prevBottom, prevLeft, curr){ - var curTop = curr.position().top, - curHeight = curr.height(), + var curHeight = curr.height(), curLeft = curr.position().left; if(prevLeft == curLeft){ if((prevBottom + 15 + curHeight) < ($(window).height() - 54)) @@ -351,7 +359,7 @@ function init(){ if((prevBottom + 15 + curHeight) < ($(window).height() - 54)) curr.css("top", prevBottom + 15 + "px").css("left", prevLeft + "px"); else - curr.css("top", "60px"); + curr.css("top", "60px").css("left", prevLeft + 255 + "px"); } prevBottom = curr.position().top + curr.height(), prevLeft = curr.position().left; @@ -364,7 +372,20 @@ function init(){ popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%"); $(window).resize(function(){ - //$("#leftDiv,#rightDiv,#shadowDiv").css("height", $(window).height()); + if($("#wgt_edit").hasClass("selected")){ + if($(".editContainer").size() > 1){ + var prev = $(".editContainer:first"), + prevBottom = prev.position().top + prev.height(), + prevLeft = prev.position().left; + recursionCall(prevBottom, prevLeft, prev.next()); + } + } else { + var tmp_array = []; + $(".readyTask").each(function(){ + tmp_array.push($(this)); + }); + orderItems(tmp_array); + } popupBack.css("top", ($(window).height() - 138)*50/$(window).height() + "%"); popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%"); }); @@ -564,4 +585,4 @@ function changeStyle(val){ } if($("#wgt_edit").hasClass("selected")) $(document).enableTextSelect(); -} \ No newline at end of file +} diff --git a/resources/library/interactivities/Contraste.wgt/locales/ru/scripts/blackYellow.js b/resources/library/interactivities/Contraste.wgt/locales/ru/scripts/blackYellow.js index fce0a9af..fc0eb152 100644 --- a/resources/library/interactivities/Contraste.wgt/locales/ru/scripts/blackYellow.js +++ b/resources/library/interactivities/Contraste.wgt/locales/ru/scripts/blackYellow.js @@ -326,6 +326,15 @@ function init(){ $(".closeItem").live("click", function(){ if(!shadowOver){ $(this).parent().remove(); + if($(".editContainer").size() > 0){ + var prev = $(".editContainer:first"); + if((prev.position().left == 54) && (prev.position().top != 60)) + prev.css("top", "60px"); + var prevBottom = prev.position().top + prev.height(), + prevLeft = prev.position().left; + if(prev.next().length) + recursionCall(prevBottom, prevLeft, prev.next()); + } } }); @@ -339,8 +348,7 @@ function init(){ }) function recursionCall(prevBottom, prevLeft, curr){ - var curTop = curr.position().top, - curHeight = curr.height(), + var curHeight = curr.height(), curLeft = curr.position().left; if(prevLeft == curLeft){ if((prevBottom + 15 + curHeight) < ($(window).height() - 54)) @@ -351,7 +359,7 @@ function init(){ if((prevBottom + 15 + curHeight) < ($(window).height() - 54)) curr.css("top", prevBottom + 15 + "px").css("left", prevLeft + "px"); else - curr.css("top", "60px"); + curr.css("top", "60px").css("left", prevLeft + 255 + "px"); } prevBottom = curr.position().top + curr.height(), prevLeft = curr.position().left; @@ -364,7 +372,20 @@ function init(){ popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%"); $(window).resize(function(){ - //$("#leftDiv,#rightDiv,#shadowDiv").css("height", $(window).height()); + if($("#wgt_edit").hasClass("selected")){ + if($(".editContainer").size() > 1){ + var prev = $(".editContainer:first"), + prevBottom = prev.position().top + prev.height(), + prevLeft = prev.position().left; + recursionCall(prevBottom, prevLeft, prev.next()); + } + } else { + var tmp_array = []; + $(".readyTask").each(function(){ + tmp_array.push($(this)); + }); + orderItems(tmp_array); + } popupBack.css("top", ($(window).height() - 138)*50/$(window).height() + "%"); popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%"); }); @@ -564,4 +585,4 @@ function changeStyle(val){ } if($("#wgt_edit").hasClass("selected")) $(document).enableTextSelect(); -} \ No newline at end of file +} diff --git a/resources/library/interactivities/Contraste.wgt/scripts/blackYellow.js b/resources/library/interactivities/Contraste.wgt/scripts/blackYellow.js index 27035aaf..89e6df3f 100644 --- a/resources/library/interactivities/Contraste.wgt/scripts/blackYellow.js +++ b/resources/library/interactivities/Contraste.wgt/scripts/blackYellow.js @@ -326,6 +326,15 @@ function init(){ $(".closeItem").live("click", function(){ if(!shadowOver){ $(this).parent().remove(); + if($(".editContainer").size() > 0){ + var prev = $(".editContainer:first"); + if((prev.position().left == 54) && (prev.position().top != 60)) + prev.css("top", "60px"); + var prevBottom = prev.position().top + prev.height(), + prevLeft = prev.position().left; + if(prev.next().length) + recursionCall(prevBottom, prevLeft, prev.next()); + } } }); @@ -339,8 +348,7 @@ function init(){ }) function recursionCall(prevBottom, prevLeft, curr){ - var curTop = curr.position().top, - curHeight = curr.height(), + var curHeight = curr.height(), curLeft = curr.position().left; if(prevLeft == curLeft){ if((prevBottom + 15 + curHeight) < ($(window).height() - 54)) @@ -351,7 +359,7 @@ function init(){ if((prevBottom + 15 + curHeight) < ($(window).height() - 54)) curr.css("top", prevBottom + 15 + "px").css("left", prevLeft + "px"); else - curr.css("top", "60px"); + curr.css("top", "60px").css("left", prevLeft + 255 + "px"); } prevBottom = curr.position().top + curr.height(), prevLeft = curr.position().left; @@ -364,7 +372,20 @@ function init(){ popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%"); $(window).resize(function(){ - //$("#leftDiv,#rightDiv,#shadowDiv").css("height", $(window).height()); + if($("#wgt_edit").hasClass("selected")){ + if($(".editContainer").size() > 1){ + var prev = $(".editContainer:first"), + prevBottom = prev.position().top + prev.height(), + prevLeft = prev.position().left; + recursionCall(prevBottom, prevLeft, prev.next()); + } + } else { + var tmp_array = []; + $(".readyTask").each(function(){ + tmp_array.push($(this)); + }); + orderItems(tmp_array); + } popupBack.css("top", ($(window).height() - 138)*50/$(window).height() + "%"); popupBack.css("left", ($(window).width() - 360)*50/$(window).width() + "%"); }); From 990458d187c109aca0fc2359484b16f040329c17 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Thu, 30 Aug 2012 18:30:49 +0300 Subject: [PATCH 04/24] Removed memory leaks at deletion of UBGraphicsGroupContainerItem. Corrected adding items to group. Corrected group creation. Corrected adding items to scene - items shouldn't be added to itemsToRemove list because that list needs for cleaning undo stack. Improved mechanism of removing "itemsToRemove". Removed wrong deletion of mButtons list from UBGraphicsItemDelegate destructor because that buttons has Frame as parent. Removed possible memory leak in UBBoardController::clearUndoStack. Some items was able not deleted. tmpScene in cffReader not deletes now because ithas a proxy as parent. --- src/adaptors/UBCFFSubsetAdaptor.cpp | 2 -- src/board/UBBoardController.cpp | 3 +- src/domain/UBGraphicsGroupContainerItem.cpp | 33 ++++++++++----------- src/domain/UBGraphicsGroupContainerItem.h | 3 +- src/domain/UBGraphicsItemDelegate.cpp | 3 +- src/domain/UBGraphicsScene.cpp | 2 +- src/frameworks/UBCoreGraphicsScene.cpp | 27 ++++++++++------- 7 files changed, 38 insertions(+), 35 deletions(-) diff --git a/src/adaptors/UBCFFSubsetAdaptor.cpp b/src/adaptors/UBCFFSubsetAdaptor.cpp index 7eb667b5..097540a7 100644 --- a/src/adaptors/UBCFFSubsetAdaptor.cpp +++ b/src/adaptors/UBCFFSubsetAdaptor.cpp @@ -1189,8 +1189,6 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::persistScenes() UBGraphicsScene *tmpScene = UBSvgSubsetAdaptor::loadScene(mProxy, i); tmpScene->setModified(true); UBThumbnailAdaptor::persistScene(mProxy, tmpScene, i); - delete tmpScene; - mCurrentScene->setModified(false); } diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index bcfc1ddd..d2397285 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -1515,7 +1515,8 @@ void UBBoardController::ClearUndoStack() } if(!scene) { - mActiveScene->deleteItem(item); + if (!mActiveScene->deleteItem(item)) + delete item; } } diff --git a/src/domain/UBGraphicsGroupContainerItem.cpp b/src/domain/UBGraphicsGroupContainerItem.cpp index bed3b219..ff4a8bc4 100644 --- a/src/domain/UBGraphicsGroupContainerItem.cpp +++ b/src/domain/UBGraphicsGroupContainerItem.cpp @@ -28,18 +28,12 @@ UBGraphicsGroupContainerItem::UBGraphicsGroupContainerItem(QGraphicsItem *parent setUuid(QUuid::createUuid()); setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::ObjectItem)); //Necessary to set if we want z value to be assigned correctly - - } UBGraphicsGroupContainerItem::~UBGraphicsGroupContainerItem() { - foreach (QGraphicsItem *item, childItems()) - { - removeFromGroup(item); - if (item && item->scene()) - item->scene()->removeItem(item); - } + if (mDelegate) + delete mDelegate; } void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item) @@ -83,6 +77,8 @@ void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item) QTransform newItemTransform(itemTransform); item->setPos(mapFromItem(item, 0, 0)); + + item->scene()->removeItem(item); item->setParentItem(this); // removing position from translation component of the new transform @@ -113,10 +109,12 @@ void UBGraphicsGroupContainerItem::removeFromGroup(QGraphicsItem *item) { if (!item) { qDebug() << "can't specify the item because of the null pointer"; + return; } - UBGraphicsScene *groupScene = scene(); - if (groupScene) { + UBCoreGraphicsScene *groupScene = corescene(); + if (groupScene) + { groupScene->addItemToDeletion(item); } @@ -170,9 +168,9 @@ void UBGraphicsGroupContainerItem::paint(QPainter *painter, const QStyleOptionGr // } } -UBGraphicsScene *UBGraphicsGroupContainerItem::scene() +UBCoreGraphicsScene *UBGraphicsGroupContainerItem::corescene() { - UBGraphicsScene *castScene = dynamic_cast(QGraphicsItem::scene()); + UBCoreGraphicsScene *castScene = dynamic_cast(QGraphicsItem::scene()); return castScene; } @@ -218,15 +216,14 @@ void UBGraphicsGroupContainerItem::setUuid(const QUuid &pUuid) void UBGraphicsGroupContainerItem::destroy() { - UBGraphicsScene *groupScene = scene(); + UBCoreGraphicsScene *groupScene = corescene(); - foreach (QGraphicsItem *item, childItems()) { - - if (groupScene) { - groupScene->addItemToDeletion(item); - } + if (groupScene) { + // groupScene->addItemToDeletion(this); + } + foreach (QGraphicsItem *item, childItems()) { pRemoveFromGroup(item); item->setFlag(QGraphicsItem::ItemIsSelectable, true); item->setFlag(QGraphicsItem::ItemIsFocusable, true); diff --git a/src/domain/UBGraphicsGroupContainerItem.h b/src/domain/UBGraphicsGroupContainerItem.h index 535627eb..00f643d3 100644 --- a/src/domain/UBGraphicsGroupContainerItem.h +++ b/src/domain/UBGraphicsGroupContainerItem.h @@ -4,6 +4,7 @@ #include #include "domain/UBItem.h" +#include "frameworks/UBCoreGraphicsScene.h" class UBGraphicsGroupContainerItem : public QGraphicsItem, public UBItem, public UBGraphicsItem { @@ -23,7 +24,7 @@ public: virtual UBGraphicsItemDelegate* Delegate() const { return mDelegate;} - virtual UBGraphicsScene* scene(); + virtual UBCoreGraphicsScene *corescene(); virtual UBGraphicsGroupContainerItem *deepCopy() const; virtual void copyItemParameters(UBItem *copy) const; diff --git a/src/domain/UBGraphicsItemDelegate.cpp b/src/domain/UBGraphicsItemDelegate.cpp index 4abeb1a2..6c0349e4 100644 --- a/src/domain/UBGraphicsItemDelegate.cpp +++ b/src/domain/UBGraphicsItemDelegate.cpp @@ -113,7 +113,6 @@ UBGraphicsItemDelegate::UBGraphicsItemDelegate(QGraphicsItem* pDelegated, QObjec , mFlippable(false) , mToolBarUsed(useToolBar) { - // NOOP connect(UBApplication::boardController, SIGNAL(zoomChanged(qreal)), this, SLOT(onZoomChanged())); } @@ -167,7 +166,7 @@ void UBGraphicsItemDelegate::init() UBGraphicsItemDelegate::~UBGraphicsItemDelegate() { - qDeleteAll(mButtons); + disconnect(UBApplication::boardController, SIGNAL(zoomChanged(qreal)), this, SLOT(onZoomChanged())); // do not release mMimeData. // the mMimeData is owned by QDrag since the setMimeData call as specified in the documentation } diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index b4cbfc4e..f6a12f95 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1363,6 +1363,7 @@ UBGraphicsW3CWidgetItem* UBGraphicsScene::addOEmbed(const QUrl& pContentUrl, con UBGraphicsGroupContainerItem *UBGraphicsScene::createGroup(QList items) { UBGraphicsGroupContainerItem *groupItem = new UBGraphicsGroupContainerItem(); + addItem(groupItem); foreach (QGraphicsItem *item, items) { if (item->type() == UBGraphicsGroupContainerItem::Type) { @@ -1379,7 +1380,6 @@ UBGraphicsGroupContainerItem *UBGraphicsScene::createGroup(QListsetVisible(true); groupItem->setFocus(); diff --git a/src/frameworks/UBCoreGraphicsScene.cpp b/src/frameworks/UBCoreGraphicsScene.cpp index fd4948ec..1f306425 100644 --- a/src/frameworks/UBCoreGraphicsScene.cpp +++ b/src/frameworks/UBCoreGraphicsScene.cpp @@ -30,12 +30,23 @@ UBCoreGraphicsScene::UBCoreGraphicsScene(QObject * parent) UBCoreGraphicsScene::~UBCoreGraphicsScene() { //we must delete removed items that are no more in any scene - foreach (const QGraphicsItem* item, mItemsToDelete) + //at groups deleting some items can be added to mItemsToDelete, so we need to use iterators. + if (mItemsToDelete.count()) { - if (item->scene() == NULL || item->scene() == this) + QSet::iterator it = mItemsToDelete.begin(); + QGraphicsItem* item = *it; + do { - delete item; - } + item = *it; + if (item && (item->scene() == NULL || item->scene() == this)) + { + mItemsToDelete.remove(*it); + delete item; + } + + it = mItemsToDelete.begin(); + + }while(mItemsToDelete.count()); } } @@ -46,9 +57,7 @@ void UBCoreGraphicsScene::addItem(QGraphicsItem* item) removeItemFromDeletion(curItem); } } - - mItemsToDelete << item; - + if (item->scene() != this) QGraphicsScene::addItem(item); } @@ -59,9 +68,7 @@ void UBCoreGraphicsScene::removeItem(QGraphicsItem* item, bool forceDelete) QGraphicsScene::removeItem(item); if (forceDelete) { - mItemsToDelete.remove(item); - delete item; - item = 0; + deleteItem(item); } } From 0b108d466a0f32c242166fed4d2d9cfbda3087b8 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Fri, 31 Aug 2012 10:11:43 +0300 Subject: [PATCH 05/24] Fixed adding items from section to group. --- src/adaptors/UBCFFSubsetAdaptor.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/adaptors/UBCFFSubsetAdaptor.cpp b/src/adaptors/UBCFFSubsetAdaptor.cpp index 097540a7..87c83cc4 100644 --- a/src/adaptors/UBCFFSubsetAdaptor.cpp +++ b/src/adaptors/UBCFFSubsetAdaptor.cpp @@ -174,9 +174,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseGSection(const QDomElement &ele QDomElement currentSvgElement = element.firstChildElement(); while (!currentSvgElement.isNull()) { - if (!parseSvgElement(currentSvgElement)) - return false; - + parseSvgElement(currentSvgElement); currentSvgElement = currentSvgElement.nextSiblingElement(); } @@ -187,8 +185,8 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseGSection(const QDomElement &ele else { delete mGSectionContainer; - mGSectionContainer = NULL; } + mGSectionContainer = NULL; return true; } From 3d3dee28d287e6f8472e6a8c2f1733fdd6150cd7 Mon Sep 17 00:00:00 2001 From: shibakaneki Date: Fri, 31 Aug 2012 10:15:34 +0200 Subject: [PATCH 06/24] Fixed issue 984 --- src/gui/UBThumbnailWidget.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gui/UBThumbnailWidget.cpp b/src/gui/UBThumbnailWidget.cpp index 24f7442f..3057761b 100644 --- a/src/gui/UBThumbnailWidget.cpp +++ b/src/gui/UBThumbnailWidget.cpp @@ -12,11 +12,13 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +#include #include #include #include "UBThumbnailWidget.h" #include "UBRubberBand.h" +#include "UBMainWindow.h" #include "board/UBBoardController.h" @@ -858,7 +860,9 @@ void UBSceneThumbnailNavigPixmap::updateButtonsState() void UBSceneThumbnailNavigPixmap::deletePage() { - UBApplication::boardController->deleteScene(sceneIndex()); + if(UBApplication::mainWindow->yesNoQuestion(QObject::tr("Remove Page"), QObject::tr("Are you sure you want to remove 1 page from the selected document '%0'?").arg(UBApplication::documentController->selectedDocument()->metaData(UBSettings::documentName).toString()))){ + UBApplication::boardController->deleteScene(sceneIndex()); + } } void UBSceneThumbnailNavigPixmap::duplicatePage() From 4b7939b6c3b97e10a82f5e86f5c4c93d7f0388e0 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Fri, 31 Aug 2012 11:47:14 +0300 Subject: [PATCH 07/24] Grouped items doesn't manages by mFastAccessItems now. --- src/board/UBBoardController.cpp | 5 +++-- src/domain/UBGraphicsGroupContainerItem.cpp | 6 ++++++ src/domain/UBGraphicsPolygonItem.cpp | 4 ++-- src/domain/UBGraphicsScene.cpp | 11 +++++++++++ 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index d2397285..891591d7 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -1482,11 +1482,12 @@ void UBBoardController::ClearUndoStack() UBGraphicsItemUndoCommand *cmd = (UBGraphicsItemUndoCommand*)UBApplication::undoStack->command(i); // go through all added and removed objects, for create list of unique objects + // grouped items will be deleted by groups, so we don't need do delete that items. QSetIterator itAdded(cmd->GetAddedList()); while (itAdded.hasNext()) { QGraphicsItem* item = itAdded.next(); - if( !uniqueItems.contains(item) ) + if( !uniqueItems.contains(item) && !(item->parentItem() && UBGraphicsGroupContainerItem::Type == item->parentItem()->type())) uniqueItems.insert(item); } @@ -1494,7 +1495,7 @@ void UBBoardController::ClearUndoStack() while (itRemoved.hasNext()) { QGraphicsItem* item = itRemoved.next(); - if( !uniqueItems.contains(item) ) + if( !uniqueItems.contains(item) && (item->parentItem() && UBGraphicsGroupContainerItem::Type != item->parentItem()->type())) uniqueItems.insert(item); } } diff --git a/src/domain/UBGraphicsGroupContainerItem.cpp b/src/domain/UBGraphicsGroupContainerItem.cpp index ff4a8bc4..1c63d004 100644 --- a/src/domain/UBGraphicsGroupContainerItem.cpp +++ b/src/domain/UBGraphicsGroupContainerItem.cpp @@ -324,6 +324,12 @@ void UBGraphicsGroupContainerItem::pRemoveFromGroup(QGraphicsItem *item) item->setParentItem(newParent); item->setPos(oldPos); + UBGraphicsScene *Scene = dynamic_cast(item->scene()); + if (Scene) + { + Scene->addItem(item); + } + // removing position from translation component of the new transform if (!item->pos().isNull()) itemTransform *= QTransform::fromTranslate(-item->x(), -item->y()); diff --git a/src/domain/UBGraphicsPolygonItem.cpp b/src/domain/UBGraphicsPolygonItem.cpp index b21f2760..8e0e6f85 100644 --- a/src/domain/UBGraphicsPolygonItem.cpp +++ b/src/domain/UBGraphicsPolygonItem.cpp @@ -67,8 +67,8 @@ void UBGraphicsPolygonItem::clearStroke() if (mStroke!=NULL) { mStroke->remove(this); - if (mStroke->polygons().empty()) - delete mStroke; + //if (mStroke->polygons().empty()) + // delete mStroke; mStroke = NULL; } } diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index f6a12f95..f5463574 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1374,9 +1374,11 @@ UBGraphicsGroupContainerItem *UBGraphicsScene::createGroup(QListaddToGroup(chItem); + mFastAccessItems.removeAll(item); } } else { groupItem->addToGroup(item); + mFastAccessItems.removeAll(item); } } @@ -1396,6 +1398,15 @@ UBGraphicsGroupContainerItem *UBGraphicsScene::createGroup(QListchildItems().count(); i++) + { + QGraphicsItem *it = qgraphicsitem_cast(groupItem->childItems().at(i)); + if (it) + { + mFastAccessItems.removeAll(it); + } + } + groupItem->setVisible(true); groupItem->setFocus(); From 8b19847c1121b9ca8f93259b0b6c7d2067a0d91e Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Fri, 31 Aug 2012 12:18:50 +0300 Subject: [PATCH 08/24] Fixed deletion removed groups. Code was cleaned. Corrections in removing strokes. --- src/board/UBBoardController.cpp | 2 +- src/domain/UBGraphicsGroupContainerItem.cpp | 4 ---- src/domain/UBGraphicsPolygonItem.cpp | 4 ++-- src/domain/UBGraphicsScene.cpp | 17 +++++++++++++++++ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 891591d7..3c56d617 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -1495,7 +1495,7 @@ void UBBoardController::ClearUndoStack() while (itRemoved.hasNext()) { QGraphicsItem* item = itRemoved.next(); - if( !uniqueItems.contains(item) && (item->parentItem() && UBGraphicsGroupContainerItem::Type != item->parentItem()->type())) + if( !uniqueItems.contains(item) && !(item->parentItem() && UBGraphicsGroupContainerItem::Type == item->parentItem()->type())) uniqueItems.insert(item); } } diff --git a/src/domain/UBGraphicsGroupContainerItem.cpp b/src/domain/UBGraphicsGroupContainerItem.cpp index 1c63d004..b3e9dec8 100644 --- a/src/domain/UBGraphicsGroupContainerItem.cpp +++ b/src/domain/UBGraphicsGroupContainerItem.cpp @@ -219,10 +219,6 @@ void UBGraphicsGroupContainerItem::destroy() { UBCoreGraphicsScene *groupScene = corescene(); - if (groupScene) { - // groupScene->addItemToDeletion(this); - } - foreach (QGraphicsItem *item, childItems()) { pRemoveFromGroup(item); item->setFlag(QGraphicsItem::ItemIsSelectable, true); diff --git a/src/domain/UBGraphicsPolygonItem.cpp b/src/domain/UBGraphicsPolygonItem.cpp index 8e0e6f85..b21f2760 100644 --- a/src/domain/UBGraphicsPolygonItem.cpp +++ b/src/domain/UBGraphicsPolygonItem.cpp @@ -67,8 +67,8 @@ void UBGraphicsPolygonItem::clearStroke() if (mStroke!=NULL) { mStroke->remove(this); - //if (mStroke->polygons().empty()) - // delete mStroke; + if (mStroke->polygons().empty()) + delete mStroke; mStroke = NULL; } } diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index f5463574..a982a2d1 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -305,7 +305,10 @@ UBGraphicsScene::~UBGraphicsScene() { if (mCurrentStroke) if (mCurrentStroke->polygons().empty()) + { delete mCurrentStroke; + mCurrentStroke = NULL; + } if (mZLayerController) delete mZLayerController; @@ -433,6 +436,11 @@ bool UBGraphicsScene::inputDevicePress(const QPointF& scenePos, const qreal& pre } } + if (mCurrentStroke && mCurrentStroke->polygons().empty()){ + delete mCurrentStroke; + mCurrentStroke = NULL; + } + return accepted; } @@ -474,6 +482,10 @@ bool UBGraphicsScene::inputDeviceMove(const QPointF& scenePos, const qreal& pres UBCoreGraphicsScene::removeItemFromDeletion(mpLastPolygon); mAddedItems.remove(mpLastPolygon); mCurrentStroke->remove(mpLastPolygon); + if (mCurrentStroke->polygons().empty()){ + delete mCurrentStroke; + mCurrentStroke = NULL; + } removeItem(mpLastPolygon); mPreviousPolygonItems.removeAll(mpLastPolygon); } @@ -2285,6 +2297,11 @@ void UBGraphicsScene::setToolCursor(int tool) { deselectAllItems(); } + + if (mCurrentStroke && mCurrentStroke->polygons().empty()){ + delete mCurrentStroke; + } + mCurrentStroke = NULL; } void UBGraphicsScene::initStroke(){ From 29ef687d41c717e35644fc0f6a976c55c63d0740 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Fri, 31 Aug 2012 13:00:30 +0300 Subject: [PATCH 09/24] Useless code removed. --- src/domain/UBGraphicsGroupContainerItem.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/domain/UBGraphicsGroupContainerItem.cpp b/src/domain/UBGraphicsGroupContainerItem.cpp index b3e9dec8..10be1c4d 100644 --- a/src/domain/UBGraphicsGroupContainerItem.cpp +++ b/src/domain/UBGraphicsGroupContainerItem.cpp @@ -216,9 +216,6 @@ void UBGraphicsGroupContainerItem::setUuid(const QUuid &pUuid) void UBGraphicsGroupContainerItem::destroy() { - UBCoreGraphicsScene *groupScene = corescene(); - - foreach (QGraphicsItem *item, childItems()) { pRemoveFromGroup(item); item->setFlag(QGraphicsItem::ItemIsSelectable, true); From 278668b500164563e5da69dcc052dfd7901f77af Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Fri, 31 Aug 2012 14:51:58 +0300 Subject: [PATCH 10/24] Another fix for SANKORE-972. --- src/domain/UBGraphicsScene.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index a982a2d1..47547198 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1615,6 +1615,7 @@ void UBGraphicsScene::addItems(const QSet& items) void UBGraphicsScene::removeItem(QGraphicsItem* item) { setModified(true); + item->setSelected(false); UBCoreGraphicsScene::removeItem(item); UBApplication::boardController->freezeW3CWidget(item, true); @@ -2235,7 +2236,6 @@ void UBGraphicsScene::keyReleaseEvent(QKeyEvent * keyEvent) default: { - item->setSelected(false); UBGraphicsItem *ubgi = dynamic_cast(item); if (0 != ubgi) ubgi->remove(); From c0d9f87812b3d29d5a03ddeae7ef28a9f2ce0900 Mon Sep 17 00:00:00 2001 From: maximXbs Date: Fri, 31 Aug 2012 15:54:48 +0200 Subject: [PATCH 11/24] fixed Sankore-1089 bug --- .../interactivities/Ordre phrase.wgt/styles/of_puppets.css | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/library/interactivities/Ordre phrase.wgt/styles/of_puppets.css b/resources/library/interactivities/Ordre phrase.wgt/styles/of_puppets.css index 6589dcef..401a2bea 100644 --- a/resources/library/interactivities/Ordre phrase.wgt/styles/of_puppets.css +++ b/resources/library/interactivities/Ordre phrase.wgt/styles/of_puppets.css @@ -33,7 +33,6 @@ body{ font: 28px tahoma; text-align: center; cursor: pointer; - text-transform: uppercase; overflow: hidden; } From 81c42f539d4af50f877d20848bd1940c579731af Mon Sep 17 00:00:00 2001 From: maximXbs Date: Fri, 31 Aug 2012 16:40:40 +0200 Subject: [PATCH 12/24] fixed Sankore-588 bug --- resources/library/applications/Grapheur.wgt/Grapheur.xhtml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/resources/library/applications/Grapheur.wgt/Grapheur.xhtml b/resources/library/applications/Grapheur.wgt/Grapheur.xhtml index 3a94a9d3..bfca757c 100644 --- a/resources/library/applications/Grapheur.wgt/Grapheur.xhtml +++ b/resources/library/applications/Grapheur.wgt/Grapheur.xhtml @@ -218,7 +218,6 @@ return true; }); $("label[for*='checkAire']").text(sankoreLang[lang].draw); - $("label[for*='checkMaJ']").text(sankoreLang[lang].auto_update); $("#menuOptions td").eq(0).html(sankoreLang[lang].widget); $("#menuOptions h3").eq(0).text(sankoreLang[lang].widget_options); $("#menuOptions2D h3").eq(0).text(sankoreLang[lang].options + " 2D"); @@ -1033,13 +1032,10 @@ Control options:

Save a widget options in cookies or load an options from cookies or delete a registered options. -

-


Cookies are disabled. You cannot save an options...

You are using the last version of this widget.
-
From 1ce5763adc9d299041de1bb74d23e33ac9675c99 Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Mon, 3 Sep 2012 12:25:54 +0300 Subject: [PATCH 13/24] SANKORE-1063 --- src/domain/UBGraphicsScene.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 6d1f5459..c25b65f6 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1105,9 +1105,10 @@ void UBGraphicsScene::clearItems() if (!item->parentItem()) { - UBGraphicsPolygonItem* pi = qgraphicsitem_cast(item); + bool isPolygon = qgraphicsitem_cast(item) != NULL; + bool isStrokesGroup = qgraphicsitem_cast(item) != NULL; - if(!pi && !mTools.contains(item) && !isBackgroundObject(item)) + if(!isPolygon && !isStrokesGroup && !mTools.contains(item) && !isBackgroundObject(item)) { removeItem(item); removedItems << item; From 5cec06a62a934a5108152b2140f69c467ab929bf Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Mon, 3 Sep 2012 13:00:40 +0300 Subject: [PATCH 14/24] Duplication of Strokes was implemented. --- src/board/UBBoardController.cpp | 10 ++++------ src/domain/UBGraphicsPolygonItem.cpp | 20 +++++++++----------- src/domain/UBGraphicsStrokesGroup.cpp | 13 +++++++------ 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 3c56d617..66dbc026 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -557,11 +557,10 @@ void UBBoardController::duplicateItem(UBItem *item) UBMimeType::Enum itemMimeType; QString contentTypeHeader = UBFileSystemUtils::mimeTypeFromFileName(item->sourceUrl().toLocalFile()); - if(NULL != qgraphicsitem_cast(commonItem)){ - itemMimeType = UBMimeType::Group; - }else{ - itemMimeType = UBFileSystemUtils::mimeTypeFromString(contentTypeHeader); - } + if(NULL != qgraphicsitem_cast(commonItem)) + itemMimeType = UBMimeType::Group; + else + itemMimeType = UBFileSystemUtils::mimeTypeFromString(contentTypeHeader); switch(static_cast(itemMimeType)) { @@ -633,7 +632,6 @@ void UBBoardController::duplicateItem(UBItem *item) QGraphicsItem *gitem = dynamic_cast(item->deepCopy()); if (gitem) { - qDebug() << "Adding a stroke: " << gitem; mActiveScene->addItem(gitem); gitem->setPos(itemPos); mLastCreatedItem = gitem; diff --git a/src/domain/UBGraphicsPolygonItem.cpp b/src/domain/UBGraphicsPolygonItem.cpp index b21f2760..e5dd4fd7 100644 --- a/src/domain/UBGraphicsPolygonItem.cpp +++ b/src/domain/UBGraphicsPolygonItem.cpp @@ -142,14 +142,14 @@ QColor UBGraphicsPolygonItem::color() const UBItem* UBGraphicsPolygonItem::deepCopy() const -{ - UBGraphicsPolygonItem* copy = new UBGraphicsPolygonItem(polygon(), parentItem()); +{ + UBGraphicsPolygonItem* copy = new UBGraphicsPolygonItem(polygon(), 0); + UBGraphicsStroke *stroke = new UBGraphicsStroke(); + copyItemParameters(copy); - copy->mOriginalLine = this->mOriginalLine; - copy->mOriginalWidth = this->mOriginalWidth; - copy->mIsNominalLine = this->mIsNominalLine; + copy->setStroke(stroke); return copy; } @@ -160,17 +160,15 @@ void UBGraphicsPolygonItem::copyItemParameters(UBItem *copy) const UBGraphicsPolygonItem *cp = dynamic_cast(copy); if (cp) { - cp->mOriginalLine = QLineF(); - cp->mOriginalWidth = -1; - cp->mIsNominalLine = false; + cp->mOriginalLine = this->mOriginalLine; + cp->mOriginalWidth = this->mOriginalWidth; + cp->mIsNominalLine = this->mIsNominalLine; - cp->setStroke(this->stroke()); - cp->setStrokesGroup(this->strokesGroup()); + cp->setTransform(transform()); cp->setBrush(this->brush()); cp->setPen(this->pen()); cp->mHasAlpha = this->mHasAlpha; - cp->setColorOnDarkBackground(this->colorOnDarkBackground()); cp->setColorOnLightBackground(this->colorOnLightBackground()); diff --git a/src/domain/UBGraphicsStrokesGroup.cpp b/src/domain/UBGraphicsStrokesGroup.cpp index a5320924..2f57360f 100644 --- a/src/domain/UBGraphicsStrokesGroup.cpp +++ b/src/domain/UBGraphicsStrokesGroup.cpp @@ -65,29 +65,30 @@ void UBGraphicsStrokesGroup::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) UBItem* UBGraphicsStrokesGroup::deepCopy() const { - UBGraphicsStrokesGroup* copy = new UBGraphicsStrokesGroup(); + UBGraphicsStrokesGroup* copy = new UBGraphicsStrokesGroup(); - - QList chl = childItems(); + QList chl = childItems(); foreach(QGraphicsItem *child, chl) { UBGraphicsPolygonItem *polygon = dynamic_cast(child); if (polygon) + { copy->addToGroup(dynamic_cast(polygon->deepCopy())); + polygon->setStrokesGroup(copy); + } } copyItemParameters(copy); - return copy; + return copy; } void UBGraphicsStrokesGroup::copyItemParameters(UBItem *copy) const { UBGraphicsStrokesGroup *cp = dynamic_cast(copy); { - cp->setPos(this->pos()); + cp->setTransform(transform()); - cp->setTransform(this->transform()); cp->setFlag(QGraphicsItem::ItemIsMovable, true); cp->setFlag(QGraphicsItem::ItemIsSelectable, true); cp->setData(UBGraphicsItemData::ItemLayerType, this->data(UBGraphicsItemData::ItemLayerType)); From 8a6b3e3fa6f45f2239f554d8dedcddba0ae8c845 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Mon, 3 Sep 2012 13:30:21 +0200 Subject: [PATCH 15/24] issue on language --- src/core/UBApplication.cpp | 102 ++++++++++++++++++++++--------------- src/core/UBApplication.h | 4 +- 2 files changed, 62 insertions(+), 44 deletions(-) diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp index d3aed832..028518da 100644 --- a/src/core/UBApplication.cpp +++ b/src/core/UBApplication.cpp @@ -139,15 +139,7 @@ UBApplication::UBApplication(const QString &id, int &argc, char **argv) : QtSing UBSettings *settings = UBSettings::settings(); - QString forcedLanguage(""); - if(args.contains("-lang")) - forcedLanguage=args.at(args.indexOf("-lang") + 1); - else{ - QString setLanguage = settings->appPreferredLanguage->get().toString(); - if(!setLanguage.isEmpty()) - forcedLanguage = setLanguage; - } - setupTranslator(forcedLanguage); + setupTranslators(args); connect(settings->appToolBarPositionedAtTop, SIGNAL(changed(QVariant)), this, SLOT(toolBarPositionChanged(QVariant))); connect(settings->appToolBarDisplayText, SIGNAL(changed(QVariant)), this, SLOT(toolBarDisplayTextChanged(QVariant))); @@ -207,45 +199,71 @@ UBApplication::~UBApplication() staticMemoryCleaner = 0; } -void UBApplication::setupTranslator(QString forcedLanguage) +QString UBApplication::checkLanguageAvailabilityForSankore(QString &language) { - QStringList availablesTranslations = UBPlatformUtils::availableTranslations(); - QString language(""); - if(!forcedLanguage.isEmpty()){ - if(availablesTranslations.contains(forcedLanguage,Qt::CaseInsensitive)) - language = forcedLanguage; - else - qDebug() << "forced language " << forcedLanguage << " not available"; - } - else{ - QString systemLanguage = UBPlatformUtils::systemLanguage(); - if(availablesTranslations.contains(systemLanguage,Qt::CaseInsensitive)) - language = systemLanguage; - else - qDebug() << "translation for system language " << systemLanguage << " not found"; - } - - if(language.isEmpty()){ - language = "en_US"; - //fallback if no translation are available - } - else{ - mApplicationTranslator = new QTranslator(this); - mQtGuiTranslator = new QTranslator(this); + QStringList availableTranslations = UBPlatformUtils::availableTranslations(); + if(availableTranslations.contains(language,Qt::CaseInsensitive)) + return language; + else{ + if(language.length() > 2){ + QString shortLanguageCode = language.left(2); + if(availableTranslations.contains(shortLanguageCode,Qt::CaseInsensitive)) + return shortLanguageCode; + } + } + return QString(""); +} + +void UBApplication::setupTranslators(QStringList args) +{ + QString forcedLanguage; + if(args.contains("-lang")) + forcedLanguage=args.at(args.indexOf("-lang") + 1); + else{ + QString setLanguage = UBSettings::settings()->appPreferredLanguage->get().toString(); + if(!setLanguage.isEmpty()) + forcedLanguage = setLanguage; + } + + QStringList availablesTranslations = UBPlatformUtils::availableTranslations(); + QString language(""); + + if(!forcedLanguage.isEmpty()) + language = checkLanguageAvailabilityForSankore(forcedLanguage); + + if(language.isEmpty()){ + QString systemLanguage = UBPlatformUtils::systemLanguage(); + language = checkLanguageAvailabilityForSankore(systemLanguage); + } + + if(language.isEmpty()){ + language = "en_US"; + //fallback if no translation are available + } + else{ + mApplicationTranslator = new QTranslator(this); + mQtGuiTranslator = new QTranslator(this); mApplicationTranslator->load(UBPlatformUtils::translationPath(QString("sankore_"),language)); - installTranslator(mApplicationTranslator); + installTranslator(mApplicationTranslator); + + QString qtGuiTranslationPath = UBPlatformUtils::translationPath("qt_", language); - mQtGuiTranslator->load(UBPlatformUtils::translationPath(QString("qt_"),language)); - if(!mQtGuiTranslator->isEmpty()){ - // checked because this translation could be not available - installTranslator(mQtGuiTranslator); - } - else - qDebug() << "Qt gui translation in " << language << " are not available"; - } + if(!QFile(qtGuiTranslationPath).exists()){ + qtGuiTranslationPath = UBPlatformUtils::translationPath("qt_", language.left(2)); + if(!QFile(qtGuiTranslationPath).exists()) + qtGuiTranslationPath = ""; + } + if(qtGuiTranslationPath.isEmpty()){ + qDebug() << "qtGuiTranslationPath " << qtGuiTranslationPath; + mQtGuiTranslator->load(qtGuiTranslationPath); + installTranslator(mQtGuiTranslator); + } + else + qDebug() << "Qt gui translation in " << language << " is not available"; + } QLocale::setDefault(QLocale(language)); qDebug() << "Running application in:" << language; diff --git a/src/core/UBApplication.h b/src/core/UBApplication.h index b4060d54..b08fdcee 100644 --- a/src/core/UBApplication.h +++ b/src/core/UBApplication.h @@ -119,10 +119,10 @@ class UBApplication : public QtSingleApplication private: void updateProtoActionsState(); - void setupTranslator(QString forcedLanguage); + void setupTranslators(QStringList args); QList mProtoMenus; bool mIsVerbose; - + QString checkLanguageAvailabilityForSankore(QString& language); protected: #if defined(Q_WS_MACX) && !defined(QT_MAC_USE_COCOA) From 0b484e2a16cde31e7edfd3395ea63b4ecdc92dbc Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Mon, 3 Sep 2012 14:45:41 +0300 Subject: [PATCH 16/24] Item deselected before duplication. --- src/board/UBBoardController.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 66dbc026..c5627842 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -553,6 +553,7 @@ void UBBoardController::duplicateItem(UBItem *item) qreal shifting = UBSettings::settings()->objectFrameWidth; itemPos = commonItem->pos() + QPointF(shifting,shifting); itemSize = commonItem->boundingRect().size(); + commonItem->setSelected(false); } UBMimeType::Enum itemMimeType; From aa54bed95b2ec2cbd3ffa690285103d225e672cb Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Mon, 3 Sep 2012 14:59:03 +0300 Subject: [PATCH 17/24] Copied items with unknown type is selected. --- src/board/UBBoardController.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index c5627842..a9600ab6 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -636,6 +636,7 @@ void UBBoardController::duplicateItem(UBItem *item) mActiveScene->addItem(gitem); gitem->setPos(itemPos); mLastCreatedItem = gitem; + gitem->setSelected(true); } return; }break; From a495f5f1eca8422b31043d43b625a737e36ae776 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Mon, 3 Sep 2012 14:01:56 +0200 Subject: [PATCH 18/24] fixed the algorithm --- src/core/UBApplication.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp index 028518da..94f0710e 100644 --- a/src/core/UBApplication.cpp +++ b/src/core/UBApplication.cpp @@ -256,7 +256,7 @@ void UBApplication::setupTranslators(QStringList args) qtGuiTranslationPath = ""; } - if(qtGuiTranslationPath.isEmpty()){ + if(!qtGuiTranslationPath.isEmpty()){ qDebug() << "qtGuiTranslationPath " << qtGuiTranslationPath; mQtGuiTranslator->load(qtGuiTranslationPath); installTranslator(mQtGuiTranslator); From e441f2c2f86fed46fd8e174f4b2929f60a09f036 Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Mon, 3 Sep 2012 15:10:39 +0300 Subject: [PATCH 19/24] SANKORE-1063 The annotations are erased when you select the Erase items --- src/domain/UBGraphicsScene.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index c25b65f6..86d19d34 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1103,16 +1103,14 @@ void UBGraphicsScene::clearItems() { QGraphicsItem* item = itItems.next(); - if (!item->parentItem()) - { - bool isPolygon = qgraphicsitem_cast(item) != NULL; - bool isStrokesGroup = qgraphicsitem_cast(item) != NULL; + bool isGroup = qgraphicsitem_cast(item) != NULL; + bool isPolygon = qgraphicsitem_cast(item) != NULL; + bool isStrokesGroup = qgraphicsitem_cast(item) != NULL; - if(!isPolygon && !isStrokesGroup && !mTools.contains(item) && !isBackgroundObject(item)) - { - removeItem(item); - removedItems << item; - } + if(!isGroup && !isPolygon && !isStrokesGroup && !mTools.contains(item) && !isBackgroundObject(item)) + { + removeItem(item); + removedItems << item; } } From 2a443e618dc70c393c7675285cb2e94a4e4f6815 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Mon, 3 Sep 2012 16:33:05 +0300 Subject: [PATCH 20/24] Fixed crash on removing fastAccessItems. --- src/domain/UBGraphicsScene.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 47547198..5084f660 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1386,7 +1386,7 @@ UBGraphicsGroupContainerItem *UBGraphicsScene::createGroup(QListaddToGroup(chItem); - mFastAccessItems.removeAll(item); + mFastAccessItems.removeAll(chItem); } } else { groupItem->addToGroup(item); From b21e00910831de9df56b828bbf8a5c70ab1016fd Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Mon, 3 Sep 2012 16:39:26 +0300 Subject: [PATCH 21/24] Delegate buttons takes mouse press and mouse release events immediately. Fix to Sankore-772. --- src/board/UBBoardView.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/board/UBBoardView.cpp b/src/board/UBBoardView.cpp index ed75f550..5500ec9b 100644 --- a/src/board/UBBoardView.cpp +++ b/src/board/UBBoardView.cpp @@ -528,6 +528,8 @@ Here we determines cases when items should to get mouse press event at pressing return true; case DelegateButton::Type: + return true; + case UBGraphicsMediaItem::Type: return false; @@ -1123,6 +1125,7 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event) else { if (isUBItem(movingItem) && + DelegateButton::Type != movingItem->type() && QGraphicsSvgItem::Type != movingItem->type() && UBGraphicsDelegateFrame::Type != movingItem->type() && UBToolWidget::Type != movingItem->type() && From 5816a17f576da8c92b32e60996bed5250724fc73 Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Mon, 3 Sep 2012 16:55:23 +0300 Subject: [PATCH 22/24] SANKORE-98 shutdown after emptying the trashbin --- src/document/UBDocumentController.cpp | 310 +++++++++++++------------- src/document/UBDocumentController.h | 3 + 2 files changed, 163 insertions(+), 150 deletions(-) diff --git a/src/document/UBDocumentController.cpp b/src/document/UBDocumentController.cpp index 4be9ee0f..af8734e6 100755 --- a/src/document/UBDocumentController.cpp +++ b/src/document/UBDocumentController.cpp @@ -117,8 +117,11 @@ UBDocumentProxyTreeItem* UBDocumentController::findDocument(UBDocumentProxy* pro void UBDocumentController::selectDocument(UBDocumentProxy* proxy, bool setAsCurrentDocument) { - if (!proxy) + if (proxy==NULL) + { + setDocument(NULL); return; + } QTreeWidgetItemIterator it(mDocumentUI->documentTreeWidget); @@ -531,6 +534,153 @@ void UBDocumentController::duplicateSelectedItem() } } +void UBDocumentController::moveDocumentToTrash(UBDocumentGroupTreeItem* groupTi, UBDocumentProxyTreeItem *proxyTi) +{ + int index = proxyTi->parent()->indexOfChild(proxyTi); + index --; + + if (index >= 0) + { + if (proxyTi->proxy() == mBoardController->selectedDocument()) + { + selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(index))->proxy(), true); + } + else + proxyTi->parent()->child(index)->setSelected(true); + } + else if (proxyTi->parent()->childCount() > 1) + { + if (proxyTi->proxy() == mBoardController->selectedDocument()) + { + selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(1))->proxy(), true); + } + else + proxyTi->parent()->child(1)->setSelected(true); + } + else + { + if (proxyTi->proxy() == mBoardController->selectedDocument()) + { + bool documentFound = false; + for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++) + { + QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i); + UBDocumentGroupTreeItem* groupItem = dynamic_cast(item); + if (!groupItem->isTrashFolder()) + { + for(int j=0; jchildCount(); j++) + { + if (((UBDocumentProxyTreeItem*)groupItem->child(j))->proxy() != mBoardController->selectedDocument()) + { + selectDocument(((UBDocumentProxyTreeItem*)groupItem->child(0))->proxy(), true); + documentFound = true; + break; + } + } + } + if (documentFound) + break; + } + if (!documentFound) + { + UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument(groupTi->groupName()); + selectDocument(document, true); + } + } + else + proxyTi->parent()->setSelected(true); + } + + QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString(); + proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName); + UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy()); + + proxyTi->parent()->removeChild(proxyTi); + mTrashTi->addChild(proxyTi); + proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable); +} + +void UBDocumentController::moveFolderToTrash(UBDocumentGroupTreeItem* groupTi) +{ + bool changeCurrentDocument = false; + for (int i = 0; i < groupTi->childCount(); i++) + { + UBDocumentProxyTreeItem* proxyTi = dynamic_cast(groupTi->child(i)); + if (proxyTi && proxyTi->proxy() && proxyTi->proxy() == mBoardController->selectedDocument()) + { + changeCurrentDocument = true; + break; + } + } + + QList toBeDeleted; + + for (int i = 0; i < groupTi->childCount(); i++) + { + UBDocumentProxyTreeItem* proxyTi = dynamic_cast(groupTi->child(i)); + if (proxyTi && proxyTi->proxy()) + toBeDeleted << proxyTi; + } + + for (int i = 0; i < toBeDeleted.count(); i++) + { + UBDocumentProxyTreeItem* proxyTi = toBeDeleted.at(i); + + showMessage(QString("Deleting %1").arg(proxyTi->proxy()->metaData(UBSettings::documentName).toString())); + // Move document to trash + QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString(); + proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName); + UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy()); + + groupTi->removeChild(proxyTi); + mTrashTi->addChild(proxyTi); + proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable); + + showMessage(QString("%1 deleted").arg(groupTi->groupName())); + } + + // dont remove default group + if (!groupTi->isDefaultFolder()) + { + int index = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(groupTi); + + if (index >= 0) + { + mDocumentUI->documentTreeWidget->takeTopLevelItem(index); + } + } + + if (changeCurrentDocument) + { + bool documentFound = false; + for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++) + { + QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i); + UBDocumentGroupTreeItem* groupItem = dynamic_cast(item); + if (!groupItem->isTrashFolder() && groupItem != groupTi) + { + for(int j=0; jchildCount(); j++) + { + if (((UBDocumentProxyTreeItem*)groupItem->child(j))->proxy() != mBoardController->selectedDocument()) + { + selectDocument(((UBDocumentProxyTreeItem*)groupItem->child(0))->proxy(), true); + documentFound = true; + break; + } + } + } + if (documentFound) + break; + } + if (!documentFound) + { + UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument( UBSettings::defaultDocumentGroupName ); + selectDocument(document, true); + } + } + + reloadThumbnails(); +} void UBDocumentController::deleteSelectedItem() { @@ -553,79 +703,19 @@ void UBDocumentController::deleteSelectedItem() { if (proxyTi->parent() != mTrashTi) { - // We have to move document into Trash - // Select another document for processing - // This is for Board, where this document can be selected - int index = proxyTi->parent()->indexOfChild(proxyTi); - index --; - - if (index >= 0) - { - if (proxyTi->proxy() == mBoardController->selectedDocument()) - { - selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(index))->proxy(), true); - } - else - proxyTi->parent()->child(index)->setSelected(true); - } - else if (proxyTi->parent()->childCount() > 1) - { - if (proxyTi->proxy() == mBoardController->selectedDocument()) - { - selectDocument(((UBDocumentProxyTreeItem*)proxyTi->parent()->child(1))->proxy(), true); - } - else - proxyTi->parent()->child(1)->setSelected(true); - } - else - { - if (proxyTi->proxy() == mBoardController->selectedDocument()) - { - bool documentFound = false; - for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++) - { - QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i); - UBDocumentGroupTreeItem* groupItem = dynamic_cast(item); - if (!groupItem->isTrashFolder()) - { - for(int j=0; jchildCount(); j++) - { - if (((UBDocumentProxyTreeItem*)groupItem->child(j))->proxy() != mBoardController->selectedDocument()) - { - selectDocument(((UBDocumentProxyTreeItem*)groupItem->child(0))->proxy(), true); - documentFound = true; - break; - } - } - } - if (documentFound) - break; - } - if (!documentFound) - { - UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument(groupTi->groupName()); - selectDocument(document, true); - } - } - else - proxyTi->parent()->setSelected(true); - } - - QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString(); - proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName); - UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy()); - - proxyTi->parent()->removeChild(proxyTi); - mTrashTi->addChild(proxyTi); - proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable); + moveDocumentToTrash(groupTi, proxyTi); } else { - // We have to physical delete document - // No action with selection required - document from Trash cant be selected in Board - + // We have to physically delete document proxyTi->parent()->removeChild(proxyTi); UBPersistenceManager::persistenceManager()->deleteDocument(proxyTi->proxy()); + + if (mTrashTi->childCount()==0) + selectDocument(NULL); + else + selectDocument(((UBDocumentProxyTreeItem*)mTrashTi->child(0))->proxy()); + reloadThumbnails(); } } } @@ -666,87 +756,7 @@ void UBDocumentController::deleteSelectedItem() if(UBApplication::mainWindow->yesNoQuestion(tr("Remove Folder"), tr("Are you sure you want to remove the folder '%1' and all its content?").arg(groupTi->groupName()))) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - - bool changeCurrentDocument = false; - for (int i = 0; i < groupTi->childCount(); i++) - { - UBDocumentProxyTreeItem* proxyTi = dynamic_cast(groupTi->child(i)); - if (proxyTi && proxyTi->proxy() && proxyTi->proxy() == mBoardController->selectedDocument()) - { - changeCurrentDocument = true; - break; - } - } - - QList toBeDeleted; - - for (int i = 0; i < groupTi->childCount(); i++) - { - UBDocumentProxyTreeItem* proxyTi = dynamic_cast(groupTi->child(i)); - if (proxyTi && proxyTi->proxy()) - toBeDeleted << proxyTi; - } - - for (int i = 0; i < toBeDeleted.count(); i++) - { - UBDocumentProxyTreeItem* proxyTi = toBeDeleted.at(i); - - showMessage(QString("Deleting %1").arg(proxyTi->proxy()->metaData(UBSettings::documentName).toString())); - // Move document to trash - QString oldGroupName = proxyTi->proxy()->metaData(UBSettings::documentGroupName).toString(); - proxyTi->proxy()->setMetaData(UBSettings::documentGroupName, UBSettings::trashedDocumentGroupNamePrefix + oldGroupName); - UBPersistenceManager::persistenceManager()->persistDocumentMetadata(proxyTi->proxy()); - - groupTi->removeChild(proxyTi); - mTrashTi->addChild(proxyTi); - proxyTi->setFlags(proxyTi->flags() ^ Qt::ItemIsEditable); - - showMessage(QString("%1 deleted").arg(groupTi->groupName())); - } - - // dont remove default group - if (!groupTi->isDefaultFolder()) - { - int index = mDocumentUI->documentTreeWidget->indexOfTopLevelItem(groupTi); - - if (index >= 0) - { - mDocumentUI->documentTreeWidget->takeTopLevelItem(index); - } - } - - if (changeCurrentDocument) - { - bool documentFound = false; - for (int i = 0; i < mDocumentUI->documentTreeWidget->topLevelItemCount(); i++) - { - QTreeWidgetItem* item = mDocumentUI->documentTreeWidget->topLevelItem(i); - UBDocumentGroupTreeItem* groupItem = dynamic_cast(item); - if (!groupItem->isTrashFolder() && groupItem != groupTi) - { - for(int j=0; jchildCount(); j++) - { - if (((UBDocumentProxyTreeItem*)groupItem->child(j))->proxy() != mBoardController->selectedDocument()) - { - selectDocument(((UBDocumentProxyTreeItem*)groupItem->child(0))->proxy(), true); - documentFound = true; - break; - } - } - } - if (documentFound) - break; - } - if (!documentFound) - { - UBDocumentProxy *document = UBPersistenceManager::persistenceManager()->createDocument( UBSettings::defaultDocumentGroupName ); - selectDocument(document, true); - } - } - - - reloadThumbnails(); - + moveFolderToTrash(groupTi); QApplication::restoreOverrideCursor(); } } diff --git a/src/document/UBDocumentController.h b/src/document/UBDocumentController.h index d27ca0a6..ac8a113f 100644 --- a/src/document/UBDocumentController.h +++ b/src/document/UBDocumentController.h @@ -111,6 +111,9 @@ class UBDocumentController : public UBDocumentContainer bool mToolsPalettePositionned; UBDocumentGroupTreeItem* mTrashTi; + void moveDocumentToTrash(UBDocumentGroupTreeItem* groupTi, UBDocumentProxyTreeItem *proxyTi); + void moveFolderToTrash(UBDocumentGroupTreeItem* groupTi); + private slots: void documentZoomSliderValueChanged (int value); void loadDocumentProxies(); From 05f6cc364ff1c559ea59eeafa9835b74ec14947e Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Mon, 3 Sep 2012 19:25:42 +0300 Subject: [PATCH 23/24] Additional fix to Sankore-979 - improved cleaning mechanism for items on board. --- src/domain/UBGraphicsGroupContainerItem.cpp | 14 ++++++++++++++ src/domain/UBGraphicsGroupContainerItem.h | 2 ++ src/frameworks/UBCoreGraphicsScene.cpp | 14 +++----------- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/domain/UBGraphicsGroupContainerItem.cpp b/src/domain/UBGraphicsGroupContainerItem.cpp index 10be1c4d..95b95af3 100644 --- a/src/domain/UBGraphicsGroupContainerItem.cpp +++ b/src/domain/UBGraphicsGroupContainerItem.cpp @@ -79,6 +79,8 @@ void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item) item->setPos(mapFromItem(item, 0, 0)); item->scene()->removeItem(item); + if (corescene()) + corescene()->removeItemFromDeletion(item); item->setParentItem(this); // removing position from translation component of the new transform @@ -225,6 +227,18 @@ void UBGraphicsGroupContainerItem::destroy() { remove(); } +void UBGraphicsGroupContainerItem::clearSource() +{ + foreach(QGraphicsItem *child, childItems()) + { + UBGraphicsItem *item = dynamic_cast(child); + if (item) + { + item->clearSource(); + } + } +} + void UBGraphicsGroupContainerItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { if (mDelegate->mousePressEvent(event)) { diff --git a/src/domain/UBGraphicsGroupContainerItem.h b/src/domain/UBGraphicsGroupContainerItem.h index 00f643d3..e8fa77eb 100644 --- a/src/domain/UBGraphicsGroupContainerItem.h +++ b/src/domain/UBGraphicsGroupContainerItem.h @@ -39,6 +39,8 @@ public: virtual void setUuid(const QUuid &pUuid); void destroy(); + virtual void clearSource(); + protected: virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); diff --git a/src/frameworks/UBCoreGraphicsScene.cpp b/src/frameworks/UBCoreGraphicsScene.cpp index 1f306425..69297da7 100644 --- a/src/frameworks/UBCoreGraphicsScene.cpp +++ b/src/frameworks/UBCoreGraphicsScene.cpp @@ -52,6 +52,8 @@ UBCoreGraphicsScene::~UBCoreGraphicsScene() void UBCoreGraphicsScene::addItem(QGraphicsItem* item) { + addItemToDeletion(item); + if (item->type() == UBGraphicsGroupContainerItem::Type && item->childItems().count()) { foreach (QGraphicsItem *curItem, item->childItems()) { removeItemFromDeletion(curItem); @@ -76,17 +78,7 @@ bool UBCoreGraphicsScene::deleteItem(QGraphicsItem* item) { if(mItemsToDelete.contains(item)) { - UBGraphicsItem* item_casted = 0; - switch (item->type()) - { - case UBGraphicsMediaItem::Type: - item_casted = dynamic_cast(item); - break; - case UBGraphicsW3CWidgetItem::Type: - item_casted = dynamic_cast(item); - break; - } - + UBGraphicsItem *item_casted = dynamic_cast(item); if (0 != item_casted) item_casted->clearSource(); From 3a21e07283c4b224ad81425d137d7d1cc9d49e92 Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Mon, 3 Sep 2012 19:27:15 +0300 Subject: [PATCH 24/24] SANKORE-1063 The annotations are erased when you select the Erase items --- src/domain/UBGraphicsScene.cpp | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index a34d8aac..37ab5bef 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1078,12 +1078,9 @@ void UBGraphicsScene::clearItemsAndAnnotations() QSet emptyList; QSet removedItems; - QListIterator itItems(mFastAccessItems); - - while (itItems.hasNext()) + QList sceneItems = items(); + foreach(QGraphicsItem* item, sceneItems) { - QGraphicsItem* item = itItems.next(); - if(!mTools.contains(item) && !isBackgroundObject(item)) { removeItem(item); @@ -1109,12 +1106,9 @@ void UBGraphicsScene::clearItems() QSet emptyList; QSet removedItems; - QListIterator itItems(mFastAccessItems); - - while (itItems.hasNext()) + QList sceneItems = items(); + foreach(QGraphicsItem* item, sceneItems) { - QGraphicsItem* item = itItems.next(); - bool isGroup = qgraphicsitem_cast(item) != NULL; bool isPolygon = qgraphicsitem_cast(item) != NULL; bool isStrokesGroup = qgraphicsitem_cast(item) != NULL; @@ -1143,11 +1137,9 @@ void UBGraphicsScene::clearAnnotations() QSet emptyList; QSet removedItems; - QListIterator itItems(mFastAccessItems); - - while (itItems.hasNext()) + QList sceneItems = items(); + foreach(QGraphicsItem* item, sceneItems) { - QGraphicsItem* item = itItems.next(); UBGraphicsStrokesGroup* pi = qgraphicsitem_cast(item); if (pi) { @@ -1159,7 +1151,6 @@ void UBGraphicsScene::clearAnnotations() // force refresh, QT is a bit lazy and take a lot of time (nb item ^2 ?) to trigger repaint update(sceneRect()); - if (enableUndoRedoStack) { //should be deleted after scene own undo stack implemented UBGraphicsItemUndoCommand* uc = new UBGraphicsItemUndoCommand(this, removedItems, emptyList); UBApplication::undoStack->push(uc);