[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdepim/akregator/src
From:       Frank Osterfeld <frank.osterfeld () kdemail ! net>
Date:       2006-01-25 8:52:18
Message-ID: 1138179138.717782.2577.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 502208 by osterfeld:

belated forwardport of 119724


 M  +47 -1     articlelistview.cpp  


--- trunk/KDE/kdepim/akregator/src/articlelistview.cpp #502207:502208
@@ -368,7 +368,12 @@
 void ArticleListView::slotArticlesUpdated(TreeNode* /*node*/, const QList<Article>& list)
 {
     setUpdatesEnabled(false);
+    // if only one item is selected and this selected item
+    // is deleted, we will select the next item in the list
+    bool singleSelected = selectedArticles().count() == 1;
 
+    Q3ListViewItem* next = 0; // the item to select if a selected item is deleted
+
     for (QList<Article>::ConstIterator it = list.begin(); it != list.end(); ++it)
     {
 
@@ -376,8 +381,16 @@
         {
             ArticleItem* ali = d->articleMap[(*it).guid()];
 
-            if ((*it).isDeleted()) // if article was set to deleted, delete item
+            if (ali && (*it).isDeleted()) // if article was set to deleted, delete item
             {
+                if (singleSelected && ali->isSelected())
+                {
+                    if (ali->itemBelow())
+                        next = ali->itemBelow();
+                    else if (ali->itemAbove())
+                        next = ali->itemAbove();
+                }
+            
                 d->articleMap.remove((*it).guid());
                 delete ali;
             }
@@ -391,22 +404,55 @@
         }
     }
 
+    // if the only selected item was deleted, select
+    // an item next to it
+    if (singleSelected && next != 0)
+    {
+        setSelected(next, true);
+        setCurrentItem(next);
+    }
+
     setUpdatesEnabled(true);
     triggerUpdate();
 }
 
 void ArticleListView::slotArticlesRemoved(TreeNode* /*node*/, const QList<Article>& list)
 {
+    // if only one item is selected and this selected item
+    // is deleted, we will select the next item in the list
+    bool singleSelected = selectedArticles().count() == 1;
+   
+    Q3ListViewItem* next = 0; // the item to select if a selected item is deleted
+
     setUpdatesEnabled(false);
+    
     for (QList<Article>::ConstIterator it = list.begin(); it != list.end(); ++it)
     {
         if (d->articleMap.contains((*it).guid()))
         {
             ArticleItem* ali = d->articleMap[(*it).guid()];
             d->articleMap.remove((*it).guid());
+            
+            if (singleSelected && ali->isSelected())
+            {
+                if (ali->itemBelow())
+                    next = ali->itemBelow();
+                else if (ali->itemAbove())
+                    next = ali->itemAbove();
+            }
+
             delete ali;
         }
     }
+    
+    // if the only selected item was deleted, select
+    // an item next to it
+    if (singleSelected && next != 0)
+    {
+        setSelected(next, true);
+        setCurrentItem(next);
+    }
+
     setUpdatesEnabled(true);
     triggerUpdate();
 }
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic