From 0467211997412b36d4da89b1b781ea76bcfec5bc Mon Sep 17 00:00:00 2001 From: Ilia Ryabokon Date: Wed, 1 Aug 2012 21:27:10 +0300 Subject: [PATCH] AddToPalette Sankore-621 External DnD for UBFeaturesWidget resolved --- src/board/UBBoardPaletteManager.cpp | 4 + src/board/UBFeaturesController.cpp | 219 ++++++++++++++++------------ src/board/UBFeaturesController.h | 14 +- src/gui/UBFeaturesWidget.cpp | 27 +++- src/gui/UBFeaturesWidget.h | 1 + src/gui/UBTeacherGuideWidget.cpp | 2 +- 6 files changed, 159 insertions(+), 108 deletions(-) diff --git a/src/board/UBBoardPaletteManager.cpp b/src/board/UBBoardPaletteManager.cpp index afa2ccf1..0832888c 100644 --- a/src/board/UBBoardPaletteManager.cpp +++ b/src/board/UBBoardPaletteManager.cpp @@ -884,6 +884,10 @@ void UBBoardPaletteManager::addItemToLibrary() #ifdef USE_WEB_WIDGET mpLibWidget->libNavigator()->libraryWidget()->libraryController()->importImageOnLibrary(image); +#else + QDateTime now = QDateTime::currentDateTime(); + QString capturedName = tr("CapturedImage") + "-" + now.toString("dd-MM-yyyy hh-mm-ss") + ".png"; + mpFeaturesWidget->importImage(image, capturedName); #endif } diff --git a/src/board/UBFeaturesController.cpp b/src/board/UBFeaturesController.cpp index 6a597736..3ba4f644 100644 --- a/src/board/UBFeaturesController.cpp +++ b/src/board/UBFeaturesController.cpp @@ -108,8 +108,6 @@ UBFeaturesController::UBFeaturesController(QWidget *pParentWidget) : mLibSearchDirectoryPath =QUrl::fromLocalFile(UBSettings::settings()->userSearchDirectory()); trashDirectoryPath = QUrl::fromLocalFile(UBSettings::userTrashDirPath()); - - rootElement = UBFeature(QString(), QPixmap( ":images/libpalette/home.png" ), "root", QUrl()); audiosElement = UBFeature( rootPath, QPixmap(":images/libpalette/AudiosCategory.svg"), "Audios" , mUserAudioDirectoryPath, FEATURE_CATEGORY); moviesElement = UBFeature( rootPath, QPixmap(":images/libpalette/MoviesCategory.svg"), "Movies" , mUserVideoDirectoryPath, FEATURE_CATEGORY); @@ -167,15 +165,12 @@ void UBFeaturesController::scanFS() QList tools = UBToolsManager::manager()->allTools(); - foreach (UBToolsManager::UBToolDescriptor tool, tools) - { - featuresList->append( UBFeature( appPath, tool.icon, tool.label, QUrl( tool.id ), FEATURE_INTERNAL ) ); - if ( favoriteSet->find( QUrl( tool.id ) ) != favoriteSet->end() ) - { - featuresList->append( UBFeature( favoritePath, tool.icon, tool.label, QUrl( tool.id ), FEATURE_INTERNAL ) ); + foreach (UBToolsManager::UBToolDescriptor tool, tools) { + featuresList->append(UBFeature(appPath, tool.icon, tool.label, QUrl(tool.id), FEATURE_INTERNAL)); + if (favoriteSet->find(QUrl(tool.id)) != favoriteSet->end()) { + featuresList->append(UBFeature(favoritePath, tool.icon, tool.label, QUrl(tool.id), FEATURE_INTERNAL)); } } - //Claudio: // don't change the order of the scans fileSystemScan( mLibAudiosDirectoryPath, audiosPath); @@ -194,7 +189,6 @@ void UBFeaturesController::scanFS() fileSystemScan( mLibInteractiveDirectoryPath, interactPath ); fileSystemScan( trashDirectoryPath, trashPath ); fileSystemScan( mLibSearchDirectoryPath, rootPath + "/" + "Web search" ); - } void UBFeaturesController::fileSystemScan(const QUrl & currentPath, const QString & currVirtualPath) @@ -202,63 +196,28 @@ void UBFeaturesController::fileSystemScan(const QUrl & currentPath, const QStrin QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(currentPath.toLocalFile()); QFileInfoList::iterator fileInfo; - for ( fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end(); fileInfo += 1) - { - UBFeatureElementType fileType = fileInfo->isDir() ? FEATURE_FOLDER : FEATURE_ITEM; - + for ( fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end(); fileInfo += 1) { + QString fullFileName = fileInfo->absoluteFilePath(); + UBFeatureElementType featureType = fileTypeFromUrl(fullFileName); QString fileName = fileInfo->fileName(); - if ( UBFileSystemUtils::mimeTypeFromFileName(fileName).contains("application") ) - { - if ( UBFileSystemUtils::mimeTypeFromFileName(fileName).contains("application/search") ) - { - fileType = FEATURE_SEARCH; - } - else - 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 );*/ - } - UBFeature testFeature(currVirtualPath, icon, fileName, QUrl::fromLocalFile(fullFileName), fileType); + QPixmap icon(getIcon(fullFileName, featureType)); - if (featuresList->contains(testFeature)) { - qDebug() << "the same feature found"; - } + if ( fullFileName.contains(".thumbnail.")) + continue; + + UBFeature testFeature(currVirtualPath, icon, fileName, QUrl::fromLocalFile(fullFileName), featureType); featuresList->append(testFeature); - if ( favoriteSet->find( QUrl::fromLocalFile( fullFileName ) ) != favoriteSet->end() ) - { - featuresList->append( UBFeature( favoritePath, icon, fileName, QUrl::fromLocalFile( fullFileName ), fileType ) ); - } - if ( fileType == FEATURE_FOLDER ) - { - fileSystemScan( QUrl::fromLocalFile( fullFileName ), currVirtualPath + "/" + fileName ); + if ( favoriteSet->find( QUrl::fromLocalFile( fullFileName ) ) != favoriteSet->end() ) { + featuresList->append( UBFeature( favoritePath, icon, fileName, QUrl::fromLocalFile( fullFileName ), featureType ) ); } - } + if (featureType == FEATURE_FOLDER) { + fileSystemScan(QUrl::fromLocalFile(fullFileName), currVirtualPath + "/" + fileName); + } + } } void UBFeaturesController::loadFavoriteList() @@ -301,7 +260,7 @@ void UBFeaturesController::addToFavorite( const QUrl &path ) { QFileInfo fileInfo( filePath ); QString fileName = fileInfo.fileName(); - UBFeature elem( favoritePath, thumbnailForFile( filePath ), fileName, path, fileTypeFromUrl(filePath) ); + UBFeature elem( favoritePath, getIcon( filePath, FEATURE_CATEGORY ), fileName, path, fileTypeFromUrl(filePath) ); favoriteSet->insert( path ); saveFavoriteList(); @@ -335,44 +294,63 @@ QString UBFeaturesController::fileNameFromUrl( const QUrl &url ) UBFeatureElementType UBFeaturesController::fileTypeFromUrl( const QString &path ) { - QFileInfo fileInfo( path ); - QString fileName = fileInfo.fileName(); + QFileInfo fileInfo(path); - UBFeatureElementType fileType = fileInfo.isDir() ? FEATURE_FOLDER : FEATURE_ITEM; - if ( UBFileSystemUtils::mimeTypeFromFileName(fileName).contains("application") ) - { - fileType = FEATURE_INTERACTIVE; - } - else if ( path.contains("uniboardTool://") ) - { + if (!fileInfo.exists()) { + return FEATURE_INVALID; + } + + QString fileName = fileInfo.fileName(); + QString mimeString = UBFileSystemUtils::mimeTypeFromFileName(fileName); + + UBFeatureElementType fileType = fileInfo.isDir() ? FEATURE_FOLDER : FEATURE_ITEM; + + if ( mimeString.contains("application")) { + if (mimeString.contains("application/search")) { + fileType = FEATURE_SEARCH; + } else { + fileType = FEATURE_INTERACTIVE; + } + } else if ( path.contains("uniboardTool://")) { fileType = FEATURE_INTERNAL; } + return fileType; } -QPixmap UBFeaturesController::thumbnailForFile(const QString &path) +QPixmap UBFeaturesController::getIcon(const QString &path, UBFeatureElementType pFType = FEATURE_INVALID) { - if ( path.contains("uniboardTool://") ) - { + if ( pFType == FEATURE_FOLDER ) + { + return QPixmap(":images/libpalette/folder.svg"); + } + else if ( pFType == FEATURE_INTERACTIVE ) + { + return QPixmap( UBAbstractWidget::iconFilePath( QUrl::fromLocalFile(path) ) ); + } + + + if ( path.contains("uniboardTool://") ) + { return QPixmap( UBToolsManager::manager()->iconFromToolId(path) ); } if ( UBFileSystemUtils::mimeTypeFromFileName(path).contains("application") ) - { + { return QPixmap( UBAbstractWidget::iconFilePath( QUrl::fromLocalFile(path) ) ); } QPixmap thumb; - QString thumbnailPath = UBFileSystemUtils::thumbnailPath( path ); + QString thumbnailPath = UBFileSystemUtils::thumbnailPath( path ); - if ( QFileInfo( thumbnailPath ).exists() ) - thumb = QPixmap( thumbnailPath ); - else thumb = createThumbnail( path ); - return thumb; + if ( QFileInfo( thumbnailPath ).exists() ) + thumb = QPixmap( thumbnailPath ); + else thumb = createThumbnail( path ); + return thumb; } bool UBFeaturesController::isDeletable( const QUrl &url ) { - UBFeatureElementType type = fileTypeFromUrl( fileNameFromUrl(url) ); + UBFeatureElementType type = fileTypeFromUrl( fileNameFromUrl(url) ); return type == FEATURE_ITEM; } @@ -411,10 +389,18 @@ QPixmap UBFeaturesController::createThumbnail(const QString &path) return QPixmap(thumbnailPath); } -UBFeature UBFeaturesController::importImage( const QImage &image, const UBFeature &destination ) +void UBFeaturesController::importImage(const QImage &image, const QString &fileName) { - QDateTime now = QDateTime::currentDateTime(); - QString fileName = tr("ImportedImage") + "-" + now.toString("dd-MM-yyyy hh-mm-ss") + ".png"; + importImage(image, currentElement, fileName); +} + +void UBFeaturesController::importImage( const QImage &image, const UBFeature &destination, const QString &fileName ) +{ + QString mFileName = fileName; + if (mFileName.isNull()) { + QDateTime now = QDateTime::currentDateTime(); + mFileName = tr("ImportedImage") + "-" + now.toString("dd-MM-yyyy hh-mm-ss") + ".png"; + } UBFeature dest = destination; @@ -423,13 +409,15 @@ UBFeature UBFeaturesController::importImage( const QImage &image, const UBFeatur dest = picturesElement; } - QString filePath = dest.getFullPath().toLocalFile() + "/" + fileName; + QString filePath = dest.getFullPath().toLocalFile() + "/" + mFileName; image.save(filePath); QPixmap thumb = createThumbnail( filePath ); - return UBFeature( dest.getFullVirtualPath(), thumb, fileName, + UBFeature resultItem = UBFeature( dest.getFullVirtualPath(), thumb, mFileName, QUrl::fromLocalFile( filePath ), FEATURE_ITEM ); - + + featuresModel->addItem(resultItem); + } void UBFeaturesController::addNewFolder(const QString &name) @@ -456,7 +444,7 @@ void UBFeaturesController::addItemAsBackground(const UBFeature &item) UBApplication::boardController->downloadURL( item.getFullPath(), QPointF(), QSize(), true ); } -UBFeature UBFeaturesController::getParentFeatureForUrl( const QUrl &url ) +UBFeature UBFeaturesController::getDestinationFeatureForUrl( const QUrl &url ) { QString mimetype = UBFileSystemUtils::mimeTypeFromFileName( url.toString() ); @@ -478,7 +466,7 @@ UBFeature UBFeaturesController::getParentFeatureForUrl( const QUrl &url ) void UBFeaturesController::addDownloadedFile(const QUrl &sourceUrl, const QByteArray &pData) { - UBFeature dest = getParentFeatureForUrl( sourceUrl ); + UBFeature dest = getDestinationFeatureForUrl( sourceUrl ); if ( dest == UBFeature() ) return; @@ -492,7 +480,7 @@ void UBFeaturesController::addDownloadedFile(const QUrl &sourceUrl, const QByteA file.write(pData); file.close(); - UBFeature downloadedFeature = UBFeature( dest.getFullVirtualPath(), thumbnailForFile( filePath ), + UBFeature downloadedFeature = UBFeature( dest.getFullVirtualPath(), getIcon( filePath ), fileName, QUrl::fromLocalFile(filePath), FEATURE_ITEM); if (downloadedFeature != UBFeature()) { featuresModel->addItem(downloadedFeature); @@ -510,7 +498,7 @@ UBFeature UBFeaturesController::moveItemToFolder( const QUrl &url, const UBFeatu Q_ASSERT( QFileInfo( sourcePath ).exists() ); - UBFeature possibleDest = getParentFeatureForUrl( url ); + UBFeature possibleDest = getDestinationFeatureForUrl( url ); UBFeature dest = destination; @@ -530,7 +518,7 @@ UBFeature UBFeaturesController::moveItemToFolder( const QUrl &url, const UBFeatu deleteItem( url ); } - QPixmap thumb = thumbnailForFile( newFullPath ); + QPixmap thumb = getIcon( newFullPath ); UBFeatureElementType type = FEATURE_ITEM; if ( UBFileSystemUtils::mimeTypeFromFileName( newFullPath ).contains("application") ) @@ -589,7 +577,7 @@ UBFeature UBFeaturesController::copyItemToFolder( const QUrl &url, const UBFeatu Q_ASSERT( QFileInfo( sourcePath ).exists() ); - UBFeature possibleDest = getParentFeatureForUrl( url ); + UBFeature possibleDest = getDestinationFeatureForUrl( url ); UBFeature dest = destination; @@ -599,22 +587,61 @@ UBFeature UBFeaturesController::copyItemToFolder( const QUrl &url, const UBFeatu dest = possibleDest; } - QString name = QFileInfo( sourcePath ).fileName(); + QString name = QFileInfo(sourcePath).fileName(); QString destPath = dest.getFullPath().toLocalFile(); QString destVirtualPath = dest.getFullVirtualPath(); QString newFullPath = destPath + "/" + name; - if ( !sourcePath.compare( newFullPath, Qt::CaseInsensitive ) ) - QFile( sourcePath ).copy( newFullPath ); + if (!sourcePath.compare(newFullPath, Qt::CaseInsensitive)) + QFile(sourcePath).copy(newFullPath); - QPixmap thumb = thumbnailForFile( newFullPath ); + QPixmap thumb = getIcon(newFullPath); UBFeatureElementType type = FEATURE_ITEM; - if ( UBFileSystemUtils::mimeTypeFromFileName( newFullPath ).contains("application") ) + if (UBFileSystemUtils::mimeTypeFromFileName(newFullPath).contains("application")) type = FEATURE_INTERACTIVE; UBFeature newElement( destVirtualPath, thumb, name, QUrl::fromLocalFile( newFullPath ), type ); return newElement; } +void UBFeaturesController::moveExternalData(const QUrl &url, const UBFeature &destination) +{ + QString sourcePath = url.toLocalFile(); + + Q_ASSERT( QFileInfo( sourcePath ).exists() ); + + UBFeature possibleDest = getDestinationFeatureForUrl(url); + + UBFeature dest = destination; + + if ( destination != trashElement && + !destination.getFullVirtualPath().startsWith( possibleDest.getFullVirtualPath(), Qt::CaseInsensitive ) ) + { + dest = possibleDest; + } + + UBFeatureElementType type = fileTypeFromUrl(sourcePath); + + if (type == FEATURE_FOLDER) { + return; + } + + QString name = QFileInfo(sourcePath).fileName(); + QString destPath = dest.getFullPath().toLocalFile(); + QString destVirtualPath = dest.getFullVirtualPath(); + QString newFullPath = destPath + "/" + name; + + if (!sourcePath.compare(newFullPath, Qt::CaseInsensitive) || !UBFileSystemUtils::copy(sourcePath, newFullPath)) { + return; + } + + Q_ASSERT(QFileInfo(newFullPath).exists()); + + QPixmap thumb = getIcon(newFullPath, type); + UBFeature newElement(destVirtualPath, thumb, name, QUrl::fromLocalFile(newFullPath), type); + + featuresModel->addItem(newElement); +} + void UBFeaturesController::deleteItem(const QUrl &url) { QString path = url.toLocalFile(); diff --git a/src/board/UBFeaturesController.h b/src/board/UBFeaturesController.h index 95e97ba0..61d86d02 100644 --- a/src/board/UBFeaturesController.h +++ b/src/board/UBFeaturesController.h @@ -33,7 +33,8 @@ enum UBFeatureElementType FEATURE_ITEM, FEATURE_TRASH, FEATURE_FAVORITE, - FEATURE_SEARCH + FEATURE_SEARCH, + FEATURE_INVALID }; class UBFeature @@ -105,6 +106,7 @@ public: UBFeature moveItemToFolder( const QUrl &url, const UBFeature &destination ); UBFeature copyItemToFolder( const QUrl &url, const UBFeature &destination ); + void moveExternalData(const QUrl &url, const UBFeature &destination); void rescanModel(); void siftElements(const QString &pSiftValue); @@ -120,13 +122,15 @@ public: void addNewFolder(const QString &name); void addToFavorite( const QUrl &path ); void removeFromFavorite(const QUrl &path, bool deleteManualy = false); - UBFeature importImage( const QImage &image, const UBFeature &destination ); + void importImage(const QImage &image, const QString &fileName = QString()); + void importImage( const QImage &image, const UBFeature &destination, const QString &fileName = QString() ); void fileSystemScan(const QUrl &currPath, const QString & currVirtualPath); + static UBFeatureElementType fileTypeFromUrl( const QString &path ); static QString fileNameFromUrl( const QUrl &url ); - static QPixmap thumbnailForFile( const QString &path ); + static QPixmap getIcon( const QString &path, UBFeatureElementType pFType ); static bool isDeletable( const QUrl &url ); static char featureTypeSplitter() {return ':';} @@ -153,7 +157,7 @@ private: void loadFavoriteList(); void saveFavoriteList(); - static UBFeatureElementType fileTypeFromUrl( const QString &path ); + QList *featuresList; @@ -204,7 +208,7 @@ private: public: UBFeature trashElement; - UBFeature getParentFeatureForUrl( const QUrl &url ); + UBFeature getDestinationFeatureForUrl( const QUrl &url ); }; diff --git a/src/gui/UBFeaturesWidget.cpp b/src/gui/UBFeaturesWidget.cpp index c456db03..1fb0ac08 100644 --- a/src/gui/UBFeaturesWidget.cpp +++ b/src/gui/UBFeaturesWidget.cpp @@ -108,6 +108,9 @@ void UBFeaturesWidget::currentSelected(const QModelIndex ¤t) return; } + //Calling to reset the model for listView. Maybe separate function needed + controller->searchStarted("", mNavigator->listView()); + QString objName = sender()->objectName(); if (objName.isEmpty()) { @@ -357,6 +360,10 @@ QStringList UBFeaturesMimeData::formats() const return QMimeData::formats(); } +void UBFeaturesWidget::importImage(const QImage &image, const QString &fileName) +{ + controller->importImage(image, fileName); +} UBFeaturesListView::UBFeaturesListView( QWidget* parent, const char* name ) : QListView(parent) @@ -862,6 +869,8 @@ bool UBFeaturesModel::dropMimeData(const QMimeData *mimeData, Qt::DropAction act Q_UNUSED(row) const UBFeaturesMimeData *fMimeData = qobject_cast(mimeData); + UBFeaturesController *curController = qobject_cast(QObject::parent()); + bool dataFromSameModel = false; if (fMimeData) @@ -876,12 +885,12 @@ bool UBFeaturesModel::dropMimeData(const QMimeData *mimeData, Qt::DropAction act UBFeature parentFeature; if (!parent.isValid()) { - parentFeature = dynamic_cast(QObject::parent())->getFeaturesController()->getCurrentElement(); + parentFeature = curController->getCurrentElement(); } else { parentFeature = parent.data( Qt::UserRole + 1).value(); } - if (mimeData->hasUrls()) { + if (dataFromSameModel) { QList featList = fMimeData->features(); for (int i = 0; i < featList.count(); i++) { UBFeature sourceElement; @@ -890,10 +899,16 @@ bool UBFeaturesModel::dropMimeData(const QMimeData *mimeData, Qt::DropAction act moveData(sourceElement, parentFeature, Qt::MoveAction); } } - } else if ( mimeData->hasImage() ) { + } else if (mimeData->hasUrls()) { + QList urlList = mimeData->urls(); + foreach (QUrl curUrl, urlList) { + qDebug() << "URl catched is " << curUrl.toLocalFile(); + curController->moveExternalData(curUrl, parentFeature); + } + } else if (mimeData->hasImage()) { QImage image = qvariant_cast( mimeData->imageData() ); - UBFeature element = dynamic_cast(QObject::parent())->getFeaturesController()->importImage( image, parentFeature ); - addItem( element ); + curController->importImage( image, parentFeature ); + } return true; @@ -1019,7 +1034,7 @@ void UBFeaturesModel::moveData(const UBFeature &source, const UBFeature &destina curFeature.setFullPath(newPath); } } - // processing copy or move action for real FS + // processing copy or move action for virtual FS if (action == Qt::CopyAction) { copyFeature.setFullVirtualPath(newVirtualPath); } else { diff --git a/src/gui/UBFeaturesWidget.h b/src/gui/UBFeaturesWidget.h index e732836a..0587f908 100644 --- a/src/gui/UBFeaturesWidget.h +++ b/src/gui/UBFeaturesWidget.h @@ -56,6 +56,7 @@ public: || mode == eUBDockPaletteWidget_DESKTOP; } UBFeaturesController * getFeaturesController() const { return controller; } + void importImage(const QImage &image, const QString &fileName = QString()); static const int minThumbnailSize = 20; static const int maxThumbnailSize = 100; diff --git a/src/gui/UBTeacherGuideWidget.cpp b/src/gui/UBTeacherGuideWidget.cpp index fdf30f08..ae6a05ae 100644 --- a/src/gui/UBTeacherGuideWidget.cpp +++ b/src/gui/UBTeacherGuideWidget.cpp @@ -1163,7 +1163,7 @@ void UBTeacherGuideWidget::connectToStylusPalette() connect(UBApplication::mainWindow->actionPlay, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool))); connect(UBApplication::mainWindow->actionZoomIn, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool))); connect(UBApplication::mainWindow->actionZoomOut, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool))); - connect(UBApplication::mainWindow->actionCapture, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool))); + connect(UBApplication::mainWindow->actionCapture, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool))); connect(UBApplication::mainWindow->actionHand, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool))); connect(UBApplication::mainWindow->actionLine, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool))); connect(UBApplication::mainWindow->actionText, SIGNAL(triggered(bool)), this, SLOT(onTriggeredAction(bool)));