- Q_UNUSED(parentIndex);
- Q_UNUSED(itemStates);
- const int rowCount = m_dolphinModel->rowCount(parentIndex);
- for (int row = 0; row < rowCount; ++row) {
- const QModelIndex index = m_dolphinModel->index(row, DolphinModel::Version, parentIndex);
- addDirectory(index, itemStates);
-
- ItemState itemState;
- itemState.index = index;
- itemState.item = m_dolphinModel->itemForIndex(index);
- itemState.version = KVersionControlPlugin::UnversionedVersion;
-
- itemStates.append(itemState);
+ 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);