diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.cpp index 52d5a6e2bab..8a901c4f669 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.cpp @@ -219,11 +219,16 @@ bool CollectionDetailsModel::removeColumns(int column, int count, const QModelIn bool columnsRemoved = m_currentCollection.removeColumns(column, count); endRemoveColumns(); + if (!columnCount(parent)) + removeRows(0, rowCount(parent), parent); + int nextColumn = column - 1; if (nextColumn < 0 && columnCount(parent) > 0) nextColumn = 0; selectColumn(nextColumn); + + ensureSingleCell(); return columnsRemoved; } @@ -237,6 +242,7 @@ bool CollectionDetailsModel::removeRows(int row, int count, const QModelIndex &p bool rowsRemoved = m_currentCollection.removeElements(row, count); endRemoveRows(); + ensureSingleCell(); return rowsRemoved; } @@ -317,8 +323,8 @@ bool CollectionDetailsModel::selectColumn(int section) const int columns = columnCount(); - if (m_selectedColumn >= columns) - return false; + if (section >= columns) + section = columns - 1; selectRow(-1); @@ -415,6 +421,7 @@ void CollectionDetailsModel::loadCollection(const ModelNode &sourceNode, const Q deselectAll(); beginResetModel(); switchToCollection(newReference); + ensureSingleCell(); endResetModel(); } } else { @@ -583,6 +590,7 @@ void CollectionDetailsModel::loadJsonCollection(const QString &source, const QSt SourceFormat sourceFormat = jsonFileIsOk ? SourceFormat::Json : SourceFormat::Unknown; beginResetModel(); m_currentCollection.resetDetails(getJsonHeaders(collectionNodes), elements, sourceFormat); + ensureSingleCell(); endResetModel(); } @@ -635,9 +643,24 @@ void CollectionDetailsModel::loadCsvCollection(const QString &source, SourceFormat sourceFormat = csvFileIsOk ? SourceFormat::Csv : SourceFormat::Unknown; beginResetModel(); m_currentCollection.resetDetails(headers, elements, sourceFormat); + ensureSingleCell(); endResetModel(); } +void CollectionDetailsModel::ensureSingleCell() +{ + if (!m_currentCollection.isValid()) + return; + + if (!columnCount()) + addColumn(0, "Column 1", "String"); + + if (!rowCount()) + insertRow(0); + + updateEmpty(); +} + QVariant CollectionDetailsModel::variantFromString(const QString &value) { constexpr QStringView typesPattern{u"(?^(?:true|false)$)|" diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.h b/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.h index 4fef84a3df3..8e5b21ce7ff 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.h +++ b/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.h @@ -81,6 +81,7 @@ private: void setCollectionName(const QString &newCollectionName); void loadJsonCollection(const QString &source, const QString &collection); void loadCsvCollection(const QString &source, const QString &collectionName); + void ensureSingleCell(); QVariant variantFromString(const QString &value); QHash m_openedCollections;