From 8b86527218fb47fe312c4ba20c32d447cf7fdf60 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 26 Sep 2024 13:43:32 +0200 Subject: [PATCH] Axivion: Prohibit invalid version selection Disable items of the version combo boxes that are not available for the current selected versions. Change-Id: I37a94bee2a11fc90b81f4204a0953f9ec25f5323 Reviewed-by: hjk Reviewed-by: Mohammad Mehdi Salem Naraghi --- src/plugins/axivion/axivionperspective.cpp | 30 ++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/plugins/axivion/axivionperspective.cpp b/src/plugins/axivion/axivionperspective.cpp index 5133ee6e8db..2527e44fced 100644 --- a/src/plugins/axivion/axivionperspective.cpp +++ b/src/plugins/axivion/axivionperspective.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include #include #include @@ -196,6 +197,7 @@ private: void updateTable(); void addIssues(const Dto::IssueTableDto &dto, int startRow); void onSearchParameterChanged(); + void updateVersionItemsEnabledState(); void updateBasicProjectInfo(const std::optional &info); void setFiltersEnabled(bool enabled); void fetchTable(); @@ -270,6 +272,7 @@ IssuesWidget::IssuesWidget(QWidget *parent) if (m_signalBlocker.isLocked()) return; QTC_ASSERT(index > -1 && index < m_versionDates.size(), return); + updateVersionItemsEnabledState(); onSearchParameterChanged(); }); @@ -279,6 +282,7 @@ IssuesWidget::IssuesWidget(QWidget *parent) if (m_signalBlocker.isLocked()) return; QTC_ASSERT(index > -1 && index < m_versionDates.size(), return); + updateVersionItemsEnabledState(); onSearchParameterChanged(); setAnalysisVersion(m_versionDates.at(index)); }); @@ -600,6 +604,31 @@ void IssuesWidget::onSearchParameterChanged() fetchIssues(search); } +void IssuesWidget::updateVersionItemsEnabledState() +{ + const int versionCount = m_versionDates.size(); + if (versionCount < 2) + return; + + const int currentStart = m_versionStart->currentIndex(); + const int currentEnd = m_versionEnd->currentIndex(); + // Note: top-most item == index 0; bottom-most item == last / highest index + QTC_ASSERT(currentStart > currentEnd, return); + + QStandardItemModel *model = qobject_cast(m_versionStart->model()); + QTC_ASSERT(model, return); + for (int i = 0; i < versionCount; ++i) { + if (auto item = model->item(i)) + item->setEnabled(i > currentEnd); + } + model = qobject_cast(m_versionEnd->model()); + QTC_ASSERT(model, return); + for (int i = 0; i < versionCount; ++i) { + if (auto item = model->item(i)) + item->setEnabled(i < currentStart); + } +} + void IssuesWidget::updateBasicProjectInfo(const std::optional &info) { auto cleanOld = [this] { @@ -678,6 +707,7 @@ void IssuesWidget::updateBasicProjectInfo(const std::optionaladdItems(versionLabels); m_versionEnd->addItems(versionLabels); m_versionStart->setCurrentIndex(m_versionDates.count() - 1); + updateVersionItemsEnabledState(); } void IssuesWidget::setFiltersEnabled(bool enabled)