From 6c70f22ada8f2604a126f421fc8d7c251a8019da Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Thu, 29 Jun 2017 23:55:02 +0300 Subject: [PATCH] VCS: Preserve selections in commit editor on refresh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTCREATORBUG-18483 Change-Id: I749f2d4d583f197e7b5b6f69116c3a196e85484b Reviewed-by: André Hartmann --- src/plugins/vcsbase/submiteditorwidget.cpp | 32 ++++++++++++--------- src/plugins/vcsbase/submiteditorwidget.h | 3 ++ src/plugins/vcsbase/vcsbasesubmiteditor.cpp | 7 ++++- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/plugins/vcsbase/submiteditorwidget.cpp b/src/plugins/vcsbase/submiteditorwidget.cpp index da53be708de..f13d1979c22 100644 --- a/src/plugins/vcsbase/submiteditorwidget.cpp +++ b/src/plugins/vcsbase/submiteditorwidget.cpp @@ -28,6 +28,8 @@ #include "submitfilemodel.h" #include "ui_submiteditorwidget.h" +#include + #include #include #include @@ -117,18 +119,6 @@ public slots: // Helpers to retrieve model data // Convenience to extract a list of selected indexes -QList selectedRows(const QAbstractItemView *view) -{ - const QModelIndexList indexList = view->selectionModel()->selectedRows(0); - if (indexList.empty()) - return QList(); - QList rc; - const QModelIndexList::const_iterator cend = indexList.constEnd(); - for (QModelIndexList::const_iterator it = indexList.constBegin(); it != cend; ++it) - rc.push_back(it->row()); - return rc; -} - // ----------- SubmitEditorWidgetPrivate struct SubmitEditorWidgetPrivate @@ -463,7 +453,7 @@ Utils::CompletingTextEdit *SubmitEditorWidget::descriptionEdit() const void SubmitEditorWidget::triggerDiffSelected() { - const QList sel = selectedRows(d->m_ui.fileView); + const QList sel = selectedRows(); if (!sel.empty()) emit diffSelected(sel); } @@ -610,6 +600,22 @@ bool SubmitEditorWidget::updateInProgress() const return d->m_updateInProgress; } +QList SubmitEditorWidget::selectedRows() const +{ + return Utils::transform(d->m_ui.fileView->selectionModel()->selectedRows(0), &QModelIndex::row); +} + +void SubmitEditorWidget::setSelectedRows(const QList &rows) +{ + if (const SubmitFileModel *model = fileModel()) { + QItemSelectionModel *selectionModel = d->m_ui.fileView->selectionModel(); + for (int row : rows) { + selectionModel->select(model->index(row, 0), + QItemSelectionModel::Select | QItemSelectionModel::Rows); + } + } +} + QString SubmitEditorWidget::commitName() const { return tr("&Commit"); diff --git a/src/plugins/vcsbase/submiteditorwidget.h b/src/plugins/vcsbase/submiteditorwidget.h index a1eab248b71..75115d523c6 100644 --- a/src/plugins/vcsbase/submiteditorwidget.h +++ b/src/plugins/vcsbase/submiteditorwidget.h @@ -100,6 +100,9 @@ public: void setUpdateInProgress(bool value); bool updateInProgress() const; + QList selectedRows() const; + void setSelectedRows(const QList &rows); + public slots: void updateSubmitAction(); diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index a06b43ca068..a1c01d7a96e 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -411,10 +411,15 @@ void VcsBaseSubmitEditor::setFileModel(SubmitFileModel *model) { QTC_ASSERT(model, return); SubmitFileModel *oldModel = d->m_widget->fileModel(); - if (oldModel) + QList selected; + if (oldModel) { model->updateSelections(oldModel); + selected = d->m_widget->selectedRows(); + } d->m_widget->setFileModel(model); delete oldModel; + if (!selected.isEmpty()) + d->m_widget->setSelectedRows(selected); QSet uniqueSymbols; const CPlusPlus::Snapshot cppSnapShot = CppTools::CppModelManager::instance()->snapshot();