void SearchManager::search(const QString &pattern, const KABC::Field::List &fields, Type type) { mPattern = pattern; mFields = fields; mType = type; KABC::Addressee::List allContacts; mContacts.clear(); #if KDE_VERSION >= 319 KABC::AddresseeList list(mAddressBook->allAddressees()); if(!fields.isEmpty()) list.sortByField(fields.first()); allContacts = list; #else KABC::AddressBook::ConstIterator abIt(mAddressBook->begin()); const KABC::AddressBook::ConstIterator abEndIt(mAddressBook->end()); for(; abIt != abEndIt; ++abIt) allContacts.append(*abIt); #endif #ifdef KDEPIM_NEW_DISTRLISTS // Extract distribution lists from allContacts mDistributionLists.clear(); KABC::Addressee::List::Iterator rmIt(allContacts.begin()); const KABC::Addressee::List::Iterator rmEndIt(allContacts.end()); while(rmIt != rmEndIt) { if(KPIM::DistributionList::isDistributionList(*rmIt)) { mDistributionLists.append(static_cast<KPIM::DistributionList>(*rmIt)); rmIt = allContacts.remove(rmIt); } else ++rmIt; } typedef KPIM::DistributionList::Entry Entry; if(!mSelectedDistributionList.isNull()) { const KPIM::DistributionList dl = KPIM::DistributionList::findByName(mAddressBook, mSelectedDistributionList); if(!dl.isEmpty()) { allContacts.clear(); const Entry::List entries = dl.entries(mAddressBook); const Entry::List::ConstIterator end = entries.end(); for(Entry::List::ConstIterator it = entries.begin(); it != end; ++it) { allContacts.append((*it).addressee); } } } #endif if(mPattern.isEmpty()) // no pattern, return all { mContacts = allContacts; emit contactsUpdated(); return; } const KABC::Field::List fieldList = !mFields.isEmpty() ? mFields : KABC::Field::allFields(); KABC::Addressee::List::ConstIterator it(allContacts.begin()); const KABC::Addressee::List::ConstIterator endIt(allContacts.end()); for(; it != endIt; ++it) { #ifdef KDEPIM_NEW_DISTRLISTS if(KPIM::DistributionList::isDistributionList(*it)) continue; #endif bool found = false; // search over all fields KABC::Field::List::ConstIterator fieldIt(fieldList.begin()); const KABC::Field::List::ConstIterator fieldEndIt(fieldList.end()); for(; fieldIt != fieldEndIt; ++fieldIt) { if(type == StartsWith && (*fieldIt)->value(*it).startsWith(pattern, false)) { mContacts.append(*it); found = true; break; } else if(type == EndsWith && (*fieldIt)->value(*it).endsWith(pattern, false)) { mContacts.append(*it); found = true; break; } else if(type == Contains && (*fieldIt)->value(*it).find(pattern, 0, false) != -1) { mContacts.append(*it); found = true; break; } else if(type == Equals && (*fieldIt)->value(*it).localeAwareCompare(pattern) == 0) { mContacts.append(*it); found = true; break; } } if(!found) { // search over custom fields const QStringList customs = (*it).customs(); QStringList::ConstIterator customIt(customs.begin()); const QStringList::ConstIterator customEndIt(customs.end()); for(; customIt != customEndIt; ++customIt) { int pos = (*customIt).find(':'); if(pos != -1) { const QString value = (*customIt).mid(pos + 1); if(type == StartsWith && value.startsWith(pattern, false)) { mContacts.append(*it); break; } else if(type == EndsWith && value.endsWith(pattern, false)) { mContacts.append(*it); break; } else if(type == Contains && value.find(pattern, 0, false) != -1) { mContacts.append(*it); break; } else if(type == Equals && value.localeAwareCompare(pattern) == 0) { mContacts.append(*it); break; } } } } } emit contactsUpdated(); }
void ItemsView::buildContents() { m_views.clear(); m_root->setBackgroundRole(QPalette::Base); QVBoxLayout* _layout = new QVBoxLayout(m_root); if (m_currentFeed != NULL) { Entry::List entries = m_currentFeed->entries(); //switch (m_sorting) //{ // case 0: // qSort(entries.begin(), entries.end(), NameSorter); // break; // case 1: // qSort(entries.begin(), entries.end(), RatingSorter); // break; // case 2: // qSort(entries.begin(), entries.end(), RecentSorter); // break; // case 3: // qSort(entries.begin(), entries.end(), DownloadsSorter); // break; //} Entry::List::iterator it = entries.begin(), iEnd = entries.end(); for (unsigned row = 0; it != iEnd; ++it) { Entry* entry = (*it); if (entry->name().representation().toLower().contains(m_searchText.toLower())) { QHBoxLayout * itemLayout = new QHBoxLayout; _layout->addLayout(itemLayout); EntryView *part = new EntryView(m_root); part->setBackgroundRole(row & 1 ? QPalette::AlternateBase : QPalette::Base); itemLayout->addWidget(part); QVBoxLayout * previewLayout = new QVBoxLayout; itemLayout->insertLayout(0, previewLayout); KDXSButton *dxsbutton = new KDXSButton(m_root); dxsbutton->setEntry(entry); dxsbutton->setProvider(m_currentProvider); dxsbutton->setEngine(m_engine); QString imageurl = entry->preview().representation(); if (!imageurl.isEmpty()) { QLabel *f = new QLabel(m_root); f->setFrameStyle(QFrame::Panel | QFrame::Sunken); QAsyncImage *pix = new QAsyncImage(imageurl, m_root); f->setFixedSize(64, 64); //connect(pix, SIGNAL(signalLoaded(QImage)), // f, SLOT(setImage(QImage))); previewLayout->addWidget(f); } //previewLayout->addWidget(dxsbutton); part->setEntry(entry); m_views.insert(entry, part); ++row; } } } //setWidget(m_root); }