SeasideCache::CacheItem *SeasideCache::itemById(const QContactId &id, bool) { quint32 iid(internalId(id)); if (instancePtr->m_cacheIndices.contains(iid)) { return &instancePtr->m_cache[instancePtr->m_cacheIndices[iid]]; } return 0; }
quint32 SeasideCache::idAt(int index) const { #ifdef USING_QTPIM return internalId(m_cache[index].contact.id()); #else return index + 1; #endif }
QContact SeasideCache::contactById(const ContactIdType &id) { #ifdef USING_QTPIM quint32 iid(internalId(id)); return instancePtr->m_cache[instancePtr->m_cacheIndices[iid]].contact; #else return instancePtr->m_cache[id - 1].contact; #endif }
QList<quint32> SeasideCache::getContactsForFilterType(FilterType filterType) { QList<quint32> ids; for (uint i = 0; i < sizeof(contactsData) / sizeof(Contact); ++i) { if ((filterType == FilterAll) || (filterType == FilterFavorites && contactsData[i].isFavorite) || (filterType == FilterOnline && contactsData[i].isOnline)) { ids.append(internalId(instancePtr->m_cache[i].contact.id())); } } return ids; }
SeasideCache::CacheItem *SeasideCache::itemById(const ContactIdType &id, bool) { #ifdef USING_QTPIM quint32 iid(internalId(id)); if (instancePtr->m_cacheIndices.contains(iid)) { return &instancePtr->m_cache[instancePtr->m_cacheIndices[iid]]; } #else if (id != 0 && id <= instancePtr->m_cache.count()) { return &instancePtr->m_cache[id - 1]; } #endif return 0; }
void isolateRedundantIndices( const QModelIndex& parent, int firstRow, int lastRow, std::vector< IndexedAdapter< T > >& indices, std::vector< std::unique_ptr< T > >& redundantAdapters ) { for (auto row = firstRow; row <= lastRow; ++row) { auto predicate = [&parent, row]( const IndexedAdapter< T >& item ) { auto itemParent = item.index_.parent(); auto itemRow = item.index_.row(); return itemParent.internalId() == parent.internalId() && itemRow == row; }; auto it = std::find_if( indices.begin(), indices.end(), predicate ); isolateRedundantIndex( it, indices, redundantAdapters ); } }
void isolateRedundantIndices( const QModelIndex& parent, std::vector< IndexedAdapter< T > >& indices, std::vector< std::unique_ptr< T > >& redundantAdapters ) { for (;;) { auto predicate = [&parent]( const IndexedAdapter< T >& item ) { auto itemParent = item.index_.parent(); return itemParent.internalId() == parent.internalId(); }; auto it = std::find_if( indices.begin(), indices.end(), predicate ); if (it == indices.end()) { break; } isolateRedundantIndex( it, indices, redundantAdapters ); } }
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override { auto index0 = sourceModel()->index(sourceRow, 0, sourceParent); const auto& model = _data->modelinfo.at(index0.internalId()); switch (model->type()) { case ModelDataType::VehicleInfo: if (!_showCars) return false; break; case ModelDataType::PedInfo: if (!_showPeds) return false; break; default: if (!_showMisc) return false; break; } return !(!_name.empty() && model->name.find(_name) == std::string::npos); }
quint32 SeasideCache::internalId(const QContact &contact) { return internalId(contact.id()); }
quint32 SeasideCache::idAt(int index) const { return internalId(m_cache[index].contact.id()); }
QContact SeasideCache::contactById(const QContactId &id) { quint32 iid(internalId(id)); return instancePtr->m_cache[instancePtr->m_cacheIndices[iid]].contact; }
int SeasideCache::contactId(const QContact &contact) { quint32 internal = internalId(contact); return static_cast<int>(internal); }
void SeasideCache::reset() { for (int i = 0; i < FilterTypesCount; ++i) { m_contacts[i].clear(); m_populated[i] = false; m_models[i] = 0; } m_cache.clear(); m_cacheIndices.clear(); for (uint i = 0; i < sizeof(contactsData) / sizeof(Contact); ++i) { QContact contact; // This is specific to the qtcontacts-sqlite backend: const QString idStr(QString::fromLatin1("qtcontacts:org.nemomobile.contacts.sqlite::sql-%1")); contact.setId(QContactId::fromString(idStr.arg(i + 1))); QContactName name; name.setFirstName(QString::fromLatin1(contactsData[i].firstName)); name.setMiddleName(QString::fromUtf8(contactsData[i].middleName)); name.setLastName(QString::fromLatin1(contactsData[i].lastName)); contact.saveDetail(&name); if (contactsData[i].avatar) { QContactAvatar avatar; avatar.setImageUrl(QUrl(QLatin1String(contactsData[i].avatar))); contact.saveDetail(&avatar); } QContactStatusFlags statusFlags; if (contactsData[i].email) { QContactEmailAddress email; email.setEmailAddress(QLatin1String(contactsData[i].email)); contact.saveDetail(&email); statusFlags.setFlag(QContactStatusFlags::HasEmailAddress, true); } if (contactsData[i].phoneNumber) { QContactPhoneNumber phoneNumber; phoneNumber.setNumber(QLatin1String(contactsData[i].phoneNumber)); contact.saveDetail(&phoneNumber); statusFlags.setFlag(QContactStatusFlags::HasPhoneNumber, true); } contact.saveDetail(&statusFlags); m_cacheIndices.insert(internalId(contact), m_cache.count()); m_cache.append(CacheItem(contact)); QString fullName = name.firstName() + QChar::fromLatin1(' ') + name.lastName(); CacheItem &cacheItem = m_cache.last(); cacheItem.nameGroup = determineNameGroup(&cacheItem); cacheItem.displayLabel = fullName; } insert(FilterAll, 0, getContactsForFilterType(FilterAll)); insert(FilterFavorites, 0, getContactsForFilterType(FilterFavorites)); insert(FilterOnline, 0, getContactsForFilterType(FilterOnline)); }
void ObjectViewer::menuViewModel() { if (contextMenuIndex.isValid()) { auto source = filterModel->mapToSource(contextMenuIndex); showObjectModel(source.internalId()); } }
void ObjectViewer::showItem(QModelIndex model) { auto source = filterModel->mapToSource(model); showItem(source.internalId()); }