From fc693d7317c1435719b49ca8326638f301c05119 Mon Sep 17 00:00:00 2001 From: Claudio Valerio <claudio@open-sankore.org> Date: Wed, 4 Jul 2012 12:53:17 +0200 Subject: [PATCH] developed Sankore-208 --- resources/images/duplicateDisabled.svg | 91 ++++++++++++++++++++++++++ resources/sankore.qrc | 1 + src/document/UBDocumentController.cpp | 15 ++++- src/document/UBDocumentController.h | 2 + src/gui/UBDocumentThumbnailWidget.cpp | 3 +- src/gui/UBThumbnailWidget.cpp | 47 ++++++++----- src/gui/UBThumbnailWidget.h | 2 + 7 files changed, 144 insertions(+), 17 deletions(-) create mode 100644 resources/images/duplicateDisabled.svg diff --git a/resources/images/duplicateDisabled.svg b/resources/images/duplicateDisabled.svg new file mode 100644 index 00000000..be9083f9 --- /dev/null +++ b/resources/images/duplicateDisabled.svg @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + width="26px" + height="26px" + viewBox="0 0 26 26" + style="enable-background:new 0 0 26 26;" + xml:space="preserve" + inkscape:version="0.48.3.1 r9886" + sodipodi:docname="duplicateDisabled.svg"><metadata + id="metadata21"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs19" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1283" + inkscape:window-height="762" + id="namedview17" + showgrid="false" + inkscape:zoom="9.0769231" + inkscape:cx="13" + inkscape:cy="13" + inkscape:window-x="65" + inkscape:window-y="24" + inkscape:window-maximized="0" + inkscape:current-layer="Layer_1" /> + +<circle + style="fill:#CCCCCC;opacity:0.5" + cx="13" + cy="13" + r="13" + id="circle3" /> +<circle + style="fill:#999999;opacity:0.5" + cx="13" + cy="13" + r="11" + id="circle5" /> +<rect + x="5" + y="6" + style="fill:#F2F2F2;opacity:0.5" + width="12" + height="10" + id="rect7" /> +<rect + x="8" + y="9" + style="fill:#999999;opacity:0.5" + width="12" + height="10" + id="rect9" /> +<rect + x="7" + y="8" + style="fill:#999999;opacity:0.5" + width="8" + height="6" + id="rect11" /> +<rect + x="9" + y="10" + style="fill:#FFFFFF;opacity:0.5" + width="12" + height="10" + id="rect13" /> +<path + style="fill:#FFA600;opacity:0.5" + d="M10,7c0,0,2,0,4,0s3,1,3,3s0,3,0,3h3l-5,5l-5-5h3c0,0,0-1,0-2s0-2-1-2C10.5,9,10,7,10,7z" + id="path15" /> +</svg> \ No newline at end of file diff --git a/resources/sankore.qrc b/resources/sankore.qrc index 2d05cf89..c06ee37b 100644 --- a/resources/sankore.qrc +++ b/resources/sankore.qrc @@ -355,5 +355,6 @@ <file>images/teacherGuide/link.png</file> <file>images/teacherGuide/movie.png</file> <file>images/teacherGuide/w3c.png</file> + <file>images/duplicateDisabled.svg</file> </qresource> </RCC> diff --git a/src/document/UBDocumentController.cpp b/src/document/UBDocumentController.cpp index 7f7bf5a3..634c3dcb 100644 --- a/src/document/UBDocumentController.cpp +++ b/src/document/UBDocumentController.cpp @@ -535,6 +535,20 @@ void UBDocumentController::openSelectedItem() } +void UBDocumentController::duplicateScenes(UBDocumentProxy* proxy, QList<int> scenesIndex) +{ + if(scenesIndex.count()){ + int offset = 0; + foreach (int eachSceneIndex, scenesIndex){ + UBPersistenceManager::persistenceManager()->duplicateDocumentScene(proxy, eachSceneIndex + offset); + mDocumentThumbs.insert(eachSceneIndex + offset, mDocumentThumbs.at(eachSceneIndex + offset)); + UBApplication::boardController->setActiveDocumentScene(proxy,eachSceneIndex+offset+1); + offset++; + } + } + +} + void UBDocumentController::duplicateSelectedItem() { if (UBApplication::applicationController->displayMode() != UBApplicationController::Document) @@ -558,7 +572,6 @@ void UBDocumentController::duplicateSelectedItem() } } } - if (selectedSceneIndexes.count() > 0) { UBSceneThumbnailPixmap *thumb = dynamic_cast<UBSceneThumbnailPixmap*>(selectedItems.at(0)); diff --git a/src/document/UBDocumentController.h b/src/document/UBDocumentController.h index f3e387ba..d74654a3 100644 --- a/src/document/UBDocumentController.h +++ b/src/document/UBDocumentController.h @@ -50,6 +50,8 @@ class UBDocumentController : public QObject UBDocumentProxy* getCurrentDocument() { return mCurrentDocument; }; void deletePages(QList<QGraphicsItem*> itemsToDelete); int getSelectedItemIndex(); + void duplicateScenes(UBDocumentProxy* proxy, QList<int> scenesIndex); + signals: void refreshThumbnails(); diff --git a/src/gui/UBDocumentThumbnailWidget.cpp b/src/gui/UBDocumentThumbnailWidget.cpp index debeb9a1..9820adfc 100644 --- a/src/gui/UBDocumentThumbnailWidget.cpp +++ b/src/gui/UBDocumentThumbnailWidget.cpp @@ -26,7 +26,8 @@ UBDocumentThumbnailWidget::UBDocumentThumbnailWidget(QWidget* parent) : UBThumbnailWidget(parent) , mDropCaretRectItem(0) , mClosestDropItem(0) - , mDragEnabled(true), mScrollMagnitude(0) + , mDragEnabled(true) + , mScrollMagnitude(0) { mScrollTimer = new QTimer(this); connect(mScrollTimer, SIGNAL(timeout()), this, SLOT(autoScroll())); diff --git a/src/gui/UBThumbnailWidget.cpp b/src/gui/UBThumbnailWidget.cpp index e42122bb..abc1df48 100644 --- a/src/gui/UBThumbnailWidget.cpp +++ b/src/gui/UBThumbnailWidget.cpp @@ -750,6 +750,7 @@ UBSceneThumbnailNavigPixmap::UBSceneThumbnailNavigPixmap(const QPixmap& pix, UBD , bCanDelete(false) , bCanMoveUp(false) , bCanMoveDown(false) + , bCanDuplicate(false) { if(0 <= UBApplication::boardController->pageFromSceneIndex(pSceneIndex)){ setAcceptsHoverEvents(true); @@ -788,14 +789,18 @@ void UBSceneThumbnailNavigPixmap::paint(QPainter *painter, const QStyleOptionGra painter->drawPixmap(0, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/close.svg")); else painter->drawPixmap(0, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/closeDisabled.svg")); + if(bCanDuplicate) + painter->drawPixmap(BUTTONSIZE + BUTTONSPACING, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/duplicate.svg")); + else + painter->drawPixmap(BUTTONSIZE + BUTTONSPACING, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/duplicateDisabled.svg")); if(bCanMoveUp) - painter->drawPixmap(BUTTONSIZE + BUTTONSPACING, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/moveUp.svg")); + painter->drawPixmap(2*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/moveUp.svg")); else - painter->drawPixmap(BUTTONSIZE + BUTTONSPACING, 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/moveUpDisabled.svg")); + painter->drawPixmap(2*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/moveUpDisabled.svg")); if(bCanMoveDown) - painter->drawPixmap(2*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/menu.svg")); + painter->drawPixmap(3*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/menu.svg")); else - painter->drawPixmap(2*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/menuDisabled.svg")); + painter->drawPixmap(3*(BUTTONSIZE + BUTTONSPACING), 0, BUTTONSIZE, BUTTONSIZE, QPixmap(":images/menuDisabled.svg")); } } @@ -805,17 +810,14 @@ void UBSceneThumbnailNavigPixmap::mousePressEvent(QGraphicsSceneMouseEvent *even // Here we check the position of the click and verify if it has to trig an action or not. if(bCanDelete && p.x() >= 0 && p.x() <= BUTTONSIZE && p.y() >= 0 && p.y() <= BUTTONSIZE) - { deletePage(); - } - if(bCanMoveUp && p.x() >= BUTTONSIZE + BUTTONSPACING && p.x() <= 2*BUTTONSIZE + BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE) - { + if(bCanDuplicate && p.x() >= BUTTONSIZE + BUTTONSPACING && p.x() <= 2*BUTTONSIZE + BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE) + duplicatePage(); + if(bCanMoveUp && p.x() >= 2*(BUTTONSIZE + BUTTONSPACING) && p.x() <= 3*BUTTONSIZE + 2*BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE) moveUpPage(); - } - if(bCanMoveDown && p.x() >= 2*(BUTTONSIZE + BUTTONSPACING) && p.x() <= 2*(BUTTONSIZE + BUTTONSPACING) + BUTTONSIZE && p.y() >= 0 && p.y() <= BUTTONSIZE) - { + if(bCanMoveDown && p.x() >= 3*(BUTTONSIZE + BUTTONSPACING) && p.x() <= 4*BUTTONSIZE + 3*BUTTONSPACING && p.y() >= 0 && p.y() <= BUTTONSIZE) moveDownPage(); - } + event->accept(); } @@ -824,6 +826,7 @@ void UBSceneThumbnailNavigPixmap::updateButtonsState() bCanDelete = false; bCanMoveUp = false; bCanMoveDown = false; + bCanDuplicate = true; UBDocumentProxy* p = proxy(); if(NULL != p && 0 <= UBApplication::boardController->pageFromSceneIndex(sceneIndex())) @@ -842,13 +845,19 @@ void UBSceneThumbnailNavigPixmap::updateButtonsState() } } } - if(UBSettings::settings()->teacherGuidePageZeroActivated && sceneIndex()<1) + if(UBSettings::settings()->teacherGuidePageZeroActivated && sceneIndex()<=1) bCanMoveUp = false; + if(UBSettings::settings()->teacherGuidePageZeroActivated && sceneIndex() == 0){ + bCanDelete = false; + bCanDuplicate = false; + bCanMoveUp = false; + bCanMoveDown = false; + } + + if(bCanDelete || bCanMoveUp || bCanMoveDown) - { bButtonsVisible = true; - } } void UBSceneThumbnailNavigPixmap::deletePage() @@ -859,6 +868,14 @@ void UBSceneThumbnailNavigPixmap::deletePage() UBApplication::documentController->deletePages(itemsToDelete); } +void UBSceneThumbnailNavigPixmap::duplicatePage() +{ + QList<int> itemsToDelete; + itemsToDelete << sceneIndex(); + + UBApplication::documentController->duplicateScenes(proxy(),itemsToDelete); +} + void UBSceneThumbnailNavigPixmap::moveUpPage() { UBApplication::documentController->moveSceneToIndex(proxy(), sceneIndex(), sceneIndex() - 1); diff --git a/src/gui/UBThumbnailWidget.h b/src/gui/UBThumbnailWidget.h index 0429e370..b188ce00 100644 --- a/src/gui/UBThumbnailWidget.h +++ b/src/gui/UBThumbnailWidget.h @@ -306,6 +306,7 @@ class UBSceneThumbnailNavigPixmap : public UBSceneThumbnailPixmap private: void updateButtonsState(); void deletePage(); + void duplicatePage(); void moveUpPage(); void moveDownPage(); @@ -313,6 +314,7 @@ class UBSceneThumbnailNavigPixmap : public UBSceneThumbnailPixmap bool bCanDelete; bool bCanMoveUp; bool bCanMoveDown; + bool bCanDuplicate; }; class UBThumbnailVideo : public UBThumbnailPixmap