From d7d6f94c8621163d50e6b0b39789aaa01a88cea0 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 6 Feb 2024 15:38:35 +0100 Subject: [PATCH] Axivion: Optimize combobox insertion Keep the user data outside of combo boxes. Use addItems(), which should probably be the fastest insertion method. Change-Id: Iec7e3fbe551a30e6a0e477e93add9c474c7f41fc Reviewed-by: Reviewed-by: Christian Stenger --- src/plugins/axivion/axivionoutputpane.cpp | 34 +++++++++++++++-------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/plugins/axivion/axivionoutputpane.cpp b/src/plugins/axivion/axivionoutputpane.cpp index 6e38abfc86a..ec5ae042292 100644 --- a/src/plugins/axivion/axivionoutputpane.cpp +++ b/src/plugins/axivion/axivionoutputpane.cpp @@ -246,6 +246,8 @@ private: TreeModel<> *m_issuesModel = nullptr; int m_totalRowCount = 0; int m_lastRequestedOffset = 0; + QStringList m_userNames; + QStringList m_versionDates; TaskTreeRunner m_taskTreeRunner; }; @@ -467,6 +469,8 @@ void IssuesWidget::updateBasicProjectInfo(std::optional inf if (!info) { cleanOld(); + m_userNames.clear(); + m_versionDates.clear(); m_ownerFilter->clear(); m_versionStart->clear(); m_versionEnd->clear(); @@ -504,20 +508,28 @@ void IssuesWidget::updateBasicProjectInfo(std::optional inf if (auto firstButton = m_typesButtonGroup->button(1)) firstButton->setChecked(true); + m_userNames.clear(); m_ownerFilter->clear(); - for (const Dto::UserRefDto &user : info->users) - m_ownerFilter->addItem(user.displayName, user.name); + QStringList userDisplayNames; + for (const Dto::UserRefDto &user : info->users) { + userDisplayNames.append(user.displayName); + m_userNames.append(user.name); + } + m_ownerFilter->addItems(userDisplayNames); + m_versionDates.clear(); m_versionStart->clear(); m_versionEnd->clear(); + QStringList versionLabels; const std::vector &versions = info->versions; - for (const Dto::AnalysisVersionDto &version : versions) { - const QString label = version.label.value_or(version.name); - m_versionStart->insertItem(0, label, version.date); - m_versionEnd->insertItem(0, label, version.date); + for (auto it = versions.crbegin(); it != versions.crend(); ++it) { + const Dto::AnalysisVersionDto &version = *it; + versionLabels.append(version.label.value_or(version.name)); + m_versionDates.append(version.date); } - - m_versionEnd->setCurrentText(versions.back().label.value_or(versions.back().name)); + m_versionStart->addItems(versionLabels); + m_versionEnd->addItems(versionLabels); + m_versionStart->setCurrentIndex(m_versionDates.count() - 1); } void IssuesWidget::updateTableView() @@ -545,10 +557,10 @@ IssueListSearch IssuesWidget::searchFromUi() const { IssueListSearch search; search.kind = m_currentPrefix; // not really ui.. but anyhow - search.owner = m_ownerFilter->currentText(); + search.owner = m_userNames.at(m_ownerFilter->currentIndex()); search.filter_path = m_pathGlobFilter->text(); - search.versionStart = m_versionStart->currentData().toString(); - search.versionEnd = m_versionEnd->currentData().toString(); + search.versionStart = m_versionDates.at(m_versionStart->currentIndex()); + search.versionEnd = m_versionDates.at(m_versionEnd->currentIndex()); // different approach: checked means disabling in webview, checked here means explicitly request // the checked one, having both checked is impossible (having none checked means fetch both) // reason for different approach: currently poor reflected inside the ui (TODO)