[kde-doc-english] [trojita] src/Gui: GUI: reflect uncached parts in the GUI

Jan Kundrát jkt at flaska.net
Fri Aug 9 16:30:09 UTC 2013


Git commit 95b085f5d37cdb06b221ae3afda7db97959cdd05 by Jan Kundrát.
Committed on 04/08/2013 at 11:00.
Pushed by jkt into branch 'master'.

GUI: reflect uncached parts in the GUI

M  +43   -0    src/Gui/EmbeddedWebView.cpp
M  +9    -0    src/Gui/EmbeddedWebView.h

http://commits.kde.org/trojita/95b085f5d37cdb06b221ae3afda7db97959cdd05

diff --git a/src/Gui/EmbeddedWebView.cpp b/src/Gui/EmbeddedWebView.cpp
index b54e9c1..9df32e4 100644
--- a/src/Gui/EmbeddedWebView.cpp
+++ b/src/Gui/EmbeddedWebView.cpp
@@ -21,12 +21,14 @@
 */
 #include "EmbeddedWebView.h"
 #include "MessageView.h"
+#include "Gui/Util.h"
 
 #include <QAbstractScrollArea>
 #include <QAction>
 #include <QApplication>
 #include <QDesktopServices>
 #include <QLayout>
+#include <QNetworkReply>
 #include <QStyle>
 #include <QStyleFactory>
 #include <QWebFrame>
@@ -43,6 +45,7 @@ EmbeddedWebView::EmbeddedWebView(QWidget *parent, QNetworkAccessManager *network
     // set to expanding, ie. "freely" - this is important so the widget will attempt to shrink below the sizehint!
     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
     setFocusPolicy(Qt::StrongFocus); // not by the wheel
+    setPage(new ErrorCheckingPage(this));
     page()->setNetworkAccessManager(networkManager);
 
     QWebSettings *s = settings();
@@ -198,4 +201,44 @@ QSize EmbeddedWebView::sizeHint() const
     return QSize(32,32); // QWebView returns 800x600 what will lead to too wide pages for our implementation
 }
 
+ErrorCheckingPage::ErrorCheckingPage(QObject *parent): QWebPage(parent)
+{
+}
+
+bool ErrorCheckingPage::supportsExtension(Extension extension) const
+{
+#if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0)
+    if (extension == ErrorPageExtension)
+        return true;
+    else
+#endif
+        return false;
+}
+
+bool ErrorCheckingPage::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output)
+{
+#if QT_VERSION < QT_VERSION_CHECK(4, 8, 0)
+    return false;
+#else
+    if (extension != ErrorPageExtension)
+        return false;
+
+    const ErrorPageExtensionOption *input = static_cast<const ErrorPageExtensionOption *>(option);
+    ErrorPageExtensionReturn *res = static_cast<ErrorPageExtensionReturn *>(output);
+    if (input && res) {
+        if (input->url.scheme() == QLatin1String("trojita-imap")) {
+            if (input->domain == QtNetwork && input->error == QNetworkReply::TimeoutError) {
+                res->content = tr("<img src='%2'/><span style='font-family: sans-serif; color: gray'>"
+                                  "Uncached data not available when offline</span>")
+                        .arg(Util::resizedImageAsDataUrl(QLatin1String(":/icons/network-offline.png"), 32)).toUtf8();
+                return true;
+            }
+        }
+        res->content = input->errorString.toUtf8();
+        res->contentType = QLatin1String("text/plain");
+    }
+    return true;
+#endif
+}
+
 }
diff --git a/src/Gui/EmbeddedWebView.h b/src/Gui/EmbeddedWebView.h
index ef7f9d7..a085db0 100644
--- a/src/Gui/EmbeddedWebView.h
+++ b/src/Gui/EmbeddedWebView.h
@@ -64,6 +64,15 @@ private:
     int m_scrollParentPadding;
 };
 
+class ErrorCheckingPage: public QWebPage
+{
+public:
+    explicit ErrorCheckingPage(QObject *parent);
+
+    virtual bool extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output);
+    virtual bool supportsExtension(Extension extension) const;
+};
+
 }
 
 #endif // EMBEDDEDWEBVIEW_H



More information about the kde-doc-english mailing list