Added routing feature to friend and location list.
[situare] / src / ui / listview.cpp
index 984bc80..e2dfbee 100644 (file)
+/*
+   Situare - A location system for Facebook
+   Copyright (C) 2010  Ixonos Plc. Authors:
+
+       Jussi Laitinen - jussi.laitinen@ixonos.com
+
+   Situare is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License
+   version 2 as published by the Free Software Foundation.
+
+   Situare is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Situare; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
+   USA.
+*/
+
 #include <QDebug>
 
 #include "listitem.h"
 #include "listview.h"
+#include "friendlistitem.h"
 
 ListView::ListView(QWidget *parent)
     : QListWidget(parent),
-      previousItem(0)
+      m_previousItem(0)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
+    setSelectionMode(QAbstractItemView::SingleSelection);
+    setAutoFillBackground(false);
+    viewport()->setAutoFillBackground(false);
+
     connect(this, SIGNAL(itemClicked(QListWidgetItem*)),
             this, SLOT(listItemClicked(QListWidgetItem*)));
-//    connect(this, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
-//            this, SLOT(selectedChanged(QListWidgetItem*,QListWidgetItem*)));
 }
 
-void ListView::listItemClicked(QListWidgetItem *item)
+void ListView::addListItem(const QString &key, ListItem *item)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    if (!m_listItems.contains(key)) {
+        addItem(item);
+        m_listItems.insert(key, item);
+    }
+}
+
+void ListView::addListItemToView(ListItem *item)
 {
-    qWarning() << __PRETTY_FUNCTION__;
+    qDebug() << __PRETTY_FUNCTION__;
 
-    ListItem *currentItem = static_cast<ListItem*>(item);
+    addItem(item);
+}
 
-    if (currentItem) {
+void ListView::clearList()
+{
+    qDebug() << __PRETTY_FUNCTION__;
 
-        if (previousItem == currentItem) {
-            currentItem->toggleHeight();
-        }
-        else {
-            if (previousItem)
-                previousItem->setExpanded(false);
+    m_listItems.clear();
+    clear();
+
+    m_previousItem = 0;
+}
 
-            currentItem->setExpanded(true);
+void ListView::clearUnused(const QStringList &itemIDs)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    foreach (QString key, m_listItems.keys()) {
+        if (!itemIDs.contains(key)) {
+            ListItem *item = m_listItems.take(key);
+            if (item) {
+                takeItem(row(item));
+                delete item;
+            }
         }
+    }
+}
+
+void ListView::clearFilter()
+{
+    qDebug() << __PRETTY_FUNCTION__;
 
-        previousItem = currentItem;
+    if (m_previousItem)
+        m_previousItem->setSelected(false);
+
+    foreach (ListItem *item, m_listItems)
+        setItemHidden(item, false);
+}
+
+bool ListView::contains(const QString &itemID)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    return m_listItems.contains(itemID);
+}
+
+void ListView::filter(const QList<QString> &itemIDs)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    foreach (ListItem *item, m_listItems) {
+        if (itemIDs.contains(m_listItems.key(item)))
+            setItemHidden(item, false);
+        else
+            setItemHidden(item, true);
     }
 }
 
-void ListView::selectedChanged(QListWidgetItem *current, QListWidgetItem *previous)
+void ListView::filter(const QString &pattern)
 {
-    qWarning() << __PRETTY_FUNCTION__;
+    qDebug() << __PRETTY_FUNCTION__;
 
-    if (previous) {
-        ListItem *previousItem = static_cast<ListItem*>(previous);
+    foreach (ListItem *item, m_listItems) {
+        if (item->title().contains(pattern, Qt::CaseInsensitive))
+            setItemHidden(item, false);
+        else
+            setItemHidden(item, true);
+    }
+}
 
-        if (previousItem)
-            previousItem->toggleHeight();
+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)
+        listItemClicked(currentItem);
+}
+
+ListItem *ListView::listItem(const QString &itemID)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    return dynamic_cast<ListItem*>(m_listItems.value(itemID));
+}
+
+ListItem *ListView::listItemAt(int index)
+{
+    qDebug() << __PRETTY_FUNCTION__;
 
-    if (current) {
-        ListItem *currentItem = static_cast<ListItem*>(current);
+    QHashIterator<QString, ListItem*> itemIterator(m_listItems);
+    ListItem *item = 0;
+    int counter = 0;
 
-        if (currentItem)
-            currentItem->toggleHeight();
+    while (itemIterator.hasNext()) {
+        itemIterator.next();
+        if (index == counter) {
+            item = itemIterator.value();
+            break;
+        }
+        counter++;
     }
+
+    return item;
+}
+
+ListItem *ListView::selectedItem()
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    return m_previousItem;
+}
+
+void ListView::setSelectedItem(ListItem *item)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    listItemClicked(item);
+}
+
+ListView::~ListView()
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    clearList();
 }