From 5010f041cbbe3da6b79b69b0abb34168b0bfebc7 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 19 Jun 2023 10:22:03 +0200 Subject: [PATCH] Axivion: Let issues count view appear nicer Small overhaul of the layout and replace the former text-only placeholder. Change-Id: I0cee393f6aa7449b10b07f3daffa37f0b697d0af Reviewed-by: David Schulz --- src/plugins/axivion/axivionoutputpane.cpp | 77 ++++++++++++++++------- 1 file changed, 55 insertions(+), 22 deletions(-) diff --git a/src/plugins/axivion/axivionoutputpane.cpp b/src/plugins/axivion/axivionoutputpane.cpp index beae1673b3f..f36df8d0f17 100644 --- a/src/plugins/axivion/axivionoutputpane.cpp +++ b/src/plugins/axivion/axivionoutputpane.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -29,7 +30,7 @@ private: QLabel *m_project = nullptr; QLabel *m_loc = nullptr; QLabel *m_timestamp = nullptr; - QFormLayout *m_formLayout = nullptr; + QGridLayout *m_gridLayout = nullptr; }; DashboardWidget::DashboardWidget(QWidget *parent) @@ -46,22 +47,40 @@ DashboardWidget::DashboardWidget(QWidget *parent) projectLayout->addRow(Tr::tr("Analysis timestamp:"), m_timestamp); layout->addLayout(projectLayout); layout->addSpacing(10); - m_formLayout = new QFormLayout; - layout->addLayout(m_formLayout); + auto row = new QHBoxLayout; + m_gridLayout = new QGridLayout; + row->addLayout(m_gridLayout); + row->addStretch(1); + layout->addLayout(row); layout->addStretch(1); setWidget(widget); setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); setWidgetResizable(true); } +static QPixmap trendIcon(int added, int removed) +{ + static const QPixmap unchanged = Utils::Icons::NEXT.pixmap(); + static const QPixmap increased = Utils::Icon( + { {":/utils/images/arrowup.png", Utils::Theme::IconsErrorColor} }).pixmap(); + static const QPixmap decreased = Utils::Icon( + { {":/utils/images/arrowdown.png", Utils::Theme::IconsRunColor} }).pixmap(); + if (added == removed) + return unchanged; + return added < removed ? decreased : increased; +} + void DashboardWidget::updateUi() { const ProjectInfo &info = AxivionPlugin::projectInfo(); m_project->setText(info.name); m_loc->setText({}); m_timestamp->setText({}); - while (m_formLayout->rowCount()) - m_formLayout->removeRow(0); + QLayoutItem *child; + while ((child = m_gridLayout->takeAt(0)) != nullptr) { + delete child->widget(); + delete child; + } if (info.versions.isEmpty()) return; @@ -72,36 +91,50 @@ void DashboardWidget::updateUi() m_timestamp->setText(timeStamp.isValid() ? timeStamp.toString("yyyy-MM-dd HH::mm::ss") : Tr::tr("unknown")); - const QString tmpl("%1 %2 +%3 / -%4"); - auto apply = [&tmpl](int t, int a, int r){ - QChar tr = (a == r ? '=' : (a < r ? '^' : 'v')); - return tmpl.arg(t, 10, 10, QLatin1Char(' ')).arg(tr).arg(a, 5, 10, QLatin1Char(' ')) - .arg(r, 5, 10, QLatin1Char(' ')); - }; const QList &issueKinds = info.issueKinds; auto toolTip = [issueKinds](const QString &prefix){ for (const IssueKind &kind : issueKinds) { if (kind.prefix == prefix) return kind.nicePlural; } - return QString(); + return prefix; }; - int allTotal = 0, allAdded = 0, allRemoved = 0; + auto addValuesWidgets = [this, &toolTip](const IssueCount &issueCount, int row){ + const QString currentToolTip = toolTip(issueCount.issueKind); + QLabel *label = new QLabel(issueCount.issueKind, this); + label->setToolTip(currentToolTip); + m_gridLayout->addWidget(label, row, 0); + label = new QLabel(QString::number(issueCount.total), this); + label->setToolTip(currentToolTip); + label->setAlignment(Qt::AlignRight); + m_gridLayout->addWidget(label, row, 1); + label = new QLabel(this); + label->setPixmap(trendIcon(issueCount.added, issueCount.removed)); + label->setToolTip(currentToolTip); + m_gridLayout->addWidget(label, row, 2); + label = new QLabel('+' + QString::number(issueCount.added)); + label->setAlignment(Qt::AlignRight); + label->setToolTip(currentToolTip); + m_gridLayout->addWidget(label, row, 3); + label = new QLabel("/"); + label->setToolTip(currentToolTip); + m_gridLayout->addWidget(label, row, 4); + label = new QLabel('-' + QString::number(issueCount.removed)); + label->setAlignment(Qt::AlignRight); + label->setToolTip(currentToolTip); + m_gridLayout->addWidget(label, row, 5); + }; + int allTotal = 0, allAdded = 0, allRemoved = 0, row = 0; for (auto issueCount : std::as_const(last.issueCounts)) { allTotal += issueCount.total; allAdded += issueCount.added; allRemoved += issueCount.removed; - const QString txt = apply(issueCount.total, issueCount.added, issueCount.removed); - const QString currentToolTip = toolTip(issueCount.issueKind); - QLabel *label = new QLabel(issueCount.issueKind, this); - label->setToolTip(currentToolTip); - QLabel *values = new QLabel(txt, this); - values->setToolTip(currentToolTip); - m_formLayout->addRow(label, values); + addValuesWidgets(issueCount, row); + ++row; } - QLabel *label = new QLabel(apply(allTotal, allAdded, allRemoved), this); - m_formLayout->addRow(Tr::tr("Total:"), label); + const IssueCount total{{}, Tr::tr("Total:"), allTotal, allAdded, allRemoved}; + addValuesWidgets(total, row); } AxivionOutputPane::AxivionOutputPane(QObject *parent)