[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [zanshin] /: Integrate KMessageWidget in PageView to display errors
From: Kevin Ottens <ervin () kde ! org>
Date: 2016-11-23 8:23:15
Message-ID: E1c9Spn-00066t-4z () code ! kde ! org
[Download RAW message or body]
Git commit 9f9d68ebe5e5ddde2a9ce854330e2d3d5e4bc28e by Kevin Ottens.
Committed on 23/11/2016 at 08:23.
Pushed by ervin into branch 'master'.
Integrate KMessageWidget in PageView to display errors
Reviewers: bensi, dfaure, franckarrecot
Reviewed By: franckarrecot
Differential Revision: https://phabricator.kde.org/D2695
M +16 -0 src/widgets/pageview.cpp
M +4 -0 src/widgets/pageview.h
M +64 -0 tests/units/widgets/pageviewtest.cpp
https://commits.kde.org/zanshin/9f9d68ebe5e5ddde2a9ce854330e2d3d5e4bc28e
diff --git a/src/widgets/pageview.cpp b/src/widgets/pageview.cpp
index 2ed13ee..485cb23 100644
--- a/src/widgets/pageview.cpp
+++ b/src/widgets/pageview.cpp
@@ -34,6 +34,8 @@
#include <QMessageBox>
#include <QTimer>
+#include <KMessageWidget>
+
#include "filterwidget.h"
#include "itemdelegate.h"
#include "messagebox.h"
@@ -110,10 +112,17 @@ PageView::PageView(QWidget *parent)
: QWidget(parent),
m_cancelAction(new QAction(this)),
m_model(Q_NULLPTR),
+ m_messageWidget(new KMessageWidget(this)),
m_filterWidget(new FilterWidget(this)),
m_centralView(new PageTreeView(this)),
m_quickAddEdit(new QLineEdit(this))
{
+ m_messageWidget->setObjectName(QStringLiteral("messageWidget"));
+ m_messageWidget->setCloseButtonVisible(true);
+ m_messageWidget->setMessageType(KMessageWidget::Error);
+ m_messageWidget->setWordWrap(true);
+ m_messageWidget->hide();
+
m_filterWidget->setObjectName(QStringLiteral("filterWidget"));
m_filterWidget->hide();
@@ -139,6 +148,7 @@ PageView::PageView(QWidget *parent)
auto layout = new QVBoxLayout;
layout->setContentsMargins(0, 0, 0, 3);
+ layout->addWidget(m_messageWidget);
layout->addWidget(m_filterWidget);
layout->addWidget(m_centralView);
layout->addWidget(m_quickAddEdit);
@@ -246,6 +256,12 @@ void PageView::setMessageBoxInterface(const \
MessageBoxInterface::Ptr &interface) m_messageBoxInterface = interface;
}
+void PageView::displayErrorMessage(const QString &message)
+{
+ m_messageWidget->setText(message);
+ m_messageWidget->animatedShow();
+}
+
void PageView::onReturnPressed()
{
if (m_quickAddEdit->text().isEmpty())
diff --git a/src/widgets/pageview.h b/src/widgets/pageview.h
index 2a4c1a2..1dbf212 100644
--- a/src/widgets/pageview.h
+++ b/src/widgets/pageview.h
@@ -40,6 +40,8 @@ class QLineEdit;
class QModelIndex;
class QMessageBox;
+class KMessageWidget;
+
namespace Widgets {
class FilterWidget;
@@ -60,6 +62,7 @@ public:
public slots:
void setModel(QObject *model);
void setMessageBoxInterface(const MessageBoxInterface::Ptr \
&interface); + void displayErrorMessage(const QString &message);
signals:
void currentArtifactChanged(const Domain::Artifact::Ptr &artifact);
@@ -78,6 +81,7 @@ private:
QHash<QString, QAction*> m_actions;
QAction *m_cancelAction;
QObject *m_model;
+ KMessageWidget *m_messageWidget;
FilterWidget *m_filterWidget;
PageTreeView *m_centralView;
QLineEdit *m_quickAddEdit;
diff --git a/tests/units/widgets/pageviewtest.cpp \
b/tests/units/widgets/pageviewtest.cpp index c690d62..ba600fb 100644
--- a/tests/units/widgets/pageviewtest.cpp
+++ b/tests/units/widgets/pageviewtest.cpp
@@ -30,8 +30,11 @@
#include <QLineEdit>
#include <QMessageBox>
#include <QStandardItemModel>
+#include <QToolButton>
#include <QTreeView>
+#include <KMessageWidget>
+
#include "domain/task.h"
#include "presentation/artifactfilterproxymodel.h"
@@ -107,6 +110,17 @@ private slots:
QCOMPARE(page.contentsMargins(), QMargins(0, 0, 0, 0));
QCOMPARE(page.layout()->contentsMargins(), QMargins(0, 0, 0, 3));
+ auto messageWidget = \
page.findChild<KMessageWidget*>(QStringLiteral("messageWidget")); + \
QVERIFY(messageWidget); + \
QVERIFY(!messageWidget->isVisibleTo(&page)); + \
QVERIFY(!messageWidget->isCloseButtonVisible()); + \
QVERIFY(messageWidget->wordWrap()); + \
QVERIFY(messageWidget->text().isEmpty()); + \
QVERIFY(messageWidget->icon().isNull()); + \
QCOMPARE(messageWidget->messageType(), KMessageWidget::Error); + \
QVERIFY(!messageWidget->isShowAnimationRunning()); + \
QVERIFY(!messageWidget->isHideAnimationRunning()); +
auto centralView = \
page.findChild<QTreeView*>(QStringLiteral("centralView")); \
QVERIFY(centralView); QVERIFY(centralView->isVisibleTo(&page));
@@ -607,6 +621,56 @@ private slots:
QCOMPARE(selectedIndexes.at(0).model(), index.model());
QCOMPARE(selectedIndexes.at(1).model(), index2.model());
}
+
+ void shouldDisplayMessageOnError()
+ {
+ // GIVEN
+ Widgets::PageView page;
+ page.show();
+ QTest::qWaitForWindowShown(&page);
+ QTest::qWait(100);
+
+ auto messageWidget = \
page.findChild<KMessageWidget*>(QStringLiteral("messageWidget")); + \
QVERIFY(messageWidget); + \
QVERIFY(!messageWidget->isVisibleTo(&page)); +
+ QCOMPARE(messageWidget->findChildren<QToolButton*>().size(), 1);
+ auto closeButton = \
messageWidget->findChildren<QToolButton*>().first(); + \
QVERIFY(closeButton); +
+ // WHEN
+ page.displayErrorMessage(QStringLiteral("Foo Error"));
+
+ // THEN
+ QVERIFY(messageWidget->isVisibleTo(&page));
+ QVERIFY(messageWidget->isCloseButtonVisible());
+ QCOMPARE(messageWidget->text(), QStringLiteral("Foo Error"));
+ QVERIFY(messageWidget->icon().isNull());
+ QCOMPARE(messageWidget->messageType(), KMessageWidget::Error);
+ QVERIFY(messageWidget->isShowAnimationRunning());
+ QVERIFY(!messageWidget->isHideAnimationRunning());
+
+ // WHEN
+ QTest::qWait(800);
+
+ // THEN
+ QVERIFY(!messageWidget->isShowAnimationRunning());
+ QVERIFY(!messageWidget->isHideAnimationRunning());
+
+ // WHEN
+ closeButton->click();
+
+ // THEN
+ QVERIFY(!messageWidget->isShowAnimationRunning());
+ QVERIFY(messageWidget->isHideAnimationRunning());
+
+ // WHEN
+ QTest::qWait(800);
+
+ // THEN
+ QVERIFY(!messageWidget->isShowAnimationRunning());
+ QVERIFY(!messageWidget->isHideAnimationRunning());
+ }
};
ZANSHIN_TEST_MAIN(PageViewTest)
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic