From b5fd37a9ddef890bf6bbf8b939dc9a1a284c5237 Mon Sep 17 00:00:00 2001 From: Anna Udovichenko Date: Mon, 7 May 2012 16:50:25 +0300 Subject: [PATCH 1/3] added importing images from board to library --- src/board/UBFeaturesController.cpp | 21 ++++++++++++ src/board/UBFeaturesController.h | 1 + src/gui/UBFeaturesWidget.cpp | 55 +++++++++++++++++++----------- src/gui/UBFeaturesWidget.h | 1 + 4 files changed, 58 insertions(+), 20 deletions(-) diff --git a/src/board/UBFeaturesController.cpp b/src/board/UBFeaturesController.cpp index b104c317..a2678f36 100644 --- a/src/board/UBFeaturesController.cpp +++ b/src/board/UBFeaturesController.cpp @@ -345,6 +345,27 @@ QPixmap UBFeaturesController::createThumbnail(const QString &path) return QPixmap(thumbnailPath); } +UBFeature UBFeaturesController::importImage( const QImage &image, const UBFeature &destination ) +{ + QDateTime now = QDateTime::currentDateTime(); + QString fileName = tr("ImportedImage") + "-" + now.toString("dd-MM-yyyy hh-mm-ss") + ".png"; + + UBFeature dest = destination; + + if ( !destination.getFullVirtualPath().startsWith( picturesElement.getFullVirtualPath(), Qt::CaseInsensitive ) ) + { + dest = picturesElement; + } + + QString filePath = dest.getFullPath().toLocalFile() + "/" + fileName; + image.save(filePath); + + QPixmap thumb = createThumbnail( filePath ); + return UBFeature( dest.getFullVirtualPath(), thumb, fileName, + QUrl::fromLocalFile( filePath ), FEATURE_ITEM ); + +} + UBFeature UBFeaturesController::newFolder( const QString &name ) { QString path = currentElement.getFullPath().toLocalFile() + "/" + name; diff --git a/src/board/UBFeaturesController.h b/src/board/UBFeaturesController.h index 0431eb7e..254514a4 100644 --- a/src/board/UBFeaturesController.h +++ b/src/board/UBFeaturesController.h @@ -86,6 +86,7 @@ public: UBFeature newFolder( const QString &name ); UBFeature addToFavorite( const QUrl &path ); void removeFromFavorite( const QUrl &path ); + UBFeature importImage( const QImage &image, const UBFeature &destination ); static QString fileNameFromUrl( const QUrl &url ); static QPixmap thumbnailForFile( const QString &path ); diff --git a/src/gui/UBFeaturesWidget.cpp b/src/gui/UBFeaturesWidget.cpp index c5d5cd76..b5e70b2b 100644 --- a/src/gui/UBFeaturesWidget.cpp +++ b/src/gui/UBFeaturesWidget.cpp @@ -404,13 +404,19 @@ void UBFeaturesListView::mouseReleaseEvent( QMouseEvent *event ) */ void UBFeaturesListView::dragEnterEvent( QDragEnterEvent *event ) { - if ( event->mimeData()->hasUrls() ) + if ( event->mimeData()->hasUrls() || event->mimeData()->hasImage() ) event->acceptProposedAction(); } +void UBFeaturesListView::dragMoveEvent( QDragMoveEvent *event ) +{ + if ( event->mimeData()->hasUrls() || event->mimeData()->hasImage() ) + event->acceptProposedAction(); +} + void UBFeaturesListView::dropEvent( QDropEvent *event ) { - if( event->source() || dynamic_cast( event->source() ) ) + if( event->source() && dynamic_cast( event->source() ) ) { event->setDropAction( Qt::MoveAction ); } @@ -775,7 +781,7 @@ bool UBFeaturesModel::dropMimeData(const QMimeData *mimeData, Qt::DropAction act { Q_UNUSED(row) - if ( !mimeData->hasUrls() ) + if ( !mimeData->hasUrls() && !mimeData->hasImage() ) return false; if ( action == Qt::IgnoreAction ) return true; @@ -794,22 +800,31 @@ bool UBFeaturesModel::dropMimeData(const QMimeData *mimeData, Qt::DropAction act parentFeature = parent.data( Qt::UserRole + 1).value(); } - QList urls = mimeData->urls(); - - foreach ( QUrl url, urls ) - { - UBFeature element; - - if ( action == Qt::MoveAction ) - { - element = dynamic_cast(QObject::parent())->getFeaturesController()->moveItemToFolder( url, parentFeature ); - } - else - { - element = dynamic_cast(QObject::parent())->getFeaturesController()->copyItemToFolder( url, parentFeature ); - } - addItem( element ); - } + if ( mimeData->hasUrls() ) + { + QList urls = mimeData->urls(); + + foreach ( QUrl url, urls ) + { + UBFeature element; + + if ( action == Qt::MoveAction ) + { + element = dynamic_cast(QObject::parent())->getFeaturesController()->moveItemToFolder( url, parentFeature ); + } + else + { + element = dynamic_cast(QObject::parent())->getFeaturesController()->copyItemToFolder( url, parentFeature ); + } + addItem( element ); + } + } + else if ( mimeData->hasImage() ) + { + QImage image = qvariant_cast( mimeData->imageData() ); + UBFeature element = dynamic_cast(QObject::parent())->getFeaturesController()->importImage( image, parentFeature ); + addItem( element ); + } return true; } @@ -897,7 +912,7 @@ Qt::ItemFlags UBFeaturesModel::flags( const QModelIndex &index ) const QStringList UBFeaturesModel::mimeTypes() const { QStringList types; - types << "text/uri-list"; + types << "text/uri-list" << "image/png" << "image/tiff" << "image/gif" << "image/jpeg"; return types; } diff --git a/src/gui/UBFeaturesWidget.h b/src/gui/UBFeaturesWidget.h index d9e77a4d..69dfe4fa 100644 --- a/src/gui/UBFeaturesWidget.h +++ b/src/gui/UBFeaturesWidget.h @@ -114,6 +114,7 @@ public: protected: virtual void dragEnterEvent( QDragEnterEvent *event ); virtual void dropEvent( QDropEvent *event ); + virtual void dragMoveEvent( QDragMoveEvent *event ); /*virtual void mousePressEvent( QMouseEvent *event ); virtual void mouseMoveEvent( QMouseEvent *event ); virtual void mouseReleaseEvent( QMouseEvent *event );*/ From 604ea2faeafd751d10a6d6d9cde2fdf19085d4b7 Mon Sep 17 00:00:00 2001 From: Anna Udovichenko Date: Mon, 7 May 2012 17:22:16 +0300 Subject: [PATCH 2/3] Fixed some DnD bugs --- src/board/UBFeaturesController.cpp | 36 ++++++++++++++++++++++++++++-- src/gui/UBFeaturesWidget.cpp | 2 +- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/board/UBFeaturesController.cpp b/src/board/UBFeaturesController.cpp index a2678f36..5bd9f5b7 100644 --- a/src/board/UBFeaturesController.cpp +++ b/src/board/UBFeaturesController.cpp @@ -429,8 +429,39 @@ UBFeature UBFeaturesController::addDownloadedFile( const QUrl &sourceUrl, const UBFeature UBFeaturesController::moveItemToFolder( const QUrl &url, const UBFeature &destination ) { - UBFeature newElement = copyItemToFolder( url, destination ); + /*UBFeature newElement = copyItemToFolder( url, destination ); deleteItem( url ); + return newElement;*/ + QString sourcePath = url.toLocalFile(); + + Q_ASSERT( QFileInfo( sourcePath ).exists() ); + + UBFeature possibleDest = getDestinationForItem( url ); + + UBFeature dest = destination; + + if ( destination != trashElement && + !destination.getFullVirtualPath().startsWith( possibleDest.getFullVirtualPath(), Qt::CaseInsensitive ) ) + { + dest = possibleDest; + } + + QString name = QFileInfo( sourcePath ).fileName(); + QString destPath = dest.getFullPath().toLocalFile(); + QString destVirtualPath = dest.getFullVirtualPath(); + QString newFullPath = destPath + "/" + name; + if ( sourcePath.compare( newFullPath, Qt::CaseInsensitive ) ) + { + QFile( sourcePath ).copy( newFullPath ); + deleteItem( url ); + } + + QPixmap thumb = thumbnailForFile( newFullPath ); + + UBFeatureElementType type = FEATURE_ITEM; + if ( UBFileSystemUtils::mimeTypeFromFileName( newFullPath ).contains("application") ) + type = FEATURE_INTERACTIVE; + UBFeature newElement( destVirtualPath, thumb, name, QUrl::fromLocalFile( newFullPath ), type ); return newElement; } @@ -454,7 +485,8 @@ UBFeature UBFeaturesController::copyItemToFolder( const QUrl &url, const UBFeatu QString destPath = dest.getFullPath().toLocalFile(); QString destVirtualPath = dest.getFullVirtualPath(); QString newFullPath = destPath + "/" + name; - QFile( sourcePath ).copy( newFullPath ); + if ( !sourcePath.compare( newFullPath, Qt::CaseInsensitive ) ) + QFile( sourcePath ).copy( newFullPath ); QPixmap thumb = thumbnailForFile( newFullPath ); diff --git a/src/gui/UBFeaturesWidget.cpp b/src/gui/UBFeaturesWidget.cpp index b5e70b2b..ea0fcaa7 100644 --- a/src/gui/UBFeaturesWidget.cpp +++ b/src/gui/UBFeaturesWidget.cpp @@ -831,7 +831,7 @@ bool UBFeaturesModel::dropMimeData(const QMimeData *mimeData, Qt::DropAction act void UBFeaturesModel::addItem( const UBFeature &item ) { beginInsertRows( QModelIndex(), featuresList->size(), featuresList->size() ); - featuresList->push_back( item ); + featuresList->append( item ); endInsertRows(); } From de0ea916ad629a5a043a82b373d19a51546baa22 Mon Sep 17 00:00:00 2001 From: Anna Udovichenko Date: Mon, 7 May 2012 18:38:07 +0300 Subject: [PATCH 3/3] Implemented adding selected group of elements to favorite --- src/gui/UBFeaturesActionBar.cpp | 9 +++++++-- src/gui/UBFeaturesActionBar.h | 2 ++ src/gui/UBFeaturesWidget.cpp | 35 +++++++++++++++++++++++---------- src/gui/UBFeaturesWidget.h | 1 + 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/gui/UBFeaturesActionBar.cpp b/src/gui/UBFeaturesActionBar.cpp index ac009c48..8311bfc9 100644 --- a/src/gui/UBFeaturesActionBar.cpp +++ b/src/gui/UBFeaturesActionBar.cpp @@ -66,8 +66,8 @@ UBFeaturesActionBar::UBFeaturesActionBar( UBFeaturesController *controller, QWid mButtonGroup->addButton(mpRemoveFavoriteBtn); mButtonGroup->addButton(mpNewFolderBtn); // Connect signals & slots - /*connect(mpFavoriteAction,SIGNAL(triggered()), this, SLOT(onActionFavorite())); - connect(mpSocialAction,SIGNAL(triggered()), this, SLOT(onActionSocial())); + 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())); @@ -170,6 +170,11 @@ void UBFeaturesActionBar::onActionNewFolder() emit newFolderToCreate(); } +void UBFeaturesActionBar::onActionFavorite() +{ + emit addElementsToFavorite(); +} + /* void UBFeaturesActionBar::dragMoveEvent(QDragMoveEvent *event) { diff --git a/src/gui/UBFeaturesActionBar.h b/src/gui/UBFeaturesActionBar.h index a45371d8..7aec99a9 100644 --- a/src/gui/UBFeaturesActionBar.h +++ b/src/gui/UBFeaturesActionBar.h @@ -30,9 +30,11 @@ signals: void deleteElements( const QMimeData &data ); void addToFavorite( const QMimeData &data ); void removeFromFavorite( const QMimeData &data ); + void addElementsToFavorite(); private slots: void onSearchTextChanged(QString txt); void onActionNewFolder(); + void onActionFavorite(); protected: //void dragMoveEvent(QDragMoveEvent *event); void dragEnterEvent( QDragEnterEvent *event ); diff --git a/src/gui/UBFeaturesWidget.cpp b/src/gui/UBFeaturesWidget.cpp index ea0fcaa7..7a71b555 100644 --- a/src/gui/UBFeaturesWidget.cpp +++ b/src/gui/UBFeaturesWidget.cpp @@ -121,6 +121,7 @@ UBFeaturesWidget::UBFeaturesWidget(QWidget *parent, const char *name):UBDockPale connect( mActionBar, SIGNAL( deleteElements(const QMimeData &) ), this, SLOT( deleteElements(const QMimeData &) ) ); connect( mActionBar, SIGNAL( addToFavorite(const QMimeData &) ), this, SLOT( addToFavorite(const QMimeData &) ) ); connect( mActionBar, SIGNAL( removeFromFavorite(const QMimeData &) ), this, SLOT( removeFromFavorite(const QMimeData &) ) ); + connect ( mActionBar, SIGNAL( addElementsToFavorite() ), this, SLOT ( addElementsToFavorite() ) ); connect( pathListView, SIGNAL(clicked( const QModelIndex & ) ), this, SLOT( currentPathChanged( const QModelIndex & ) ) ); connect( thumbSlider, SIGNAL( sliderMoved(int) ), this, SLOT(thumbnailSizeChanged( int ) ) ); @@ -333,6 +334,20 @@ void UBFeaturesWidget::onAddDownloadedFileToLibrary(bool pSuccess, QUrl sourceUr } } +void UBFeaturesWidget::addElementsToFavorite() +{ + QModelIndexList selected = featuresListView->selectionModel()->selectedIndexes(); + for ( int i = 0; i < selected.size(); ++i ) + { + UBFeature feature = selected.at(i).data( Qt::UserRole + 1 ).value(); + UBFeature elem = controller->addToFavorite( feature.getFullPath() ); + if ( !elem.getVirtualPath().isEmpty() && !elem.getVirtualPath().isNull() ) + featuresModel->addItem( elem ); + } + QSortFilterProxyModel *model = dynamic_cast( featuresListView->model() ); + model->invalidate(); +} + void UBFeaturesWidget::switchToListView() { stackedWidget->setCurrentIndex(ID_LISTVIEW); @@ -806,17 +821,17 @@ bool UBFeaturesModel::dropMimeData(const QMimeData *mimeData, Qt::DropAction act foreach ( QUrl url, urls ) { - UBFeature element; + UBFeature element; - if ( action == Qt::MoveAction ) - { - element = dynamic_cast(QObject::parent())->getFeaturesController()->moveItemToFolder( url, parentFeature ); - } - else - { - element = dynamic_cast(QObject::parent())->getFeaturesController()->copyItemToFolder( url, parentFeature ); - } - addItem( element ); + if ( action == Qt::MoveAction ) + { + element = dynamic_cast(QObject::parent())->getFeaturesController()->moveItemToFolder( url, parentFeature ); + } + else + { + element = dynamic_cast(QObject::parent())->getFeaturesController()->copyItemToFolder( url, parentFeature ); + } + addItem( element ); } } else if ( mimeData->hasImage() ) diff --git a/src/gui/UBFeaturesWidget.h b/src/gui/UBFeaturesWidget.h index 69dfe4fa..85aaebbd 100644 --- a/src/gui/UBFeaturesWidget.h +++ b/src/gui/UBFeaturesWidget.h @@ -101,6 +101,7 @@ private slots: void thumbnailSizeChanged( int ); void onDisplayMetadata( QMap ); void onAddDownloadedFileToLibrary(bool, QUrl, QString, QByteArray); + void addElementsToFavorite(); protected: bool eventFilter(QObject *target, QEvent *event); };