diff --git a/src/board/UBBoardPaletteManager.cpp b/src/board/UBBoardPaletteManager.cpp index f6501393..83b2f3a4 100644 --- a/src/board/UBBoardPaletteManager.cpp +++ b/src/board/UBBoardPaletteManager.cpp @@ -82,12 +82,8 @@ UBBoardPaletteManager::UBBoardPaletteManager(QWidget* container, UBBoardControll , mPendingPanButtonPressed(false) , mPendingEraseButtonPressed(false) , mpPageNavigWidget(NULL) -//#ifdef USE_WEB_WIDGET - , mpLibWidget(NULL) -//#endif , mpCachePropWidget(NULL) , mpDownloadWidget(NULL) - , mpDesktopLibWidget(NULL) , mpTeacherGuideWidget(NULL) , mDownloadInProgress(false) { @@ -100,18 +96,11 @@ UBBoardPaletteManager::~UBBoardPaletteManager() { delete mAddItemPalette; - if(NULL != mStylusPalette) { delete mStylusPalette; mStylusPalette = NULL; } - - if(NULL != mpDesktopLibWidget) - { - delete mpDesktopLibWidget; - mpDesktopLibWidget = NULL; - } } void UBBoardPaletteManager::initPalettesPosAtStartup() @@ -135,10 +124,6 @@ void UBBoardPaletteManager::setupDockPaletteWidgets() mpPageNavigWidget = new UBPageNavigationWidget(); -#ifdef USE_WEB_WIDGET - mpLibWidget = new UBLibWidget(); -#endif - mpCachePropWidget = new UBCachePropertiesWidget(); mpDownloadWidget = new UBDockDownloadWidget(); diff --git a/src/board/UBBoardPaletteManager.h b/src/board/UBBoardPaletteManager.h index 335b4bcd..73493caf 100644 --- a/src/board/UBBoardPaletteManager.h +++ b/src/board/UBBoardPaletteManager.h @@ -22,7 +22,6 @@ #include "gui/UBLeftPalette.h" #include "gui/UBRightPalette.h" #include "gui/UBPageNavigationWidget.h" -#include "gui/UBLibWidget.h" #include "gui/UBCachePropertiesWidget.h" #include "gui/UBDockDownloadWidget.h" #include "core/UBApplicationController.h" @@ -136,11 +135,6 @@ class UBBoardPaletteManager : public QObject /** The page navigator widget */ UBPageNavigationWidget* mpPageNavigWidget; -//#ifdef USE_WEB_WIDGET - /** The library widget */ - UBLibWidget* mpLibWidget; -//#endif - /** The cache properties widget */ UBCachePropertiesWidget* mpCachePropWidget; @@ -148,11 +142,6 @@ class UBBoardPaletteManager : public QObject /** The download widget */ UBDockDownloadWidget* mpDownloadWidget; - // HACK: here we duplicate the lib widget for the desktop mode - // we MUST refactor the architecture in order to use only one - // lib widget! - UBLibWidget* mpDesktopLibWidget; - UBDockTeacherGuideWidget* mpTeacherGuideWidget; bool mDownloadInProgress; diff --git a/src/board/UBLibraryController.cpp b/src/board/UBLibraryController.cpp deleted file mode 100644 index d9204ef0..00000000 --- a/src/board/UBLibraryController.cpp +++ /dev/null @@ -1,850 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include "UBLibraryController.h" - -#include "frameworks/UBFileSystemUtils.h" -#include "frameworks/UBPlatformUtils.h" - -#include "core/UBApplication.h" -#include "core/UBPersistenceManager.h" -#include "core/UBSettings.h" -#include "core/UBSetting.h" -#include "core/UBApplicationController.h" -#include "core/UBDownloadManager.h" - -#include "domain/UBGraphicsScene.h" -#include "domain/UBGraphicsSvgItem.h" -#include "domain/UBGraphicsPixmapItem.h" -#include "domain/UBGraphicsMediaItem.h" -#include "domain/UBGraphicsWidgetItem.h" - -#include "tools/UBToolsManager.h" - -#include "board/UBBoardView.h" - -#include "UBBoardController.h" - -#include "gui/UBThumbnailWidget.h" -#include "../core/UBSettings.h" - -#include "core/memcheck.h" - -static quint32 magicNumber = 0xACDCAFE0; -static QString favoriteVirtualPath = "$favorite$"; - -UBLibraryController::UBLibraryController(QWidget *pParentWidget) : - QObject(pParentWidget), - mParentWidget(pParentWidget), - mBoardController(UBApplication::boardController), - mLastItemOffsetIndex(0) -{ - readFavoriteList(); - - mAudioStandardDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userAudioDirectory()); - - mVideoStandardDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userVideoDirectory()); - - mPicturesStandardDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userImageDirectory()); - - mInteractiveUserDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userInteractiveDirectory()); - - mAnimationUserDirectoryPath = QUrl::fromLocalFile(UBSettings::settings()->userAnimationDirectory()); - - createInternalWidgetItems(); - -} - -bool UBLibraryController::canItemsOnElementBeDeleted(UBLibElement *pElement) -{ - return !pElement->path().toLocalFile().startsWith(UBSettings::settings()->applicationShapeLibraryDirectory()) && - !pElement->path().toLocalFile().startsWith(UBSettings::settings()->applicationInteractivesDirectory()) && - pElement->isDeletable(); -} - -void UBLibraryController::createInternalWidgetItems() -{ - QStringList toolUris = UBToolsManager::manager()->allToolIDs(); - - foreach(QString toolUri, toolUris) - { - UBToolsManager::UBToolDescriptor tool = UBToolsManager::manager()->toolByID(toolUri); - UBLibElement *newTool = new UBLibElement(eUBLibElementType_InteractiveItem, QUrl(tool.id), tool.label); - QImage toolImage = tool.icon.toImage(); - newTool->setThumbnail(toolImage); - newTool->setInformation(tool.label + " " + tool.version); - - mInternalLibElements << newTool; - } -} - -void UBLibraryController::createNewFolder(QString name, UBLibElement *parentElem) -{ - Q_ASSERT(parentElem); - Q_ASSERT(parentElem->type() == eUBLibElementType_Folder); - - QUrl qsPath = QUrl::fromLocalFile(parentElem->path().toLocalFile() + "/" + name); - createDirectory(qsPath); -} - -void UBLibraryController::createDirectory(QUrl& pDirPath) -{ - if(!QFileInfo(pDirPath.toLocalFile()).exists()) - QDir().mkpath(pDirPath.toLocalFile()); -} - - -QString UBLibraryController::getBaseDestinationForItem(QString& pItem) -{ - QString destination(""); - QString mimetype = UBFileSystemUtils::mimeTypeFromFileName(pItem); - - if(mimetype.contains("audio")) - destination = mAudioStandardDirectoryPath.toLocalFile(); - else if (mimetype.contains("video")) - destination = mVideoStandardDirectoryPath.toLocalFile(); - else if (mimetype.contains("image")) - destination = mPicturesStandardDirectoryPath.toLocalFile(); - else if (mimetype.contains("application")){ - if (mimetype.contains("x-shockwave-flash")) - destination = mAnimationUserDirectoryPath.toLocalFile(); - else - destination = mInteractiveUserDirectoryPath.toLocalFile(); - } - return destination; -} - -void UBLibraryController::routeDataItem(QString& pItem, QByteArray pData) -{ - QString fileName = QFileInfo(pItem).fileName(); - QString destination = getBaseDestinationForItem(pItem); - if(!destination.isEmpty()){ - QString destinationPath = UBFileSystemUtils::normalizeFilePath(QString("%0/%1").arg(destination).arg(fileName)); - QFile file(destinationPath); - if(file.open(QIODevice::WriteOnly)) { - file.write(pData); - file.close(); - } - } - else - qWarning() << "no destination found for pItem " << pItem; -} - -void UBLibraryController::routeItem(QString& pItem, QString pMiddleDirectory) -{ - QFileInfo itemToRoute(pItem); - QString destination = getBaseDestinationForItem(pItem); - - if(!destination.isEmpty()){ - if(!pMiddleDirectory.isEmpty()){ - destination = destination + "/" + pMiddleDirectory; - QUrl url = QUrl::fromLocalFile(destination); - createDirectory(url); - } - destination = UBFileSystemUtils::normalizeFilePath(destination + "/" + itemToRoute.fileName()); - - UBFileSystemUtils::copyFile(QUrl(pItem).toLocalFile(), destination, false); - } -} - -void UBLibraryController::importImageOnLibrary(QImage& pImage) -{ - if(!pImage.isNull()){ - QDateTime now = QDateTime::currentDateTime(); - QString filePath = mPicturesStandardDirectoryPath.toLocalFile() + "/" + tr("ImportedImage") + "-" + now.toString("dd-MM-yyyy hh-mm-ss") + ".png"; - filePath = UBFileSystemUtils::normalizeFilePath(filePath); - pImage.save(filePath); - UBApplication::showMessage(tr("Added 1 Image to Library")); - emit updateItemsList(); - } -} - -void UBLibraryController::importItemOnLibrary(QString& pItemString) -{ - pItemString.replace("\r",""); - pItemString.replace("\n",""); - - QFileInfo itemToImport(pItemString); - - bool isZip = false; - if(itemToImport.isDir() || (isZip = UBFileSystemUtils::isAZipFile(pItemString))){ - if(pItemString.contains(".wgt",Qt::CaseInsensitive) || pItemString.contains(".wdgt",Qt::CaseInsensitive)){ - QString destination = UBSettings::settings()->userInteractiveDirectory() + "/" + itemToImport.fileName(); - if(isZip) - UBFileSystemUtils::expandZipToDir(pItemString,destination); - else{ - if(pItemString.endsWith("/")) pItemString.chop(1); - UBFileSystemUtils::copyDir(pItemString, destination + QFileInfo(pItemString).fileName() + "/"); - } - return; - } - - QStringList allFiles = UBFileSystemUtils::allFiles(pItemString); - QString pathBeforeCurrentDir = pItemString; - pathBeforeCurrentDir.replace(UBFileSystemUtils::lastPathComponent(pathBeforeCurrentDir), ""); - if(pathBeforeCurrentDir.endsWith("//")) - pathBeforeCurrentDir.chop(1); - - foreach(QString eachFile, allFiles){ - QString intermediateDirectory = eachFile; - intermediateDirectory = intermediateDirectory.remove(pathBeforeCurrentDir); - intermediateDirectory = intermediateDirectory.remove(QFileInfo(eachFile).fileName()); - routeItem(eachFile,intermediateDirectory); - } - } - else{ - if(pItemString.startsWith("uniboardTool://") || pItemString.startsWith("file://") || pItemString.startsWith("/")) - { - // The user dropped a local file - routeItem(pItemString); - } - else - { - // The user dropped a file from the web. We must download it. - sDownloadFileDesc desc; - desc.currentSize = 0; - desc.id = 0; - desc.isBackground = false; - desc.modal = false; - desc.name = QFileInfo(pItemString).fileName(); - desc.totalSize = 0; - desc.url = pItemString; - UBDownloadManager::downloadManager()->addFileToDownload(desc); - } - } - -} - -QList UBLibraryController::rootCategoriesList() -{ - QList categories; - - UBLibElement* element = new UBLibElement(eUBLibElementType_Folder, mAudioStandardDirectoryPath, tr("Audios", "Audio category element")); - element->setThumbnail(QImage(":images/libpalette/AudiosCategory.svg")); - element->setMoveable(false); - categories << element; - - element = new UBLibElement(eUBLibElementType_Folder, mVideoStandardDirectoryPath, tr("Movies", "Movies category element")); - element->setThumbnail(QImage(":images/libpalette/MoviesCategory.svg")); - element->setMoveable(false); - categories << element; - - element = new UBLibElement(eUBLibElementType_Folder, mPicturesStandardDirectoryPath, tr("Pictures", "Pictures category element")); - element->setThumbnail(QImage(":images/libpalette/PicturesCategory.svg")); - element->setMoveable(false); - categories << element; - - QString path = UBSettings::settings()->applicationShapeLibraryDirectory(); - element = new UBLibElement(eUBLibElementType_Folder, QUrl::fromLocalFile(path), tr("Shapes", "Shapes category element")); - element->setThumbnail(QImage(":images/libpalette/ShapesCategory.svg")); - element->setMoveable(false); - categories << element; - - element = new UBLibElement(eUBLibElementType_Folder, mInteractiveUserDirectoryPath, tr("Applications", "Applications category element")); - element->setThumbnail(QImage(":images/libpalette/ApplicationsCategory.svg")); - element->setMoveable(false); - categories << element; - - element = new UBLibElement(eUBLibElementType_VirtualFolder, favoriteVirtualPath, tr("Favorite", "Favorite category element")); - element->setThumbnail(QImage(":images/libpalette/FavoritesCategory.svg")); - element->setMoveable(false); - categories << element; - - mInteractiveCategoryPath = QUrl::fromLocalFile(UBSettings::settings()->userGipLibraryDirectory()); - element = new UBLibElement(eUBLibElementType_Folder, mInteractiveCategoryPath, tr("Interactivities", "Interactives category element")); - element->setThumbnail(QImage(":images/libpalette/InteractivesCategory.svg")); - element->setMoveable(false); - categories << element; - - mSearchCategoryPath = QUrl::fromLocalFile(UBSettings::userSearchDirectory()); - element = new UBLibElement(eUBLibElementType_Folder, mSearchCategoryPath, tr("Web Search", "Web search category element")); - element->setThumbnail(QImage(":images/libpalette/WebSearchCategory.svg")); - element->setMoveable(false); - categories << element; - - element = new UBLibElement(eUBLibElementType_Folder, mAnimationUserDirectoryPath, tr("Animations", "Animations category element")); - element->setThumbnail(QImage(":images/libpalette/FlashCategory.svg")); - element->setMoveable(false); - categories << element; - - - - categories << UBLibElement::trashElement(); - - return categories; -} - -QImage UBLibraryController::createThumbnail(UBLibElement* pElement) -{ - QString thumbnailPath = UBFileSystemUtils::thumbnailPath(pElement->path().toLocalFile()); - QString mimetype = UBFileSystemUtils::mimeTypeFromFileName(pElement->path().toLocalFile()); - - if (mimetype.contains("audio")) - thumbnailPath = ":images/libpalette/soundIcon.svg"; - else if (mimetype.contains("video")) - thumbnailPath = ":images/libpalette/movieIcon.svg"; - else { - if (pElement->extension().startsWith("svg", Qt::CaseInsensitive) || pElement->extension().startsWith("svgz", Qt::CaseInsensitive)) { - thumbnailPath = pElement->path().toLocalFile(); - UBThumbnailSvg(pElement->path().toLocalFile()); - } - else { - QPixmap pix(pElement->path().toLocalFile()); - if (!pix.isNull()) { - pix = pix.scaledToWidth(qMin(UBSettings::maxThumbnailWidth, pix.width()), Qt::SmoothTransformation); - pix.save(thumbnailPath); - UBThumbnailPixmap pixmap(pix); - UBPlatformUtils::hideFile(thumbnailPath); - UBApplication::showMessage(tr("Creating image thumbnail for %1.").arg(pElement->name())); - } - else{ - thumbnailPath = ":images/libpalette/notFound.png"; - } - } - } - - return QImage(thumbnailPath); -} - -QImage UBLibraryController::thumbnailForFile(UBLibElement* pElement) -{ - if (pElement->path().toString().contains("uniboardTool://")){ - QImage image = QImage(UBToolsManager::manager()->iconFromToolId(pElement->path().toString())); - return image; - } - if (pElement->type() == eUBLibElementType_InteractiveItem){ - QImage image = QImage(UBGraphicsWidgetItem::iconFilePath(pElement->path())); - return image; - } - - QString thumbnailPath = UBFileSystemUtils::thumbnailPath(pElement->path().toLocalFile()); - - if (!thumbnailPath.length()) - qWarning() << "thumbnailForFile impossible to create thumbnail path for the element " + pElement->path().toLocalFile(); - - if (QFileInfo(thumbnailPath).exists()) - return QImage(thumbnailPath); - else - return createThumbnail(pElement); -} - -QList UBLibraryController::addVirtualElementsForItemPath(const QString& pPath) -{ - QList content; - if (pPath == mInteractiveUserDirectoryPath.toLocalFile()){ - content << listElementsInPath(UBSettings::settings()->applicationApplicationsLibraryDirectory()); - content << listElementsInPath(UBSettings::settings()->userInteractiveFavoritesDirectory()); - foreach(UBLibElement* eachElement, mInternalLibElements) - content << new UBLibElement(eachElement); - } - else if (pPath == mPicturesStandardDirectoryPath.toLocalFile()){ - QUrl path = QUrl::fromLocalFile(UBSettings::settings()->applicationImageLibraryDirectory()); - content << listElementsInPath(path.toLocalFile()); - } - else if (pPath == mInteractiveCategoryPath.toLocalFile()){ - content << listElementsInPath(UBSettings::settings()->applicationInteractivesDirectory()); - } - else if (pPath == mAudioStandardDirectoryPath.toLocalFile()){ - content << listElementsInPath(UBSettings::settings()->applicationAudiosLibraryDirectory()); - } - else if (pPath == mVideoStandardDirectoryPath.toLocalFile()){ - content << listElementsInPath(UBSettings::settings()->applicationVideosLibraryDirectory()); - } - else if (pPath == mAnimationUserDirectoryPath.toLocalFile()){ - content << listElementsInPath(UBSettings::settings()->applicationAnimationsLibraryDirectory()); - } - - return content; - -} - -QList UBLibraryController::listElementsInPath(const QString& pPath) -{ - QList content; - QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(pPath); - - QFileInfoList::iterator fileInfo; - for (fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end(); fileInfo += 1) { - eUBLibElementType fileType = fileInfo->isDir() ? eUBLibElementType_Folder : eUBLibElementType_Item; - - QString itemName = fileInfo->fileName(); - QString extension=""; - if (UBFileSystemUtils::mimeTypeFromFileName(itemName).contains("application")) { - fileType = eUBLibElementType_InteractiveItem; - itemName = fileInfo->baseName(); - extension = fileInfo->completeSuffix(); - } - - - UBLibElement *element = new UBLibElement(fileType, QUrl::fromLocalFile(fileInfo->absoluteFilePath()), itemName); - - if(!extension.isEmpty()) - element->setExtension(extension); - - if (fileType == eUBLibElementType_Folder) { - element->setThumbnail(QImage(":images/libpalette/folder.svg")); - } - else if (fileType == eUBLibElementType_Item) { - if (element->path().toLocalFile().contains(".thumbnail.")) - continue; - element->setThumbnail(thumbnailForFile(element)); - } - content << element; - } - content << addVirtualElementsForItemPath(pPath); - - return content; -} - - - -QList UBLibraryController::listElementsInVirtualForlder(UBLibElement* pElement) -{ - Q_UNUSED(pElement); - QList copyOfTheFavoriteList; - foreach(UBLibElement* eachElement, mFavoriteList) - copyOfTheFavoriteList << new UBLibElement(eachElement); - return copyOfTheFavoriteList; -} - -void UBLibraryController::moveContent(QList sourceList, UBLibElement *pDestination) -{ - if (pDestination->type() != eUBLibElementType_Folder) - qWarning() << "moveContent the destination element isn't a directory"; - - foreach (UBLibElement* eachSource, sourceList) { - if (!eachSource || pDestination->path().toLocalFile() == eachSource->path().toLocalFile() || eachSource->type() == eUBLibElementType_VirtualFolder) - continue; - - if (QFileInfo(eachSource->path().toLocalFile()).isDir()) - UBFileSystemUtils::moveDir(eachSource->path().toLocalFile(), pDestination->path().toLocalFile() + "/" + eachSource->name()); - else { - QFile(eachSource->path().toLocalFile()).copy(pDestination->path().toLocalFile() + "/" + eachSource->name() + "." + eachSource->extension()); - QFile::remove(eachSource->path().toLocalFile()); - QString thumbnailPath = UBFileSystemUtils::thumbnailPath(eachSource->path().toLocalFile()); - if (thumbnailPath.length() && QFileInfo(thumbnailPath).exists()) { - QString thumbnailFileName = UBFileSystemUtils::lastPathComponent(thumbnailPath); - QFile(thumbnailPath).copy(pDestination->path().toLocalFile() + "/" + thumbnailFileName); - QFile::remove(thumbnailPath); - } - } - } -} - -void UBLibraryController::trashElements(QList trashList) -{ - moveContent(trashList, UBLibElement::trashElement()); - removeFromFavorite(trashList); -} - -void UBLibraryController::emptyElementsOnTrash( QList elementsList) -{ - foreach(UBLibElement* eachElement, elementsList) { - if (QFileInfo(eachElement->path().toLocalFile()).isDir()) - UBFileSystemUtils::deleteDir(eachElement->path().toLocalFile()); - else - QFile::remove(eachElement->path().toLocalFile()); - } -} - -void UBLibraryController::cleanElementsList() -{ - qDeleteAll(mElementsList); - mElementsList.clear(); -} - -QList UBLibraryController::getContent(UBLibElement *element) -{ - cleanElementsList(); - - switch (element->type()) { - case eUBLibElementType_Category: { - mElementsList = rootCategoriesList(); - break; - } - case eUBLibElementType_VirtualFolder: { - mElementsList = listElementsInVirtualForlder(element); - break; - } - case eUBLibElementType_Folder: { - mElementsList = listElementsInPath(element->path().toLocalFile()); - break; - } - case eUBLibElementType_Item: { - qWarning() << "You are browsing a file"; - break; - } - default: - // We should never come here... - Q_ASSERT(false); - break; - } - - return mElementsList; -} - -UBLibraryController::~UBLibraryController() -{ - cleanElementsList(); - - qDeleteAll(mInternalLibElements); - mInternalLibElements.clear(); -} - -void UBLibraryController::setItemAsBackground(UBLibElement* image) -{ - if (!activeScene()){ - qDebug() << "No active scene"; - return; - } - QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(image->path().toLocalFile()); - - if(mimeType == "image/svg+xml"){ - QUrl url(QUrl::fromLocalFile(image->path().toLocalFile())); - QGraphicsSvgItem* boardItem = activeScene()->addSvg(url, QPointF(0, 0)); - activeScene()->setAsBackgroundObject(boardItem, true, true); - } - else{ - QPixmap pix(image->path().toLocalFile()); - UBGraphicsPixmapItem* boardItem = activeScene()->addPixmap(pix, activeScene()->backgroundObject(), QPointF(0, 0)); - activeScene()->setAsBackgroundObject(boardItem, true); - } -} - -void UBLibraryController::addItemToPage(UBLibElement* item) -{ - QList list; - list << QUrl::fromLocalFile(item->path().toLocalFile()); - QString mimeType = UBFileSystemUtils::mimeTypeFromFileName(item->path().toLocalFile()); - - if (mimeType.contains("image")){ - addImagesToCurrentPage(list); - } - else if (mimeType.contains("audio")){ - addAudiosToCurrentPage(list); - } - else if (mimeType.contains("video")){ - addVideosToCurrentPage(list); - } - else if (mimeType.contains("application")){ - addInteractivesToCurrentPage(list); - } - else if (mimeType.isEmpty() && item->type() == eUBLibElementType_InteractiveItem){ - // Those conditions allow us to detect internal app like - // mask, ruler, compass and protractor - list.clear(); - list << item->path().toString().replace("file:",""); - addInteractivesToCurrentPage(list); - } - else{ - UBApplication::showMessage(tr("Adding to page failed for item %1.").arg(item->name())); - } -} - -void UBLibraryController::removeBackground() -{ - if (activeScene()) - activeScene()->setAsBackgroundObject(0); - -} - -UBGraphicsScene* UBLibraryController::activeScene() -{ - if (mBoardController->selectedDocument()) - return mBoardController->activeScene(); - - return 0; -} - - -void UBLibraryController::persistFavoriteList() -{ - QFile file(UBSettings::userFavoriteListFilePath()); - file.open(QIODevice::WriteOnly); - QDataStream out(&file); - //magic number - out << magicNumber; - out << (quint32)mFavoriteList.count(); - foreach(UBLibElement* eachElement, mFavoriteList) - { - out << (quint32)eachElement->type(); - out << eachElement->path().toString(); - out << eachElement->information(); - out << eachElement->name(); - out << eachElement->extension(); - } - file.close(); -} - -void UBLibraryController::readFavoriteList() -{ - QFile file(UBSettings::userFavoriteListFilePath()); - file.open(QIODevice::ReadOnly); - QDataStream in(&file); // read the data serialized from the file - quint32 magicNumber; - quint32 numberOfElements; - - in >> magicNumber >> numberOfElements; - - for(quint32 i = 0; i < numberOfElements; i += 1){ - quint32 type; - QString path; - QString info; - QString name; - QString extension; - - in >> type >> path >> info >> name >> extension; - - UBLibElement* eachElement = new UBLibElement((eUBLibElementType)type, QUrl(path), name); - eachElement->setInformation(info); - eachElement->setExtension(extension); - eachElement->setThumbnail(thumbnailForFile(eachElement)); - if(!isOnFavoriteList(eachElement)) - mFavoriteList << eachElement; - } - - file.close(); - persistFavoriteList(); -} - -UBLibElement* UBLibraryController::isOnFavoriteList(UBLibElement * element) -{ - foreach(UBLibElement* eachElement, mFavoriteList) - if(eachElement->path() == element->path()) - return eachElement; - - return 0; -} -void UBLibraryController::addToFavorite(QList elementList) -{ - - foreach(UBLibElement* eachElement, elementList) - if(!isOnFavoriteList(eachElement)) - mFavoriteList << new UBLibElement(eachElement); - - persistFavoriteList(); -} - - -void UBLibraryController::removeFromFavorite(QList elementList) -{ - foreach(UBLibElement* eachElement, elementList){ - UBLibElement* elementToRemove = isOnFavoriteList(eachElement); - if(elementToRemove) - mFavoriteList.removeOne(elementToRemove); - } - - 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()); - - visibleSceneRect.setTopLeft(sceneTopLeft); - visibleSceneRect.setBottomRight(sceneBottomRight); - } - - return visibleSceneRect; -} - -void UBLibraryController::addImagesToCurrentPage(const QList& images) -{ - QPointF pos = UBApplication::boardController->activeScene()->normalizedSceneRect().center(); - - - foreach(const QUrl url, images) - { - mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5); - - QGraphicsItem* itemInScene = 0; - - if (activeScene()) { - QString mimeType = UBFileSystemUtils::mimeTypeFromFileName( - url.toString()); - - pos = QPointF(pos.x() + 50 * mLastItemOffsetIndex, pos.y() + 50 * mLastItemOffsetIndex); - mLastItemOffsetIndex++; - //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()), NULL, pos); - } - } - - if (itemInScene) { - itemInScene = activeScene()->scaleToFitDocumentSize(itemInScene, false, UBSettings::objectInControlViewMargin); - } - } -} - -void UBLibraryController::addVideosToCurrentPage(const QList& videos) -{ - QPointF pos = visibleSceneRect().topLeft(); - - foreach(const QUrl url, videos) - { - mLastItemOffsetIndex++; - mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5); - - UBGraphicsMediaItem* 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 centerPos = visibleSceneRect().center(); - - QPointF pos = centerPos; - - //move it a little higher for convenience - centerPos.setX(pos.x() - 200); - centerPos.setY(pos.y() - 100); - - foreach(const QUrl url, sounds) - { - mLastItemOffsetIndex++; - mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5); - pos = QPointF(centerPos.x() + 50 * mLastItemOffsetIndex, - centerPos.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)); -} - -QString UBLibraryController::favoritePath() -{ - return favoriteVirtualPath; -} - -UBLibElement::UBLibElement() { - mType = eUBLibElementType_Category; - mName = QObject::tr("/Home", "Category list label on navigation tool bar"); - mbMoveable = false; - mbDeletable = true; -} - -UBLibElement::UBLibElement(UBLibElement* element) -{ - mType = element->type(); - mPath = element->path(); - mThumbnail = *element->thumbnail(); - mInfo = element->information(); - mName = element->name(); - mExtension = element->extension(); - mbMoveable = element->isMoveable(); - mbDeletable = element->isDeletable(); -} - - -UBLibElement::UBLibElement(eUBLibElementType type, const QUrl &path, const QString &name) -{ - mType = type; - mPath = path; - mName = name; - mInfo = ""; - mbMoveable = true; - mbDeletable = true; - - if (type == eUBLibElementType_Folder) - mThumbnail = QImage(":images/libpalette/folder.svg"); - - if (type == eUBLibElementType_InteractiveItem) - mThumbnail = QImage(UBGraphicsWidgetItem::iconFilePath(path)); - - if (type == eUBLibElementType_Item) - mExtension = QFileInfo(path.toLocalFile()).completeSuffix(); - - if(type == eUBLibElementType_VirtualFolder || type == eUBLibElementType_Category) - mbMoveable = false; -} - -UBLibElement::~UBLibElement() -{ - //NOOP -} - -UBChainedLibElement::UBChainedLibElement(UBLibElement *pElem, UBChainedLibElement *pNextElem) -{ - mpElem = new UBLibElement(pElem); - mpNextElem = pNextElem; -} - -UBChainedLibElement::~UBChainedLibElement() -{ - if (NULL != mpNextElem) { - delete mpNextElem; - mpNextElem = NULL; - } - delete mpElem; -} - -void UBChainedLibElement::setNextElement(UBChainedLibElement *nextElem) -{ - mpNextElem = nextElem; -} - -UBChainedLibElement* UBChainedLibElement::lastElement() -{ - UBChainedLibElement* pElem = NULL; - - if(NULL != mpNextElem) - { - UBChainedLibElement* pLast = mpNextElem->lastElement(); - if(NULL != pLast) - { - pElem = pLast; - } - else - { - pElem = mpNextElem; - } - } - - return pElem; -} - -QUrl UBChainedLibElement::lastItemPath() -{ - return lastElement()->element()->path(); -} - -UBLibElement* UBLibElement::trashElement() -{ - UBLibElement *trashElement; - trashElement = new UBLibElement(eUBLibElementType_Folder, QUrl::fromLocalFile(UBSettings::userTrashDirPath()), QObject::tr("Trash", "Pictures category element")); - trashElement->setThumbnail(QImage(":images/libpalette/TrashCategory.svg")); - trashElement->setMoveable(false); - - return trashElement; -} - diff --git a/src/board/UBLibraryController.h b/src/board/UBLibraryController.h deleted file mode 100644 index 25e397c2..00000000 --- a/src/board/UBLibraryController.h +++ /dev/null @@ -1,185 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef UBLIBRARYCONTROLLER_H_ -#define UBLIBRARYCONTROLLER_H_ - -#include -#include - -#include "web/UBWebPage.h" - -class UBGraphicsScene; -class UBBoardController; -class QGraphicsSvgItem; -class UBLibraryWebView; -class UBWebView; - -typedef enum -{ - eUBLibElementType_Category = 0, - eUBLibElementType_VirtualFolder, - eUBLibElementType_Folder, - eUBLibElementType_InteractiveItem, - eUBLibElementType_Item -}eUBLibElementType; - - -class UBLibElement -{ - -public: - UBLibElement(); - UBLibElement(eUBLibElementType type, const QUrl& path, const QString& name); - UBLibElement(UBLibElement* element); - virtual ~UBLibElement(); - - static UBLibElement* trashElement(); - - eUBLibElementType type(){return mType;} - void setType(eUBLibElementType type) {mType = type;} - QUrl path(){return mPath;} - void setPath(QUrl path){mPath = path;} - QImage* thumbnail(){return &mThumbnail;} - void setThumbnail(QImage pThumb){mThumbnail = pThumb;} - QString information(){return mInfo;} - void setInformation(QString info){mInfo = info;} - QString name(){return mName;} - void setName(QString name){mName = name;} - QString extension(){return mExtension;} - void setExtension(QString &extension){ mExtension = extension;} - bool isMoveable(){return mbMoveable;} - void setMoveable(bool bState){mbMoveable = bState;} - bool isDeletable() const {return mbDeletable;} - void setDeletable(bool mState) {mbDeletable = mState;} - void setMetadata(QMap metadatas){mMetadata = metadatas;} - QMap metadatas(){return mMetadata;} - -private: - eUBLibElementType mType; - QUrl mPath; - QImage mThumbnail; - QString mInfo; - QString mName; - QString mExtension; - bool mbMoveable; - bool mbDeletable; - QMap mMetadata; -}; - -class UBChainedLibElement -{ -public: - UBChainedLibElement(UBLibElement* pElem, UBChainedLibElement* pNextElem=NULL); - virtual ~UBChainedLibElement(); - - UBChainedLibElement* nextElement(){return mpNextElem;} - UBChainedLibElement* lastElement(); - void setNextElement(UBChainedLibElement* nextElem); - UBLibElement* element(){return mpElem;} - QUrl lastItemPath(); - -private: - UBLibElement* mpElem; - UBChainedLibElement* mpNextElem; -}; - -class UBLibraryController : public QObject -{ - Q_OBJECT; - - public: - UBLibraryController(QWidget *parentWidget); - virtual ~UBLibraryController(); - - QList getContent(UBLibElement* pElement); - void moveContent(QList sourceList, UBLibElement *pDestination); - void trashElements(QList trashList); - void emptyElementsOnTrash(QList elementsList); - - void addNativeToolToFavorites(const QUrl& url); - - void setItemAsBackground(UBLibElement* image); - void addItemToPage(UBLibElement* item); - - void addToFavorite(QList elementList); - void removeFromFavorite(QList elementList); - - void importItemOnLibrary(QString& pItemString); - void importImageOnLibrary(QImage &pImage); - - QString favoritePath(); - - void createNewFolder(QString name, UBLibElement* parentElem); - bool canItemsOnElementBeDeleted(UBLibElement *pElement); - - void routeItem(QString& pItem, QString pMiddleDirectory = QString()); - void routeDataItem(QString& pItem, QByteArray pData); - - signals: - void dialogClosed(int state); - void setResource(QString &pathResource,QString &mimetype); - void updateItemsList(); - - public slots: - void removeBackground(); - void addImagesToCurrentPage(const QList& images); - void addVideosToCurrentPage(const QList& videos); - void addAudiosToCurrentPage(const QList& sounds); - void addInteractivesToCurrentPage(const QList& interactiveWidgets); - - protected: - - UBGraphicsScene* activeScene(); - QRectF visibleSceneRect(); - QList mFavoriteList; - void persistFavoriteList(); - void readFavoriteList(); - QList mInternalLibElements; - QList mElementsList; - void cleanElementsList(); - - private: - QList rootCategoriesList(); - QList listElementsInPath(const QString& pPath); - QList listElementsInVirtualForlder(UBLibElement* pElement); - void userPath(QUrl &pPath); - QImage thumbnailForFile(UBLibElement* pPath); - QImage createThumbnail(UBLibElement* pPath); - QList addVirtualElementsForItemPath(const QString& pPath); - - void createInternalWidgetItems(); - void createDirectory(QUrl& pDirPath); - - QUrl mAudioStandardDirectoryPath; - QUrl mVideoStandardDirectoryPath; - QUrl mPicturesStandardDirectoryPath; - QUrl mInteractiveUserDirectoryPath; - QUrl mInteractiveCategoryPath; - QUrl mAnimationUserDirectoryPath; - QUrl mSearchCategoryPath; - - QStringList addItemsToCurrentLibrary(const QDir& pSelectedFolder, const QStringList& pExtensions); - - UBLibElement* isOnFavoriteList(UBLibElement * element); - - QWidget *mParentWidget; - UBBoardController *mBoardController; - - int mLastItemOffsetIndex; - QString getBaseDestinationForItem(QString& pItem); - -}; - -#endif /* UBLIBRARYCONTROLLER_H_ */ diff --git a/src/board/board.pri b/src/board/board.pri index 1208db87..c8d421e4 100644 --- a/src/board/board.pri +++ b/src/board/board.pri @@ -2,14 +2,12 @@ HEADERS += src/board/UBBoardController.h \ src/board/UBBoardPaletteManager.h \ src/board/UBBoardView.h \ - src/board/UBLibraryController.h \ src/board/UBDrawingController.h \ src/board/UBFeaturesController.h SOURCES += src/board/UBBoardController.cpp \ src/board/UBBoardPaletteManager.cpp \ src/board/UBBoardView.cpp \ - src/board/UBLibraryController.cpp \ src/board/UBDrawingController.cpp \ src/board/UBFeaturesController.cpp diff --git a/src/gui/UBFeaturesActionBar.cpp b/src/gui/UBFeaturesActionBar.cpp index 65ee920f..57e90ddf 100644 --- a/src/gui/UBFeaturesActionBar.cpp +++ b/src/gui/UBFeaturesActionBar.cpp @@ -271,3 +271,28 @@ void UBFeaturesActionBar::dropEvent(QDropEvent *event) UBFeaturesActionBar::~UBFeaturesActionBar() { } + +/** + * \brief Construtor + * @param parent as the parent widget + * @param action as the related action + * @param name as the related object name + */ +UBActionButton::UBActionButton(QWidget *parent, QAction* action, const char *name):QToolButton(parent) +{ + setObjectName(name); + addAction(action); + setDefaultAction(action); + setIconSize(QSize(BUTTON_SIZE, BUTTON_SIZE)); + setToolButtonStyle(Qt::ToolButtonIconOnly); + setStyleSheet(QString("QToolButton {color: white; font-weight: bold; font-family: Arial; background-color: transparent; border: none}")); + setFocusPolicy(Qt::NoFocus); +} + +/** + * \brief Destructor + */ +UBActionButton::~UBActionButton() +{ + +} diff --git a/src/gui/UBFeaturesActionBar.h b/src/gui/UBFeaturesActionBar.h index b3a406e6..60db2c37 100644 --- a/src/gui/UBFeaturesActionBar.h +++ b/src/gui/UBFeaturesActionBar.h @@ -4,11 +4,27 @@ #include #include #include -#include "UBLibActionBar.h" #include "board/UBFeaturesController.h" +#define BUTTON_SIZE 24 +#define ACTIONBAR_HEIGHT 42 + class UBFeaturesMimeData; +typedef enum +{ + eButtonSet_Default, + eButtonSet_Properties, + eButtonSet_Favorite +} eButtonSet; + +class UBActionButton : public QToolButton +{ +public: + UBActionButton(QWidget* parent=0, QAction* action=0, const char* name="UBActionButton"); + ~UBActionButton(); +}; + enum UBFeaturesActionBarState { IN_ROOT, diff --git a/src/gui/UBFeaturesWidget.cpp b/src/gui/UBFeaturesWidget.cpp index 74b0600e..1ed79316 100644 --- a/src/gui/UBFeaturesWidget.cpp +++ b/src/gui/UBFeaturesWidget.cpp @@ -1,4 +1,6 @@ #include +#include + #include "UBFeaturesWidget.h" #include "gui/UBThumbnailWidget.h" #include "frameworks/UBFileSystemUtils.h" @@ -6,7 +8,6 @@ #include "core/UBDownloadManager.h" #include "globals/UBGlobals.h" #include "board/UBBoardController.h" -#include "globals/UBGlobals.h" const char *UBFeaturesWidget::objNamePathList = "PathList"; const char *UBFeaturesWidget::objNameFeatureList = "FeatureList"; @@ -23,8 +24,6 @@ static const QString mimeSankoreFeatureTypes = "Sankore/featureTypes"; UBFeaturesWidget::UBFeaturesWidget(QWidget *parent, const char *name) : UBDockPaletteWidget(parent) , imageGatherer(NULL) - , mkFolderDlg(NULL) - { setObjectName(name); mName = "FeaturesWidget"; @@ -151,12 +150,6 @@ void UBFeaturesWidget::createNewFolder() emit sendFileNameList(controller->getFileNamesInFolders()); } -void UBFeaturesWidget::addFolder() -{ - if (mkFolderDlg) - controller->addNewFolder(mkFolderDlg->folderName()); -} - void UBFeaturesWidget::deleteElements( const UBFeaturesMimeData * mimeData ) { if (!mimeData->features().count() ) @@ -335,16 +328,6 @@ void UBFeaturesWidget::removeElementsFromFavorite() controller->refreshModels(); } -void UBFeaturesWidget::resizeEvent(QResizeEvent *event) -{ - UBDockPaletteWidget::resizeEvent(event); - if (mkFolderDlg) - { - mkFolderDlg->resize(this->size().width()-20 ,80); - mkFolderDlg->move(5,this->size().height()-200); - } -} - void UBFeaturesWidget::switchToListView() { // stackedWidget->setCurrentIndex(ID_LISTVIEW); diff --git a/src/gui/UBFeaturesWidget.h b/src/gui/UBFeaturesWidget.h index fda210cc..a86f6697 100644 --- a/src/gui/UBFeaturesWidget.h +++ b/src/gui/UBFeaturesWidget.h @@ -21,7 +21,9 @@ #include "api/UBWidgetUniboardAPI.h" #include "UBFeaturesActionBar.h" #include "UBRubberBand.h" -#include "gui/UBLibraryWidget.h" +#include +#include +#include #define THUMBNAIL_WIDTH 400 #define ID_LISTVIEW 0 @@ -81,7 +83,6 @@ private slots: void currentSelected( const QModelIndex & ); void searchStarted( const QString & ); void createNewFolder(); - void addFolder(); void deleteElements( const UBFeaturesMimeData * ); void addToFavorite( const UBFeaturesMimeData *); void removeFromFavorite( const UBFeaturesMimeData * ); @@ -94,7 +95,6 @@ private slots: void lockIt(bool pLock); private: - void resizeEvent(QResizeEvent *event); void switchToListView(); void switchToProperties(); void switchToWebView(); @@ -105,7 +105,6 @@ private: QVBoxLayout *layout; UBFeaturesActionBar *mActionBar; UBDownloadHttpFile* imageGatherer; - UBNewFolderDlg *mkFolderDlg; UBFeaturesCentralWidget *centralWidget; }; @@ -220,9 +219,6 @@ private slots: void scanStarted(); void scanFinished(); - -private: - }; class UBFeaturesNewFolderDialog : public QWidget diff --git a/src/gui/UBLibActionBar.cpp b/src/gui/UBLibActionBar.cpp deleted file mode 100644 index f17ed45c..00000000 --- a/src/gui/UBLibActionBar.cpp +++ /dev/null @@ -1,534 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include -#include -#include - -#include "UBLibWidget.h" -#include "UBLibActionBar.h" -#include "core/UBApplication.h" - -#include "core/memcheck.h" - -/** - * \brief Constructor - * @param parent as the parent widget - * @param name as the object name - */ -UBLibActionBar::UBLibActionBar(QWidget *parent, const char *name):QWidget(parent) - , mCrntButtonSet(eButtonSet_Default) - , mPreviousButtonSet(eButtonSet_Default) - , mButtonGroup(NULL) - , mSearchBar(NULL) - , mLayout(NULL) - , mpFavoriteAction(NULL) - , mpSocialAction(NULL) - , mpDeleteAction(NULL) - , mpSearchAction(NULL) - , mpCloseAction(NULL) - , mpRemoveFavorite(NULL) - , mpNewFolderAction(NULL) - , mpFavoriteBtn(NULL) - , mpSocialBtn(NULL) - , mpDeleteBtn(NULL) - , mpSearchBtn(NULL) - , mpCloseBtn(NULL) - , mpRemoveFavoriteBtn(NULL) - , mpNewFolderBtn(NULL) - , bFavorite(false) - , bIsInTrash(false) -{ - setObjectName(name); - setStyleSheet(QString("background: #EEEEEE; border-radius : 10px; border : 2px solid #999999;")); - - setAcceptDrops(true); - - mButtonGroup = new QButtonGroup(this); - mSearchBar = new QLineEdit(this); - mSearchBar->setStyleSheet(QString("background-color:white; border-radius : 10px; padding : 2px;")); - connect(mSearchBar, SIGNAL(returnPressed()), this, SLOT(onActionSearch())); - - mLayout = new QHBoxLayout(); - setLayout(mLayout); - - setMaximumHeight(ACTIONBAR_HEIGHT); - - // Create the actions - mpFavoriteAction = new QAction(QIcon(":/images/libpalette/miniFavorite.png"), tr("Add to favorites"), this); - mpSocialAction = new QAction(QIcon(":/images/libpalette/social.png"), tr("Share"), this); - mpSearchAction = new QAction(QIcon(":/images/libpalette/miniSearch.png"), tr("Search"), this); - mpDeleteAction = new QAction(QIcon(":/images/libpalette/miniTrash.png"), tr("Delete"), this); - mpCloseAction = new QAction(QIcon(":/images/close.svg"), tr("Back to folder"), this); - mpRemoveFavorite = new QAction(QIcon(":/images/libpalette/trash_favorite.svg"), tr("Remove from favorites"), this); - mpNewFolderAction = new QAction(QIcon(":/images/libpalette/miniNewFolder.png"), tr("Create new folder"), this); - - // Create the buttons - mpFavoriteBtn = new UBActionButton(this, mpFavoriteAction); - mpSocialBtn = new UBActionButton(this, mpSocialAction); - mpSearchBtn = new UBActionButton(this, mpSearchAction); - mpDeleteBtn = new UBActionButton(this, mpDeleteAction); - mpCloseBtn = new UBActionButton(this, mpCloseAction); - mpRemoveFavoriteBtn = new UBActionButton(this, mpRemoveFavorite); - mpNewFolderBtn = new UBActionButton(this, mpNewFolderAction); - - // Initialize the buttons - mpSearchBtn->setEnabled(false); - mpNewFolderBtn->setEnabled(false); - - // Add the buttons to the button group - mButtonGroup->addButton(mpFavoriteBtn); - mButtonGroup->addButton(mpSocialBtn); - mButtonGroup->addButton(mpSearchBtn); - mButtonGroup->addButton(mpDeleteBtn); - mButtonGroup->addButton(mpCloseBtn); - mButtonGroup->addButton(mpRemoveFavoriteBtn); - mButtonGroup->addButton(mpNewFolderBtn); - // Connect signals & slots - connect(mpFavoriteAction,SIGNAL(triggered()), this, SLOT(onActionFavorite())); - connect(mpSocialAction,SIGNAL(triggered()), this, SLOT(onActionSocial())); - connect(mpSearchAction,SIGNAL(triggered()), this, SLOT(onActionSearch())); - connect(mpDeleteAction,SIGNAL(triggered()), this, SLOT(onActionTrash())); - connect(mpCloseAction, SIGNAL(triggered()), this, SLOT(onActionClose())); - connect(mpRemoveFavorite, SIGNAL(triggered()), this, SLOT(onActionRemoveFavorite())); - connect(mSearchBar, SIGNAL(textChanged(QString)), this, SLOT(onSearchTextChanged(QString))); - connect(mpNewFolderAction, SIGNAL(triggered()), this, SLOT(onActionNewFolder())); - - // Build the default toolbar - mLayout->addWidget(mpFavoriteBtn); - mLayout->addWidget(mpSocialBtn); - mLayout->addWidget(mpNewFolderBtn); - mLayout->addWidget(mSearchBar); - mLayout->addWidget(mpSearchBtn); - mLayout->addWidget(mpDeleteBtn); - mLayout->addWidget(mpCloseBtn); - mLayout->addWidget(mpRemoveFavoriteBtn); - - setButtons(eButtonSet_Default); -} - -/** - * \brief Destructor - */ -UBLibActionBar::~UBLibActionBar() -{ - if(NULL != mpNewFolderAction) - { - delete mpNewFolderAction; - mpNewFolderAction = NULL; - } - if(NULL != mpNewFolderBtn) - { - delete mpNewFolderBtn; - mpNewFolderBtn = NULL; - } - if(NULL != mpRemoveFavorite) - { - delete mpRemoveFavorite; - mpRemoveFavorite = NULL; - } - if(NULL != mpRemoveFavoriteBtn) - { - delete mpRemoveFavoriteBtn; - mpRemoveFavoriteBtn = NULL; - } - if(NULL != mpCloseAction) - { - delete mpCloseAction; - mpCloseAction = NULL; - } - if(NULL != mpDeleteAction) - { - delete mpDeleteAction; - mpDeleteAction = NULL; - } - if(NULL != mpFavoriteAction) - { - delete mpFavoriteAction; - mpFavoriteAction = NULL; - } - if(NULL != mpSearchAction) - { - delete mpSearchAction; - mpSearchAction = NULL; - } - if(NULL != mpSocialAction) - { - delete mpSocialAction; - mpSocialAction = NULL; - } - if(NULL != mpCloseBtn) - { - delete mpCloseBtn; - mpCloseBtn = NULL; - } - if(NULL != mpDeleteBtn) - { - delete mpDeleteBtn; - mpDeleteBtn = NULL; - } - if(NULL != mpFavoriteBtn) - { - delete mpFavoriteBtn; - mpFavoriteBtn = NULL; - } - if(NULL != mpSearchBtn) - { - delete mpSearchBtn; - mpSearchBtn = NULL; - } - if(NULL != mpSocialBtn) - { - delete mpSocialBtn; - mpSocialBtn = NULL; - } - if(NULL != mButtonGroup) - { - delete mButtonGroup; - mButtonGroup = NULL; - } - if(NULL != mSearchBar) - { - delete mSearchBar; - mSearchBar = NULL; - } - if(NULL != mLayout) - { - delete mLayout; - mLayout = NULL; - } -} - -/** - * \brief Set the buttons of the action bar - * @param setID as the button set - */ -void UBLibActionBar::setButtons(eButtonSet setID) -{ - mPreviousButtonSet = mCrntButtonSet; - mCrntButtonSet = setID; - switch(setID) - { - case eButtonSet_Default: - mpFavoriteBtn->show(); - mpSocialBtn->hide(); - mSearchBar->show(); - mpSearchBtn->show(); - mpDeleteBtn->show(); - mpCloseBtn->hide(); - mpRemoveFavoriteBtn->hide(); - mpNewFolderBtn->show(); - break; - case eButtonSet_Properties: - mpFavoriteBtn->show(); - mpSocialBtn->hide(); - mSearchBar->show(); - mpSearchBtn->show(); - mpDeleteBtn->hide(); - mpCloseBtn->hide(); - mpRemoveFavoriteBtn->hide(); - mpNewFolderBtn->hide(); - break; - case eButtonSet_Favorite: - mpFavoriteBtn->hide(); - mpSocialBtn->hide(); - mSearchBar->show(); - mpSearchBtn->show(); - mpDeleteBtn->hide(); - mpCloseBtn->hide(); - mpRemoveFavoriteBtn->show(); - mpNewFolderBtn->hide(); - break; - default: - break; - } -} - -/** - * \brief (un)set the selected element to favorite - */ -void UBLibActionBar::onActionFavorite() -{ - mpFavoriteBtn->setIcon(QIcon(":/images/libpalette/miniFavorite.png")); - libraryController()->addToFavorite(mSelectedElements); -} - -/** - * \brief Handle the mouse enter event - * @param event as the event - */ -void UBLibActionBar::enterEvent(QEvent *event) -{ - Q_UNUSED(event); - setCursor(Qt::ArrowCursor); -} - -/** - * \brief Handle the mouse leave event - * @param event as the event - */ -void UBLibActionBar::leaveEvent(QEvent *event) -{ - Q_UNUSED(event); - unsetCursor(); -} - -/** - * \brief Perform the search - */ -void UBLibActionBar::onActionSearch() -{ - emit searchElement(mSearchBar->text()); -} - -/** - * \brief Trigger the social action - */ -void UBLibActionBar::onActionSocial() -{ - // To be implemented -} - -/** - * \brief Handles the close action - */ -void UBLibActionBar::onActionClose() -{ - emit showFolderContent(); -} - -/** - * \brief Delete the selected element - */ -void UBLibActionBar::onActionTrash() -{ - if(!bIsInTrash) - { - libraryController()->trashElements(mSelectedElements); - } - else - { - libraryController()->emptyElementsOnTrash(mSelectedElements); - } - emit deleteDone(); -} - -/** - * \brief Remove the selected favorite(s) - */ -void UBLibActionBar::onActionRemoveFavorite() -{ - libraryController()->removeFromFavorite(mSelectedElements); - emit deleteDone(); -} - -/** - * \brief Handles the selection change event - * @param itemList as the list of selected items - * @param isInTrash indicates if the current folder is the trash - */ -void UBLibActionBar::onSelectionChanged(QList itemList, bool isInTrash) -{ - bIsInTrash = isInTrash; - mSelectedElements = itemList; - bool bEnable = (itemList.count() != 0) ? true : false; - - if(mCrntButtonSet == eButtonSet_Favorite) - { - mpRemoveFavoriteBtn->setEnabled(bEnable); - return; - } - - mpFavoriteAction->setEnabled(bEnable); - mpSocialAction->setEnabled(bEnable); - mpDeleteAction->setEnabled(bEnable && libraryController()->canItemsOnElementBeDeleted(itemList.at(0))); -} - -/** - * \brief Get the library controller - * @return a pointer on the library controller - */ -UBLibraryController* UBLibActionBar::libraryController() -{ - UBLibWidget* libWidget = dynamic_cast(parentWidget()); - return libWidget->libNavigator()->libraryWidget()->libraryController(); -} - -/** - * \brief Show the actions related to the Favorites folder - */ -void UBLibActionBar::onFavoritesEntered(bool bFav) -{ - setButtons(bFav ? eButtonSet_Favorite : eButtonSet_Default); -} - -/** - * \brief Handles the drag enter event - * @param event as the drag enter event - */ -void UBLibActionBar::dragEnterEvent(QDragEnterEvent *event) -{ - event->acceptProposedAction(); -} - -/** - * \brief Handles the drag move event - * @param event as the drag move event - */ -void UBLibActionBar::dragMoveEvent(QDragMoveEvent *event) -{ - event->acceptProposedAction(); -} - -/** - * \brief Handles the drop event - * @param event as the given drop event - */ -void UBLibActionBar::dropEvent(QDropEvent *event) -{ - const QPoint droppedPoint = event->pos(); - - - QWidget* pTargetW = widgetAtPos(droppedPoint); - if(NULL != pTargetW) - { - if(mpFavoriteBtn == pTargetW) - { - onActionFavorite(); - } - else if(mpRemoveFavoriteBtn == pTargetW) - { - onActionRemoveFavorite(); - } - else if(mpDeleteBtn == pTargetW) - { - if(mpDeleteBtn->isEnabled()) - { - onActionTrash(); - } - } - else if(mpSocialBtn == pTargetW) - { - onActionSocial(); - } - } - event->acceptProposedAction(); -} - -/** - * \brief Get the widget at the given position - * @param p as the given position - * @return a pointer on the related QWidget - */ -QWidget* UBLibActionBar::widgetAtPos(const QPoint p) -{ - Q_ASSERT(mpDeleteBtn != NULL); - Q_ASSERT(mpFavoriteBtn != NULL); - Q_ASSERT(mpRemoveFavoriteBtn != NULL); - Q_ASSERT(mpSocialBtn != NULL); - - QList qlBttns; - qlBttns << mpFavoriteBtn; - qlBttns << mpDeleteBtn; - qlBttns << mpRemoveFavoriteBtn; - qlBttns << mpSocialBtn; - - foreach(UBActionButton* bt, qlBttns) - { - if(bt->pos().x() <= p.x() && - bt->pos().x() + bt->rect().width() >= p.x() && - bt->pos().y() <= p.y() && - bt->pos().y() + bt->rect().height() >= p.y()) - { - if(bt->isVisible()) - { - return bt; - } - } - } - - // No interesting button has been found - return NULL; -} - -/** - * \brief Handles the text changed event of the search bar - */ -void UBLibActionBar::onSearchTextChanged(QString txt) -{ - Q_UNUSED(txt); - onActionSearch(); -} - -/** - * \brief Add a new folder - */ -void UBLibActionBar::onActionNewFolder() -{ - emit newFolderToCreate(); -} - -/** - * \brief Update the action bar elements - * @param crntElem as the current element - */ -void UBLibActionBar::onNavigbarUpdate(UBLibElement *crntElem) -{ - if(NULL != crntElem) - { - if(crntElem->type() == eUBLibElementType_Folder) - { - if(libraryController()->canItemsOnElementBeDeleted(crntElem) && !bIsInTrash) - mpNewFolderBtn->setEnabled(true); - else - mpNewFolderBtn->setEnabled(false); - } - else - { - mpNewFolderBtn->setEnabled(false); - } - } -} - - -void UBLibActionBar::onItemChanged() -{ - mSearchBar->setText(""); - mpSearchBtn->setEnabled(false); -} - -/** - * \brief Construtor - * @param parent as the parent widget - * @param action as the related action - * @param name as the related object name - */ -UBActionButton::UBActionButton(QWidget *parent, QAction* action, const char *name):QToolButton(parent) -{ - setObjectName(name); - addAction(action); - setDefaultAction(action); - setIconSize(QSize(BUTTON_SIZE, BUTTON_SIZE)); - setToolButtonStyle(Qt::ToolButtonIconOnly); - setStyleSheet(QString("QToolButton {color: white; font-weight: bold; font-family: Arial; background-color: transparent; border: none}")); - setFocusPolicy(Qt::NoFocus); -} - -/** - * \brief Destructor - */ -UBActionButton::~UBActionButton() -{ - -} diff --git a/src/gui/UBLibActionBar.h b/src/gui/UBLibActionBar.h deleted file mode 100644 index 52b7576f..00000000 --- a/src/gui/UBLibActionBar.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef UBLIBACTIONBAR_H -#define UBLIBACTIONBAR_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "board/UBLibraryController.h" - -#define BUTTON_SIZE 24 -#define ACTIONBAR_HEIGHT 42 - -typedef enum -{ - eButtonSet_Default, - eButtonSet_Properties, - eButtonSet_Favorite -} eButtonSet; - -class UBActionButton : public QToolButton -{ -public: - UBActionButton(QWidget* parent=0, QAction* action=0, const char* name="UBActionButton"); - ~UBActionButton(); -}; - -class UBLibActionBar : public QWidget -{ - Q_OBJECT -public: - UBLibActionBar(QWidget* parent=0, const char* name="UBLibActionBar"); - ~UBLibActionBar(); - - void setButtons(eButtonSet setID); - eButtonSet previousButtonSet(){return mPreviousButtonSet;} - -signals: - void deleteDone(); - void showFolderContent(); - void searchElement(QString text); - void newFolderToCreate(); - -public slots: - void onSelectionChanged(QList itemList, bool isInTrash); - void onFavoritesEntered(bool bFav); - void onNavigbarUpdate(UBLibElement* crntElem); - void onItemChanged(); - -protected: - void enterEvent(QEvent *event); - void leaveEvent(QEvent *event); - void dragEnterEvent(QDragEnterEvent *event); - void dragMoveEvent(QDragMoveEvent *event); - void dropEvent(QDropEvent *event); - -private slots: - void onActionFavorite(); - void onActionSocial(); - void onActionSearch(); - void onActionTrash(); - void onActionClose(); - void onActionRemoveFavorite(); - void onSearchTextChanged(QString txt); - void onActionNewFolder(); - -private: - QWidget* widgetAtPos(const QPoint p); - UBLibraryController* libraryController(); - - eButtonSet mCrntButtonSet; - eButtonSet mPreviousButtonSet; - QButtonGroup* mButtonGroup; - QList mSelectedElements; - QLineEdit* mSearchBar; - QHBoxLayout* mLayout; - QAction* mpFavoriteAction; - QAction* mpSocialAction; - QAction* mpDeleteAction; - QAction* mpSearchAction; - QAction* mpCloseAction; - QAction* mpRemoveFavorite; - QAction* mpNewFolderAction; - UBActionButton* mpFavoriteBtn; - UBActionButton* mpSocialBtn; - UBActionButton* mpDeleteBtn; - UBActionButton* mpSearchBtn; - UBActionButton* mpCloseBtn; - UBActionButton* mpRemoveFavoriteBtn; - UBActionButton* mpNewFolderBtn; - - // This flag will be removed after the test, normally we should ask - // the selected item if it is in favorite or not - bool bFavorite; - bool bIsInTrash; - -}; - -#endif // UBLIBACTIONBAR_H diff --git a/src/gui/UBLibItemProperties.cpp b/src/gui/UBLibItemProperties.cpp deleted file mode 100644 index 4d506611..00000000 --- a/src/gui/UBLibItemProperties.cpp +++ /dev/null @@ -1,321 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "UBLibWidget.h" -#include "UBLibItemProperties.h" - -#include "core/UBApplication.h" -#include "core/UBDownloadManager.h" - -#include "frameworks/UBFileSystemUtils.h" - -#include "globals/UBGlobals.h" - -#include "core/memcheck.h" - - -/** - * \brief Constructor - * @param parent as the parent widget - * @param name as the object name - */ -UBLibItemProperties::UBLibItemProperties(QWidget *parent, const char *name):QWidget(parent) - , mpLayout(NULL) - , mpButtonLayout(NULL) - , mpAddPageButton(NULL) - , mpAddToLibButton(NULL) - , mpSetAsBackgroundButton(NULL) - , mpObjInfoLabel(NULL) - , mpObjInfos(NULL) - , mpThumbnail(NULL) - , mpOrigPixmap(NULL) - , mpElement(NULL) - , mpItem(NULL) -{ - setObjectName(name); - - SET_STYLE_SHEET(); - - // Create the GUI - mpLayout = new QVBoxLayout(this); - setLayout(mpLayout); - - maxThumbHeight = height() / 4; - - mpThumbnail = new QLabel(); - QPixmap icon(":images/libpalette/notFound.png"); - icon.scaledToWidth(THUMBNAIL_WIDTH); - - mpThumbnail->setPixmap(icon); - mpThumbnail->setObjectName("DockPaletteWidgetBox"); - mpThumbnail->setStyleSheet("background:white;"); - mpThumbnail->setAlignment(Qt::AlignHCenter); - mpLayout->addWidget(mpThumbnail, 0); - - mpButtonLayout = new QHBoxLayout(); - mpLayout->addLayout(mpButtonLayout, 0); - - mpAddPageButton = new UBLibItemButton(); - mpAddPageButton->setText(tr("Add to page")); - mpButtonLayout->addWidget(mpAddPageButton); - - mpSetAsBackgroundButton = new UBLibItemButton(); - mpSetAsBackgroundButton->setText(tr("Set as background")); - mpButtonLayout->addWidget(mpSetAsBackgroundButton); - - mpAddToLibButton = new UBLibItemButton(); - mpAddToLibButton->setText(tr("Add to library")); - mpButtonLayout->addWidget(mpAddToLibButton); - - mpButtonLayout->addStretch(1); - - mpObjInfoLabel = new QLabel(tr("Object informations")); - mpObjInfoLabel->setStyleSheet(QString("color: #888888; font-size : 18px; font-weight:bold;")); - mpLayout->addWidget(mpObjInfoLabel, 0); - - mpObjInfos = new QTreeWidget(this); - mpObjInfos->setColumnCount(2); - mpObjInfos->header()->hide(); - mpObjInfos->setAlternatingRowColors(true); - mpObjInfos->setRootIsDecorated(false); - mpObjInfos->setObjectName("DockPaletteWidgetBox"); - mpObjInfos->setStyleSheet("background:white;"); - mpLayout->addWidget(mpObjInfos, 1); - - connect(mpAddPageButton, SIGNAL(clicked()), this, SLOT(onAddToPage())); - connect(mpSetAsBackgroundButton, SIGNAL(clicked()), this, SLOT(onSetAsBackground())); - connect(mpAddToLibButton, SIGNAL(clicked()), this, SLOT(onAddToLib())); - -} - -/** - * \brief Destructor - */ -UBLibItemProperties::~UBLibItemProperties() -{ - if(NULL != mpOrigPixmap) - { - delete mpOrigPixmap; - mpOrigPixmap = NULL; - } - if(NULL != mpLayout) - { - delete mpLayout; - mpLayout = NULL; - } - if(NULL != mpSetAsBackgroundButton) - { - delete mpSetAsBackgroundButton; - mpSetAsBackgroundButton = NULL; - } - if(NULL != mpAddPageButton) - { - delete mpAddPageButton; - mpAddPageButton = NULL; - } - if(NULL != mpAddToLibButton) - { - delete mpAddToLibButton; - mpAddToLibButton = NULL; - } - if(NULL != mpObjInfoLabel) - { - delete mpObjInfoLabel; - mpObjInfoLabel = NULL; - } - if(NULL != mpObjInfos) - { - delete mpObjInfos; - mpObjInfos = NULL; - } - if(NULL != mpThumbnail) - { - delete mpThumbnail; - mpThumbnail = NULL; - } -} - -/** - * \brief Handle the resize event - * @param event as the resize event - */ -void UBLibItemProperties::resizeEvent(QResizeEvent *event) -{ - Q_UNUSED(event); - adaptSize(); -} - -/** - * \brief Adapt the thumbnail size - */ -void UBLibItemProperties::adaptSize() -{ - if(NULL != mpOrigPixmap) - { - if(width() < THUMBNAIL_WIDTH + 40) - { - mpThumbnail->setPixmap(mpOrigPixmap->scaledToWidth(width() - 40)); - } - else - { - mpThumbnail->setPixmap(mpOrigPixmap->scaledToWidth(THUMBNAIL_WIDTH)); - } - } -} - -/** - * \brief Add the element to the page - */ -void UBLibItemProperties::onAddToPage() -{ - if(UBApplication::isFromWeb(mpElement->path().toString())){ - sDownloadFileDesc desc; - desc.isBackground = false; - desc.modal = true; - desc.name = QFileInfo(mpElement->path().toString()).fileName(); - desc.url = mpElement->path().toString(); - UBDownloadManager::downloadManager()->addFileToDownload(desc); - - }else{ - UBLibWidget* libWidget = dynamic_cast(parentWidget()->parentWidget()); - libWidget->libNavigator()->libraryWidget()->libraryController()->addItemToPage(mpElement); - } -} - -/** - * \brief Add the item to the library - */ -void UBLibItemProperties::onAddToLib() -{ - if(UBApplication::isFromWeb(mpElement->path().toString())){ - sDownloadFileDesc desc; - desc.isBackground = false; - desc.modal = false; - desc.name = QFileInfo(mpElement->path().toString()).fileName(); - desc.url = mpElement->path().toString(); - UBDownloadManager::downloadManager()->addFileToDownload(desc); - } -} - -/** - * \brief Set the item as background - */ -void UBLibItemProperties::onSetAsBackground() -{ - if(UBApplication::isFromWeb(mpElement->path().toString())){ - sDownloadFileDesc desc; - desc.isBackground = true; - desc.modal = true; - desc.name = QFileInfo(mpElement->path().toString()).fileName(); - desc.url = mpElement->path().toString(); - UBDownloadManager::downloadManager()->addFileToDownload(desc); - - }else{ - UBLibWidget* libWidget = dynamic_cast(parentWidget()->parentWidget()); - libWidget->libNavigator()->libraryWidget()->libraryController()->setItemAsBackground(mpElement); - } -} - -/** - * \brief Show the given element properties - * @param elem as the given element - */ -void UBLibItemProperties::showElement(UBLibElement *elem) -{ - if(NULL != mpOrigPixmap) - { - delete mpOrigPixmap; - mpOrigPixmap = NULL; - } - if(NULL != elem) - { - mpElement = elem; - mpOrigPixmap = new QPixmap(QPixmap::fromImage(*elem->thumbnail())); - mpThumbnail->setPixmap(QPixmap::fromImage(*elem->thumbnail()).scaledToWidth(THUMBNAIL_WIDTH)); - populateMetadata(); - } - - if(UBApplication::isFromWeb(elem->path().toString())){ - mpAddToLibButton->show(); - if(elem->metadatas()["Type"].toLower().contains("image")){ - mpSetAsBackgroundButton->show(); - }else{ - mpSetAsBackgroundButton->hide(); - } - }else{ - mpAddToLibButton->hide(); - if(UBFileSystemUtils::mimeTypeFromFileName(elem->path().toLocalFile()).contains("image")){ - mpSetAsBackgroundButton->show(); - }else{ - mpSetAsBackgroundButton->hide(); - } - } -} - -/** - * \brief Navigate backward - */ -void UBLibItemProperties::onBack() -{ - emit showFolderContent(); -} - -/** - * \brief Handle the show event - * @param event as the show event - */ -void UBLibItemProperties::showEvent(QShowEvent *event) -{ - Q_UNUSED(event); - adaptSize(); -} - -void UBLibItemProperties::populateMetadata() -{ - if(NULL != mpObjInfos){ - mpObjInfos->clear(); - QMap metas = mpElement->metadatas(); - QList lKeys = metas.keys(); - QList lValues = metas.values(); - - for(int i=0; i< metas.size(); i++){ - QStringList values; - values << lKeys.at(i); - values << lValues.at(i); - mpItem = new QTreeWidgetItem(values); - mpObjInfos->addTopLevelItem(mpItem); - } - mpObjInfos->resizeColumnToContents(0); - } -} - -/** - * \brief Constructor - * @param parent as the parent widget - * @param name as the object name - */ -UBLibItemButton::UBLibItemButton(QWidget *parent, const char *name):QPushButton(parent) -{ - setObjectName(name); - setStyleSheet(QString("background-color : #DDDDDD; color : #555555; border-radius : 6px; padding : 5px; font-weight : bold; font-size : 12px;")); -} - -/** - * \brief Destructor - */ -UBLibItemButton::~UBLibItemButton() -{ - -} diff --git a/src/gui/UBLibItemProperties.h b/src/gui/UBLibItemProperties.h deleted file mode 100644 index 8fbfdf2c..00000000 --- a/src/gui/UBLibItemProperties.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef UBLIBITEMPROPERTIES_H -#define UBLIBITEMPROPERTIES_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "board/UBLibraryController.h" - -#define THUMBNAIL_WIDTH 400 - -class UBLibItemButton : public QPushButton -{ -public: - UBLibItemButton(QWidget* parent=0, const char* name="UBLibItemButton"); - ~UBLibItemButton(); -}; - -class UBLibItemProperties : public QWidget -{ - Q_OBJECT -public: - UBLibItemProperties(QWidget* parent=0, const char* name="UBLibItemProperties"); - ~UBLibItemProperties(); - - void showElement(UBLibElement* elem); - -signals: - void showFolderContent(); - -protected: - void resizeEvent(QResizeEvent *event); - void showEvent(QShowEvent *event); - -private slots: - void onAddToPage(); - void onAddToLib(); - void onSetAsBackground(); - void onBack(); - -private: - void adaptSize(); - void populateMetadata(); - - QVBoxLayout* mpLayout; - QHBoxLayout* mpButtonLayout; - UBLibItemButton* mpAddPageButton; - UBLibItemButton* mpAddToLibButton; - UBLibItemButton* mpSetAsBackgroundButton; - QLabel* mpObjInfoLabel; - QTreeWidget* mpObjInfos; - QLabel* mpThumbnail; - QPixmap* mpOrigPixmap; - int maxThumbHeight; - UBLibElement* mpElement; - QTreeWidgetItem* mpItem; -}; - - -#endif // UBLIBITEMPROPERTIES_H diff --git a/src/gui/UBLibNavigatorWidget.cpp b/src/gui/UBLibNavigatorWidget.cpp deleted file mode 100644 index 5e7d5c89..00000000 --- a/src/gui/UBLibNavigatorWidget.cpp +++ /dev/null @@ -1,189 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include "UBLibNavigatorWidget.h" -#include "UBLibWidget.h" - -#include "core/UBApplication.h" - -#include "globals/UBGlobals.h" - -#include "core/memcheck.h" - -static int lowBoundForSlider = 40; -static int topBoundForSlider = 120; -static int tickIntervalForSlider = 10; - -/** - * \brief Constructor - * @param parent as the parent widget - * @param name as the object name - */ -UBLibNavigatorWidget::UBLibNavigatorWidget(QWidget *parent, const char *name):QWidget(parent) - , mLayout(NULL) - , mLibWidget(NULL) - , mSlider(NULL) - , mSliderWidthSetting(NULL) -{ - setObjectName(name); - - SET_STYLE_SHEET(); - - setAcceptDrops(true); - - UBLibWidget* libWidget = dynamic_cast(parentWidget()); - mLayout = new QVBoxLayout(this); - setLayout(mLayout); - - mLibWidget = new UBLibraryWidget(this); - mLayout->addWidget(mLibWidget, 1); - - mSlider = new QSlider(Qt::Horizontal, this); - mSlider->setMinimumHeight(20); - mSlider->setRange(lowBoundForSlider, topBoundForSlider); - //mSliderWidthSetting = new UBSetting(UBSettings::settings(), "Library", "LibWidgetWidth", topBoundForSlider); - //int defaultWidth = mSliderWidthSetting->get().toInt(); - int defaultWidth = UBSettings::settings()->libraryIconSize(); - qDebug() << defaultWidth; - mSlider->setValue(defaultWidth); - mSlider->setTickInterval(tickIntervalForSlider); - mLayout->addWidget(mSlider, 0); - - connect(mLibWidget, SIGNAL(navigBarUpdate(UBLibElement*)), this, SLOT(onNavigbarUpate(UBLibElement*))); - connect(this, SIGNAL(updateNavigBar(UBChainedLibElement*)), libWidget, SLOT(onUpdateNavigBar(UBChainedLibElement*))); - mLibWidget->updateThumbnailsSize(defaultWidth); - - - connect(mLibWidget, SIGNAL(propertiesRequested(UBLibElement*)), this, SLOT(onPropertiesRequested(UBLibElement*))); - connect(mLibWidget, SIGNAL(displaySearchEngine(UBLibElement*)), this, SLOT(onDisplaySearchEngine(UBLibElement*))); - connect(mSlider,SIGNAL(valueChanged(int)),this,SLOT(updateThumbnailsSize(int))); - connect(libWidget->pathViewer(), SIGNAL(mouseClick(UBChainedLibElement*)), this, SLOT(onPathItemClicked(UBChainedLibElement*))); - connect(libWidget->pathViewer(), SIGNAL(elementsDropped(QList,UBLibElement*)), mLibWidget, SLOT(onElementsDropped(QList,UBLibElement*))); - connect(mLibWidget, SIGNAL(navigBarUpdate(UBLibElement*)), libWidget->actionBar(), SLOT(onNavigbarUpdate(UBLibElement*))); - connect(mLibWidget, SIGNAL(itemsSelected(QList, bool)), libWidget->actionBar(), SLOT(onSelectionChanged(QList, bool))); - connect(libWidget->actionBar(), SIGNAL(deleteDone()), mLibWidget, SLOT(onRefreshCurrentFolder())); - connect(mLibWidget, SIGNAL(favoritesEntered(bool)), libWidget->actionBar(), SLOT(onFavoritesEntered(bool))); - connect(libWidget->actionBar(), SIGNAL(searchElement(QString)), mLibWidget, SLOT(onSearchElement(QString))); - connect(libWidget->actionBar(), SIGNAL(newFolderToCreate()), mLibWidget, SLOT(onNewFolderToCreate())); - connect(mLibWidget, SIGNAL(itemClicked()),libWidget->actionBar(), SLOT(onItemChanged())); - connect(libWidget->pathViewer(), SIGNAL(mouseClick(UBChainedLibElement*)),libWidget->actionBar(), SLOT(onItemChanged())); - mLibWidget->init(); -} - -/** - * \brief Destructor - */ -UBLibNavigatorWidget::~UBLibNavigatorWidget() -{ - if(NULL != mLibWidget) - { - delete mLibWidget; - mLibWidget = NULL; - } - if(NULL != mSlider) - { - delete mSlider; - mSlider = NULL; - } - if(NULL != mSliderWidthSetting) - { - delete mSliderWidthSetting; - mSliderWidthSetting = NULL; - } - if(NULL != mLayout) - { - delete mLayout; - mLayout = NULL; - } -} - -void UBLibNavigatorWidget::dropMe(const QMimeData *_data) -{ - // Forward the mime data to the library widget - Q_UNUSED(_data); -} - -/** - * \brief Update the navigation bar - * @param pElem as the current element - */ -void UBLibNavigatorWidget::onNavigbarUpate(UBLibElement *pElem) -{ - Q_UNUSED(pElem); - emit updateNavigBar(mLibWidget->chainedElements); -} - -/** - * \brief Handle the click event on an item - * @param elem as the clicked element - */ -void UBLibNavigatorWidget::onPathItemClicked(UBChainedLibElement *elem) -{ - if (!this->libraryWidget()->isLoadingLibraryItems()) - { - // If this element has some subelement, remove them - removeNextChainedElements(elem); - - // The refresh the view - mLibWidget->setCurrentElemsAndRefresh(elem); - } -} - -/** - * \brief Remove the next chained elements - * @param fromElem as the current elem - */ -void UBLibNavigatorWidget::removeNextChainedElements(UBChainedLibElement *fromElem) -{ - if(NULL != fromElem) - { - if(NULL != fromElem->nextElement()) - { - //removeNextChainedElements(fromElem->nextElement()); - //delete fromElem->nextElement()->element(); - //delete fromElem->nextElement(); - delete fromElem->nextElement(); - fromElem->setNextElement(NULL); - } - } -} - -/** - * \brief Handles the properties requested event - * @param elem as the related element - */ -void UBLibNavigatorWidget::onPropertiesRequested(UBLibElement *elem) -{ - emit propertiesRequested(elem); -} - -/** - * \brief Handles the display search engine requested event - * @param elem as the related element - */ -void UBLibNavigatorWidget::onDisplaySearchEngine(UBLibElement *elem) -{ - emit displaySearchEngine(elem); -} - -/** - * \brief Update the thumbnails size - * @param newSize as the given thumbnails size - */ -void UBLibNavigatorWidget::updateThumbnailsSize(int newSize) -{ - //mSliderWidthSetting->set(newSize); - UBSettings::settings()->setLibraryIconsize(newSize); - mLibWidget->updateThumbnailsSize(newSize); -} diff --git a/src/gui/UBLibNavigatorWidget.h b/src/gui/UBLibNavigatorWidget.h deleted file mode 100644 index 98a10c3d..00000000 --- a/src/gui/UBLibNavigatorWidget.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef UBLIBNAVIGATORWIDGET_H -#define UBLIBNAVIGATORWIDGET_H - -#include -#include -#include -#include - -#include "UBLibraryWidget.h" -#include "core/UBSetting.h" - -class UBLibNavigatorWidget : public QWidget -{ - Q_OBJECT -public: - UBLibNavigatorWidget(QWidget* parent=0, const char* name="UBLibNavigatorWidget"); - ~UBLibNavigatorWidget(); - void dropMe(const QMimeData* _data); - - UBLibraryWidget* libraryWidget(){return mLibWidget;} - -signals: - void propertiesRequested(UBLibElement* elem); - void displaySearchEngine(UBLibElement* elem); - void updateNavigBar(UBChainedLibElement* elem); - -private slots: - void onNavigbarUpate(UBLibElement* pElem); - void onPathItemClicked(UBChainedLibElement *elem); - void onPropertiesRequested(UBLibElement* elem); - void updateThumbnailsSize(int newSize); - void onDisplaySearchEngine(UBLibElement* elem); - -private: - void removeNextChainedElements(UBChainedLibElement* fromElem); - - QVBoxLayout* mLayout; - UBLibraryWidget* mLibWidget; - QSlider* mSlider; - UBSetting* mSliderWidthSetting; -}; - -#endif // UBLIBNAVIGATORWIDGET_H diff --git a/src/gui/UBLibPathViewer.cpp b/src/gui/UBLibPathViewer.cpp deleted file mode 100644 index e281a17b..00000000 --- a/src/gui/UBLibPathViewer.cpp +++ /dev/null @@ -1,582 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include -#include -#include - -#include "UBLibPathViewer.h" -#include "core/UBApplication.h" -#include "board/UBBoardController.h" - -#include "core/UBDownloadManager.h" -#include "board/UBBoardPaletteManager.h" - -#include "core/memcheck.h" - -/** - * \brief Constructor - * @param parent as the parent widget - * @param name as the object name - */ -UBLibPathViewer::UBLibPathViewer(QWidget *parent, const char *name):QGraphicsView(parent) - , mpElems(NULL) - , mpElemsBackup(NULL) - , mpScene(NULL) - , mpLayout(NULL) - , mpContainer(NULL) - , mpBackElem(NULL) -{ - setObjectName(name); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); - setAcceptDrops(true); - - mpBackElem = new UBLibElement(); - mpBackElem->setThumbnail(QPixmap(":images/libpalette/back.png").toImage()); - mpBackElem->setDeletable(false); - - mpScene = new UBPathScene(this); - setScene(mpScene); - - mpContainer = new QGraphicsWidget(); - mpContainer->setMinimumWidth(width() - 20); - mpScene->addItem(mpContainer); - mpLayout = new QGraphicsLinearLayout(); - mpContainer->setLayout(mpLayout); - - connect(mpScene, SIGNAL(mouseClick(UBChainedLibElement*)), this, SLOT(onMouseClicked(UBChainedLibElement*))); - connect(mpScene, SIGNAL(elementsDropped(QList,UBLibElement*)), this, SLOT(onElementsDropped(QList,UBLibElement*))); - connect(horizontalScrollBar(), SIGNAL(sliderMoved(int)), this, SLOT(onSliderMoved(int))); -} - -/** - * \brief Destructor - */ -UBLibPathViewer::~UBLibPathViewer() -{ - if(NULL != mpContainer) - { - delete mpContainer; - mpContainer = NULL; - } - if(NULL != mpBackElem) - { - delete mpBackElem; - mpBackElem = NULL; - } - if(NULL != mpElems) - { - delete mpElems; - mpElems = NULL; - } - //if(NULL != mpElemsBackup) - //{ - // delete mpElemsBackup; - // mpElemsBackup = NULL; - //} - //if(NULL != mpLayout) - //{ - // delete mpLayout; - // mpLayout = NULL; - //} - if(NULL != mpScene) - { - delete mpScene; - mpScene = NULL; - } -} - -/** - * \brief Display the current path - * @param elementsChain as the path to display - */ -void UBLibPathViewer::displayPath(UBChainedLibElement *elementsChain) -{ - if(NULL != elementsChain) - { - mpElems = elementsChain; - refreshPath(); - } -} - -/** - * \brief Refresh the current path - */ -void UBLibPathViewer::refreshPath() -{ - if (mpScene && mpContainer) - mpScene->removeItem(mpContainer); - if(mpContainer) - delete mpContainer; - mVItems.clear(); - mpScene->mapWidgetToChainedElem()->clear(); - mpContainer = new QGraphicsWidget(); - - mpScene->addItem(mpContainer); - mpLayout = new QGraphicsLinearLayout(); - mpContainer->setLayout(mpLayout); - mSceneWidth = 0; - addItem(mpElems); - mpLayout->addStretch(); - - updateScrolls(); - -} - -/** - * \brief Handle the slider moved event - * @param value as the current slider position - */ -void UBLibPathViewer::onSliderMoved(int value) -{ - Q_UNUSED(value); -} - -/** - * \brief Update the scroll bar status - */ -void UBLibPathViewer::updateScrolls() -{ - int iLimit = mSceneWidth + 40; // 2x 20 pixels margin - int iVp = viewport()->width(); - - if(iLimit >= iVp) - { - int iDiff = iLimit - iVp; - horizontalScrollBar()->setRange(0, iDiff); - } - else - { - horizontalScrollBar()->setRange(0, 0); - } -} - -/** - * \brief Append an item to the path - * @param elem as the element to add to the path - */ -void UBLibPathViewer::addItem(UBChainedLibElement *elem) -{ - if(NULL != elem) - { - // Add the icon - QLabel* pIconLabel = new QLabel(); - pIconLabel->setStyleSheet(QString("background-color: transparent;")); - pIconLabel->setPixmap((QPixmap::fromImage(*elem->element()->thumbnail())).scaledToWidth(PATHITEMWIDTH)); - UBFolderPath* iconWidget = reinterpret_cast(mpScene->addWidget(pIconLabel)); - //iconWidget->setToolTip(elem->element()->name()); - iconWidget->setWindowFlags(Qt::BypassGraphicsProxyWidget); - mpLayout->addItem(iconWidget); - mVItems << iconWidget; - mpScene->mapWidgetToChainedElem()->insert(iconWidget,elem); - mSceneWidth += pIconLabel->pixmap()->width() + 4; // 2px border - - if(NULL != elem->nextElement()) - { - // Add the arrow - QLabel* pArrowLabel = new QLabel(); - pArrowLabel->setStyleSheet(QString("background-color: transparent;")); - pArrowLabel->setPixmap(QPixmap(":images/navig_arrow.png")); - QGraphicsWidget* arrowWidget = mpScene->addWidget(pArrowLabel); - mpLayout->addItem(arrowWidget); - mVItems << arrowWidget; - mSceneWidth += pArrowLabel->pixmap()->width() + 4; // 2px border - - // Recursively call this method while a next item exists - addItem(elem->nextElement()); - } - } -} - -/** - * \brief Handles the resize event - * @param event as the resize event - */ -void UBLibPathViewer::resizeEvent(QResizeEvent *event) -{ - - if(event->oldSize() == event->size()) - event->ignore(); - else{ - if(NULL != mpContainer) - mpContainer->setMinimumWidth(width() - 20); - - viewport()->resize(width() - 10, viewport()->height()); - - updateScrolls(); - event->accept(); - } -} - -void UBLibPathViewer::showEvent(QShowEvent *event) -{ - Q_UNUSED(event); - updateScrolls(); -} - -/** - * \brief Handles the mouse move event - * @param event as the mouse move event - */ -void UBLibPathViewer::mouseMoveEvent(QMouseEvent *event) -{ - event->ignore(); -} - -void UBLibPathViewer::onMouseClicked(UBChainedLibElement *elem) -{ - emit mouseClick(elem); -} - -int UBLibPathViewer::widgetAt(QPointF p) -{ - int position = -1; - - for(int i = 0; i < mVItems.size(); i++) - { - QGraphicsWidget* pCrntWidget = mVItems.at(i); - if(NULL != pCrntWidget) - { - QRectF r = pCrntWidget->rect(); - QPointF wPos = pCrntWidget->scenePos(); - int xMin = wPos.x() + r.x(); - int xMax = wPos.x() + r.x() + r.width(); - int yMin = wPos.y() + r.y(); - int yMax = wPos.y() + r.y() + r.height(); - - if(p.x() >= xMin && - p.x() <= xMax && - p.y() >= yMin && - p.y() <= yMax) - { - return i; - } - } - } - - return position; -} - -void UBLibPathViewer::onElementsDropped(QList elements, UBLibElement *target) -{ - emit elementsDropped(elements, target); -} - -void UBLibPathViewer::showBack() -{ - // Backup the current path so we can go back by clicking on the back button - mpElemsBackup = mpElems; - - // Set the correct path to the backElem - UBChainedLibElement* pLastElem = mpElemsBackup->lastElement(); - - if(NULL != pLastElem) - { - mpBackElem->setPath(pLastElem->element()->path()); - mpBackElem->setType(pLastElem->element()->type()); - mpBackElem->setName(pLastElem->element()->name()); - } - - // Display the 'back' element - displayPath(new UBChainedLibElement(mpBackElem)); -} - -UBFolderPath::UBFolderPath():QGraphicsProxyWidget() -{ - -} - -UBFolderPath::~UBFolderPath() -{ - -} - -/** - * \brief Handles the drag enter event - * @param pEvent as the drag enter event - */ -void UBFolderPath::dragEnterEvent(QGraphicsSceneDragDropEvent *event) -{ - event->acceptProposedAction(); -} - -/** - * \brief Handles the drop event - * @param pEvent as the drop event - */ -void UBFolderPath::dropEvent(QDropEvent *pEvent) -{ - processMimeData(pEvent->mimeData()); - pEvent->acceptProposedAction(); -} - -/** - * \brief Handles the drag move event - * @param pEvent as the drag move event - */ -void UBFolderPath::dragMoveEvent(QDragMoveEvent* pEvent) -{ - pEvent->acceptProposedAction(); -} - -/** - * \brief Process the given MIME data - * @param pData as the MIME data to process - */ -void UBFolderPath::processMimeData(const QMimeData *pData) -{ - Q_UNUSED(pData); -} - -/** - * \brief Handles the mouse press event - * @param event as the mouse press event - */ -void UBFolderPath::mousePressEvent(QGraphicsSceneMouseEvent *event) -{ - Q_UNUSED(event); -} - -/** - * \brief Handles the mouse move event - * @param event as the mouse move event - */ -void UBFolderPath::mouseMoveEvent(QMouseEvent *event) -{ - Q_UNUSED(event); -} - -/** - * \brief Handles the mouse release event - * @param event as the mouse release event - */ -void UBFolderPath::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) -{ - Q_UNUSED(event); -} - - -UBPathScene::UBPathScene(QWidget* parent):QGraphicsScene(parent) -{ - connect(UBDownloadManager::downloadManager(), SIGNAL(allDownloadsFinished()), this, SLOT(onAllDownloadsFinished())); -} - -UBPathScene::~UBPathScene() -{ - -} - - -void UBPathScene::mousePressEvent(QGraphicsSceneMouseEvent *event) -{ - if(event->button() == Qt::LeftButton) - { - mDragStartPos = event->scenePos(); - mClickTime = QTime::currentTime(); - } -} - -/** - * \brief Handles the mouse release event - * @param event as the mouse release event - */ -void UBPathScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) -{ - int elapsedTimeSincePress = mClickTime.elapsed(); - - if(elapsedTimeSincePress < STARTDRAGTIME) - { - QGraphicsWidget* pGWidget = dynamic_cast(itemAt(event->pos())); - if(NULL != pGWidget) - { - // We have only one view at a time - UBLibPathViewer* pView = dynamic_cast(this->views().at(0)); - if(NULL != pView) - { - int iClickedItem = pView->widgetAt(event->scenePos()); - QGraphicsLayout* wgtLayout = pGWidget->layout(); - if(iClickedItem != -1 && wgtLayout != NULL) - { - QGraphicsWidget* pFolderW = dynamic_cast(wgtLayout->itemAt(iClickedItem)); - if(NULL != pFolderW) - { - UBChainedLibElement* chElem = mMapWidgetToChainedElem[pFolderW]; - if(NULL != chElem) - { - emit mouseClick(chElem); - } - } - } - } - } - } -} - -/** - * \brief Handles the mouse move event - * @param event as the mouse move event - */ -void UBPathScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) -{ - if(event->button() == Qt::LeftButton) - { - if((event->pos() - mDragStartPos).manhattanLength() < QApplication::startDragDistance()) - { - // The user is not doing a drag - return; - } - - // The user is performing a drag operation - QDrag* drag = new QDrag(event->widget()); - QMimeData* mimeData = new QMimeData(); - drag->setMimeData(mimeData); - drag->start(); - } -} - - -void UBPathScene::dragEnterEvent(QGraphicsSceneDragDropEvent *event) -{ - event->accept(); -} - -void UBPathScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event) -{ - event->accept(); -} - -void UBPathScene::dropEvent(QGraphicsSceneDragDropEvent *event) -{ - bool bAccept = false; - const QMimeData* pMimeData = event->mimeData(); - - if(NULL != event->source() && 0 == QString::compare(event->source()->metaObject()->className(), "UBLibraryWidget")){ - UBLibElement* pTargetElement = elementFromPos(event->scenePos()); - if(NULL != pTargetElement){ - if(eUBLibElementType_Folder == pTargetElement->type()){ - // 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(); - - if(!qlDroppedElems.empty()){ - // Send a signal with the target dir and the list of ublibelement* - emit elementsDropped(qlDroppedElems, pTargetElement); - } - } - } - - bAccept = true; - }else if(NULL != pMimeData && pMimeData->hasUrls()){ - QList urls = pMimeData->urls(); - foreach(QUrl eachUrl, urls){ - QString sUrl = eachUrl.toString(); - if(!sUrl.startsWith("uniboardTool://") && !sUrl.startsWith("file://") && !sUrl.startsWith("/")){ - // The dropped URL comes from the web - // Show the download palette if it is hidden - UBApplication::boardController->paletteManager()->startDownloads(); - - // Add the dropped url to the download list - sDownloadFileDesc desc; - desc.currentSize = 0; - desc.id = 0; - desc.isBackground = false; - desc.modal = false; - desc.name = QFileInfo(sUrl).fileName(); - desc.totalSize = 0; - desc.url = sUrl; - UBDownloadManager::downloadManager()->addFileToDownload(desc); - bAccept = true; - } - } - } - if(!bAccept && NULL != pMimeData && pMimeData->hasText()){ - // The user can only drop an Url in this location so if the text is not an Url, - // we discard it. - QString qsTxt = pMimeData->text().remove(QRegExp("[\\0]")); - if(qsTxt.startsWith("http")){ - // Show the download palette if it is hidden - UBApplication::boardController->paletteManager()->startDownloads(); - - // Add the dropped url to the download list - sDownloadFileDesc desc; - desc.currentSize = 0; - desc.id = 0; - desc.isBackground = false; - desc.modal = false; - desc.name = QFileInfo(qsTxt).fileName(); - desc.totalSize = 0; - desc.url = qsTxt; - UBDownloadManager::downloadManager()->addFileToDownload(desc); - bAccept = true; - } - } - if(!bAccept && NULL != pMimeData && pMimeData->hasHtml()){ - QString html = pMimeData->html(); - QString url = UBApplication::urlFromHtml(html); - if("" != url) - { - // Show the download palette if it is hidden - UBApplication::boardController->paletteManager()->startDownloads(); - - // Add the dropped url to the download list - sDownloadFileDesc desc; - desc.currentSize = 0; - desc.id = 0; - desc.isBackground = false; - desc.modal = false; - desc.name = QFileInfo(url).fileName(); - desc.totalSize = 0; - desc.url = url; - UBDownloadManager::downloadManager()->addFileToDownload(desc); - bAccept = true; - } - } - if(bAccept){ - event->accept(); - } - else{ - event->ignore(); - } -} - -/** - * \brief Return the element related to the given position - * @param p as the given position - * - */ -UBLibElement* UBPathScene::elementFromPos(QPointF p) -{ - UBLibElement* pElem = NULL; - - QGraphicsWidget* pGWidget = dynamic_cast(itemAt(p)); - if(NULL != pGWidget) - { - UBChainedLibElement* chElem = mMapWidgetToChainedElem[pGWidget]; - if(NULL != chElem) - { - return chElem->element(); - } - } - - return pElem; -} - -void UBPathScene::onAllDownloadsFinished() -{ - // Hide the download tab - UBApplication::boardController->paletteManager()->stopDownloads(); -} diff --git a/src/gui/UBLibPathViewer.h b/src/gui/UBLibPathViewer.h deleted file mode 100644 index 1f3764ef..00000000 --- a/src/gui/UBLibPathViewer.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef UBLIBPATHVIEWER_H -#define UBLIBPATHVIEWER_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "board/UBLibraryController.h" - -#define PATHITEMWIDTH 32 -#define STARTDRAGTIME 1000000 - -class UBPathScene : public QGraphicsScene -{ - Q_OBJECT -public: - UBPathScene(QWidget* parent=0); - ~UBPathScene(); - QMap* mapWidgetToChainedElem(){return &mMapWidgetToChainedElem;} - -signals: - void mouseClick(UBChainedLibElement* elem); - void elementsDropped(QList elements, UBLibElement* target); - -protected: - void mousePressEvent(QGraphicsSceneMouseEvent *event); - void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - void mouseMoveEvent(QGraphicsSceneMouseEvent *event); - void dragEnterEvent(QGraphicsSceneDragDropEvent *event); - void dragMoveEvent(QGraphicsSceneDragDropEvent *event); - void dropEvent(QGraphicsSceneDragDropEvent *event); - -private slots: - void onAllDownloadsFinished(); - -private: - UBLibElement* elementFromPos(QPointF p); - /** The drag start position */ - QPointF mDragStartPos; - /** A timer used to detect a click or a drag */ - QTime mClickTime; - /** A map between a widget and a chained element */ - QMap mMapWidgetToChainedElem; - -}; - -class UBLibPathViewer : public QGraphicsView -{ - Q_OBJECT -public: - UBLibPathViewer(QWidget* parent=0, const char* name="UBLibPathViewer"); - ~UBLibPathViewer(); - - void displayPath(UBChainedLibElement* elementsChain); - int widgetAt(QPointF p); - void updateScrolls(); - -public slots: - void showBack(); - -signals: - void mouseClick(UBChainedLibElement* elem); - void elementsDropped(QList elements, UBLibElement* target); - -protected: - void resizeEvent(QResizeEvent *event); - void mouseMoveEvent(QMouseEvent *event); - void showEvent(QShowEvent *event); - -private slots: - void onMouseClicked(UBChainedLibElement* elem); - void onElementsDropped(QList elements, UBLibElement* target); - void onSliderMoved(int value); - -private: - void refreshPath(); - void addItem(UBChainedLibElement* elem); - - /** The chained path elements */ - UBChainedLibElement* mpElems; - /** The backup chained path elements */ - UBChainedLibElement* mpElemsBackup; - /** The scene */ - UBPathScene* mpScene; - //QGraphicsScene* mpScene; - /** The layout */ - QGraphicsLinearLayout* mpLayout; - /** The container that will display the path properly */ - QGraphicsWidget* mpContainer; - /** The list of path items (icons + arrows) */ - QVector mVItems; - /** The total width of the element in the scene */ - int mSceneWidth; - /** The back element */ - UBLibElement* mpBackElem; -}; - - -class UBFolderPath : public QGraphicsProxyWidget -{ -public: - UBFolderPath(); - ~UBFolderPath(); - -protected: - void mousePressEvent(QGraphicsSceneMouseEvent *event); - void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - void mouseMoveEvent(QMouseEvent *event); - void dragEnterEvent(QGraphicsSceneDragDropEvent *event); - void dropEvent(QDropEvent *pEvent); - void dragMoveEvent(QDragMoveEvent *pEvent); - -private: - void processMimeData(const QMimeData* pData); - - -}; - -#endif // UBLIBPATHVIEWER_H diff --git a/src/gui/UBLibWebView.cpp b/src/gui/UBLibWebView.cpp deleted file mode 100644 index 0a4bb6cc..00000000 --- a/src/gui/UBLibWebView.cpp +++ /dev/null @@ -1,89 +0,0 @@ -#include - -#include "core/UBApplication.h" - -#include "board/UBBoardController.h" - -#include "globals/UBGlobals.h" - -#include "UBLibWebView.h" - -#include "core/memcheck.h" - -UBLibWebView::UBLibWebView(QWidget* parent, const char* name):QWidget(parent) - , mpView(NULL) - , mpWebSettings(NULL) - , mpLayout(NULL) - , mpSankoreAPI(NULL) -{ - setObjectName(name); - - SET_STYLE_SHEET(); - - mpLayout = new QVBoxLayout(); - setLayout(mpLayout); - - mpView = new QWebView(this); - mpView->setObjectName("SearchEngineView"); - mpSankoreAPI = new UBWidgetUniboardAPI(UBApplication::boardController->activeScene()); - connect(mpView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared())); - - mpLayout->addWidget(mpView); -} - -UBLibWebView::~UBLibWebView() -{ - if(NULL != mpSankoreAPI){ - delete mpSankoreAPI; - mpSankoreAPI = NULL; - } - if(NULL != mpView){ - delete mpView; - mpView = NULL; - } - if(NULL != mpLayout){ - delete mpLayout; - mpLayout = NULL; - } -} - -void UBLibWebView::setElement(UBLibElement *elem) -{ - if(NULL != elem) - { - QString qsWidgetName; - QString path = elem->path().toLocalFile(); - - QString qsConfigPath = QString("%0/config.xml").arg(path); - - if(QFile::exists(qsConfigPath)) - { - QFile f(qsConfigPath); - if(f.open(QIODevice::ReadOnly)) - { - QDomDocument domDoc; - domDoc.setContent(QString(f.readAll())); - QDomElement root = domDoc.documentElement(); - - QDomNode node = root.firstChild(); - while(!node.isNull()) - { - if(node.toElement().tagName() == "content") - { - QDomAttr srcAttr = node.toElement().attributeNode("src"); - qsWidgetName = srcAttr.value(); - break; - } - node = node.nextSibling(); - } - f.close(); - } - } - mpView->load(QUrl::fromLocalFile(QString("%0/%1").arg(path).arg(qsWidgetName))); - } -} - -void UBLibWebView::javaScriptWindowObjectCleared() -{ - mpView->page()->mainFrame()->addToJavaScriptWindowObject("sankore", mpSankoreAPI); -} diff --git a/src/gui/UBLibWebView.h b/src/gui/UBLibWebView.h deleted file mode 100644 index d9ccc245..00000000 --- a/src/gui/UBLibWebView.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef UBLIBWEBVIEW_H -#define UBLIBWEBVIEW_H - -#include -#include -#include -#include - -#include "board/UBLibraryController.h" -#include "api/UBWidgetUniboardAPI.h" - -class UBLibWebView : public QWidget -{ - Q_OBJECT - -public: - UBLibWebView(QWidget* parent = 0, const char* name = "UBLibWebView"); - ~UBLibWebView(); - - void setElement(UBLibElement* elem); - -protected slots: - virtual void javaScriptWindowObjectCleared(); - -private: - QWebView* mpView; - QWebSettings* mpWebSettings; - QVBoxLayout* mpLayout; - UBWidgetUniboardAPI* mpSankoreAPI; -}; - -#endif // UBLIBWEBVIEW_H diff --git a/src/gui/UBLibWidget.cpp b/src/gui/UBLibWidget.cpp deleted file mode 100644 index 60224328..00000000 --- a/src/gui/UBLibWidget.cpp +++ /dev/null @@ -1,230 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include - -#include "UBLibWidget.h" - -#include "core/UBApplication.h" - -#include "globals/UBGlobals.h" - -#include "core/memcheck.h" - -/** - * \brief Constructor - * @param parent as the parent widget - * @param name as the object name - */ -UBLibWidget::UBLibWidget(QWidget *parent, const char *name):UBDockPaletteWidget(parent) - , mLayout(NULL) - , mStackedWidget(NULL) - , mNavigator(NULL) - , mProperties(NULL) - , mActionBar(NULL) - , mpWebView(NULL) - , mpPathViewer(NULL) -{ - setObjectName(name); - mName = "LibWidget"; - mVisibleState = true; - - SET_STYLE_SHEET(); - - mIconToLeft = QPixmap(":images/library_open.png"); - mIconToRight = QPixmap(":images/library_close.png"); - setAcceptDrops(true); - - mLayout = new QVBoxLayout(this); - setLayout(mLayout); - - // ------------- - // Build the GUI - // ------------- - // The 'global' widgets - mStackedWidget = new QStackedWidget(this); - mActionBar = new UBLibActionBar(this); - mpPathViewer = new UBLibPathViewer(this); - mpPathViewer->setMaximumHeight(62); - - // The internal widgets - mNavigator = new UBLibNavigatorWidget(this); - mProperties = new UBLibItemProperties(this); - mpWebView = new UBLibWebView(this); - - mLayout->addWidget(mpPathViewer, 0); - mLayout->addWidget(mStackedWidget, 1); - mLayout->addWidget(mActionBar, 0); - - mStackedWidget->addWidget(mNavigator); - mStackedWidget->addWidget(mProperties); - mStackedWidget->addWidget(mpWebView); - - mStackedWidget->setCurrentIndex(ID_NAVIGATOR); - miCrntStackWidget = ID_NAVIGATOR; - - connect(mNavigator, SIGNAL(updateNavigBar(UBChainedLibElement*)), this, SLOT(onUpdateNavigBar(UBChainedLibElement*))); - connect(mNavigator, SIGNAL(propertiesRequested(UBLibElement*)), this, SLOT(showProperties(UBLibElement*))); - connect(mNavigator, SIGNAL(displaySearchEngine(UBLibElement*)), this, SLOT(showSearchEngine(UBLibElement*))); - connect(mProperties, SIGNAL(showFolderContent()), this, SLOT(showFolder())); - connect(this, SIGNAL(showLibElemProperties()), mpPathViewer, SLOT(showBack())); - connect(this, SIGNAL(showLibSearchEngine()), mpPathViewer, SLOT(showBack())); -} - -/** - * \brief Destructor - */ -UBLibWidget::~UBLibWidget() -{ - if(NULL != mpPathViewer) - { - delete mpPathViewer; - mpPathViewer = NULL; - } - if(NULL != mNavigator) - { - delete mNavigator; - mNavigator = NULL; - } - if(NULL != mpWebView) - { - delete mpWebView; - mpWebView = NULL; - } - if(NULL != mProperties) - { - delete mProperties; - mProperties = NULL; - } - if(NULL != mStackedWidget) - { - delete mStackedWidget; - mStackedWidget = NULL; - } - if(NULL != mActionBar) - { - delete mActionBar; - mActionBar = NULL; - } - if(NULL != mLayout) - { - delete mLayout; - mLayout = NULL; - } -} - -/** - * \brief Handles the drag enter event - * @param pEvent as the drag enter event - */ -void UBLibWidget::dragEnterEvent(QDragEnterEvent *pEvent) -{ - setBackgroundRole(QPalette::Highlight); - pEvent->acceptProposedAction(); -} - -void UBLibWidget::dragLeaveEvent(QDragLeaveEvent *pEvent) -{ - pEvent->accept(); -} - -/** - * \brief Handles the drop event - * @param pEvent as the drop event - */ -void UBLibWidget::dropEvent(QDropEvent *pEvent) -{ - processMimeData(pEvent->mimeData()); - setBackgroundRole(QPalette::Dark); - mStackedWidget->setCurrentIndex(miCrntStackWidget); - pEvent->acceptProposedAction(); -} - -/** - * \brief Handles the drag move event - * @param pEvent as the drag move event - */ -void UBLibWidget::dragMoveEvent(QDragMoveEvent *pEvent) -{ - pEvent->acceptProposedAction(); -} - -/** - * \brief Process the dropped MIME data - * @param pData as the mime dropped data - */ -void UBLibWidget::processMimeData(const QMimeData *pData) -{ - // Display the different mime types contained in the mime data - QStringList qslFormats = pData->formats(); - for(int i = 0; i < qslFormats.size(); i++) - { - qDebug() << "Dropped element format " << i << " = "<< qslFormats.at(i); - } -} - -void UBLibWidget::showProperties(UBLibElement *elem) -{ - if(NULL != elem) - { - emit showLibElemProperties(); - mActionBar->setButtons(eButtonSet_Properties); - mProperties->showElement(elem); - mStackedWidget->setCurrentIndex(ID_PROPERTIES); - miCrntStackWidget = ID_PROPERTIES; - } -} - -void UBLibWidget::showSearchEngine(UBLibElement *elem) -{ - if(NULL != elem) - { - emit showLibSearchEngine(); - mActionBar->hide(); - mpWebView->setElement(elem); - mStackedWidget->setCurrentIndex(ID_WEBVIEW); - miCrntStackWidget = ID_WEBVIEW; - } -} - -void UBLibWidget::showFolder() -{ - if(!mActionBar->isVisible()){ - mActionBar->setVisible(true); - } - mActionBar->setButtons(mActionBar->previousButtonSet()); - mStackedWidget->setCurrentIndex(ID_NAVIGATOR); - miCrntStackWidget = ID_NAVIGATOR; -} - -int UBLibWidget::customMargin() -{ - return 5; -} - -int UBLibWidget::border() -{ - return 15; -} - -void UBLibWidget::onUpdateNavigBar(UBChainedLibElement *elem) -{ - mpPathViewer->displayPath(elem); - mpPathViewer->show(); - - if(ID_NAVIGATOR != miCrntStackWidget) - { - showFolder(); - } -} diff --git a/src/gui/UBLibWidget.h b/src/gui/UBLibWidget.h deleted file mode 100644 index eba4ca85..00000000 --- a/src/gui/UBLibWidget.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef UBLIBWIDGET_H -#define UBLIBWIDGET_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "UBDockPaletteWidget.h" -#include "UBLibNavigatorWidget.h" -#include "UBLibItemProperties.h" -#include "UBLibActionBar.h" -#include "UBLibWebView.h" -#include "UBLibPathViewer.h" - -#define ID_NAVIGATOR 0 -#define ID_PROPERTIES 1 -#define ID_WEBVIEW 2 - -class UBLibWidget : public UBDockPaletteWidget -{ - Q_OBJECT -public: - UBLibWidget(QWidget* parent=0, const char* name="UBLibWidget"); - ~UBLibWidget(); - - UBLibActionBar* actionBar(){return mActionBar;} - UBLibNavigatorWidget* libNavigator() {return mNavigator;} - UBLibPathViewer* pathViewer() {return mpPathViewer;} - - bool visibleInMode(eUBDockPaletteWidgetMode mode) - { - return mode == eUBDockPaletteWidget_BOARD - || mode == eUBDockPaletteWidget_DESKTOP; - } - -signals: - void resized(); - void showLibElemProperties(); - void showLibSearchEngine(); - -protected: - void dragEnterEvent(QDragEnterEvent* pEvent); - void dropEvent(QDropEvent *pEvent); - void dragMoveEvent(QDragMoveEvent* pEvent); - void dragLeaveEvent(QDragLeaveEvent* pEvent); - -private slots: - void showProperties(UBLibElement* elem); - void showSearchEngine(UBLibElement* elem); - void showFolder(); - void onUpdateNavigBar(UBChainedLibElement* elem); - -private: - void processMimeData(const QMimeData* pData); - int customMargin(); - int border(); - - /** The layout */ - QVBoxLayout* mLayout; - /** The stacked layout */ - QStackedWidget* mStackedWidget; - /** The Navigator widget */ - UBLibNavigatorWidget* mNavigator; - /** The Properties widget */ - UBLibItemProperties* mProperties; - /** UBLibActionBar */ - UBLibActionBar* mActionBar; - /** The current stack widget index*/ - int miCrntStackWidget; - /** The webview used to display the search engines */ - UBLibWebView* mpWebView; - /** The path navigation widget */ - UBLibPathViewer* mpPathViewer; -}; - -#endif // UBLIBWIDGET_H diff --git a/src/gui/UBLibraryWidget.cpp b/src/gui/UBLibraryWidget.cpp deleted file mode 100644 index 6501a488..00000000 --- a/src/gui/UBLibraryWidget.cpp +++ /dev/null @@ -1,704 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include -#include -#include - -#include "UBLibraryWidget.h" -#include "core/UBSettings.h" -#include "core/UBSetting.h" -#include "core/UBApplication.h" - -#include "board/UBBoardController.h" -#include "board/UBLibraryController.h" -#include "board/UBBoardPaletteManager.h" - -#include "core/UBDownloadManager.h" - -#include "frameworks/UBFileSystemUtils.h" -#include "frameworks/UBPlatformUtils.h" - -#include "core/memcheck.h" - -/** - * \brief Constructor - * @param parent as the parent widget - * @param name as the widget object name - */ -UBLibraryWidget::UBLibraryWidget(QWidget *parent, const char *name):UBThumbnailWidget(parent) - , chainedElements(NULL) - , mLibraryController(NULL) - , mpCrntDir(NULL) - , mpCrntElem(NULL) - , mpTmpElem(NULL) - , mLoadingLibraryItems(false) -{ - setObjectName(name); - setSpacing(5); - mLibraryController = new UBLibraryController(parentWidget()); -} - -/** - * \brief Destructor - */ -UBLibraryWidget::~UBLibraryWidget() -{ - if(NULL != mLibraryController){ - delete mLibraryController; - mLibraryController = NULL; - } - if(NULL != mpCrntDir){ - delete mpCrntDir; - mpCrntDir = NULL; - } - if(NULL != mpCrntElem){ - delete mpCrntElem; - mpCrntElem = NULL; - } - if(NULL != mpTmpElem){ - delete mpTmpElem; - mpTmpElem = NULL; - } -} - -/** - * \brief Initialize the widget content - */ -void UBLibraryWidget::init() -{ - setAcceptDrops(true); - mpCrntElem = new UBLibElement(); - mpCrntElem->setThumbnail(QImage(":images/libpalette/home.png")); - chainedElements = new UBChainedLibElement(mpCrntElem); - QList qlElems = mLibraryController->getContent(mpCrntElem); - mCurrentElems = qlElems; - - setCurrentElemsAndRefresh(chainedElements); - - connect(this, SIGNAL(mouseClick(QGraphicsItem*,int)), this, SLOT(onItemClicked(QGraphicsItem*,int))); - connect(this, SIGNAL(selectionChanged()), this, SLOT(onSelectionChanged())); - connect(UBDownloadManager::downloadManager(), SIGNAL(addDownloadedFileToLibrary(bool,QUrl,QString,QByteArray)), this, SLOT(onAddDownloadedFileToLibrary(bool,QUrl,QString,QByteArray))); - connect(UBApplication::boardController, SIGNAL(displayMetadata(QMap)), this, SLOT(onDisplayMetadata(QMap))); - connect(mLibraryController,SIGNAL(updateItemsList()),this,SLOT(onRefreshCurrentFolder())); -} - -/** - * \brief Refresh the view - */ -void UBLibraryWidget::refreshView() -{ - // Clear the view - mItems.clear(); - mLabels.clear(); - mItemsPaths.clear(); - mGraphicItems.clear(); - - // Generate the graphics items - generateItems(); - - // Set the new items - setGraphicsItems(mGraphicItems, mItemsPaths, mLabels); - - // Refresh the view - refreshScene(); - - emit navigBarUpdate(mpCrntElem); - - bool bFavorite = false; - if(NULL != mpCrntDir && mLibraryController->favoritePath() == mpCrntDir->path().toLocalFile()) - { - bFavorite = true; - } - emit favoritesEntered(bFavorite); -} - -/** - * \brief Generate the graphic items related to the current directory - */ -void UBLibraryWidget::generateItems() -{ - for(int i = 0; i < mCurrentElems.size(); i++) - { - UBLibElement* pElem = mCurrentElems.at(i); - mLabels << pElem->name(); - mItemsPaths << pElem->path(); - QGraphicsPixmapItem *pixmapItem = new UBThumbnailPixmap(QPixmap::fromImage(*pElem->thumbnail())); - mGraphicItems << pixmapItem; - } -} - -/** - * \brief Handles the click on an item - * @param item as the clicked item - * @param index as the given index - */ -void UBLibraryWidget::onItemClicked(QGraphicsItem *item, int index) -{ - Q_UNUSED(index); - if(NULL != item) - { - mLoadingLibraryItems = true; - int iItem = mGraphicItems.indexOf(item); - if(0 <= iItem) - { - UBLibElement* pElem = mCurrentElems.at(iItem); - if(NULL != pElem) - { - delete mpCrntElem; - mpCrntElem = new UBLibElement(pElem); - if(eUBLibElementType_Folder == pElem->type() || eUBLibElementType_VirtualFolder == pElem->type()) - { - // Add the clicked element to the end of the elements list - // (at this level, the user can only go down in the path) - UBChainedLibElement* pNextElem = new UBChainedLibElement(pElem); - appendChainedElement(pNextElem, chainedElements); - delete mpCrntDir; - mpCrntDir = new UBLibElement(pElem); - // Display the content of the folder - QList qlElems = mLibraryController->getContent(mpCrntDir); - mCurrentElems = qlElems; - refreshView(); - } - else - { - if ("application/search" == UBFileSystemUtils::mimeTypeFromFileName(pElem->path().toLocalFile())) - { - emit displaySearchEngine(pElem); - } - else - { - // Display the properties view - emit propertiesRequested(pElem); - } - } - } - emit itemClicked(); - } - mLoadingLibraryItems = false; - } -} - -/** - * \brief Append the given element to the given chain - * @param element as the element to append - * @param toElem as the given chain - */ -void UBLibraryWidget::appendChainedElement(UBChainedLibElement *element, UBChainedLibElement *toElem) -{ - if(NULL != toElem) - { - if(NULL != toElem->nextElement()) - { - appendChainedElement(element, toElem->nextElement()); - } - else - { - toElem->setNextElement(element); - } - } -} - -/** - * \brief Set the current element and refresh the scene - * @param elem as the current element - */ -void UBLibraryWidget::setCurrentElemsAndRefresh(UBChainedLibElement *elem) -{ - if(NULL != elem) - { - UBLibElement* pLibElem = elem->element(); - if(NULL != pLibElem) - { - if(eUBLibElementType_Item != pLibElem->type()) - { - QList qlElements = mLibraryController->getContent(pLibElem); - mCurrentElems = qlElements; - delete mpCrntElem; - mpCrntElem = new UBLibElement(pLibElem); - refreshView(); - delete mpCrntDir; - mpCrntDir = new UBLibElement(pLibElem); - bool bFavorite = false; - if(NULL != mpCrntDir && mLibraryController->favoritePath() == mpCrntDir->path().toLocalFile()) - { - bFavorite = true; - } - emit favoritesEntered(bFavorite); - } - } - } -} - -/** - * \brief Handles the selection changed event - */ -void UBLibraryWidget::onSelectionChanged() -{ - // Get the selected items - QList qlSelectedItems; - QList qlGI = selectedItems(); - - bCanDrag = true; - foreach(QGraphicsItem* it, qlGI) - { - int itIndex = mGraphicItems.indexOf(it); - if(0 <= itIndex) - { - UBLibElement* pElem = mCurrentElems.at(itIndex); - if(NULL != pElem) - { - if(eUBLibElementType_Category != pElem->type() && eUBLibElementType_VirtualFolder != pElem->type()) { - qlSelectedItems << pElem; - } - - if(!pElem->isMoveable()) - { - bCanDrag = false; - } - } - } - } - - // Check if we are in the trash folder - bool bInTrash = false; - if(NULL != mpCrntDir) - { - if("Trash" == mpCrntDir->name()) - { - bInTrash = true; - } - } - - // Send the signal with these items - emit itemsSelected(qlSelectedItems, bInTrash); -} - -/** - * \brief Handle the delete done event - */ -void UBLibraryWidget::onRefreshCurrentFolder() -{ - // Refresh the current view - mCurrentElems = mLibraryController->getContent(mpCrntDir); - refreshView(); -} - -/** - * \brief Handles the drag enter event - * @param event as the drag enter event - */ -void UBLibraryWidget::dragEnterEvent(QDragEnterEvent *event) -{ - event->acceptProposedAction(); -} - -/** - * \brief Handles the drag move event - * @param event as the drag move event - */ -void UBLibraryWidget::dragMoveEvent(QDragMoveEvent *event) -{ - UBLibElement* pElem = elementAt(event->pos()); - if(NULL != pElem) - { - // We can only drop an item into a folder - if(eUBLibElementType_Folder == pElem->type() || - eUBLibElementType_VirtualFolder == pElem->type()) - { - event->acceptProposedAction(); - } - } -} - -void UBLibraryWidget::onDropMe(const QMimeData *_data) -{ - Q_UNUSED(_data); -} - -/** - * \brief Handles the drop event - * @param event as the drop event - */ -void UBLibraryWidget::dropEvent(QDropEvent *event) -{ - const QMimeData* pMimeData = event->mimeData(); - if(event->source() == this){ - event->accept(); - - // Get the destination item - UBLibElement* pElem = elementAt(event->pos()); - if(NULL != pElem){ - if(eUBLibElementType_Folder == pElem->type()){ - // 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(); - } - - if(!qlDroppedElems.empty()) - onElementsDropped(qlDroppedElems, pElem); - } - } - } - else{ - bool bDropAccepted = false; - - // We must check the URLs first because an image dropped from the web can contains the image datas, as well as the URLs - // and if we want to display the download widget in order to make the user wait for the end of the download, we need - // to check the URLs first! - if (pMimeData->hasUrls()){ - QList urlList = pMimeData->urls(); - for (int i = 0; i < urlList.size() && i < 32; ++i){ - QString crntPath = urlList.at(i).toString(); - mLibraryController->importItemOnLibrary(crntPath); - bDropAccepted = true; - } - } - // When an HTML is present, it means that we dropped something from the web. Normally, the HTML contains the element - // of the webpage and has a 'src' attribute containing the URL of the web ressource. Here we are looking for this - // 'src' attribute, get its value and download the ressource from this URL. - if (!bDropAccepted && pMimeData->hasHtml()){ - QString html = pMimeData->html(); - QString url = UBApplication::urlFromHtml(html); - if("" != url){ - mLibraryController->importItemOnLibrary(url); - bDropAccepted = true; - } - } - if (!bDropAccepted && pMimeData->hasText()){ - // On linux external dragged element are considered as text; - QString filePath = QUrl(pMimeData->text()).toLocalFile(); - if("" != filePath){ - mLibraryController->importItemOnLibrary(filePath); - bDropAccepted = true; - } - else{ -#ifdef Q_WS_MACX - // With Safari, in 95% of the drops, the mime datas are hidden in Apple Web Archive pasteboard type. - // This is due to the way Safari is working so we have to dig into the pasteboard in order to retrieve - // the data. - QString qsUrl = UBPlatformUtils::urlFromClipboard(); - if("" != qsUrl){ - // We finally got the url of the dropped ressource! Let's import it! - mLibraryController->importItemOnLibrary(qsUrl); - bDropAccepted = true; - } -#endif - } - } - if (!bDropAccepted && pMimeData->hasImage()){ - QImage image = qvariant_cast(pMimeData->imageData()); - mLibraryController->importImageOnLibrary(image); - bDropAccepted = true; - } - - if(bDropAccepted){ - onRefreshCurrentFolder(); -#ifdef Q_WS_MACX - event->acceptProposedAction(); -#else - event->accept(); -#endif - } - else{ - event->ignore(); - } - } -} - -/** - * \brief Get the element at the given position - * @param p as the given position - * @return a pointer on the related element - */ -UBLibElement* UBLibraryWidget::elementAt(QPoint p) -{ - QGraphicsItem* pItem = itemAt(p); - if(NULL != pItem) - { - int iItem = mGraphicItems.indexOf(pItem); - if(-1 != iItem) - { - return mCurrentElems.at(iItem); - } - } - - // If no element is found, return NULL - return NULL; -} - - -/** - * \brief Get the element from the given name - * @param name as the given element name - * @return the UBLibElement related to the given name - */ -UBLibElement* UBLibraryWidget::elementFromFilePath(const QString &filePath) -{ - UBLibElement* pElem = NULL; - - foreach(UBLibElement* elem, mCurrentElems) - { - if(elem->path().toLocalFile() == QUrl(filePath).toLocalFile()) - { - return elem; - } - - } - - return pElem; -} - - -/** - * \brief Update the thumbnails size - * @param newSize as the thumbnail size - */ -void UBLibraryWidget::updateThumbnailsSize(int newSize) -{ - setThumbnailWidth(newSize); - refreshView(); -} - -/** - * \brief Handles the element dropped event - * @param elements as the list of dropped elements - * @param target as the drop target - */ -void UBLibraryWidget::onElementsDropped(QList elements, UBLibElement *target) -{ - if(target != mpCrntDir) - { - QList qlElements; - - foreach(QString qsElem, elements) - qlElements << elementFromFilePath(qsElem); - - mLibraryController->moveContent(qlElements, target); - mCurrentElems = mLibraryController->getContent(mpCrntDir); - refreshView(); - } -} - -/** - * \brief Search the element related to the given text - * @param elem as the searched element name - */ -void UBLibraryWidget::onSearchElement(QString elem) -{ - // Store the original list of items - mOrigCurrentElems = mLibraryController->getContent(mpCrntDir); - - // Build the filtered list - mCurrentElems.clear(); - if(elem.isEmpty()) - { - mCurrentElems = mOrigCurrentElems; - } - else - { - foreach(UBLibElement* ubLibElem, mOrigCurrentElems) - { - if(ubLibElem->name().toLower().contains(elem.toLower())) - { - mCurrentElems << ubLibElem; - } - } - } - refreshView(); -} - -/** - * \brief Create a new folder - */ -void UBLibraryWidget::onNewFolderToCreate() -{ - // Create here a dialog asking the name of the new folder - UBNewFolderDlg dlg; - if(QDialog::Accepted == dlg.exec()) - { - mLibraryController->createNewFolder(dlg.folderName(), mpCrntElem); - onRefreshCurrentFolder(); - } -} - -/** - * \brief Constructor - * @param parent as the parent widget - * @param name as the object name - */ -UBNewFolderDlg::UBNewFolderDlg(QWidget *parent, const char *name):QDialog(parent) - , mpLabel(NULL) - , mpLineEdit(NULL) - , mpButtons(NULL) - , mpAddButton(NULL) - , mpCancelButton(NULL) - , mpLayout(NULL) -{ - setObjectName(name); - setWindowTitle(tr("Add new folder")); - setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint); - mpLabel = new QLabel(tr("New Folder name:"),this); - mpLineEdit = new QLineEdit(this); - mpAddButton = new QPushButton(tr("Add")); - mpAddButton->setDefault(true); - - mpCancelButton = new QPushButton(tr("Cancel")); - mpCancelButton->setAutoDefault(false); - - mpButtons = new QDialogButtonBox(Qt::Horizontal, this); - mpLayout = new QVBoxLayout(this); - setLayout(mpLayout); - - mpLayout->addWidget(mpLabel, 1); - mpLayout->addWidget(mpLineEdit); - - mpButtons->addButton(mpAddButton,QDialogButtonBox::ActionRole); - mpButtons->addButton(mpCancelButton,QDialogButtonBox::ActionRole); - mpLayout->addWidget(mpButtons, 1,Qt::AlignJustify); - - connect(mpAddButton, SIGNAL(clicked()), this, SLOT(accept())); - connect(mpCancelButton, SIGNAL(clicked()), this, SLOT(reject())); - connect(mpLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(text_Changed(const QString &))); - connect(mpLineEdit, SIGNAL(textEdited(const QString &)), this, SLOT(text_Edited(const QString &))); - - setMaximumHeight(100); - setMinimumHeight(100); -} - -/** - * \brief Destructor - */ -UBNewFolderDlg::~UBNewFolderDlg() -{ - if(NULL != mpAddButton) - { - delete mpAddButton; - mpAddButton = NULL; - } - - if(NULL != mpCancelButton) - { - delete mpCancelButton; - mpCancelButton = NULL; - } - if(NULL != mpButtons) - { - delete mpButtons; - mpButtons = NULL; - } - if(NULL != mpLineEdit) - { - delete mpLineEdit; - mpLineEdit = NULL; - } - if(NULL != mpLabel) - { - delete mpLabel; - mpLabel = NULL; - } - - if(NULL != mpLayout) - { - delete mpLayout; - mpLayout = NULL; - } -} - -/** - * \brief Get the folder name - * @return the entered folder name - */ -QString UBNewFolderDlg::folderName() -{ - return mpLineEdit->text(); -} - -void UBNewFolderDlg::text_Changed(const QString &newText) -{ - Q_UNUSED(newText); -} - -/* -http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx - -< (less than) -> (greater than) -: (colon) -" (double quote) -/ (forward slash) -\ (backslash) // Note: The C++ compiler transforms backslashes in strings. To include a \ in a regexp, enter it twice, i.e. \\. To match the backslash character itself, enter it four times, i.e. \\\\. -| (vertical bar or pipe) -? (question mark) -* (asterisk) - -*/ - -void UBNewFolderDlg::text_Edited(const QString &newText) -{ - - QString new_text = newText; - -#ifdef Q_WS_WIN // Defined on Windows. - QString illegalCharList(" < > : \" / \\ | ? * "); - QRegExp regExp("[<>:\"/\\\\|?*]"); -#endif - -#ifdef Q_WS_QWS // Defined on Qt for Embedded Linux. - QString illegalCharList(" < > : \" / \\ | ? * "); - QRegExp regExp("[<>:\"/\\\\|?*]"); -#endif - -#ifdef Q_WS_MAC // Defined on Mac OS X. - QString illegalCharList(" < > : \" / \\ | ? * "); - QRegExp regExp("[<>:\"/\\\\|?*]"); -#endif - -#ifdef Q_WS_X11 // Defined on X11. - QString illegalCharList(" < > : \" / \\ | ? * "); - QRegExp regExp("[<>:\"/\\\\|?*]"); -#endif - - if(new_text.indexOf(regExp) > -1) - { - new_text.remove(regExp); - mpLineEdit->setText(new_text); - QToolTip::showText(mpLineEdit->mapToGlobal(QPoint()), "A file name can`t contain any of the following characters:\r\n"+illegalCharList); - } -} - -void UBLibraryWidget::onAddDownloadedFileToLibrary(bool pSuccess, QUrl sourceUrl, QString pContentHeader, QByteArray pData) -{ - Q_UNUSED(pContentHeader); - if(pSuccess) - { - QString urlString = sourceUrl.toString(); - mLibraryController->routeDataItem(urlString, pData); - } -} - -void UBLibraryWidget::onDisplayMetadata(QMap metadatas) -{ - mpTmpElem = new UBLibElement(); - mpTmpElem->setMetadata(metadatas); - mpTmpElem->setPath(QUrl(metadatas["Url"])); - - // As the content comes from the web (and need a download), we will not display its thumbnail. - mpTmpElem->setThumbnail(QImage(":images/libpalette/notFound.png")); - - // Display the properties view - emit propertiesRequested(mpTmpElem); -} diff --git a/src/gui/UBLibraryWidget.h b/src/gui/UBLibraryWidget.h deleted file mode 100644 index bb655317..00000000 --- a/src/gui/UBLibraryWidget.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#ifndef UBLIBRARYWIDGET_H -#define UBLIBRARYWIDGET_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "UBThumbnailWidget.h" -#include "board/UBLibraryController.h" - -class UBLibraryController; -class UBChainedLibElement; -class UBLibElement; - -class UBLibraryWidget : public UBThumbnailWidget -{ - Q_OBJECT -public: - UBLibraryWidget(QWidget* parent=0, const char* name="UBLibraryWidget"); - ~UBLibraryWidget(); - - UBChainedLibElement* chainedElements; - void setCurrentElemsAndRefresh(UBChainedLibElement* elem); - - void updateThumbnailsSize(int newSize); - void init(); - - UBLibraryController* libraryController() {return mLibraryController;} - bool isLoadingLibraryItems() const { return mLoadingLibraryItems; } - -public slots: - void onRefreshCurrentFolder(); - void onElementsDropped(QList elements, UBLibElement* target); - void onSearchElement(QString elem); - void onNewFolderToCreate(); - void onDropMe(const QMimeData* _data); - void onAddDownloadedFileToLibrary(bool pSuccess, QUrl sourceUrl, QString pContentHeader, QByteArray pData); - -signals: - void navigBarUpdate(UBLibElement* pElem); - void itemsSelected(QList elemList, bool inTrash); - void propertiesRequested(UBLibElement* pElem); - void displaySearchEngine(UBLibElement* pElem); - void favoritesEntered(bool bFav); - void itemClicked(); - -protected: - void dragEnterEvent(QDragEnterEvent *event); - void dragMoveEvent(QDragMoveEvent *event); - void dropEvent(QDropEvent *event); - -private slots: - void onItemClicked(QGraphicsItem* pItem, int index); - void onSelectionChanged(); - void onDisplayMetadata(QMap metadatas); - - -private: - - void refreshView(); - void generateItems(); - void appendChainedElement(UBChainedLibElement* element, UBChainedLibElement* toElem); - - UBLibElement* elementAt(QPoint p); - UBLibElement* elementFromFilePath(const QString& filePath); - UBLibraryController* mLibraryController; - - UBLibElement* mpCrntDir; - UBLibElement* mpCrntElem; - UBLibElement* mpTmpElem; - QList mCurrentElems; - QList mOrigCurrentElems; - QList mItems; - bool mLoadingLibraryItems; -}; - -class UBNewFolderDlg : public QDialog -{ - Q_OBJECT - -public: - UBNewFolderDlg(QWidget* parent=0, const char* name="NewFolderDlg"); - ~UBNewFolderDlg(); - - QString folderName(); - -public slots: - void text_Changed(const QString &); - void text_Edited(const QString &); - - -private: - QLabel* mpLabel; - QLineEdit* mpLineEdit; - QDialogButtonBox* mpButtons; - QPushButton* mpAddButton; - QPushButton* mpCancelButton; - QVBoxLayout* mpLayout; -}; - -#endif // UBLIBRARYWIDGET_H diff --git a/src/gui/gui.pri b/src/gui/gui.pri index 61583d04..9fa8c3dc 100644 --- a/src/gui/gui.pri +++ b/src/gui/gui.pri @@ -30,11 +30,6 @@ HEADERS += src/gui/UBThumbnailView.h \ src/gui/UBDocumentNavigator.h \ src/gui/UBDockPalette.h \ src/gui/UBPropertyPalette.h \ - src/gui/UBLibNavigatorWidget.h \ - src/gui/UBLibItemProperties.h \ - src/gui/UBLibActionBar.h \ - src/gui/UBLibraryWidget.h \ - src/gui/UBLibPathViewer.h \ src/gui/UBUpdateDlg.h \ src/gui/UBDockPaletteWidget.h \ src/gui/UBLeftPalette.h \ @@ -84,20 +79,13 @@ SOURCES += src/gui/UBThumbnailView.cpp \ src/gui/UBDocumentNavigator.cpp \ src/gui/UBDockPalette.cpp \ src/gui/UBPropertyPalette.cpp \ - src/gui/UBLibNavigatorWidget.cpp \ - src/gui/UBLibItemProperties.cpp \ - src/gui/UBLibActionBar.cpp \ - src/gui/UBLibraryWidget.cpp \ - src/gui/UBLibPathViewer.cpp \ src/gui/UBUpdateDlg.cpp \ src/gui/UBDockPaletteWidget.cpp \ src/gui/UBLeftPalette.cpp \ src/gui/UBRightPalette.cpp \ src/gui/UBPageNavigationWidget.cpp \ - src/gui/UBLibWidget.cpp \ src/gui/UBMagnifer.cpp \ src/gui/UBCachePropertiesWidget.cpp \ - src/gui/UBLibWebView.cpp \ src/gui/UBDownloadWidget.cpp \ src/gui/UBDockDownloadWidget.cpp \ src/gui/UBFeaturesWidget.cpp \