Fixed ListView filtering to notice if filtering by item ID is on.
authorJussi Laitinen <jupe@l3l7588.ixonos.local>
Tue, 17 Aug 2010 06:27:12 +0000 (09:27 +0300)
committerJussi Laitinen <jupe@l3l7588.ixonos.local>
Tue, 17 Aug 2010 06:27:12 +0000 (09:27 +0300)
src/ui/listview.cpp
src/ui/listview.h

index 1538f0c..cd0090a 100644 (file)
@@ -86,6 +86,8 @@ void ListView::clearFilter()
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    m_filteredItemIDs.clear();
+
     if (m_previousItem)
         m_previousItem->setSelected(false);
 
@@ -104,6 +106,8 @@ void ListView::filter(const QList<QString> &itemIDs)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    m_filteredItemIDs = itemIDs;
+
     foreach (ListItem *item, m_listItems) {
         if (itemIDs.contains(m_listItems.key(item)))
             setItemHidden(item, false);
@@ -116,11 +120,23 @@ void ListView::filter(const QString &pattern)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    foreach (ListItem *item, m_listItems) {
-        if (item->title().contains(pattern, Qt::CaseInsensitive))
-            setItemHidden(item, false);
-        else
-            setItemHidden(item, true);
+    if (m_filteredItemIDs.isEmpty()) {
+        foreach (ListItem *item, m_listItems) {
+            if (item->title().contains(pattern, Qt::CaseInsensitive))
+                setItemHidden(item, false);
+            else
+                setItemHidden(item, true);
+        }
+    } else {
+        foreach (QString key, m_filteredItemIDs) {
+            ListItem *item = m_listItems.value(key);
+            if (item) {
+                if (item->title().contains(pattern, Qt::CaseInsensitive))
+                    setItemHidden(item, false);
+                else
+                    setItemHidden(item, true);
+            }
+        }
     }
 }
 
index 650175e..6c7b25a 100644 (file)
@@ -85,7 +85,7 @@ public:
     /**
     * @brief Clears filtering from list.
     *
-    * Shows all items.
+    * Clears m_filteredItemIDs and shows all items.
     */
     void clearFilter();
 
@@ -116,7 +116,7 @@ public:
     /**
     * @brief Filters list by text pattern.
     *
-    * Filtering uses item names.
+    * Filtering uses item names. If filtering by item IDs is on, filters only those items.
     *
     * @param pattern text pattern to filter
     */
@@ -185,6 +185,8 @@ private slots:
 private:
     QHash<QString, ListItem *> m_listItems; ///< List of items in this view. Key = user ID
 
+    QList<QString> m_filteredItemIDs;       ///< List of filtered item IDs
+
     ListItem *m_previousItem;               ///< Previously selected item
 };