Bug 115154 - digikam usability: tags filter misses 'deselect all Tags' in context menu
Summary: digikam usability: tags filter misses 'deselect all Tags' in context menu
Status: RESOLVED FIXED
Alias: None
Product: digikam
Classification: Applications
Component: Usability-Menus (show other bugs)
Version: 0.8.0
Platform: unspecified Linux
: NOR wishlist
Target Milestone: ---
Assignee: Digikam Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-10-26 23:09 UTC by Achim Bohnet
Modified: 2017-08-02 21:08 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In: 0.9.0


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Achim Bohnet 2005-10-26 23:09:41 UTC
Version:           0.8.0-beta2 (using KDE 3.4.3, Kubuntu Package 4:3.4.3-0ubuntu1 )
Compiler:          Target: i486-linux-gnu
OS:                Linux (i686) release 2.6.12-9-686

when one has selected several tags in 'tag filters'
it's hard to delected them to start from scratch.

A 'selected all tags' im 'Tags Filter' can fix it
another possibllity more powerful in flat submenu RMB

'Deselect Tags ->  all
                   selected-tag1
                   ...
                   selected-tagN

Anyother solution that easily allows to see or
find out that filter tags are selected is okay too ;)

Achim
Comment 1 Alan Horkan 2006-03-22 10:57:28 UTC
typo in summary "delect" should be "deselect" 
(trying to correct it if my permissions allow)
Comment 2 caulier.gilles 2006-09-03 14:31:38 UTC
Achim,

Given a complex subtag selection menu is a non-sence for me : the tag list are already in the sidebar view. No need to duplicate tags in a sub-menu.

But, i'm agree with you, global selection/unseletion options are mandadory. This is my proposal of options set :

- Unselect all
- Select All
- Invert Selection

Gilles
Comment 3 caulier.gilles 2006-09-03 16:50:35 UTC
SVN commit 580439 by cgilles:

digikam from trunk : Tags Filter View : new options to 

- "Select All" tags
- "Deselect" all tags
- "Invert Selection" of tags

BUG: 115154
CCBUGS: 115157

 M  +58 -7     tagfilterview.cpp  


--- trunk/extragear/graphics/digikam/digikam/tagfilterview.cpp #580438:580439
@@ -143,6 +143,8 @@
     QTimer *timer;
 };
 
+// ---------------------------------------------------------------------
+
 TagFilterView::TagFilterView(QWidget* parent)
              : FolderView(parent)
 {
@@ -330,8 +332,7 @@
     }
     else
     {
-        TagFilterViewItem* parent =
-            (TagFilterViewItem*)(tag->parent()->extraData(this));
+        TagFilterViewItem* parent = (TagFilterViewItem*)(tag->parent()->extraData(this));
         if (!parent)
         {
             kdWarning() << k_funcinfo << " Failed to find parent for Tag "
@@ -354,8 +355,7 @@
     if (!tag)
         return;
 
-    TagFilterViewItem* item =
-            (TagFilterViewItem*)(tag->extraData(this));
+    TagFilterViewItem* item = (TagFilterViewItem*)(tag->extraData(this));
     if (item)
     {
         item->setText(0, tag->title());
@@ -507,10 +507,15 @@
 
     if (item)
     {
-        popmenu.insertItem(SmallIcon("pencil"), i18n("Edit Tag Properties..."), 11);
-        popmenu.insertItem(SmallIcon("reload_page"), i18n("Reset Tag Icon"), 13);
-        popmenu.insertItem(SmallIcon("edittrash"), i18n("Delete Tag"), 12);
+        popmenu.insertItem(SmallIcon("pencil"),      i18n("Edit Tag Properties..."), 11);
+        popmenu.insertItem(SmallIcon("reload_page"), i18n("Reset Tag Icon"),         13);
+        popmenu.insertItem(SmallIcon("edittrash"),   i18n("Delete Tag"),             12);
     }
+ 
+    popmenu.insertSeparator();
+    popmenu.insertItem(i18n("Select All"),       14);
+    popmenu.insertItem(i18n("Deselect"),         15);
+    popmenu.insertItem(i18n("Invert Selection"), 16);
 
     int choice = popmenu.exec((QCursor::pos()));
     switch( choice )
@@ -536,6 +541,52 @@
             AlbumManager::instance()->updateTAlbumIcon(item->m_tag, QString("tag"), 0, errMsg);
             break;
         }        
+        case 14:
+        {
+            QListViewItemIterator it(this, QListViewItemIterator::NotChecked);
+            while (it.current())
+            {
+                TagFilterViewItem* item = (TagFilterViewItem*)it.current();
+                item->setOn(true);
+                ++it;
+            }
+            triggerChange();
+            break;
+        }
+        case 15:
+        {
+            QListViewItemIterator it(this, QListViewItemIterator::Checked);
+            while (it.current())
+            {
+                TagFilterViewItem* item = (TagFilterViewItem*)it.current();
+                item->setOn(false);
+                ++it;
+            }
+            triggerChange();
+            break;
+        }
+        case 16:
+        {
+            QListViewItemIterator it(this);
+            while (it.current())
+            {
+                TagFilterViewItem* item = (TagFilterViewItem*)it.current();
+
+                // Toogle all root tags filter.
+                TAlbum *tag = item->m_tag;
+                if (tag)
+                    if (tag->parent()->isRoot())
+                        item->setOn(!item->isOn());
+
+                // Toogle "Not Tagged" item tag filter.
+                if (item->m_untagged)
+                    item->setOn(!item->isOn());
+
+                ++it;
+            }
+            triggerChange();
+            break;
+        }
         default:
             break;
     }
Comment 4 caulier.gilles 2006-09-03 17:47:10 UTC
SVN commit 580457 by cgilles:

digikam from trunk : Tags view from Comments & Tags side bar tab : new options to:

- "Select All" tags
- "Deselect" all tags
- "Invert Selection" of tags

CCBUGS: 115154, 115157

 M  +52 -6     imagedescedittab.cpp  


--- trunk/extragear/graphics/digikam/libs/imageproperties/imagedescedittab.cpp #580456:580457
@@ -508,8 +508,7 @@
     QListViewItemIterator it( d->tagsView);
     while (it.current())
     {
-        TAlbumCheckListItem* tItem =
-                dynamic_cast<TAlbumCheckListItem*>(it.current());
+        TAlbumCheckListItem* tItem = dynamic_cast<TAlbumCheckListItem*>(it.current());
 
         if (tItem)
         {
@@ -569,6 +568,7 @@
     QPopupMenu popmenu(this);
 
     popmenu.insertItem(SmallIcon("tag"), i18n("New Tag..."), 10);
+
     if (!album->isRoot())
     {
         popmenu.insertItem(SmallIcon("pencil"),      i18n("Edit Tag Properties..."), 11);
@@ -576,6 +576,11 @@
         popmenu.insertItem(SmallIcon("edittrash"),   i18n("Delete Tag"),             12);
     }
 
+    popmenu.insertSeparator();
+    popmenu.insertItem(i18n("Select All"),       14);
+    popmenu.insertItem(i18n("Deselect"),         15);
+    popmenu.insertItem(i18n("Invert Selection"), 16);
+
     switch (popmenu.exec(QCursor::pos()))
     {
         case 10:
@@ -601,6 +606,43 @@
             AlbumManager::instance()->updateTAlbumIcon(album, QString("tag"), 0, errMsg);
             break;
         }
+        case 14:
+        {
+            QListViewItemIterator it(d->tagsView, QListViewItemIterator::NotChecked);
+            while (it.current())
+            {
+                TAlbumCheckListItem* item = dynamic_cast<TAlbumCheckListItem*>(it.current());
+                item->setOn(true);
+                ++it;
+            }
+            break;
+        }
+        case 15:
+        {
+            QListViewItemIterator it(d->tagsView, QListViewItemIterator::Checked);
+            while (it.current())
+            {
+                TAlbumCheckListItem* item = dynamic_cast<TAlbumCheckListItem*>(it.current());
+                item->setOn(false);
+                ++it;
+            }
+            break;
+        }
+        case 16:
+        {
+            QListViewItemIterator it(d->tagsView);
+            while (it.current())
+            {
+                TAlbumCheckListItem* item = dynamic_cast<TAlbumCheckListItem*>(it.current());
+                TAlbum *tag = item->m_album;
+                if (tag)
+                    if (!tag->isRoot())
+                        item->setOn(!item->isOn());
+
+                ++it;
+            }
+            break;
+        }
         default:
             break;
     }
@@ -823,7 +865,8 @@
 void ImageDescEditTab::slotImagesChanged(int albumId)
 {
     Album *a = AlbumManager::instance()->findAlbum(albumId);
-    if (!d->ignoreImageAttributesWatch && !d->currInfo || !a || a->isRoot() || a->type() != Album::TAG)
+    if (!d->ignoreImageAttributesWatch && 
+        !d->currInfo || !a || a->isRoot() || a->type() != Album::TAG)
         return;
 
     updateTagsView();
@@ -831,19 +874,22 @@
 
 void ImageDescEditTab::slotImageRatingChanged(Q_LLONG imageId)
 {
-    if (!d->ignoreImageAttributesWatch && d->currInfo && d->currInfo->id() == imageId)
+    if (!d->ignoreImageAttributesWatch && 
+        d->currInfo && d->currInfo->id() == imageId)
         updateRating();
 }
 
 void ImageDescEditTab::slotImageCaptionChanged(Q_LLONG imageId)
 {
-    if (!d->ignoreImageAttributesWatch && d->currInfo && d->currInfo->id() == imageId)
+    if (!d->ignoreImageAttributesWatch && 
+        d->currInfo && d->currInfo->id() == imageId)
         updateComments();
 }
 
 void ImageDescEditTab::slotImageDateChanged(Q_LLONG imageId)
 {
-    if (!d->ignoreImageAttributesWatch && d->currInfo && d->currInfo->id() == imageId)
+    if (!d->ignoreImageAttributesWatch && 
+        d->currInfo && d->currInfo->id() == imageId)
         updateDate();
 }