QmlDesigner: Add Navigator tracing

Change-Id: I970a75012b5451a12214389ba01dfdb5ca2b5f59
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Marco Bubke
2025-05-30 12:20:19 +02:00
parent 4a81749343
commit 13e00f1e2b
13 changed files with 449 additions and 43 deletions

View File

@@ -40,7 +40,9 @@ env_with_default("QTC_ENABLE_FORM_EDITOR_TRACING" ENV_QTC_ENABLE_FORM_EDITOR_TRA
option(ENABLE_FORM_EDITOR_TRACING "Enable form editor tracing" ${ENV_QTC_ENABLE_FORM_EDITOR_TRACING}) option(ENABLE_FORM_EDITOR_TRACING "Enable form editor tracing" ${ENV_QTC_ENABLE_FORM_EDITOR_TRACING})
add_feature_info("Form editor tracing" ${ENABLE_FORM_EDITOR_TRACING} "") add_feature_info("Form editor tracing" ${ENABLE_FORM_EDITOR_TRACING} "")
env_with_default("QTC_ENABLE_NAVIGATOR_TRACING" ENV_QTC_ENABLE_NAVIGATOR_TRACING OFF)
option(ENABLE_NAVIGATOR_TRACING "Enable navigator tracing" ${ENV_QTC_ENABLE_NAVIGATOR_TRACING})
add_feature_info("Navigator tracing" ${ENABLE_NAVIGATOR_TRACING} "")
if(QDS_DESIGNVIEWER_USE_STAGING) if(QDS_DESIGNVIEWER_USE_STAGING)
add_definitions(-DQDS_DESIGNVIEWER_USE_STAGING) add_definitions(-DQDS_DESIGNVIEWER_USE_STAGING)
@@ -396,12 +398,15 @@ extend_qtc_plugin(QmlDesigner
extend_qtc_plugin(QmlDesigner extend_qtc_plugin(QmlDesigner
SOURCES_PREFIX components/navigator SOURCES_PREFIX components/navigator
PUBLIC_DEFINES
$<$<BOOL:${ENABLE_NAVIGATOR_TRACING}>:ENABLE_NAVIGATOR_TRACING>
SOURCES SOURCES
iconcheckboxitemdelegate.cpp iconcheckboxitemdelegate.h iconcheckboxitemdelegate.cpp iconcheckboxitemdelegate.h
nameitemdelegate.cpp nameitemdelegate.h nameitemdelegate.cpp nameitemdelegate.h
navigator.qrc navigator.qrc
navigatormodelinterface.h navigatormodelinterface.h
navigatorsearchwidget.cpp navigatorsearchwidget.h navigatorsearchwidget.cpp navigatorsearchwidget.h
navigatortracing.cpp navigatortracing.h
navigatortreemodel.cpp navigatortreemodel.h navigatortreemodel.cpp navigatortreemodel.h
navigatortreeview.cpp navigatortreeview.h navigatortreeview.cpp navigatortreeview.h
navigatorview.cpp navigatorview.h navigatorview.cpp navigatorview.h

View File

@@ -2,18 +2,24 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "choosefrompropertylistdialog.h" #include "choosefrompropertylistdialog.h"
#include "nodemetainfo.h"
#include "navigatortracing.h"
#include "ui_choosefrompropertylistdialog.h" #include "ui_choosefrompropertylistdialog.h"
#include <nodemetainfo.h>
#include <qmldesignerplugin.h> #include <qmldesignerplugin.h>
namespace QmlDesigner { namespace QmlDesigner {
static auto category = NavigatorTracing::category;
// This will filter and return possible properties that the given type can be bound to // This will filter and return possible properties that the given type can be bound to
ChooseFromPropertyListFilter::ChooseFromPropertyListFilter(const NodeMetaInfo &insertInfo, ChooseFromPropertyListFilter::ChooseFromPropertyListFilter(const NodeMetaInfo &insertInfo,
const NodeMetaInfo &parentInfo, const NodeMetaInfo &parentInfo,
bool breakOnFirst) bool breakOnFirst)
{ {
NanotraceHR::Tracer tracer{"choose from property list filter constructor", category()};
// TODO: Metainfo based matching system (QDS-6240) // TODO: Metainfo based matching system (QDS-6240)
// Fall back to a hardcoded list of supported cases: // Fall back to a hardcoded list of supported cases:
@@ -136,11 +142,15 @@ ChooseFromPropertyListDialog::ChooseFromPropertyListDialog(const QStringList &pr
ChooseFromPropertyListDialog::~ChooseFromPropertyListDialog() ChooseFromPropertyListDialog::~ChooseFromPropertyListDialog()
{ {
NanotraceHR::Tracer tracer{"choose from property list filter destructor", category()};
delete m_ui; delete m_ui;
} }
TypeName ChooseFromPropertyListDialog::selectedProperty() const TypeName ChooseFromPropertyListDialog::selectedProperty() const
{ {
NanotraceHR::Tracer tracer{"choose from property list filter selected property", category()};
return m_selectedProperty; return m_selectedProperty;
} }
@@ -149,6 +159,8 @@ TypeName ChooseFromPropertyListDialog::selectedProperty() const
ChooseFromPropertyListDialog *ChooseFromPropertyListDialog::createIfNeeded( ChooseFromPropertyListDialog *ChooseFromPropertyListDialog::createIfNeeded(
const ModelNode &targetNode, const ModelNode &newNode, QWidget *parent) const ModelNode &targetNode, const ModelNode &newNode, QWidget *parent)
{ {
NanotraceHR::Tracer tracer{"choose from property list filter create if needed", category()};
const NodeMetaInfo info = newNode.metaInfo(); const NodeMetaInfo info = newNode.metaInfo();
const NodeMetaInfo targetInfo = targetNode.metaInfo(); const NodeMetaInfo targetInfo = targetNode.metaInfo();
ChooseFromPropertyListFilter *filter = new ChooseFromPropertyListFilter(info, targetInfo); ChooseFromPropertyListFilter *filter = new ChooseFromPropertyListFilter(info, targetInfo);
@@ -163,6 +175,9 @@ ChooseFromPropertyListDialog *ChooseFromPropertyListDialog::createIfNeeded(
ChooseFromPropertyListDialog *ChooseFromPropertyListDialog::createIfNeeded( ChooseFromPropertyListDialog *ChooseFromPropertyListDialog::createIfNeeded(
const ModelNode &targetNode, const NodeMetaInfo &propertyType, QWidget *parent) const ModelNode &targetNode, const NodeMetaInfo &propertyType, QWidget *parent)
{ {
NanotraceHR::Tracer tracer{"choose from property list filter create if needed for type",
category()};
const NodeMetaInfo metaInfo = targetNode.metaInfo(); const NodeMetaInfo metaInfo = targetNode.metaInfo();
QStringList matchingNames; QStringList matchingNames;
for (const auto &property : metaInfo.properties()) { for (const auto &property : metaInfo.properties()) {
@@ -178,6 +193,8 @@ ChooseFromPropertyListDialog *ChooseFromPropertyListDialog::createIfNeeded(
void ChooseFromPropertyListDialog::fillList(const QStringList &propNames) void ChooseFromPropertyListDialog::fillList(const QStringList &propNames)
{ {
NanotraceHR::Tracer tracer{"choose from property list filter fill list", category()};
if (propNames.isEmpty()) if (propNames.isEmpty())
return; return;

View File

@@ -5,31 +5,38 @@
#include <qmath.h> #include <qmath.h>
#include "navigatorview.h" #include "navigatortracing.h"
#include "navigatortreeview.h"
#include "navigatortreemodel.h" #include "navigatortreemodel.h"
#include "qproxystyle.h" #include "navigatortreeview.h"
#include "navigatorview.h"
#include <theme.h> #include <theme.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <qproxystyle.h>
#include <QLineEdit> #include <QLineEdit>
#include <QPen>
#include <QPixmapCache>
#include <QMouseEvent> #include <QMouseEvent>
#include <QPainter> #include <QPainter>
#include <QPen>
#include <QPixmapCache>
namespace QmlDesigner { namespace QmlDesigner {
static auto category = NavigatorTracing::category;
IconCheckboxItemDelegate::IconCheckboxItemDelegate(QObject *parent, const QIcon &icon) IconCheckboxItemDelegate::IconCheckboxItemDelegate(QObject *parent, const QIcon &icon)
: QStyledItemDelegate(parent), : QStyledItemDelegate(parent),
m_icon(icon) m_icon(icon)
{} {
NanotraceHR::Tracer tracer{"icon checkbox item delegate constructor", category()};
}
QSize IconCheckboxItemDelegate::sizeHint(const QStyleOptionViewItem & /*option*/, QSize IconCheckboxItemDelegate::sizeHint(const QStyleOptionViewItem & /*option*/,
const QModelIndex & /*modelIndex*/) const const QModelIndex & /*modelIndex*/) const
{ {
NanotraceHR::Tracer tracer{"icon checkbox item delegate size hint", category()};
return {15, 20}; return {15, 20};
} }
@@ -63,6 +70,8 @@ void IconCheckboxItemDelegate::paint(QPainter *painter,
const QStyleOptionViewItem &styleOption, const QStyleOptionViewItem &styleOption,
const QModelIndex &modelIndex) const const QModelIndex &modelIndex) const
{ {
NanotraceHR::Tracer tracer{"icon checkbox item delegate paint", category()};
if (isReference(modelIndex)) if (isReference(modelIndex))
return; // Do not paint hover selection and icons for reference nodes return; // Do not paint hover selection and icons for reference nodes
@@ -109,12 +118,13 @@ void IconCheckboxItemDelegate::paint(QPainter *painter,
painter->restore(); painter->restore();
} }
bool IconCheckboxItemDelegate::editorEvent(QEvent *event, bool IconCheckboxItemDelegate::editorEvent(QEvent *event,
QAbstractItemModel *model, QAbstractItemModel *model,
const QStyleOptionViewItem &option, const QStyleOptionViewItem &option,
const QModelIndex &index) const QModelIndex &index)
{ {
NanotraceHR::Tracer tracer{"icon checkbox item delegate editor event", category()};
Q_ASSERT(event); Q_ASSERT(event);
Q_ASSERT(model); Q_ASSERT(model);
@@ -130,10 +140,9 @@ bool IconCheckboxItemDelegate::editorEvent(QEvent *event,
return false; return false;
// make sure that we have the right event type // make sure that we have the right event type
if ((event->type() == QEvent::MouseButtonRelease) if ((event->type() == QEvent::MouseButtonRelease) || (event->type() == QEvent::MouseButtonDblClick)
|| (event->type() == QEvent::MouseButtonDblClick)
|| (event->type() == QEvent::MouseButtonPress)) { || (event->type() == QEvent::MouseButtonPress)) {
QMouseEvent *me = static_cast<QMouseEvent*>(event); QMouseEvent *me = static_cast<QMouseEvent *>(event);
if (me->button() != Qt::LeftButton || !option.rect.contains(me->pos())) if (me->button() != Qt::LeftButton || !option.rect.contains(me->pos()))
return false; return false;
@@ -142,8 +151,8 @@ bool IconCheckboxItemDelegate::editorEvent(QEvent *event,
return true; return true;
} else if (event->type() == QEvent::KeyPress) { } else if (event->type() == QEvent::KeyPress) {
if (static_cast<QKeyEvent*>(event)->key() != Qt::Key_Space if (static_cast<QKeyEvent *>(event)->key() != Qt::Key_Space
&& static_cast<QKeyEvent*>(event)->key() != Qt::Key_Select) && static_cast<QKeyEvent *>(event)->key() != Qt::Key_Select)
return false; return false;
} else { } else {
return false; return false;
@@ -151,7 +160,7 @@ bool IconCheckboxItemDelegate::editorEvent(QEvent *event,
Qt::CheckState state = static_cast<Qt::CheckState>(value.toInt()); Qt::CheckState state = static_cast<Qt::CheckState>(value.toInt());
if (flags & Qt::ItemIsUserTristate) if (flags & Qt::ItemIsUserTristate)
state = ((Qt::CheckState)((state + 1) % 3)); state = ((Qt::CheckState) ((state + 1) % 3));
else else
state = (state == Qt::Checked) ? Qt::Unchecked : Qt::Checked; state = (state == Qt::Checked) ? Qt::Unchecked : Qt::Checked;
return model->setData(index, state, Qt::CheckStateRole); return model->setData(index, state, Qt::CheckStateRole);

View File

@@ -3,12 +3,13 @@
#include "nameitemdelegate.h" #include "nameitemdelegate.h"
#include <qmath.h>
#include "choosefrompropertylistdialog.h" #include "choosefrompropertylistdialog.h"
#include "navigatortracing.h"
#include "navigatortreeview.h" #include "navigatortreeview.h"
#include "navigatorview.h" #include "navigatorview.h"
#include "navigatorwidget.h" #include "navigatorwidget.h"
#include <dialogutils.h> #include <dialogutils.h>
#include <modelnodecontextmenu.h> #include <modelnodecontextmenu.h>
#include <modelutils.h> #include <modelutils.h>
@@ -20,15 +21,18 @@
#include <coreplugin/messagebox.h> #include <coreplugin/messagebox.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <qmath.h>
#include <QLineEdit> #include <QLineEdit>
#include <QPen>
#include <QPixmapCache>
#include <QMouseEvent> #include <QMouseEvent>
#include <QPainter> #include <QPainter>
#include <QPainterPath> #include <QPainterPath>
#include <QPen>
#include <QPixmapCache>
namespace QmlDesigner { namespace QmlDesigner {
static auto category = NavigatorTracing::category;
int NameItemDelegate::iconOffset = 0; int NameItemDelegate::iconOffset = 0;
static QPixmap generateWavyPixmap(qreal maxRadius, const QPen &pen) static QPixmap generateWavyPixmap(qreal maxRadius, const QPen &pen)
@@ -91,6 +95,7 @@ static QPixmap getWavyPixmap(qreal maxRadius, const QPen &pen)
NameItemDelegate::NameItemDelegate(QObject *parent) NameItemDelegate::NameItemDelegate(QObject *parent)
: QStyledItemDelegate(parent) : QStyledItemDelegate(parent)
{ {
NanotraceHR::Tracer tracer{"name item delegate constructor", category()};
} }
static int drawIcon(QPainter *painter, const QStyleOptionViewItem &styleOption, const QModelIndex &modelIndex) static int drawIcon(QPainter *painter, const QStyleOptionViewItem &styleOption, const QModelIndex &modelIndex)
@@ -194,6 +199,8 @@ static void openContextMenu(const QModelIndex &index, const QPoint &pos)
QSize NameItemDelegate::sizeHint(const QStyleOptionViewItem & /*option*/, QSize NameItemDelegate::sizeHint(const QStyleOptionViewItem & /*option*/,
const QModelIndex & /*modelIndex*/) const const QModelIndex & /*modelIndex*/) const
{ {
NanotraceHR::Tracer tracer{"name item delegate size hint", category()};
return {15, 20 + (2 * delegateMargin)}; return {15, 20 + (2 * delegateMargin)};
} }
@@ -201,6 +208,8 @@ void NameItemDelegate::paint(QPainter *painter,
const QStyleOptionViewItem &styleOption, const QStyleOptionViewItem &styleOption,
const QModelIndex &modelIndex) const const QModelIndex &modelIndex) const
{ {
NanotraceHR::Tracer tracer{"name item delegate paint", category()};
painter->save(); painter->save();
painter->setPen(Theme::getColor(Theme::Color::DSnavigatorText)); painter->setPen(Theme::getColor(Theme::Color::DSnavigatorText));
@@ -283,6 +292,8 @@ QWidget *NameItemDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &/*option*/, const QStyleOptionViewItem &/*option*/,
const QModelIndex &index) const const QModelIndex &index) const
{ {
NanotraceHR::Tracer tracer{"name item delegate create editor", category()};
if (!getModelNode(index).isValid()) if (!getModelNode(index).isValid())
return nullptr; return nullptr;
@@ -291,6 +302,8 @@ QWidget *NameItemDelegate::createEditor(QWidget *parent,
void NameItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const void NameItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{ {
NanotraceHR::Tracer tracer{"name item delegate set editor data", category()};
const ModelNode node = getModelNode(index); const ModelNode node = getModelNode(index);
const QString value = node.id(); const QString value = node.id();
@@ -302,6 +315,8 @@ void NameItemDelegate::setModelData(QWidget *editor,
[[maybe_unused]] QAbstractItemModel *model, [[maybe_unused]] QAbstractItemModel *model,
const QModelIndex &index) const const QModelIndex &index) const
{ {
NanotraceHR::Tracer tracer{"name item delegate set model data", category()};
auto lineEdit = static_cast<QLineEdit*>(editor); auto lineEdit = static_cast<QLineEdit*>(editor);
setId(index, lineEdit->text()); setId(index, lineEdit->text());
lineEdit->clearFocus(); lineEdit->clearFocus();
@@ -309,6 +324,8 @@ void NameItemDelegate::setModelData(QWidget *editor,
bool NameItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *, const QStyleOptionViewItem &, const QModelIndex &index) bool NameItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *, const QStyleOptionViewItem &, const QModelIndex &index)
{ {
NanotraceHR::Tracer tracer{"name item delegate editor event", category()};
if (event->type() == QEvent::MouseButtonRelease) { if (event->type() == QEvent::MouseButtonRelease) {
auto mouseEvent = static_cast<QMouseEvent *>(event); auto mouseEvent = static_cast<QMouseEvent *>(event);
if (mouseEvent->button() == Qt::RightButton) { if (mouseEvent->button() == Qt::RightButton) {
@@ -324,6 +341,8 @@ void NameItemDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QStyleOptionViewItem &option,
const QModelIndex &/*index*/) const const QModelIndex &/*index*/) const
{ {
NanotraceHR::Tracer tracer{"name item delegate update editor geometry", category()};
auto lineEdit = static_cast<QLineEdit*>(editor); auto lineEdit = static_cast<QLineEdit*>(editor);
lineEdit->setTextMargins(0, 0, 0, 2); lineEdit->setTextMargins(0, 0, 0, 2);
// + 2 is shifting the QLineEdit to the left so it will align with the text when activated // + 2 is shifting the QLineEdit to the left so it will align with the text when activated

View File

@@ -3,6 +3,8 @@
#include "navigatorsearchwidget.h" #include "navigatorsearchwidget.h"
#include "navigatortracing.h"
#include <utils/stylehelper.h> #include <utils/stylehelper.h>
#include <theme.h> #include <theme.h>
@@ -15,9 +17,13 @@
namespace QmlDesigner { namespace QmlDesigner {
static auto category = NavigatorTracing::category;
LineEdit::LineEdit(QWidget *parent) LineEdit::LineEdit(QWidget *parent)
: QLineEdit(parent) : QLineEdit(parent)
{ {
NanotraceHR::Tracer tracer{"line edit constructor", category()};
clearButton = new QToolButton(this); clearButton = new QToolButton(this);
const QString fontName = "qtds_propertyIconFont.ttf"; const QString fontName = "qtds_propertyIconFont.ttf";
@@ -74,6 +80,8 @@ LineEdit::LineEdit(QWidget *parent)
void LineEdit::resizeEvent([[maybe_unused]] QResizeEvent *event) void LineEdit::resizeEvent([[maybe_unused]] QResizeEvent *event)
{ {
NanotraceHR::Tracer tracer{"line edit resize event", category()};
QSize hint = clearButton->sizeHint(); QSize hint = clearButton->sizeHint();
int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
@@ -83,6 +91,8 @@ void LineEdit::resizeEvent([[maybe_unused]] QResizeEvent *event)
void LineEdit::keyPressEvent(QKeyEvent *event) void LineEdit::keyPressEvent(QKeyEvent *event)
{ {
NanotraceHR::Tracer tracer{"line edit key press event", category()};
if (event->key() == Qt::Key_Escape && event->modifiers() == Qt::NoModifier) { if (event->key() == Qt::Key_Escape && event->modifiers() == Qt::NoModifier) {
clear(); clear();
event->accept(); event->accept();
@@ -93,6 +103,8 @@ void LineEdit::keyPressEvent(QKeyEvent *event)
void LineEdit::paintEvent(QPaintEvent *event) void LineEdit::paintEvent(QPaintEvent *event)
{ {
NanotraceHR::Tracer tracer{"line edit paint event", category()};
if (text().isEmpty()) { if (text().isEmpty()) {
QPalette p(palette()); QPalette p(palette());
p.setColor(QPalette::Active, p.setColor(QPalette::Active,
@@ -108,12 +120,16 @@ void LineEdit::paintEvent(QPaintEvent *event)
void LineEdit::updateClearButton(const QString& text) void LineEdit::updateClearButton(const QString& text)
{ {
NanotraceHR::Tracer tracer{"line edit update clear button", category()};
clearButton->setVisible(!text.isEmpty()); clearButton->setVisible(!text.isEmpty());
} }
NavigatorSearchWidget::NavigatorSearchWidget(QWidget *parent) NavigatorSearchWidget::NavigatorSearchWidget(QWidget *parent)
: QWidget(parent) : QWidget(parent)
{ {
NanotraceHR::Tracer tracer{"line edit constructor", category()};
auto layout = new QBoxLayout(QBoxLayout::LeftToRight); auto layout = new QBoxLayout(QBoxLayout::LeftToRight);
layout->setSpacing(0); layout->setSpacing(0);
layout->setContentsMargins(10, 6, 10, 6); layout->setContentsMargins(10, 6, 10, 6);
@@ -136,6 +152,8 @@ NavigatorSearchWidget::NavigatorSearchWidget(QWidget *parent)
void NavigatorSearchWidget::clear() void NavigatorSearchWidget::clear()
{ {
NanotraceHR::Tracer tracer{"line edit clear", category()};
m_textField->clear(); m_textField->clear();
} }

View File

@@ -0,0 +1,26 @@
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "navigatortracing.h"
#include <tracing/qmldesignertracing.h>
#include <sqlitebasestatement.h>
namespace QmlDesigner::NavigatorTracing {
using namespace NanotraceHR::Literals;
namespace {
thread_local Category category_{"model",
Tracing::eventQueueWithStringArguments(),
Tracing::eventQueueWithoutArguments(),
category};
} // namespace
Category &category()
{
return category_;
}
} // namespace QmlDesigner::NavigatorTracing

View File

@@ -0,0 +1,26 @@
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <qmldesignercomponents_global.h>
#include <nanotrace/nanotracehr.h>
#pragma once
namespace QmlDesigner::NavigatorTracing {
constexpr NanotraceHR::Tracing tracingStatus()
{
#ifdef ENABLE_NAVIGATOR_TRACING
return NanotraceHR::Tracing::IsEnabled;
#else
return NanotraceHR::Tracing::IsDisabled;
#endif
}
using Category = NanotraceHR::StringViewWithStringArgumentsCategory<tracingStatus()>;
using SourceLocation = Category::SourceLocation;
[[gnu::pure]] QMLDESIGNERCOMPONENTS_EXPORT Category &category();
} // namespace QmlDesigner::NavigatorTracing

View File

@@ -3,13 +3,15 @@
#include "navigatortreemodel.h" #include "navigatortreemodel.h"
#include "assetslibrarywidget.h"
#include "choosefrompropertylistdialog.h" #include "choosefrompropertylistdialog.h"
#include "createtexture.h" #include "navigatortracing.h"
#include "navigatorview.h" #include "navigatorview.h"
#include "navigatorwidget.h" #include "navigatorwidget.h"
#include "qmldesignerconstants.h"
#include "qmldesignerplugin.h" #include <assetslibrarywidget.h>
#include <createtexture.h>
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h>
#include <qmldesignertr.h> #include <qmldesignertr.h>
#include <abstractview.h> #include <abstractview.h>
@@ -55,6 +57,8 @@
namespace QmlDesigner { namespace QmlDesigner {
static auto category = NavigatorTracing::category;
static QList<ModelNode> modelNodesFromMimeData(const QMimeData *mimeData, AbstractView *view) static QList<ModelNode> modelNodesFromMimeData(const QMimeData *mimeData, AbstractView *view)
{ {
QByteArray encodedModelNodeData = mimeData->data(Constants::MIME_TYPE_MODELNODE_LIST); QByteArray encodedModelNodeData = mimeData->data(Constants::MIME_TYPE_MODELNODE_LIST);
@@ -223,13 +227,20 @@ static QColor nodeColor(const ModelNode &node)
NavigatorTreeModel::NavigatorTreeModel(QObject *parent) NavigatorTreeModel::NavigatorTreeModel(QObject *parent)
: QAbstractItemModel(parent) : QAbstractItemModel(parent)
{ {
NanotraceHR::Tracer tracer{"navigator tree model constructor", category()};
m_actionManager = &QmlDesignerPlugin::instance()->viewManager().designerActionManager(); m_actionManager = &QmlDesignerPlugin::instance()->viewManager().designerActionManager();
} }
NavigatorTreeModel::~NavigatorTreeModel() = default; NavigatorTreeModel::~NavigatorTreeModel()
{
NanotraceHR::Tracer tracer{"navigator tree model destructor", category()};
}
QVariant NavigatorTreeModel::data(const QModelIndex &index, int role) const QVariant NavigatorTreeModel::data(const QModelIndex &index, int role) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model data", category()};
if (!index.isValid()) if (!index.isValid())
return QVariant(); return QVariant();
@@ -309,6 +320,8 @@ QVariant NavigatorTreeModel::data(const QModelIndex &index, int role) const
Qt::ItemFlags NavigatorTreeModel::flags(const QModelIndex &index) const Qt::ItemFlags NavigatorTreeModel::flags(const QModelIndex &index) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model flags", category()};
if (modelNodeForIndex(index).isRootNode()) { if (modelNodeForIndex(index).isRootNode()) {
Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled; Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDropEnabled;
if (index.column() == ColumnType::Name) if (index.column() == ColumnType::Name)
@@ -353,6 +366,8 @@ static void appendForcedNodes(const NodeListProperty &property, QList<ModelNode>
QList<ModelNode> NavigatorTreeModel::filteredList(const NodeListProperty &property, bool filter, bool reverseOrder) const QList<ModelNode> NavigatorTreeModel::filteredList(const NodeListProperty &property, bool filter, bool reverseOrder) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model filtered list", category()};
auto it = m_rowCache.find(property.parentModelNode()); auto it = m_rowCache.find(property.parentModelNode());
if (it != m_rowCache.end()) if (it != m_rowCache.end())
@@ -395,6 +410,8 @@ QList<ModelNode> NavigatorTreeModel::filteredList(const NodeListProperty &proper
QModelIndex NavigatorTreeModel::index(int row, int column, const QModelIndex &parent) const QModelIndex NavigatorTreeModel::index(int row, int column, const QModelIndex &parent) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model index", category()};
if (!m_view->model()) if (!m_view->model())
return {}; return {};
@@ -432,11 +449,15 @@ QModelIndex NavigatorTreeModel::index(int row, int column, const QModelIndex &pa
QVariant NavigatorTreeModel::headerData(int, Qt::Orientation, int) const QVariant NavigatorTreeModel::headerData(int, Qt::Orientation, int) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model header data", category()};
return QVariant(); return QVariant();
} }
QModelIndex NavigatorTreeModel::parent(const QModelIndex &index) const QModelIndex NavigatorTreeModel::parent(const QModelIndex &index) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model parent", category()};
if (!index.isValid()) if (!index.isValid())
return {}; return {};
@@ -467,6 +488,8 @@ QModelIndex NavigatorTreeModel::parent(const QModelIndex &index) const
int NavigatorTreeModel::rowCount(const QModelIndex &parent) const int NavigatorTreeModel::rowCount(const QModelIndex &parent) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model row count", category()};
if (!m_view->isAttached() || parent.column() > 0 || isReference(parent)) if (!m_view->isAttached() || parent.column() > 0 || isReference(parent))
return 0; return 0;
@@ -491,6 +514,8 @@ int NavigatorTreeModel::rowCount(const QModelIndex &parent) const
int NavigatorTreeModel::columnCount(const QModelIndex &parent) const int NavigatorTreeModel::columnCount(const QModelIndex &parent) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model column count", category()};
if (parent.column() > 0) if (parent.column() > 0)
return 0; return 0;
@@ -499,6 +524,8 @@ int NavigatorTreeModel::columnCount(const QModelIndex &parent) const
ModelNode NavigatorTreeModel::modelNodeForIndex(const QModelIndex &index) const ModelNode NavigatorTreeModel::modelNodeForIndex(const QModelIndex &index) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model model node for index", category()};
if (!index.isValid()) if (!index.isValid())
return ModelNode(); return ModelNode();
@@ -513,6 +540,8 @@ ModelNode NavigatorTreeModel::modelNodeForIndex(const QModelIndex &index) const
bool NavigatorTreeModel::hasModelNodeForIndex(const QModelIndex &index) const bool NavigatorTreeModel::hasModelNodeForIndex(const QModelIndex &index) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model has model node for index", category()};
if (!index.isValid()) if (!index.isValid())
return false; return false;
@@ -521,11 +550,15 @@ bool NavigatorTreeModel::hasModelNodeForIndex(const QModelIndex &index) const
void NavigatorTreeModel::setView(NavigatorView *view) void NavigatorTreeModel::setView(NavigatorView *view)
{ {
NanotraceHR::Tracer tracer{"navigator tree model set view", category()};
m_view = view; m_view = view;
} }
QStringList NavigatorTreeModel::mimeTypes() const QStringList NavigatorTreeModel::mimeTypes() const
{ {
NanotraceHR::Tracer tracer{"navigator tree model mime types", category()};
static const QStringList types({Constants::MIME_TYPE_MODELNODE_LIST, static const QStringList types({Constants::MIME_TYPE_MODELNODE_LIST,
Constants::MIME_TYPE_ITEM_LIBRARY_INFO, Constants::MIME_TYPE_ITEM_LIBRARY_INFO,
Constants::MIME_TYPE_TEXTURE, Constants::MIME_TYPE_TEXTURE,
@@ -540,6 +573,8 @@ QStringList NavigatorTreeModel::mimeTypes() const
QMimeData *NavigatorTreeModel::mimeData(const QModelIndexList &modelIndexList) const QMimeData *NavigatorTreeModel::mimeData(const QModelIndexList &modelIndexList) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model mime data", category()};
auto mimeData = new QMimeData(); auto mimeData = new QMimeData();
QByteArray encodedModelNodeData; QByteArray encodedModelNodeData;
@@ -563,11 +598,15 @@ QMimeData *NavigatorTreeModel::mimeData(const QModelIndexList &modelIndexList) c
QModelIndex NavigatorTreeModel::indexForModelNode(const ModelNode &node) const QModelIndex NavigatorTreeModel::indexForModelNode(const ModelNode &node) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model index for model node", category()};
return m_nodeIndexHash.value(node); return m_nodeIndexHash.value(node);
} }
QModelIndex NavigatorTreeModel::createIndexFromModelNode(int row, int column, const ModelNode &modelNode) const QModelIndex NavigatorTreeModel::createIndexFromModelNode(int row, int column, const ModelNode &modelNode) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model create index from model node", category()};
QModelIndex index = createIndex(row, column, modelNode.internalId()); QModelIndex index = createIndex(row, column, modelNode.internalId());
if (column == 0) if (column == 0)
m_nodeIndexHash.insert(modelNode, index); m_nodeIndexHash.insert(modelNode, index);
@@ -615,6 +654,8 @@ bool NavigatorTreeModel::dropMimeData(const QMimeData *mimeData,
int /*columnNumber*/, int /*columnNumber*/,
const QModelIndex &dropModelIndex) const QModelIndex &dropModelIndex)
{ {
NanotraceHR::Tracer tracer{"navigator tree model drop mime data", category()};
if (action == Qt::IgnoreAction) if (action == Qt::IgnoreAction)
return true; return true;
@@ -777,6 +818,8 @@ void NavigatorTreeModel::handleInternalDrop(const QMimeData *mimeData,
int rowNumber, int rowNumber,
const QModelIndex &dropModelIndex) const QModelIndex &dropModelIndex)
{ {
NanotraceHR::Tracer tracer{"navigator tree model handle internal drop", category()};
QTC_ASSERT(m_view, return); QTC_ASSERT(m_view, return);
const QModelIndex rowModelIndex = dropModelIndex.sibling(dropModelIndex.row(), 0); const QModelIndex rowModelIndex = dropModelIndex.sibling(dropModelIndex.row(), 0);
int targetRowNumber = rowNumber; int targetRowNumber = rowNumber;
@@ -804,6 +847,8 @@ static ItemLibraryEntry createItemLibraryEntryFromMimeData(const QByteArray &dat
void NavigatorTreeModel::handleItemLibraryItemDrop(const QMimeData *mimeData, int rowNumber, const QModelIndex &dropModelIndex) void NavigatorTreeModel::handleItemLibraryItemDrop(const QMimeData *mimeData, int rowNumber, const QModelIndex &dropModelIndex)
{ {
NanotraceHR::Tracer tracer{"navigator tree model handle item library item drop", category()};
QTC_ASSERT(m_view, return); QTC_ASSERT(m_view, return);
const QModelIndex rowModelIndex = dropModelIndex.sibling(dropModelIndex.row(), 0); const QModelIndex rowModelIndex = dropModelIndex.sibling(dropModelIndex.row(), 0);
@@ -915,6 +960,8 @@ void NavigatorTreeModel::handleItemLibraryItemDrop(const QMimeData *mimeData, in
void NavigatorTreeModel::addImport(const QString &importName) void NavigatorTreeModel::addImport(const QString &importName)
{ {
NanotraceHR::Tracer tracer{"navigator tree model add import", category()};
#ifdef QDS_USE_PROJECTSTORAGE #ifdef QDS_USE_PROJECTSTORAGE
Import import = Import::createLibraryImport(importName); Import import = Import::createLibraryImport(importName);
m_view->model()->changeImports({import}, {}); m_view->model()->changeImports({import}, {});
@@ -927,6 +974,8 @@ void NavigatorTreeModel::addImport(const QString &importName)
bool QmlDesigner::NavigatorTreeModel::moveNodeToParent(const NodeAbstractProperty &targetProperty, bool QmlDesigner::NavigatorTreeModel::moveNodeToParent(const NodeAbstractProperty &targetProperty,
const ModelNode &node) const ModelNode &node)
{ {
NanotraceHR::Tracer tracer{"navigator tree model move node to parent", category()};
NodeAbstractProperty parentProp = targetProperty.parentProperty(); NodeAbstractProperty parentProp = targetProperty.parentProperty();
if (parentProp.isValid()) { if (parentProp.isValid()) {
ModelNode targetModel = parentProp.parentModelNode(); ModelNode targetModel = parentProp.parentModelNode();
@@ -938,6 +987,8 @@ bool QmlDesigner::NavigatorTreeModel::moveNodeToParent(const NodeAbstractPropert
QIcon NavigatorTreeModel::colorizeIcon(const QIcon &icon, const QColor &color) const QIcon NavigatorTreeModel::colorizeIcon(const QIcon &icon, const QColor &color) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model colorize icon", category()};
if (!color.isValid()) if (!color.isValid())
return icon; return icon;
@@ -966,6 +1017,8 @@ void NavigatorTreeModel::moveNodesInteractive(NodeAbstractProperty &parentProper
int targetIndex, int targetIndex,
bool executeInTransaction) bool executeInTransaction)
{ {
NanotraceHR::Tracer tracer{"navigator tree model move nodes interactive", category()};
QTC_ASSERT(m_view, return); QTC_ASSERT(m_view, return);
auto doMoveNodesInteractive = [&parentProperty, modelNodes, targetIndex]() { auto doMoveNodesInteractive = [&parentProperty, modelNodes, targetIndex]() {
@@ -1024,16 +1077,22 @@ void NavigatorTreeModel::moveNodesInteractive(NodeAbstractProperty &parentProper
Qt::DropActions NavigatorTreeModel::supportedDropActions() const Qt::DropActions NavigatorTreeModel::supportedDropActions() const
{ {
NanotraceHR::Tracer tracer{"navigator tree model supported drop actions", category()};
return Qt::LinkAction | Qt::MoveAction; return Qt::LinkAction | Qt::MoveAction;
} }
Qt::DropActions NavigatorTreeModel::supportedDragActions() const Qt::DropActions NavigatorTreeModel::supportedDragActions() const
{ {
NanotraceHR::Tracer tracer{"navigator tree model supported drag actions", category()};
return Qt::LinkAction; return Qt::LinkAction;
} }
bool NavigatorTreeModel::setData(const QModelIndex &index, const QVariant &value, int role) bool NavigatorTreeModel::setData(const QModelIndex &index, const QVariant &value, int role)
{ {
NanotraceHR::Tracer tracer{"navigator tree model set data", category()};
QTC_ASSERT(m_view, return false); QTC_ASSERT(m_view, return false);
ModelNode modelNode = modelNodeForIndex(index); ModelNode modelNode = modelNodeForIndex(index);
if (index.column() == ColumnType::Alias && role == Qt::CheckStateRole) { if (index.column() == ColumnType::Alias && role == Qt::CheckStateRole) {
@@ -1053,6 +1112,8 @@ bool NavigatorTreeModel::setData(const QModelIndex &index, const QVariant &value
void NavigatorTreeModel::notifyDataChanged(const ModelNode &modelNode) void NavigatorTreeModel::notifyDataChanged(const ModelNode &modelNode)
{ {
NanotraceHR::Tracer tracer{"navigator tree model notify data changed", category()};
const auto emitDataChanged = [this](const QModelIndex &index) { const auto emitDataChanged = [this](const QModelIndex &index) {
const QAbstractItemModel *model = index.model(); const QAbstractItemModel *model = index.model();
const QModelIndex sibling = model ? model->sibling(index.row(), ColumnType::Count - 1, index) const QModelIndex sibling = model ? model->sibling(index.row(), ColumnType::Count - 1, index)
@@ -1081,12 +1142,16 @@ static QList<ModelNode> collectParents(const QList<ModelNode> &modelNodes)
QList<QPersistentModelIndex> NavigatorTreeModel::nodesToPersistentIndex(const QList<ModelNode> &modelNodes) QList<QPersistentModelIndex> NavigatorTreeModel::nodesToPersistentIndex(const QList<ModelNode> &modelNodes)
{ {
NanotraceHR::Tracer tracer{"navigator tree model nodes to persistent index", category()};
return ::Utils::transform<QList<QPersistentModelIndex>>( return ::Utils::transform<QList<QPersistentModelIndex>>(
modelNodes, std::bind_front(&NavigatorTreeModel::indexForModelNode, this)); modelNodes, std::bind_front(&NavigatorTreeModel::indexForModelNode, this));
} }
void NavigatorTreeModel::notifyModelNodesRemoved(const QList<ModelNode> &modelNodes) void NavigatorTreeModel::notifyModelNodesRemoved(const QList<ModelNode> &modelNodes)
{ {
NanotraceHR::Tracer tracer{"navigator tree model notify model nodes removed", category()};
for (const ModelNode &modelNode : modelNodes) for (const ModelNode &modelNode : modelNodes)
m_referenceIndexHash.remove(modelNode); m_referenceIndexHash.remove(modelNode);
@@ -1099,6 +1164,8 @@ void NavigatorTreeModel::notifyModelNodesRemoved(const QList<ModelNode> &modelNo
void NavigatorTreeModel::notifyModelNodesInserted(const QList<ModelNode> &modelNodes) void NavigatorTreeModel::notifyModelNodesInserted(const QList<ModelNode> &modelNodes)
{ {
NanotraceHR::Tracer tracer{"navigator tree model notify model nodes inserted", category()};
m_rowReferenceCache.clear(); m_rowReferenceCache.clear();
m_rowCache.clear(); m_rowCache.clear();
QList<QPersistentModelIndex> indexes = nodesToPersistentIndex(collectParents(modelNodes)); QList<QPersistentModelIndex> indexes = nodesToPersistentIndex(collectParents(modelNodes));
@@ -1108,6 +1175,8 @@ void NavigatorTreeModel::notifyModelNodesInserted(const QList<ModelNode> &modelN
void NavigatorTreeModel::notifyModelNodesMoved(const QList<ModelNode> &modelNodes) void NavigatorTreeModel::notifyModelNodesMoved(const QList<ModelNode> &modelNodes)
{ {
NanotraceHR::Tracer tracer{"navigator tree model notify model nodes moved", category()};
m_rowReferenceCache.clear(); m_rowReferenceCache.clear();
m_rowCache.clear(); m_rowCache.clear();
QList<QPersistentModelIndex> indexes = nodesToPersistentIndex(collectParents(modelNodes)); QList<QPersistentModelIndex> indexes = nodesToPersistentIndex(collectParents(modelNodes));
@@ -1117,6 +1186,9 @@ void NavigatorTreeModel::notifyModelNodesMoved(const QList<ModelNode> &modelNode
void NavigatorTreeModel::notifyModelReferenceNodesUpdated(const QList<ModelNode> &modelNodes) void NavigatorTreeModel::notifyModelReferenceNodesUpdated(const QList<ModelNode> &modelNodes)
{ {
NanotraceHR::Tracer tracer{"navigator tree model notify model reference nodes updated",
category()};
for (const ModelNode &modelNode : modelNodes) for (const ModelNode &modelNode : modelNodes)
m_rowReferenceCache.remove(modelNode); m_rowReferenceCache.remove(modelNode);
@@ -1127,11 +1199,15 @@ void NavigatorTreeModel::notifyModelReferenceNodesUpdated(const QList<ModelNode>
void NavigatorTreeModel::notifyIconsChanged() void NavigatorTreeModel::notifyIconsChanged()
{ {
NanotraceHR::Tracer tracer{"navigator tree model notify icons changed", category()};
emit dataChanged(index(0, 0), index(rowCount(), 0), {Qt::DecorationRole}); emit dataChanged(index(0, 0), index(rowCount(), 0), {Qt::DecorationRole});
} }
void NavigatorTreeModel::showReferences(bool show) void NavigatorTreeModel::showReferences(bool show)
{ {
NanotraceHR::Tracer tracer{"navigator tree model show references", category()};
m_showReferenceItems = show; m_showReferenceItems = show;
m_rowCache.clear(); m_rowCache.clear();
resetModel(); resetModel();
@@ -1139,6 +1215,8 @@ void NavigatorTreeModel::showReferences(bool show)
void NavigatorTreeModel::setFilter(bool showOnlyVisibleItems) void NavigatorTreeModel::setFilter(bool showOnlyVisibleItems)
{ {
NanotraceHR::Tracer tracer{"navigator tree model set filter", category()};
m_showOnlyVisibleItems = showOnlyVisibleItems; m_showOnlyVisibleItems = showOnlyVisibleItems;
m_rowCache.clear(); m_rowCache.clear();
resetModel(); resetModel();
@@ -1146,6 +1224,8 @@ void NavigatorTreeModel::setFilter(bool showOnlyVisibleItems)
void NavigatorTreeModel::setNameFilter(const QString &filter) void NavigatorTreeModel::setNameFilter(const QString &filter)
{ {
NanotraceHR::Tracer tracer{"navigator tree model set name filter", category()};
m_nameFilter = filter; m_nameFilter = filter;
m_rowCache.clear(); m_rowCache.clear();
@@ -1175,6 +1255,8 @@ void NavigatorTreeModel::setNameFilter(const QString &filter)
void NavigatorTreeModel::setOrder(bool reverseItemOrder) void NavigatorTreeModel::setOrder(bool reverseItemOrder)
{ {
NanotraceHR::Tracer tracer{"navigator tree model set order", category()};
m_reverseItemOrder = reverseItemOrder; m_reverseItemOrder = reverseItemOrder;
m_rowCache.clear(); m_rowCache.clear();
resetModel(); resetModel();
@@ -1182,6 +1264,8 @@ void NavigatorTreeModel::setOrder(bool reverseItemOrder)
void NavigatorTreeModel::resetModel() void NavigatorTreeModel::resetModel()
{ {
NanotraceHR::Tracer tracer{"navigator tree model reset model", category()};
beginResetModel(); beginResetModel();
m_rowCache.clear(); m_rowCache.clear();
m_nodeIndexHash.clear(); m_nodeIndexHash.clear();
@@ -1192,16 +1276,22 @@ void NavigatorTreeModel::resetModel()
void NavigatorTreeModel::updateToolTipPixmap(const ModelNode &node, const QPixmap &pixmap) void NavigatorTreeModel::updateToolTipPixmap(const ModelNode &node, const QPixmap &pixmap)
{ {
NanotraceHR::Tracer tracer{"navigator tree model update tool tip pixmap", category()};
emit toolTipPixmapUpdated(node.id(), pixmap); emit toolTipPixmapUpdated(node.id(), pixmap);
} }
bool NavigatorTreeModel::isReferenceNodesVisible() const bool NavigatorTreeModel::isReferenceNodesVisible() const
{ {
NanotraceHR::Tracer tracer{"navigator tree model is reference nodes visible", category()};
return m_showReferenceItems; return m_showReferenceItems;
} }
bool NavigatorTreeModel::canBeReference(const ModelNode &modelNode) const bool NavigatorTreeModel::canBeReference(const ModelNode &modelNode) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model can be reference", category()};
return modelNode.hasMetaInfo(); return modelNode.hasMetaInfo();
} }
@@ -1209,6 +1299,8 @@ QModelIndex NavigatorTreeModel::createReferenceIndex(int row,
int column, int column,
const ReferenceData &referenceData) const const ReferenceData &referenceData) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model create reference index", category()};
const QString uniqueId = QString("%1-%2-%3") const QString uniqueId = QString("%1-%2-%3")
.arg(referenceData.owner.internalId()) .arg(referenceData.owner.internalId())
.arg(referenceData.current.internalId()) .arg(referenceData.current.internalId())
@@ -1226,6 +1318,8 @@ QModelIndex NavigatorTreeModel::createReferenceIndex(int row,
void NavigatorTreeModel::resetReferences() void NavigatorTreeModel::resetReferences()
{ {
NanotraceHR::Tracer tracer{"navigator tree model reset references", category()};
m_rowReferenceCache.clear(); m_rowReferenceCache.clear();
m_referenceIndexHash.clear(); m_referenceIndexHash.clear();
m_referenceUnique.clear(); m_referenceUnique.clear();
@@ -1235,6 +1329,8 @@ void NavigatorTreeModel::resetReferences()
QList<ModelNode> NavigatorTreeModel::referenceList(const QList<BindingProperty> &bindingProperties, const QList<ModelNode> &unwanted) const QList<ModelNode> NavigatorTreeModel::referenceList(const QList<BindingProperty> &bindingProperties, const QList<ModelNode> &unwanted) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model reference list", category()};
if (bindingProperties.isEmpty()) if (bindingProperties.isEmpty())
return {}; return {};
@@ -1261,17 +1357,23 @@ QList<ModelNode> NavigatorTreeModel::referenceList(const QList<BindingProperty>
bool NavigatorTreeModel::isReference(const QModelIndex &index) const bool NavigatorTreeModel::isReference(const QModelIndex &index) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model is reference", category()};
return m_references.contains(index.internalId()); return m_references.contains(index.internalId());
} }
ModelNode NavigatorTreeModel::referenceExtractCurrent(const QModelIndex &index) const ModelNode NavigatorTreeModel::referenceExtractCurrent(const QModelIndex &index) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model reference extract current", category()};
Q_ASSERT(isReference(index)); Q_ASSERT(isReference(index));
return m_references[index.internalId()].current; return m_references[index.internalId()].current;
} }
ModelNode NavigatorTreeModel::referenceExtractOwner(const QModelIndex &index) const ModelNode NavigatorTreeModel::referenceExtractOwner(const QModelIndex &index) const
{ {
NanotraceHR::Tracer tracer{"navigator tree model reference extract owner", category()};
Q_ASSERT(isReference(index)); Q_ASSERT(isReference(index));
return m_references[index.internalId()].owner; return m_references[index.internalId()].owner;
} }

View File

@@ -3,13 +3,14 @@
#include "navigatortreeview.h" #include "navigatortreeview.h"
#include "navigatortracing.h"
#include "navigatortreemodel.h"
#include "navigatorview.h"
#include "previewtooltip.h"
#include <qmath.h> #include <qmath.h>
#include "modelnode.h" #include <modelnode.h>
#include "navigatorview.h"
#include "navigatortreemodel.h"
#include "qproxystyle.h"
#include "previewtooltip.h"
#include <qmldesignerbase/studio/studiostyle.h> #include <qmldesignerbase/studio/studiostyle.h>
@@ -18,19 +19,22 @@
#include <utils/icon.h> #include <utils/icon.h>
#include <utils/utilsicons.h> #include <utils/utilsicons.h>
#include <QLineEdit> #include <qproxystyle.h>
#include <QPen>
#include <QPixmapCache>
#include <QMouseEvent>
#include <QPainter>
#include <QStyleFactory>
#include <QEvent> #include <QEvent>
#include <QImage> #include <QImage>
#include <QLineEdit>
#include <QMouseEvent>
#include <QPainter>
#include <QPen>
#include <QPixmapCache>
#include <QStyleFactory>
namespace QmlDesigner { namespace QmlDesigner {
namespace { namespace {
auto category = NavigatorTracing::category;
// This style basically allows us to span the entire row // This style basically allows us to span the entire row
// including the arrow indicators which would otherwise not be // including the arrow indicators which would otherwise not be
// drawn by the delegate // drawn by the delegate
@@ -40,6 +44,8 @@ public:
TableViewStyle(QObject *parent) TableViewStyle(QObject *parent)
: QProxyStyle(new StudioStyle("fusion")) : QProxyStyle(new StudioStyle("fusion"))
{ {
NanotraceHR::Tracer tracer{"table view style constructor", category()};
setParent(parent); setParent(parent);
baseStyle()->setParent(parent); baseStyle()->setParent(parent);
} }
@@ -49,6 +55,8 @@ public:
QPainter *painter, QPainter *painter,
const QWidget *widget = nullptr) const override const QWidget *widget = nullptr) const override
{ {
NanotraceHR::Tracer tracer{"table view style draw primitive", category()};
static QRect mouseOverStateSavedFrameRectangle; static QRect mouseOverStateSavedFrameRectangle;
if (element == QStyle::PE_PanelItemViewRow) { if (element == QStyle::PE_PanelItemViewRow) {
if (option->state & QStyle::State_MouseOver) if (option->state & QStyle::State_MouseOver)
@@ -136,6 +144,8 @@ public:
const QWidget *widget = nullptr, const QWidget *widget = nullptr,
QStyleHintReturn *returnData = nullptr) const override QStyleHintReturn *returnData = nullptr) const override
{ {
NanotraceHR::Tracer tracer{"table view style style hint", category()};
if (hint == SH_ItemView_ShowDecorationSelected) if (hint == SH_ItemView_ShowDecorationSelected)
return 0; return 0;
else else
@@ -145,12 +155,16 @@ public:
private: // functions private: // functions
QColor highlightBrushColor() const QColor highlightBrushColor() const
{ {
NanotraceHR::Tracer tracer{"table view style highlight brush color", category()};
QColor color = Theme::getColor(Theme::Color::DSnavigatorDropIndicatorBackground); QColor color = Theme::getColor(Theme::Color::DSnavigatorDropIndicatorBackground);
color.setAlphaF(0.7f); color.setAlphaF(0.7f);
return color; return color;
} }
QColor highlightLineColor() const QColor highlightLineColor() const
{ {
NanotraceHR::Tracer tracer{"table view style highlight line color", category()};
QColor color = Theme::getColor(Theme::Color::DSnavigatorDropIndicatorOutline); QColor color = Theme::getColor(Theme::Color::DSnavigatorDropIndicatorOutline);
color.setAlphaF(0.7f); color.setAlphaF(0.7f);
return color; return color;
@@ -158,6 +172,8 @@ private: // functions
void drawHighlightFrame(const QRect &frameRectangle, QPainter *painter) const void drawHighlightFrame(const QRect &frameRectangle, QPainter *painter) const
{ {
NanotraceHR::Tracer tracer{"table view style draw highlight frame", category()};
painter->setPen(QPen(highlightLineColor(), 2)); painter->setPen(QPen(highlightLineColor(), 2));
painter->setBrush(highlightBrushColor()); painter->setBrush(highlightBrushColor());
painter->drawRect(frameRectangle); painter->drawRect(frameRectangle);
@@ -165,12 +181,16 @@ private: // functions
void drawIndicatorLine(const QPoint &leftPoint, const QPoint &rightPoint, QPainter *painter) const void drawIndicatorLine(const QPoint &leftPoint, const QPoint &rightPoint, QPainter *painter) const
{ {
NanotraceHR::Tracer tracer{"table view style draw indicator line", category()};
painter->setPen(QPen(highlightLineColor(), 3)); painter->setPen(QPen(highlightLineColor(), 3));
painter->drawLine(leftPoint, rightPoint); painter->drawLine(leftPoint, rightPoint);
} }
QRect adjustedRectangleToWidgetWidth(const QRect &originalRectangle, const QWidget *widget) const QRect adjustedRectangleToWidgetWidth(const QRect &originalRectangle, const QWidget *widget) const
{ {
NanotraceHR::Tracer tracer{"table view style adjusted rectangle to widget width", category()};
QRect adjustesRectangle = originalRectangle; QRect adjustesRectangle = originalRectangle;
adjustesRectangle.setLeft(0); adjustesRectangle.setLeft(0);
adjustesRectangle.setWidth(widget->rect().width()); adjustesRectangle.setWidth(widget->rect().width());
@@ -185,6 +205,8 @@ private: // variables
NavigatorTreeView::NavigatorTreeView(QWidget *parent) NavigatorTreeView::NavigatorTreeView(QWidget *parent)
: QTreeView(parent) : QTreeView(parent)
{ {
NanotraceHR::Tracer tracer{"navigator tree view constructor", category()};
setStyle(new TableViewStyle(this)); setStyle(new TableViewStyle(this));
setMinimumWidth(240); setMinimumWidth(240);
setRootIsDecorated(false); setRootIsDecorated(false);
@@ -194,6 +216,8 @@ NavigatorTreeView::NavigatorTreeView(QWidget *parent)
void NavigatorTreeView::drawSelectionBackground(QPainter *painter, const QStyleOption &option) void NavigatorTreeView::drawSelectionBackground(QPainter *painter, const QStyleOption &option)
{ {
NanotraceHR::Tracer tracer{"navigator tree view draw selection background", category()};
painter->save(); painter->save();
painter->fillRect(option.rect.adjusted(0, delegateMargin, 0, -delegateMargin), painter->fillRect(option.rect.adjusted(0, delegateMargin, 0, -delegateMargin),
Theme::getColor(Theme::Color::DSnavigatorItemBackgroundSelected)); Theme::getColor(Theme::Color::DSnavigatorItemBackgroundSelected));
@@ -202,6 +226,8 @@ void NavigatorTreeView::drawSelectionBackground(QPainter *painter, const QStyleO
bool NavigatorTreeView::viewportEvent(QEvent *event) bool NavigatorTreeView::viewportEvent(QEvent *event)
{ {
NanotraceHR::Tracer tracer{"navigator tree view viewport event", category()};
const QPoint offset(10, 5); const QPoint offset(10, 5);
if (event->type() == QEvent::ToolTip) { if (event->type() == QEvent::ToolTip) {
@@ -260,6 +286,8 @@ bool NavigatorTreeView::viewportEvent(QEvent *event)
void NavigatorTreeView::mousePressEvent(QMouseEvent *event) void NavigatorTreeView::mousePressEvent(QMouseEvent *event)
{ {
NanotraceHR::Tracer tracer{"navigator tree view mouse press event", category()};
m_clickedIndex = indexAt(event->pos()); m_clickedIndex = indexAt(event->pos());
if (auto navModel = qobject_cast<NavigatorTreeModel *>(model())) { if (auto navModel = qobject_cast<NavigatorTreeModel *>(model())) {
if (navModel->isReference(m_clickedIndex)) { if (navModel->isReference(m_clickedIndex)) {
@@ -279,6 +307,8 @@ void NavigatorTreeView::mousePressEvent(QMouseEvent *event)
void NavigatorTreeView::mouseReleaseEvent(QMouseEvent *event) void NavigatorTreeView::mouseReleaseEvent(QMouseEvent *event)
{ {
NanotraceHR::Tracer tracer{"navigator tree view mouse release event", category()};
const QModelIndex modelIndex = indexAt(event->pos()); const QModelIndex modelIndex = indexAt(event->pos());
if (m_clickedIndex == modelIndex) { if (m_clickedIndex == modelIndex) {
if (auto navModel = qobject_cast<NavigatorTreeModel *>(model())) { if (auto navModel = qobject_cast<NavigatorTreeModel *>(model())) {
@@ -299,6 +329,8 @@ void NavigatorTreeView::mouseReleaseEvent(QMouseEvent *event)
void NavigatorTreeView::startDrag(Qt::DropActions supportedActions) void NavigatorTreeView::startDrag(Qt::DropActions supportedActions)
{ {
NanotraceHR::Tracer tracer{"navigator tree view start drag", category()};
if (m_dragAllowed) { if (m_dragAllowed) {
if (m_previewToolTip) { if (m_previewToolTip) {
// Workaround to ensure tooltip doesn't linger during drag, as drag grabs all mouse // Workaround to ensure tooltip doesn't linger during drag, as drag grabs all mouse

View File

@@ -5,6 +5,7 @@
#include "iconcheckboxitemdelegate.h" #include "iconcheckboxitemdelegate.h"
#include "nameitemdelegate.h" #include "nameitemdelegate.h"
#include "navigatortracing.h"
#include "navigatortreemodel.h" #include "navigatortreemodel.h"
#include "navigatorwidget.h" #include "navigatorwidget.h"
@@ -17,13 +18,13 @@
#include <nodeinstanceview.h> #include <nodeinstanceview.h>
#include <nodelistproperty.h> #include <nodelistproperty.h>
#include <nodeproperty.h> #include <nodeproperty.h>
#include <rewritingexception.h>
#include <theme.h>
#include <variantproperty.h>
#include <qmldesignerconstants.h> #include <qmldesignerconstants.h>
#include <qmldesignericons.h> #include <qmldesignericons.h>
#include <qmldesignerplugin.h> #include <qmldesignerplugin.h>
#include <qmlitemnode.h> #include <qmlitemnode.h>
#include <rewritingexception.h>
#include <theme.h>
#include <variantproperty.h>
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
@@ -42,6 +43,8 @@
#include <QPixmap> #include <QPixmap>
#include <QTimer> #include <QTimer>
static auto category = QmlDesigner::NavigatorTracing::category;
inline static void setScenePos(const QmlDesigner::ModelNode &modelNode, const QPointF &pos) inline static void setScenePos(const QmlDesigner::ModelNode &modelNode, const QPointF &pos)
{ {
if (modelNode.hasParentProperty() && QmlDesigner::QmlItemNode::isValidQmlItemNode(modelNode.parentProperty().parentModelNode())) { if (modelNode.hasParentProperty() && QmlDesigner::QmlItemNode::isValidQmlItemNode(modelNode.parentProperty().parentModelNode())) {
@@ -94,22 +97,28 @@ NavigatorView::NavigatorView(ExternalDependenciesInterface &externalDependencies
: AbstractView{externalDependencies} : AbstractView{externalDependencies}
, m_blockSelectionChangedSignal(false) , m_blockSelectionChangedSignal(false)
{ {
NanotraceHR::Tracer tracer{"navigator view constructor", category()};
} }
NavigatorView::~NavigatorView() NavigatorView::~NavigatorView()
{ {
NanotraceHR::Tracer tracer{"navigator view destructor", category()};
if (m_widget && !m_widget->parent()) if (m_widget && !m_widget->parent())
delete m_widget.data(); delete m_widget.data();
} }
bool NavigatorView::hasWidget() const bool NavigatorView::hasWidget() const
{ {
NanotraceHR::Tracer tracer{"navigator view has widget", category()};
return true; return true;
} }
WidgetInfo NavigatorView::widgetInfo() WidgetInfo NavigatorView::widgetInfo()
{ {
NanotraceHR::Tracer tracer{"navigator view widget info", category()};
if (!m_widget) if (!m_widget)
setupWidget(); setupWidget();
@@ -122,6 +131,8 @@ WidgetInfo NavigatorView::widgetInfo()
void NavigatorView::modelAttached(Model *model) void NavigatorView::modelAttached(Model *model)
{ {
NanotraceHR::Tracer tracer{"navigator view model attached", category()};
AbstractView::modelAttached(model); AbstractView::modelAttached(model);
QTreeView *treeView = treeWidget(); QTreeView *treeView = treeWidget();
@@ -185,6 +196,8 @@ void NavigatorView::modelAttached(Model *model)
void NavigatorView::clearExplorerWarnings() void NavigatorView::clearExplorerWarnings()
{ {
NanotraceHR::Tracer tracer{"navigator view clear explorer warnings", category()};
QList<ModelNode> allNodes; QList<ModelNode> allNodes;
allNodes.append(rootModelNode()); allNodes.append(rootModelNode());
allNodes.append(rootModelNode().allSubModelNodes()); allNodes.append(rootModelNode().allSubModelNodes());
@@ -199,6 +212,8 @@ void NavigatorView::clearExplorerWarnings()
void NavigatorView::modelAboutToBeDetached(Model *model) void NavigatorView::modelAboutToBeDetached(Model *model)
{ {
NanotraceHR::Tracer tracer{"navigator view model about to be detached", category()};
QHash<QString, bool> &localExpandMap = m_expandMap[model->fileUrl()]; QHash<QString, bool> &localExpandMap = m_expandMap[model->fileUrl()];
// If detaching full document model, recreate expand map from scratch to remove stale entries. // If detaching full document model, recreate expand map from scratch to remove stale entries.
@@ -241,12 +256,16 @@ void NavigatorView::modelAboutToBeDetached(Model *model)
void NavigatorView::importsChanged(const Imports &/*addedImports*/, const Imports &/*removedImports*/) void NavigatorView::importsChanged(const Imports &/*addedImports*/, const Imports &/*removedImports*/)
{ {
NanotraceHR::Tracer tracer{"navigator view imports changed", category()};
treeWidget()->update(); treeWidget()->update();
} }
void NavigatorView::bindingPropertiesChanged(const QList<BindingProperty> &propertyList, void NavigatorView::bindingPropertiesChanged(const QList<BindingProperty> &propertyList,
PropertyChangeFlags /*propertyChange*/) PropertyChangeFlags /*propertyChange*/)
{ {
NanotraceHR::Tracer tracer{"navigator view binding properties changed", category()};
QSet<ModelNode> owners; QSet<ModelNode> owners;
for (const BindingProperty &bindingProperty : propertyList) { for (const BindingProperty &bindingProperty : propertyList) {
@@ -274,6 +293,8 @@ void NavigatorView::bindingPropertiesChanged(const QList<BindingProperty> &prope
void NavigatorView::dragStarted(QMimeData *mimeData) void NavigatorView::dragStarted(QMimeData *mimeData)
{ {
NanotraceHR::Tracer tracer{"navigator view drag started", category()};
if (mimeData->hasFormat(Constants::MIME_TYPE_ITEM_LIBRARY_INFO)) { if (mimeData->hasFormat(Constants::MIME_TYPE_ITEM_LIBRARY_INFO)) {
QByteArray data = mimeData->data(Constants::MIME_TYPE_ITEM_LIBRARY_INFO); QByteArray data = mimeData->data(Constants::MIME_TYPE_ITEM_LIBRARY_INFO);
QDataStream stream(data); QDataStream stream(data);
@@ -345,6 +366,8 @@ void NavigatorView::dragStarted(QMimeData *mimeData)
void NavigatorView::dragEnded() void NavigatorView::dragEnded()
{ {
NanotraceHR::Tracer tracer{"navigator view drag ended", category()};
m_widget->setDragType(""); m_widget->setDragType("");
m_widget->update(); m_widget->update();
} }
@@ -354,12 +377,16 @@ void NavigatorView::customNotification([[maybe_unused]] const AbstractView *view
[[maybe_unused]] const QList<ModelNode> &nodeList, [[maybe_unused]] const QList<ModelNode> &nodeList,
[[maybe_unused]] const QList<QVariant> &data) [[maybe_unused]] const QList<QVariant> &data)
{ {
NanotraceHR::Tracer tracer{"navigator view custom notification", category()};
if (identifier == "asset_import_update") if (identifier == "asset_import_update")
m_currentModelInterface->notifyIconsChanged(); m_currentModelInterface->notifyIconsChanged();
} }
void NavigatorView::handleChangedExport(const ModelNode &modelNode, bool exported) void NavigatorView::handleChangedExport(const ModelNode &modelNode, bool exported)
{ {
NanotraceHR::Tracer tracer{"navigator view handle changed export", category()};
const ModelNode rootNode = rootModelNode(); const ModelNode rootNode = rootModelNode();
Q_ASSERT(rootNode.isValid()); Q_ASSERT(rootNode.isValid());
const PropertyName modelNodeId = modelNode.id().toUtf8(); const PropertyName modelNodeId = modelNode.id().toUtf8();
@@ -375,17 +402,23 @@ void NavigatorView::handleChangedExport(const ModelNode &modelNode, bool exporte
bool NavigatorView::isNodeInvisible(const ModelNode &modelNode) const bool NavigatorView::isNodeInvisible(const ModelNode &modelNode) const
{ {
NanotraceHR::Tracer tracer{"navigator view is node invisible", category()};
return QmlVisualNode(modelNode).visibilityOverride(); return QmlVisualNode(modelNode).visibilityOverride();
} }
void NavigatorView::disableWidget() void NavigatorView::disableWidget()
{ {
NanotraceHR::Tracer tracer{"navigator view disable widget", category()};
if (m_widget) if (m_widget)
m_widget->disableNavigator(); m_widget->disableNavigator();
} }
void NavigatorView::enableWidget() void NavigatorView::enableWidget()
{ {
NanotraceHR::Tracer tracer{"navigator view enable widget", category()};
if (m_widget) if (m_widget)
m_widget->enableNavigator(); m_widget->enableNavigator();
} }
@@ -394,6 +427,8 @@ void NavigatorView::modelNodePreviewPixmapChanged(const ModelNode &node,
const QPixmap &pixmap, const QPixmap &pixmap,
const QByteArray &requestId) const QByteArray &requestId)
{ {
NanotraceHR::Tracer tracer{"navigator view model node preview pixmap changed", category()};
// There might be multiple requests for different preview pixmap sizes. // There might be multiple requests for different preview pixmap sizes.
// Here only the one with the default size is picked. // Here only the one with the default size is picked.
if (requestId.isEmpty()) if (requestId.isEmpty())
@@ -402,6 +437,8 @@ void NavigatorView::modelNodePreviewPixmapChanged(const ModelNode &node,
ModelNode NavigatorView::modelNodeForIndex(const QModelIndex &modelIndex) const ModelNode NavigatorView::modelNodeForIndex(const QModelIndex &modelIndex) const
{ {
NanotraceHR::Tracer tracer{"navigator view model node for index", category()};
return modelIndex.model()->data(modelIndex, ModelNodeRole).value<ModelNode>(); return modelIndex.model()->data(modelIndex, ModelNodeRole).value<ModelNode>();
} }
@@ -413,6 +450,8 @@ void NavigatorView::nodeRemoved(const ModelNode &removedNode,
const NodeAbstractProperty & /*parentProperty*/, const NodeAbstractProperty & /*parentProperty*/,
AbstractView::PropertyChangeFlags /*propertyChange*/) AbstractView::PropertyChangeFlags /*propertyChange*/)
{ {
NanotraceHR::Tracer tracer{"navigator view node removed", category()};
m_currentModelInterface->notifyModelNodesRemoved({removedNode}); m_currentModelInterface->notifyModelNodesRemoved({removedNode});
} }
@@ -421,6 +460,8 @@ void NavigatorView::nodeReparented(const ModelNode &modelNode,
const NodeAbstractProperty & oldPropertyParent, const NodeAbstractProperty & oldPropertyParent,
AbstractView::PropertyChangeFlags /*propertyChange*/) AbstractView::PropertyChangeFlags /*propertyChange*/)
{ {
NanotraceHR::Tracer tracer{"navigator view node reparented", category()};
if (!oldPropertyParent.isValid()) if (!oldPropertyParent.isValid())
m_currentModelInterface->notifyModelNodesInserted({modelNode}); m_currentModelInterface->notifyModelNodesInserted({modelNode});
else else
@@ -433,6 +474,8 @@ void NavigatorView::nodeReparented(const ModelNode &modelNode,
void NavigatorView::nodeIdChanged(const ModelNode& modelNode, const QString & /*newId*/, const QString & /*oldId*/) void NavigatorView::nodeIdChanged(const ModelNode& modelNode, const QString & /*newId*/, const QString & /*oldId*/)
{ {
NanotraceHR::Tracer tracer{"navigator view node id changed", category()};
m_currentModelInterface->notifyDataChanged(modelNode); m_currentModelInterface->notifyDataChanged(modelNode);
} }
@@ -442,6 +485,8 @@ void NavigatorView::propertiesAboutToBeRemoved(const QList<AbstractProperty> &/*
void NavigatorView::propertiesRemoved(const QList<AbstractProperty> &propertyList) void NavigatorView::propertiesRemoved(const QList<AbstractProperty> &propertyList)
{ {
NanotraceHR::Tracer tracer{"navigator view properties removed", category()};
QList<ModelNode> modelNodes; QList<ModelNode> modelNodes;
for (const AbstractProperty &property : propertyList) { for (const AbstractProperty &property : propertyList) {
if (property.isNodeAbstractProperty()) { if (property.isNodeAbstractProperty()) {
@@ -455,11 +500,15 @@ void NavigatorView::propertiesRemoved(const QList<AbstractProperty> &propertyLis
void NavigatorView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVersion*/, int /*minorVersion*/) void NavigatorView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVersion*/, int /*minorVersion*/)
{ {
NanotraceHR::Tracer tracer{"navigator view root node type changed", category()};
m_currentModelInterface->notifyDataChanged(rootModelNode()); m_currentModelInterface->notifyDataChanged(rootModelNode());
} }
void NavigatorView::nodeTypeChanged(const ModelNode &modelNode, const TypeName &, int , int) void NavigatorView::nodeTypeChanged(const ModelNode &modelNode, const TypeName &, int , int)
{ {
NanotraceHR::Tracer tracer{"navigator view node type changed", category()};
m_currentModelInterface->notifyDataChanged(modelNode); m_currentModelInterface->notifyDataChanged(modelNode);
} }
@@ -467,6 +516,8 @@ void NavigatorView::auxiliaryDataChanged(const ModelNode &modelNode,
[[maybe_unused]] AuxiliaryDataKeyView key, [[maybe_unused]] AuxiliaryDataKeyView key,
[[maybe_unused]] const QVariant &data) [[maybe_unused]] const QVariant &data)
{ {
NanotraceHR::Tracer tracer{"navigator view auxiliary data changed", category()};
m_currentModelInterface->notifyDataChanged(modelNode); m_currentModelInterface->notifyDataChanged(modelNode);
if (key == lockedProperty) { if (key == lockedProperty) {
@@ -479,6 +530,8 @@ void NavigatorView::auxiliaryDataChanged(const ModelNode &modelNode,
void NavigatorView::instanceErrorChanged(const QVector<ModelNode> &errorNodeList) void NavigatorView::instanceErrorChanged(const QVector<ModelNode> &errorNodeList)
{ {
NanotraceHR::Tracer tracer{"navigator view instance error changed", category()};
for (const ModelNode &modelNode : errorNodeList) { for (const ModelNode &modelNode : errorNodeList) {
m_currentModelInterface->notifyDataChanged(modelNode); m_currentModelInterface->notifyDataChanged(modelNode);
propagateInstanceErrorToExplorer(modelNode); propagateInstanceErrorToExplorer(modelNode);
@@ -487,6 +540,8 @@ void NavigatorView::instanceErrorChanged(const QVector<ModelNode> &errorNodeList
void NavigatorView::nodeOrderChanged(const NodeListProperty &listProperty) void NavigatorView::nodeOrderChanged(const NodeListProperty &listProperty)
{ {
NanotraceHR::Tracer tracer{"navigator view node order changed", category()};
m_currentModelInterface->notifyModelNodesMoved(listProperty.directSubNodes()); m_currentModelInterface->notifyModelNodesMoved(listProperty.directSubNodes());
// make sure selection is in sync again // make sure selection is in sync again
@@ -495,6 +550,8 @@ void NavigatorView::nodeOrderChanged(const NodeListProperty &listProperty)
void NavigatorView::changeToComponent(const QModelIndex &index) void NavigatorView::changeToComponent(const QModelIndex &index)
{ {
NanotraceHR::Tracer tracer{"navigator view change to component", category()};
if (index.isValid() && currentModel()->data(index, Qt::UserRole).isValid()) { if (index.isValid() && currentModel()->data(index, Qt::UserRole).isValid()) {
const ModelNode doubleClickNode = modelNodeForIndex(index); const ModelNode doubleClickNode = modelNodeForIndex(index);
if (doubleClickNode.metaInfo().isFileComponent()) if (doubleClickNode.metaInfo().isFileComponent())
@@ -507,16 +564,22 @@ void NavigatorView::changeToComponent(const QModelIndex &index)
QModelIndex NavigatorView::indexForModelNode(const ModelNode &modelNode) const QModelIndex NavigatorView::indexForModelNode(const ModelNode &modelNode) const
{ {
NanotraceHR::Tracer tracer{"navigator view index for model node", category()};
return m_currentModelInterface->indexForModelNode(modelNode); return m_currentModelInterface->indexForModelNode(modelNode);
} }
QAbstractItemModel *NavigatorView::currentModel() const QAbstractItemModel *NavigatorView::currentModel() const
{ {
NanotraceHR::Tracer tracer{"navigator view current model", category()};
return treeWidget()->model(); return treeWidget()->model();
} }
const ProjectExplorer::FileNode *NavigatorView::fileNodeForModelNode(const ModelNode &node) const const ProjectExplorer::FileNode *NavigatorView::fileNodeForModelNode(const ModelNode &node) const
{ {
NanotraceHR::Tracer tracer{"navigator view file node for model node", category()};
QString filename = ModelUtils::componentFilePath(node); QString filename = ModelUtils::componentFilePath(node);
Utils::FilePath filePath = Utils::FilePath::fromString(filename); Utils::FilePath filePath = Utils::FilePath::fromString(filename);
ProjectExplorer::Project *currentProject = ProjectExplorer::ProjectManager::projectForFile( ProjectExplorer::Project *currentProject = ProjectExplorer::ProjectManager::projectForFile(
@@ -539,6 +602,8 @@ const ProjectExplorer::FileNode *NavigatorView::fileNodeForModelNode(const Model
const ProjectExplorer::FileNode *NavigatorView::fileNodeForIndex(const QModelIndex &index) const const ProjectExplorer::FileNode *NavigatorView::fileNodeForIndex(const QModelIndex &index) const
{ {
NanotraceHR::Tracer tracer{"navigator view file node for index", category()};
if (index.isValid() && currentModel()->data(index, Qt::UserRole).isValid()) { if (index.isValid() && currentModel()->data(index, Qt::UserRole).isValid()) {
ModelNode node = modelNodeForIndex(index); ModelNode node = modelNodeForIndex(index);
if (node.metaInfo().isFileComponent()) { if (node.metaInfo().isFileComponent()) {
@@ -549,8 +614,11 @@ const ProjectExplorer::FileNode *NavigatorView::fileNodeForIndex(const QModelInd
return nullptr; return nullptr;
} }
void NavigatorView::propagateInstanceErrorToExplorer(const ModelNode &modelNode) { void NavigatorView::propagateInstanceErrorToExplorer(const ModelNode &modelNode)
QModelIndex index = indexForModelNode(modelNode);; {
NanotraceHR::Tracer tracer{"navigator view propagate instance error to explorer", category()};
QModelIndex index = indexForModelNode(modelNode);
do { do {
const ProjectExplorer::FileNode *fnode = fileNodeForIndex(index); const ProjectExplorer::FileNode *fnode = fileNodeForIndex(index);
@@ -566,6 +634,8 @@ void NavigatorView::propagateInstanceErrorToExplorer(const ModelNode &modelNode)
void NavigatorView::leftButtonClicked() void NavigatorView::leftButtonClicked()
{ {
NanotraceHR::Tracer tracer{"navigator view left button clicked", category()};
if (selectedModelNodes().size() > 1) if (selectedModelNodes().size() > 1)
return; //Semantics are unclear for multi selection. return; //Semantics are unclear for multi selection.
@@ -590,6 +660,8 @@ void NavigatorView::leftButtonClicked()
void NavigatorView::rightButtonClicked() void NavigatorView::rightButtonClicked()
{ {
NanotraceHR::Tracer tracer{"navigator view right button clicked", category()};
if (selectedModelNodes().size() > 1) if (selectedModelNodes().size() > 1)
return; //Semantics are unclear for multi selection. return; //Semantics are unclear for multi selection.
@@ -634,6 +706,8 @@ void NavigatorView::rightButtonClicked()
void NavigatorView::upButtonClicked() void NavigatorView::upButtonClicked()
{ {
NanotraceHR::Tracer tracer{"navigator view up button clicked", category()};
bool blocked = blockSelectionChangedSignal(true); bool blocked = blockSelectionChangedSignal(true);
bool reverse = QmlDesignerPlugin::settings().value(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool(); bool reverse = QmlDesignerPlugin::settings().value(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool();
@@ -648,6 +722,8 @@ void NavigatorView::upButtonClicked()
void NavigatorView::downButtonClicked() void NavigatorView::downButtonClicked()
{ {
NanotraceHR::Tracer tracer{"navigator view down button clicked", category()};
bool blocked = blockSelectionChangedSignal(true); bool blocked = blockSelectionChangedSignal(true);
bool reverse = QmlDesignerPlugin::settings().value(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool(); bool reverse = QmlDesignerPlugin::settings().value(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER).toBool();
@@ -662,12 +738,16 @@ void NavigatorView::downButtonClicked()
void NavigatorView::colorizeToggled(bool flag) void NavigatorView::colorizeToggled(bool flag)
{ {
NanotraceHR::Tracer tracer{"navigator view colorize toggled", category()};
QmlDesignerPlugin::settings().insert(DesignerSettingsKey::NAVIGATOR_COLORIZE_ICONS, flag); QmlDesignerPlugin::settings().insert(DesignerSettingsKey::NAVIGATOR_COLORIZE_ICONS, flag);
m_currentModelInterface->notifyIconsChanged(); m_currentModelInterface->notifyIconsChanged();
} }
void NavigatorView::referenceToggled(bool flag) void NavigatorView::referenceToggled(bool flag)
{ {
NanotraceHR::Tracer tracer{"navigator view reference toggled", category()};
m_currentModelInterface->showReferences(flag); m_currentModelInterface->showReferences(flag);
treeWidget()->expandAll(); treeWidget()->expandAll();
QmlDesignerPlugin::settings().insert(DesignerSettingsKey::NAVIGATOR_SHOW_REFERENCE_NODES, flag); QmlDesignerPlugin::settings().insert(DesignerSettingsKey::NAVIGATOR_SHOW_REFERENCE_NODES, flag);
@@ -675,6 +755,8 @@ void NavigatorView::referenceToggled(bool flag)
void NavigatorView::filterToggled(bool flag) void NavigatorView::filterToggled(bool flag)
{ {
NanotraceHR::Tracer tracer{"navigator view filter toggled", category()};
m_currentModelInterface->setFilter(flag); m_currentModelInterface->setFilter(flag);
treeWidget()->expandAll(); treeWidget()->expandAll();
QmlDesignerPlugin::settings().insert(DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS, flag); QmlDesignerPlugin::settings().insert(DesignerSettingsKey::NAVIGATOR_SHOW_ONLY_VISIBLE_ITEMS, flag);
@@ -682,6 +764,8 @@ void NavigatorView::filterToggled(bool flag)
void NavigatorView::reverseOrderToggled(bool flag) void NavigatorView::reverseOrderToggled(bool flag)
{ {
NanotraceHR::Tracer tracer{"navigator view reverse order toggled", category()};
m_currentModelInterface->setOrder(flag); m_currentModelInterface->setOrder(flag);
treeWidget()->expandAll(); treeWidget()->expandAll();
QmlDesignerPlugin::settings().insert(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER, flag); QmlDesignerPlugin::settings().insert(DesignerSettingsKey::NAVIGATOR_REVERSE_ITEM_ORDER, flag);
@@ -689,12 +773,16 @@ void NavigatorView::reverseOrderToggled(bool flag)
void NavigatorView::textFilterChanged(const QString &text) void NavigatorView::textFilterChanged(const QString &text)
{ {
NanotraceHR::Tracer tracer{"navigator view text filter changed", category()};
m_treeModel->setNameFilter(text); m_treeModel->setNameFilter(text);
treeWidget()->expandAll(); treeWidget()->expandAll();
} }
void NavigatorView::changeSelection(const QItemSelection & /*newSelection*/, const QItemSelection &/*deselected*/) void NavigatorView::changeSelection(const QItemSelection & /*newSelection*/, const QItemSelection &/*deselected*/)
{ {
NanotraceHR::Tracer tracer{"navigator view change selection", category()};
if (m_blockSelectionChangedSignal) if (m_blockSelectionChangedSignal)
return; return;
@@ -713,12 +801,16 @@ void NavigatorView::changeSelection(const QItemSelection & /*newSelection*/, con
void NavigatorView::selectedNodesChanged(const QList<ModelNode> &/*selectedNodeList*/, const QList<ModelNode> &/*lastSelectedNodeList*/) void NavigatorView::selectedNodesChanged(const QList<ModelNode> &/*selectedNodeList*/, const QList<ModelNode> &/*lastSelectedNodeList*/)
{ {
NanotraceHR::Tracer tracer{"navigator view selected nodes changed", category()};
// Update selection asynchronously to ensure NavigatorTreeModel's index cache is up to date // Update selection asynchronously to ensure NavigatorTreeModel's index cache is up to date
QTimer::singleShot(0, this, &NavigatorView::updateItemSelection); QTimer::singleShot(0, this, &NavigatorView::updateItemSelection);
} }
void NavigatorView::updateItemSelection() void NavigatorView::updateItemSelection()
{ {
NanotraceHR::Tracer tracer{"navigator view update item selection", category()};
if (!isAttached()) if (!isAttached())
return; return;
@@ -761,6 +853,7 @@ void NavigatorView::updateItemSelection()
QTreeView *NavigatorView::treeWidget() const QTreeView *NavigatorView::treeWidget() const
{ {
NanotraceHR::Tracer tracer{"navigator view tree widget", category()};
if (m_widget) if (m_widget)
return m_widget->treeView(); return m_widget->treeView();
return nullptr; return nullptr;
@@ -768,12 +861,16 @@ QTreeView *NavigatorView::treeWidget() const
NavigatorTreeModel *NavigatorView::treeModel() NavigatorTreeModel *NavigatorView::treeModel()
{ {
NanotraceHR::Tracer tracer{"navigator view tree model", category()};
return m_treeModel.data(); return m_treeModel.data();
} }
// along the lines of QObject::blockSignals // along the lines of QObject::blockSignals
bool NavigatorView::blockSelectionChangedSignal(bool block) bool NavigatorView::blockSelectionChangedSignal(bool block)
{ {
NanotraceHR::Tracer tracer{"navigator view block selection changed signal", category()};
bool oldValue = m_blockSelectionChangedSignal; bool oldValue = m_blockSelectionChangedSignal;
m_blockSelectionChangedSignal = block; m_blockSelectionChangedSignal = block;
return oldValue; return oldValue;
@@ -781,6 +878,8 @@ bool NavigatorView::blockSelectionChangedSignal(bool block)
void NavigatorView::expandAncestors(const QModelIndex &index) void NavigatorView::expandAncestors(const QModelIndex &index)
{ {
NanotraceHR::Tracer tracer{"navigator view expand ancestors", category()};
QModelIndex currentIndex = index.parent(); QModelIndex currentIndex = index.parent();
while (currentIndex.isValid()) { while (currentIndex.isValid()) {
if (!treeWidget()->isExpanded(currentIndex)) if (!treeWidget()->isExpanded(currentIndex))
@@ -791,6 +890,8 @@ void NavigatorView::expandAncestors(const QModelIndex &index)
void NavigatorView::reparentAndCatch(NodeAbstractProperty property, const ModelNode &modelNode) void NavigatorView::reparentAndCatch(NodeAbstractProperty property, const ModelNode &modelNode)
{ {
NanotraceHR::Tracer tracer{"navigator view reparent and catch", category()};
try { try {
property.reparentHere(modelNode); property.reparentHere(modelNode);
} catch (Exception &exception) { } catch (Exception &exception) {
@@ -800,6 +901,8 @@ void NavigatorView::reparentAndCatch(NodeAbstractProperty property, const ModelN
void NavigatorView::setupWidget() void NavigatorView::setupWidget()
{ {
NanotraceHR::Tracer tracer{"navigator view setup widget", category()};
m_widget = new NavigatorWidget(this); m_widget = new NavigatorWidget(this);
m_treeModel = new NavigatorTreeModel(this); m_treeModel = new NavigatorTreeModel(this);
m_treeModel->setView(this); m_treeModel->setView(this);

View File

@@ -1,8 +1,9 @@
// Copyright (C) 2016 The Qt Company Ltd. // Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "navigatorsearchwidget.h"
#include "navigatorwidget.h" #include "navigatorwidget.h"
#include "navigatorsearchwidget.h"
#include "navigatortracing.h"
#include "navigatorview.h" #include "navigatorview.h"
#include <designeractionmanager.h> #include <designeractionmanager.h>
@@ -29,10 +30,14 @@ using namespace Core;
namespace QmlDesigner { namespace QmlDesigner {
static auto category = NavigatorTracing::category;
NavigatorWidget::NavigatorWidget(NavigatorView *view) NavigatorWidget::NavigatorWidget(NavigatorView *view)
: m_treeView(new NavigatorTreeView) : m_treeView(new NavigatorTreeView)
, m_navigatorView(view) , m_navigatorView(view)
{ {
NanotraceHR::Tracer tracer{"navigator widget constructor", category()};
setAcceptDrops(true); setAcceptDrops(true);
m_treeView->setDragEnabled(true); m_treeView->setDragEnabled(true);
@@ -77,16 +82,22 @@ NavigatorWidget::NavigatorWidget(NavigatorView *view)
void NavigatorWidget::setTreeModel(QAbstractItemModel *model) void NavigatorWidget::setTreeModel(QAbstractItemModel *model)
{ {
NanotraceHR::Tracer tracer{"navigator widget set tree model", category()};
m_treeView->setModel(model); m_treeView->setModel(model);
} }
QTreeView *NavigatorWidget::treeView() const QTreeView *NavigatorWidget::treeView() const
{ {
NanotraceHR::Tracer tracer{"navigator widget tree view", category()};
return m_treeView; return m_treeView;
} }
QList<QWidget *> NavigatorWidget::createToolBarWidgets() QList<QWidget *> NavigatorWidget::createToolBarWidgets()
{ {
NanotraceHR::Tracer tracer{"navigator widget create toolbar widgets", category()};
QList<QWidget *> buttons; QList<QWidget *> buttons;
auto empty = new QWidget(); auto empty = new QWidget();
@@ -212,6 +223,8 @@ QList<QWidget *> NavigatorWidget::createToolBarWidgets()
QToolBar *NavigatorWidget::createToolBar() QToolBar *NavigatorWidget::createToolBar()
{ {
NanotraceHR::Tracer tracer{"navigator widget create toolbar", category()};
const QList<QWidget *> buttons = createToolBarWidgets(); const QList<QWidget *> buttons = createToolBarWidgets();
auto toolBar = new QToolBar(); auto toolBar = new QToolBar();
@@ -224,6 +237,8 @@ QToolBar *NavigatorWidget::createToolBar()
void NavigatorWidget::contextHelp(const Core::IContext::HelpCallback &callback) const void NavigatorWidget::contextHelp(const Core::IContext::HelpCallback &callback) const
{ {
NanotraceHR::Tracer tracer{"navigator widget context help", category()};
if (auto view = navigatorView()) { if (auto view = navigatorView()) {
QmlDesignerPlugin::contextHelp(callback, view->contextHelpId()); QmlDesignerPlugin::contextHelp(callback, view->contextHelpId());
} else { } else {
@@ -233,29 +248,40 @@ void NavigatorWidget::contextHelp(const Core::IContext::HelpCallback &callback)
void NavigatorWidget::disableNavigator() void NavigatorWidget::disableNavigator()
{ {
NanotraceHR::Tracer tracer{"navigator widget disable navigator", category()};
m_treeView->setEnabled(false); m_treeView->setEnabled(false);
} }
void NavigatorWidget::enableNavigator() void NavigatorWidget::enableNavigator()
{ {
NanotraceHR::Tracer tracer{"navigator widget enable navigator", category()};
m_treeView->setEnabled(true); m_treeView->setEnabled(true);
} }
NavigatorView *NavigatorWidget::navigatorView() const NavigatorView *NavigatorWidget::navigatorView() const
{ {
NanotraceHR::Tracer tracer{"navigator widget navigator view", category()};
return m_navigatorView.data(); return m_navigatorView.data();
} }
void NavigatorWidget::dragEnterEvent(QDragEnterEvent *dragEnterEvent) void NavigatorWidget::dragEnterEvent(QDragEnterEvent *dragEnterEvent)
{ {
NanotraceHR::Tracer tracer{"navigator widget drag enter event", category()};
const DesignerActionManager &actionManager = QmlDesignerPlugin::instance() const DesignerActionManager &actionManager = QmlDesignerPlugin::instance()
->viewManager().designerActionManager(); ->viewManager()
.designerActionManager();
if (actionManager.externalDragHasSupportedAssets(dragEnterEvent->mimeData())) if (actionManager.externalDragHasSupportedAssets(dragEnterEvent->mimeData()))
dragEnterEvent->acceptProposedAction(); dragEnterEvent->acceptProposedAction();
} }
void NavigatorWidget::dropEvent(QDropEvent *dropEvent) void NavigatorWidget::dropEvent(QDropEvent *dropEvent)
{ {
NanotraceHR::Tracer tracer{"navigator widget drop event", category()};
dropEvent->accept(); dropEvent->accept();
const DesignerActionManager &actionManager = QmlDesignerPlugin::instance() const DesignerActionManager &actionManager = QmlDesignerPlugin::instance()
->viewManager().designerActionManager(); ->viewManager().designerActionManager();
@@ -264,16 +290,22 @@ void NavigatorWidget::dropEvent(QDropEvent *dropEvent)
void NavigatorWidget::setDragType(const QByteArray &type) void NavigatorWidget::setDragType(const QByteArray &type)
{ {
NanotraceHR::Tracer tracer{"navigator widget set drag type", category()};
m_dragType = type; m_dragType = type;
} }
QByteArray NavigatorWidget::dragType() const QByteArray NavigatorWidget::dragType() const
{ {
NanotraceHR::Tracer tracer{"navigator widget drag type", category()};
return m_dragType; return m_dragType;
} }
void NavigatorWidget::clearSearch() void NavigatorWidget::clearSearch()
{ {
NanotraceHR::Tracer tracer{"navigator widget clear search", category()};
m_searchWidget->clear(); m_searchWidget->clear();
} }

View File

@@ -2,6 +2,7 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "previewtooltip.h" #include "previewtooltip.h"
#include "navigatortracing.h"
#include "ui_previewtooltip.h" #include "ui_previewtooltip.h"
#include <utils/theme/theme.h> #include <utils/theme/theme.h>
@@ -11,10 +12,14 @@
namespace QmlDesigner { namespace QmlDesigner {
static auto category = NavigatorTracing::category;
PreviewToolTip::PreviewToolTip(QWidget *parent) PreviewToolTip::PreviewToolTip(QWidget *parent)
: QWidget(parent) : QWidget(parent)
, m_ui(new Ui::PreviewToolTip) , m_ui(new Ui::PreviewToolTip)
{ {
NanotraceHR::Tracer tracer{"preview tooltip constructor", category()};
setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowTransparentForInput setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowTransparentForInput
| Qt::WindowStaysOnTopHint | Qt::WindowDoesNotAcceptFocus); | Qt::WindowStaysOnTopHint | Qt::WindowDoesNotAcceptFocus);
m_ui->setupUi(this); m_ui->setupUi(this);
@@ -38,26 +43,36 @@ PreviewToolTip::PreviewToolTip(QWidget *parent)
PreviewToolTip::~PreviewToolTip() PreviewToolTip::~PreviewToolTip()
{ {
NanotraceHR::Tracer tracer{"preview tooltip destructor", category()};
delete m_ui; delete m_ui;
} }
void PreviewToolTip::setId(const QString &id) void PreviewToolTip::setId(const QString &id)
{ {
NanotraceHR::Tracer tracer{"preview tooltip set id", category()};
m_ui->idLabel->setText(id); m_ui->idLabel->setText(id);
} }
void PreviewToolTip::setType(const QString &type) void PreviewToolTip::setType(const QString &type)
{ {
NanotraceHR::Tracer tracer{"preview tooltip set type", category()};
m_ui->typeLabel->setText(type); m_ui->typeLabel->setText(type);
} }
void PreviewToolTip::setInfo(const QString &info) void PreviewToolTip::setInfo(const QString &info)
{ {
NanotraceHR::Tracer tracer{"preview tooltip set info", category()};
m_ui->infoLabel->setText(info); m_ui->infoLabel->setText(info);
} }
void PreviewToolTip::setPixmap(const QPixmap &pixmap) void PreviewToolTip::setPixmap(const QPixmap &pixmap)
{ {
NanotraceHR::Tracer tracer{"preview tooltip set pixmap", category()};
QPixmap scaled = pixmap.scaled(m_ui->labelBackground->size(), Qt::KeepAspectRatio); QPixmap scaled = pixmap.scaled(m_ui->labelBackground->size(), Qt::KeepAspectRatio);
scaled.setDevicePixelRatio(1.); scaled.setDevicePixelRatio(1.);
m_ui->imageLabel->setPixmap(scaled); m_ui->imageLabel->setPixmap(scaled);
@@ -65,6 +80,8 @@ void PreviewToolTip::setPixmap(const QPixmap &pixmap)
QString PreviewToolTip::id() const QString PreviewToolTip::id() const
{ {
NanotraceHR::Tracer tracer{"preview tooltip get id", category()};
return m_ui->idLabel->text(); return m_ui->idLabel->text();
} }

View File

@@ -49,7 +49,7 @@ extend_qtc_library(QmlDesignerCore
) )
extend_qtc_library(QmlDesignerCore extend_qtc_library(QmlDesignerCore
CONDITION ENABLE_PROJECT_STORAGE_TRACING OR ENABLE_SOURCE_PATH_STORAGE_TRACING OR ENABLE_IMAGE_CACHE_TRACING OR ENABLE_MODEL_TRACING OR ENABLE_FORM_EDITOR_TRACING OR ENABLE_PROPERTY_EDITOR_TRACING CONDITION ENABLE_PROJECT_STORAGE_TRACING OR ENABLE_SOURCE_PATH_STORAGE_TRACING OR ENABLE_IMAGE_CACHE_TRACING OR ENABLE_MODEL_TRACING OR ENABLE_FORM_EDITOR_TRACING OR ENABLE_PROPERTY_EDITOR_TRACING OR ENABLE_NAVIGATOR_TRACING
PUBLIC_DEPENDS Nanotrace PUBLIC_DEPENDS Nanotrace
PUBLIC_DEFINES PUBLIC_DEFINES
ENABLE_QMLDESIGNER_TRACING ENABLE_QMLDESIGNER_TRACING