From fc81e27b9faa0fba44a653317d43f7b482c91bc4 Mon Sep 17 00:00:00 2001 From: Craig Watson Date: Sun, 23 Apr 2017 10:40:10 -0400 Subject: [PATCH] Fix for copy/paste issues This fixes two related issues: 1) When taking a partial screenshot of the desktop, then copying it (Ctrl-C) and pasting it in a new document, it was not saved 2) When a page of one document was copied into another (in document mode, by dragging the page onto another document), media files disappeared from the new page. --- src/board/UBBoardController.cpp | 2 +- src/board/UBBoardPaletteManager.cpp | 7 ++++++- src/domain/UBGraphicsScene.cpp | 22 +++++++++++++--------- src/gui/UBDocumentTreeWidget.cpp | 7 +++++-- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 7ff7a9ca..3d25bba1 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -651,7 +651,7 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item) { QBuffer buffer(&pData); buffer.open(QIODevice::WriteOnly); - QString format = UBFileSystemUtils::extension(item->sourceUrl().toLocalFile()); + QString format = UBFileSystemUtils::extension(item->sourceUrl().toString(QUrl::DecodeReserved)); pixitem->pixmap().save(&buffer, format.toLatin1()); } }break; diff --git a/src/board/UBBoardPaletteManager.cpp b/src/board/UBBoardPaletteManager.cpp index eff776c5..b5dc37b0 100644 --- a/src/board/UBBoardPaletteManager.cpp +++ b/src/board/UBBoardPaletteManager.cpp @@ -73,6 +73,7 @@ #include "document/UBDocumentController.h" +#include "core/UBPersistenceManager.h" #include "core/memcheck.h" UBBoardPaletteManager::UBBoardPaletteManager(QWidget* container, UBBoardController* pBoardController) @@ -846,7 +847,11 @@ void UBBoardPaletteManager::addItemToCurrentPage() { UBGraphicsPixmapItem* item = UBApplication::boardController->activeScene()->addPixmap(mPixmap, NULL, mPos, mScaleFactor); - item->setSourceUrl(mItemUrl); + QString documentPath = UBApplication::boardController->selectedDocument()->persistencePath(); + QString fileName = UBPersistenceManager::imageDirectory + "/" + item->uuid().toString() + ".png"; + QString path = documentPath + "/" + fileName; + + item->setSourceUrl(QUrl(path)); item->setSelected(true); UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector); diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index f36984b9..0ee33c5c 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -2209,15 +2209,19 @@ QList UBGraphicsScene::relativeDependencies() const while (itItems.hasNext()) { QGraphicsItem* item = itItems.next(); - UBGraphicsMediaItem *mediaItem = qgraphicsitem_cast (item); - - if (mediaItem){ - QString completeFileName = QFileInfo(mediaItem->mediaFileUrl().toLocalFile()).fileName(); - QString path; - if(mediaItem->getMediaType() == UBGraphicsMediaItem::mediaType_Video) - path = UBPersistenceManager::videoDirectory + "/"; - else - path = UBPersistenceManager::audioDirectory + "/"; + + UBGraphicsVideoItem *videoItem = qgraphicsitem_cast (item); + if (videoItem){ + QString completeFileName = QFileInfo(videoItem->mediaFileUrl().toLocalFile()).fileName(); + QString path = UBPersistenceManager::videoDirectory + "/"; + relativePathes << QUrl(path + completeFileName); + continue; + } + + UBGraphicsAudioItem *audioItem = qgraphicsitem_cast (item); + if (audioItem){ + QString completeFileName = QFileInfo(audioItem->mediaFileUrl().toLocalFile()).fileName(); + QString path = UBPersistenceManager::audioDirectory + "/"; relativePathes << QUrl(path + completeFileName); continue; } diff --git a/src/gui/UBDocumentTreeWidget.cpp b/src/gui/UBDocumentTreeWidget.cpp index b6728e4c..2339e120 100644 --- a/src/gui/UBDocumentTreeWidget.cpp +++ b/src/gui/UBDocumentTreeWidget.cpp @@ -285,13 +285,16 @@ void UBDocumentTreeWidget::dropEvent(QDropEvent *event) QString source = scene->document()->persistencePath() + "/" + relativeFile.toString(); QString target = targetDocProxy->persistencePath() + "/" + relativeFile.toString(); + QString sourceDecoded = scene->document()->persistencePath() + "/" + relativeFile.toString(QUrl::DecodeReserved); + QString targetDecoded = targetDocProxy->persistencePath() + "/" + relativeFile.toString(QUrl::DecodeReserved); + if(QFileInfo(source).isDir()) UBFileSystemUtils::copyDir(source,target); else{ - QFileInfo fi(target); + QFileInfo fi(targetDecoded); QDir d = fi.dir(); d.mkpath(d.absolutePath()); - QFile::copy(source, target); + QFile::copy(sourceDecoded, targetDecoded); } }