diff --git a/src/plugins/axivion/axivion.qrc b/src/plugins/axivion/axivion.qrc
index 96fafb01dd9..3b730d38c34 100644
--- a/src/plugins/axivion/axivion.qrc
+++ b/src/plugins/axivion/axivion.qrc
@@ -14,6 +14,8 @@
images/button-MV@2x.png
images/button-SV.png
images/button-SV@2x.png
+ images/error.png
+ images/error@2x.png
images/nodata.png
images/nodata@2x.png
images/sortAsc.png
diff --git a/src/plugins/axivion/axivionoutputpane.cpp b/src/plugins/axivion/axivionoutputpane.cpp
index b6133fd4a58..5cb9ddc9e31 100644
--- a/src/plugins/axivion/axivionoutputpane.cpp
+++ b/src/plugins/axivion/axivionoutputpane.cpp
@@ -136,6 +136,8 @@ public:
const std::optional currentTableInfo() const { return m_currentTableInfo; }
IssueListSearch searchFromUi() const;
+
+ void showOverlay(const QString &errorMessage = {});
private:
void updateTable();
void addIssues(const Dto::IssueTableDto &dto, int startRow);
@@ -145,8 +147,7 @@ private:
void fetchTable();
void fetchIssues(const IssueListSearch &search);
void onFetchRequested(int startRow, int limit);
- void showNoDataOverlay();
- void hideNoDataOverlay();
+ void hideOverlay();
QString m_currentPrefix;
QString m_currentProject;
@@ -168,7 +169,7 @@ private:
QStringList m_userNames;
QStringList m_versionDates;
TaskTreeRunner m_taskTreeRunner;
- OverlayWidget *m_noDataOverlay = nullptr;
+ OverlayWidget *m_overlay = nullptr;
};
IssuesWidget::IssuesWidget(QWidget *parent)
@@ -436,7 +437,7 @@ void IssuesWidget::addIssues(const Dto::IssueTableDto &dto, int startRow)
}
m_issuesModel->setItems(items);
if (items.isEmpty() && m_totalRowCount == 0)
- showNoDataOverlay();
+ showOverlay();
}
void IssuesWidget::onSearchParameterChanged()
@@ -611,7 +612,7 @@ void IssuesWidget::fetchTable()
void IssuesWidget::fetchIssues(const IssueListSearch &search)
{
- hideNoDataOverlay();
+ hideOverlay();
const auto issuesHandler = [this, startRow = search.offset](const Dto::IssueTableDto &dto) {
addIssues(dto, startRow);
};
@@ -631,33 +632,40 @@ void IssuesWidget::onFetchRequested(int startRow, int limit)
fetchIssues(search);
}
-void IssuesWidget::showNoDataOverlay()
+void IssuesWidget::showOverlay(const QString &errorMessage)
{
- if (!m_noDataOverlay) {
+ if (!m_overlay) {
QTC_ASSERT(m_issuesView, return);
- m_noDataOverlay = new OverlayWidget(this);
- m_noDataOverlay->setPaintFunction([](QWidget *that, QPainter &p, QPaintEvent *) {
- static const QIcon icon = Icon({{":/axivion/images/nodata.png",
- Theme::IconsDisabledColor}},
- Utils::Icon::Tint).icon();
- QRect iconRect(0, 0, 32, 32);
- iconRect.moveCenter(that->rect().center());
- icon.paint(&p, iconRect);
- p.save();
- p.setPen(Utils::creatorColor(Theme::TextColorDisabled));
- p.drawText(iconRect.bottomRight() + QPoint{10, p.fontMetrics().height() / 2 - 16},
- Tr::tr("No Data"));
- p.restore();
- });
- m_noDataOverlay->attachToWidget(m_issuesView);
+ m_overlay = new OverlayWidget(this);
+ m_overlay->attachToWidget(m_issuesView);
}
- m_noDataOverlay->show();
+
+ m_overlay->setPaintFunction([errorMessage](QWidget *that, QPainter &p, QPaintEvent *) {
+ static const QIcon noData = Icon({{":/axivion/images/nodata.png", Theme::IconsDisabledColor}},
+ Utils::Icon::Tint).icon();
+ static const QIcon error = Icon({{":/axivion/images/error.png", Theme::IconsErrorColor}},
+ Utils::Icon::Tint).icon();
+ QRect iconRect(0, 0, 32, 32);
+ iconRect.moveCenter(that->rect().center());
+ if (errorMessage.isEmpty())
+ noData.paint(&p, iconRect);
+ else
+ error.paint(&p, iconRect);
+ p.save();
+ p.setPen(Utils::creatorColor(Theme::TextColorDisabled));
+ const QFontMetrics &fm = p.fontMetrics();
+ p.drawText(iconRect.bottomRight() + QPoint{10, fm.height() / 2 - 16 - fm.descent()},
+ errorMessage.isEmpty() ? Tr::tr("No Data") : errorMessage);
+ p.restore();
+ });
+
+ m_overlay->show();
}
-void IssuesWidget::hideNoDataOverlay()
+void IssuesWidget::hideOverlay()
{
- if (m_noDataOverlay)
- m_noDataOverlay->hide();
+ if (m_overlay)
+ m_overlay->hide();
}
class AxivionOutputPane final : public IOutputPane
@@ -736,6 +744,13 @@ public:
issues->updateUi(kind);
}
+ void handleShowFilterException(const QString &errorMessage)
+ {
+ QTC_ASSERT(m_outputWidget, return);
+ if (auto issues = static_cast(m_outputWidget->widget(0)))
+ issues->showOverlay(errorMessage);
+ }
+
bool handleContextMenu(const QString &issue, const ItemViewEvent &e)
{
auto issues = static_cast(m_outputWidget->widget(0));
@@ -810,4 +825,10 @@ static bool issueListContextMenuEvent(const ItemViewEvent &ev)
return theAxivionOutputPane->handleContextMenu(issue, ev);
}
+void showFilterException(const QString &errorMessage)
+{
+ QTC_ASSERT(theAxivionOutputPane, return);
+ theAxivionOutputPane->handleShowFilterException(errorMessage);
+}
+
} // Axivion::Internal
diff --git a/src/plugins/axivion/axivionoutputpane.h b/src/plugins/axivion/axivionoutputpane.h
index a13b125c183..6e8f34df4da 100644
--- a/src/plugins/axivion/axivionoutputpane.h
+++ b/src/plugins/axivion/axivionoutputpane.h
@@ -9,5 +9,6 @@ namespace Axivion::Internal {
void setupAxivionOutputPane(QObject *guard);
void updateDashboard();
+void showFilterException(const QString &errorMessage);
} // Axivion::Internal
diff --git a/src/plugins/axivion/axivionplugin.cpp b/src/plugins/axivion/axivionplugin.cpp
index e82b3f37099..345c328097c 100644
--- a/src/plugins/axivion/axivionplugin.cpp
+++ b/src/plugins/axivion/axivionplugin.cpp
@@ -501,6 +501,12 @@ static Group dtoRecipe(const Storage> &dtoStorage)
}
}
+ if (statusCode == 400 && error->type == "InvalidFilterException"
+ && !error->message.isEmpty()) {
+ // handle error..
+ showFilterException(error->message);
+ return DoneResult::Error;
+ }
errorString = Error(DashboardError(reply->url(), statusCode,
reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(),
*error)).message();
diff --git a/src/plugins/axivion/images/error.png b/src/plugins/axivion/images/error.png
new file mode 100644
index 00000000000..01fc67a6ce7
Binary files /dev/null and b/src/plugins/axivion/images/error.png differ
diff --git a/src/plugins/axivion/images/error@2x.png b/src/plugins/axivion/images/error@2x.png
new file mode 100644
index 00000000000..e104fa041ca
Binary files /dev/null and b/src/plugins/axivion/images/error@2x.png differ
diff --git a/src/tools/icons/qtcreatoricons.svg b/src/tools/icons/qtcreatoricons.svg
index d816b3da3de..3144f1e2a39 100644
--- a/src/tools/icons/qtcreatoricons.svg
+++ b/src/tools/icons/qtcreatoricons.svg
@@ -4130,6 +4130,27 @@
sodipodi:nodetypes="ccccccc" />
+
+
+
+