From 874e42a2999a1bd3358067855e208d4d922af584 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Fri, 27 May 2011 14:17:42 +0200 Subject: [PATCH] Reviewed the code a little bit --- Sankore_3.1.pro | 1 - resources/forms/library.ui | 922 -------------- src/board/UBBoardController.cpp | 22 +- src/board/UBBoardController.h | 1 - src/board/UBLibraryController.cpp | 1893 +---------------------------- src/board/UBLibraryController.h | 246 ---- src/board/UBLibraryTreeWidget.cpp | 247 ---- src/board/UBLibraryTreeWidget.h | 62 - src/board/board.pri | 2 - src/core/UBApplication.cpp | 61 +- src/gui/UBLibPathViewer.cpp | 21 +- 11 files changed, 76 insertions(+), 3402 deletions(-) delete mode 100644 resources/forms/library.ui delete mode 100644 src/board/UBLibraryTreeWidget.cpp delete mode 100644 src/board/UBLibraryTreeWidget.h diff --git a/Sankore_3.1.pro b/Sankore_3.1.pro index b5b94230..57aa32a3 100644 --- a/Sankore_3.1.pro +++ b/Sankore_3.1.pro @@ -65,7 +65,6 @@ FORMS += resources/forms/mainWindow.ui \ resources/forms/preferences.ui \ resources/forms/brushProperties.ui \ resources/forms/documents.ui \ - resources/forms/library.ui \ resources/forms/blackoutWidget.ui \ resources/forms/trapFlash.ui \ resources/forms/youTubePublishingDialog.ui \ diff --git a/resources/forms/library.ui b/resources/forms/library.ui deleted file mode 100644 index 91aedd10..00000000 --- a/resources/forms/library.ui +++ /dev/null @@ -1,922 +0,0 @@ - - - library - - - - 0 - 0 - 961 - 550 - - - - - 0 - 0 - - - - Qt::DefaultContextMenu - - - Sankore Library - - - - 0 - - - 0 - - - - - QFrame::NoFrame - - - QFrame::Raised - - - 0 - - - - - - QTabWidget::Rounded - - - 0 - - - Qt::ElideLeft - - - - Iteractive Models - - - - - - Qt::NoContextMenu - - - - - - QFrame::NoFrame - - - 0 - - - Qt::ScrollBarAsNeeded - - - Qt::ScrollBarAlwaysOff - - - QGraphicsView::NoDrag - - - - - - - - Applications - - - - - - - 0 - 0 - - - - QFrame::Box - - - QFrame::Plain - - - 1 - - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - - - QFrame::NoFrame - - - QFrame::Plain - - - 0 - - - QAbstractItemView::DropOnly - - - QAbstractItemView::ScrollPerPixel - - - 2 - - - true - - - false - - - - 1 - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 42 - - - - New Folder - - - - :/images/toolbar/newFolder.png:/images/toolbar/newFolder.png - - - - 32 - 32 - - - - Qt::ToolButtonTextBesideIcon - - - true - - - Qt::NoArrow - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 42 - - - - Import to Library - - - - :/images/toolbar/addInteractiveToLibrary.png:/images/toolbar/addInteractiveToLibrary.png - - - - 32 - 32 - - - - Qt::ToolButtonTextBesideIcon - - - true - - - - - - - - - - - - - - Qt::NoContextMenu - - - - - - QFrame::NoFrame - - - 0 - - - Qt::ScrollBarAsNeeded - - - Qt::ScrollBarAlwaysOff - - - QGraphicsView::NoDrag - - - - - - - - - - - - - - - Images - - - - - - - 0 - 0 - - - - QFrame::Box - - - QFrame::Plain - - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - - - QFrame::NoFrame - - - QFrame::Plain - - - 0 - - - QAbstractItemView::ScrollPerPixel - - - 2 - - - true - - - false - - - - 1 - - - - - - - - - 1 - 0 - - - - - 0 - 0 - - - - - 16777215 - 42 - - - - New Folder - - - - :/images/toolbar/newFolder.png:/images/toolbar/newFolder.png - - - - 32 - 32 - - - - Qt::ToolButtonTextBesideIcon - - - true - - - - - - - - 1 - 0 - - - - - 0 - 0 - - - - - 16777215 - 42 - - - - Import to Library - - - - :/images/toolbar/addToLibrary.png:/images/toolbar/addToLibrary.png - - - - 32 - 32 - - - - Qt::ToolButtonTextBesideIcon - - - true - - - - - - - - - - 1 - - - - - - - Qt::NoContextMenu - - - - - - QFrame::NoFrame - - - 0 - - - Qt::ScrollBarAsNeeded - - - Qt::ScrollBarAlwaysOff - - - QGraphicsView::NoDrag - - - - - - - - - - - - - - - Movies - - - - - - - 0 - 0 - - - - QFrame::Box - - - QFrame::Plain - - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - - - QFrame::NoFrame - - - QFrame::Plain - - - 0 - - - QAbstractItemView::ScrollPerPixel - - - 2 - - - true - - - false - - - - 1 - - - - - - - - - - - 0 - - - - - - - Qt::NoContextMenu - - - - - - QFrame::NoFrame - - - 0 - - - Qt::ScrollBarAsNeeded - - - Qt::ScrollBarAlwaysOff - - - QGraphicsView::NoDrag - - - - - - - - - - - - - - - Shapes - - - - - - Qt::NoContextMenu - - - - - - QFrame::NoFrame - - - QFrame::Plain - - - 0 - - - Qt::ScrollBarAsNeeded - - - Qt::ScrollBarAlwaysOff - - - QGraphicsView::NoDrag - - - - - - - - Sounds - - - - - - Qt::NoContextMenu - - - - - - QFrame::NoFrame - - - 0 - - - Qt::ScrollBarAsNeeded - - - Qt::ScrollBarAlwaysOff - - - QGraphicsView::NoDrag - - - - - - - - - - - QFrame::NoFrame - - - QFrame::Plain - - - 0 - - - 0 - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - Delete - - - - :/images/toolbar/remove.png:/images/toolbar/remove.png - - - - 32 - 32 - - - - Qt::ToolButtonTextUnderIcon - - - true - - - - - - - Set as Background - - - - :/images/toolbar/setBackground.png:/images/toolbar/setBackground.png - - - - 32 - 32 - - - - Qt::ToolButtonTextUnderIcon - - - true - - - - - - - Remove Background - - - - :/images/toolbar/removeBackground.png:/images/toolbar/removeBackground.png - - - - 32 - 32 - - - - Qt::ToolButtonTextUnderIcon - - - true - - - - - - - Add File to Page - - - - :/images/toolbar/import.png:/images/toolbar/import.png - - - - 32 - 32 - - - - Qt::ToolButtonTextUnderIcon - - - true - - - - - - - Add to Page - - - - :/images/toolbar/addToPage.png:/images/toolbar/addToPage.png - - - - 32 - 32 - - - - Qt::ToolButtonTextUnderIcon - - - true - - - - - - - true - - - false - - - Add to Editor - - - - :/images/addItemToCurrentPage.svg:/images/addItemToCurrentPage.svg - - - - 32 - 32 - - - - Qt::ToolButtonTextUnderIcon - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - - 150 - 0 - - - - - - - 50 - - - 500 - - - 10 - - - 150 - - - Qt::Horizontal - - - false - - - false - - - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 20 - 20 - - - - - - - - - - - - - - - - UBThumbnailWidget - QGraphicsView -
gui/UBThumbnailWidget.h
-
- - UBLibraryTreeWidget - QTreeWidget -
board/UBLibraryTreeWidget.h
-
-
- - - - -
diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index 30e3e1d7..ba9bda3b 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -332,7 +332,6 @@ void UBBoardController::connectToolbar() connect(mMainWindow->actionRedo, SIGNAL(triggered()), UBApplication::undoStack, SLOT(redo())); connect(mMainWindow->actionBack, SIGNAL( triggered()), this, SLOT(previousScene())); connect(mMainWindow->actionForward, SIGNAL(triggered()), this, SLOT(nextScene())); - connect(mMainWindow->actionLibrary, SIGNAL(toggled(bool)), this, SLOT(showLibraryDialog(bool))); connect(mMainWindow->actionSleep, SIGNAL(triggered()), this, SLOT(blackout())); connect(mMainWindow->actionVirtualKeyboard, SIGNAL(triggered(bool)), this, SLOT(showKeyboard(bool))); connect(mMainWindow->actionImportPage, SIGNAL(triggered()), this, SLOT(importPage())); @@ -526,19 +525,6 @@ void UBBoardController::showDocumentsDialog() } - -void UBBoardController::showLibraryDialog(bool show) -{ - if (!mLibraryController) - { - mLibraryController = new UBLibraryController(mMainWindow->centralWidget(), this); - connect(mLibraryController, SIGNAL(dialogClosed(int)), this, SLOT(libraryDialogClosed(int))); - } - - mLibraryController->showLibraryDialog(show); -} - - void UBBoardController::libraryDialogClosed(int ret) { Q_UNUSED(ret); @@ -920,7 +906,7 @@ void UBBoardController::downloadFinished(bool pSuccess, QUrl sourceUrl, QString bool acceptFlash = true; #ifdef Q_WS_X11 - acceptFlash = false; + acceptFlash = false; #endif if (acceptFlash) { @@ -1371,10 +1357,6 @@ UBToolWidget* UBBoardController::addTool(const QUrl& toolUrl) UBToolWidget* UBBoardController::addTool(const QUrl& toolUrl, QPointF scenePos) { UBToolWidget *toolWidget = new UBToolWidget(toolUrl, mMainWindow); // Deleted in UBBoardController::removeTool - - if (mLibraryController && mLibraryController->libraryWindow()) - toolWidget->stackUnder(mLibraryController->libraryWindow()); - QPoint pos = mControlView->mapToGlobal(mControlView->mapFromScene(scenePos)); pos -= QPoint(toolWidget->width() / 2, toolWidget->height() / 2); @@ -1551,8 +1533,6 @@ void UBBoardController::updateBackgroundState() newBackgroundStyle ="QWidget {background-color: #F1F1F1}"; } - // if (mControlContainer->styleSheet() != newBackgroundStyle) - // mControlContainer->setStyleSheet(newBackgroundStyle); } diff --git a/src/board/UBBoardController.h b/src/board/UBBoardController.h index 710f3b71..e0d3788a 100644 --- a/src/board/UBBoardController.h +++ b/src/board/UBBoardController.h @@ -149,7 +149,6 @@ class UBBoardController : public QObject void setActiveDocumentScene(UBDocumentProxy* pDocumentProxy, int pSceneIndex = 0); void showDocumentsDialog(); - void showLibraryDialog(bool show); void showKeyboard(bool show); diff --git a/src/board/UBLibraryController.cpp b/src/board/UBLibraryController.cpp index 603e5092..ddd51c1f 100644 --- a/src/board/UBLibraryController.cpp +++ b/src/board/UBLibraryController.cpp @@ -1,16 +1,8 @@ #include "UBLibraryController.h" -#include -#include -#include -#include - #include "frameworks/UBFileSystemUtils.h" #include "frameworks/UBPlatformUtils.h" #include "frameworks/UBDesktopServices.h" -#include "frameworks/UBFileSystemUtils.h" - -#include "pdf/XPDFRenderer.h" #include "core/UBApplication.h" #include "core/UBPersistenceManager.h" @@ -18,9 +10,6 @@ #include "core/UBSetting.h" #include "core/UBApplicationController.h" -#include "network/UBNetworkAccessManager.h" -#include "network/UBServerXMLHttpRequest.h" - #include "domain/UBAbstractWidget.h" #include "domain/UBGraphicsScene.h" #include "domain/UBGraphicsSvgItem.h" @@ -31,19 +20,10 @@ #include "tools/UBToolsManager.h" #include "board/UBBoardView.h" -#include "board/UBDrawingController.h" - -#include "web/UBWebPage.h" -#include "web/UBWebController.h" - -#include "gui/UBMainWindow.h" - -#include "api/UBLibraryAPI.h" #include "UBBoardController.h" -#include "../frameworks/UBFileSystemUtils.h" -#include +#include "gui/UBThumbnailWidget.h" static quint32 magicNumber = 0xACDCAFE0; static QString favoriteVirtualPath = "$favorite$"; @@ -52,20 +32,8 @@ UBLibraryController::UBLibraryController(QWidget *pParentWidget, UBBoardControll QObject(pParentWidget), mParentWidget(pParentWidget), mBoardController(pBoardController), - mLibraryWindow(0), - mLibraryUI(0), - mImageWebView(0), - mVideoWebView(0), - mInteractiveWebView(0), - mImageOnlineTi(0), - mVideoOnlineTi(0), - mInteractiveOnlineTi(0), - mInteractiveUniboardTi(0), - mLastItemOffsetIndex(0), - mNeedRefreshOnNextDisplay(false) + mLastItemOffsetIndex(0) { - QString dummyBackgrounds = tr("Backgrounds"); - mLibraryFileToDownload = onlineLibraries(); readFavoriteList(); mAudioStandardDirectoryPath = QUrl::fromLocalFile(UBDesktopServices::storageLocation(QDesktopServices::MusicLocation)); @@ -120,19 +88,6 @@ void UBLibraryController::createDirectory(QUrl& pDirPath) QDir().mkpath(pDirPath.toLocalFile()); } -void UBLibraryController::preloadFirstOnlineLibrary() -{ - new UBLibraryPreloader(UBApplication::staticMemoryCleaner); -} - -QStringList UBLibraryController::onlineLibraries() -{ - QStringList libraries; - libraries << UBSettings::settings()->softwareLibrariesUrl + "/libraries-release.xml"; - return libraries; -} - - void UBLibraryController::routeItem(QString& pItem, QString pMiddleDirectory) { QFileInfo itemToRoute(pItem); @@ -450,7 +405,7 @@ QList UBLibraryController::getContent(UBLibElement *element) UBLibraryController::~UBLibraryController() { - delete mLibraryUI; + //NOOP } @@ -458,7 +413,7 @@ UBLibraryController::~UBLibraryController() void UBLibraryController::setItemAsBackground(UBLibElement* image) { if (!activeScene()){ - qWarning() << "No active scene"; + qDebug() << "No active scene"; return; } QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(image->path().toLocalFile()); @@ -510,10 +465,9 @@ void UBLibraryController::addItemToPage(UBLibElement* item) void UBLibraryController::removeBackground() { - if (activeScene()) { + if (activeScene()) activeScene()->setAsBackgroundObject(0); - selectionChanged(); - } + } UBGraphicsScene* UBLibraryController::activeScene() @@ -604,1823 +558,98 @@ void UBLibraryController::removeFromFavorite(QList elementList) persistFavoriteList(); } +QRectF UBLibraryController::visibleSceneRect() { + QRectF visibleSceneRect(0, 0, 0, 0); + if (activeScene() && mBoardController && mBoardController->controlView()) { + QPointF topLeftCorner = mBoardController->controlGeometry().topLeft(); + QPointF bottomRightCorner = + mBoardController->controlGeometry().bottomRight(); + QPointF sceneTopLeft = mBoardController->controlView()->mapToScene( + topLeftCorner.toPoint()); + QPointF sceneBottomRight = mBoardController->controlView()->mapToScene( + bottomRightCorner.toPoint()); -void UBLibraryController::refreshShapeThumbnailsView() { - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - - QStringList shapePaths = - UBPersistenceManager::persistenceManager()->allShapes(); - - mSvgItemToFilepath.clear(); - - QList items; - QList itemsPath; - - for (int i = 0; i < shapePaths.size(); i++) { - QString path = shapePaths.at(i); - - UBThumbnailSvg *svgItem = new UBThumbnailSvg(path); - mSvgItemToFilepath.insert(svgItem, path); - - items.append(svgItem); - itemsPath.append(QUrl::fromLocalFile(path)); - } - - mLibraryUI->shapeThumbnailView->setGraphicsItems(items, itemsPath); - - QApplication::restoreOverrideCursor(); -} - - -void UBLibraryController::refreshImageThumbnailsView() { - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - - mSvgImageItemToFilepath.clear(); - mPixmapItemToFilepath.clear(); - - QList items; - QList itemsPath; - - QList tw = - mLibraryUI->imageLibraryTreeWidget->selectedItems(); - - if (tw.size() > 0) { - UBLibraryFolderItem* fi = dynamic_cast (tw.last()); - - if (fi) { - QStringList - imagePaths = - UBPersistenceManager::persistenceManager()->allImages( - fi->dir()); - - for (int i = 0; i < imagePaths.size(); i++) { - QString path = imagePaths.at(i); - - if (!path.contains(".thumbnail.")) { - if (path.endsWith("svg", Qt::CaseInsensitive) || path.endsWith( - "svgz", Qt::CaseInsensitive)) { - UBThumbnailSvg *svgItem = new UBThumbnailSvg(path); - - items.append(svgItem); - itemsPath.append(QUrl::fromLocalFile(path)); - mSvgImageItemToFilepath.insert(svgItem, path); - } else { - // The image is not a thumbnail ... - QString thumbnailPath = UBFileSystemUtils::thumbnailPath( - path); - if (!QFileInfo(thumbnailPath).exists()) { - // ... and the thumbnail does not exist - QPixmap pix(path); - if (!pix.isNull()) { - // actually create the thumbnail - pix = pix.scaledToWidth( - qMin(UBSettings::maxThumbnailWidth, - pix.width()), - Qt::SmoothTransformation); - pix.save(thumbnailPath); - - QGraphicsPixmapItem *pixmapItem = - new UBThumbnailPixmap(pix); - - items.append(pixmapItem); - itemsPath.append(QUrl::fromLocalFile(path)); - mPixmapItemToFilepath.insert(pixmapItem, path); - } - } - UBPlatformUtils::hideFile(thumbnailPath); - } - } else { - // The image is a thumbnail - QString originalImagePath(path); - originalImagePath.remove(".thumbnail"); - - if (!QFileInfo(originalImagePath).exists()) { - // Skip images that have a thumbnail only but no corresponding original image - continue; - } - - QPixmap pix(path); - - if (!pix.isNull()) { - QGraphicsPixmapItem *pixmapItem = - new UBThumbnailPixmap(pix); //deleted while replaced in the scene or by the scene destruction - - items.append(pixmapItem); - itemsPath.append(QUrl::fromLocalFile(originalImagePath)); - mPixmapItemToFilepath.insert(pixmapItem, originalImagePath); - } - } - } - } - } - - mLibraryUI->imageThumbnailView->setGraphicsItems(items, itemsPath); - - QApplication::restoreOverrideCursor(); -} - -void UBLibraryController::createNewFolder() { - QTreeWidget* currentTreeWidget = 0; - switch (mLibraryUI->libraryTab->currentIndex()) { - case TabIndex::Image: - currentTreeWidget = mLibraryUI->imageLibraryTreeWidget; - break; - case TabIndex::Interactive: - currentTreeWidget = mLibraryUI->interactiveLibraryTreeWidget; - break; + visibleSceneRect.setTopLeft(sceneTopLeft); + visibleSceneRect.setBottomRight(sceneBottomRight); } - if (currentTreeWidget != 0) { - QList tw = currentTreeWidget->selectedItems(); - - if (tw.size() > 0) { - UBLibraryFolderItem* fi = dynamic_cast (tw.at(0)); - - if (fi) { - QString newFolderPath = fi->dir().path() + "/" + tr("New Folder"); - - int count = 1; - - if (QDir(newFolderPath).exists()) { - while (QDir(newFolderPath + QString(" %1").arg(count)).exists()) { - count++; - } - - newFolderPath = newFolderPath + QString(" %1").arg(count); - } - - UBLibraryFolderItem* newFi = new UBLibraryFolderItem(QDir( - newFolderPath), QString(), fi, true, QStringList()); - - currentTreeWidget->expandItem(fi); - currentTreeWidget->setCurrentItem(newFi); - } - } - } + return visibleSceneRect; } -QStringList UBLibraryController::addItemsToCurrentLibrary( - const QDir& pSelectedFolder, const QStringList& pExtensions) { - QString extensions; - - foreach(QString ext, pExtensions) - { - extensions += " *."; - extensions += ext; - } - - QString defaultPath = - UBSettings::settings()->lastImportToLibraryPath->get().toString(); - QStringList filenames = QFileDialog::getOpenFileNames(mParentWidget, tr( - "Add Item to Library"), defaultPath, tr("All Supported (%1)").arg( - extensions)); - - QStringList importedFiles; - if (filenames.size() == 0) - return filenames; - - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - - UBApplication::processEvents(); - - int i = 1; - int count = filenames.count(); +void UBLibraryController::addImagesToCurrentPage(const QList& images) { + QPointF pos = visibleSceneRect().topLeft(); - foreach(const QString filename, filenames) + foreach(const QUrl url, images) { - QFileInfo source(filename); - - // we update last import location. We do it only once at the first imported file - if (i == 1) { - UBSettings::settings()->lastImportToLibraryPath->set(QVariant( - source.absolutePath())); - } - - if (source.isDir()) { - QString target = pSelectedFolder.path() + "/" - + QFileInfo(source).fileName(); - UBFileSystemUtils::copyDir(source.absoluteFilePath(), target); - importedFiles << target; - } else if (source.isFile() && (filename.toLower().endsWith(".wgt") - || filename.toLower().endsWith(".wdgt") - || filename.toLower().endsWith(".pwgt"))) { - QString baseFileName = source.fileName(); - - QString filePath = pSelectedFolder.path() + "/" + baseFileName; - QString nextItemPath = UBFileSystemUtils::nextAvailableFileName( - filePath); - - QFile file(filename); - - UBFileSystemUtils::expandZipToDir(file, nextItemPath); - importedFiles << nextItemPath; - } else if (source.isFile() && filename.toLower().endsWith(".pdf")) { - XPDFRenderer pdfRenderer(filename); - - if (pdfRenderer.isValid()) { - QString title = pdfRenderer.title(); - - if (title.length() == 0) - title = QFileInfo(source).completeBaseName(); - - for (int i = 0; i < pdfRenderer.pageCount(); i++) { - UBApplication::showMessage(tr( - "Copying page %1 of file %2 to library %3") .arg(i - + 1) .arg(title) .arg(pSelectedFolder.dirName())); - - QString filePath = pSelectedFolder.path() + "/" + title - + QString(" %1 %2.png").arg(tr("Page")).arg(i + 1); - QSize size = pdfRenderer.pageSizeF(i + 1).toSize(); - QImage image(size, QImage::Format_RGB32); - QPainter p(&image); - - p.setRenderHint(QPainter::SmoothPixmapTransform); - p.setRenderHint(QPainter::Antialiasing); + mLastItemOffsetIndex++; + mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5); - pdfRenderer.render(&p, i + 1, QRectF(0, 0, size.width(), - size.height())); - p.end(); + QGraphicsItem* itemInScene = 0; - image.save(filePath); + if (activeScene()) { + QString mimeType = UBFileSystemUtils::mimeTypeFromFileName( + url.toString()); - importedFiles << filePath; - } + //TODO UB 4.x move this logic to the scene .. + if (mimeType == "image/svg+xml") { + itemInScene = activeScene()->addSvg(url, pos); } else { - qWarning() << "Failed to load file " << filename << "as PDF"; + itemInScene = activeScene()->addPixmap(QPixmap( + url.toLocalFile()), pos); } - } else { - QString target = pSelectedFolder.path() + "/" - + QFileInfo(source).fileName(); - QFile sourceFile(source.absoluteFilePath()); - UBApplication::showMessage( - tr("Copying file %1 to library %2 (%3/%4)").arg(QFileInfo( - source).fileName()).arg(pSelectedFolder.dirName()).arg( - i).arg(count)); - sourceFile.copy(target); - importedFiles << target; - } - - i++; - } - - UBApplication::showMessage(tr("Finished copying %1 files ...").arg( - filenames.size())); - - QApplication::restoreOverrideCursor(); - return importedFiles; -} - -void UBLibraryController::addInteractivesToLibrary() { - QList tw = - mLibraryUI->interactiveLibraryTreeWidget->selectedItems(); - - if (tw.size() > 0) { - UBLibraryFolderItem* fi = dynamic_cast (tw.at(0)); - - if (fi) { - addItemsToCurrentLibrary(fi->dir(), - UBSettings::settings()->widgetFileExtensions); - - refreshInteractiveThumbnailsView(); // TODO UB 4.x optimisation : could do better than refreshing the entire directory } - } -} -void UBLibraryController::addImagesToLibrary() { - QList tw = - mLibraryUI->imageLibraryTreeWidget->selectedItems(); - - if (tw.size() > 0) { - UBLibraryFolderItem* fi = dynamic_cast (tw.at(0)); - - if (fi) { - QStringList extensions = UBSettings::imageFileExtensions; - extensions << "pdf"; - - QStringList filenames = addItemsToCurrentLibrary(fi->dir(), extensions); - - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - UBApplication::processEvents(); - - quint32 i = 1, count = filenames.count(); - foreach(const QString filename, filenames) - { - // Create thumbnail - // For large images, what actually takes time is the creation of the thumbnail, the copy is fast - QPixmap pix(filename); - UBApplication::showMessage( - tr("Creating thumbnail %1 (%2/%3)").arg(filename).arg(i).arg( - count)); - QString thumbnailPath = UBFileSystemUtils::thumbnailPath( - filename); - pix.scaledToWidth(qMin(UBSettings::maxThumbnailWidth, - pix.width()), Qt::SmoothTransformation).save( - thumbnailPath); - UBPlatformUtils::hideFile(thumbnailPath); - i++; - } + if (itemInScene) { + itemInScene = activeScene()->scaleToFitDocumentSize(itemInScene, false, UBSettings::objectInControlViewMargin); - refreshImageThumbnailsView(); // TODO UB 4.x optimisation : could do better than refreshing the entire directory - QApplication::restoreOverrideCursor(); + itemInScene->setPos(QPoint(pos.x() + 50 * mLastItemOffsetIndex, pos.y() + 50 * mLastItemOffsetIndex)); } } } -void UBLibraryController::removeDir() { - QTreeWidget* currentTreeWidget = 0; - switch (mLibraryUI->libraryTab->currentIndex()) { - case TabIndex::Image: - currentTreeWidget = mLibraryUI->imageLibraryTreeWidget; - break; - case TabIndex::Interactive: - currentTreeWidget = mLibraryUI->interactiveLibraryTreeWidget; - break; - } - - if (currentTreeWidget != 0) { - QList tw = currentTreeWidget->selectedItems(); - - if (tw.size() > 0) { - UBLibraryFolderItem* fi = - dynamic_cast (tw.last()); - - if (fi && fi->canWrite()) { - if (QMessageBox::question( - 0, - tr("Remove Folder"), - tr( - "Are you sure you want to remove the folder %1 from the library?").arg( - fi->dir().dirName()), QMessageBox::Yes - | QMessageBox::No) == QMessageBox::Yes) { - qDebug() << "deleting dir" << fi->dir().path(); - - UBFileSystemUtils::deleteDir(fi->dir().path()); - fi->parent()->removeChild(fi); - } - } - } - } -} +void UBLibraryController::addVideosToCurrentPage(const QList& videos) { + QPointF pos = visibleSceneRect().topLeft(); -void UBLibraryController::remove() { - UBThumbnailWidget* currentThumbnailView = 0; - switch (mLibraryUI->libraryTab->currentIndex()) { - case TabIndex::Image: - currentThumbnailView = mLibraryUI->imageThumbnailView; - break; - case TabIndex::Interactive: - currentThumbnailView = mLibraryUI->interactiveThumbnailView; - break; - } + foreach(const QUrl url, videos) + { + mLastItemOffsetIndex++; + mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5); - if (currentThumbnailView) { - if (currentThumbnailView->selectedItems().size() > 0) { - removeItemsFromLibrary(currentThumbnailView); - } else { - removeDir(); - } + UBGraphicsVideoItem* itemInScene = UBApplication::boardController->addVideo(url, false, pos); + itemInScene->setPos(QPoint(pos.x() + 50 * mLastItemOffsetIndex, pos.y() + 50 * mLastItemOffsetIndex)); } } -void UBLibraryController::removeItemsFromLibrary( - UBThumbnailWidget* pThumbnailView) { - QList selectedItems = pThumbnailView->selectedItems(); - - if (selectedItems.size() > 0) { - if (QMessageBox::question(0, tr("Remove Item"), tr( - "Are you sure you want to remove the item from the library?"), - QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { - QGraphicsPixmapItem* pixmapItem = - dynamic_cast (selectedItems.last()); - - if (pixmapItem && mPixmapItemToFilepath.contains(pixmapItem)) { - QString path = mPixmapItemToFilepath.take(pixmapItem); - QFile file(path); - QFile thumbnailFile(UBFileSystemUtils::thumbnailPath(path)); - - file.remove(); - thumbnailFile.remove(); - - refreshImageThumbnailsView(); - } else if (pixmapItem - && mInteractiveItemToFilepath.contains(pixmapItem)) { - QString path = mInteractiveItemToFilepath.take(pixmapItem); - - //is it a tool ? - if (path.startsWith("uniboardTool://")) { - QStringList - uris = - UBSettings::settings()->favoritesNativeToolUris->get().toStringList(); - if (uris.contains(path)) { - uris.removeAll(path); - UBSettings::settings()->favoritesNativeToolUris->set(uris); - } - } else { - qDebug() << "file to delete " << path; - QFileInfo fileInfo(path); - if (fileInfo.isDir()) { - UBFileSystemUtils::deleteDir(fileInfo.absoluteFilePath()); - } else { - QFile(fileInfo.absoluteFilePath()).remove(); - } - } - refreshInteractiveThumbnailsView(); - } else { - QGraphicsSvgItem* svgItem = - dynamic_cast (selectedItems.last()); - - if (svgItem && mSvgImageItemToFilepath.contains(svgItem)) { - QString path = mSvgImageItemToFilepath.take(svgItem); - QFile file(path); +void UBLibraryController::addAudiosToCurrentPage(const QList& sounds) { + QPointF topLeftPos = visibleSceneRect().topLeft(); - file.remove(); + QPointF pos = topLeftPos; - refreshImageThumbnailsView(); - } - } - } + foreach(const QUrl url, sounds) + { + mLastItemOffsetIndex++; + mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5); + pos = QPointF(topLeftPos.x() + 50 * mLastItemOffsetIndex, + topLeftPos.y() + 50 * mLastItemOffsetIndex); + UBApplication::boardController->addAudio(url, false, pos); } } -void UBLibraryController::refreshInteractiveThumbnailsView() -{ - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - - QList items; - QList itemsPath; - QStringList labels; - - QList tw = - mLibraryUI->interactiveLibraryTreeWidget->selectedItems(); - - if (tw.size() > 0) { - UBLibraryFolderItem* fi = dynamic_cast (tw.last()); - - if (fi) { - QStringList toolUris; - - if (fi == mInteractiveUniboardTi) { - toolUris = UBToolsManager::manager()->allToolIDs(); - } - - foreach(QString toolUri, toolUris) - { - UBToolsManager::UBToolDescriptor tool = - UBToolsManager::manager()->toolByID(toolUri); - - QGraphicsPixmapItem *pixmapItem = new UBThumbnailPixmap( - tool.icon); - - if (!pixmapItem->pixmap().isNull()) { - QString id = tool.id; - - mInteractiveItemToFilepath.insert(pixmapItem, id); - items.append(pixmapItem); - itemsPath.append(QUrl(id)); - labels.append(tool.label + " " + tool.version); - } - } - - QStringList widgetPaths = - UBPersistenceManager::persistenceManager()->allWidgets( - fi->dir()); - - for (int i = 0; i < widgetPaths.size(); i++) { - QString path = widgetPaths.at(i); - - QString iconFilepath = UBAbstractWidget::iconFilePath( - QUrl::fromLocalFile(path)); - - QGraphicsPixmapItem *pixmapItem = new UBThumbnailPixmap(QPixmap( - iconFilepath)); - - mInteractiveItemToFilepath.insert(pixmapItem, path); - - QString name = UBAbstractWidget::widgetName(QUrl::fromLocalFile( - path)); - - items.append(pixmapItem); - itemsPath.append(QUrl::fromLocalFile(path)); - labels.append(name); - } - } +void UBLibraryController::addInteractivesToCurrentPage( + const QList& widgets) { + foreach(const QUrl url, widgets) + { + mBoardController->downloadURL(url, QPointF(0, 0)); } - mLibraryUI->interactiveThumbnailView->setGraphicsItems(items, itemsPath, labels); - - QApplication::restoreOverrideCursor(); } -void UBLibraryController::showLibraryDialog(bool show) +QString UBLibraryController::favoritePath() { - if (show && !mLibraryWindow) { - Qt::WindowFlags flag = Qt::Dialog | Qt::WindowMaximizeButtonHint - | Qt::WindowCloseButtonHint; - flag &= ~Qt::WindowContextHelpButtonHint; - flag &= ~Qt::WindowMinimizeButtonHint; - - mLibraryWindow = new QDialog(mParentWidget, flag); - - mLibraryUI = new Ui::library(); - mLibraryUI->setupUi(mLibraryWindow); - mLibraryUI->libraryTab->setCurrentIndex(TabIndex::Gip); - - // image tab - QString ubPictures = - UBSettings::settings()->uniboardImageLibraryDirectory(); - QString userPictures = UBSettings::settings()->uniboardUserImageDirectory(); - - UBLibraryFolderItem *ubLibrary = new UBLibraryFolderItem(QDir(ubPictures), - tr("Sankore 3.1"), 0, false, QStringList()); - UBLibraryFolderItem *userLibrary = new UBLibraryFolderItem(QDir( - userPictures), tr("My Images"), 0, true, QStringList()); - - mLibraryUI->imageLibraryTreeWidget->addTopLevelItem(userLibrary); - mLibraryUI->imageLibraryTreeWidget->addTopLevelItem(ubLibrary); - - QStringList imageMimeTypes; - imageMimeTypes << "image"; - mLibraryUI->imageLibraryTreeWidget->setMimeTypes(imageMimeTypes); - mLibraryUI->imageLibraryTreeWidget->setFileExtensions( - UBSettings::imageFileExtensions); - - ubLibrary->setIcon(0, QIcon(":/images/myContent.png")); - ubLibrary->setExpanded(true); - - userLibrary->setIcon(0, QIcon(":/images/myFolder.png")); - userLibrary->setExpanded(true); - - if (userLibrary->childCount() > 0) { - foreach(QTreeWidgetItem* ti, mLibraryUI->imageLibraryTreeWidget->selectedItems()) - { - ti->setSelected(false); - } - - userLibrary->child(0)->setSelected(true); - - selectionChanged(); - } else { - ubLibrary->setSelected(true); - } - - mLibraryUI->imageLibraryTreeWidget->setRootIsDecorated(false); - mLibraryUI->imageLibrariesStack->setCurrentWidget( - mLibraryUI->imagePageLocal); - - mImageWebView = new UBLibraryWebView(mLibraryUI->imagePageOnline); - mLibraryUI->imagePageOnline->layout()->addWidget(mImageWebView); - - // Interactive tab - QString ubInteractive = - UBSettings::settings()->uniboardInteractiveLibraryDirectory(); - QString userInteractive = - UBSettings::settings()->uniboardInteractiveUserDirectory(); - QString ubInteractiveFavorites = - UBSettings::settings()->uniboardInteractiveFavoritesDirectory(); - - mInteractiveUniboardTi = new UBLibraryFolderItem(QDir(ubInteractive), tr( - "Sankore 3.1"), 0, false, - UBSettings::interactiveContentFileExtensions); - - UBLibraryFolderItem *userInteractiveLibrary = new UBLibraryFolderItem(QDir( - userInteractive), tr("My Applications"), 0, true, - UBSettings::interactiveContentFileExtensions); - - mLibraryUI->interactiveLibraryTreeWidget->addTopLevelItem( - userInteractiveLibrary); - mLibraryUI->interactiveLibraryTreeWidget->addTopLevelItem( - mInteractiveUniboardTi); - - QStringList icMimeTypes; - icMimeTypes << "application/widget"; - icMimeTypes << "application/x-shockwave-flash"; - mLibraryUI->interactiveLibraryTreeWidget->setMimeTypes(icMimeTypes); - - mLibraryUI->interactiveLibraryTreeWidget->setFileExtensions( - UBSettings::interactiveContentFileExtensions); - - QStringList icProtocoles; - icProtocoles << "uniboardTool://"; - mLibraryUI->interactiveLibraryTreeWidget->setProtocoles(icProtocoles); - - mInteractiveUniboardTi->setIcon(0, QIcon(":/images/myContent.png")); - mInteractiveUniboardTi->setExpanded(true); - - userInteractiveLibrary->setIcon(0, QIcon(":/images/myFolder.png")); - userInteractiveLibrary->setExpanded(true); - - mInteractiveUniboardTi->setSelected(true); - - mLibraryUI->interactiveLibraryTreeWidget->setRootIsDecorated(false); - mLibraryUI->interactiveLibrariesStack->setCurrentWidget( - mLibraryUI->interactivePageLocal); - - mInteractiveWebView = new UBLibraryWebView( - mLibraryUI->interactivePageOnline); - mLibraryUI->interactivePageOnline->layout()->addWidget(mInteractiveWebView); - - // video tab - - QString userVideos = UBSettings::settings()->uniboardUserVideoDirectory(); - - UBLibraryFolderItem *userVideoLibrary = new UBLibraryFolderItem(QDir( - userVideos), tr("My Movies"), 0, false, QStringList()); - - mLibraryUI->videoLibraryTreeWidget->addTopLevelItem(userVideoLibrary); - userVideoLibrary->setIcon(0, QIcon(":/images/myFolder.png")); - userVideoLibrary->setExpanded(true); - userVideoLibrary->setSelected(true); - - mLibraryUI->videoLibraryTreeWidget->setRootIsDecorated(false); - - QStringList videoMimeTypes; - videoMimeTypes << "video"; - mLibraryUI->videoLibraryTreeWidget->setMimeTypes(videoMimeTypes); - - mLibraryUI->videoLibrariesStack->setCurrentWidget( - mLibraryUI->videoPageLocal); - - mVideoWebView = new UBLibraryWebView(mLibraryUI->videoPageOnline); - mLibraryUI->videoPageOnline->layout()->addWidget(mVideoWebView); - - mLibraryUI->imageThumbnailView->setThumbnailWidth( - UBSettings::settings()->imageThumbnailWidth->get().toInt()); - mLibraryUI->gipThumbnailView->setThumbnailWidth(UBSettings::defaultGipWidth); - mLibraryUI->soundThumbnailView->setThumbnailWidth( - UBSettings::defaultSoundWidth); - mLibraryUI->shapeThumbnailView->setThumbnailWidth( - UBSettings::settings()->shapeThumbnailWidth->get().toInt()); - mLibraryUI->interactiveThumbnailView->setThumbnailWidth( - UBSettings::defaultWidgetIconWidth); - mLibraryUI->videoThumbnailView->setThumbnailWidth( - UBSettings::settings()->videoThumbnailWidth->get().toInt()); - - connect(mLibraryUI->imageLibraryTreeWidget, SIGNAL(itemSelectionChanged()), - this, SLOT(itemSelectionChanged())); - - connect(mLibraryUI->imageLibraryTreeWidget, - SIGNAL(itemChanged ( QTreeWidgetItem * , int )), this, - SLOT(itemChanged ( QTreeWidgetItem * , int ))); - - connect(mLibraryUI->imageLibraryTreeWidget, SIGNAL(contentChanged()), this, - SLOT(refreshImageThumbnailsView())); - - connect(mLibraryUI->interactiveLibraryTreeWidget, - SIGNAL(itemSelectionChanged()), this, SLOT(itemSelectionChanged())); - - connect(mLibraryUI->interactiveLibraryTreeWidget, - SIGNAL(itemChanged ( QTreeWidgetItem * , int )), this, - SLOT(itemChanged ( QTreeWidgetItem * , int ))); - - connect(mLibraryUI->interactiveLibraryTreeWidget, SIGNAL(contentChanged()), - this, SLOT(refreshInteractiveThumbnailsView())); - - connect(mLibraryUI->videoLibraryTreeWidget, SIGNAL(itemSelectionChanged()), - this, SLOT(itemSelectionChanged())); - - connect(mLibraryUI->videoLibraryTreeWidget, SIGNAL(contentChanged()), this, - SLOT(refreshVideoThumbnailsView())); - - connect(mLibraryUI->newInteractiveFolderButton, SIGNAL(clicked()), this, - SLOT(createNewFolder())); - connect(mLibraryUI->newFolderButton, SIGNAL(clicked()), this, - SLOT(createNewFolder())); - connect(mLibraryUI->addImageToLibraryButton, SIGNAL(clicked()), this, - SLOT(addImagesToLibrary())); - connect(mLibraryUI->addInteractiveToLibraryButton, SIGNAL(clicked()), this, - SLOT(addInteractivesToLibrary())); - connect(mLibraryUI->addToDocumentButton, SIGNAL(clicked()), this, - SLOT(addObjectFromFilesystemToPage())); - connect(mLibraryUI->removeButton, SIGNAL(clicked()), this, SLOT(remove())); - - connect(mLibraryUI->addToPageButton, SIGNAL(clicked()), this, - SLOT(addToPage())); - connect(mLibraryUI->setAsBackgroundButton, SIGNAL(clicked()), this, - SLOT(setAsBackground())); - connect(mLibraryUI->removeBackgroundButton, SIGNAL(clicked()), this, - SLOT(removeBackground())); - - connect(mLibraryUI->zoomSlider, SIGNAL(valueChanged(int)), this, - SLOT(zoomSliderValueChanged(int))); - - connect(mLibraryUI->imageThumbnailView, SIGNAL(resized()), this, - SLOT(thumbnailViewResized())); - connect(mLibraryUI->shapeThumbnailView, SIGNAL(resized()), this, - SLOT(thumbnailViewResized())); - connect(mLibraryUI->interactiveThumbnailView, SIGNAL(resized()), this, - SLOT(thumbnailViewResized())); - connect(mLibraryUI->videoThumbnailView, SIGNAL(resized()), this, - SLOT(thumbnailViewResized())); - connect(mLibraryUI->gipThumbnailView, SIGNAL(resized()), this, - SLOT(thumbnailViewResized())); - connect(mLibraryUI->soundThumbnailView, SIGNAL(resized()), this, - SLOT(thumbnailViewResized())); - - connect(mLibraryUI->imageThumbnailView, SIGNAL(selectionChanged()), this, - SLOT(selectionChanged())); - connect(mLibraryUI->shapeThumbnailView, SIGNAL(selectionChanged()), this, - SLOT(selectionChanged())); - connect(mLibraryUI->interactiveThumbnailView, SIGNAL(selectionChanged()), - this, SLOT(selectionChanged())); - connect(mLibraryUI->videoThumbnailView, SIGNAL(selectionChanged()), this, - SLOT(selectionChanged())); - connect(mLibraryUI->gipThumbnailView, SIGNAL(selectionChanged()), this, - SLOT(selectionChanged())); - connect(mLibraryUI->soundThumbnailView, SIGNAL(selectionChanged()), this, - SLOT(selectionChanged())); - - mLibraryUI->imageLibraryTreeWidget->setIndentation(30); - mLibraryUI->interactiveLibraryTreeWidget->setIndentation(30); - mLibraryUI->videoLibraryTreeWidget->setIndentation(30); - - mLibraryUI->imageThumbnailView->setBackgroundBrush( - UBSettings::documentViewLightColor); - mLibraryUI->shapeThumbnailView->setBackgroundBrush( - UBSettings::documentViewLightColor); - mLibraryUI->interactiveThumbnailView->setBackgroundBrush( - UBSettings::documentViewLightColor); - mLibraryUI->gipThumbnailView->setBackgroundBrush( - UBSettings::documentViewLightColor); - mLibraryUI->videoThumbnailView->setBackgroundBrush( - UBSettings::documentViewLightColor); - mLibraryUI->soundThumbnailView->setBackgroundBrush( - UBSettings::documentViewLightColor); - - int viewWidth = mParentWidget->width() / 2; - int viewHeight = mParentWidget->height() * 2.0 / 3.0; - - mLibraryWindow->setGeometry((mParentWidget->width() - viewWidth) / 2, - (mParentWidget->height() - viewHeight) / 2, viewWidth, viewHeight); - - connect(mLibraryUI->libraryTab, SIGNAL(currentChanged(int)), this, - SLOT(tabChanged(int))); - - mLibraryUI->libraryTab->setCurrentIndex(TabIndex::Gip); - tabChanged(TabIndex::Gip); - - connect(mLibraryWindow, SIGNAL(finished(int)), this, - SIGNAL(dialogClosed(int))); - - loadLibraries(); - } - - if (mLibraryWindow) { - mLibraryWindow->setVisible(show); - if (show) { - mLibraryWindow->activateWindow(); - - if (mNeedRefreshOnNextDisplay) { - refreshImageThumbnailsView(); - mNeedRefreshOnNextDisplay = false; - } - } - } - - selectionChanged(); -} - -void UBLibraryController::tabChanged(int value) { - selectionChanged(); - - switch (value) { - case TabIndex::Image: - refreshImageThumbnailsView(); - break; - - case TabIndex::Shape: - refreshShapeThumbnailsView(); - break; - - case TabIndex::Interactive: - refreshInteractiveThumbnailsView(); - break; - - case TabIndex::Video: - refreshVideoThumbnailsView(); - break; - - case TabIndex::Sound: - refreshSoundThumbnailsView(); - break; - - default: - break; - } -} - -void UBLibraryController::selectionChanged() { - bool hasSelectedItems = false; - switch (mLibraryUI->libraryTab->currentIndex()) { - case TabIndex::Image: { - bool canWrite = false; - bool isTopLevel = false; - - QList tw = - mLibraryUI->imageLibraryTreeWidget->selectedItems(); - if (tw.size() > 0) { - UBLibraryFolderItem* fi = - dynamic_cast (tw.last()); - if (fi) { - canWrite = fi->canWrite(); - isTopLevel = !fi->parent(); - - mLibraryUI->imageLibrariesStack->setCurrentWidget( - mLibraryUI->imagePageLocal); - } else { - - UBOnlineLibraryItem* oi = - dynamic_cast (tw.last()); - if (oi) { - - mLibraryUI->imageLibrariesStack->setCurrentWidget( - mLibraryUI->imagePageOnline); - mImageWebView->load(oi->url(), oi); - } - } - } - - mLibraryUI->newFolderButton->setEnabled(canWrite && isTopLevel); - mLibraryUI->addImageToLibraryButton->setEnabled(canWrite && !isTopLevel); - mLibraryUI->addToDocumentButton->setEnabled(true); - - mLibraryUI->removeButton->setEnabled(canWrite && !isTopLevel); - - hasSelectedItems = mLibraryUI->imageThumbnailView->selectedItems().size() - > 0; - - mLibraryUI->addToPageButton->setEnabled(hasSelectedItems); - mLibraryUI->setAsBackgroundButton->setEnabled(hasSelectedItems); - - mLibraryUI->removeBackgroundButton->setEnabled( - activeScene()->hasBackground()); - - mLibraryUI->zoomSlider->setValue( - mLibraryUI->imageThumbnailView->thumbnailWidth()); - mLibraryUI->zoomSlider->setVisible(true); - } - break; - case TabIndex::Shape: { - mLibraryUI->newFolderButton->setEnabled(false); - mLibraryUI->addImageToLibraryButton->setEnabled(false); - mLibraryUI->addToDocumentButton->setEnabled(false); - mLibraryUI->removeButton->setEnabled(false); - - hasSelectedItems = mLibraryUI->shapeThumbnailView->selectedItems().size() - > 0; - - mLibraryUI->addToPageButton->setEnabled(hasSelectedItems); - mLibraryUI->setAsBackgroundButton->setEnabled(hasSelectedItems); - - mLibraryUI->removeBackgroundButton->setEnabled( - activeScene()->hasBackground()); - - mLibraryUI->zoomSlider->setValue( - mLibraryUI->shapeThumbnailView->thumbnailWidth()); - mLibraryUI->zoomSlider->setVisible(true); - } - break; - case TabIndex::Interactive: { - bool canWrite = false; - bool isTopLevel = false; - - QList tw = - mLibraryUI->interactiveLibraryTreeWidget->selectedItems(); - if (tw.size() > 0) { - UBLibraryFolderItem* fi = - dynamic_cast (tw.last()); - if (fi) { - canWrite = fi->canWrite(); - isTopLevel = !fi->parent(); - mLibraryUI->interactiveLibrariesStack->setCurrentWidget( - mLibraryUI->interactivePageLocal); - } else { - UBOnlineLibraryItem* oi = - dynamic_cast (tw.last()); - - if (oi) { - mLibraryUI->interactiveLibrariesStack->setCurrentWidget( - mLibraryUI->interactivePageOnline); - mInteractiveWebView->load(oi->url(), oi); - } - } - } - - mLibraryUI->newInteractiveFolderButton->setEnabled(canWrite && isTopLevel); - mLibraryUI->addInteractiveToLibraryButton->setEnabled(canWrite - && !isTopLevel); - mLibraryUI->addToDocumentButton->setEnabled(true); - - hasSelectedItems - = mLibraryUI->interactiveThumbnailView->selectedItems().size() > 0; - - mLibraryUI->removeButton->setEnabled((canWrite && !isTopLevel) || (canWrite - && hasSelectedItems)); - - mLibraryUI->addToPageButton->setEnabled(hasSelectedItems); - mLibraryUI->setAsBackgroundButton->setEnabled(false); - mLibraryUI->removeBackgroundButton->setEnabled(false); - - mLibraryUI->zoomSlider->setValue( - mLibraryUI->interactiveThumbnailView->thumbnailWidth()); - mLibraryUI->zoomSlider->setVisible(false); - } - break; - case TabIndex::Video: { - QList tw = - mLibraryUI->videoLibraryTreeWidget->selectedItems(); - if (tw.size() > 0) { - hasSelectedItems = true; - UBOnlineLibraryItem* oi = - dynamic_cast (tw.last()); - if (oi) { - mLibraryUI->videoLibrariesStack->setCurrentWidget( - mLibraryUI->videoPageOnline); - mVideoWebView->load(oi->url(), oi); - } else { - mLibraryUI->videoLibrariesStack->setCurrentWidget( - mLibraryUI->videoPageLocal); - } - } - - mLibraryUI->newFolderButton->setEnabled(false); - mLibraryUI->addImageToLibraryButton->setEnabled(false); - mLibraryUI->addToDocumentButton->setEnabled(true); - mLibraryUI->removeButton->setEnabled(false); - mLibraryUI->addToPageButton->setEnabled(true); - mLibraryUI->setAsBackgroundButton->setEnabled(false); - mLibraryUI->removeBackgroundButton->setEnabled(false); - - mLibraryUI->zoomSlider->setValue(mLibraryUI->videoThumbnailView->thumbnailWidth()); - mLibraryUI->zoomSlider->setVisible(true); - } - break; - case TabIndex::Gip: { - hasSelectedItems = mLibraryUI->gipThumbnailView->selectedItems().size() > 0; - - mLibraryUI->newFolderButton->setEnabled(false); - mLibraryUI->addImageToLibraryButton->setEnabled(false); - mLibraryUI->addToDocumentButton->setEnabled(false); - mLibraryUI->removeButton->setEnabled(false); - mLibraryUI->addToPageButton->setEnabled(hasSelectedItems); - mLibraryUI->setAsBackgroundButton->setEnabled(false); - mLibraryUI->removeBackgroundButton->setEnabled(false); - mLibraryUI->zoomSlider->setValue(mLibraryUI->gipThumbnailView->thumbnailWidth()); - mLibraryUI->zoomSlider->setVisible(true); - } - break; - - case TabIndex::Sound: { - hasSelectedItems = mLibraryUI->soundThumbnailView->selectedItems().size() - > 0; - - mLibraryUI->newFolderButton->setEnabled(false); - mLibraryUI->addImageToLibraryButton->setEnabled(false); - mLibraryUI->addToDocumentButton->setEnabled(false); - mLibraryUI->removeButton->setEnabled(false); - mLibraryUI->addToPageButton->setEnabled(hasSelectedItems); - mLibraryUI->setAsBackgroundButton->setEnabled(false); - mLibraryUI->removeBackgroundButton->setEnabled(false); - mLibraryUI->zoomSlider->setValue(mLibraryUI->soundThumbnailView->thumbnailWidth()); - mLibraryUI->zoomSlider->setVisible(true); - } - default: - break; - } -} - -void UBLibraryController::zoomSliderValueChanged(int value) { - switch (mLibraryUI->libraryTab->currentIndex()) { - case TabIndex::Image: - mLibraryUI->imageThumbnailView->setThumbnailWidth(value); - UBSettings::settings()->imageThumbnailWidth->set(value); - break; - case TabIndex::Shape: - mLibraryUI->shapeThumbnailView->setThumbnailWidth(value); - UBSettings::settings()->shapeThumbnailWidth->set(value); - break; - case TabIndex::Interactive: - mLibraryUI->interactiveThumbnailView->setThumbnailWidth(value); - break; - case TabIndex::Video: - mLibraryUI->videoThumbnailView->setThumbnailWidth(value); - UBSettings::settings()->videoThumbnailWidth->set(value); - break; - case TabIndex::Gip: - mLibraryUI->gipThumbnailView->setThumbnailWidth(value); - UBSettings::settings()->gipThumbnailWidth->set(value); - break; - case TabIndex::Sound: - mLibraryUI->soundThumbnailView->setThumbnailWidth(value); - UBSettings::settings()->soundThumbnailWidth->set(value); - break; - default: - break; - } + return favoriteVirtualPath; } -void UBLibraryController::addShape() { - QPointF pos(0, 0); - - if (activeScene()) { - QPointF topLeftCorner = mBoardController->controlGeometry().topLeft(); - pos = mBoardController->controlView()->mapToScene(topLeftCorner.toPoint()); - } - - int i = 0; - - foreach(QGraphicsItem *item, mLibraryUI->shapeThumbnailView->selectedItems()) - { - ++i; - - QGraphicsSvgItem* svgItem = dynamic_cast (item); - - if (svgItem && mSvgItemToFilepath.contains(svgItem) && activeScene()) { - QUrl url = QUrl::fromLocalFile(mSvgItemToFilepath.value(svgItem)); - QGraphicsItem* itemInScene = activeScene()->addSvg(url, QPointF(0, - 0)); - - itemInScene->setPos(QPoint(pos.x() + 10 * i, pos.y() + 10 * i)); - } - } -} - -void UBLibraryController::setShapeAsBackground() { - QList selectedItems = - mLibraryUI->shapeThumbnailView->selectedItems(); - - if (selectedItems.size() > 0) { - QGraphicsSvgItem* svgItem = - dynamic_cast (selectedItems.last()); - - if (svgItem && mSvgItemToFilepath.contains(svgItem) && activeScene()) { - QString path = mSvgItemToFilepath.value(svgItem); - UBGraphicsSvgItem* boardItem = activeScene()->addSvg( - QUrl::fromLocalFile(path), QPointF(0, 0)); - activeScene()->setAsBackgroundObject(boardItem, true); - } - } -} - -void UBLibraryController::addToPage() { - switch (mLibraryUI->libraryTab->currentIndex()) { - case TabIndex::Image: - addImage(); - break; - case TabIndex::Shape: - addShape(); - break; - case TabIndex::Interactive: - addInteractiveToCurrentPage(); - break; - case TabIndex::Video: - addVideo(); - break; - case TabIndex::Sound: - addAudio(); - break; - default: - break; - } - - mLibraryWindow->done(0); - - UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector); -} - - -void UBLibraryController::setAsBackground() -{ - switch (mLibraryUI->libraryTab->currentIndex()) { - case TabIndex::Image: - setImageAsBackground(); - break; - case TabIndex::Shape: - setShapeAsBackground(); - break; - default: - break; - } - - selectionChanged(); -} - -QRectF UBLibraryController::visibleSceneRect() { - QRectF visibleSceneRect(0, 0, 0, 0); - - if (activeScene() && mBoardController && mBoardController->controlView()) { - QPointF topLeftCorner = mBoardController->controlGeometry().topLeft(); - QPointF bottomRightCorner = - mBoardController->controlGeometry().bottomRight(); - - QPointF sceneTopLeft = mBoardController->controlView()->mapToScene( - topLeftCorner.toPoint()); - QPointF sceneBottomRight = mBoardController->controlView()->mapToScene( - bottomRightCorner.toPoint()); - - visibleSceneRect.setTopLeft(sceneTopLeft); - visibleSceneRect.setBottomRight(sceneBottomRight); - } - - return visibleSceneRect; -} - -void UBLibraryController::addImagesToCurrentPage(const QList& images) { - QPointF pos = visibleSceneRect().topLeft(); - - foreach(const QUrl url, images) - { - mLastItemOffsetIndex++; - mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5); - - QGraphicsItem* itemInScene = 0; - - if (activeScene()) { - QString mimeType = UBFileSystemUtils::mimeTypeFromFileName( - url.toString()); - - //TODO UB 4.x move this logic to the scene .. - if (mimeType == "image/svg+xml") { - itemInScene = activeScene()->addSvg(url, pos); - } else { - itemInScene = activeScene()->addPixmap(QPixmap( - url.toLocalFile()), pos); - } - } - - if (itemInScene) { - itemInScene = activeScene()->scaleToFitDocumentSize(itemInScene, - false, UBSettings::objectInControlViewMargin); - - itemInScene->setPos(QPoint(pos.x() + 50 * mLastItemOffsetIndex, - pos.y() + 50 * mLastItemOffsetIndex)); - } - } -} - -void UBLibraryController::addVideosToCurrentPage(const QList& videos) { - QPointF pos = visibleSceneRect().topLeft(); - - foreach(const QUrl url, videos) - { - mLastItemOffsetIndex++; - mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5); - - UBGraphicsVideoItem* itemInScene = - UBApplication::boardController->addVideo(url, false, pos); - itemInScene->setPos(QPoint(pos.x() + 50 * mLastItemOffsetIndex, pos.y() - + 50 * mLastItemOffsetIndex)); - } -} - -void UBLibraryController::addAudiosToCurrentPage(const QList& sounds) { - QPointF topLeftPos = visibleSceneRect().topLeft(); - - QPointF pos = topLeftPos; - - foreach(const QUrl url, sounds) - { - mLastItemOffsetIndex++; - mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5); - pos = QPointF(topLeftPos.x() + 50 * mLastItemOffsetIndex, - topLeftPos.y() + 50 * mLastItemOffsetIndex); - UBApplication::boardController->addAudio(url, false, pos); - } -} - -void UBLibraryController::addInteractivesToCurrentPage( - const QList& widgets) { - foreach(const QUrl url, widgets) - { - mBoardController->downloadURL(url, QPointF(0, 0)); - } -} - -void UBLibraryController::addImage() { - QList images; - - foreach(QGraphicsItem *item, mLibraryUI->imageThumbnailView->selectedItems()) - { - QGraphicsPixmapItem* pixmapItem = - dynamic_cast (item); - - if (pixmapItem && activeScene()) { - images << QUrl::fromLocalFile(mPixmapItemToFilepath.value( - pixmapItem)); - } else { - QGraphicsSvgItem* svgItem = dynamic_cast (item); - - images << QUrl::fromLocalFile( - mSvgImageItemToFilepath.value(svgItem)); - } - } - - addImagesToCurrentPage(images); -} - -void UBLibraryController::addVideo() { - QList urls; - - foreach(QGraphicsItem *item, mLibraryUI->videoThumbnailView->selectedItems()) - { - UBThumbnailVideo* videoItem = dynamic_cast (item); - - if (videoItem && activeScene()) { - urls << videoItem->path(); - } - } - - addVideosToCurrentPage(urls); -} - -void UBLibraryController::addAudio() { - QList urls; - - foreach(QGraphicsItem *item, mLibraryUI->soundThumbnailView->selectedItems()) - { - QGraphicsPixmapItem* pixmapItem = - dynamic_cast (item); - - if (pixmapItem && activeScene()) { - urls << QUrl::fromLocalFile(mSoundItemToFilepath.value(pixmapItem)); - } - } - - addAudiosToCurrentPage(urls); -} - -void UBLibraryController::setImageAsBackground() { - QList selectedItems = - mLibraryUI->imageThumbnailView->selectedItems(); - - if (selectedItems.size() > 0) { - QGraphicsPixmapItem* pixmapItem = - dynamic_cast (selectedItems.last()); - - if (pixmapItem && activeScene()) { - QPixmap pix = mPixmapItemToFilepath.value(pixmapItem); - UBGraphicsPixmapItem* boardItem = activeScene()->addPixmap(pix, - QPointF(0, 0)); - activeScene()->setAsBackgroundObject(boardItem, true); - - return; - } - - QGraphicsSvgItem* svgItem = - dynamic_cast (selectedItems.last()); - - if (svgItem && activeScene() && mSvgImageItemToFilepath.contains(svgItem)) { - QUrl url = QUrl::fromLocalFile(mSvgImageItemToFilepath.value(svgItem)); - QGraphicsSvgItem* boardItem = activeScene()->addSvg(url, QPointF(0, 0)); - activeScene()->setAsBackgroundObject(boardItem, true, true); - } - } -} - - - - -void UBLibraryController::closeWindow() { - mLibraryWindow->hide(); -} - -void UBLibraryController::itemSelectionChanged() { - selectionChanged(); - - switch (mLibraryUI->libraryTab->currentIndex()) { - case TabIndex::Image: - refreshImageThumbnailsView(); - break; - case TabIndex::Interactive: - refreshInteractiveThumbnailsView(); - break; - case TabIndex::Video: - refreshVideoThumbnailsView(); - break; - case TabIndex::Sound: - refreshSoundThumbnailsView(); - break; - default: - break; - } -} - -void UBLibraryController::itemChanged(QTreeWidgetItem * item, int column) { - UBLibraryFolderItem* fi = dynamic_cast (item); - - if (fi) { - QString newName = item->text(column); - - QString oldPath = fi->dir().canonicalPath(); - - int lastSlashIndex = oldPath.lastIndexOf("/"); - - QString newPath = oldPath.left(lastSlashIndex + 1) + newName; - - qDebug() << "renaming" << oldPath << "to" << newPath; - - if (fi->dir().rename(oldPath, newPath)) { - fi->setDir(QDir(newPath)); - } else { - item->setText(column, fi->dir().dirName()); - } - } -} - -void UBLibraryController::thumbnailViewResized() { - switch (mLibraryUI->libraryTab->currentIndex()) { - case TabIndex::Image: - mLibraryUI->zoomSlider->setMaximum(mLibraryUI->imageThumbnailView->width()); - break; - case TabIndex::Shape: - mLibraryUI->zoomSlider->setMaximum(mLibraryUI->shapeThumbnailView->width()); - break; - case TabIndex::Interactive: - mLibraryUI->zoomSlider->setMaximum( - mLibraryUI->interactiveThumbnailView->width()); - break; - case TabIndex::Video: - mLibraryUI->zoomSlider->setMaximum(mLibraryUI->videoThumbnailView->width()); - break; - case TabIndex::Gip: - mLibraryUI->zoomSlider->setMaximum(mLibraryUI->gipThumbnailView->width()); - break; - case TabIndex::Sound: - mLibraryUI->zoomSlider->setMaximum(mLibraryUI->soundThumbnailView->width()); - break; - default: - break; - } -} - -UBLibraryFolderItem::UBLibraryFolderItem(const QDir& pDir, const QString& name, - QTreeWidgetItem * parent, bool canWrite, - const QStringList& pExtensionsToHide) : -QTreeWidgetItem(parent), mExtensionsToHide(pExtensionsToHide), mDir(pDir), -mCanWrite(canWrite) { - if (name.length() == 0) { - setText(0, UBLibraryController::trUtf8(pDir.dirName().toUtf8())); - } else { - setText(0, UBLibraryController::trUtf8(name.toUtf8())); - } - - if (canWrite) { - setFlags(flags() | Qt::ItemIsEditable); - } - - - if (!mDir.exists()) - mDir.mkpath(mDir.path()); - - refreshSubDirs(); -} - -void UBLibraryFolderItem::refreshSubDirs() { - foreach(QTreeWidgetItem *ti, takeChildren()) - delete ti; - - QStringList subDirs = mDir.entryList(QStringList(), QDir::Dirs - | QDir::NoDotAndDotDot | QDir::NoSymLinks, QDir::Name); // TODO UB 4.x support symlinks properly - - foreach(QString subDirName, subDirs) - { - QString ext = UBFileSystemUtils::extension(subDirName); - - if (!mExtensionsToHide.contains(ext)) { - new UBLibraryFolderItem(QDir(mDir.path() + "/" + subDirName), - UBLibraryController::trUtf8(subDirName.toUtf8()), this, - mCanWrite, mExtensionsToHide); - } - } -} - -void UBLibraryController::refreshVideoThumbnailsView() { - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - - QList items; - QList itemsPath; - QStringList labels; - - QList tw = - mLibraryUI->videoLibraryTreeWidget->selectedItems(); - - if (tw.size() > 0) { - UBLibraryFolderItem* fi = dynamic_cast (tw.last()); - - if (fi) { - QStringList - videoPaths = UBPersistenceManager::persistenceManager()->allVideos(fi->dir()); - - for (int i = 0; i < videoPaths.size(); i++) { - QString path = videoPaths.at(i); - - UBThumbnailVideo *pixmapItem = new UBThumbnailVideo(QUrl::fromLocalFile(path)); - - items.append(pixmapItem); - itemsPath.append(QUrl::fromLocalFile(path)); - - QFileInfo file(path); - - labels.append(file.completeBaseName()); - } - } - } - - mLibraryUI->videoThumbnailView->setGraphicsItems(items, itemsPath, labels); - - QApplication::restoreOverrideCursor(); -} - -void UBLibraryController::refreshSoundThumbnailsView() { - QList soundItems; - QList soundItemsPath; - QStringList soundLabels; - - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - - QStringList soundWidgetPaths = UBPersistenceManager::persistenceManager()->allSounds(); - - for (int i = 0; i < soundWidgetPaths.size(); i++) { - QString path = soundWidgetPaths.at(i); - - QGraphicsPixmapItem *pixmapItem = new UBThumbnailPixmap(QPixmap( - ":/images/soundIcon.svg")); - - QString name = path; - - mSoundItemToFilepath.insert(pixmapItem, path); - soundItems.append(pixmapItem); - soundItemsPath.append(QUrl::fromLocalFile(path)); - soundLabels.append(UBFileSystemUtils::lastPathComponent(name)); - } - - mLibraryUI->soundThumbnailView->setGraphicsItems(soundItems, soundItemsPath, - soundLabels); - - QApplication::restoreOverrideCursor(); -} - -void UBLibraryController::addObjectFromFilesystemToPage() { - - bool hasAddedObjects = false; - - switch (mLibraryUI->libraryTab->currentIndex()) { - case TabIndex::Image: { - QString extensions; - - foreach(QString ext, UBSettings::settings()->imageFileExtensions) - { - extensions += " *."; - extensions += ext; - } - - QString defaultPath = - UBSettings::settings()->lastPicturePath->get().toString(); - - QStringList filenames = QFileDialog::getOpenFileNames(mParentWidget, tr( - "Add Images to Current Page"), defaultPath, - tr("All Images (%1)").arg(extensions)); - - if (filenames.size() > 0) { - QFileInfo fi(filenames.at(0)); - UBSettings::settings()->lastPicturePath->set(QVariant( - fi.dir().absolutePath())); - - QList urls; - foreach(const QString s, filenames) - { - urls << QUrl::fromLocalFile(s); - } - - addImagesToCurrentPage(urls); - - hasAddedObjects = true; - } - break; - } - - case TabIndex::Interactive: { - QString defaultWidgetPath = - UBSettings::settings()->lastWidgetPath->get().toString(); - - QString extensions; - - foreach(QString ext, UBSettings::settings()->interactiveContentFileExtensions) - { - extensions += " *."; - extensions += ext; - } - - QStringList filenames = QFileDialog::getOpenFileNames(mParentWidget, tr( - "Add Applications to Current Page"), defaultWidgetPath, tr( - "All Applications (%1)").arg(extensions)); - - if (filenames.size() > 0) { - QFileInfo fi(filenames.at(0)); - UBSettings::settings()->lastWidgetPath->set(QVariant( - fi.dir().absolutePath())); - - QList urls; - foreach(const QString s, filenames) - { - urls << QUrl::fromLocalFile(s); - } - - addInteractivesToCurrentPage(urls); - - hasAddedObjects = true; - } - - break; - } - - case TabIndex::Video: { - QString defaultVideoPath = - UBSettings::settings()->lastVideoPath->get().toString(); - - QStringList filenames = QFileDialog::getOpenFileNames(mParentWidget, tr( - "Add Movies to Current Page"), defaultVideoPath, tr( - "All Files (*.*)")); - if (filenames.size() > 0) { - QFileInfo fi(filenames.at(0)); - UBSettings::settings()->lastVideoPath->set(QVariant( - fi.dir().absolutePath())); - - QList urls; - foreach(const QString s, filenames) - { - urls << QUrl::fromLocalFile(s); - } - - addVideosToCurrentPage(urls); - - hasAddedObjects = true; - } - - break; - } - case TabIndex::Gip: { - //TODO - break; - } - default: - break; - - } - - UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector); - - if (hasAddedObjects) { - mLibraryWindow->done(0); - } -} - -void UBLibraryController::addInteractiveToCurrentPage() { - QList widgets; - - foreach(QGraphicsItem *item, mLibraryUI->interactiveThumbnailView->selectedItems()) - { - QGraphicsPixmapItem* iconItem = - dynamic_cast (item); - - if (iconItem && activeScene()) { - QString url = mInteractiveItemToFilepath.value(iconItem); - - if (url.startsWith("uniboardTool")) { - widgets << QUrl(url); - } else { - widgets << QUrl::fromLocalFile(url); - } - } - } - - addInteractivesToCurrentPage(widgets); -} - -void UBLibraryController::loadLibraries() -{ - if (mLibraryFileToDownload.size() > 0) { - QString mainLibrary = mLibraryFileToDownload.takeFirst(); - - UBNetworkAccessManager *nam = - UBNetworkAccessManager::defaultAccessManager(); - - UBServerXMLHttpRequest *librariesReq = new UBServerXMLHttpRequest(nam); // Deleted automatically after reply content is consumed - connect(librariesReq, SIGNAL(finished(bool, const QByteArray&)), this, - SLOT(getLibraryListResponse(bool, const QByteArray&))); - - librariesReq->get(QUrl(mainLibrary)); - } -} - -void UBLibraryController::getLibraryListResponse(bool ok, - const QByteArray& replyContent) { - if (!ok) - return; - - QXmlStreamReader xml(replyContent); - - while (!xml.atEnd()) { - xml.readNext(); - - if (xml.isStartElement()) { - if (xml.name() == "library") { - QStringRef libraryTitle = xml.attributes().value("title"); - QStringRef libraryHref = xml.attributes().value("href"); - QStringRef libraryType = xml.attributes().value("type"); - - if (!libraryTitle.isNull() && !libraryTitle.isNull() - && !libraryType.isNull()) { - QString title = libraryTitle.toString(); - QUrl href(libraryHref.toString()); - - UBOnlineLibraryItem *ubLibrary = new UBOnlineLibraryItem(href, - title, 0); - - if (libraryType.toString() == "image") { - if (!mImageOnlineTi) { - mImageOnlineTi = new QTreeWidgetItem(); - mImageOnlineTi->setText(0, tr("Online")); - mImageOnlineTi->setIcon(0, QPixmap( - ":/images/online.png")); - - mLibraryUI->imageLibraryTreeWidget->addTopLevelItem( - mImageOnlineTi); - } - mImageOnlineTi->addChild(ubLibrary); - mImageOnlineTi->setExpanded(true); - } else if (libraryType.toString() == "video") { - if (!mVideoOnlineTi) { - mVideoOnlineTi = new QTreeWidgetItem(); - mVideoOnlineTi->setText(0, tr("Online")); - mVideoOnlineTi->setIcon(0, QPixmap( - ":/images/online.png")); - - mLibraryUI->videoLibraryTreeWidget->addTopLevelItem( - mVideoOnlineTi); - } - mVideoOnlineTi->addChild(ubLibrary); - mVideoOnlineTi->setExpanded(true); - } else if (libraryType.toString() == "interactive") { - if (!mInteractiveOnlineTi) { - mInteractiveOnlineTi = new QTreeWidgetItem(); - mInteractiveOnlineTi->setText(0, tr("Online")); - mInteractiveOnlineTi->setIcon(0, QPixmap( - ":/images/online.png")); - - mLibraryUI->interactiveLibraryTreeWidget->addTopLevelItem( - mInteractiveOnlineTi); - } - mInteractiveOnlineTi->addChild(ubLibrary); - mInteractiveOnlineTi->setExpanded(true); - - } - } - } - } - } - - loadLibraries(); -} - -UBLibraryWebView::UBLibraryWebView(QWidget * parent) : - QWebView(parent), mCurrentLibraryItem(0) { - setPage(new UBWebPage(this)); - - QWebView::settings()->setAttribute(QWebSettings::PluginsEnabled, true); - QWebView::page()->setNetworkAccessManager( - UBNetworkAccessManager::defaultAccessManager()); - - connect(page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, - SLOT(javaScriptWindowObjectCleared())); - connect(this, SIGNAL(iconChanged()), this, SLOT(newIconAvailable())); - connect(this, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool))); -} - -void UBLibraryWebView::javaScriptWindowObjectCleared() { - UBLibraryAPI *libraryAPI = new UBLibraryAPI(this); - - page()->mainFrame()->addToJavaScriptWindowObject("uniboard", libraryAPI); -} - -void UBLibraryWebView::loadFinished(bool ok) { - if (ok) { - QString installDragHandler = - "document.body.ondragstart = function(event) {"; - - installDragHandler += "var p = event.target.parentNode;"; - installDragHandler += "if (p && p.href){"; - installDragHandler += "event.preventDefault();"; - installDragHandler += "uniboard.startDrag(p.href);"; - installDragHandler += "}"; - installDragHandler += "}"; - - page()->mainFrame()->evaluateJavaScript(installDragHandler); - } - - mCurrentLibraryItem->setIcon(0, QWebSettings::iconForUrl(url())); -} - -void UBLibraryWebView::newIconAvailable() { - if (mCurrentLibraryItem) - mCurrentLibraryItem->setIcon(0, icon()); - -} - -QWebView * UBLibraryWebView::createWindow(QWebPage::WebWindowType type) { - if (type == QWebPage::WebBrowserWindow) { - UBApplication::applicationController->showInternet(); - return UBApplication::webController->createNewTab(); - } else { - return this; - } -} - -UBLibraryPreloader::UBLibraryPreloader(QObject* pParent) : - QObject(pParent) { - QTimer::singleShot(30000, this, SLOT(loadLibrary())); -} - -void UBLibraryPreloader::loadLibrary() { - QStringList libraries = UBLibraryController::onlineLibraries(); - - if (libraries.length() > 0) { - QString mainLibrary = libraries.at(0); - - UBNetworkAccessManager *nam = - UBNetworkAccessManager::defaultAccessManager(); - - UBServerXMLHttpRequest *librariesReq = new UBServerXMLHttpRequest(nam); // Deleted automatically after reply content is consumed - connect(librariesReq, SIGNAL(finished(bool, const QByteArray&)), this, - SLOT(getLibraryListResponse(bool, const QByteArray&))); - - librariesReq->get(QUrl(mainLibrary)); - } -} - -void UBLibraryPreloader::getLibraryListResponse(bool ok, - const QByteArray& replyContent) { - if (!ok) - return; - - QXmlStreamReader xml(replyContent); - - while (!xml.atEnd()) { - xml.readNext(); - - if (xml.isStartElement()) { - if (xml.name() == "library") { - QStringRef libraryHref = xml.attributes().value("href"); - QStringRef libraryType = xml.attributes().value("type"); - - if (!libraryType.isNull() && !libraryHref.isNull()) { - if (libraryType.toString() == "interactive") { - QUrl href(libraryHref.toString()); - - mWebView = new QWebView(UBApplication::mainWindow); - mWebView->setVisible(false); - - connect(mWebView, SIGNAL(loadFinished(bool)), this, - SLOT(loadFinished(bool))); - - mWebView->load(QUrl(libraryHref.toString())); - - return; - } - } - } - } - } -} - -void UBLibraryPreloader::loadFinished(bool ok) { - Q_UNUSED(ok); - - mWebView->deleteLater(); - deleteLater(); -} - -void UBLibraryController::addNativeToolToFavorites(const QUrl& url) { - QString id = url.toString(); - - QStringList favoritesNativeTools = - UBSettings::settings()->favoritesNativeToolUris->get().toStringList(); - - if (!favoritesNativeTools.contains(id)) { - favoritesNativeTools << id; - UBSettings::settings()->favoritesNativeToolUris->set(favoritesNativeTools); - } - - refreshInteractiveThumbnailsView(); -} - -QString UBLibraryController::favoritePath() -{ - return favoriteVirtualPath; -} - - - UBLibElement::UBLibElement() { mType = eUBLibElementType_Category; mName = QObject::tr("/Home", "Category list label on navigation tool bar"); diff --git a/src/board/UBLibraryController.h b/src/board/UBLibraryController.h index 2596d87c..25539234 100644 --- a/src/board/UBLibraryController.h +++ b/src/board/UBLibraryController.h @@ -6,8 +6,6 @@ #include "web/UBWebPage.h" -#include "ui_library.h" - class UBGraphicsScene; class UBBoardController; class QGraphicsSvgItem; @@ -82,14 +80,6 @@ class UBLibraryController : public QObject UBLibraryController(QWidget *parentWidget, UBBoardController *boardController); virtual ~UBLibraryController(); - QWidget* libraryWindow() - { - return mLibraryWindow; - } - - static QStringList onlineLibraries(); - static void preloadFirstOnlineLibrary(); - QList getContent(UBLibElement* pElement); void moveContent(QList sourceList, UBLibElement *pDestination); void trashElements(QList trashList); @@ -117,42 +107,10 @@ class UBLibraryController : public QObject public slots: void removeBackground(); - - - void showLibraryDialog(bool show); - - void refreshShapeThumbnailsView(); - void refreshImageThumbnailsView(); - void refreshInteractiveThumbnailsView(); - void refreshVideoThumbnailsView(); - void refreshSoundThumbnailsView(); - - void addShape(); - void setShapeAsBackground(); - - void addToPage(); - void setAsBackground(); - - - void addImage(); - void addVideo(); - void addAudio(); - void addInteractiveToCurrentPage(); - void addImagesToCurrentPage(const QList& images); void addVideosToCurrentPage(const QList& videos); void addAudiosToCurrentPage(const QList& sounds); void addInteractivesToCurrentPage(const QList& interactiveWidgets); - void setImageAsBackground(); - - void closeWindow(); - - void addObjectFromFilesystemToPage(); - - void needRefreshOnNextDisplay() - { - mNeedRefreshOnNextDisplay = true; - } protected: @@ -186,215 +144,11 @@ class UBLibraryController : public QObject UBLibElement* isOnFavoriteList(UBLibElement * element); - void loadLibraries(); - QWidget *mParentWidget; UBBoardController *mBoardController; - QDialog *mLibraryWindow; - Ui::library *mLibraryUI; - - // TODO UB 4.x break this logic, by carrying the path within the thumb item (see Video items path) - // - QMap mSvgItemToFilepath; //shape mapping - QMap mSvgImageItemToFilepath; // svg image mapping - QMap mPixmapItemToFilepath; // other image mapping - QMap mInteractiveItemToFilepath; // interactive widget mapping - QMap mSoundItemToFilepath; // sounds mapping - - UBLibraryWebView *mImageWebView; - UBLibraryWebView *mVideoWebView; - UBLibraryWebView *mInteractiveWebView; - - QTreeWidgetItem *mImageOnlineTi; - QTreeWidgetItem *mVideoOnlineTi; - QTreeWidgetItem *mInteractiveOnlineTi; - QTreeWidgetItem *mInteractiveUniboardTi; - - struct TabIndex - { - enum Enum - { - Gip = 0, - Interactive = 1, - Image = 2, - Video = 3, - Shape = 4, - Sound = 5 - }; - }; int mLastItemOffsetIndex; - QStringList mLibraryFileToDownload; - - bool mNeedRefreshOnNextDisplay; - - - private slots: - - void tabChanged(int value); - - void zoomSliderValueChanged(int value); - - void createNewFolder(); - void addInteractivesToLibrary(); - void addImagesToLibrary(); - - void removeItemsFromLibrary(UBThumbnailWidget* pThumbnailView); - void removeDir(); - void remove(); - - void itemSelectionChanged(); - void itemChanged(QTreeWidgetItem * item, int column); - - void selectionChanged(); - - void thumbnailViewResized(); - - void getLibraryListResponse(bool, const QByteArray&); - -}; - - -class UBLibraryFolderItem : public QTreeWidgetItem -{ - - public: - - UBLibraryFolderItem(const QDir& pDir, const QString& name, QTreeWidgetItem * parent, - bool pCanWrite, const QStringList& pExtensionsToHide); - - virtual ~UBLibraryFolderItem(){} - - void refreshSubDirs(); - - QDir dir() - { - return mDir; - } - - void setDir(const QDir& dir) - { - mDir = dir; - } - - bool canWrite() - { - return mCanWrite; - } - - void setCanWrite(bool canWrite) - { - mCanWrite = canWrite; - } - - private: - const QStringList mExtensionsToHide; - QDir mDir; - bool mCanWrite; }; - -class UBOnlineLibraryItem : public QTreeWidgetItem -{ - - public: - - UBOnlineLibraryItem(const QUrl& pUrl, const QString& name, QTreeWidgetItem * parent) - : QTreeWidgetItem(parent) - , mUrl(pUrl) - { - setText(0, UBLibraryController::trUtf8(name.toUtf8())); - setIcon(0, QWebSettings::iconForUrl(pUrl)); - } - - virtual ~UBOnlineLibraryItem(){} - - QUrl url() const - { - return mUrl; - } - - private: - - QUrl mUrl; -}; - - -class UBLibraryWebView : public QWebView -{ - Q_OBJECT; - - public: - UBLibraryWebView(QWidget * parent = 0 ); - virtual ~UBLibraryWebView(){}; - - virtual void mousePressEvent ( QMouseEvent * event) - { - QWebView::mousePressEvent(event); - } - - virtual void mouseMoveEvent ( QMouseEvent * event) - { - QWebView::mouseMoveEvent(event); - } - - virtual void mouseReleaseEvent ( QMouseEvent * event) - { - QWebView::mouseReleaseEvent(event); - } - - void load ( const QUrl & url ) - { - mCurrentLibraryItem = 0; - QWebView::load(url); - } - - void load ( const QUrl & url, UBOnlineLibraryItem* pLibraryItem) - { - mCurrentLibraryItem = pLibraryItem; - QWebView::load(url); - } - - protected: - - virtual QWebView * createWindow(QWebPage::WebWindowType type); - - private slots: - - void javaScriptWindowObjectCleared(); - - void newIconAvailable(); - - void loadFinished(bool ok); - - private: - UBOnlineLibraryItem* mCurrentLibraryItem; - - -}; - - -class UBLibraryPreloader : public QObject -{ - Q_OBJECT; - - public: - UBLibraryPreloader(QObject* pParent); - virtual ~UBLibraryPreloader(){}; - - private slots: - - void loadLibrary(); - - void getLibraryListResponse(bool ok, const QByteArray& replyContent); - - void loadFinished (bool ok); - - private: - QWebView *mWebView; -}; - - - #endif /* UBLIBRARYCONTROLLER_H_ */ diff --git a/src/board/UBLibraryTreeWidget.cpp b/src/board/UBLibraryTreeWidget.cpp deleted file mode 100644 index c1578e95..00000000 --- a/src/board/UBLibraryTreeWidget.cpp +++ /dev/null @@ -1,247 +0,0 @@ -/* - * UBLibraryTreeWidget.cpp - * - * Created on: 28 juil. 2009 - * Author: Luc - */ - -#include "UBLibraryTreeWidget.h" - -#include "frameworks/UBFileSystemUtils.h" - -#include "core/UBApplication.h" -#include "core/UBSettings.h" - -#include "board/UBBoardController.h" - -#include "network/UBHttpGet.h" - -#include "domain/UBW3CWidget.h" - -#include "UBLibraryController.h" - - -UBLibraryTreeWidget::UBLibraryTreeWidget(QWidget * parent) - : QTreeWidget(parent) - , mDropFolderItem(0) -{ - setDragDropMode(QAbstractItemView::DropOnly); - setAcceptDrops(true); - viewport()->setAcceptDrops(true); - setDropIndicatorShown(true); -} - - -UBLibraryTreeWidget::~UBLibraryTreeWidget() -{ - // NOOP -} - -bool UBLibraryTreeWidget::supportMimeData(const QMimeData* pMimeData) -{ - foreach(QString mimeType, mMimeTypes) - { - foreach(QString format, pMimeData->formats()) - { - if (format.startsWith(mimeType)) - { - return true; - } - } - } - - foreach (QUrl url, pMimeData->urls()) - { - foreach(QString ext, mFileExtensions) - { - if (url.toString().endsWith(ext)) - { - return true; - } - } - } - - foreach (QUrl url, pMimeData->urls()) - { - foreach(QString protocole, mProtocoles) - { - if (url.toString().startsWith(protocole)) - { - return true; - } - } - } - - return false; -} - - -void UBLibraryTreeWidget::dragEnterEvent(QDragEnterEvent * event) -{ - mDropFolderItem = 0; - - if (supportMimeData(event->mimeData())) - { - event->acceptProposedAction(); - return; - } - else - { - QTreeWidget::dragEnterEvent(event); - } -} - - -void UBLibraryTreeWidget::dragMoveEvent(QDragMoveEvent * event) -{ - QTreeWidgetItem * ti = itemAt(event->pos()); - UBLibraryFolderItem * lfi = dynamic_cast(ti); - - if (lfi && lfi->canWrite() && !(lfi == currentItem())) - { - event->acceptProposedAction(); - return; - } - - QTreeWidget::dragMoveEvent(event); -} - - -void UBLibraryTreeWidget::dropEvent(QDropEvent * event) -{ - QTreeWidgetItem * ti = itemAt(event->pos()); - UBLibraryFolderItem * lfi = dynamic_cast(ti); - - if (lfi) - { - UBLibraryFolderItem * sourceLfi = dynamic_cast(currentItem()); - - mDropFolderItem = lfi; - - QDir dir = lfi->dir(); - - foreach(QUrl url, event->mimeData()->urls()) - { - // is it local ? - QString localFile = url.toLocalFile(); - - if (localFile.length() > 0) - { - QFileInfo fileInfo(localFile); - - //is it a file ? - if (fileInfo.isFile()) - { - // copy file to dir - QFile file(localFile); - - if (sourceLfi && sourceLfi->canWrite()) - { - file.rename(dir.filePath(fileInfo.fileName())); - emit contentChanged(); - } - else - { - file.copy(dir.filePath(fileInfo.fileName())); - } - } - else if (fileInfo.isDir()) - { - if (sourceLfi && sourceLfi->canWrite()) - { - UBFileSystemUtils::moveDir(localFile, dir.filePath(fileInfo.fileName())); - emit contentChanged(); - } - else - { - UBFileSystemUtils::copyDir(localFile, dir.filePath(fileInfo.fileName())); - } - } - } - else if (url.toString().startsWith("uniboardTool://")) - { - UBApplication::boardController->libraryController()->addNativeToolToFavorites(url); - } - else - { - UBHttpGet* httpGet = new UBHttpGet(this); // TODO UB 4.6 we are leaking here, tree widget is never destroyed - - connect(httpGet, SIGNAL(downloadFinished(bool, QUrl, QString, QByteArray, QPointF, QSize, bool)), - this, SLOT(downloadFinished(bool, QUrl, QString, QByteArray))); - - UBApplication::setOverrideCursor(Qt::WaitCursor); - UBApplication::showMessage(tr("Downloading content from %1").arg(url.toString()), true); - - httpGet->get(url); - } - } - - event->acceptProposedAction(); - return; - } - else - { - QTreeWidget::dropEvent(event); - } -} - - -void UBLibraryTreeWidget::downloadFinished(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData) -{ - if (!pSuccess) - { - UBApplication::showMessage(tr("Downloading content %1 failed").arg(sourceUrl.toString())); - } - else - { - UBApplication::showMessage(tr("Download finished")); - QStringList urlPathParts = sourceUrl.path().split("/"); - - if (urlPathParts.length() > 0 && mDropFolderItem) - { - QString fileName = urlPathParts.last(); - - QString ext = UBFileSystemUtils::fileExtensionFromMimeType(pContentTypeHeader); - - if (!fileName.endsWith(ext)) - { - fileName += "." + ext; - } - - QString filePath = mDropFolderItem->dir().filePath(fileName); - QString nextItemPath = UBFileSystemUtils::nextAvailableFileName(filePath); - - if (UBSettings::widgetFileExtensions.contains(ext)) - { - QTemporaryFile tempFile; - - if (tempFile.open()) - { - tempFile.write(pData); - tempFile.close(); - - QDir widgetDir(nextItemPath); - - UBFileSystemUtils::expandZipToDir(tempFile, widgetDir); - } - } - else if(UBW3CWidget::hasNPAPIWrapper(pContentTypeHeader)) - { - QString widgetPath = UBW3CWidget::createNPAPIWrapperInDir(sourceUrl.toString() - , mDropFolderItem->dir(), pContentTypeHeader); - } - else - { - QFile itemFile(nextItemPath); - if (itemFile.open(QIODevice::WriteOnly)) - { - itemFile.write(pData); - itemFile.close(); - } - } - } - } - - UBApplication::restoreOverrideCursor(); -} - diff --git a/src/board/UBLibraryTreeWidget.h b/src/board/UBLibraryTreeWidget.h deleted file mode 100644 index b623dc5b..00000000 --- a/src/board/UBLibraryTreeWidget.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * UBLibraryTreeWidget.h - * - * Created on: 28 juil. 2009 - * Author: Luc - */ - -#ifndef UBLIBRARYTREEWIDGET_H_ -#define UBLIBRARYTREEWIDGET_H_ - -#include - -class UBLibraryFolderItem; - -class UBLibraryTreeWidget : public QTreeWidget -{ - Q_OBJECT; - - public: - UBLibraryTreeWidget(QWidget * parent = 0); - virtual ~UBLibraryTreeWidget(); - - void setMimeTypes(const QStringList& pMimeTypes) - { - mMimeTypes = pMimeTypes; - } - - void setFileExtensions(const QStringList& pFileExtensions) - { - mFileExtensions = pFileExtensions; - } - - void setProtocoles(const QStringList& pProtocoles) - { - mProtocoles = pProtocoles; - } - - bool supportMimeData(const QMimeData* pMimeData); - - signals: - void contentChanged(); - - protected: - - virtual void dragEnterEvent(QDragEnterEvent * event); - virtual void dragMoveEvent(QDragMoveEvent * event); - virtual void dropEvent(QDropEvent * event); - - private slots: - void downloadFinished(bool pSuccess, QUrl sourceUrl, QString pContentTypeHeader, QByteArray pData); - - private: - - UBLibraryFolderItem* mDropFolderItem; - - QStringList mMimeTypes; - QStringList mFileExtensions; - QStringList mProtocoles; - -}; - -#endif /* UBLIBRARYTREEWIDGET_H_ */ diff --git a/src/board/board.pri b/src/board/board.pri index 422490b3..bf934a62 100644 --- a/src/board/board.pri +++ b/src/board/board.pri @@ -3,14 +3,12 @@ HEADERS += src/board/UBBoardController.h \ src/board/UBBoardPaletteManager.h \ src/board/UBBoardView.h \ src/board/UBLibraryController.h \ - src/board/UBLibraryTreeWidget.h \ src/board/UBDrawingController.h SOURCES += src/board/UBBoardController.cpp \ src/board/UBBoardPaletteManager.cpp \ src/board/UBBoardView.cpp \ src/board/UBLibraryController.cpp \ - src/board/UBLibraryTreeWidget.cpp \ src/board/UBDrawingController.cpp diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp index b3e8582d..87fc38b9 100644 --- a/src/core/UBApplication.cpp +++ b/src/core/UBApplication.cpp @@ -140,8 +140,6 @@ UBApplication::UBApplication(const QString &id, int &argc, char **argv) } else { - // Make sure we don't mix English language with unsupported language dates - //QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedStates)); localString = "en_US"; } @@ -182,6 +180,10 @@ UBApplication::~UBApplication() // delete staticMemoryCleaner; staticMemoryCleaner = 0; + + + delete mUniboardSankoreTransition; + mUniboardSankoreTransition = 0; } int UBApplication::exec(const QString& pFileToImport) @@ -231,7 +233,7 @@ int UBApplication::exec(const QString& pFileToImport) #else connect(mainWindow->actionHideApplication, SIGNAL(triggered()), this, SLOT(showMinimized())); #endif - + mPreferencesController = new UBPreferencesController(mainWindow); connect(mainWindow->actionPreferences, SIGNAL(triggered()), mPreferencesController, SLOT(show())); @@ -256,9 +258,6 @@ int UBApplication::exec(const QString& pFileToImport) // installEventFilter(new UBIdleTimer(this)); //#endif - // TODO UB 4.x make it better and reenable it ... or dump - //installEventFilter(new UBMousePressFilter); - applicationController->initScreenLayout(); boardController->setupLayout(); @@ -299,8 +298,6 @@ int UBApplication::exec(const QString& pFileToImport) } } - UBLibraryController::preloadFirstOnlineLibrary(); - mUniboardSankoreTransition = new UniboardSankoreTransition(); mUniboardSankoreTransition->documentTransition(); @@ -526,30 +523,6 @@ bool UBApplication::handleOpenMessage(const QString& pMessage) return true; } - - -#if defined(Q_WS_MACX) && !defined(QT_MAC_USE_COCOA) - -bool UBApplication::macEventFilter(EventHandlerCallRef caller, EventRef event) -{ - Q_UNUSED(caller); - - if ((GetEventClass(event) == kEventClassCommand) && (GetEventKind(event) == kEventProcessCommand)) - { - HICommand cmd; - GetEventParameter(event, kEventParamDirectObject, typeHICommand, 0, sizeof(cmd), 0, &cmd); - if (cmd.commandID == kHICommandHide) - { - // Override the command + H (Hide Uniboard) behavior - applicationController->showDesktop(); - return true; - } - } - return false; -} -#endif - - void UBStyle::drawItemText(QPainter *painter, const QRect &rect, int alignment, const QPalette &pal, bool enabled, const QString& text, QPalette::ColorRole textRole) const { @@ -577,30 +550,6 @@ void UBStyle::drawItemText(QPainter *painter, const QRect &rect, int alignment, painter->setPen(pen); } - /* - * -#if defined(Q_WS_MACX) - - if (pal.brush(textRole).color() == Qt::black) - { - painter->save(); - painter->translate(0, 0.1); - - QBrush brush = pal.brush(QPalette::Light); - QColor color = brush.color(); - color.setAlpha(color.alpha() * 0.6); - brush.setColor(color); - - painter->setPen(QPen(brush, savedPen.widthF() * 0.8)); - - painter->drawText(rect, alignment, text); - - painter->restore(); - } - -#endif - - */ painter->drawText(rect, alignment, text); if (textRole != QPalette::NoRole) diff --git a/src/gui/UBLibPathViewer.cpp b/src/gui/UBLibPathViewer.cpp index 341f673c..d7302433 100644 --- a/src/gui/UBLibPathViewer.cpp +++ b/src/gui/UBLibPathViewer.cpp @@ -172,20 +172,17 @@ void UBLibPathViewer::addItem(UBChainedLibElement *elem) */ void UBLibPathViewer::resizeEvent(QResizeEvent *event) { - qDebug() << "old" << event->oldSize(); - qDebug() << "new" << event->size(); - + if(event->oldSize() == event->size()) event->ignore(); else{ - if(NULL != mpContainer){ - mpContainer->setMinimumWidth(width() - 20); - } - - viewport()->resize(width() - 10, viewport()->height()); + if(NULL != mpContainer) + mpContainer->setMinimumWidth(width() - 20); + + viewport()->resize(width() - 10, viewport()->height()); - updateScrolls(); - event->accept(); + updateScrolls(); + event->accept(); } } @@ -422,8 +419,8 @@ void UBPathScene::dropEvent(QGraphicsSceneDragDropEvent *event) // The drag comes from this application, we have now to get the list of UBLibElements* QList qlDroppedElems; - foreach(QUrl url, pMimeData->urls()) - qlDroppedElems << url.toString(); + foreach(QUrl url, pMimeData->urls()) + qlDroppedElems << url.toString(); if(!qlDroppedElems.empty()) {