From c12fce75709bddc084d89e765e3939c618ed1b53 Mon Sep 17 00:00:00 2001 From: Ali Kianian Date: Mon, 9 Oct 2023 13:05:06 +0300 Subject: [PATCH] QmlDesigner: Add rows to a collection Task-number: QDS-10619 Change-Id: I37a2b7ebdc3abd8f72a5fe3e7e5fd82e173cd9ea Reviewed-by: Miikka Heikkinen Reviewed-by: Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Mahmoud Badri --- .../CollectionDetailsToolbar.qml | 19 +++++++++++++++++++ .../collectioneditor/collectiondetails.cpp | 14 ++++++++++++++ .../collectioneditor/collectiondetails.h | 1 + .../singlecollectionmodel.cpp | 14 ++++++++++++++ .../collectioneditor/singlecollectionmodel.h | 1 + 5 files changed, 49 insertions(+) diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsToolbar.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsToolbar.qml index a120b5c1503..25ad17ae85b 100644 --- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsToolbar.qml +++ b/share/qtcreator/qmldesigner/collectionEditorQmlSource/CollectionDetailsToolbar.qml @@ -44,6 +44,25 @@ Item { enabled: root.model.selectedColumn > -1 onClicked: addColumnDialog.popUp(root.model.selectedColumn + 1) } + + Item { // spacer + width: 20 + height: 1 + } + + IconButton { + icon: StudioTheme.Constants.addrowbelow_medium + tooltip: qsTr("Insert record below") + enabled: root.model.selectedRow > -1 + onClicked: root.model.insertRow(root.model.selectedRow + 1) + } + + IconButton { + icon: StudioTheme.Constants.addrowabove_medium + tooltip: qsTr("Insert record above") + enabled: root.model.selectedRow > -1 + onClicked: root.model.insertRow(root.model.selectedRow) + } } Row { diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.cpp index 350e9326bf8..d04d1e80cfd 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.cpp @@ -124,6 +124,20 @@ void CollectionDetails::insertElementAt(std::optional object, int r markChanged(); } +void CollectionDetails::insertEmptyElements(int row, int count) +{ + if (!isValid()) + return; + + if (count < 1) + return; + + row = qBound(0, row, rows() - 1); + d->elements.insert(row, count, {}); + + markChanged(); +} + bool CollectionDetails::setHeader(int column, const QString &value) { if (!d->isValidColumnId(column)) diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.h b/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.h index 61c9f963192..61653bf0a08 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.h +++ b/src/plugins/qmldesigner/components/collectioneditor/collectiondetails.h @@ -48,6 +48,7 @@ public: bool removeColumns(int colIdx, int count = 1); void insertElementAt(std::optional object, int row = -1); + void insertEmptyElements(int row = 0, int count = 1); bool setHeader(int column, const QString &value); diff --git a/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.cpp b/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.cpp index 00d20d51a3b..144904181b7 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.cpp @@ -91,6 +91,20 @@ bool SingleCollectionModel::setHeaderData(int section, return headerChanged; } +bool SingleCollectionModel::insertRows(int row, int count, const QModelIndex &parent) +{ + if (count < 1) + return false; + + row = qBound(0, row, rowCount()); + beginInsertRows(parent, row, row + count); + m_currentCollection.insertEmptyElements(row, count); + endInsertRows(); + + updateEmpty(); + return true; +} + bool SingleCollectionModel::removeColumns(int column, int count, const QModelIndex &parent) { if (column < 0 || column >= columnCount(parent) || count < 1) diff --git a/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.h b/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.h index 0972a169ab5..2ce960ad167 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.h +++ b/src/plugins/qmldesigner/components/collectioneditor/singlecollectionmodel.h @@ -35,6 +35,7 @@ public: Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override; + bool insertRows(int row, int count, const QModelIndex &parent = {}) override; bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override; Qt::ItemFlags flags(const QModelIndex &index) const override;