diff --git a/src/plugins/qmldesigner/components/debugview/debugview.cpp b/src/plugins/qmldesigner/components/debugview/debugview.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6e5e377f3e5cb9f29c945ba20f5895cf3a917b25 --- /dev/null +++ b/src/plugins/qmldesigner/components/debugview/debugview.cpp @@ -0,0 +1,378 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "debugview.h" +#include "debugviewwidget.h" + +#include <qmldesignerplugin.h> +#include <designersettings.h> + +#include <bindingproperty.h> +#include <nodeabstractproperty.h> +#include <variantproperty.h> + +namespace { +const QLatin1String lineBreak = QLatin1String("<br>"); + +bool isDebugViewEnabled() +{ + return (QmlDesigner::QmlDesignerPlugin::instance()->settings().enableDebugView); +} + +bool isDebugViewShown() +{ + return (QmlDesigner::QmlDesignerPlugin::instance()->settings().showDebugView); +} + +} + +namespace QmlDesigner { + +namespace Internal { + +DebugView::DebugView(QObject *parent) : QmlModelView(parent), + m_debugViewWidget(new DebugViewWidget) +{ +} + +DebugView::~DebugView() +{ +} + +void DebugView::modelAttached(Model *model) +{ + log(tr("Model attached"), tr("FileName %1").arg(model->fileUrl().toLocalFile())); + m_debugViewWidget->setDebugViewEnabled(isDebugViewEnabled()); + qDebug() << "enabled: " << isDebugViewEnabled(); + QmlModelView::modelAttached(model); +} + +void DebugView::modelAboutToBeDetached(Model *model) +{ + log(tr("Model detached"), tr("FileName %1").arg(model->fileUrl().toLocalFile())); + QmlModelView::modelAboutToBeDetached(model); +} + +void DebugView::importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports) +{ + if (isDebugViewEnabled()) { + QString message; + message += tr("Added imports:") += lineBreak; + foreach (const Import &import, addedImports) { + message += import.toString() += lineBreak; + } + + message += tr("Removed imports:") += lineBreak; + foreach (const Import &import, removedImports) { + message += import.toString() += lineBreak; + } + + log(tr("Imports changed:"), message); + } +} + +void DebugView::nodeCreated(const ModelNode &createdNode) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + message << createdNode; + log(tr("Node created:"), message.readAll()); + } +} + +void DebugView::nodeAboutToBeRemoved(const ModelNode &removedNode) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + message << removedNode; + log(tr("Node removed:"), message.readAll()); + } +} + +void DebugView::nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, + const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + message << node; + message << tr("New parent property:"); + message << lineBreak; + message << newPropertyParent; + message << tr("Old parent property:"); + message << lineBreak; + message << oldPropertyParent; + message << tr("PropertyChangeFlag"); + message << lineBreak; + message << propertyChange; + log(tr("Node reparanted:"), message.readAll()); + } +} + +void DebugView::nodeIdChanged(const ModelNode &node, const QString &newId, const QString &oldId) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + message << node; + message << tr("New Id: ") << newId << lineBreak; + message << tr("Old Id: ") << oldId << lineBreak; + log(tr("Node id changed:"), string); + } +} + +void DebugView::propertiesAboutToBeRemoved(const QList<AbstractProperty> & /*propertyList*/) +{ +} + +void DebugView::variantPropertiesChanged(const QList<VariantProperty> &propertyList, + AbstractView::PropertyChangeFlags /*propertyChange*/) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + foreach (const VariantProperty &property, propertyList) { + message << property; + } + log(tr("VariantProperties changed:"), string); + } +} + +void DebugView::bindingPropertiesChanged(const QList<BindingProperty> &propertyList, + AbstractView::PropertyChangeFlags /*propertyChange*/) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + foreach (const BindingProperty &property, propertyList) { + message << property; + } + log(tr("BindingProperties changed:"), string); + } +} + +void DebugView::rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) +{ + if (isDebugViewEnabled()) { + QString message; + message += type; + message += QLatin1String(" "); + message += QString::number(majorVersion); + message += QLatin1String(" "); + message += QString::number(minorVersion); + log(tr("Node id changed:"), message); + } +} + +void DebugView::selectedNodesChanged(const QList<ModelNode> & /*selectedNodeList*/, + const QList<ModelNode> & /*lastSelectedNodeList*/) +{ +} + +void DebugView::scriptFunctionsChanged(const ModelNode & /*node*/, const QStringList & /*scriptFunctionList*/) +{ +} + +void DebugView::propertiesRemoved(const QList<AbstractProperty> &propertyList) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + foreach (const AbstractProperty &property, propertyList) { + message << property; + } + log(tr("Properties removed:"), string); + } +} + +QWidget *DebugView::widget() +{ + return 0; +} + +void DebugView::auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + + message << node; + message << name; + message << data.toString(); + + log(tr("Auxiliary Data Changed:"), string); + } +} + +void DebugView::rewriterBeginTransaction() +{ + if (isDebugViewEnabled()) + log(tr("Begin rewriter transaction"), QString(), true); +} + +void DebugView::rewriterEndTransaction() +{ + if (isDebugViewEnabled()) + log(tr("End rewriter transaction"), QString(), true); +} + +WidgetInfo DebugView::widgetInfo() +{ + return createWidgetInfo(m_debugViewWidget.data(), "DebugView", WidgetInfo::LeftPane, 0, tr("Debug View")); +} + +bool DebugView::hasWidget() const +{ + if (isDebugViewShown()) + return true; + + return false; +} + +void DebugView::instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + + typedef QPair<ModelNode, PropertyName> Pair; + + foreach (const Pair &pair, propertyList) { + message << pair.first; + message << lineBreak; + message << pair.second; + } + + logInstance(tr("Instance property change"), string); + } +} + +void DebugView::instancesCompleted(const QVector<ModelNode> &completedNodeList) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + + foreach (const ModelNode &modelNode, completedNodeList) { + message << modelNode; + } + + logInstance(tr("Instance Completed"), string); + } +} + +void DebugView::instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + + foreach (const ModelNode &modelNode, informationChangeHash.keys()) { + message << modelNode; + message << informationChangeHash.value(modelNode); + } + + logInstance(tr("Instance Completed"), string); + } + +} + +void DebugView::instancesRenderImageChanged(const QVector<ModelNode> & /*nodeList*/) +{ +} + +void DebugView::instancesPreviewImageChanged(const QVector<ModelNode> & /*nodeList*/) +{ +} + +void DebugView::instancesChildrenChanged(const QVector<ModelNode> & /*nodeList*/) +{ +} + +void DebugView::customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + + message << view; + message << identifier; + foreach (const ModelNode &node, nodeList) { + message << node; + } + + foreach (const QVariant &variant, data) { + message << variant.toString(); + } + + log(tr("Custom Notification:"), string); + } +} + +void DebugView::nodeSourceChanged(const ModelNode &modelNode, const QString &newNodeSource) +{ + if (isDebugViewEnabled()) { + QTextStream message; + QString string; + message.setString(&string); + + message << modelNode; + message << newNodeSource; + + log(tr("Node Source Changed:"), string); + } +} + +void DebugView::log(const QString &title, const QString &message, bool highlight) +{ + m_debugViewWidget->addLogMessage(title, message, highlight); +} + +void DebugView::logInstance(const QString &title, const QString &message, bool highlight) +{ + m_debugViewWidget->addLogInstanceMessage(title, message, highlight); +} + +} // namesapce Internal + +} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/debugview/debugview.h b/src/plugins/qmldesigner/components/debugview/debugview.h new file mode 100644 index 0000000000000000000000000000000000000000..2783455f352b2e82b051999bc580d1852d1500c8 --- /dev/null +++ b/src/plugins/qmldesigner/components/debugview/debugview.h @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef DEBUGVIEW_H +#define DEBUGVIEW_H + +#include <qmlmodelview.h> + +namespace QmlDesigner { + +namespace Internal { + +class DebugViewWidget; + +class DebugView : public QmlModelView +{ + Q_OBJECT + +public: + DebugView(QObject *parent = 0); + ~DebugView(); + + // AbstractView + void modelAttached(Model *model) QTC_OVERRIDE; + void modelAboutToBeDetached(Model *model) QTC_OVERRIDE; + + void importsChanged(const QList<Import> &addedImports, const QList<Import> &removedImports) QTC_OVERRIDE; + + void nodeCreated(const ModelNode &createdNode) QTC_OVERRIDE; + void nodeAboutToBeRemoved(const ModelNode &removedNode) QTC_OVERRIDE; + void nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, + const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange) QTC_OVERRIDE; + void nodeIdChanged(const ModelNode& node, const QString& newId, const QString& oldId) QTC_OVERRIDE; + void propertiesAboutToBeRemoved(const QList<AbstractProperty>& propertyList) QTC_OVERRIDE; + void variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE; + void bindingPropertiesChanged(const QList<BindingProperty>& propertyList, PropertyChangeFlags propertyChange) QTC_OVERRIDE; + void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) QTC_OVERRIDE; + + void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, + const QList<ModelNode> &lastSelectedNodeList) QTC_OVERRIDE; + void scriptFunctionsChanged(const ModelNode &node, const QStringList &scriptFunctionList) QTC_OVERRIDE; + void propertiesRemoved(const QList<AbstractProperty> &propertyList) QTC_OVERRIDE; + + QWidget *widget() QTC_OVERRIDE; + + void auxiliaryDataChanged(const ModelNode &node, const PropertyName &name, const QVariant &data) QTC_OVERRIDE; + + void rewriterBeginTransaction() QTC_OVERRIDE; + void rewriterEndTransaction() QTC_OVERRIDE; + + WidgetInfo widgetInfo() QTC_OVERRIDE; + bool hasWidget() const QTC_OVERRIDE; + + void instancePropertyChange(const QList<QPair<ModelNode, PropertyName> > &propertyList) QTC_OVERRIDE; + void instancesCompleted(const QVector<ModelNode> &completedNodeList) QTC_OVERRIDE; + void instanceInformationsChange(const QMultiHash<ModelNode, InformationName> &informationChangeHash) QTC_OVERRIDE; + void instancesRenderImageChanged(const QVector<ModelNode> &nodeList) QTC_OVERRIDE; + void instancesPreviewImageChanged(const QVector<ModelNode> &nodeList) QTC_OVERRIDE; + void instancesChildrenChanged(const QVector<ModelNode> &nodeList) QTC_OVERRIDE; + void customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data) QTC_OVERRIDE; + + void nodeSourceChanged(const ModelNode &modelNode, const QString &newNodeSource) QTC_OVERRIDE; + +protected: + void log(const QString &title, const QString &message, bool highlight = false); + void logInstance(const QString &title, const QString &message, bool highlight = false); + +private: //variables + QWeakPointer<DebugViewWidget> m_debugViewWidget; +}; + +} // namespace Internal + +} // namespace QmlDesigner + +#endif DEBUGVIEW_H diff --git a/src/plugins/qmldesigner/components/debugview/debugview.pri b/src/plugins/qmldesigner/components/debugview/debugview.pri new file mode 100644 index 0000000000000000000000000000000000000000..59d2186abb9029e763c8c0beae05995e366754d7 --- /dev/null +++ b/src/plugins/qmldesigner/components/debugview/debugview.pri @@ -0,0 +1,12 @@ +VPATH += $$PWD +INCLUDEPATH += $$PWD +DEPENDPATH += $$PWD + +SOURCES += debugview.cpp \ + debugviewwidget.cpp + +HEADERS += debugview.h \ + debugviewwidget.h + +FORMS += debugviewwidget.ui + diff --git a/src/plugins/qmldesigner/components/debugview/debugviewwidget.cpp b/src/plugins/qmldesigner/components/debugview/debugviewwidget.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9269ad208284e34799fc363922afbfaf2e7744c3 --- /dev/null +++ b/src/plugins/qmldesigner/components/debugview/debugviewwidget.cpp @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "debugviewwidget.h" + + +#include <qmldesignerplugin.h> +#include <designersettings.h> + +namespace QmlDesigner { + +namespace Internal { + +DebugViewWidget::DebugViewWidget(QWidget *parent) : QWidget(parent) +{ + m_ui.setupUi(this); + connect(m_ui.enabledCheckBox, SIGNAL(toggled(bool)), this, SLOT(enabledCheckBoxToggled(bool))); +} + +void DebugViewWidget::addLogMessage(const QString &topic, const QString &message, bool highlight) +{ + if (highlight) { + m_ui.modelLog->appendHtml(QLatin1String("<b><font color=\"blue\">") + + topic + + QLatin1String("</b><br>") + + message); + + } else { + m_ui.modelLog->appendHtml(QLatin1String("<b>") + + topic + + QLatin1String("</b><br>") + + message); + } +} + +void DebugViewWidget::addErrorMessage(const QString &topic, const QString &message) +{ + m_ui.instanceErrorLog->appendHtml(QLatin1String("<b><font color=\"red\">") + + topic + + QLatin1String("</font></b><br>") + + message + ); +} + +void DebugViewWidget::addLogInstanceMessage(const QString &topic, const QString &message, bool highlight) +{ + if (highlight) { + m_ui.instanceLog->appendHtml(QLatin1String("<b><font color=\"blue\">") + + topic + + QLatin1String("</b><br>") + + message); + + } else { + m_ui.instanceLog->appendHtml(QLatin1String("<b>") + + topic + + QLatin1String("</b><br>") + + message); + } +} + +void DebugViewWidget::setDebugViewEnabled(bool b) +{ + if (m_ui.enabledCheckBox->isChecked() != b) + m_ui.enabledCheckBox->setChecked(b); +} + +void DebugViewWidget::enabledCheckBoxToggled(bool b) +{ + DesignerSettings settings = QmlDesignerPlugin::instance()->settings(); + settings.warningsInDesigner = b; + QmlDesignerPlugin::instance()->setSettings(settings); +} + +} //namespace Internal + +} //namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/debugview/debugviewwidget.h b/src/plugins/qmldesigner/components/debugview/debugviewwidget.h new file mode 100644 index 0000000000000000000000000000000000000000..d1b8756240fd40c57e5e74c94bbaffd557415900 --- /dev/null +++ b/src/plugins/qmldesigner/components/debugview/debugviewwidget.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef DEBUGVIEWWIDGET_H +#define DEBUGVIEWWIDGET_H + +#include <QWidget> + +#include "ui_debugviewwidget.h" + +namespace QmlDesigner { + +namespace Internal { + +class DebugViewWidget : public QWidget +{ + Q_OBJECT +public: + DebugViewWidget(QWidget *parent = 0); + + void addLogMessage(const QString &topic, const QString &message, bool highlight = false); + void addErrorMessage(const QString &topic, const QString &message); + void addLogInstanceMessage(const QString &topic, const QString &message, bool highlight = false); + + void setDebugViewEnabled(bool b); + +public slots: + void enabledCheckBoxToggled(bool b); + +private: + Ui::DebugViewWidget m_ui; +}; + +} //namespace Internal + +} //namespace QmlDesigner + +#endif //DEBUGVIEWWIDGET_H + diff --git a/src/plugins/qmldesigner/components/debugview/debugviewwidget.ui b/src/plugins/qmldesigner/components/debugview/debugviewwidget.ui new file mode 100644 index 0000000000000000000000000000000000000000..aea67645524a27800f8acbf379beb0b4063b5400 --- /dev/null +++ b/src/plugins/qmldesigner/components/debugview/debugviewwidget.ui @@ -0,0 +1,270 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>DebugViewWidget</class> + <widget class="QWidget" name="DebugViewWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>300</height> + </rect> + </property> + <property name="windowTitle"> + <string>Debug</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <property name="margin"> + <number>2</number> + </property> + <item row="0" column="0"> + <widget class="QTabWidget" name="instanceLog_2"> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="tab"> + <attribute name="title"> + <string>Model Log</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_2"> + <property name="margin"> + <number>2</number> + </property> + <property name="spacing"> + <number>2</number> + </property> + <item row="1" column="0"> + <widget class="QPlainTextEdit" name="modelLog"> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QFrame" name="frame_2"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="modelClear"> + <property name="text"> + <string>Clear</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_2"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>337</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_3"> + <attribute name="title"> + <string>Instance Notifications</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_4"> + <property name="margin"> + <number>2</number> + </property> + <property name="spacing"> + <number>2</number> + </property> + <item row="1" column="0"> + <widget class="QPlainTextEdit" name="instanceLog"> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QFrame" name="frame"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="instanceLogClear"> + <property name="text"> + <string>Clear</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="tab_2"> + <attribute name="title"> + <string>Instance Errors</string> + </attribute> + <layout class="QGridLayout" name="gridLayout_3"> + <property name="margin"> + <number>2</number> + </property> + <property name="spacing"> + <number>2</number> + </property> + <item row="1" column="0"> + <widget class="QPlainTextEdit" name="instanceErrorLog"> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="0"> + <widget class="QFrame" name="frame_3"> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="QToolButton" name="instanceErrorClear"> + <property name="text"> + <string>Clear</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer_3"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>337</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + <item row="1" column="0"> + <widget class="QCheckBox" name="enabledCheckBox"> + <property name="text"> + <string>Enabled</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>modelClear</sender> + <signal>clicked()</signal> + <receiver>modelLog</receiver> + <slot>clear()</slot> + <hints> + <hint type="sourcelabel"> + <x>25</x> + <y>38</y> + </hint> + <hint type="destinationlabel"> + <x>198</x> + <y>172</y> + </hint> + </hints> + </connection> + <connection> + <sender>instanceLogClear</sender> + <signal>clicked()</signal> + <receiver>instanceLog</receiver> + <slot>clear()</slot> + <hints> + <hint type="sourcelabel"> + <x>25</x> + <y>36</y> + </hint> + <hint type="destinationlabel"> + <x>198</x> + <y>170</y> + </hint> + </hints> + </connection> + <connection> + <sender>instanceErrorClear</sender> + <signal>clicked()</signal> + <receiver>instanceErrorLog</receiver> + <slot>clear()</slot> + <hints> + <hint type="sourcelabel"> + <x>25</x> + <y>38</y> + </hint> + <hint type="destinationlabel"> + <x>198</x> + <y>172</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src/plugins/qmldesigner/designercore/include/viewmanager.h b/src/plugins/qmldesigner/designercore/include/viewmanager.h index bb3b8b6d6ef035cd53af277a62e874a40a1cd91a..0afe9fc378ef2a63f82d946fc88e9464a30eed18 100644 --- a/src/plugins/qmldesigner/designercore/include/viewmanager.h +++ b/src/plugins/qmldesigner/designercore/include/viewmanager.h @@ -40,6 +40,7 @@ #include <formeditorview.h> #include <propertyeditor.h> #include <componentview.h> +#include <debugview.h> #include <model/viewlogger.h> namespace QmlDesigner { @@ -105,6 +106,7 @@ private: // functions private: // variables QmlModelState m_savedState; Internal::ViewLogger m_viewLogger; + Internal::DebugView m_debugView; ComponentView m_componentView; FormEditorView m_formEditorView; ItemLibraryView m_itemLibraryView; diff --git a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp index 76496d3ed8545d05a1ff249f54cfcd099859ac80..cdeca6a1ffb2d71e7907d96624c892854f964db5 100644 --- a/src/plugins/qmldesigner/designercore/model/viewmanager.cpp +++ b/src/plugins/qmldesigner/designercore/model/viewmanager.cpp @@ -7,6 +7,7 @@ #include "formeditorwidget.h" #include "toolbox.h" #include "designeractionmanager.h" +#include "designersettings.h" #include <qmldesigner/qmldesignerplugin.h> @@ -108,6 +109,8 @@ void ViewManager::detachViewsExceptRewriterAndComponetView() currentModel()->detachView(&m_itemLibraryView); currentModel()->detachView(&m_statesEditorView); currentModel()->detachView(&m_propertyEditorView); + if (m_debugView.isAttached()) + currentModel()->detachView(&m_debugView); currentModel()->setNodeInstanceView(0); static bool enableViewLogger = !qgetenv("QTC_ENABLE_QMLDESIGNER_LOGGER").isEmpty(); @@ -151,6 +154,8 @@ void ViewManager::attachViewsExceptRewriterAndComponetView() if (enableViewLogger) currentModel()->attachView(&m_viewLogger); + if (QmlDesignerPlugin::instance()->settings().enableDebugView) + currentModel()->attachView(&m_debugView); attachNodeInstanceView(); currentModel()->attachView(&m_formEditorView); currentModel()->attachView(&m_navigatorView); @@ -191,6 +196,8 @@ QList<WidgetInfo> ViewManager::widgetInfos() widgetInfoList.append(m_navigatorView.widgetInfo()); widgetInfoList.append(m_propertyEditorView.widgetInfo()); widgetInfoList.append(m_statesEditorView.widgetInfo()); + if (m_debugView.hasWidget()) + widgetInfoList.append(m_debugView.widgetInfo()); foreach (const QWeakPointer<AbstractView> &abstractView, m_additionalViews) { if (abstractView && abstractView->hasWidget()) diff --git a/src/plugins/qmldesigner/designersettings.cpp b/src/plugins/qmldesigner/designersettings.cpp index f1e30fb06a65803d5c0a304a0720e339a851fe95..2193729d5d528c50666f18ccda9459353e3edd8a 100644 --- a/src/plugins/qmldesigner/designersettings.cpp +++ b/src/plugins/qmldesigner/designersettings.cpp @@ -41,7 +41,9 @@ DesignerSettings::DesignerSettings() canvasWidth(10000), canvasHeight(10000), warningsInDesigner(true), - designerWarningsInEditor(false) + designerWarningsInEditor(false), + showDebugView(false), + enableDebugView(false) {} void DesignerSettings::fromSettings(QSettings *settings) @@ -61,6 +63,10 @@ void DesignerSettings::fromSettings(QSettings *settings) QLatin1String(QmlDesigner::Constants::QML_WARNIN_FOR_FEATURES_IN_DESIGNER_KEY), QVariant(true)).toBool(); designerWarningsInEditor = settings->value( QLatin1String(QmlDesigner::Constants::QML_WARNIN_FOR_DESIGNER_FEATURES_IN_EDITOR_KEY), QVariant(false)).toBool(); + showDebugView = settings->value( + QLatin1String(QmlDesigner::Constants::QML_SHOW_DEBUGVIEW), QVariant(false)).toBool(); + enableDebugView = settings->value( + QLatin1String(QmlDesigner::Constants::QML_ENABLE_DEBUGVIEW), QVariant(false)).toBool(); settings->endGroup(); settings->endGroup(); @@ -77,6 +83,8 @@ void DesignerSettings::toSettings(QSettings *settings) const settings->setValue(QLatin1String(QmlDesigner::Constants::QML_CANVASHEIGHT_KEY), canvasHeight); settings->setValue(QLatin1String(QmlDesigner::Constants::QML_WARNIN_FOR_FEATURES_IN_DESIGNER_KEY), warningsInDesigner); settings->setValue(QLatin1String(QmlDesigner::Constants::QML_WARNIN_FOR_DESIGNER_FEATURES_IN_EDITOR_KEY), designerWarningsInEditor); + settings->setValue(QLatin1String(QmlDesigner::Constants::QML_SHOW_DEBUGVIEW), showDebugView); + settings->setValue(QLatin1String(QmlDesigner::Constants::QML_ENABLE_DEBUGVIEW), enableDebugView); settings->endGroup(); settings->endGroup(); @@ -89,5 +97,7 @@ bool DesignerSettings::equals(const DesignerSettings &other) const && canvasWidth == other.canvasWidth && canvasHeight == other.canvasHeight && warningsInDesigner == other.warningsInDesigner - && designerWarningsInEditor == other.designerWarningsInEditor; + && designerWarningsInEditor == other.designerWarningsInEditor + && showDebugView == other.showDebugView + && enableDebugView == other.enableDebugView; } diff --git a/src/plugins/qmldesigner/designersettings.h b/src/plugins/qmldesigner/designersettings.h index 3a6e3a8e830f4cccb7140846f585032311a75619..7aaf30e5940df83038c4dce05d6343b6fa2f809c 100644 --- a/src/plugins/qmldesigner/designersettings.h +++ b/src/plugins/qmldesigner/designersettings.h @@ -54,6 +54,8 @@ public: int canvasHeight; bool warningsInDesigner; bool designerWarningsInEditor; + bool showDebugView; + bool enableDebugView; }; inline bool operator==(const DesignerSettings &s1, const DesignerSettings &s2) diff --git a/src/plugins/qmldesigner/qmldesignerconstants.h b/src/plugins/qmldesigner/qmldesignerconstants.h index 9853772cac322a20040ad33f2441ebf57ca12dcd..53a06252f607ad760bedf7995b5ee693614c2280 100644 --- a/src/plugins/qmldesigner/qmldesignerconstants.h +++ b/src/plugins/qmldesigner/qmldesignerconstants.h @@ -62,6 +62,8 @@ const char QML_CONTEXTPANE_KEY[] = "ContextPaneEnabled"; const char QML_CONTEXTPANEPIN_KEY[] = "ContextPanePinned"; const char QML_WARNIN_FOR_FEATURES_IN_DESIGNER_KEY[] = "WarnAboutQtQuickFeaturesInDesigner"; const char QML_WARNIN_FOR_DESIGNER_FEATURES_IN_EDITOR_KEY[] = "WarnAboutQtQuickDesignerFeaturesInCodeEditor"; +const char QML_SHOW_DEBUGVIEW[] = "ShowQtQuickDesignerDebugView"; +const char QML_ENABLE_DEBUGVIEW[] = "EnableQtQuickDesignerDebugView"; enum { QML_OPENDESIGNMODE_DEFAULT = 0 }; // 0 for text mode, 1 for design mode const char SETTINGS_CATEGORY_QML_ICON[] = ":/core/images/category_qml.png"; diff --git a/src/plugins/qmldesigner/qmldesignerplugin.pro b/src/plugins/qmldesigner/qmldesignerplugin.pro index a2066c59b77b1e6ed65bcec47dd9b6d36e5483ea..d86477188e0f4e18c119bc31a738e191ae45714b 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.pro +++ b/src/plugins/qmldesigner/qmldesignerplugin.pro @@ -19,6 +19,7 @@ include(components/navigator/navigator.pri) include(components/pluginmanager/pluginmanager.pri) include(components/stateseditor/stateseditor.pri) include(components/resources/resources.pri) +include(components/debugview/debugview.pri) include(qmldesignerplugin.pri) DEFINES -= QT_NO_CAST_FROM_ASCII diff --git a/src/plugins/qmldesigner/settingspage.cpp b/src/plugins/qmldesigner/settingspage.cpp index 0274cd7c74205ac98956444dc4ddc09820c8e793..4a1ded4092f738660ff753e221d4241116bfc5b8 100644 --- a/src/plugins/qmldesigner/settingspage.cpp +++ b/src/plugins/qmldesigner/settingspage.cpp @@ -44,29 +44,34 @@ SettingsPageWidget::SettingsPageWidget(QWidget *parent) : QWidget(parent) { m_ui.setupUi(this); + connect(m_ui.designerEnableDebuggerCheckBox, SIGNAL(toggled(bool)), this, SLOT(debugViewEnabledToggled(bool))); } DesignerSettings SettingsPageWidget::settings() const { - DesignerSettings ds; - ds.itemSpacing = m_ui.spinItemSpacing->value(); - ds.snapMargin = m_ui.spinSnapMargin->value(); - ds.canvasWidth = m_ui.spinCanvasWidth->value(); - ds.canvasHeight = m_ui.spinCanvasHeight->value(); - ds.warningsInDesigner = m_ui.designerWarningsCheckBox->isChecked(); - ds.designerWarningsInEditor = m_ui.designerWarningsInEditorCheckBox->isChecked(); + DesignerSettings designerSettings; + designerSettings.itemSpacing = m_ui.spinItemSpacing->value(); + designerSettings.snapMargin = m_ui.spinSnapMargin->value(); + designerSettings.canvasWidth = m_ui.spinCanvasWidth->value(); + designerSettings.canvasHeight = m_ui.spinCanvasHeight->value(); + designerSettings.warningsInDesigner = m_ui.designerWarningsCheckBox->isChecked(); + designerSettings.designerWarningsInEditor = m_ui.designerWarningsInEditorCheckBox->isChecked(); + designerSettings.showDebugView = m_ui.designerShowDebuggerCheckBox->isChecked(); + designerSettings.enableDebugView = m_ui.designerEnableDebuggerCheckBox->isChecked(); - return ds; + return designerSettings; } -void SettingsPageWidget::setSettings(const DesignerSettings &s) +void SettingsPageWidget::setSettings(const DesignerSettings &designerSettings) { - m_ui.spinItemSpacing->setValue(s.itemSpacing); - m_ui.spinSnapMargin->setValue(s.snapMargin); - m_ui.spinCanvasWidth->setValue(s.canvasWidth); - m_ui.spinCanvasHeight->setValue(s.canvasHeight); - m_ui.designerWarningsCheckBox->setChecked(s.warningsInDesigner); - m_ui.designerWarningsInEditorCheckBox->setChecked(s.designerWarningsInEditor); + m_ui.spinItemSpacing->setValue(designerSettings.itemSpacing); + m_ui.spinSnapMargin->setValue(designerSettings.snapMargin); + m_ui.spinCanvasWidth->setValue(designerSettings.canvasWidth); + m_ui.spinCanvasHeight->setValue(designerSettings.canvasHeight); + m_ui.designerWarningsCheckBox->setChecked(designerSettings.warningsInDesigner); + m_ui.designerWarningsInEditorCheckBox->setChecked(designerSettings.designerWarningsInEditor); + m_ui.designerShowDebuggerCheckBox->setChecked(designerSettings.showDebugView); + m_ui.designerEnableDebuggerCheckBox->setChecked(designerSettings.enableDebugView); } QString SettingsPageWidget::searchKeywords() const @@ -81,6 +86,12 @@ QString SettingsPageWidget::searchKeywords() const return rc; } +void SettingsPageWidget::debugViewEnabledToggled(bool b) +{ + if (b && ! m_ui.designerShowDebuggerCheckBox->isChecked()) + m_ui.designerShowDebuggerCheckBox->setChecked(true); +} + SettingsPage::SettingsPage() : m_widget(0) { diff --git a/src/plugins/qmldesigner/settingspage.h b/src/plugins/qmldesigner/settingspage.h index 032ad8ba65b6ef3338ecac106fe358427a134fa3..78a143a0689fdc575e4e66ecd3367767ee478274 100644 --- a/src/plugins/qmldesigner/settingspage.h +++ b/src/plugins/qmldesigner/settingspage.h @@ -55,10 +55,13 @@ public: explicit SettingsPageWidget(QWidget *parent = 0); DesignerSettings settings() const; - void setSettings(const DesignerSettings &); + void setSettings(const DesignerSettings &designerSettings); QString searchKeywords() const; +public slots: + void debugViewEnabledToggled(bool b); + private: Ui::SettingsPage m_ui; }; diff --git a/src/plugins/qmldesigner/settingspage.ui b/src/plugins/qmldesigner/settingspage.ui index 3bbf633e01983153d0b04dcaca4707194ee7f919..153d3230b4d536926e7b25e71e4eff96ad5ad563 100644 --- a/src/plugins/qmldesigner/settingspage.ui +++ b/src/plugins/qmldesigner/settingspage.ui @@ -6,14 +6,86 @@ <rect> <x>0</x> <y>0</y> - <width>574</width> - <height>472</height> + <width>684</width> + <height>607</height> </rect> </property> <property name="windowTitle"> <string>Form</string> </property> <layout class="QGridLayout" name="gridLayout"> + <item row="3" column="0"> + <widget class="QGroupBox" name="groupBox_4"> + <property name="title"> + <string>Debugging</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <layout class="QFormLayout" name="formLayout_4"> + <item row="0" column="1"> + <widget class="QCheckBox" name="designerShowDebuggerCheckBox"> + <property name="toolTip"> + <string>Warn about QML features which are not properly supported by the Qt Quick Designer</string> + </property> + <property name="text"> + <string>Show the debugging view</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QCheckBox" name="designerEnableDebuggerCheckBox"> + <property name="toolTip"> + <string>Also warn in the code editor about QML features which are not properly supported by the Qt Quick Designer</string> + </property> + <property name="text"> + <string>Enable the debugging view</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> + <item row="2" column="0"> + <widget class="QGroupBox" name="groupBox_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title"> + <string>Warnings</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <layout class="QFormLayout" name="formLayout_3"> + <item row="0" column="1"> + <widget class="QCheckBox" name="designerWarningsCheckBox"> + <property name="toolTip"> + <string>Warn about QML features which are not properly supported by the Qt Quick Designer</string> + </property> + <property name="text"> + <string>Warn about unsupported features in the Qt Quick Designer</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QCheckBox" name="designerWarningsInEditorCheckBox"> + <property name="toolTip"> + <string>Also warn in the code editor about QML features which are not properly supported by the Qt Quick Designer</string> + </property> + <property name="text"> + <string>Warn about unsupported features of Qt Quick Designer in the code editor</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </item> <item row="0" column="0"> <widget class="QGroupBox" name="groupBox_3"> <property name="title"> @@ -132,40 +204,7 @@ </layout> </widget> </item> - <item row="2" column="0"> - <widget class="QGroupBox" name="groupBox_2"> - <property name="title"> - <string>Warnings</string> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <item> - <layout class="QFormLayout" name="formLayout_3"> - <item row="0" column="1"> - <widget class="QCheckBox" name="designerWarningsCheckBox"> - <property name="toolTip"> - <string>Warn about QML features which are not properly supported by the Qt Quick Designer</string> - </property> - <property name="text"> - <string>Warn about unsupported features in the Qt Quick Designer</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QCheckBox" name="designerWarningsInEditorCheckBox"> - <property name="toolTip"> - <string>Also warn in the code editor about QML features which are not properly supported by the Qt Quick Designer</string> - </property> - <property name="text"> - <string>Warn about unsupported features of Qt Quick Designer in the code editor</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item row="3" column="1"> + <item row="4" column="0"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum>