Beispiel #1
0
void QueryResultsNode::update(Snapshot &updates)
{
    typedef QMap<QueryResultItem *, Union> Map;
    qint32 lastColumn = columnCount(QModelIndex()) - 1;
    QueryResultPropertyItem *property;
    QueryResultItem *item;
    Map map;

    for (Snapshot::iterator i = updates.begin(), end = updates.end(); i != end; i = updates.erase(i))
    {
        item = (*i).first.as<QueryResultItem>();
        property = static_cast<QueryResultPropertyItem *>(item->parent());
        map[property].add(property->indexOf(item));

        if (item->size())
        {
            beginRemoveRows(Model::index(item), 0, item->size() - 1);
            static_cast<QueryResultRootPathValueItem *>(item)->update((*i).second);
            endRemoveRows();
        }
        else
            static_cast<QueryResultRootPathValueItem *>(item)->update((*i).second);

        static_cast<QueryResultValueItem *>(item)->unlock();
    }

    for (Map::const_iterator i = map.constBegin(), end = map.constEnd(); i != end; ++i)
        for (Union::List::size_type q = 0, size = (*i).size(); q < size; ++q)
            emit dataChanged(createIndex((*i).at(q).top(), 0, i.key()->at((*i).at(q).top())),
                             createIndex((*i).at(q).bottom(), lastColumn, i.key()->at((*i).at(q).bottom())));
}