WebKit/qt/Api/qwebinspector.cpp
changeset 0 4f2f89ce4247
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebKit/qt/Api/qwebinspector.cpp	Fri Sep 17 09:02:29 2010 +0300
@@ -0,0 +1,204 @@
+/*
+    Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include "config.h"
+#include "qwebinspector.h"
+
+#include "Element.h"
+#include "InspectorController.h"
+#include "qwebelement.h"
+#include "qwebinspector_p.h"
+#include "qwebpage_p.h"
+
+#include <QResizeEvent>
+
+/*!
+    \class QWebInspector
+    \since 4.6
+    \inmodule QtWebKit
+    \brief The QWebInspector class allows the placement and control of a
+    QWebPage's inspector.
+    The inspector can display a page's hierarchy, its loading statistics and
+    the current state of its individual elements. It is mostly used by web
+    developers.
+
+    The QWebPage to be inspected must be specified using the setPage() method.
+
+    A typical use of QWebInspector follows:
+
+    \snippet webkitsnippets/qtwebkit_qwebinspector_snippet.cpp 0
+
+    A QWebInspector can be made visible either programmatically using
+    setVisible(), or by the user through the attached QWebPage's context
+    menu.
+
+    \note A QWebInspector will display a blank widget if either:
+    \list
+        \o page() is null
+        \o QWebSettings::DeveloperExtrasEnabled is false
+    \endlist
+
+    \section1 Resources
+
+    This class acts mostly as a container and a controller for the inspector.
+    Most of the resources needed by the inspector are owned by the associated
+    QWebPage and are allocated the first time that:
+    \list
+        \o an element is inspected
+        \o the QWebInspector is shown.
+    \endlist
+
+    \section1 Inspector configuration persistence
+
+    The inspector allows the user to configure some options through its
+    user interface (e.g. the resource tracking "Always enable" option).
+    These settings will be persisted automatically by QtWebKit only if
+    your application previously called QCoreApplication::setOrganizationName()
+    and QCoreApplication::setApplicationName().
+    See QSettings's default constructor documentation for an explanation
+    of why this is necessary.
+*/
+
+/*!
+    Constructs an unbound QWebInspector with \a parent as its parent.
+*/
+QWebInspector::QWebInspector(QWidget* parent)
+    : QWidget(parent)
+    , d(new QWebInspectorPrivate(this))
+{
+}
+
+/*!
+    Destroys the inspector.
+*/
+QWebInspector::~QWebInspector()
+{
+    // Remove association principally to prevent deleting a child frontend
+    setPage(0);
+}
+
+/*!
+    Bind this inspector to the QWebPage to be inspected.
+
+    \bold {Notes:}
+    \list
+        \o There can only be one QWebInspector associated with a QWebPage
+           and vice versa.
+        \o Calling this method with a null \a page will break the current association, if any.
+        \o If \a page is already associated to another QWebInspector, the association
+           will be replaced and the previous QWebInspector will become unbound
+    \endlist
+
+    \sa page()
+*/
+void QWebInspector::setPage(QWebPage* page)
+{
+    if (d->page) {
+        // Break currentPage-->this
+        d->page->d->setInspector(0);
+    }
+    if (page && page->d->inspector && page->d->inspector != this) {
+        // Break newPage<->newPageCurrentInspector
+        page->d->inspector->setPage(0);
+    }
+
+    d->page = page;
+
+    if (page) {
+        // Setup the reciprocal association
+        page->d->setInspector(this);
+    }
+}
+
+/*!
+    Returns the inspected QWebPage.
+    If no web page is currently associated, a null pointer is returned.
+*/
+QWebPage* QWebInspector::page() const
+{
+    return d->page;
+}
+
+/*! \reimp */
+QSize QWebInspector::sizeHint() const
+{
+    return QSize(450, 300);
+}
+
+/*! \reimp */
+bool QWebInspector::event(QEvent* ev)
+{
+    return QWidget::event(ev);
+}
+
+/*! \reimp */
+void QWebInspector::resizeEvent(QResizeEvent* event)
+{
+    d->adjustFrontendSize(event->size());
+}
+
+/*! \reimp */
+void QWebInspector::showEvent(QShowEvent* event)
+{
+#if ENABLE(INSPECTOR)
+    // Allows QWebInspector::show() to init the inspector.
+    if (d->page)
+        d->page->d->inspectorController()->show();
+#endif
+}
+
+/*! \reimp */
+void QWebInspector::hideEvent(QHideEvent* event)
+{
+#if ENABLE(INSPECTOR)
+    if (d->page)
+        d->page->d->inspectorController()->close();
+#endif
+}
+
+/*! \reimp */
+void QWebInspector::closeEvent(QCloseEvent* event)
+{
+#if ENABLE(INSPECTOR)
+    if (d->page)
+        d->page->d->inspectorController()->close();
+#endif
+}
+
+/*! \internal */
+void QWebInspectorPrivate::setFrontend(QWidget* newFrontend)
+{
+    if (frontend)
+        frontend->setParent(0);
+
+    frontend = newFrontend;
+
+    if (frontend) {
+        frontend->setParent(q);
+        frontend->show();
+        adjustFrontendSize(q->size());
+    }
+}
+
+void QWebInspectorPrivate::adjustFrontendSize(const QSize& size)
+{
+    if (frontend)
+        frontend->resize(size);
+}
+