Added routing feature to friend and location list.
[situare] / src / ui / listview.cpp
index d4459b2..e2dfbee 100644 (file)
@@ -31,6 +31,7 @@ ListView::ListView(QWidget *parent)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    setSelectionMode(QAbstractItemView::SingleSelection);
     setAutoFillBackground(false);
     viewport()->setAutoFillBackground(false);
 
@@ -65,12 +66,12 @@ void ListView::clearList()
     m_previousItem = 0;
 }
 
-void ListView::clearUnused(const QStringList &userIDs)
+void ListView::clearUnused(const QStringList &itemIDs)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
     foreach (QString key, m_listItems.keys()) {
-        if (!userIDs.contains(key)) {
+        if (!itemIDs.contains(key)) {
             ListItem *item = m_listItems.take(key);
             if (item) {
                 takeItem(row(item));
@@ -91,65 +92,113 @@ void ListView::clearFilter()
         setItemHidden(item, false);
 }
 
-bool ListView::contains(const QString &userID)
+bool ListView::contains(const QString &itemID)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    return m_listItems.contains(userID);
+    return m_listItems.contains(itemID);
 }
 
-void ListView::filter(const QList<QString> &userIDs)
+void ListView::filter(const QList<QString> &itemIDs)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
     foreach (ListItem *item, m_listItems) {
-        if (userIDs.contains(item->id()))
+        if (itemIDs.contains(m_listItems.key(item)))
             setItemHidden(item, false);
         else
             setItemHidden(item, true);
     }
 }
 
-ListItem *ListView::takeListItemFromView(const QString &userID)
+void ListView::filter(const QString &pattern)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    ListItem *item = listItem(userID);
+    foreach (ListItem *item, m_listItems) {
+        if (item->title().contains(pattern, Qt::CaseInsensitive))
+            setItemHidden(item, false);
+        else
+            setItemHidden(item, true);
+    }
+}
+
+ListItem *ListView::takeListItemFromView(const QString &itemID)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    ListItem *item = listItem(itemID);
     takeItem(row(item));
     return item;
 }
 
+void ListView::listItemClicked(ListItem *item)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    if (m_previousItem == item) {
+        item->toggleSelection();
+
+    } else {
+        if (m_previousItem)
+            m_previousItem->setSelected(false);
+
+        item->setSelected(true);
+    }
+    m_previousItem = item;
+}
+
 void ListView::listItemClicked(QListWidgetItem *item)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
     ListItem *currentItem = dynamic_cast<ListItem*>(item);
 
-    if (currentItem) {
-        if (m_previousItem == currentItem) {
-            currentItem->toggleSelection();
+    if (currentItem)
+        listItemClicked(currentItem);
+}
 
-        } else {
-            if (m_previousItem)
-                m_previousItem->setSelected(false);
+ListItem *ListView::listItem(const QString &itemID)
+{
+    qDebug() << __PRETTY_FUNCTION__;
 
-            currentItem->setSelected(true);
-        }
+    return dynamic_cast<ListItem*>(m_listItems.value(itemID));
+}
+
+ListItem *ListView::listItemAt(int index)
+{
+    qDebug() << __PRETTY_FUNCTION__;
 
-        m_previousItem = currentItem;
+    QHashIterator<QString, ListItem*> itemIterator(m_listItems);
+    ListItem *item = 0;
+    int counter = 0;
+
+    while (itemIterator.hasNext()) {
+        itemIterator.next();
+        if (index == counter) {
+            item = itemIterator.value();
+            break;
+        }
+        counter++;
     }
+
+    return item;
 }
 
+ListItem *ListView::selectedItem()
+{
+    qDebug() << __PRETTY_FUNCTION__;
 
+    return m_previousItem;
+}
 
-ListItem *ListView::listItem(const QString &userID)
+void ListView::setSelectedItem(ListItem *item)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
-    return dynamic_cast<ListItem*>(m_listItems.value(userID));
+    listItemClicked(item);
 }
 
-
 ListView::~ListView()
 {
     qDebug() << __PRETTY_FUNCTION__;