[Digikam-devel] branches/extragear/kde3/graphics/digikam
Gilles Caulier
caulier.gilles at gmail.com
Mon Aug 27 10:28:43 BST 2007
SVN commit 705140 by cgilles:
digiKam from KDE3 branch : Camera Gui improvements. Implement Drag & Drop between Camera Gui and Album Gui to Download pictures from camera to a physical album. Before, only inverse function has been implemented : Upload pictures to camera when you Drag & Drop items between Album Gui and Camera Gui.
CCMAIL: digikam-devel at kde.org
M +42 -0 digikam/albumfolderview.cpp
M +34 -2 digikam/albumiconview.cpp
M +43 -4 utilities/cameragui/cameraiconview.cpp
M +22 -17 utilities/cameragui/cameraui.cpp
M +5 -1 utilities/cameragui/cameraui.h
--- branches/extragear/kde3/graphics/digikam/digikam/albumfolderview.cpp #705139:705140
@@ -64,6 +64,7 @@
#include "thumbnailsize.h"
#include "albumpropsedit.h"
#include "folderitem.h"
+#include "cameraui.h"
#include "dio.h"
#include "dragobjects.h"
#include "albumthumbnailloader.h"
@@ -888,6 +889,11 @@
return true;
}
+ if (CameraItemListDrag::canDecode(e))
+ {
+ return true;
+ }
+
return false;
}
@@ -1080,6 +1086,42 @@
return;
}
+ // -- DnD from Camera GUI ------------------------------------------------
+
+ if(CameraItemListDrag::canDecode(e))
+ {
+ Album *album = dynamic_cast<Album*>(itemDrop->getAlbum());
+ if (!album) return;
+
+ CameraUI *ui = dynamic_cast<CameraUI*>(e->source());
+ if (ui)
+ {
+ KPopupMenu popMenu(this);
+ popMenu.insertTitle(SmallIcon("digikam"), i18n("My Albums"));
+ popMenu.insertItem(SmallIcon("down"), i18n("Download from camera"), 10);
+ popMenu.insertItem(SmallIcon("down"), i18n("Download && Delete from camera"), 11);
+ popMenu.insertSeparator(-1);
+ popMenu.insertItem(SmallIcon("cancel"), i18n("&Cancel"));
+ popMenu.setMouseTracking(true);
+ int id = popMenu.exec(QCursor::pos());
+ switch(id)
+ {
+ case 10: // Download from camera
+ {
+ ui->slotDownload(true, false, album);
+ break;
+ }
+ case 11: // Download and Delete from camera
+ {
+ ui->slotDownload(true, true, album);
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ }
+
// -- DnD from an external source ----------------------------------------
if(QUriDrag::canDecode(e))
--- branches/extragear/kde3/graphics/digikam/digikam/albumiconview.cpp #705139:705140
@@ -115,6 +115,7 @@
#include "ratingpopupmenu.h"
#include "pixmapmanager.h"
#include "cameradragobject.h"
+#include "cameraui.h"
#include "dragobjects.h"
#include "dmetadata.h"
#include "albumdb.h"
@@ -1167,7 +1168,8 @@
!QUriDrag::canDecode(event) &&
!CameraDragObject::canDecode(event) &&
!TagListDrag::canDecode(event) &&
- !TagDrag::canDecode(event))
+ !TagDrag::canDecode(event) &&
+ !CameraItemListDrag::canDecode(event))
|| event->source() == this)
{
event->ignore();
@@ -1185,7 +1187,8 @@
!QUriDrag::canDecode(event) &&
!CameraDragObject::canDecode(event) &&
!TagListDrag::canDecode(event) &&
- !TagDrag::canDecode(event))
+ !TagDrag::canDecode(event) &&
+ !CameraItemListDrag::canDecode(event))
|| event->source() == this)
{
event->ignore();
@@ -1389,6 +1392,35 @@
break;
}
}
+ else if(CameraItemListDrag::canDecode(event))
+ {
+ CameraUI *ui = dynamic_cast<CameraUI*>(event->source());
+ if (ui)
+ {
+ QPopupMenu popMenu(this);
+ popMenu.insertItem(SmallIcon("down"), i18n("Download from camera"), 10);
+ popMenu.insertItem(SmallIcon("down"), i18n("Download && Delete from camera"), 11);
+ popMenu.insertSeparator(-1);
+ popMenu.insertItem(SmallIcon("cancel"), i18n("&Cancel"));
+ popMenu.setMouseTracking(true);
+ int id = popMenu.exec(QCursor::pos());
+ switch(id)
+ {
+ case 10: // Download from camera
+ {
+ ui->slotDownload(true, false, d->currentAlbum);
+ break;
+ }
+ case 11: // Download and Delete from camera
+ {
+ ui->slotDownload(true, true, d->currentAlbum);
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ }
else
{
event->ignore();
--- branches/extragear/kde3/graphics/digikam/utilities/cameragui/cameraiconview.cpp #705139:705140
@@ -22,15 +22,12 @@
*
* ============================================================ */
-// C++ includes.
-
-#include <ctime>
-
// Qt includes.
#include <qfile.h>
#include <qfileinfo.h>
#include <qtimer.h>
+#include <qpainter.h>
#include <qpixmap.h>
#include <qcursor.h>
#include <qfontmetrics.h>
@@ -56,6 +53,7 @@
#include "renamecustomizer.h"
#include "icongroupitem.h"
#include "dpopupmenu.h"
+#include "dragobjects.h"
#include "cameraui.h"
#include "cameradragobject.h"
#include "cameraiconitem.h"
@@ -518,6 +516,47 @@
void CameraIconView::startDrag()
{
+ QStringList lst;
+
+ for (IconItem* item = firstItem(); item; item = item->nextItem())
+ {
+ if (!item->isSelected())
+ continue;
+
+ CameraIconViewItem* iconItem = static_cast<CameraIconViewItem*>(item);
+ QString itemPath = iconItem->itemInfo()->folder + iconItem->itemInfo()->name;
+ lst.append(itemPath);
+ }
+
+ QDragObject * drag = new CameraItemListDrag(lst, d->cameraUI);
+ if (drag)
+ {
+ QPixmap icon(DesktopIcon("image", 48));
+ int w = icon.width();
+ int h = icon.height();
+
+ QPixmap pix(w+4,h+4);
+ QString text(QString::number(lst.count()));
+
+ QPainter p(&pix);
+ p.fillRect(0, 0, w+4, h+4, QColor(Qt::white));
+ p.setPen(QPen(Qt::black, 1));
+ p.drawRect(0, 0, w+4, h+4);
+ p.drawPixmap(2, 2, icon);
+ QRect r = p.boundingRect(2,2,w,h,Qt::AlignLeft|Qt::AlignTop,text);
+ r.setWidth(QMAX(r.width(),r.height()));
+ r.setHeight(QMAX(r.width(),r.height()));
+ p.fillRect(r, QColor(0,80,0));
+ p.setPen(Qt::white);
+ QFont f(font());
+ f.setBold(true);
+ p.setFont(f);
+ p.drawText(r, Qt::AlignCenter, text);
+ p.end();
+
+ drag->setPixmap(pix);
+ drag->drag();
+ }
}
void CameraIconView::contentsDropEvent(QDropEvent *event)
--- branches/extragear/kde3/graphics/digikam/utilities/cameragui/cameraui.cpp #705139:705140
@@ -1079,20 +1079,9 @@
slotDownload(false, true);
}
-void CameraUI::slotDownload(bool onlySelected, bool deleteAfter)
+void CameraUI::slotDownload(bool onlySelected, bool deleteAfter, Album *album)
{
- // -- Get the destination album from digiKam library ---------------
-
- AlbumManager* man = AlbumManager::instance();
-
- Album* album = man->currentAlbum();
- if (album && album->type() != Album::PHYSICAL)
- album = 0;
-
- QString header(i18n("<p>Please select the destination album from the digiKam library to "
- "import the camera pictures into.</p>"));
-
- QString newDirName;
+ QString newDirName;
IconItem* firstItem = d->view->firstItem();
if (firstItem)
{
@@ -1115,16 +1104,32 @@
}
}
- album = AlbumSelectDialog::selectAlbum(this, (PAlbum*)album, header, newDirName,
- d->autoAlbumDateCheck->isChecked());
+ // -- Get the destination album from digiKam library if necessary ---------------
if (!album)
- return;
+ {
+ AlbumManager* man = AlbumManager::instance();
+ album = man->currentAlbum();
+ if (album && album->type() != Album::PHYSICAL)
+ album = 0;
+
+ QString header(i18n("<p>Please select the destination album from the digiKam library to "
+ "import the camera pictures into.</p>"));
+
+ album = AlbumSelectDialog::selectAlbum(this, (PAlbum*)album, header, newDirName,
+ d->autoAlbumDateCheck->isChecked());
+
+ if (!album) return;
+ }
+
+ PAlbum *pAlbum = dynamic_cast<PAlbum*>(album);
+ if (!pAlbum) return;
+
// -- Prepare downloading of camera items ------------------------
KURL url;
- url.setPath(((PAlbum*)album)->folderPath());
+ url.setPath(pAlbum->folderPath());
d->controller->downloadPrep();
--- branches/extragear/kde3/graphics/digikam/utilities/cameragui/cameraui.h #705139:705140
@@ -43,6 +43,7 @@
namespace Digikam
{
+class Album;
class CameraIconViewItem;
class CameraUIPriv;
@@ -71,6 +72,10 @@
void signalLastDestination(const KURL&);
void signalAlbumSettingsChanged();
+public slots:
+
+ void slotDownload(bool onlySelected, bool deleteAfter, Album *pAlbum=0);
+
protected:
void closeEvent(QCloseEvent* e);
@@ -109,7 +114,6 @@
void slotUploadItems(const KURL::List&);
void slotDownloadSelected();
void slotDownloadAll();
- void slotDownload(bool onlySelected, bool deleteAfter);
void slotDeleteSelected();
void slotDownloadAndDeleteSelected();
void slotDeleteAll();
More information about the Digikam-devel
mailing list