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;
}
示例#6
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 );
	}
}
示例#7
0
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 );
	}
}
示例#8
0
    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));
}
示例#14
0
void ObjectViewer::menuViewModel() {
    if (contextMenuIndex.isValid()) {
        auto source = filterModel->mapToSource(contextMenuIndex);
        showObjectModel(source.internalId());
    }
}
示例#15
0
void ObjectViewer::showItem(QModelIndex model) {
    auto source = filterModel->mapToSource(model);
    showItem(source.internalId());
}