+int VersionControlObserver::createItemStatesList(QMap<QString, QVector<ItemState> >& itemStates,
+ const int firstIndex)
+{
+ const int itemCount = m_model->count();
+ const int currentExpansionLevel = m_model->expandedParentsCount(firstIndex);
+
+ QVector<ItemState> items;
+ items.reserve(itemCount - firstIndex);
+
+ int index;
+ for (index = firstIndex; index < itemCount; ++index) {
+ const int expansionLevel = m_model->expandedParentsCount(index);
+
+ if (expansionLevel == currentExpansionLevel) {
+ ItemState itemState;
+ itemState.first = m_model->fileItem(index);
+ itemState.second = KVersionControlPlugin::UnversionedVersion;
+
+ items.append(itemState);
+ } else if (expansionLevel > currentExpansionLevel) {
+ // Sub folder
+ index += createItemStatesList(itemStates, index) - 1;
+ } else {
+ break;
+ }
+ }
+
+ if (items.count() > 0) {
+ const QUrl& url = items.first().first.url();
+ itemStates.insert(url.adjusted(QUrl::RemoveFilename).path(), items);
+ }
+
+ return index - firstIndex; // number of processed items
+}
+
+KVersionControlPlugin* VersionControlObserver::searchPlugin(const QUrl& directory) const