[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