Пример #1
0
QVariant ContactModel::data(const QModelIndex &index, int role) const
{
    if (!index.parent().isValid()) {
        // Groups
        switch (role) {
        case Qt::DisplayRole:
            if(index.column()==0)
                return groups.keys().at(index.row());
        }
    } else {
        // Contacts
        ContactGroup *group = reinterpret_cast<ContactGroup *>(index.internalPointer());
        Contact contact = group->contacts.at(index.row());
        MAGNORMOBOT *bot = contact.conduit.data();
        switch (role) {
        case Qt::DisplayRole:
            if(index.column()==1)
                return bot->getNameFromJid(contact.jid);
        case Qt::DecorationRole:
            {
                RosterItem *item = bot->getRosterItemFromJid(contact.jid);
                if (!item)
                    return QIcon(":/icons/user-offline");
                if (!item->highestResource())
                    return QIcon(":/icons/user-offline");
                switch (item->highestResource()->presence()) {
                case Presence::Available:
                case Presence::Chat:
                    if(index.column()==1)
                        return QIcon(":/icons/user-online");
                    else {
                        return bot->getAccountIcon();
                    }
                case Presence::Away:
                case Presence::DND:
                case Presence::XA:
                    if(index.column()==1)
                        return QIcon(":/icons/user-away");
                    else {
                        return bot->getAccountIcon();
                    }
                default:
                    return QIcon(":/icons/user-offline");
                }
                break;
            }

        case Qt::ToolTipRole:
        case ContactModel::JIDRole:
            return contact.jid;

        case ContactModel::ContactRole:
            return QVariant::fromValue(contact);

        case ContactModel::PresenceRole:
            {
                RosterItem *item = bot->getRosterItemFromJid(contact.jid);
                if (!item)
                    return Presence::Unavailable;
                if (!item->highestResource())
                    return Presence::Unavailable;
                return item->highestResource()->presence();
            }
        }
    }
    return QVariant();
}