Axivion: Only update basic project info when needed

Extract functionality and guard against clearing and repopulating
if not necessary.

Change-Id: Ic4e5e87a3aa76f3b29d38e42b2b6be2ad64dcf1f
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
Christian Stenger
2024-01-29 16:25:11 +01:00
parent 55e0036c0e
commit 0b0941cbcb

View File

@@ -222,11 +222,13 @@ public:
private: private:
void onSearchParameterChanged(); void onSearchParameterChanged();
void updateBasicProjectInfo(std::optional<Dto::ProjectInfoDto> info);
void updateTableView(); void updateTableView();
void fetchIssues(const IssueListSearch &search); void fetchIssues(const IssueListSearch &search);
void fetchMoreIssues(); void fetchMoreIssues();
QString m_currentPrefix; QString m_currentPrefix;
QString m_currentProject;
std::optional<Dto::TableInfoDto> m_currentTableInfo; std::optional<Dto::TableInfoDto> m_currentTableInfo;
QHBoxLayout *m_typesLayout = nullptr; QHBoxLayout *m_typesLayout = nullptr;
QHBoxLayout *m_filtersLayout = nullptr; QHBoxLayout *m_filtersLayout = nullptr;
@@ -313,50 +315,20 @@ IssuesWidget::IssuesWidget(QWidget *parent)
void IssuesWidget::updateUi() void IssuesWidget::updateUi()
{ {
m_filtersLayout->setEnabled(false); m_filtersLayout->setEnabled(false);
// TODO extract parts of it and do them only when necessary
QLayoutItem *child;
while ((child = m_typesLayout->takeAt(0)) != nullptr) {
delete child->widget();
delete child;
}
std::optional<Dto::ProjectInfoDto> projectInfo = Internal::projectInfo(); std::optional<Dto::ProjectInfoDto> projectInfo = Internal::projectInfo();
updateBasicProjectInfo(projectInfo);
if (!projectInfo) if (!projectInfo)
return; return;
const Dto::ProjectInfoDto &info = *projectInfo; const Dto::ProjectInfoDto &info = *projectInfo;
if (info.versions.empty()) // add some warning/information? if (info.versions.empty()) // add some warning/information?
return; return;
// for now just a start..
const std::vector<Dto::IssueKindInfoDto> &issueKinds = info.issueKinds;
for (const Dto::IssueKindInfoDto &kind : issueKinds) {
auto button = new QToolButton(this);
button->setIcon(iconForIssue(kind.prefix));
button->setToolTip(kind.nicePluralName);
connect(button, &QToolButton::clicked, this, [this, prefix = kind.prefix]{
m_currentPrefix = prefix;
updateTableView();
});
m_typesLayout->addWidget(button);
}
m_ownerFilter->clear();
for (const Dto::UserRefDto &user : projectInfo->users)
m_ownerFilter->addItem(user.displayName, user.name);
m_versionStart->clear();
m_versionEnd->clear();
const std::vector<Dto::AnalysisVersionDto> &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);
}
m_versionEnd->setCurrentText(versions.back().label.value_or(versions.back().name));
m_filtersLayout->setEnabled(true); m_filtersLayout->setEnabled(true);
// avoid refetching existing data
if (!m_currentPrefix.isEmpty() || m_issuesModel->rowCount())
return;
if (info.issueKinds.size()) if (info.issueKinds.size())
m_currentPrefix = info.issueKinds.front().prefix; m_currentPrefix = info.issueKinds.front().prefix;
updateTableView(); updateTableView();
@@ -467,6 +439,59 @@ void IssuesWidget::onSearchParameterChanged()
fetchIssues(search); fetchIssues(search);
} }
void IssuesWidget::updateBasicProjectInfo(std::optional<Dto::ProjectInfoDto> info)
{
auto cleanOld = [this] {
QLayoutItem *child;
while ((child = m_typesLayout->takeAt(0)) != nullptr) {
delete child->widget();
delete child;
}
};
if (!info) {
cleanOld();
m_ownerFilter->clear();
m_versionStart->clear();
m_versionEnd->clear();
m_pathGlobFilter->clear();
return;
}
if (m_currentProject == info->name)
return;
m_currentProject = info->name;
cleanOld();
const std::vector<Dto::IssueKindInfoDto> &issueKinds = info->issueKinds;
for (const Dto::IssueKindInfoDto &kind : issueKinds) {
auto button = new QToolButton(this);
button->setIcon(iconForIssue(kind.prefix));
button->setToolTip(kind.nicePluralName);
connect(button, &QToolButton::clicked, this, [this, prefix = kind.prefix]{
m_currentPrefix = prefix;
updateTableView();
});
m_typesLayout->addWidget(button);
}
m_ownerFilter->clear();
for (const Dto::UserRefDto &user : info->users)
m_ownerFilter->addItem(user.displayName, user.name);
m_versionStart->clear();
m_versionEnd->clear();
const std::vector<Dto::AnalysisVersionDto> &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);
}
m_versionEnd->setCurrentText(versions.back().label.value_or(versions.back().name));
}
void IssuesWidget::updateTableView() void IssuesWidget::updateTableView()
{ {
QTC_ASSERT(!m_currentPrefix.isEmpty(), return); QTC_ASSERT(!m_currentPrefix.isEmpty(), return);