| Summary: | digikam assigns tags not only to selected images with drag and drop | ||
|---|---|---|---|
| Product: | [Applications] digikam | Reporter: | Achim Bohnet <ach> |
| Component: | Usability-Drag&Drop | Assignee: | Digikam Developers <digikam-bugs-null> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | ||
| Priority: | NOR | ||
| Version First Reported In: | 0.8.0 | ||
| Target Milestone: | --- | ||
| Platform: | unspecified | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | 0.9.1 | |
| Sentry Crash Report: | |||
|
Description
Achim Bohnet
2005-10-26 22:54:36 UTC
SVN commit 615438 by cgilles:
digikam from trunk : fix drag and drop behaviours between tags view and album icon view. All pop-up menu will ask you if you want to assign tags to :
- All album items.
- dropped item only.
If album have items selected, 2 options are also added:
- Selected Items only .
- Selected and dropped items only (if dropped item is not in selection).
BUG: 115153
M +149 -37 albumiconview.cpp
--- trunk/extragear/graphics/digikam/digikam/albumiconview.cpp #615437:615438
@@ -134,30 +134,30 @@
toolTip = 0;
}
- QString albumTitle;
- QString albumDate;
- QString albumComments;
+ QString albumTitle;
+ QString albumDate;
+ QString albumComments;
- QRect itemRect;
- QRect itemRatingRect;
- QRect itemDateRect;
- QRect itemModDateRect;
- QRect itemPixmapRect;
- QRect itemNameRect;
- QRect itemCommentsRect;
- QRect itemResolutionRect;
- QRect itemSizeRect;
- QRect itemTagRect;
- QRect bannerRect;
+ QRect itemRect;
+ QRect itemRatingRect;
+ QRect itemDateRect;
+ QRect itemModDateRect;
+ QRect itemPixmapRect;
+ QRect itemNameRect;
+ QRect itemCommentsRect;
+ QRect itemResolutionRect;
+ QRect itemSizeRect;
+ QRect itemTagRect;
+ QRect bannerRect;
- QPixmap itemRegPixmap;
- QPixmap itemSelPixmap;
- QPixmap bannerPixmap;
- QPixmap ratingPixmap;
+ QPixmap itemRegPixmap;
+ QPixmap itemSelPixmap;
+ QPixmap bannerPixmap;
+ QPixmap ratingPixmap;
- QFont fnReg;
- QFont fnCom;
- QFont fnXtra;
+ QFont fnReg;
+ QFont fnCom;
+ QFont fnXtra;
QDict<AlbumIconItem> itemDict;
@@ -382,7 +382,7 @@
if (!item->album())
{
DWarning() << "No album for item: " << item->name()
- << ", albumID: " << item->albumID() << endl;
+ << ", albumID: " << item->albumID() << endl;
continue;
}
@@ -486,8 +486,7 @@
// --------------------------------------------------------
- KMimeType::Ptr mimePtr = KMimeType::findByURL(iconItem->imageInfo()->kurl(),
- 0, true, true);
+ KMimeType::Ptr mimePtr = KMimeType::findByURL(iconItem->imageInfo()->kurl(), 0, true, true);
QValueVector<KService::Ptr> serviceVector;
KTrader::OfferList offers = KTrader::self()->query(mimePtr->name(), "Type == 'Application'");
@@ -1150,8 +1149,21 @@
if (talbum)
{
QPopupMenu popMenu(this);
- popMenu.insertItem(i18n("&Assign Tag '%1' to Selected Images")
- .arg(talbum->prettyURL()), 10 );
+
+ bool itemsSelected = false;
+ for (IconItem *it = firstItem(); it; it = it->nextItem())
+ if (it->isSelected())
+ itemsSelected = true;
+
+ if (itemsSelected)
+ {
+ popMenu.insertItem(i18n("&Assign '%1' to Selected Items").arg(talbum->url()), 10);
+ popMenu.insertItem(i18n("&Assign '%1' to Selected/Dropped Items").arg(talbum->url()), 11);
+ popMenu.insertSeparator(-1);
+ }
+
+ popMenu.insertItem(i18n("&Assign '%1' to All Items").arg(talbum->url()), 12);
+ popMenu.insertItem(i18n("&Assign '%1' to Dropped Item").arg(talbum->url()), 13);
popMenu.insertSeparator(-1);
popMenu.insertItem( SmallIcon("cancel"), i18n("C&ancel") );
@@ -1159,14 +1171,23 @@
int id = popMenu.exec(QCursor::pos());
switch(id)
{
- case 10:
+ case 10: // Selected Items
{
- AlbumIconItem *albumItem = findItem(event->pos());
- if (albumItem)
+ for (IconItem *it = firstItem(); it; it = it->nextItem())
{
- albumItem->imageInfo()->setTag(tagID);
+ if (it->isSelected())
+ {
+ AlbumIconItem *albumItem = static_cast<AlbumIconItem *>(it);
+ albumItem->imageInfo()->setTag(tagID);
+ }
}
+ d->imageLister->refresh();
+ updateContents();
+ break;
+ }
+ case 11: // Selected and Dropped Items
+ {
for (IconItem *it = firstItem(); it; it = it->nextItem())
{
if (it->isSelected())
@@ -1175,11 +1196,37 @@
albumItem->imageInfo()->setTag(tagID);
}
}
+
+ AlbumIconItem *albumItem = findItem(event->pos());
+ if (albumItem)
+ albumItem->imageInfo()->setTag(tagID);
d->imageLister->refresh();
updateContents();
break;
}
+ case 12: // All Items
+ {
+ for (IconItem *it = firstItem(); it; it = it->nextItem())
+ {
+ AlbumIconItem *albumItem = static_cast<AlbumIconItem *>(it);
+ albumItem->imageInfo()->setTag(tagID);
+ }
+
+ d->imageLister->refresh();
+ updateContents();
+ break;
+ }
+ case 13: // Dropped Item only.
+ {
+ AlbumIconItem *albumItem = findItem(event->pos());
+ if (albumItem)
+ albumItem->imageInfo()->setTag(tagID);
+
+ d->imageLister->refresh();
+ updateContents();
+ break;
+ }
default:
break;
}
@@ -1193,7 +1240,21 @@
ds >> tagIDs;
QPopupMenu popMenu(this);
- popMenu.insertItem(i18n("&Assign Tags to Selected Images"), 10);
+
+ bool itemsSelected = false;
+ for (IconItem *it = firstItem(); it; it = it->nextItem())
+ if (it->isSelected())
+ itemsSelected = true;
+
+ if (itemsSelected)
+ {
+ popMenu.insertItem(i18n("&Assign Tags to Selected Items"), 10);
+ popMenu.insertItem(i18n("&Assign Tags to Selected/Dropped Items"), 11);
+ popMenu.insertSeparator(-1);
+ }
+
+ popMenu.insertItem(i18n("&Assign Tags to All Items"), 12);
+ popMenu.insertItem(i18n("&Assign Tags to Dropped Item"), 13);
popMenu.insertSeparator(-1);
popMenu.insertItem( SmallIcon("cancel"), i18n("C&ancel") );
@@ -1201,18 +1262,27 @@
int id = popMenu.exec(QCursor::pos());
switch(id)
{
- case 10:
+ case 10: // Selected Items
{
- AlbumIconItem *albumItem = findItem(event->pos());
- if (albumItem)
+ for (IconItem *it = firstItem(); it; it = it->nextItem())
{
- for (QValueList<int>::iterator it = tagIDs.begin();
- it != tagIDs.end(); ++it)
+ if (it->isSelected())
{
- albumItem->imageInfo()->setTag(*it);
+ AlbumIconItem *albumItem = static_cast<AlbumIconItem*>(it);
+ for (QValueList<int>::iterator it = tagIDs.begin();
+ it != tagIDs.end(); ++it)
+ {
+ albumItem->imageInfo()->setTag(*it);
+ }
}
}
+ d->imageLister->refresh();
+ updateContents();
+ break;
+ }
+ case 11: // Selected and Dropped Items
+ {
for (IconItem *it = firstItem(); it; it = it->nextItem())
{
if (it->isSelected())
@@ -1225,11 +1295,53 @@
}
}
}
+
+ AlbumIconItem *albumItem = findItem(event->pos());
+ if (albumItem)
+ {
+ for (QValueList<int>::iterator it = tagIDs.begin();
+ it != tagIDs.end(); ++it)
+ {
+ albumItem->imageInfo()->setTag(*it);
+ }
+ }
d->imageLister->refresh();
updateContents();
break;
}
+ case 12: // All Items
+ {
+ for (IconItem *it = firstItem(); it; it = it->nextItem())
+ {
+ AlbumIconItem *albumItem = static_cast<AlbumIconItem*>(it);
+ for (QValueList<int>::iterator it = tagIDs.begin();
+ it != tagIDs.end(); ++it)
+ {
+ albumItem->imageInfo()->setTag(*it);
+ }
+ }
+
+ d->imageLister->refresh();
+ updateContents();
+ break;
+ }
+ case 13: // Dropped item only.
+ {
+ AlbumIconItem *albumItem = findItem(event->pos());
+ if (albumItem)
+ {
+ for (QValueList<int>::iterator it = tagIDs.begin();
+ it != tagIDs.end(); ++it)
+ {
+ albumItem->imageInfo()->setTag(*it);
+ }
+ }
+
+ d->imageLister->refresh();
+ updateContents();
+ break;
+ }
default:
break;
}
*** Bug 117403 has been marked as a duplicate of this bug. *** Achim, 115153 is a closed file... Do not duplicate another one here... Gilles Sorry, my suggestion with several selections was a bad one. Much too hard use and totally different how other apps deal with it :( As already noted in duplicate #117403. It's much easier and used in other apps too that a drop outside an selection, clears the selection and just gets applied to the dropped on object. This way only one menu entry (+ cancel?) is necessary Assign '...' to image when dropped on an image (outside of an existing selection, which gets cleared), or Assign '...' to selection when dropped on a selection. This speeds up the workflow considerably. Please reopen. Sorry for my bad advise, Achim Achim, First , the duplicate file is right. I have not read indeep the content of 117403. Sorry for the sound. In second, about the "dropped on object" stuff that i have fixed by #115153 (Assigns tags not only to selected images with drag and drop), i will polish implementation and simplified the workflow... Gilles SVN commit 615664 by cgilles: digikam from trunk : polish Album Icon View pop-up menu contents when tags are dropped on album items. CCBUGS: 115153 M +35 -57 albumiconview.cpp M +2 -2 albumiconview.h --- trunk/extragear/graphics/digikam/digikam/albumiconview.cpp #615663:615664 @@ -1,11 +1,12 @@ /* ============================================================ * Authors: Renchi Raju <renchi@pooh.tam.uiuc.edu> * Caulier Gilles <caulier dot gilles at kdemail dot net> + * Marcel Wiesweg <marcel.wiesweg@gmx.de> * Date : 2002-16-10 * Description : album icon view * * Copyright 2002-2005 by Renchi Raju and Gilles Caulier - * Copyright 2006 by Gilles Caulier + * Copyright 2006 by Gilles Caulier and Marcel Wiesweg * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General @@ -1155,23 +1156,30 @@ if (it->isSelected()) itemsSelected = true; + bool itemDropped = false; + AlbumIconItem *albumItem = findItem(event->pos()); + if (albumItem) + itemDropped = true; + + popMenu.insertItem(SmallIcon("tag"), + i18n("Assign '%1' to &All Items").arg(talbum->url().mid(1)), 11); + if (itemsSelected) - { - popMenu.insertItem(i18n("&Assign '%1' to Selected Items").arg(talbum->url()), 10); - popMenu.insertItem(i18n("&Assign '%1' to Selected/Dropped Items").arg(talbum->url()), 11); - popMenu.insertSeparator(-1); - } + popMenu.insertItem(SmallIcon("tag"), + i18n("Assign '%1' to &Selected Items").arg(talbum->url().mid(1)), 10); + + if (itemDropped) + popMenu.insertItem(SmallIcon("tag"), + i18n("Assign '%1' to &Dropped Item").arg(talbum->url().mid(1)), 12); - popMenu.insertItem(i18n("&Assign '%1' to All Items").arg(talbum->url()), 12); - popMenu.insertItem(i18n("&Assign '%1' to Dropped Item").arg(talbum->url()), 13); popMenu.insertSeparator(-1); - popMenu.insertItem( SmallIcon("cancel"), i18n("C&ancel") ); + popMenu.insertItem(SmallIcon("cancel"), i18n("&Cancel")); popMenu.setMouseTracking(true); int id = popMenu.exec(QCursor::pos()); switch(id) { - case 10: // Selected Items + case 10: // Selected and Dropped Items { for (IconItem *it = firstItem(); it; it = it->nextItem()) { @@ -1181,21 +1189,6 @@ albumItem->imageInfo()->setTag(tagID); } } - - d->imageLister->refresh(); - updateContents(); - break; - } - case 11: // Selected and Dropped Items - { - for (IconItem *it = firstItem(); it; it = it->nextItem()) - { - if (it->isSelected()) - { - AlbumIconItem *albumItem = static_cast<AlbumIconItem *>(it); - albumItem->imageInfo()->setTag(tagID); - } - } AlbumIconItem *albumItem = findItem(event->pos()); if (albumItem) @@ -1205,7 +1198,7 @@ updateContents(); break; } - case 12: // All Items + case 11: // All Items { for (IconItem *it = firstItem(); it; it = it->nextItem()) { @@ -1217,7 +1210,7 @@ updateContents(); break; } - case 13: // Dropped Item only. + case 12: // Dropped Item only. { AlbumIconItem *albumItem = findItem(event->pos()); if (albumItem) @@ -1246,23 +1239,27 @@ if (it->isSelected()) itemsSelected = true; + bool itemDropped = false; + AlbumIconItem *albumItem = findItem(event->pos()); + if (albumItem) + itemDropped = true; + + popMenu.insertItem(SmallIcon("tag"), i18n("Assign Tags to &All Items"), 11); + if (itemsSelected) - { - popMenu.insertItem(i18n("&Assign Tags to Selected Items"), 10); - popMenu.insertItem(i18n("&Assign Tags to Selected/Dropped Items"), 11); - popMenu.insertSeparator(-1); - } + popMenu.insertItem(SmallIcon("tag"), i18n("Assign Tags to &Selected Items"), 10); - popMenu.insertItem(i18n("&Assign Tags to All Items"), 12); - popMenu.insertItem(i18n("&Assign Tags to Dropped Item"), 13); + if (itemDropped) + popMenu.insertItem(SmallIcon("tag"), i18n("Assign Tags to &Dropped Item"), 12); + popMenu.insertSeparator(-1); - popMenu.insertItem( SmallIcon("cancel"), i18n("C&ancel") ); + popMenu.insertItem(SmallIcon("cancel"), i18n("&Cancel")); popMenu.setMouseTracking(true); int id = popMenu.exec(QCursor::pos()); switch(id) { - case 10: // Selected Items + case 10: // Selected and Dropped Items { for (IconItem *it = firstItem(); it; it = it->nextItem()) { @@ -1276,25 +1273,6 @@ } } } - - d->imageLister->refresh(); - updateContents(); - break; - } - case 11: // Selected and Dropped Items - { - for (IconItem *it = firstItem(); it; it = it->nextItem()) - { - if (it->isSelected()) - { - AlbumIconItem *albumItem = static_cast<AlbumIconItem*>(it); - for (QValueList<int>::iterator it = tagIDs.begin(); - it != tagIDs.end(); ++it) - { - albumItem->imageInfo()->setTag(*it); - } - } - } AlbumIconItem *albumItem = findItem(event->pos()); if (albumItem) @@ -1310,7 +1288,7 @@ updateContents(); break; } - case 12: // All Items + case 11: // All Items { for (IconItem *it = firstItem(); it; it = it->nextItem()) { @@ -1326,7 +1304,7 @@ updateContents(); break; } - case 13: // Dropped item only. + case 12: // Dropped item only. { AlbumIconItem *albumItem = findItem(event->pos()); if (albumItem) --- trunk/extragear/graphics/digikam/digikam/albumiconview.h #615663:615664 @@ -1,11 +1,12 @@ /* ============================================================ * Authors: Renchi Raju <renchi@pooh.tam.uiuc.edu> * Caulier Gilles <caulier dot gilles at kdemail dot net> + * Marcel Wiesweg <marcel.wiesweg@gmx.de> * Date : 2002-16-10 * Description : album icon view * * Copyright 2002-2005 by Renchi Raju and Gilles Caulier - * Copyright 2006 by Gilles Caulier + * Copyright 2006 by Gilles Caulier and Marcel Wiesweg * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General @@ -185,7 +186,6 @@ private: AlbumIconViewPrivate *d; - }; } // namespace Digikam |