SVN commit 667911 by cgilles:
digikam from trunk : Image Editor now support Drag & Drop from Album Gui or Light Table. Accepted object are Physicals Albums, Items selection, and Tags Albums. CCMAIL: [hidden email] M +130 -1 imagewindow.cpp M +7 -1 imagewindow.h --- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/imagewindow.cpp #667910:667911 @@ -64,6 +64,7 @@ #include "constants.h" #include "ddebug.h" #include "dpopupmenu.h" +#include "dragobjects.h" #include "canvas.h" #include "dimginterface.h" #include "themeengine.h" @@ -164,6 +165,7 @@ { d = new ImageWindowPriv; m_instance = this; + setAcceptDrops(true); // -- Build the GUI ------------------------------- @@ -263,6 +265,9 @@ connect(ThemeEngine::instance(), SIGNAL(signalThemeChanged()), this, SLOT(slotThemeChanged())); + + connect(m_canvas, SIGNAL(signalDroppedEvent(QDropEvent *)), + this, SLOT(slotDroppedEvent(QDropEvent *))); } void ImageWindow::setupUserArea() @@ -436,7 +441,10 @@ KWin::deIconifyWindow(winId()); } - setCaption(i18n("digiKam Image Editor - %1").arg(caption)); + if (!caption.isEmpty()) + setCaption(i18n("Image Editor - %1").arg(caption)); + else + setCaption(i18n("Image Editor")); d->allowSaving = allowSaving; @@ -1081,6 +1089,127 @@ } } +void ImageWindow::dragMoveEvent(QDragMoveEvent *e) +{ + int albumID; + QValueList<int> albumIDs; + QValueList<int> imageIDs; + KURL::List urls; + KURL::List kioURLs; + + if (ItemDrag::decode(e, urls, kioURLs, albumIDs, imageIDs) || + AlbumDrag::decode(e, urls, albumID) || + TagDrag::canDecode(e)) + { + e->accept(); + return; + } + + e->ignore(); +} + +void ImageWindow::dropEvent(QDropEvent *e) +{ + int albumID; + QValueList<int> albumIDs; + QValueList<int> imageIDs; + KURL::List urls; + KURL::List kioURLs; + + if (ItemDrag::decode(e, urls, kioURLs, albumIDs, imageIDs)) + { + ImageInfoList imageInfoList; + + for (QValueList<int>::const_iterator it = imageIDs.begin(); + it != imageIDs.end(); ++it) + { + ImageInfo *info = new ImageInfo(*it); + imageInfoList.append(info); + } + + if (imageInfoList.isEmpty()) + { + e->ignore(); + return; + } + + QString ATitle; + AlbumManager* man = AlbumManager::instance(); + PAlbum* palbum = man->findPAlbum(albumIDs.first()); + if (palbum) ATitle = palbum->title(); + + TAlbum* talbum = man->findTAlbum(albumIDs.first()); + if (talbum) ATitle = talbum->title(); + + loadImageInfos(imageInfoList, imageInfoList.first(), + i18n("Album \"%1\"").arg(ATitle), true); + e->accept(); + } + else if (AlbumDrag::decode(e, urls, albumID)) + { + AlbumManager* man = AlbumManager::instance(); + QValueList<Q_LLONG> itemIDs = man->albumDB()->getItemIDsInAlbum(albumID); + ImageInfoList imageInfoList; + + for (QValueList<Q_LLONG>::const_iterator it = itemIDs.begin(); + it != itemIDs.end(); ++it) + { + ImageInfo *info = new ImageInfo(*it); + imageInfoList.append(info); + } + + if (imageInfoList.isEmpty()) + { + e->ignore(); + return; + } + + QString ATitle; + PAlbum* palbum = man->findPAlbum(albumIDs.first()); + if (palbum) ATitle = palbum->title(); + + loadImageInfos(imageInfoList, imageInfoList.first(), + i18n("Album \"%1\"").arg(ATitle), true); + e->accept(); + } + else if(TagDrag::canDecode(e)) + { + QByteArray ba = e->encodedData("digikam/tag-id"); + QDataStream ds(ba, IO_ReadOnly); + int tagID; + ds >> tagID; + + AlbumManager* man = AlbumManager::instance(); + QValueList<Q_LLONG> itemIDs = man->albumDB()->getItemIDsInTag(tagID); + ImageInfoList imageInfoList; + + for (QValueList<Q_LLONG>::const_iterator it = itemIDs.begin(); + it != itemIDs.end(); ++it) + { + ImageInfo *info = new ImageInfo(*it); + imageInfoList.append(info); + } + + if (imageInfoList.isEmpty()) + { + e->ignore(); + return; + } + + QString ATitle; + TAlbum* talbum = man->findTAlbum(tagID); + if (talbum) ATitle = talbum->title(); + + loadImageInfos(imageInfoList, imageInfoList.first(), + i18n("Album \"%1\"").arg(ATitle), true); + e->accept(); + } + else + { + e->ignore(); + } +} + } // namespace Digikam --- trunk/extragear/graphics/digikam/utilities/imageeditor/editor/imagewindow.h #667910:667911 @@ -38,6 +38,9 @@ #include "editorwindow.h" #include "imageinfo.h" +class QDragMoveEvent; +class QDropEvent; + namespace Digikam { @@ -80,6 +83,9 @@ void loadCurrentList(const QString& caption, bool allowSaving); void closeEvent(QCloseEvent* e); + + void dragMoveEvent(QDragMoveEvent *e); + void dropEvent(QDropEvent *e); void setupActions(); void setupConnections(); @@ -122,7 +128,7 @@ void slotRemoveTag(int tagID); void slotAssignRating(int rating); - void slotFileMetadataChanged(const KURL &url); + void slotFileMetadataChanged(const KURL &); void slotThemeChanged(); _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
Free forum by Nabble | Edit this page |