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 );*/