+/*
+ 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();
}