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()))); }