InspectorClientQt.cpp [plain text]
#include "config.h"
#include "InspectorClientQt.h"
#include "qwebinspector.h"
#include "qwebinspector_p.h"
#include "qwebpage.h"
#include "qwebpage_p.h"
#include "qwebview.h"
#include <QtCore/QSettings>
#include <QtCore/QCoreApplication>
#include "InspectorController.h"
#include "NotImplemented.h"
#include "Page.h"
#include "PlatformString.h"
namespace WebCore {
static const QLatin1String settingStoragePrefix("Qt/QtWebKit/QWebInspector/");
static const QLatin1String settingStorageTypeSuffix(".type");
static String variantToSetting(const QVariant& qvariant);
static QVariant settingToVariant(const String& value);
class InspectorClientWebPage : public QWebPage {
Q_OBJECT
friend class InspectorClientQt;
public:
InspectorClientWebPage(QObject* parent = 0)
: QWebPage(parent)
{
}
QWebPage* createWindow(QWebPage::WebWindowType)
{
QWebView* view = new QWebView;
QWebPage* page = new QWebPage;
view->setPage(page);
view->setAttribute(Qt::WA_DeleteOnClose);
return page;
}
};
InspectorClientQt::InspectorClientQt(QWebPage* page)
: m_inspectedWebPage(page)
{}
void InspectorClientQt::inspectorDestroyed()
{
delete this;
}
void InspectorClientQt::openInspectorFrontend(WebCore::InspectorController*)
{
QWebView* inspectorView = new QWebView;
InspectorClientWebPage* inspectorPage = new InspectorClientWebPage(inspectorView);
inspectorView->setPage(inspectorPage);
QWebInspector* inspector = m_inspectedWebPage->d->getOrCreateInspector();
QUrl inspectorUrl = inspector->property("_q_inspectorUrl").toUrl();
if (!inspectorUrl.isValid())
inspectorUrl = QUrl("qrc:/webkit/inspector/inspector.html");
inspectorView->page()->mainFrame()->load(inspectorUrl);
m_inspectedWebPage->d->inspectorFrontend = inspectorView;
inspector->d->setFrontend(inspectorView);
inspectorView->page()->d->page->inspectorController()->setInspectorFrontendClient(new InspectorFrontendClientQt(m_inspectedWebPage, inspectorView));
}
void InspectorClientQt::highlight(Node*)
{
notImplemented();
}
void InspectorClientQt::hideHighlight()
{
notImplemented();
}
void InspectorClientQt::populateSetting(const String& key, String* setting)
{
#ifdef QT_NO_SETTINGS
Q_UNUSED(key)
Q_UNUSED(setting)
qWarning("QWebInspector: QSettings is not supported by Qt.");
#else
QSettings qsettings;
if (qsettings.status() == QSettings::AccessError) {
qWarning("QWebInspector: QSettings couldn't read configuration setting [%s].",
qPrintable(static_cast<QString>(key)));
return;
}
QString settingKey(settingStoragePrefix + QString(key));
QString storedValueType = qsettings.value(settingKey + settingStorageTypeSuffix).toString();
QVariant storedValue = qsettings.value(settingKey);
storedValue.convert(QVariant::nameToType(storedValueType.toAscii().data()));
*setting = variantToSetting(storedValue);
#endif // QT_NO_SETTINGS
}
void InspectorClientQt::storeSetting(const String& key, const String& setting)
{
#ifdef QT_NO_SETTINGS
Q_UNUSED(key)
Q_UNUSED(setting)
qWarning("QWebInspector: QSettings is not supported by Qt.");
#else
QSettings qsettings;
if (qsettings.status() == QSettings::AccessError) {
qWarning("QWebInspector: QSettings couldn't persist configuration setting [%s].",
qPrintable(static_cast<QString>(key)));
return;
}
QVariant valueToStore = settingToVariant(setting);
QString settingKey(settingStoragePrefix + QString(key));
qsettings.setValue(settingKey, valueToStore);
qsettings.setValue(settingKey + settingStorageTypeSuffix, QVariant::typeToName(valueToStore.type()));
#endif // QT_NO_SETTINGS
}
static String variantToSetting(const QVariant& qvariant)
{
String retVal;
switch (qvariant.type()) {
case QVariant::Bool:
retVal = qvariant.toBool() ? "true" : "false";
case QVariant::String:
retVal = qvariant.toString();
default:
break;
}
return retVal;
}
static QVariant settingToVariant(const String& setting)
{
QVariant retVal;
retVal.setValue(static_cast<QString>(setting));
return retVal;
}
InspectorFrontendClientQt::InspectorFrontendClientQt(QWebPage* inspectedWebPage, PassOwnPtr<QWebView> inspectorView)
: InspectorFrontendClientLocal(inspectedWebPage->d->page->inspectorController(), inspectorView->page()->d->page)
, m_inspectedWebPage(inspectedWebPage)
, m_inspectorView(inspectorView)
, m_destroyingInspectorView(false)
{
}
void InspectorFrontendClientQt::frontendLoaded()
{
InspectorFrontendClientLocal::frontendLoaded();
setAttachedWindow(true);
}
String InspectorFrontendClientQt::localizedStringsURL()
{
notImplemented();
return String();
}
String InspectorFrontendClientQt::hiddenPanels()
{
notImplemented();
return String();
}
void InspectorFrontendClientQt::bringToFront()
{
updateWindowTitle();
}
void InspectorFrontendClientQt::closeWindow()
{
if (m_destroyingInspectorView)
return;
m_destroyingInspectorView = true;
m_inspectedWebPage->d->getOrCreateInspector()->d->setFrontend(0);
#if ENABLE(INSPECTOR)
m_inspectedWebPage->d->inspectorController()->disconnectFrontend();
#endif
delete m_inspectorView.release();
}
void InspectorFrontendClientQt::attachWindow()
{
notImplemented();
}
void InspectorFrontendClientQt::detachWindow()
{
notImplemented();
}
void InspectorFrontendClientQt::setAttachedWindowHeight(unsigned)
{
notImplemented();
}
void InspectorFrontendClientQt::inspectedURLChanged(const String& newURL)
{
m_inspectedURL = newURL;
updateWindowTitle();
}
void InspectorFrontendClientQt::updateWindowTitle()
{
if (m_inspectedWebPage->d->inspector) {
QString caption = QCoreApplication::translate("QWebPage", "Web Inspector - %2").arg(m_inspectedURL);
m_inspectedWebPage->d->inspector->setWindowTitle(caption);
}
}
}
#include "InspectorClientQt.moc"