From 3dbec39730ec36fccd81173afd05989ca6c61397 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 17 Sep 2024 16:04:29 +0200 Subject: [PATCH] Axivion: Store key inside column info Small refactoring which makes later improvements of the UX easier. Change-Id: Ia6630cfbed68295271344b95d66cfed26dd8b3fc Reviewed-by: Mohammad Mehdi Salem Naraghi Reviewed-by: Jarek Kobus --- src/plugins/axivion/axivionperspective.cpp | 22 ++++----------------- src/plugins/axivion/issueheaderview.cpp | 23 +++++++++++++--------- src/plugins/axivion/issueheaderview.h | 5 +++-- 3 files changed, 21 insertions(+), 29 deletions(-) diff --git a/src/plugins/axivion/axivionperspective.cpp b/src/plugins/axivion/axivionperspective.cpp index 519d9863712..a62ab83d49d 100644 --- a/src/plugins/axivion/axivionperspective.cpp +++ b/src/plugins/axivion/axivionperspective.cpp @@ -429,6 +429,7 @@ void IssuesWidget::updateTable() if (!column.showByDefault) hiddenColumns << column.key; IssueHeaderView::ColumnInfo info; + info.key = column.key; info.sortable = column.canSort; info.filterable = column.canFilter; info.width = column.width; @@ -643,6 +644,7 @@ void IssuesWidget::setFiltersEnabled(bool enabled) IssueListSearch IssuesWidget::searchFromUi() const { IssueListSearch search; + QTC_ASSERT(m_currentTableInfo, return search); search.kind = m_currentPrefix; // not really ui.. but anyhow search.owner = m_userNames.at(m_ownerFilter->currentIndex()); search.filter_path = m_pathGlobFilter->text(); @@ -656,24 +658,8 @@ IssueListSearch IssuesWidget::searchFromUi() const else if (m_removedFilter->isChecked()) search.state = "removed"; - QTC_ASSERT(m_currentTableInfo, return search); - QString sort; - const QList> currentSortColumns = m_headerView->currentSortColumns(); - for (const auto &pair : currentSortColumns) { - QTC_ASSERT((ulong)pair.first < m_currentTableInfo->columns.size(), return search); - if (!sort.isEmpty()) - sort.append(','); - sort.append(m_currentTableInfo->columns.at(pair.first).key - + (pair.second == Qt::AscendingOrder ? " asc" : " desc")); - } - search.sort = sort; - QMap filter; - const QList> currentFilterColumns = m_headerView->currentFilterColumns(); - for (const auto &pair : currentFilterColumns) { - QTC_ASSERT((ulong)pair.first < m_currentTableInfo->columns.size(), return search); - filter.insert("filter_" + m_currentTableInfo->columns.at(pair.first).key, pair.second); - } - search.filter = filter; + search.sort = m_headerView->currentSortString(); + search.filter = m_headerView->currentFilterMapping(); return search; } diff --git a/src/plugins/axivion/issueheaderview.cpp b/src/plugins/axivion/issueheaderview.cpp index 444a4505c5d..b42f9ad4909 100644 --- a/src/plugins/axivion/issueheaderview.cpp +++ b/src/plugins/axivion/issueheaderview.cpp @@ -169,23 +169,28 @@ void IssueHeaderView::setColumnInfoList(const QList &infos) headerDataChanged(Qt::Horizontal, oldIndex, oldIndex); } -QList> IssueHeaderView::currentSortColumns() const +const QString IssueHeaderView::currentSortString() const { - QList> result; - for (int i : m_currentSortIndexes) - result.append({i, *m_columnInfoList.at(i).sortOrder}); - return result; + QString sort; + for (int i : m_currentSortIndexes) { + QTC_ASSERT(i >= 0 && i < m_columnInfoList.size(), return {}); + if (!sort.isEmpty()) + sort.append(','); + const ColumnInfo info = m_columnInfoList.at(i); + sort.append(info.key + (info.sortOrder == Qt::AscendingOrder ? " asc" : " desc")); + } + return sort; } -QList> IssueHeaderView::currentFilterColumns() const +const QMap IssueHeaderView::currentFilterMapping() const { - QList> result; + QMap filter; for (int i = 0, end = m_columnInfoList.size(); i < end; ++i) { const ColumnInfo ci = m_columnInfoList.at(i); if (ci.filter.has_value()) - result.append({i, *ci.filter}); + filter.insert("filter_" + ci.key, *ci.filter); } - return result; + return filter; } void IssueHeaderView::mousePressEvent(QMouseEvent *event) diff --git a/src/plugins/axivion/issueheaderview.h b/src/plugins/axivion/issueheaderview.h index 4ccf74fb3df..d95650d0e6d 100644 --- a/src/plugins/axivion/issueheaderview.h +++ b/src/plugins/axivion/issueheaderview.h @@ -16,6 +16,7 @@ class IssueHeaderView : public QHeaderView public: struct ColumnInfo { + QString key; int width = 0; std::optional sortOrder = std::nullopt; bool sortable = false; @@ -26,8 +27,8 @@ public: explicit IssueHeaderView(QWidget *parent = nullptr) : QHeaderView(Qt::Horizontal, parent) {} void setColumnInfoList(const QList &infos); - QList> currentSortColumns() const; - QList> currentFilterColumns() const; + const QString currentSortString() const; + const QMap currentFilterMapping() const; signals: void filterChanged();