Fixed search history settings read and write and added search history
[situare] / src / ui / listview.cpp
index bf01d5c..40ec9c2 100644 (file)
@@ -27,7 +27,7 @@
 
 ListView::ListView(QWidget *parent)
     : QListWidget(parent),
-      m_previousItem(0)
+      m_currentItem(0)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
@@ -58,10 +58,12 @@ void ListView::addListItemToView(ListItem *item)
 
 void ListView::clearItemSelection()
 {
+    qDebug() << __PRETTY_FUNCTION__;
+
     clearSelection();
 
-    if (m_previousItem)
-        m_previousItem->setSelected(false);
+    if (m_currentItem)
+        m_currentItem->setSelected(false);
 }
 
 void ListView::clearList()
@@ -72,7 +74,7 @@ void ListView::clearList()
     m_listItems.clear();
     clear();
 
-    m_previousItem = 0;
+    m_currentItem = 0;
 }
 
 void ListView::clearUnused(const QStringList &itemIDs)
@@ -84,8 +86,8 @@ void ListView::clearUnused(const QStringList &itemIDs)
             ListItem *item = m_listItems.take(key);
             if (item) {
                 takeItem(row(item));
-                if (m_previousItem == item)
-                    m_previousItem = 0;
+                if (m_currentItem == item)
+                    m_currentItem = 0;
                 delete item;
             }
         }
@@ -116,11 +118,15 @@ void ListView::filter(const QList<QString> &itemIDs)
     m_filteredItemIDs = itemIDs;
 
     foreach (ListItem *item, m_listItems) {
-        if (itemIDs.contains(m_listItems.key(item)))
-            setItemHidden(item, false);
-        else
-            setItemHidden(item, true);
+        if (itemIDs.contains(m_listItems.key(item))) {
+            item->setHidden(false);
+        } else {
+            item->setSelected(false);
+            item->setHidden(true);
+        }
     }
+
+    emit listItemSelectionChanged();
 }
 
 void ListView::filter(const QString &pattern)
@@ -129,22 +135,28 @@ void ListView::filter(const QString &pattern)
 
     if (m_filteredItemIDs.isEmpty()) {
         foreach (ListItem *item, m_listItems) {
-            if (item->title().contains(pattern, Qt::CaseInsensitive))
-                setItemHidden(item, false);
-            else
-                setItemHidden(item, true);
+            if (item->title().contains(pattern, Qt::CaseInsensitive)) {
+                item->setHidden(false);
+            } else {
+                item->setSelected(false);
+                item->setHidden(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);
+                if (item->title().contains(pattern, Qt::CaseInsensitive)) {
+                    item->setHidden(false);
+                } else {
+                    item->setSelected(false);
+                    item->setHidden(true);
+                }
             }
         }
     }
+
+    emit listItemSelectionChanged();
 }
 
 ListItem *ListView::takeListItemFromView(const QString &itemID)
@@ -156,21 +168,23 @@ ListItem *ListView::takeListItemFromView(const QString &itemID)
     return item;
 }
 
-bool ListView::listItemClicked(ListItem *item)
+bool ListView::listItemClicked(ListItem *clickedItem)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    if (m_previousItem == item) {
-        item->toggleSelection();
+    if (m_currentItem == clickedItem) {
+        clickedItem->toggleSelection();
     } else {
-        if (m_previousItem)
-            m_previousItem->setSelected(false);
+        if (m_currentItem)
+            m_currentItem->setSelected(false);
 
-        item->setSelected(true);
+        clickedItem->setSelected(true);
     }
-    m_previousItem = item;
+    m_currentItem = clickedItem;
 
-    return item->isSelected();
+    emit listItemSelectionChanged();
+
+    return clickedItem->isSelected();
 }
 
 void ListView::listItemClicked(QListWidgetItem *item)
@@ -194,20 +208,39 @@ ListItem *ListView::listItemAt(int index)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    QHashIterator<QString, ListItem*> itemIterator(m_listItems);
-    ListItem *item = 0;
-    int counter = 0;
+    ListItem *listItem = 0;
 
-    while (itemIterator.hasNext()) {
-        itemIterator.next();
-        if (index == counter) {
-            item = itemIterator.value();
-            break;
-        }
-        counter++;
+    if (index < count())
+        listItem = dynamic_cast<ListItem*>(item(index));
+
+    return listItem;
+}
+
+void ListView::prependListItem(const QString &key, ListItem *item)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    if (!m_listItems.contains(key)) {
+        insertItem(0, item);
+        m_listItems.insert(key, item);
     }
+}
 
-    return item;
+void ListView::removeLastItem()
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    ListItem *item = listItemAt(count() - 1);
+
+    if (item) {
+        if (item) {
+            m_listItems.remove(item->title());
+            takeItem(row(item));
+            if (m_currentItem == item)
+                m_currentItem = 0;
+            delete item;
+        }
+    }
 }
 
 ListItem *ListView::selectedItem()