ListView::ListView(QWidget *parent)
: QListWidget(parent),
- m_previousItem(0)
+ m_currentItem(0)
{
qDebug() << __PRETTY_FUNCTION__;
+ setSelectionMode(QAbstractItemView::SingleSelection);
+ setAutoFillBackground(false);
+ viewport()->setAutoFillBackground(false);
+
connect(this, SIGNAL(itemClicked(QListWidgetItem*)),
this, SLOT(listItemClicked(QListWidgetItem*)));
}
addItem(item);
}
+void ListView::clearItemSelection()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ clearSelection();
+
+ if (m_currentItem)
+ m_currentItem->setSelected(false);
+}
+
void ListView::clearList()
{
qDebug() << __PRETTY_FUNCTION__;
+ qDeleteAll(m_listItems.begin(), m_listItems.end());
m_listItems.clear();
clear();
+
+ m_currentItem = 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));
+ if (m_currentItem == item)
+ m_currentItem = 0;
delete item;
}
}
{
qDebug() << __PRETTY_FUNCTION__;
- if (m_previousItem)
- m_previousItem->setSelected(false);
+ m_filteredItemIDs.clear();
foreach (ListItem *item, m_listItems)
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__;
+ m_filteredItemIDs = itemIDs;
+
foreach (ListItem *item, m_listItems) {
- if (userIDs.contains(item->id()))
- 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)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ if (m_filteredItemIDs.isEmpty()) {
+ foreach (ListItem *item, m_listItems) {
+ 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)) {
+ item->setHidden(false);
+ } else {
+ item->setSelected(false);
+ item->setHidden(true);
+ }
+ }
+ }
}
+
+ emit listItemSelectionChanged();
}
-ListItem *ListView::takeListItemFromView(const QString &userID)
+ListItem *ListView::takeListItemFromView(const QString &itemID)
{
qDebug() << __PRETTY_FUNCTION__;
- ListItem *item = listItem(userID);
+ ListItem *item = listItem(itemID);
takeItem(row(item));
return item;
}
+bool ListView::listItemClicked(ListItem *clickedItem)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ if (m_currentItem == clickedItem) {
+ clickedItem->toggleSelection();
+ } else {
+ if (m_currentItem)
+ m_currentItem->setSelected(false);
+
+ clickedItem->setSelected(true);
+ }
+ m_currentItem = clickedItem;
+
+ emit listItemSelectionChanged();
+
+ return clickedItem->isSelected();
+}
+
void ListView::listItemClicked(QListWidgetItem *item)
{
- qWarning() << __PRETTY_FUNCTION__;
+ qDebug() << __PRETTY_FUNCTION__;
+
+ ListItem *currentItem = dynamic_cast<ListItem*>(item);
+
+ if (currentItem)
+ listItemClicked(currentItem);
+}
+
+ListItem *ListView::listItem(const QString &itemID)
+{
+ qDebug() << __PRETTY_FUNCTION__;
- ListItem *currentItem = static_cast<ListItem*>(item);
+ return dynamic_cast<ListItem*>(m_listItems.value(itemID));
+}
- if (currentItem) {
- qWarning() << __PRETTY_FUNCTION__ << "currentItem != 0";
- if (m_previousItem == currentItem) {
- qWarning() << __PRETTY_FUNCTION__ << "previousItem == currentItem";
- bool selected = currentItem->toggleSelection();
+ListItem *ListView::listItemAt(int index)
+{
+ qDebug() << __PRETTY_FUNCTION__;
- if (selected)
- ;//emit listItemClicked(currentItem->coordinates());
+ ListItem *listItem = 0;
- } else {
- qWarning() << __PRETTY_FUNCTION__ << "previousItem != currentItem";
- if (m_previousItem)
- m_previousItem->setSelected(false);
+ if (index < count())
+ listItem = dynamic_cast<ListItem*>(item(index));
- currentItem->setSelected(true);
- //emit listItemClicked(currentItem->coordinates());
- }
+ 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);
+ }
+}
- m_previousItem = currentItem;
+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()
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ QList<QListWidgetItem *> selectedListItems = selectedItems();
+
+ if (!selectedListItems.isEmpty())
+ return dynamic_cast<ListItem *>(selectedListItems.first());
+ else
+ return 0;
+}
+void ListView::setSelectedItem(ListItem *item)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ listItemClicked(item);
+}
-ListItem *ListView::listItem(const QString &userID)
+ListView::~ListView()
{
qDebug() << __PRETTY_FUNCTION__;
- return static_cast<ListItem*>(m_listItems.value(userID));
+ clearList();
}