diff --git a/src/browser.hxx b/src/browser.hxx index 87927d3..600fcdf 100644 --- a/src/browser.hxx +++ b/src/browser.hxx @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include @@ -222,8 +222,8 @@ class Browser: public QMainWindow, protected Ui::Browser { return true; } - WebView* newTab() { - WebView* browser(new WebView); + SwissWebView* newTab() { + SwissWebView* browser(new SwissWebView); newTab(browser); return browser; } @@ -277,14 +277,14 @@ class Browser: public QMainWindow, protected Ui::Browser { view->load(page); } - void newTab(WebView* browser) { + void newTab(SwissWebView* browser) { browser->page()->setNetworkAccessManager(&_networkManager); assert(connect(&_networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(finished(QNetworkReply*)))); _url->setFocus(); - // WebView - assert(connect(browser, SIGNAL(newView(WebView*)), - SLOT(newTab(WebView*)))); + // SwissWebView + assert(connect(browser, SIGNAL(newView(SwissWebView*)), + SLOT(newTab(SwissWebView*)))); // QWebView assert(connect(browser, SIGNAL(urlChanged(const QUrl&)), SLOT(urlChanged(const QUrl&)))); diff --git a/src/designer/webviewwidgetifc.cxx b/src/designer/webviewwidgetifc.cxx index 1f4622a..1c05759 100644 --- a/src/designer/webviewwidgetifc.cxx +++ b/src/designer/webviewwidgetifc.cxx @@ -7,4 +7,4 @@ #include -Q_EXPORT_PLUGIN2(webviewwidgetplugin, WebViewWidgetIfc); +Q_EXPORT_PLUGIN2(swisswebviewwidgetplugin, SwissWebViewWidgetIfc); diff --git a/src/designer/webviewwidgetifc.hxx b/src/designer/webviewwidgetifc.hxx index 7fdcbc8..8890213 100644 --- a/src/designer/webviewwidgetifc.hxx +++ b/src/designer/webviewwidgetifc.hxx @@ -8,13 +8,14 @@ #ifndef __WEBVIEWWIDGETIFC_HXX #define __WEBVIEWWIDGETIFC_HXX -#include +#include #include #define LOG qDebug()<<__PRETTY_FUNCTION__ //! WebView widget for Qt Designer -class WebViewWidgetIfc: public QObject, public QDesignerCustomWidgetInterface { +class SwissWebViewWidgetIfc: public QObject, + public QDesignerCustomWidgetInterface { Q_OBJECT; Q_INTERFACES(QDesignerCustomWidgetInterface); public: @@ -51,7 +52,7 @@ class WebViewWidgetIfc: public QObject, public QDesignerCustomWidgetInterface { } QString name() const { LOG; - return "WebView"; + return "SwissWebView"; } QString toolTip() const { LOG; @@ -63,7 +64,7 @@ class WebViewWidgetIfc: public QObject, public QDesignerCustomWidgetInterface { } QWidget *createWidget(QWidget *parent) { LOG; - return new WebView(parent); + return new SwissWebView(parent); } }; diff --git a/src/qbrowserlib/qmake.pro.in b/src/qbrowserlib/qmake.pro.in index a3f720e..1a4d9f0 100644 --- a/src/qbrowserlib/qmake.pro.in +++ b/src/qbrowserlib/qmake.pro.in @@ -36,7 +36,7 @@ TRANSLATIONS = @srcdir@/qbrowserlib_en.ts \ SOURCES = -HEADERS = @srcdir@/webview.hxx @srcdir@/webpage.hxx \ +HEADERS = @srcdir@/swisswebview.hxx @srcdir@/swisswebpage.hxx \ @srcdir@/pluginfactory.hxx @srcdir@/saveorrun.hxx FORMS = @srcdir@/saveorrun.ui diff --git a/src/qbrowserlib/webpage.hxx b/src/qbrowserlib/swisswebpage.hxx similarity index 58% rename from src/qbrowserlib/webpage.hxx rename to src/qbrowserlib/swisswebpage.hxx index 59f4e93..9f3d563 100644 --- a/src/qbrowserlib/webpage.hxx +++ b/src/qbrowserlib/swisswebpage.hxx @@ -5,8 +5,10 @@ // 1 2 3 4 5 6 7 8 // 45678901234567890123456789012345678901234567890123456789012345678901234567890 -#ifndef __WEBPAGE_HXX__ -#define __WEBPAGE_HXX__ +#ifndef __SWISSWEBPAGE_HXX__ +#define __SWISSWEBPAGE_HXX__ + +#include #include #include @@ -16,18 +18,31 @@ #define LOG qDebug()<<__PRETTY_FUNCTION__ #endif -class WebPage: public QWebPage { +//! QWebPage with additional features and better default behaviour. +/*! SwissWebPage is designed to be used by SwissWebView. + + This QWebPage supports the folloing additional features: + - Handling of plugins through PluginFactory + - Processing of unsupportedContent + - Delegation of all links + - Signals @ref newPage if a new window should be created + - Set useragent from environment variable @c SWISS_USERAGENT */ +class SwissWebPage: public QWebPage { Q_OBJECT; signals: - void newPage(WebPage*); + void newPage(SwissWebPage*); public: - WebPage(QObject *parent = 0): QWebPage(parent) {} + SwissWebPage(QObject *parent = 0): QWebPage(parent) { + setPluginFactory(new PluginFactory); + setLinkDelegationPolicy(QWebPage::DelegateAllLinks); + setForwardUnsupportedContent(true); + } protected: virtual QWebPage* createWindow(WebWindowType type) { switch (type) { case QWebPage::WebBrowserWindow: case QWebPage::WebModalDialog: { - WebPage *page(new WebPage); + SwissWebPage *page(new SwissWebPage); newPage(page); return page; } break; @@ -36,7 +51,7 @@ class WebPage: public QWebPage { } virtual QString userAgentForUrl(const QUrl& url) const { QString add(QProcessEnvironment::systemEnvironment() - .value("SWISSSURFER_USERAGENT")); + .value("SWISS_USERAGENT")); return QWebPage::userAgentForUrl(url)+(add.size()?" "+add:QString()); } QObject* createPlugin(const QString& classid, const QUrl& url, diff --git a/src/qbrowserlib/swisswebview.hxx b/src/qbrowserlib/swisswebview.hxx new file mode 100644 index 0000000..df77471 --- /dev/null +++ b/src/qbrowserlib/swisswebview.hxx @@ -0,0 +1,64 @@ +/*! @file + + @id $Id$ +*/ +// 1 2 3 4 5 6 7 8 +// 45678901234567890123456789012345678901234567890123456789012345678901234567890 + +#ifndef SWISSWEBVIEW_HXX +#define SWISSWEBVIEW_HXX + +#include + +#include +#include + +#include + +//! QWebViev class with additional features. +/*! This QWebView class contains a @ref SwissWebPage and adds a new + signal @refs newView that sends the view whenever the a new view + (new window, new tab) must be opened. + + \copydetails SwissWebView::newView(SwissWebView*) + */ +class QDESIGNER_WIDGET_EXPORT SwissWebView: public QWebView { + Q_OBJECT; + signals: + //! Signals that a new window (or tab) must be opened + /*! @note You @b must connect to @ref newView and assign the new + @ref SwissWebView instance to a partent widget or at least + delete it, otherwise you'll have a memory leak! */ + void newView(SwissWebView*); + public: + //! Default construction, creates new @ref SwissWebView + SwissWebView(QWidget *parent=0): QWebView(parent) { + //! @bugfix, gcc does not yet support constructor calling + x(new SwissWebPage); + } + //! Construction with externally allocated @ref SwissWebPage + /*! SwissWebView takes ownership of SwissWebPage. */ + SwissWebView(SwissWebPage* webpage) { + //! @bugfix, gcc does not yet support constructor calling + x(webpage); + } + private: + //! @bugfix, gcc does not yet support constructor calling + /*! @see http://en.wikipedia.org/wiki/C++11#Object_construction_improvement + */ + void x(SwissWebPage* webpage) { + webpage->setParent(this); + setPage(webpage); + // create a new SwissWebView when a new SwissWebPage has been created + assert(connect(page(), SIGNAL(newPage(SwissWebPage*)), + SLOT(newPage(SwissWebPage*)))); + } + private slots: + void newPage(SwissWebPage* p) { + // memory will be lost if signal is not handled and SwissWebView + // is not assigned + newView(new SwissWebView(p)); + } +}; + +#endif diff --git a/src/qbrowserlib/webview.hxx b/src/qbrowserlib/webview.hxx deleted file mode 100644 index 2b4777a..0000000 --- a/src/qbrowserlib/webview.hxx +++ /dev/null @@ -1,49 +0,0 @@ -/*! @file - - @id $Id$ -*/ -// 1 2 3 4 5 6 7 8 -// 45678901234567890123456789012345678901234567890123456789012345678901234567890 - -#ifndef WEBVIEW_HXX -#define WEBVIEW_HXX - -#include -#include - -#include -#include - -#include - -class QDESIGNER_WIDGET_EXPORT WebView: public QWebView { - Q_OBJECT; - signals: - void newView(WebView*); - public: - WebView(WebPage* webpage) { - x(webpage); //! @bugfix, gcc does not yet support constructor calling - } - WebView(QWidget *parent=0): QWebView(parent) { - x(new WebPage); //! @bugfix, gcc does not yet support constructor calling - } - private: - //! @bugfix, gcc does not yet support constructor calling - /*! @see http://en.wikipedia.org/wiki/C++11#Object_construction_improvement - */ - void x(WebPage* webpage) { - webpage->setParent(this); - setPage(webpage); - page()->setPluginFactory(new PluginFactory); - page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); - page()->setForwardUnsupportedContent(true); - assert(connect(page(), SIGNAL(newPage(WebPage*)), - SLOT(newPage(WebPage*)))); - } - private slots: - void newPage(WebPage* p) { - newView(new WebView(p)); - } -}; - -#endif