[Digikam-devel] extragear/graphics/digikam/digikam
Joern Ahrens
joern.ahrens at kdemail.net
Sun Dec 18 00:49:17 GMT 2005
SVN commit 489312 by jahrens:
Added copy/paste to AlbumIconView.
Now its possible to copy images from outside digikam (like konqi)
or between albums via copy/paste.
Todo: cut
CCMAIL: devel-digikam at kde.org
M +97 -3 albumiconview.cpp
M +3 -0 albumiconview.h
--- trunk/extragear/graphics/digikam/digikam/albumiconview.cpp #489311:489312
@@ -48,6 +48,7 @@
#include <qdict.h>
#include <qdatastream.h>
#include <qtimer.h>
+#include <qclipboard.h>
// KDE includes.
@@ -211,6 +212,9 @@
connect(this, SIGNAL(signalRightButtonClicked(IconItem*, const QPoint
&)), this, SLOT(slotRightButtonClicked(IconItem*, const QPoint &)));
+ connect(this, SIGNAL(signalRightButtonClicked(const QPoint &)),
+ this, SLOT(slotRightButtonClicked(const QPoint &)));
+
connect(this, SIGNAL(signalSelectionChanged()),
this, SLOT(slotSelectionChanged()));
@@ -415,14 +419,35 @@
slotDisplayItem(static_cast<AlbumIconItem *>(item));
}
+void AlbumIconView::slotRightButtonClicked(const QPoint& pos)
+{
+ if(d->currentAlbum->isRoot() ||
+ ( d->currentAlbum->type() != Album::PHYSICAL
+ && d->currentAlbum->type() != Album::TAG))
+ {
+ return;
+ }
+
+ QPopupMenu popmenu(this);
+ KAction *paste = KStdAction::paste(this, SLOT(slotPaste()), 0);
+ QMimeSource *data = kapp->clipboard()->data(QClipboard::Clipboard);
+ if(!data || !QUriDrag::canDecode(data))
+ {
+ paste->setEnabled(false);
+ }
+ paste->plug(&popmenu);
+ popmenu.exec(pos);
+ delete paste;
+}
+
void AlbumIconView::slotRightButtonClicked(IconItem *item, const QPoint&
pos) {
- if (!item) return;
-
+ if (!item)
+ return;
+
AlbumIconItem* iconItem
= static_cast<AlbumIconItem *>(item);
-
// --------------------------------------------------------
KMimeType::Ptr mimePtr =
KMimeType::findByURL(iconItem->imageInfo()->kurl(), @@ -464,6 +489,18 @@
}
popmenu.insertSeparator();
+
+ KAction *copy = KStdAction::copy(this, SLOT(slotCopy()), 0);
+ KAction *paste = KStdAction::paste(this, SLOT(slotPaste()), 0);
+ QMimeSource *data = kapp->clipboard()->data(QClipboard::Clipboard);
+ if(!data || !QUriDrag::canDecode(data))
+ {
+ paste->setEnabled(false);
+ }
+ copy->plug(&popmenu);
+ paste->plug(&popmenu);
+
+ popmenu.insertSeparator();
// Bulk assignment/removal of tags --------------------------
@@ -612,8 +649,65 @@
serviceVector.clear();
delete assignTagsPopup;
delete removeTagsPopup;
+ delete copy;
+ delete paste;
}
+void AlbumIconView::slotCopy()
+{
+ if (!d->currentAlbum)
+ return;
+
+ KURL::List urls;
+ KURL::List kioURLs;
+ QValueList<int> albumIDs;
+ QValueList<int> imageIDs;
+
+ for (IconItem *it = firstItem(); it; it=it->nextItem())
+ {
+ if (it->isSelected())
+ {
+ AlbumIconItem *albumItem = static_cast<AlbumIconItem *>(it);
+ urls.append(albumItem->imageInfo()->kurl());
+ kioURLs.append(albumItem->imageInfo()->kurlForKIO());
+ imageIDs.append(albumItem->imageInfo()->id());
+ }
+ }
+ albumIDs.append(d->currentAlbum->id());
+
+ if (urls.isEmpty())
+ return;
+
+ QDragObject* drag = 0;
+
+ drag = new ItemDrag(urls, kioURLs, albumIDs, imageIDs, this);
+ kapp->clipboard()->setData(drag);
+}
+
+void AlbumIconView::slotPaste()
+{
+ QMimeSource *data = kapp->clipboard()->data(QClipboard::Clipboard);
+ if(!data || !QUriDrag::canDecode(data))
+ return;
+
+ if(d->currentAlbum->type() == Album::PHYSICAL)
+ {
+ if (QUriDrag::canDecode(data) &&
+ d->currentAlbum->type() == Album::PHYSICAL)
+ {
+ PAlbum* palbum = (PAlbum*)d->currentAlbum;
+ KURL destURL(palbum->kurl());
+
+ KURL::List srcURLs;
+ KURLDrag::decode(data, srcURLs);
+
+ KIO::Job* job = DIO::copy(srcURLs, destURL);
+ connect(job, SIGNAL(result(KIO::Job*)),
+ SLOT(slotDIOResult(KIO::Job*)));
+ }
+ }
+}
+
void AlbumIconView::slotSetAlbumThumbnail(AlbumIconItem *iconItem)
{
if(!d->currentAlbum)
--- trunk/extragear/graphics/digikam/digikam/albumiconview.h #489311:489312
@@ -135,6 +135,7 @@
void slotImageListerClear();
void slotDoubleClicked(IconItem *item);
+ void slotRightButtonClicked(const QPoint& pos);
void slotRightButtonClicked(IconItem *item, const QPoint& pos);
void slotGotThumbnail(const KURL& url);
@@ -162,6 +163,8 @@
void slotDisplayItem(AlbumIconItem *item=0);
void slotAlbumModified();
void slotSetAlbumThumbnail(AlbumIconItem *iconItem);
+ void slotCopy();
+ void slotPaste();
signals:
More information about the Digikam-devel
mailing list