#include #include #include "core/UBApplication.h" #include "board/UBBoardController.h" #include "UBFeaturesController.h" #include "core/UBSettings.h" #include "tools/UBToolsManager.h" #include "frameworks/UBFileSystemUtils.h" #include "frameworks/UBPlatformUtils.h" #include "core/UBDownloadManager.h" #include "domain/UBAbstractWidget.h" #include "domain/UBGraphicsScene.h" #include "domain/UBGraphicsSvgItem.h" #include "domain/UBGraphicsPixmapItem.h" #include "domain/UBGraphicsVideoItem.h" #include "domain/UBGraphicsWidgetItem.h" UBFeature::UBFeature(const QString &url, const QPixmap &icon, const QString &name, const QString &realPath, UBFeatureElementType type) : virtualPath(url), mThumbnail(icon), mName(name), mPath(realPath), elementType(type) { } UBFeature::UBFeature(const UBFeature &f) { virtualPath = f.getUrl(); mPath = f.getFullPath(); mThumbnail = f.getThumbnail(); mName = f.getName(); elementType = f.getType(); } UBFeaturesController::UBFeaturesController(QWidget *pParentWidget) : QObject(pParentWidget), mLastItemOffsetIndex(0) { rootPath = "/root"; initDirectoryTree(); } void UBFeaturesController::initDirectoryTree() { mUserAudioDirectoryPath = UBSettings::settings()->userAudioDirectory(); mUserVideoDirectoryPath = UBSettings::settings()->userVideoDirectory(); mUserPicturesDirectoryPath = UBSettings::settings()->userImageDirectory(); mUserInteractiveDirectoryPath = UBSettings::settings()->userInteractiveDirectory(); mUserAnimationDirectoryPath = UBSettings::settings()->userAnimationDirectory(); mLibPicturesDirectoryPath = UBSettings::settings()->applicationImageLibraryDirectory(); mLibInteractiveDirectoryPath = UBSettings::settings()->applicationInteractivesDirectory(); mLibApplicationsDirectoryPath = UBSettings::settings()->applicationApplicationsLibraryDirectory(); mLibShapesDirectoryPath = UBSettings::settings()->applicationShapeLibraryDirectory() ; featuresList = new QVector (); QList tools = UBToolsManager::manager()->allTools(); featuresList->push_back( UBFeature( "", QPixmap( ":images/libpalette/home.png" ), "root", "" ) ); appPath = rootPath + "/Applications"; audiosPath = rootPath + "/Audios"; moviesPath = rootPath + "/Movies"; picturesPath = rootPath + "/Pictures"; flashPath = rootPath + "/Animations"; interactPath = rootPath + "/Interactivities"; shapesPath = rootPath + "/Shapes"; featuresList->push_back( UBFeature( rootPath, QPixmap(":images/libpalette/AudiosCategory.svg"), "Audios" , mUserAudioDirectoryPath ) ); featuresList->push_back( UBFeature( rootPath, QPixmap(":images/libpalette/MoviesCategory.svg"), "Movies" , mUserVideoDirectoryPath ) ); featuresList->push_back( UBFeature( rootPath, QPixmap(":images/libpalette/PicturesCategory.svg"), "Pictures" , mUserPicturesDirectoryPath ) ); featuresList->push_back( UBFeature( rootPath, QPixmap(":images/libpalette/ApplicationsCategory.svg"), "Applications" , mUserInteractiveDirectoryPath ) ); featuresList->push_back( UBFeature( rootPath, QPixmap(":images/libpalette/FlashCategory.svg"), "Animations" , mUserAnimationDirectoryPath ) ); featuresList->push_back( UBFeature( rootPath, QPixmap(":images/libpalette/InteractivesCategory.svg"), "Interactivities" , mLibInteractiveDirectoryPath ) ); featuresList->push_back( UBFeature( rootPath, QPixmap(":images/libpalette/ShapesCategory.svg"), "Shapes" , mLibShapesDirectoryPath ) ); foreach (UBToolsManager::UBToolDescriptor tool, tools) { featuresList->push_back( UBFeature( appPath, tool.icon, tool.label, mUserInteractiveDirectoryPath, FEATURE_INTERACTIVE ) ); } fileSystemScan( mUserInteractiveDirectoryPath, appPath ); fileSystemScan( mUserAudioDirectoryPath, audiosPath ); fileSystemScan( mUserPicturesDirectoryPath, picturesPath ); fileSystemScan( mUserVideoDirectoryPath, moviesPath ); fileSystemScan( mUserAnimationDirectoryPath, flashPath ); fileSystemScan( mLibApplicationsDirectoryPath, appPath ); fileSystemScan( mLibPicturesDirectoryPath, picturesPath ); fileSystemScan( mLibShapesDirectoryPath, shapesPath ); fileSystemScan( mLibInteractiveDirectoryPath, interactPath ); } void UBFeaturesController::fileSystemScan(const QString & currentPath, const QString & currVirtualPath) { QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(currentPath); QFileInfoList::iterator fileInfo; for ( fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end(); fileInfo += 1) { UBFeatureElementType fileType = fileInfo->isDir() ? FEATURE_FOLDER : FEATURE_ITEM; QString fileName = fileInfo->fileName(); if ( UBFileSystemUtils::mimeTypeFromFileName(fileName).contains("application") ) { fileType = FEATURE_INTERACTIVE; } QString itemName = (fileType != FEATURE_ITEM) ? fileName : fileInfo->completeBaseName(); QPixmap icon = QPixmap(":images/libpalette/soundIcon.svg"); QString fullFileName = fileInfo->filePath(); if ( fileType == FEATURE_FOLDER ) { icon = QPixmap(":images/libpalette/folder.svg"); } else if ( fileType == FEATURE_INTERACTIVE ) { icon = QPixmap( UBAbstractWidget::iconFilePath( QUrl::fromLocalFile(fullFileName) ) ); } else { if ( fullFileName.contains(".thumbnail.") ) continue; icon = thumbnailForFile( fullFileName ); /*QString thumbnailPath = UBFileSystemUtils::thumbnailPath( fullFileName ); if (QFileInfo( thumbnailPath).exists() ) icon = QPixmap( thumbnailPath ); else icon = createThumbnail( fullFileName );*/ } featuresList->push_back( UBFeature( currVirtualPath, icon, fileName, fullFileName, fileType ) ); if ( fileType == FEATURE_FOLDER ) { fileSystemScan( fullFileName, currVirtualPath + "/" + fileName ); } } } QPixmap UBFeaturesController::thumbnailForFile(const QString &path) { QPixmap thumb; QString thumbnailPath = UBFileSystemUtils::thumbnailPath( path ); if ( QFileInfo( thumbnailPath ).exists() ) thumb = QPixmap( thumbnailPath ); else thumb = createThumbnail( path ); return thumb; } QPixmap UBFeaturesController::createThumbnail(const QString &path) { QString thumbnailPath = UBFileSystemUtils::thumbnailPath(path); QString mimetype = UBFileSystemUtils::mimeTypeFromFileName(path); QString extension = QFileInfo(path).completeSuffix(); //UBApplication::showMessage(tr("Creating image thumbnail for %1.").arg(pElement->name())); if ( mimetype.contains("audio" )) thumbnailPath = ":images/libpalette/soundIcon.svg"; else if ( mimetype.contains("video") ) thumbnailPath = ":images/libpalette/movieIcon.svg"; else { if ( extension.startsWith("svg", Qt::CaseInsensitive) || extension.startsWith("svgz", Qt::CaseInsensitive) ) { thumbnailPath = path; } else { QPixmap pix(path); if (!pix.isNull()) { pix = pix.scaledToWidth(qMin(UBSettings::maxThumbnailWidth, pix.width()), Qt::SmoothTransformation); pix.save(thumbnailPath); UBPlatformUtils::hideFile(thumbnailPath); } else{ thumbnailPath = ":images/libpalette/notFound.png"; } } } return QPixmap(thumbnailPath); } void UBFeaturesController::addItemToPage(const UBFeature &item) { UBApplication::boardController->downloadURL( QUrl::fromLocalFile( item.getFullPath() ) ); } UBFeature UBFeaturesController::moveItemToFolder( const QUrl &url, const UBFeature &destination ) { UBFeature newElement = copyItemToFolder( url, destination ); QString sourcePath = url.toLocalFile(); QFile::remove( sourcePath ); QString thumbnailPath = UBFileSystemUtils::thumbnailPath( sourcePath ); if (thumbnailPath.length() && QFileInfo( thumbnailPath ).exists()) { QFile::remove(thumbnailPath); } return newElement; /*QString sourcePath = url.toLocalFile(); Q_ASSERT( QFileInfo( sourcePath ).exists() ); QString name = QFileInfo( sourcePath ).fileName(); QString destPath = destination.getFullPath(); QString destVirtualPath = destination.getUrl() + "/" + destination.getName(); QString newFullPath = destPath + "/" + name; QFile( sourcePath ).copy( newFullPath ); QFile::remove( sourcePath ); QString thumbnailPath = UBFileSystemUtils::thumbnailPath( sourcePath ); if (thumbnailPath.length() && QFileInfo( thumbnailPath ).exists()) { QFile::remove(thumbnailPath); } QPixmap thumb = thumbnailForFile( newFullPath ); UBFeatureElementType type = UBFeatureElementType::FEATURE_ITEM; if ( UBFileSystemUtils::mimeTypeFromFileName( newFullPath ).contains("application") ) type = UBFeatureElementType::FEATURE_INTERACTIVE; UBFeature newElement( destVirtualPath, thumb, name, destPath, type ); return newElement;*/ } UBFeature UBFeaturesController::copyItemToFolder( const QUrl &url, const UBFeature &destination ) { QString sourcePath = url.toLocalFile(); Q_ASSERT( QFileInfo( sourcePath ).exists() ); QString name = QFileInfo( sourcePath ).fileName(); QString destPath = destination.getFullPath(); QString destVirtualPath = destination.getUrl() + "/" + destination.getName(); QString newFullPath = destPath + "/" + name; QFile( sourcePath ).copy( newFullPath ); QPixmap thumb = thumbnailForFile( newFullPath ); UBFeatureElementType type = UBFeatureElementType::FEATURE_ITEM; if ( UBFileSystemUtils::mimeTypeFromFileName( newFullPath ).contains("application") ) type = UBFeatureElementType::FEATURE_INTERACTIVE; UBFeature newElement( destVirtualPath, thumb, name, newFullPath, type ); return newElement; } /* void UBFeaturesController::addImageToCurrentPage( const QString &path ) { QPointF pos = UBApplication::boardController->activeScene()->normalizedSceneRect().center(); mLastItemOffsetIndex = qMin(mLastItemOffsetIndex, 5); QGraphicsItem* itemInScene = 0; if ( UBApplication::boardController->activeScene() ) { QString mimeType = UBFileSystemUtils::mimeTypeFromFileName( path ); 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 = UBApplication::boardController->activeScene()->addSvg( QUrl::fromLocalFile(path), pos ); } else { itemInScene = UBApplication::boardController->activeScene()->addPixmap( QPixmap(path), pos ); } } if (itemInScene) { itemInScene = UBApplication::boardController->activeScene()->scaleToFitDocumentSize(itemInScene, false, UBSettings::objectInControlViewMargin); } } */ UBFeaturesController::~UBFeaturesController() { }