parent
43829e4454
commit
034503ddf8
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#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<UBLibElement*> UBLibraryController::rootCategoriesList() |
|
||||||
{ |
|
||||||
QList<UBLibElement*> 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<UBLibElement*> UBLibraryController::addVirtualElementsForItemPath(const QString& pPath) |
|
||||||
{ |
|
||||||
QList<UBLibElement*> 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<UBLibElement*> UBLibraryController::listElementsInPath(const QString& pPath) |
|
||||||
{ |
|
||||||
QList<UBLibElement*> 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<UBLibElement*> UBLibraryController::listElementsInVirtualForlder(UBLibElement* pElement) |
|
||||||
{ |
|
||||||
Q_UNUSED(pElement); |
|
||||||
QList<UBLibElement*> copyOfTheFavoriteList; |
|
||||||
foreach(UBLibElement* eachElement, mFavoriteList) |
|
||||||
copyOfTheFavoriteList << new UBLibElement(eachElement); |
|
||||||
return copyOfTheFavoriteList; |
|
||||||
} |
|
||||||
|
|
||||||
void UBLibraryController::moveContent(QList<UBLibElement*> 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<UBLibElement*> trashList) |
|
||||||
{ |
|
||||||
moveContent(trashList, UBLibElement::trashElement()); |
|
||||||
removeFromFavorite(trashList); |
|
||||||
} |
|
||||||
|
|
||||||
void UBLibraryController::emptyElementsOnTrash( QList<UBLibElement*> 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<UBLibElement*> 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<QUrl> 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<UBLibElement*> elementList) |
|
||||||
{ |
|
||||||
|
|
||||||
foreach(UBLibElement* eachElement, elementList) |
|
||||||
if(!isOnFavoriteList(eachElement)) |
|
||||||
mFavoriteList << new UBLibElement(eachElement); |
|
||||||
|
|
||||||
persistFavoriteList(); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
void UBLibraryController::removeFromFavorite(QList<UBLibElement*> 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<QUrl>& 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<QUrl>& 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<QUrl>& 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<QUrl>& 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; |
|
||||||
} |
|
||||||
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#ifndef UBLIBRARYCONTROLLER_H_ |
|
||||||
#define UBLIBRARYCONTROLLER_H_ |
|
||||||
|
|
||||||
#include <QtGui> |
|
||||||
#include <QtWebKit> |
|
||||||
|
|
||||||
#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<QString, QString> metadatas){mMetadata = metadatas;} |
|
||||||
QMap<QString, QString> metadatas(){return mMetadata;} |
|
||||||
|
|
||||||
private: |
|
||||||
eUBLibElementType mType; |
|
||||||
QUrl mPath; |
|
||||||
QImage mThumbnail; |
|
||||||
QString mInfo; |
|
||||||
QString mName; |
|
||||||
QString mExtension; |
|
||||||
bool mbMoveable; |
|
||||||
bool mbDeletable; |
|
||||||
QMap<QString, QString> 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<UBLibElement*> getContent(UBLibElement* pElement); |
|
||||||
void moveContent(QList<UBLibElement*> sourceList, UBLibElement *pDestination); |
|
||||||
void trashElements(QList<UBLibElement*> trashList); |
|
||||||
void emptyElementsOnTrash(QList<UBLibElement*> elementsList); |
|
||||||
|
|
||||||
void addNativeToolToFavorites(const QUrl& url); |
|
||||||
|
|
||||||
void setItemAsBackground(UBLibElement* image); |
|
||||||
void addItemToPage(UBLibElement* item); |
|
||||||
|
|
||||||
void addToFavorite(QList<UBLibElement*> elementList); |
|
||||||
void removeFromFavorite(QList<UBLibElement*> 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<QUrl>& images); |
|
||||||
void addVideosToCurrentPage(const QList<QUrl>& videos); |
|
||||||
void addAudiosToCurrentPage(const QList<QUrl>& sounds); |
|
||||||
void addInteractivesToCurrentPage(const QList<QUrl>& interactiveWidgets); |
|
||||||
|
|
||||||
protected: |
|
||||||
|
|
||||||
UBGraphicsScene* activeScene(); |
|
||||||
QRectF visibleSceneRect(); |
|
||||||
QList<UBLibElement*> mFavoriteList; |
|
||||||
void persistFavoriteList(); |
|
||||||
void readFavoriteList(); |
|
||||||
QList<UBLibElement*> mInternalLibElements; |
|
||||||
QList<UBLibElement*> mElementsList; |
|
||||||
void cleanElementsList(); |
|
||||||
|
|
||||||
private: |
|
||||||
QList<UBLibElement*> rootCategoriesList(); |
|
||||||
QList<UBLibElement*> listElementsInPath(const QString& pPath); |
|
||||||
QList<UBLibElement*> listElementsInVirtualForlder(UBLibElement* pElement); |
|
||||||
void userPath(QUrl &pPath); |
|
||||||
QImage thumbnailForFile(UBLibElement* pPath); |
|
||||||
QImage createThumbnail(UBLibElement* pPath); |
|
||||||
QList<UBLibElement*> 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_ */ |
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#include <QIcon> |
|
||||||
#include <QSize> |
|
||||||
#include <QDebug> |
|
||||||
|
|
||||||
#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<UBLibElement *> 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<UBLibWidget*>(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<UBActionButton*> 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() |
|
||||||
{ |
|
||||||
|
|
||||||
} |
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#ifndef UBLIBACTIONBAR_H |
|
||||||
#define UBLIBACTIONBAR_H |
|
||||||
|
|
||||||
#include <QWidget> |
|
||||||
#include <QButtonGroup> |
|
||||||
#include <QHBoxLayout> |
|
||||||
#include <QList> |
|
||||||
#include <QAction> |
|
||||||
#include <QLineEdit> |
|
||||||
#include <QToolButton> |
|
||||||
#include <QStackedWidget> |
|
||||||
#include <QDropEvent> |
|
||||||
#include <QDragEnterEvent> |
|
||||||
#include <QDragMoveEvent> |
|
||||||
|
|
||||||
#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<UBLibElement*> 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<UBLibElement*> 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
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
|
|
||||||
#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<UBLibWidget*>(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<UBLibWidget*>(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<QString, QString> metas = mpElement->metadatas(); |
|
||||||
QList<QString> lKeys = metas.keys(); |
|
||||||
QList<QString> 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() |
|
||||||
{ |
|
||||||
|
|
||||||
} |
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#ifndef UBLIBITEMPROPERTIES_H |
|
||||||
#define UBLIBITEMPROPERTIES_H |
|
||||||
|
|
||||||
#include <QWidget> |
|
||||||
#include <QVBoxLayout> |
|
||||||
#include <QHBoxLayout> |
|
||||||
#include <QPushButton> |
|
||||||
#include <QPixmap> |
|
||||||
#include <QLabel> |
|
||||||
#include <QTextEdit> |
|
||||||
#include <QToolButton> |
|
||||||
#include <QAction> |
|
||||||
#include <QShowEvent> |
|
||||||
#include <QTreeWidget> |
|
||||||
|
|
||||||
#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
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#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<UBLibWidget*>(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<QString>,UBLibElement*)), mLibWidget, SLOT(onElementsDropped(QList<QString>,UBLibElement*))); |
|
||||||
connect(mLibWidget, SIGNAL(navigBarUpdate(UBLibElement*)), libWidget->actionBar(), SLOT(onNavigbarUpdate(UBLibElement*))); |
|
||||||
connect(mLibWidget, SIGNAL(itemsSelected(QList<UBLibElement*>, bool)), libWidget->actionBar(), SLOT(onSelectionChanged(QList<UBLibElement*>, 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); |
|
||||||
} |
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#ifndef UBLIBNAVIGATORWIDGET_H |
|
||||||
#define UBLIBNAVIGATORWIDGET_H |
|
||||||
|
|
||||||
#include <QWidget> |
|
||||||
#include <QVBoxLayout> |
|
||||||
#include <QSlider> |
|
||||||
#include <QDropEvent> |
|
||||||
|
|
||||||
#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
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#include <QPixmap> |
|
||||||
#include <QDrag> |
|
||||||
#include <QPainter> |
|
||||||
|
|
||||||
#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<QString>,UBLibElement*)), this, SLOT(onElementsDropped(QList<QString>,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<UBFolderPath*>(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<QString> 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<QGraphicsWidget*>(itemAt(event->pos())); |
|
||||||
if(NULL != pGWidget) |
|
||||||
{ |
|
||||||
// We have only one view at a time
|
|
||||||
UBLibPathViewer* pView = dynamic_cast<UBLibPathViewer*>(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<QGraphicsWidget*>(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<QString> 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<QUrl> 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<QGraphicsWidget*>(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(); |
|
||||||
} |
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#ifndef UBLIBPATHVIEWER_H |
|
||||||
#define UBLIBPATHVIEWER_H |
|
||||||
|
|
||||||
#include <QGraphicsView> |
|
||||||
#include <QGraphicsScene> |
|
||||||
#include <QGraphicsWidget> |
|
||||||
#include <QGraphicsPixmapItem> |
|
||||||
#include <QGraphicsProxyWidget> |
|
||||||
#include <QVector> |
|
||||||
#include <QPixmap> |
|
||||||
#include <QResizeEvent> |
|
||||||
#include <QGraphicsLinearLayout> |
|
||||||
#include <QMouseEvent> |
|
||||||
#include <QTime> |
|
||||||
#include <QMap> |
|
||||||
#include <QDragEnterEvent> |
|
||||||
#include <QDropEvent> |
|
||||||
#include <QDragMoveEvent> |
|
||||||
#include <QMimeData> |
|
||||||
#include <QPaintEvent> |
|
||||||
#include <QShowEvent> |
|
||||||
|
|
||||||
#include "board/UBLibraryController.h" |
|
||||||
|
|
||||||
#define PATHITEMWIDTH 32 |
|
||||||
#define STARTDRAGTIME 1000000 |
|
||||||
|
|
||||||
class UBPathScene : public QGraphicsScene |
|
||||||
{ |
|
||||||
Q_OBJECT |
|
||||||
public: |
|
||||||
UBPathScene(QWidget* parent=0); |
|
||||||
~UBPathScene(); |
|
||||||
QMap<QGraphicsWidget*, UBChainedLibElement*>* mapWidgetToChainedElem(){return &mMapWidgetToChainedElem;} |
|
||||||
|
|
||||||
signals: |
|
||||||
void mouseClick(UBChainedLibElement* elem); |
|
||||||
void elementsDropped(QList<QString> 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<QGraphicsWidget*, UBChainedLibElement*> 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<QString> 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<QString> 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<QGraphicsWidget*> 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
|
|
@ -1,89 +0,0 @@ |
|||||||
#include <QDomDocument> |
|
||||||
|
|
||||||
#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); |
|
||||||
} |
|
@ -1,32 +0,0 @@ |
|||||||
#ifndef UBLIBWEBVIEW_H |
|
||||||
#define UBLIBWEBVIEW_H |
|
||||||
|
|
||||||
#include <QWidget> |
|
||||||
#include <QWebView> |
|
||||||
#include <QWebSettings> |
|
||||||
#include <QVBoxLayout> |
|
||||||
|
|
||||||
#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
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#include <QDebug> |
|
||||||
|
|
||||||
#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(); |
|
||||||
} |
|
||||||
} |
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#ifndef UBLIBWIDGET_H |
|
||||||
#define UBLIBWIDGET_H |
|
||||||
|
|
||||||
#include <QWidget> |
|
||||||
#include <QVBoxLayout> |
|
||||||
#include <QStackedWidget> |
|
||||||
#include <QDragEnterEvent> |
|
||||||
#include <QDropEvent> |
|
||||||
#include <QDragMoveEvent> |
|
||||||
#include <QMimeData> |
|
||||||
#include <QMouseEvent> |
|
||||||
#include <QResizeEvent> |
|
||||||
#include <QLabel> |
|
||||||
|
|
||||||
#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
|
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#include <QList> |
|
||||||
#include <QFileInfo> |
|
||||||
#include <QDir> |
|
||||||
|
|
||||||
#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<UBLibElement*> 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<QString,QString>)), this, SLOT(onDisplayMetadata(QMap<QString,QString>))); |
|
||||||
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<UBLibElement*> 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<UBLibElement*> 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<UBLibElement*> qlSelectedItems; |
|
||||||
QList<QGraphicsItem*> 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<QString> 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<QUrl> 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<QImage>(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<QString> elements, UBLibElement *target) |
|
||||||
{ |
|
||||||
if(target != mpCrntDir) |
|
||||||
{ |
|
||||||
QList<UBLibElement*> 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<QString, QString> 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); |
|
||||||
} |
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
#ifndef UBLIBRARYWIDGET_H |
|
||||||
#define UBLIBRARYWIDGET_H |
|
||||||
|
|
||||||
#include <QList> |
|
||||||
#include <QVector> |
|
||||||
#include <QGraphicsItem> |
|
||||||
#include <QDragEnterEvent> |
|
||||||
#include <QDragMoveEvent> |
|
||||||
#include <QDropEvent> |
|
||||||
#include <QDialog> |
|
||||||
#include <QLabel> |
|
||||||
#include <QLineEdit> |
|
||||||
#include <QDialogButtonBox> |
|
||||||
#include <QHBoxLayout> |
|
||||||
#include <QVBoxLayout> |
|
||||||
|
|
||||||
#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<QString> 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<UBLibElement*> 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<QString,QString> 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<UBLibElement*> mCurrentElems; |
|
||||||
QList<UBLibElement*> mOrigCurrentElems; |
|
||||||
QList<QGraphicsItem*> 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
|
|
Loading…
Reference in new issue