/*! @file @id $Id$ */ // 1 2 3 4 5 6 7 8 // 45678901234567890123456789012345678901234567890123456789012345678901234567890 #ifndef WEBVIEW_HXX #define WEBVIEW_HXX #include #include #include #include //! @addtogroup qbrowserlib //! @{ namespace qbrowserlib { //! QWebViev class with additional features. /*! This QWebView class contains a @ref WebPage and adds a new signal @refs newView that sends the view whenever the a new view (new window, new tab) must be opened. \copydetails WebView::newView(WebView*) */ class WebView: public QWebView { Q_OBJECT; Q_SIGNALS: //! Signals that a new window (or tab) must be opened /*! @note You @b must connect to @ref newView and assign the new @ref WebView instance to a partent widget or at least delete it, otherwise you'll have a memory leak! */ void newView(qbrowserlib::WebView*); public: //! Default construction, creates new @ref WebView WebView(QWidget *parent=0, QNetworkAccessManager* net=0): QWebView(parent) { if (!net) net = (_fallbackNetworkAccessManager = std::auto_ptr (new QNetworkAccessManager)).get(); //! @bugfix, gcc does not yet support constructor calling x(new WebPage(net, this)); } //! Construction with externally allocated @ref WebPage /*! WebView takes ownership of WebPage. */ WebView(WebPage* 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(WebPage* webpage) { webpage->setParent(this); setPage(webpage); // create a new WebView when a new WebPage has been created assert(connect(page(), SIGNAL(newPage(WebPage*)), SLOT(newPage(WebPage*)))); } private Q_SLOTS: void newPage(WebPage* p) { // memory will be lost if signal is not handled and WebView // is not assigned newView(new WebView(p)); } private: std::auto_ptr _fallbackNetworkAccessManager; }; } //! @} #endif