void UserList::contentsMouseReleaseEvent(QMouseEvent *e) { QListViewItem *list_item = itemAt(contentsToViewport(e->pos())); if (list_item == NULL) return; switch (static_cast<UserViewItemBase*>(list_item)->type()){ case USR_ITEM:{ ContactItem *item = static_cast<ContactItem*>(list_item); if (isSelected(item->id())){ for (list<unsigned>::iterator it = selected.begin(); it != selected.end(); ++it){ if ((*it) == item->id()){ selected.erase(it); break; } } }else{ selected.push_back(item->id()); } item->repaint(); item->parent()->repaint(); emit selectChanged(); break; } case GRP_ITEM:{ GroupItem *item = static_cast<GroupItem*>(list_item); if (isGroupSelected(item->id())){ for (QListViewItem *i = item->firstChild(); i; i = i->nextSibling()){ ContactItem *ci = static_cast<ContactItem*>(i); list<unsigned>::iterator it; for (it = selected.begin(); it != selected.end(); ++it){ if ((*it) == ci->id()){ selected.erase(it); break; } } ci->repaint(); } }else{ for (QListViewItem *i = item->firstChild(); i; i = i->nextSibling()){ ContactItem *ci = static_cast<ContactItem*>(i); list<unsigned>::iterator it; for (it = selected.begin(); it != selected.end(); ++it) if ((*it) == ci->id()) break; if (it == selected.end()){ selected.push_back(ci->id()); ci->repaint(); } } } item->repaint(); emit selectChanged(); break; } } m_pressedItem = NULL; }