QmlDesigner: Add property editor tracing

Change-Id: I80dd04d1721c0ae3ab84c061f92e0646beb1ccf2
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Marco Bubke
2025-06-02 11:46:43 +02:00
parent 42fd3f8a60
commit 4a81749343
37 changed files with 1594 additions and 163 deletions

View File

@@ -32,10 +32,15 @@ env_with_default("QDS_DESIGNVIEWER_USE_STAGING" ENV_QDS_DESIGNVIEWER_USE_STAGING
option(QDS_DESIGNVIEWER_USE_STAGING "Use staging API URL for Design Viewer" ${ENV_QDS_DESIGNVIEWER_USE_STAGING}) option(QDS_DESIGNVIEWER_USE_STAGING "Use staging API URL for Design Viewer" ${ENV_QDS_DESIGNVIEWER_USE_STAGING})
add_feature_info("Use staging API URL for Design Viewer" ${QDS_DESIGNVIEWER_USE_STAGING} "") add_feature_info("Use staging API URL for Design Viewer" ${QDS_DESIGNVIEWER_USE_STAGING} "")
env_with_default("QTC_ENABLE_PROPERTY_EDITOR_TRACING" ENV_QTC_ENABLE_PROPERTY_EDITOR_TRACING OFF)
option(ENABLE_PROPERTY_EDITOR_TRACING "Enable property editor tracing" ${ENV_QTC_ENABLE_PROPERTY_EDITOR_TRACING})
add_feature_info("Property editor tracing" ${ENABLE_PROPERTY_EDITOR_TRACING} "")
env_with_default("QTC_ENABLE_FORM_EDITOR_TRACING" ENV_QTC_ENABLE_FORM_EDITOR_TRACING OFF) env_with_default("QTC_ENABLE_FORM_EDITOR_TRACING" ENV_QTC_ENABLE_FORM_EDITOR_TRACING OFF)
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("Model tracing" ${ENABLE_FORM_EDITOR_TRACING} "") add_feature_info("Form editor tracing" ${ENABLE_FORM_EDITOR_TRACING} "")
if(QDS_DESIGNVIEWER_USE_STAGING) if(QDS_DESIGNVIEWER_USE_STAGING)
add_definitions(-DQDS_DESIGNVIEWER_USE_STAGING) add_definitions(-DQDS_DESIGNVIEWER_USE_STAGING)
@@ -410,6 +415,8 @@ extend_qtc_plugin(QmlDesigner
extend_qtc_plugin(QmlDesigner extend_qtc_plugin(QmlDesigner
SOURCES_PREFIX components/propertyeditor SOURCES_PREFIX components/propertyeditor
PUBLIC_INCLUDES components/propertyeditor PUBLIC_INCLUDES components/propertyeditor
PUBLIC_DEFINES
$<$<BOOL:${ENABLE_PROPERTY_EDITOR_TRACING}>:ENABLE_PROPERTY_EDITOR_TRACING>
SOURCES SOURCES
aligndistribute.cpp aligndistribute.h aligndistribute.cpp aligndistribute.h
assetimageprovider.cpp assetimageprovider.h assetimageprovider.cpp assetimageprovider.h
@@ -430,6 +437,7 @@ extend_qtc_plugin(QmlDesigner
propertyeditorcontextobject.cpp propertyeditorcontextobject.h propertyeditorcontextobject.cpp propertyeditorcontextobject.h
propertyeditordynamicpropertiesproxymodel.cpp propertyeditordynamicpropertiesproxymodel.h propertyeditordynamicpropertiesproxymodel.cpp propertyeditordynamicpropertiesproxymodel.h
propertyeditorqmlbackend.cpp propertyeditorqmlbackend.h propertyeditorqmlbackend.cpp propertyeditorqmlbackend.h
propertyeditortracing.cpp propertyeditortracing.h
propertyeditortransaction.cpp propertyeditortransaction.h propertyeditortransaction.cpp propertyeditortransaction.h
propertyeditorvalue.cpp propertyeditorvalue.h propertyeditorvalue.cpp propertyeditorvalue.h
propertyeditorview.cpp propertyeditorview.h propertyeditorview.cpp propertyeditorview.h

View File

@@ -3,6 +3,8 @@
#include "aligndistribute.h" #include "aligndistribute.h"
#include "propertyeditortracing.h"
#include <nodeabstractproperty.h> #include <nodeabstractproperty.h>
#include <qmldesignerplugin.h> #include <qmldesignerplugin.h>
#include <qmlmodelnodeproxy.h> #include <qmlmodelnodeproxy.h>
@@ -23,12 +25,18 @@ using namespace Utils;
namespace QmlDesigner { namespace QmlDesigner {
static auto category = PropertyEditorTracing::category;
AlignDistribute::AlignDistribute(QObject *parent) AlignDistribute::AlignDistribute(QObject *parent)
: QObject(parent) : QObject(parent)
{} {
NanotraceHR::Tracer tracer{"align distribute constructor", category()};
}
bool AlignDistribute::multiSelection() const bool AlignDistribute::multiSelection() const
{ {
NanotraceHR::Tracer tracer{"align distribute multiSelection", category()};
if (!m_qmlObjectNode.isValid()) if (!m_qmlObjectNode.isValid())
return false; return false;
@@ -37,6 +45,8 @@ bool AlignDistribute::multiSelection() const
bool AlignDistribute::selectionHasAnchors() const bool AlignDistribute::selectionHasAnchors() const
{ {
NanotraceHR::Tracer tracer{"align distribute selection has anchors", category()};
if (!m_qmlObjectNode.isValid()) if (!m_qmlObjectNode.isValid())
return true; return true;
@@ -51,6 +61,8 @@ bool AlignDistribute::selectionHasAnchors() const
bool AlignDistribute::selectionExclusivlyItems() const bool AlignDistribute::selectionExclusivlyItems() const
{ {
NanotraceHR::Tracer tracer{"align distribute selection exclusivly items", category()};
if (!m_qmlObjectNode.isValid()) if (!m_qmlObjectNode.isValid())
return false; return false;
@@ -64,6 +76,8 @@ bool AlignDistribute::selectionExclusivlyItems() const
bool AlignDistribute::selectionContainsRootItem() const bool AlignDistribute::selectionContainsRootItem() const
{ {
NanotraceHR::Tracer tracer{"align distribute selection contains root item", category()};
if (!m_qmlObjectNode.isValid()) if (!m_qmlObjectNode.isValid())
return true; return true;
@@ -78,6 +92,8 @@ bool AlignDistribute::selectionContainsRootItem() const
void AlignDistribute::setModelNodeBackend(const QVariant &modelNodeBackend) void AlignDistribute::setModelNodeBackend(const QVariant &modelNodeBackend)
{ {
NanotraceHR::Tracer tracer{"align distribute set model node backend", category()};
auto modelNodeBackendObject = modelNodeBackend.value<QObject *>(); auto modelNodeBackendObject = modelNodeBackend.value<QObject *>();
const auto backendObjectCasted = qobject_cast<const QmlModelNodeProxy *>(modelNodeBackendObject); const auto backendObjectCasted = qobject_cast<const QmlModelNodeProxy *>(modelNodeBackendObject);
@@ -92,11 +108,15 @@ void AlignDistribute::setModelNodeBackend(const QVariant &modelNodeBackend)
// function or associated MEMBER variable. The property will be invalid. // function or associated MEMBER variable. The property will be invalid.
QVariant AlignDistribute::modelNodeBackend() const QVariant AlignDistribute::modelNodeBackend() const
{ {
NanotraceHR::Tracer tracer{"align distribute model node backend", category()};
return {}; return {};
} }
void AlignDistribute::registerDeclarativeType() void AlignDistribute::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"align distribute register declarative type", category()};
qmlRegisterType<AlignDistribute>("HelperWidgets", 2, 0, "AlignDistribute"); qmlRegisterType<AlignDistribute>("HelperWidgets", 2, 0, "AlignDistribute");
} }
@@ -256,7 +276,9 @@ inline static qreal getInstanceSceneY(const QmlItemNode &qmlItemNode)
void AlignDistribute::alignObjects(Target target, AlignTo alignTo, const QString &keyObject) void AlignDistribute::alignObjects(Target target, AlignTo alignTo, const QString &keyObject)
{ {
QTC_ASSERT(m_qmlObjectNode.isValid(), return ); NanotraceHR::Tracer tracer{"align distribute align objects", category()};
QTC_ASSERT(m_qmlObjectNode.isValid(), return);
const auto selectionContext = SelectionContext(m_qmlObjectNode.view()); const auto selectionContext = SelectionContext(m_qmlObjectNode.view());
if (selectionContext.selectedModelNodes().empty()) if (selectionContext.selectedModelNodes().empty())
@@ -347,6 +369,8 @@ void AlignDistribute::alignObjects(Target target, AlignTo alignTo, const QString
void AlignDistribute::distributeObjects(Target target, AlignTo alignTo, const QString &keyObject) void AlignDistribute::distributeObjects(Target target, AlignTo alignTo, const QString &keyObject)
{ {
NanotraceHR::Tracer tracer{"align distribute distribute objects", category()};
QTC_ASSERT(m_qmlObjectNode.isValid(), return ); QTC_ASSERT(m_qmlObjectNode.isValid(), return );
const auto selectionContext = SelectionContext(m_qmlObjectNode.view()); const auto selectionContext = SelectionContext(m_qmlObjectNode.view());
@@ -508,6 +532,8 @@ void AlignDistribute::distributeSpacing(Dimension dimension,
const qreal &distance, const qreal &distance,
DistributeOrigin distributeOrigin) DistributeOrigin distributeOrigin)
{ {
NanotraceHR::Tracer tracer{"align distribute distribute spacing", category()};
QTC_ASSERT(m_qmlObjectNode.isValid(), return ); QTC_ASSERT(m_qmlObjectNode.isValid(), return );
const auto selectionContext = SelectionContext(m_qmlObjectNode.view()); const auto selectionContext = SelectionContext(m_qmlObjectNode.view());
@@ -637,6 +663,8 @@ void AlignDistribute::distributeSpacing(Dimension dimension,
AlignDistribute::CompareFunction AlignDistribute::getCompareFunction(Target target) const AlignDistribute::CompareFunction AlignDistribute::getCompareFunction(Target target) const
{ {
NanotraceHR::Tracer tracer{"align distribute get compare function", category()};
static const std::map<Target, CompareFunction> cmpMap = {{Target::Left, compareByLeft}, static const std::map<Target, CompareFunction> cmpMap = {{Target::Left, compareByLeft},
{Target::CenterH, compareByCenterH}, {Target::CenterH, compareByCenterH},
{Target::Right, compareByRight}, {Target::Right, compareByRight},
@@ -648,6 +676,8 @@ AlignDistribute::CompareFunction AlignDistribute::getCompareFunction(Target targ
AlignDistribute::Dimension AlignDistribute::getDimension(Target target) const AlignDistribute::Dimension AlignDistribute::getDimension(Target target) const
{ {
NanotraceHR::Tracer tracer{"align distribute get dimension", category()};
switch (target) { switch (target) {
case Target::Left: case Target::Left:
case Target::CenterH: case Target::CenterH:
@@ -665,6 +695,8 @@ AlignDistribute::Dimension AlignDistribute::getDimension(Target target) const
bool AlignDistribute::executePixelPerfectDialog() const bool AlignDistribute::executePixelPerfectDialog() const
{ {
NanotraceHR::Tracer tracer{"align distribute execute pixel perfect dialog", category()};
Utils::CheckableDecider decider(Key("WarnAboutPixelPerfectDistribution")); Utils::CheckableDecider decider(Key("WarnAboutPixelPerfectDistribution"));
QMessageBox::StandardButton pressed = Utils::CheckableMessageBox::question( QMessageBox::StandardButton pressed = Utils::CheckableMessageBox::question(

View File

@@ -3,6 +3,8 @@
#include "assetimageprovider.h" #include "assetimageprovider.h"
#include "propertyeditortracing.h"
#include <asset.h> #include <asset.h>
#include <imagecache/imagecacheimageresponse.h> #include <imagecache/imagecacheimageresponse.h>
@@ -18,6 +20,9 @@ namespace QmlDesigner {
QQuickImageResponse *AssetImageProvider::requestImageResponse(const QString &id, QQuickImageResponse *AssetImageProvider::requestImageResponse(const QString &id,
const QSize &requestedSize) const QSize &requestedSize)
{ {
NanotraceHR::Tracer tracer{"asset image provider request image response",
PropertyEditorTracing::category()};
if (id.endsWith(".mesh")) if (id.endsWith(".mesh"))
return m_imageCacheProvider.requestImageResponse(id, {}); return m_imageCacheProvider.requestImageResponse(id, {});

View File

@@ -3,6 +3,8 @@
#include "colorpalettebackend.h" #include "colorpalettebackend.h"
#include "propertyeditortracing.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <QApplication> #include <QApplication>
@@ -21,6 +23,8 @@ namespace QmlDesigner {
QPointer<ColorPaletteBackend> ColorPaletteBackend::m_instance = nullptr; QPointer<ColorPaletteBackend> ColorPaletteBackend::m_instance = nullptr;
static auto category = PropertyEditorTracing::category;
ColorPaletteBackend::ColorPaletteBackend() ColorPaletteBackend::ColorPaletteBackend()
: m_currentPalette() : m_currentPalette()
, m_data() , m_data()
@@ -29,6 +33,8 @@ ColorPaletteBackend::ColorPaletteBackend()
, updateTimer(0) , updateTimer(0)
#endif #endif
{ {
NanotraceHR::Tracer tracer{"color palette backend constructor", category()};
m_data.insert(g_recent, Palette(QmlDesigner::DesignerSettingsKey::COLOR_PALETTE_RECENT)); m_data.insert(g_recent, Palette(QmlDesigner::DesignerSettingsKey::COLOR_PALETTE_RECENT));
m_data.insert(g_favorite, Palette(QmlDesigner::DesignerSettingsKey::COLOR_PALETTE_FAVORITE)); m_data.insert(g_favorite, Palette(QmlDesigner::DesignerSettingsKey::COLOR_PALETTE_FAVORITE));
@@ -47,6 +53,8 @@ ColorPaletteBackend::ColorPaletteBackend()
ColorPaletteBackend::~ColorPaletteBackend() ColorPaletteBackend::~ColorPaletteBackend()
{ {
NanotraceHR::Tracer tracer{"color palette backend destructor", category()};
//writePalettes(); // TODO crash on QtDS close //writePalettes(); // TODO crash on QtDS close
if (m_eyeDropperActive) if (m_eyeDropperActive)
eyeDropperLeave(QCursor::pos(), EyeDropperEventFilter::LeaveReason::Default); eyeDropperLeave(QCursor::pos(), EyeDropperEventFilter::LeaveReason::Default);
@@ -54,19 +62,26 @@ ColorPaletteBackend::~ColorPaletteBackend()
void ColorPaletteBackend::readPalettes() void ColorPaletteBackend::readPalettes()
{ {
NanotraceHR::Tracer tracer{"color palette backend read palettes", category()};
for (auto &palette : m_data) for (auto &palette : m_data)
palette.read(); palette.read();
} }
void ColorPaletteBackend::writePalettes() void ColorPaletteBackend::writePalettes()
{ {
NanotraceHR::Tracer tracer{"color palette backend write palettes", category()};
for (auto &palette : m_data) for (auto &palette : m_data)
palette.write(); palette.write();
} }
void ColorPaletteBackend::addColor(const QString &color, const QString &paletteName) void ColorPaletteBackend::addColor(const QString &color, const QString &paletteName)
{ {
NanotraceHR::Tracer tracer{"color palette backend add color", category()};
auto found = m_data.find(paletteName); auto found = m_data.find(paletteName);
if (found == m_data.end()) { if (found == m_data.end()) {
qWarning() << Q_FUNC_INFO << "Unknown palette: " << paletteName; qWarning() << Q_FUNC_INFO << "Unknown palette: " << paletteName;
return; return;
@@ -92,6 +107,8 @@ void ColorPaletteBackend::addColor(const QString &color, const QString &paletteN
void ColorPaletteBackend::removeColor(int id, const QString &paletteName) void ColorPaletteBackend::removeColor(int id, const QString &paletteName)
{ {
NanotraceHR::Tracer tracer{"color palette backend remove color", category()};
auto found = m_data.find(paletteName); auto found = m_data.find(paletteName);
if (found == m_data.end()) { if (found == m_data.end()) {
@@ -122,6 +139,8 @@ void ColorPaletteBackend::removeColor(int id, const QString &paletteName)
void ColorPaletteBackend::addRecentColor(const QString &item) void ColorPaletteBackend::addRecentColor(const QString &item)
{ {
NanotraceHR::Tracer tracer{"color palette backend add recent color", category()};
if (m_data[g_recent].m_colors.isEmpty()) { if (m_data[g_recent].m_colors.isEmpty()) {
addColor(item, g_recent); addColor(item, g_recent);
return; return;
@@ -134,26 +153,36 @@ void ColorPaletteBackend::addRecentColor(const QString &item)
void ColorPaletteBackend::addFavoriteColor(const QString &item) void ColorPaletteBackend::addFavoriteColor(const QString &item)
{ {
NanotraceHR::Tracer tracer{"color palette backend add favorite color", category()};
addColor(item, g_favorite); addColor(item, g_favorite);
} }
void ColorPaletteBackend::removeFavoriteColor(int id) void ColorPaletteBackend::removeFavoriteColor(int id)
{ {
NanotraceHR::Tracer tracer{"color palette backend remove favorite color", category()};
removeColor(id, g_favorite); removeColor(id, g_favorite);
} }
QStringList ColorPaletteBackend::palettes() const QStringList ColorPaletteBackend::palettes() const
{ {
NanotraceHR::Tracer tracer{"color palette backend get palettes", category()};
return m_data.keys(); return m_data.keys();
} }
const QString &ColorPaletteBackend::currentPalette() const const QString &ColorPaletteBackend::currentPalette() const
{ {
NanotraceHR::Tracer tracer{"color palette backend get current palette", category()};
return m_currentPalette; return m_currentPalette;
} }
void ColorPaletteBackend::setCurrentPalette(const QString &palette) void ColorPaletteBackend::setCurrentPalette(const QString &palette)
{ {
NanotraceHR::Tracer tracer{"color palette backend set current palette", category()};
if (!m_data.contains(palette)) { if (!m_data.contains(palette)) {
qWarning() << Q_FUNC_INFO << "Unknown palette: " << palette; qWarning() << Q_FUNC_INFO << "Unknown palette: " << palette;
return; return;
@@ -186,11 +215,15 @@ void ColorPaletteBackend::setCurrentPalette(const QString &palette)
const QStringList &ColorPaletteBackend::currentPaletteColors() const const QStringList &ColorPaletteBackend::currentPaletteColors() const
{ {
NanotraceHR::Tracer tracer{"color palette backend get current palette colors", category()};
return m_currentPaletteColors; return m_currentPaletteColors;
} }
void ColorPaletteBackend::registerDeclarativeType() void ColorPaletteBackend::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"color palette backend register declarative type", category()};
[[maybe_unused]] static const int typeIndex = qmlRegisterSingletonType<ColorPaletteBackend>( [[maybe_unused]] static const int typeIndex = qmlRegisterSingletonType<ColorPaletteBackend>(
"QtQuickDesignerColorPalette", 1, 0, "ColorPaletteBackend", [](QQmlEngine *, QJSEngine *) { "QtQuickDesignerColorPalette", 1, 0, "ColorPaletteBackend", [](QQmlEngine *, QJSEngine *) {
return new ColorPaletteBackend(); return new ColorPaletteBackend();
@@ -199,6 +232,8 @@ void ColorPaletteBackend::registerDeclarativeType()
void ColorPaletteBackend::showDialog(QColor color) void ColorPaletteBackend::showDialog(QColor color)
{ {
NanotraceHR::Tracer tracer{"color palette backend show dialog", category()};
auto colorDialog = new QColorDialog(Core::ICore::dialogParent()); auto colorDialog = new QColorDialog(Core::ICore::dialogParent());
colorDialog->setCurrentColor(color); colorDialog->setCurrentColor(color);
colorDialog->setAttribute(Qt::WA_DeleteOnClose); colorDialog->setAttribute(Qt::WA_DeleteOnClose);
@@ -213,11 +248,15 @@ void ColorPaletteBackend::showDialog(QColor color)
void ColorPaletteBackend::invokeEyeDropper() void ColorPaletteBackend::invokeEyeDropper()
{ {
NanotraceHR::Tracer tracer{"color palette backend invoke eye dropper", category()};
eyeDropperEnter(); eyeDropperEnter();
} }
void ColorPaletteBackend::eyeDropperEnter() void ColorPaletteBackend::eyeDropperEnter()
{ {
NanotraceHR::Tracer tracer{"color palette backend eye dropper enter", category()};
if (m_eyeDropperActive) if (m_eyeDropperActive)
return; return;
@@ -278,6 +317,8 @@ void ColorPaletteBackend::eyeDropperEnter()
void ColorPaletteBackend::eyeDropperLeave(const QPoint &pos, void ColorPaletteBackend::eyeDropperLeave(const QPoint &pos,
EyeDropperEventFilter::LeaveReason actionOnLeave) EyeDropperEventFilter::LeaveReason actionOnLeave)
{ {
NanotraceHR::Tracer tracer{"color palette backend eye dropper leave", category()};
if (!m_eyeDropperActive) if (!m_eyeDropperActive)
return; return;
@@ -306,6 +347,8 @@ void ColorPaletteBackend::eyeDropperLeave(const QPoint &pos,
void ColorPaletteBackend::eyeDropperPointerMoved(const QPoint &pos) void ColorPaletteBackend::eyeDropperPointerMoved(const QPoint &pos)
{ {
NanotraceHR::Tracer tracer{"color palette backend eye dropper pointer moved", category()};
m_eyeDropperCurrentColor = grabScreenColor(pos); m_eyeDropperCurrentColor = grabScreenColor(pos);
updateEyeDropperPosition(pos); updateEyeDropperPosition(pos);
} }
@@ -318,11 +361,15 @@ const QSize g_halfPreviewSize = g_previewSize / 2;
QColor ColorPaletteBackend::grabScreenColor(const QPoint &p) QColor ColorPaletteBackend::grabScreenColor(const QPoint &p)
{ {
NanotraceHR::Tracer tracer{"color palette backend grab screen color", category()};
return grabScreenRect(QRect(p, QSize(1, 1))).pixel(0, 0); return grabScreenRect(QRect(p, QSize(1, 1))).pixel(0, 0);
} }
QImage ColorPaletteBackend::grabScreenRect(const QRect &r) QImage ColorPaletteBackend::grabScreenRect(const QRect &r)
{ {
NanotraceHR::Tracer tracer{"color palette backend grab screen rect", category()};
QScreen *screen = QGuiApplication::screenAt(r.topLeft()); QScreen *screen = QGuiApplication::screenAt(r.topLeft());
if (!screen) if (!screen)
screen = QGuiApplication::primaryScreen(); screen = QGuiApplication::primaryScreen();
@@ -339,6 +386,8 @@ QImage ColorPaletteBackend::grabScreenRect(const QRect &r)
void ColorPaletteBackend::updateEyeDropper() void ColorPaletteBackend::updateEyeDropper()
{ {
NanotraceHR::Tracer tracer{"color palette backend update eye dropper", category()};
#ifndef QT_NO_CURSOR #ifndef QT_NO_CURSOR
static QPoint lastGlobalPos; static QPoint lastGlobalPos;
const QPoint newGlobalPos = QCursor::pos(); const QPoint newGlobalPos = QCursor::pos();
@@ -356,6 +405,8 @@ void ColorPaletteBackend::updateEyeDropper()
void ColorPaletteBackend::updateEyeDropperPosition(const QPoint &globalPos) void ColorPaletteBackend::updateEyeDropperPosition(const QPoint &globalPos)
{ {
NanotraceHR::Tracer tracer{"color palette backend update eye dropper position", category()};
#if QT_CONFIG(cursor) #if QT_CONFIG(cursor)
QPoint topLeft = globalPos - QPoint(g_halfCursorSize.width(), g_halfCursorSize.height()); QPoint topLeft = globalPos - QPoint(g_halfCursorSize.width(), g_halfCursorSize.height());
updateCursor(grabScreenRect(QRect(topLeft, g_cursorSize))); updateCursor(grabScreenRect(QRect(topLeft, g_cursorSize)));
@@ -364,6 +415,8 @@ void ColorPaletteBackend::updateEyeDropperPosition(const QPoint &globalPos)
void ColorPaletteBackend::updateCursor(const QImage &image) void ColorPaletteBackend::updateCursor(const QImage &image)
{ {
NanotraceHR::Tracer tracer{"color palette backend update cursor", category()};
QWindow *window = Core::ICore::mainWindow()->windowHandle(); QWindow *window = Core::ICore::mainWindow()->windowHandle();
if (!window) if (!window)
return; return;
@@ -422,6 +475,7 @@ void ColorPaletteBackend::updateCursor(const QImage &image)
bool ColorPaletteBackend::eyeDropperActive() const bool ColorPaletteBackend::eyeDropperActive() const
{ {
NanotraceHR::Tracer tracer{"color palette backend eye dropper active", category()};
return m_eyeDropperActive; return m_eyeDropperActive;
} }

View File

@@ -3,6 +3,8 @@
#include "compatibleproperties.h" #include "compatibleproperties.h"
#include "propertyeditortracing.h"
#include <bindingproperty.h> #include <bindingproperty.h>
#include <qmlobjectnode.h> #include <qmlobjectnode.h>
#include <qmltimelinekeyframegroup.h> #include <qmltimelinekeyframegroup.h>
@@ -10,6 +12,8 @@
namespace QmlDesigner { namespace QmlDesigner {
static auto category = PropertyEditorTracing::category;
/*! /*!
* \internal * \internal
* \brief Extracts and removes compatible properties from \param properties. * \brief Extracts and removes compatible properties from \param properties.
@@ -17,6 +21,8 @@ namespace QmlDesigner {
*/ */
void CompatibleProperties::createCompatibilityMap(QList<PropertyName> &properties) void CompatibleProperties::createCompatibilityMap(QList<PropertyName> &properties)
{ {
NanotraceHR::Tracer tracer{"compatible properties compatibility map", category()};
m_compatibilityMap.clear(); m_compatibilityMap.clear();
if (m_oldInfo == m_newInfo || !m_oldInfo.isQtQuick3DMaterial() || !m_newInfo.isQtQuick3DMaterial()) if (m_oldInfo == m_newInfo || !m_oldInfo.isQtQuick3DMaterial() || !m_newInfo.isQtQuick3DMaterial())
return; return;
@@ -63,6 +69,8 @@ void CompatibleProperties::createCompatibilityMap(QList<PropertyName> &propertie
void CompatibleProperties::copyMappedProperties(const ModelNode &node) void CompatibleProperties::copyMappedProperties(const ModelNode &node)
{ {
NanotraceHR::Tracer tracer{"compatible properties copy mapped properties", category()};
if (m_compatibilityMap.isEmpty()) if (m_compatibilityMap.isEmpty())
return; return;
// Copy mapped properties to new name. Note that this will only copy the base // Copy mapped properties to new name. Note that this will only copy the base
@@ -95,6 +103,8 @@ void CompatibleProperties::copyMappedProperties(const ModelNode &node)
void CompatibleProperties::applyCompatibleProperties(const ModelNode &node) void CompatibleProperties::applyCompatibleProperties(const ModelNode &node)
{ {
NanotraceHR::Tracer tracer{"compatible properties apply compatible properties", category()};
for (const auto &pair : m_compatibilityMap.asKeyValueRange()) { for (const auto &pair : m_compatibilityMap.asKeyValueRange()) {
const CopyData &copyData = pair.second; const CopyData &copyData = pair.second;
if (copyData.isBinding) { if (copyData.isBinding) {

View File

@@ -3,14 +3,21 @@
#include "designerpropertymap.h" #include "designerpropertymap.h"
#include "propertyeditortracing.h"
namespace QmlDesigner { namespace QmlDesigner {
static auto category = PropertyEditorTracing::category;
DesignerPropertyMap::DesignerPropertyMap(QObject *parent) : QQmlPropertyMap(parent) DesignerPropertyMap::DesignerPropertyMap(QObject *parent) : QQmlPropertyMap(parent)
{ {
NanotraceHR::Tracer tracer{"designer property map", category()};
} }
QVariant DesignerPropertyMap::value(const QString &key) const QVariant DesignerPropertyMap::value(const QString &key) const
{ {
NanotraceHR::Tracer tracer{"designer property map value", QmlDesigner::category()};
if (contains(key)) if (contains(key))
return QQmlPropertyMap::value(key); return QQmlPropertyMap::value(key);
return QVariant(); return QVariant();
@@ -18,7 +25,10 @@ QVariant DesignerPropertyMap::value(const QString &key) const
void DesignerPropertyMap::registerDeclarativeType(const QString &name) void DesignerPropertyMap::registerDeclarativeType(const QString &name)
{ {
qmlRegisterType<DesignerPropertyMap>("Bauhaus",1,0,name.toUtf8()); NanotraceHR::Tracer tracer{"designer property map register declarative type",
QmlDesigner::category()};
qmlRegisterType<DesignerPropertyMap>("Bauhaus", 1, 0, name.toUtf8());
} }
} //QmlDesigner } //QmlDesigner

View File

@@ -26,9 +26,10 @@
#include "dynamicpropertiesproxymodel.h" #include "dynamicpropertiesproxymodel.h"
#include "bindingproperty.h" #include "bindingproperty.h"
#include "propertyeditortracing.h"
#include "propertyeditorvalue.h" #include "propertyeditorvalue.h"
#include <scripteditorutils.h>
#include <scripteditorutils.h>
#include <dynamicpropertiesmodel.h> #include <dynamicpropertiesmodel.h>
#include <abstractproperty.h> #include <abstractproperty.h>
@@ -45,6 +46,8 @@
namespace QmlDesigner { namespace QmlDesigner {
static auto category = PropertyEditorTracing::category;
static const int propertyNameRole = Qt::UserRole + 1; static const int propertyNameRole = Qt::UserRole + 1;
static const int propertyTypeRole = Qt::UserRole + 2; static const int propertyTypeRole = Qt::UserRole + 2;
static const int propertyValueRole = Qt::UserRole + 3; static const int propertyValueRole = Qt::UserRole + 3;
@@ -53,10 +56,13 @@ static const int propertyBindingRole = Qt::UserRole + 4;
DynamicPropertiesProxyModel::DynamicPropertiesProxyModel(QObject *parent) DynamicPropertiesProxyModel::DynamicPropertiesProxyModel(QObject *parent)
: QAbstractListModel(parent) : QAbstractListModel(parent)
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model constructor", category()};
} }
void DynamicPropertiesProxyModel::initModel(DynamicPropertiesModel *model) void DynamicPropertiesProxyModel::initModel(DynamicPropertiesModel *model)
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model init model", category()};
m_model = model; m_model = model;
connect(m_model, &QAbstractItemModel::modelAboutToBeReset, connect(m_model, &QAbstractItemModel::modelAboutToBeReset,
@@ -84,11 +90,15 @@ void DynamicPropertiesProxyModel::initModel(DynamicPropertiesModel *model)
int DynamicPropertiesProxyModel::rowCount(const QModelIndex &) const int DynamicPropertiesProxyModel::rowCount(const QModelIndex &) const
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model row count", category()};
return m_model ? m_model->rowCount() : 0; return m_model ? m_model->rowCount() : 0;
} }
QHash<int, QByteArray> DynamicPropertiesProxyModel::roleNames() const QHash<int, QByteArray> DynamicPropertiesProxyModel::roleNames() const
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model role names", category()};
static QHash<int, QByteArray> roleNames{{propertyNameRole, "propertyName"}, static QHash<int, QByteArray> roleNames{{propertyNameRole, "propertyName"},
{propertyTypeRole, "propertyType"}, {propertyTypeRole, "propertyType"},
{propertyValueRole, "propertyValue"}, {propertyValueRole, "propertyValue"},
@@ -99,6 +109,8 @@ QHash<int, QByteArray> DynamicPropertiesProxyModel::roleNames() const
QVariant DynamicPropertiesProxyModel::data(const QModelIndex &index, int role) const QVariant DynamicPropertiesProxyModel::data(const QModelIndex &index, int role) const
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model data", category()};
if (index.isValid() && index.row() < rowCount()) { if (index.isValid() && index.row() < rowCount()) {
AbstractProperty property = m_model->propertyForRow(index.row()); AbstractProperty property = m_model->propertyForRow(index.row());
@@ -132,6 +144,8 @@ QVariant DynamicPropertiesProxyModel::data(const QModelIndex &index, int role) c
void DynamicPropertiesProxyModel::registerDeclarativeType() void DynamicPropertiesProxyModel::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model register declarative type", category()};
static bool registered = false; static bool registered = false;
if (!registered) if (!registered)
qmlRegisterType<DynamicPropertiesProxyModel>("HelperWidgets", 2, 0, "DynamicPropertiesModel"); qmlRegisterType<DynamicPropertiesProxyModel>("HelperWidgets", 2, 0, "DynamicPropertiesModel");
@@ -139,11 +153,14 @@ void DynamicPropertiesProxyModel::registerDeclarativeType()
DynamicPropertiesModel *DynamicPropertiesProxyModel::dynamicPropertiesModel() const DynamicPropertiesModel *DynamicPropertiesProxyModel::dynamicPropertiesModel() const
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model dynamic properties model", category()};
return m_model; return m_model;
} }
QString DynamicPropertiesProxyModel::newPropertyName() const QString DynamicPropertiesProxyModel::newPropertyName() const
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model new property name", category()};
DynamicPropertiesModel *propsModel = dynamicPropertiesModel(); DynamicPropertiesModel *propsModel = dynamicPropertiesModel();
return QString::fromUtf8(uniquePropertyName("newName", propsModel->singleSelectedNode())); return QString::fromUtf8(uniquePropertyName("newName", propsModel->singleSelectedNode()));
@@ -151,6 +168,8 @@ QString DynamicPropertiesProxyModel::newPropertyName() const
void DynamicPropertiesProxyModel::createProperty(const QString &name, const QString &type) void DynamicPropertiesProxyModel::createProperty(const QString &name, const QString &type)
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model create property", category()};
QmlDesignerPlugin::emitUsageStatistics(Constants::EVENT_PROPERTY_ADDED); QmlDesignerPlugin::emitUsageStatistics(Constants::EVENT_PROPERTY_ADDED);
TypeName typeName = type.toUtf8(); TypeName typeName = type.toUtf8();
@@ -191,6 +210,8 @@ void DynamicPropertiesProxyModel::createProperty(const QString &name, const QStr
DynamicPropertyRow::DynamicPropertyRow() DynamicPropertyRow::DynamicPropertyRow()
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model constructor", category()};
m_backendValue = new PropertyEditorValue(this); m_backendValue = new PropertyEditorValue(this);
QObject::connect(m_backendValue, QObject::connect(m_backendValue,
@@ -211,16 +232,22 @@ DynamicPropertyRow::DynamicPropertyRow()
DynamicPropertyRow::~DynamicPropertyRow() DynamicPropertyRow::~DynamicPropertyRow()
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model destructor", category()};
clearProxyBackendValues(); clearProxyBackendValues();
} }
void DynamicPropertyRow::registerDeclarativeType() void DynamicPropertyRow::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model register declarative type", category()};
qmlRegisterType<DynamicPropertyRow>("HelperWidgets", 2, 0, "DynamicPropertyRow"); qmlRegisterType<DynamicPropertyRow>("HelperWidgets", 2, 0, "DynamicPropertyRow");
} }
void DynamicPropertyRow::setRow(int r) void DynamicPropertyRow::setRow(int r)
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model set row", category()};
if (m_row == r) if (m_row == r)
return; return;
@@ -231,11 +258,15 @@ void DynamicPropertyRow::setRow(int r)
int DynamicPropertyRow::row() const int DynamicPropertyRow::row() const
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model get row", category()};
return m_row; return m_row;
} }
void DynamicPropertyRow::setModel(DynamicPropertiesProxyModel *model) void DynamicPropertyRow::setModel(DynamicPropertiesProxyModel *model)
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model set model", category()};
if (model == m_model) if (model == m_model)
return; return;
@@ -259,21 +290,30 @@ void DynamicPropertyRow::setModel(DynamicPropertiesProxyModel *model)
DynamicPropertiesProxyModel *DynamicPropertyRow::model() const DynamicPropertiesProxyModel *DynamicPropertyRow::model() const
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model get model", category()};
return m_model; return m_model;
} }
PropertyEditorValue *DynamicPropertyRow::backendValue() const PropertyEditorValue *DynamicPropertyRow::backendValue() const
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model get backend value", category()};
return m_backendValue; return m_backendValue;
} }
void DynamicPropertyRow::remove() void DynamicPropertyRow::remove()
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model remove", category()};
m_model->dynamicPropertiesModel()->remove(m_row); m_model->dynamicPropertiesModel()->remove(m_row);
} }
PropertyEditorValue *DynamicPropertyRow::createProxyBackendValue() PropertyEditorValue *DynamicPropertyRow::createProxyBackendValue()
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model create proxy backend value",
category()};
auto *newValue = new PropertyEditorValue(this); auto *newValue = new PropertyEditorValue(this);
m_proxyBackendValues.append(newValue); m_proxyBackendValues.append(newValue);
@@ -284,12 +324,17 @@ PropertyEditorValue *DynamicPropertyRow::createProxyBackendValue()
void DynamicPropertyRow::clearProxyBackendValues() void DynamicPropertyRow::clearProxyBackendValues()
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model clear proxy backend values",
category()};
qDeleteAll(m_proxyBackendValues); qDeleteAll(m_proxyBackendValues);
m_proxyBackendValues.clear(); m_proxyBackendValues.clear();
} }
void DynamicPropertyRow::setupBackendValue() void DynamicPropertyRow::setupBackendValue()
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model setup backend value", category()};
if (!m_model) if (!m_model)
return; return;
@@ -333,6 +378,8 @@ void DynamicPropertyRow::setupBackendValue()
void DynamicPropertyRow::commitValue(const QVariant &value) void DynamicPropertyRow::commitValue(const QVariant &value)
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model commit value", category()};
if (m_lock) if (m_lock)
return; return;
@@ -381,6 +428,8 @@ void DynamicPropertyRow::commitValue(const QVariant &value)
void DynamicPropertyRow::commitExpression(const QString &expression) void DynamicPropertyRow::commitExpression(const QString &expression)
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model commit expression", category()};
if (m_lock || m_row < 0) if (m_lock || m_row < 0)
return; return;
@@ -428,6 +477,8 @@ void DynamicPropertyRow::commitExpression(const QString &expression)
void DynamicPropertyRow::handleDataChanged(const QModelIndex &topLeft, const QModelIndex &, const QList<int> &) void DynamicPropertyRow::handleDataChanged(const QModelIndex &topLeft, const QModelIndex &, const QList<int> &)
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model handle data changed", category()};
if (m_model->dynamicPropertiesModel()->isCallbackToModelBlocked()) if (m_model->dynamicPropertiesModel()->isCallbackToModelBlocked())
return; return;
@@ -437,6 +488,8 @@ void DynamicPropertyRow::handleDataChanged(const QModelIndex &topLeft, const QMo
void DynamicPropertyRow::resetValue() void DynamicPropertyRow::resetValue()
{ {
NanotraceHR::Tracer tracer{"dynamic properties proxy model reset value", category()};
if (m_lock || m_row < 0) if (m_lock || m_row < 0)
return; return;

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 "fileresourcesmodel.h" #include "fileresourcesmodel.h"
#include "propertyeditortracing.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
@@ -19,10 +20,14 @@
static QString s_lastBrowserPath; static QString s_lastBrowserPath;
static auto category = QmlDesigner::PropertyEditorTracing::category;
FileResourcesModel::FileResourcesModel(QObject *parent) FileResourcesModel::FileResourcesModel(QObject *parent)
: QObject(parent) : QObject(parent)
, m_filter(QLatin1String("(*.*)")) , m_filter(QLatin1String("(*.*)"))
{ {
NanotraceHR::Tracer tracer{"file resources model consstructor", category()};
ProjectExplorer::Project *project = ProjectExplorer::ProjectManager::projectForFile( ProjectExplorer::Project *project = ProjectExplorer::ProjectManager::projectForFile(
QmlDesigner::DocumentManager::currentFilePath()); QmlDesigner::DocumentManager::currentFilePath());
@@ -36,6 +41,8 @@ FileResourcesModel::FileResourcesModel(QObject *parent)
void FileResourcesModel::setModelNodeBackend(const QVariant &modelNodeBackend) void FileResourcesModel::setModelNodeBackend(const QVariant &modelNodeBackend)
{ {
NanotraceHR::Tracer tracer{"file resources model set model node backend", category()};
auto modelNodeBackendObject = modelNodeBackend.value<QObject *>(); auto modelNodeBackendObject = modelNodeBackend.value<QObject *>();
const auto backendObjectCasted = qobject_cast<const QmlDesigner::QmlModelNodeProxy *>( const auto backendObjectCasted = qobject_cast<const QmlDesigner::QmlModelNodeProxy *>(
@@ -57,11 +64,15 @@ void FileResourcesModel::setModelNodeBackend(const QVariant &modelNodeBackend)
QString FileResourcesModel::fileName() const QString FileResourcesModel::fileName() const
{ {
NanotraceHR::Tracer tracer{"file resources model file name", category()};
return m_fileName.toString(); return m_fileName.toString();
} }
void FileResourcesModel::setFileNameStr(const QString &fileName) void FileResourcesModel::setFileNameStr(const QString &fileName)
{ {
NanotraceHR::Tracer tracer{"file resources model set file name", category()};
setFileName(QUrl(fileName)); setFileName(QUrl(fileName));
} }
@@ -77,6 +88,8 @@ void FileResourcesModel::setFileName(const QUrl &fileName)
void FileResourcesModel::setPath(const QUrl &url) void FileResourcesModel::setPath(const QUrl &url)
{ {
NanotraceHR::Tracer tracer{"file resources model set path", category()};
m_path = url; m_path = url;
refreshModel(); refreshModel();
@@ -85,16 +98,22 @@ void FileResourcesModel::setPath(const QUrl &url)
QUrl FileResourcesModel::path() const QUrl FileResourcesModel::path() const
{ {
NanotraceHR::Tracer tracer{"file resources model path", category()};
return m_path; return m_path;
} }
QUrl FileResourcesModel::docPath() const QUrl FileResourcesModel::docPath() const
{ {
NanotraceHR::Tracer tracer{"file resources model doc path", category()};
return QUrl::fromLocalFile(m_docPath.path()); return QUrl::fromLocalFile(m_docPath.path());
} }
void FileResourcesModel::setFilter(const QString &filter) void FileResourcesModel::setFilter(const QString &filter)
{ {
NanotraceHR::Tracer tracer{"file resources model set filter", category()};
if (m_filter == filter) if (m_filter == filter)
return; return;
@@ -106,16 +125,22 @@ void FileResourcesModel::setFilter(const QString &filter)
QString FileResourcesModel::filter() const QString FileResourcesModel::filter() const
{ {
NanotraceHR::Tracer tracer{"file resources model filter", category()};
return m_filter; return m_filter;
} }
QList<FileResourcesItem> FileResourcesModel::model() const QList<FileResourcesItem> FileResourcesModel::model() const
{ {
NanotraceHR::Tracer tracer{"file resources model model", category()};
return m_model; return m_model;
} }
void FileResourcesModel::openFileDialog(const QString &customPath) void FileResourcesModel::openFileDialog(const QString &customPath)
{ {
NanotraceHR::Tracer tracer{"file resources model open file dialog", category()};
QString resourcePath = customPath.isEmpty() ? m_path.toLocalFile() : customPath; QString resourcePath = customPath.isEmpty() ? m_path.toLocalFile() : customPath;
bool resourcePathChanged = m_lastResourcePath != resourcePath; bool resourcePathChanged = m_lastResourcePath != resourcePath;
m_lastResourcePath = resourcePath; m_lastResourcePath = resourcePath;
@@ -149,6 +174,8 @@ void FileResourcesModel::openFileDialog(const QString &customPath)
QString FileResourcesModel::resolve(const QString &relative) const QString FileResourcesModel::resolve(const QString &relative) const
{ {
NanotraceHR::Tracer tracer{"file resources model resolve", category()};
if (relative.startsWith('#')) if (relative.startsWith('#'))
return relative; return relative;
@@ -170,20 +197,26 @@ QString FileResourcesModel::resolve(const QString &relative) const
bool FileResourcesModel::isLocal(const QString &path) const bool FileResourcesModel::isLocal(const QString &path) const
{ {
NanotraceHR::Tracer tracer{"file resources model is local", category()};
return QUrl::fromUserInput(path, m_docPath.path()).isLocalFile(); return QUrl::fromUserInput(path, m_docPath.path()).isLocalFile();
} }
void FileResourcesModel::registerDeclarativeType() void FileResourcesModel::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"file resources model register declarative type", category()};
qmlRegisterType<FileResourcesModel>("HelperWidgets", 2, 0, "FileResourcesModel"); qmlRegisterType<FileResourcesModel>("HelperWidgets", 2, 0, "FileResourcesModel");
} }
QVariant FileResourcesModel::modelNodeBackend() const QVariant FileResourcesModel::modelNodeBackend() const
{ {
NanotraceHR::Tracer tracer{"file resources model model node backend", category()};
return QVariant(); return QVariant();
} }
bool filterMetaIcons(const QString &fileName) static bool filterMetaIcons(const QString &fileName)
{ {
QFileInfo info(fileName); QFileInfo info(fileName);
@@ -210,6 +243,8 @@ bool filterMetaIcons(const QString &fileName)
void FileResourcesModel::refreshModel() void FileResourcesModel::refreshModel()
{ {
NanotraceHR::Tracer tracer{"file resources model refresh model", category()};
m_model.clear(); m_model.clear();
if (m_path.isValid()) { if (m_path.isValid()) {

View File

@@ -3,6 +3,7 @@
#include "fontresourcesmodel.h" #include "fontresourcesmodel.h"
#include "fileresourcesmodel.h" #include "fileresourcesmodel.h"
#include "propertyeditortracing.h"
#include <cmakeprojectmanager/cmakekitaspect.h> #include <cmakeprojectmanager/cmakekitaspect.h>
#include <designermcumanager.h> #include <designermcumanager.h>
@@ -32,6 +33,8 @@ using namespace Qt::Literals::StringLiterals;
namespace { namespace {
auto category = QmlDesigner::PropertyEditorTracing::category;
QStringList makeFontFilesFilterList() QStringList makeFontFilesFilterList()
{ {
QStringList filterList; QStringList filterList;
@@ -100,11 +103,15 @@ QSet<QString> systemFonts()
void FontResourcesModel::registerDeclarativeType() void FontResourcesModel::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"font resources model register declarative type", category()};
qmlRegisterType<FontResourcesModel>("HelperWidgets", 2, 0, "FontResourcesModel"); qmlRegisterType<FontResourcesModel>("HelperWidgets", 2, 0, "FontResourcesModel");
} }
QVariant FontResourcesModel::modelNodeBackend() QVariant FontResourcesModel::modelNodeBackend()
{ {
NanotraceHR::Tracer tracer{"font resources model model node backend", category()};
return {}; return {};
} }
@@ -112,16 +119,22 @@ FontResourcesModel::FontResourcesModel(QObject *parent)
: QObject{parent} : QObject{parent}
, m_resourceModel{std::make_unique<FileResourcesModel>()} , m_resourceModel{std::make_unique<FileResourcesModel>()}
{ {
NanotraceHR::Tracer tracer{"font resources model constructor", category()};
m_resourceModel->setFilter(fontFilesFilterList().join(' ')); m_resourceModel->setFilter(fontFilesFilterList().join(' '));
} }
void FontResourcesModel::setModelNodeBackend(const QVariant &modelNodeBackend) void FontResourcesModel::setModelNodeBackend(const QVariant &modelNodeBackend)
{ {
NanotraceHR::Tracer tracer{"file resources model set model node backend", category()};
m_resourceModel->setModelNodeBackend(modelNodeBackend); m_resourceModel->setModelNodeBackend(modelNodeBackend);
} }
QStringList FontResourcesModel::model() const QStringList FontResourcesModel::model() const
{ {
NanotraceHR::Tracer tracer{"file resources model model", category()};
QSet<QString> fonts; QSet<QString> fonts;
for (const auto &item : m_resourceModel->model()) { for (const auto &item : m_resourceModel->model()) {
fonts.insert(fontFamily(item.absoluteFilePath())); fonts.insert(fontFamily(item.absoluteFilePath()));
@@ -137,20 +150,28 @@ QStringList FontResourcesModel::model() const
void FontResourcesModel::refreshModel() void FontResourcesModel::refreshModel()
{ {
NanotraceHR::Tracer tracer{"file resources model refresh model", category()};
m_resourceModel->refreshModel(); m_resourceModel->refreshModel();
} }
void FontResourcesModel::openFileDialog(const QString &customPath) void FontResourcesModel::openFileDialog(const QString &customPath)
{ {
NanotraceHR::Tracer tracer{"file resources model open file dialog", category()};
m_resourceModel->openFileDialog(customPath); m_resourceModel->openFileDialog(customPath);
} }
QString FontResourcesModel::resolve(const QString &relative) const QString FontResourcesModel::resolve(const QString &relative) const
{ {
NanotraceHR::Tracer tracer{"file resources model resolve", category()};
return m_resourceModel->resolve(relative); return m_resourceModel->resolve(relative);
} }
bool FontResourcesModel::isLocal(const QString &path) const bool FontResourcesModel::isLocal(const QString &path) const
{ {
NanotraceHR::Tracer tracer{"file resources model is local", category()};
return m_resourceModel->isLocal(path); return m_resourceModel->isLocal(path);
} }

View File

@@ -30,8 +30,8 @@ public:
void refreshModel(); void refreshModel();
Q_INVOKABLE void openFileDialog(const QString &customPath = {}); Q_INVOKABLE void openFileDialog(const QString &customPath = {});
Q_INVOKABLE [[nodiscard]] QString resolve(const QString &relative) const; [[nodiscard]] Q_INVOKABLE QString resolve(const QString &relative) const;
Q_INVOKABLE [[nodiscard]] bool isLocal(const QString &path) const; [[nodiscard]] Q_INVOKABLE bool isLocal(const QString &path) const;
signals: signals:
void fileNameChanged(const QUrl &fileName); void fileNameChanged(const QUrl &fileName);

View File

@@ -5,6 +5,7 @@
#include "gradientpresetcustomlistmodel.h" #include "gradientpresetcustomlistmodel.h"
#include "gradientpresetitem.h" #include "gradientpresetitem.h"
#include "propertyeditortracing.h"
#include "propertyeditorview.h" #include "propertyeditorview.h"
#include "qmlanchorbindingproxy.h" #include "qmlanchorbindingproxy.h"
@@ -22,6 +23,9 @@
#include <QTimer> #include <QTimer>
namespace { namespace {
auto category = QmlDesigner::PropertyEditorTracing::category;
constexpr auto widthBinding = [](const QStringView nodeName) -> QString { constexpr auto widthBinding = [](const QStringView nodeName) -> QString {
return QString("%1.width").arg(nodeName); return QString("%1.width").arg(nodeName);
}; };
@@ -257,10 +261,13 @@ void prepareGradient(const T &array,
GradientModel::GradientModel(QObject *parent) : GradientModel::GradientModel(QObject *parent) :
QAbstractListModel(parent) QAbstractListModel(parent)
{ {
NanotraceHR::Tracer tracer{"gradient model constructor", category()};
} }
int GradientModel::rowCount(const QModelIndex & /*parent*/) const int GradientModel::rowCount(const QModelIndex & /*parent*/) const
{ {
NanotraceHR::Tracer tracer{"gradient model row count", category()};
if (m_itemNode.modelNode().hasNodeProperty(gradientPropertyName().toUtf8())) { if (m_itemNode.modelNode().hasNodeProperty(gradientPropertyName().toUtf8())) {
QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode() QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode()
.nodeProperty(gradientPropertyName().toUtf8()) .nodeProperty(gradientPropertyName().toUtf8())
@@ -275,20 +282,21 @@ int GradientModel::rowCount(const QModelIndex & /*parent*/) const
QHash<int, QByteArray> GradientModel::roleNames() const QHash<int, QByteArray> GradientModel::roleNames() const
{ {
static QHash<int, QByteArray> roleNames{ NanotraceHR::Tracer tracer{"gradient model role names", category()};
{Qt::UserRole + 1, "position"},
static QHash<int, QByteArray> roleNames{{Qt::UserRole + 1, "position"},
{Qt::UserRole + 2, "color"}, {Qt::UserRole + 2, "color"},
{Qt::UserRole + 3, "readOnly"}, {Qt::UserRole + 3, "readOnly"},
{Qt::UserRole + 4, "index"} {Qt::UserRole + 4, "index"}};
};
return roleNames; return roleNames;
} }
QVariant GradientModel::data(const QModelIndex &index, int role) const QVariant GradientModel::data(const QModelIndex &index, int role) const
{ {
if (index.isValid() && index.row() < rowCount()) { NanotraceHR::Tracer tracer{"gradient model data", category()};
if (index.isValid() && index.row() < rowCount()) {
if (role == Qt::UserRole + 3) { if (role == Qt::UserRole + 3) {
if (index.row() == 0 || index.row() == (rowCount() - 1)) if (index.row() == 0 || index.row() == (rowCount() - 1))
return true; return true;
@@ -312,6 +320,8 @@ QVariant GradientModel::data(const QModelIndex &index, int role) const
int GradientModel::addStop(qreal position, const QColor &color) int GradientModel::addStop(qreal position, const QColor &color)
{ {
NanotraceHR::Tracer tracer{"gradient model add stop", category()};
if (m_locked) if (m_locked)
return -1; return -1;
@@ -354,6 +364,8 @@ int GradientModel::addStop(qreal position, const QColor &color)
void GradientModel::addGradient() void GradientModel::addGradient()
{ {
NanotraceHR::Tracer tracer{"gradient model add gradient", category()};
if (m_locked) if (m_locked)
return; return;
@@ -397,6 +409,8 @@ void GradientModel::addGradient()
void GradientModel::setColor(int index, const QColor &color) void GradientModel::setColor(int index, const QColor &color)
{ {
NanotraceHR::Tracer tracer{"gradient model set color", category()};
if (locked()) if (locked())
return; return;
@@ -417,6 +431,8 @@ void GradientModel::setColor(int index, const QColor &color)
void GradientModel::setPosition(int index, qreal positition) void GradientModel::setPosition(int index, qreal positition)
{ {
NanotraceHR::Tracer tracer{"gradient model set position", category()};
if (locked()) if (locked())
return; return;
@@ -431,6 +447,8 @@ void GradientModel::setPosition(int index, qreal positition)
QColor GradientModel::getColor(int index) const QColor GradientModel::getColor(int index) const
{ {
NanotraceHR::Tracer tracer{"gradient model get color", category()};
if (index < rowCount()) { if (index < rowCount()) {
QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode(); QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode();
QmlDesigner::QmlObjectNode stop = gradientNode.nodeListProperty("stops").at(index); QmlDesigner::QmlObjectNode stop = gradientNode.nodeListProperty("stops").at(index);
@@ -443,6 +461,8 @@ QColor GradientModel::getColor(int index) const
qreal GradientModel::getPosition(int index) const qreal GradientModel::getPosition(int index) const
{ {
NanotraceHR::Tracer tracer{"gradient model get position", category()};
if (index < rowCount()) { if (index < rowCount()) {
QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode(); QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode();
QmlDesigner::QmlObjectNode stop = gradientNode.nodeListProperty("stops").at(index); QmlDesigner::QmlObjectNode stop = gradientNode.nodeListProperty("stops").at(index);
@@ -455,6 +475,8 @@ qreal GradientModel::getPosition(int index) const
void GradientModel::removeStop(int index) void GradientModel::removeStop(int index)
{ {
NanotraceHR::Tracer tracer{"gradient model remove stop", category()};
if (index < rowCount() - 1 && index != 0) { if (index < rowCount() - 1 && index != 0) {
view()->executeInTransaction("GradientModel::removeStop", [this, index](){ view()->executeInTransaction("GradientModel::removeStop", [this, index](){
QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode(); QmlDesigner::ModelNode gradientNode = m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode();
@@ -476,6 +498,8 @@ void GradientModel::removeStop(int index)
void GradientModel::deleteGradient() void GradientModel::deleteGradient()
{ {
NanotraceHR::Tracer tracer{"gradient model delete gradient", category()};
if (!m_itemNode.isValid()) if (!m_itemNode.isValid())
return; return;
@@ -490,21 +514,29 @@ void GradientModel::deleteGradient()
void GradientModel::lock() void GradientModel::lock()
{ {
NanotraceHR::Tracer tracer{"gradient model lock", category()};
m_locked = true; m_locked = true;
} }
void GradientModel::unlock() void GradientModel::unlock()
{ {
NanotraceHR::Tracer tracer{"gradient model unlock", category()};
m_locked = false; m_locked = false;
} }
void GradientModel::registerDeclarativeType() void GradientModel::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"gradient model register declarative type", category()};
qmlRegisterType<GradientModel>("HelperWidgets", 2, 0, "GradientModel"); qmlRegisterType<GradientModel>("HelperWidgets", 2, 0, "GradientModel");
} }
qreal GradientModel::readGradientProperty(const QString &propertyName) const qreal GradientModel::readGradientProperty(const QString &propertyName) const
{ {
NanotraceHR::Tracer tracer{"gradient model read gradient property", category()};
if (!m_itemNode.isValid()) if (!m_itemNode.isValid())
return 0; return 0;
@@ -520,11 +552,15 @@ qreal GradientModel::readGradientProperty(const QString &propertyName) const
qreal GradientModel::readGradientPropertyPercentage(const QString &propertyName) const qreal GradientModel::readGradientPropertyPercentage(const QString &propertyName) const
{ {
NanotraceHR::Tracer tracer{"gradient model read gradient property percentage", category()};
return getPercentageGradientProperty(propertyName.toUtf8()); return getPercentageGradientProperty(propertyName.toUtf8());
} }
QString GradientModel::readGradientOrientation() const QString GradientModel::readGradientOrientation() const
{ {
NanotraceHR::Tracer tracer{"gradient model read gradient orientation", category()};
if (!m_itemNode.isValid()) if (!m_itemNode.isValid())
return QString(); return QString();
@@ -541,6 +577,8 @@ QString GradientModel::readGradientOrientation() const
GradientModel::GradientPropertyUnits GradientModel::readGradientPropertyUnits( GradientModel::GradientPropertyUnits GradientModel::readGradientPropertyUnits(
const QString &propertyName) const const QString &propertyName) const
{ {
NanotraceHR::Tracer tracer{"gradient model read gradient property units", category()};
if (hasPercentageGradientProperty(propertyName)) if (hasPercentageGradientProperty(propertyName))
return GradientPropertyUnits::Percentage; return GradientPropertyUnits::Percentage;
@@ -559,6 +597,8 @@ bool GradientModel::isPercentageSupportedByProperty(const QString &propertyName,
void GradientModel::setupModel() void GradientModel::setupModel()
{ {
NanotraceHR::Tracer tracer{"gradient model setup model", category()};
m_locked = true; m_locked = true;
const QScopeGuard cleanup([&] { m_locked = false; }); const QScopeGuard cleanup([&] { m_locked = false; });
@@ -568,7 +608,9 @@ void GradientModel::setupModel()
void GradientModel::setAnchorBackend(const QVariant &anchorBackend) void GradientModel::setAnchorBackend(const QVariant &anchorBackend)
{ {
auto anchorBackendObject = anchorBackend.value<QObject*>(); NanotraceHR::Tracer tracer{"gradient model set anchor backend", category()};
auto anchorBackendObject = anchorBackend.value<QObject *>();
const auto backendCasted = const auto backendCasted =
qobject_cast<const QmlDesigner::QmlAnchorBindingProxy *>(anchorBackendObject); qobject_cast<const QmlDesigner::QmlAnchorBindingProxy *>(anchorBackendObject);
@@ -592,32 +634,44 @@ void GradientModel::setAnchorBackend(const QVariant &anchorBackend)
QString GradientModel::gradientPropertyName() const QString GradientModel::gradientPropertyName() const
{ {
NanotraceHR::Tracer tracer{"gradient model gradient property name", category()};
return m_gradientPropertyName; return m_gradientPropertyName;
} }
void GradientModel::setGradientPropertyName(const QString &name) void GradientModel::setGradientPropertyName(const QString &name)
{ {
NanotraceHR::Tracer tracer{"gradient model set gradient property name", category()};
m_gradientPropertyName = name; m_gradientPropertyName = name;
} }
QString GradientModel::gradientTypeName() const QString GradientModel::gradientTypeName() const
{ {
NanotraceHR::Tracer tracer{"gradient model gradient type name", category()};
return m_gradientTypeName; return m_gradientTypeName;
} }
void GradientModel::setGradientTypeName(const QString &name) void GradientModel::setGradientTypeName(const QString &name)
{ {
NanotraceHR::Tracer tracer{"gradient model set gradient type name", category()};
m_gradientTypeName = name; m_gradientTypeName = name;
} }
bool GradientModel::hasGradient() const bool GradientModel::hasGradient() const
{ {
NanotraceHR::Tracer tracer{"gradient model has gradient", category()};
return m_itemNode.isValid() return m_itemNode.isValid()
&& m_itemNode.modelNode().hasProperty(gradientPropertyName().toUtf8()); && m_itemNode.modelNode().hasProperty(gradientPropertyName().toUtf8());
} }
bool GradientModel::locked() const bool GradientModel::locked() const
{ {
NanotraceHR::Tracer tracer{"gradient model locked", category()};
if (m_locked) if (m_locked)
return true; return true;
@@ -628,6 +682,8 @@ bool GradientModel::locked() const
bool GradientModel::hasShapesImport() const bool GradientModel::hasShapesImport() const
{ {
NanotraceHR::Tracer tracer{"gradient model has shapes import", category()};
if (m_itemNode.isValid()) { if (m_itemNode.isValid()) {
QmlDesigner::Import import = QmlDesigner::Import::createLibraryImport("QtQuick.Shapes", "1.0"); QmlDesigner::Import import = QmlDesigner::Import::createLibraryImport("QtQuick.Shapes", "1.0");
return model()->hasImport(import, true, true); return model()->hasImport(import, true, true);
@@ -638,6 +694,8 @@ bool GradientModel::hasShapesImport() const
void GradientModel::ensureShapesImport() void GradientModel::ensureShapesImport()
{ {
NanotraceHR::Tracer tracer{"gradient model ensure shapes import", category()};
if (!hasShapesImport()) { if (!hasShapesImport()) {
QmlDesigner::Import timelineImport = QmlDesigner::Import::createLibraryImport("QtQuick.Shapes", "1.0"); QmlDesigner::Import timelineImport = QmlDesigner::Import::createLibraryImport("QtQuick.Shapes", "1.0");
try { try {
@@ -650,6 +708,8 @@ void GradientModel::ensureShapesImport()
void GradientModel::setupGradientProperties(const QmlDesigner::ModelNode &gradient) void GradientModel::setupGradientProperties(const QmlDesigner::ModelNode &gradient)
{ {
NanotraceHR::Tracer tracer{"gradient model setup gradient properties", category()};
QTC_ASSERT(m_itemNode.isValid(), return); QTC_ASSERT(m_itemNode.isValid(), return);
QTC_ASSERT(gradient.isValid(), return); QTC_ASSERT(gradient.isValid(), return);
@@ -676,23 +736,31 @@ void GradientModel::setupGradientProperties(const QmlDesigner::ModelNode &gradie
QmlDesigner::Model *GradientModel::model() const QmlDesigner::Model *GradientModel::model() const
{ {
NanotraceHR::Tracer tracer{"gradient model model", category()};
QTC_ASSERT(m_itemNode.isValid(), return nullptr); QTC_ASSERT(m_itemNode.isValid(), return nullptr);
return m_itemNode.view()->model(); return m_itemNode.view()->model();
} }
QmlDesigner::AbstractView *GradientModel::view() const QmlDesigner::AbstractView *GradientModel::view() const
{ {
NanotraceHR::Tracer tracer{"gradient model view", category()};
QTC_ASSERT(m_itemNode.isValid(), return nullptr); QTC_ASSERT(m_itemNode.isValid(), return nullptr);
return m_itemNode.view(); return m_itemNode.view();
} }
void GradientModel::resetPuppet() void GradientModel::resetPuppet()
{ {
NanotraceHR::Tracer tracer{"gradient model reset puppet", category()};
QTimer::singleShot(1000, view(), &QmlDesigner::AbstractView::resetPuppet); QTimer::singleShot(1000, view(), &QmlDesigner::AbstractView::resetPuppet);
} }
QmlDesigner::ModelNode GradientModel::createGradientNode() QmlDesigner::ModelNode GradientModel::createGradientNode()
{ {
NanotraceHR::Tracer tracer{"gradient model create gradient node", category()};
#ifdef QDS_USE_PROJECTSTORAGE #ifdef QDS_USE_PROJECTSTORAGE
QmlDesigner::TypeName typeName = m_gradientTypeName.toUtf8(); QmlDesigner::TypeName typeName = m_gradientTypeName.toUtf8();
auto gradientNode = view()->createModelNode(typeName); auto gradientNode = view()->createModelNode(typeName);
@@ -719,6 +787,8 @@ QmlDesigner::ModelNode GradientModel::createGradientNode()
QmlDesigner::ModelNode GradientModel::createGradientStopNode() QmlDesigner::ModelNode GradientModel::createGradientStopNode()
{ {
NanotraceHR::Tracer tracer{"gradient model create gradient stop node", category()};
#ifdef QDS_USE_PROJECTSTORAGE #ifdef QDS_USE_PROJECTSTORAGE
return view()->createModelNode("GradientStop"); return view()->createModelNode("GradientStop");
#else #else
@@ -734,6 +804,8 @@ QmlDesigner::ModelNode GradientModel::createGradientStopNode()
void GradientModel::deleteGradientNode(bool saveTransaction) void GradientModel::deleteGradientNode(bool saveTransaction)
{ {
NanotraceHR::Tracer tracer{"gradient model delete gradient node", category()};
QmlDesigner::ModelNode modelNode = m_itemNode.modelNode(); QmlDesigner::ModelNode modelNode = m_itemNode.modelNode();
if (m_itemNode.isInBaseState()) { if (m_itemNode.isInBaseState()) {
@@ -754,6 +826,8 @@ void GradientModel::deleteGradientNode(bool saveTransaction)
bool GradientModel::hasPercentageGradientProperty(const QString &propertyName) const bool GradientModel::hasPercentageGradientProperty(const QString &propertyName) const
{ {
NanotraceHR::Tracer tracer{"gradient model has percentage gradient property", category()};
bool result = false; bool result = false;
getPercentageGradientProperty(propertyName.toUtf8(), &result); getPercentageGradientProperty(propertyName.toUtf8(), &result);
return result; return result;
@@ -762,6 +836,8 @@ bool GradientModel::hasPercentageGradientProperty(const QString &propertyName) c
qreal GradientModel::getPercentageGradientProperty(const QmlDesigner::PropertyNameView propertyName, qreal GradientModel::getPercentageGradientProperty(const QmlDesigner::PropertyNameView propertyName,
bool *ok) const bool *ok) const
{ {
NanotraceHR::Tracer tracer{"gradient model get percentage gradient property", category()};
if (ok != nullptr) if (ok != nullptr)
*ok = false; *ok = false;
@@ -809,6 +885,8 @@ qreal GradientModel::getPercentageGradientProperty(const QmlDesigner::PropertyNa
QVariant GradientModel::getGradientPropertyVariant(const QString &propertyName) const QVariant GradientModel::getGradientPropertyVariant(const QString &propertyName) const
{ {
NanotraceHR::Tracer tracer{"gradient model get gradient property variant", category()};
if (!m_itemNode.isValid()) if (!m_itemNode.isValid())
return {}; return {};
@@ -825,6 +903,8 @@ QVariant GradientModel::getGradientPropertyVariant(const QString &propertyName)
ShapeGradientPropertyData GradientModel::getDefaultGradientPropertyData( ShapeGradientPropertyData GradientModel::getDefaultGradientPropertyData(
const QmlDesigner::PropertyNameView propertyName, const QStringView &gradientType) const const QmlDesigner::PropertyNameView propertyName, const QStringView &gradientType) const
{ {
NanotraceHR::Tracer tracer{"gradient model get default gradient property data", category()};
const auto *gradData = getDefaultGradientData(propertyName, gradientType); const auto *gradData = getDefaultGradientData(propertyName, gradientType);
if (gradData != nullptr) if (gradData != nullptr)
return *gradData; return *gradData;
@@ -834,6 +914,8 @@ ShapeGradientPropertyData GradientModel::getDefaultGradientPropertyData(
void GradientModel::setGradientProperty(const QString &propertyName, qreal value) void GradientModel::setGradientProperty(const QString &propertyName, qreal value)
{ {
NanotraceHR::Tracer tracer{"gradient model set gradient property", category()};
QTC_ASSERT(m_itemNode.isValid(), return); QTC_ASSERT(m_itemNode.isValid(), return);
QmlDesigner::QmlObjectNode gradient = m_itemNode.modelNode() QmlDesigner::QmlObjectNode gradient = m_itemNode.modelNode()
@@ -851,6 +933,8 @@ void GradientModel::setGradientProperty(const QString &propertyName, qreal value
void GradientModel::setGradientPropertyPercentage(const QString &propertyName, qreal value) void GradientModel::setGradientPropertyPercentage(const QString &propertyName, qreal value)
{ {
NanotraceHR::Tracer tracer{"gradient model set gradient property percentage", category()};
QTC_ASSERT(m_itemNode.isValid(), return); QTC_ASSERT(m_itemNode.isValid(), return);
QmlDesigner::QmlObjectNode gradient = m_itemNode.modelNode() QmlDesigner::QmlObjectNode gradient = m_itemNode.modelNode()
@@ -883,6 +967,8 @@ void GradientModel::setGradientPropertyPercentage(const QString &propertyName, q
void GradientModel::setGradientOrientation(Qt::Orientation value) void GradientModel::setGradientOrientation(Qt::Orientation value)
{ {
NanotraceHR::Tracer tracer{"gradient model set gradient orientation", category()};
QTC_ASSERT(m_itemNode.isValid(), return); QTC_ASSERT(m_itemNode.isValid(), return);
QmlDesigner::QmlObjectNode gradient = m_itemNode.modelNode() QmlDesigner::QmlObjectNode gradient = m_itemNode.modelNode()
@@ -903,6 +989,8 @@ void GradientModel::setGradientOrientation(Qt::Orientation value)
void GradientModel::setGradientPropertyUnits(const QString &propertyName, void GradientModel::setGradientPropertyUnits(const QString &propertyName,
GradientModel::GradientPropertyUnits value) GradientModel::GradientPropertyUnits value)
{ {
NanotraceHR::Tracer tracer{"gradient model set gradient property units", category()};
//translate from previous units to the new unit system //translate from previous units to the new unit system
const bool toPixels = (value == GradientPropertyUnits::Pixels); const bool toPixels = (value == GradientPropertyUnits::Pixels);
const bool toPercentage = (value == GradientPropertyUnits::Percentage); const bool toPercentage = (value == GradientPropertyUnits::Percentage);
@@ -952,6 +1040,8 @@ void GradientModel::setGradientPropertyUnits(const QString &propertyName,
void GradientModel::setPresetByID(int presetID) void GradientModel::setPresetByID(int presetID)
{ {
NanotraceHR::Tracer tracer{"gradient model set preset by ID", category()};
const QGradient gradient(GradientPresetItem::createGradientFromPreset( const QGradient gradient(GradientPresetItem::createGradientFromPreset(
static_cast<GradientPresetItem::Preset>(presetID))); static_cast<GradientPresetItem::Preset>(presetID)));
const QList<QGradientStop> gradientStops = gradient.stops().toList(); const QList<QGradientStop> gradientStops = gradient.stops().toList();
@@ -971,6 +1061,8 @@ void GradientModel::setPresetByStops(const QList<qreal> &stopsPositions,
int stopsCount, int stopsCount,
bool saveTransaction) bool saveTransaction)
{ {
NanotraceHR::Tracer tracer{"gradient model set preset by stops", category()};
if (m_locked) if (m_locked)
return; return;
@@ -1017,6 +1109,8 @@ void GradientModel::setPresetByStops(const QList<qreal> &stopsPositions,
void GradientModel::savePreset() void GradientModel::savePreset()
{ {
NanotraceHR::Tracer tracer{"gradient model save preset", category()};
//preparing qgradient: //preparing qgradient:
QGradient currentGradient; QGradient currentGradient;
QGradientStops currentStops; QGradientStops currentStops;
@@ -1040,6 +1134,8 @@ void GradientModel::savePreset()
void GradientModel::updateGradient() void GradientModel::updateGradient()
{ {
NanotraceHR::Tracer tracer{"gradient model update gradient", category()};
beginResetModel(); beginResetModel();
QList<qreal> stops; QList<qreal> stops;

View File

@@ -3,6 +3,7 @@
#include "gradientpresetcustomlistmodel.h" #include "gradientpresetcustomlistmodel.h"
#include "gradientpresetitem.h" #include "gradientpresetitem.h"
#include "propertyeditortracing.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
@@ -14,7 +15,9 @@
#include <QSettings> #include <QSettings>
#include <QFile> #include <QFile>
namespace Internal { namespace {
auto category = QmlDesigner::PropertyEditorTracing::category;
const char settingsKey[] = "GradientPresetCustomList"; const char settingsKey[] = "GradientPresetCustomList";
const char settingsFileName[] = "GradientPresets.ini"; const char settingsFileName[] = "GradientPresets.ini";
@@ -27,45 +30,56 @@ QString settingsFullFilePath(const QSettings::Scope &scope)
return Core::ICore::userResourcePath(settingsFileName).toUrlishString(); return Core::ICore::userResourcePath(settingsFileName).toUrlishString();
} }
} // namespace Internal } // namespace
GradientPresetCustomListModel::GradientPresetCustomListModel(QObject *parent) GradientPresetCustomListModel::GradientPresetCustomListModel(QObject *parent)
: GradientPresetListModel(parent) : GradientPresetListModel(parent)
, m_filename(getFilename()) , m_filename(getFilename())
{ {
NanotraceHR::Tracer tracer{"gradient preset custom list model constructor", category()};
readPresets(); readPresets();
} }
GradientPresetCustomListModel::~GradientPresetCustomListModel() {} GradientPresetCustomListModel::~GradientPresetCustomListModel()
{
NanotraceHR::Tracer tracer{"gradient preset custom list model destructor", category()};
}
void GradientPresetCustomListModel::registerDeclarativeType() void GradientPresetCustomListModel::registerDeclarativeType()
{ {
qmlRegisterType<GradientPresetCustomListModel>("HelperWidgets", NanotraceHR::Tracer tracer{"gradient preset custom list model register declarative type",
2, category()};
0,
"GradientPresetCustomListModel"); qmlRegisterType<GradientPresetCustomListModel>("HelperWidgets", 2, 0, "GradientPresetCustomListModel");
} }
QString GradientPresetCustomListModel::getFilename() QString GradientPresetCustomListModel::getFilename()
{ {
return Internal::settingsFullFilePath(QSettings::UserScope); NanotraceHR::Tracer tracer{"gradient preset custom list model get filename", category()};
return settingsFullFilePath(QSettings::UserScope);
} }
void GradientPresetCustomListModel::storePresets(const QString &filename, void GradientPresetCustomListModel::storePresets(const QString &filename,
const QList<GradientPresetItem> &items) const QList<GradientPresetItem> &items)
{ {
NanotraceHR::Tracer tracer{"gradient preset custom list model store presets", category()};
const QList<QVariant> presets = Utils::transform<QList<QVariant>>( const QList<QVariant> presets = Utils::transform<QList<QVariant>>(
items, [](const GradientPresetItem &item) { return QVariant::fromValue(item); }); items, [](const GradientPresetItem &item) { return QVariant::fromValue(item); });
QSettings settings(filename, QSettings::IniFormat); QSettings settings(filename, QSettings::IniFormat);
settings.clear(); settings.clear();
settings.setValue(Internal::settingsKey, QVariant::fromValue(presets)); settings.setValue(settingsKey, QVariant::fromValue(presets));
} }
QList<GradientPresetItem> GradientPresetCustomListModel::storedPresets(const QString &filename) QList<GradientPresetItem> GradientPresetCustomListModel::storedPresets(const QString &filename)
{ {
NanotraceHR::Tracer tracer{"gradient preset custom list model stored presets", category()};
const QSettings settings(filename, QSettings::IniFormat); const QSettings settings(filename, QSettings::IniFormat);
const QVariant presetSettings = settings.value(Internal::settingsKey); const QVariant presetSettings = settings.value(settingsKey);
if (!presetSettings.isValid()) if (!presetSettings.isValid())
return {}; return {};
@@ -86,6 +100,8 @@ void GradientPresetCustomListModel::addGradient(const QList<qreal> &stopsPositio
const QList<QString> &stopsColors, const QList<QString> &stopsColors,
int stopsCount) int stopsCount)
{ {
NanotraceHR::Tracer tracer{"gradient preset custom list model add gradient", category()};
QGradient tempGradient; QGradient tempGradient;
QGradientStops gradientStops; QGradientStops gradientStops;
QGradientStop gradientStop; QGradientStop gradientStop;
@@ -102,6 +118,8 @@ void GradientPresetCustomListModel::addGradient(const QList<qreal> &stopsPositio
void GradientPresetCustomListModel::changePresetName(int id, const QString &newName) void GradientPresetCustomListModel::changePresetName(int id, const QString &newName)
{ {
NanotraceHR::Tracer tracer{"gradient preset custom list model change preset name", category()};
QTC_ASSERT(id >= 0, return); QTC_ASSERT(id >= 0, return);
QTC_ASSERT(id < m_items.size(), return); QTC_ASSERT(id < m_items.size(), return);
m_items[id].setPresetName(newName); m_items[id].setPresetName(newName);
@@ -110,6 +128,8 @@ void GradientPresetCustomListModel::changePresetName(int id, const QString &newN
void GradientPresetCustomListModel::deletePreset(int id) void GradientPresetCustomListModel::deletePreset(int id)
{ {
NanotraceHR::Tracer tracer{"gradient preset custom list model delete preset", category()};
QTC_ASSERT(id >= 0, return); QTC_ASSERT(id >= 0, return);
QTC_ASSERT(id < m_items.size(), return); QTC_ASSERT(id < m_items.size(), return);
beginResetModel(); beginResetModel();
@@ -120,11 +140,15 @@ void GradientPresetCustomListModel::deletePreset(int id)
void GradientPresetCustomListModel::writePresets() void GradientPresetCustomListModel::writePresets()
{ {
NanotraceHR::Tracer tracer{"gradient preset custom list model write presets", category()};
storePresets(m_filename, m_items); storePresets(m_filename, m_items);
} }
void GradientPresetCustomListModel::readPresets() void GradientPresetCustomListModel::readPresets()
{ {
NanotraceHR::Tracer tracer{"gradient preset custom list model read presets", category()};
const QList<GradientPresetItem> presets = storedPresets(m_filename); const QList<GradientPresetItem> presets = storedPresets(m_filename);
beginResetModel(); beginResetModel();
m_items.clear(); m_items.clear();

View File

@@ -3,22 +3,33 @@
#include "gradientpresetdefaultlistmodel.h" #include "gradientpresetdefaultlistmodel.h"
#include "gradientpresetitem.h" #include "gradientpresetitem.h"
#include "propertyeditortracing.h"
#include <QHash> #include <QHash>
#include <QByteArray> #include <QByteArray>
#include <QDebug> #include <QDebug>
#include <QFile> #include <QFile>
static auto category = QmlDesigner::PropertyEditorTracing::category;
GradientPresetDefaultListModel::GradientPresetDefaultListModel(QObject *parent) GradientPresetDefaultListModel::GradientPresetDefaultListModel(QObject *parent)
: GradientPresetListModel(parent) : GradientPresetListModel(parent)
{ {
NanotraceHR::Tracer tracer{"gradient preset default list model constructor", category()};
addAllPresets(); addAllPresets();
} }
GradientPresetDefaultListModel::~GradientPresetDefaultListModel() {} GradientPresetDefaultListModel::~GradientPresetDefaultListModel()
{
NanotraceHR::Tracer tracer{"gradient preset default list model destructor", category()};
}
void GradientPresetDefaultListModel::registerDeclarativeType() void GradientPresetDefaultListModel::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"gradient preset default list model register declarative type",
category()};
qmlRegisterType<GradientPresetDefaultListModel>("HelperWidgets", qmlRegisterType<GradientPresetDefaultListModel>("HelperWidgets",
2, 2,
0, 0,
@@ -27,6 +38,8 @@ void GradientPresetDefaultListModel::registerDeclarativeType()
void GradientPresetDefaultListModel::addAllPresets() void GradientPresetDefaultListModel::addAllPresets()
{ {
NanotraceHR::Tracer tracer{"gradient preset default list model add all presets", category()};
const QMetaObject &metaObj = QGradient::staticMetaObject; const QMetaObject &metaObj = QGradient::staticMetaObject;
const QMetaEnum metaEnum = metaObj.enumerator(metaObj.indexOfEnumerator("Preset")); const QMetaEnum metaEnum = metaObj.enumerator(metaObj.indexOfEnumerator("Preset"));

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 "gradientpresetitem.h" #include "gradientpresetitem.h"
#include "propertyeditortracing.h"
#include <utils/qtcassert.h> #include <utils/qtcassert.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
@@ -14,26 +15,36 @@
#include <algorithm> #include <algorithm>
static auto category = QmlDesigner::PropertyEditorTracing::category;
GradientPresetItem::GradientPresetItem() GradientPresetItem::GradientPresetItem()
: m_gradientVal(QGradient()) : m_gradientVal(QGradient())
, m_gradientID(Preset(0)) , m_gradientID(Preset(0))
, m_presetName(QString()) , m_presetName(QString())
{} {
NanotraceHR::Tracer tracer{"gradient preset item default constructor", category()};
}
GradientPresetItem::GradientPresetItem(const QGradient &value, const QString &name) GradientPresetItem::GradientPresetItem(const QGradient &value, const QString &name)
: m_gradientVal(value) : m_gradientVal(value)
, m_gradientID(Preset(0)) , m_gradientID(Preset(0))
, m_presetName(name) , m_presetName(name)
{} {
NanotraceHR::Tracer tracer{"gradient preset item constructor with gradient and name", category()};
}
GradientPresetItem::GradientPresetItem(const Preset value) GradientPresetItem::GradientPresetItem(const Preset value)
: m_gradientVal(createGradientFromPreset(value)) : m_gradientVal(createGradientFromPreset(value))
, m_gradientID(value) , m_gradientID(value)
, m_presetName(getNameByPreset(value)) , m_presetName(getNameByPreset(value))
{} {
NanotraceHR::Tracer tracer{"gradient preset item constructor with preset", category()};
}
QVariant GradientPresetItem::getProperty(GradientPresetItem::Property id) const QVariant GradientPresetItem::getProperty(GradientPresetItem::Property id) const
{ {
NanotraceHR::Tracer tracer{"gradient preset item get property", category()};
QVariant out; QVariant out;
switch (id) { switch (id) {
@@ -65,11 +76,15 @@ QVariant GradientPresetItem::getProperty(GradientPresetItem::Property id) const
QGradient GradientPresetItem::gradientVal() const QGradient GradientPresetItem::gradientVal() const
{ {
NanotraceHR::Tracer tracer{"gradient preset item gradient value", category()};
return m_gradientVal; return m_gradientVal;
} }
void GradientPresetItem::setGradient(const QGradient &value) void GradientPresetItem::setGradient(const QGradient &value)
{ {
NanotraceHR::Tracer tracer{"gradient preset item set gradient", category()};
m_gradientVal = value; m_gradientVal = value;
m_gradientID = Preset(0); m_gradientID = Preset(0);
m_presetName = QString(); m_presetName = QString();
@@ -77,6 +92,8 @@ void GradientPresetItem::setGradient(const QGradient &value)
void GradientPresetItem::setGradient(const Preset value) void GradientPresetItem::setGradient(const Preset value)
{ {
NanotraceHR::Tracer tracer{"gradient preset item set gradient by preset", category()};
m_gradientID = value; m_gradientID = value;
m_gradientVal = createGradientFromPreset(value); m_gradientVal = createGradientFromPreset(value);
m_presetName = getNameByPreset(value); m_presetName = getNameByPreset(value);
@@ -84,6 +101,8 @@ void GradientPresetItem::setGradient(const Preset value)
QList<qreal> GradientPresetItem::stopsPosList() const QList<qreal> GradientPresetItem::stopsPosList() const
{ {
NanotraceHR::Tracer tracer{"gradient preset item stops position list", category()};
const QList<QPair<qreal, QColor>> subres = m_gradientVal.stops().toList(); const QList<QPair<qreal, QColor>> subres = m_gradientVal.stops().toList();
const QList<qreal> result = Utils::transform<QList<qreal>>(subres, const QList<qreal> result = Utils::transform<QList<qreal>>(subres,
[](const QPair<qreal, QColor> &item) { [](const QPair<qreal, QColor> &item) {
@@ -94,6 +113,8 @@ QList<qreal> GradientPresetItem::stopsPosList() const
QList<QString> GradientPresetItem::stopsColorList() const QList<QString> GradientPresetItem::stopsColorList() const
{ {
NanotraceHR::Tracer tracer{"gradient preset item stops color list", category()};
const QList<QPair<qreal, QColor>> subres = m_gradientVal.stops().toList(); const QList<QPair<qreal, QColor>> subres = m_gradientVal.stops().toList();
const QList<QString> result const QList<QString> result
= Utils::transform<QList<QString>>(subres, [](const QPair<qreal, QColor> &item) { = Utils::transform<QList<QString>>(subres, [](const QPair<qreal, QColor> &item) {
@@ -104,26 +125,36 @@ QList<QString> GradientPresetItem::stopsColorList() const
int GradientPresetItem::stopListSize() const int GradientPresetItem::stopListSize() const
{ {
NanotraceHR::Tracer tracer{"gradient preset item stop list size", category()};
return m_gradientVal.stops().size(); return m_gradientVal.stops().size();
} }
void GradientPresetItem::setPresetName(const QString &value) void GradientPresetItem::setPresetName(const QString &value)
{ {
NanotraceHR::Tracer tracer{"gradient preset item set preset name", category()};
m_presetName = value; m_presetName = value;
} }
QString GradientPresetItem::presetName() const QString GradientPresetItem::presetName() const
{ {
NanotraceHR::Tracer tracer{"gradient preset item preset name", category()};
return m_presetName; return m_presetName;
} }
int GradientPresetItem::presetID() const int GradientPresetItem::presetID() const
{ {
NanotraceHR::Tracer tracer{"gradient preset item preset ID", category()};
return static_cast<int>(m_gradientID); return static_cast<int>(m_gradientID);
} }
QString GradientPresetItem::getNameByPreset(Preset value) QString GradientPresetItem::getNameByPreset(Preset value)
{ {
NanotraceHR::Tracer tracer{"gradient preset item get name by preset", category()};
const QMetaObject &metaObj = QGradient::staticMetaObject; const QMetaObject &metaObj = QGradient::staticMetaObject;
const QMetaEnum metaEnum = metaObj.enumerator(metaObj.indexOfEnumerator("Preset")); const QMetaEnum metaEnum = metaObj.enumerator(metaObj.indexOfEnumerator("Preset"));
@@ -143,6 +174,8 @@ QString GradientPresetItem::getNameByPreset(Preset value)
QGradient GradientPresetItem::createGradientFromPreset(Preset value) QGradient GradientPresetItem::createGradientFromPreset(Preset value)
{ {
NanotraceHR::Tracer tracer{"gradient preset item create gradient from preset", category()};
return QGradient(value); return QGradient(value);
} }
@@ -156,6 +189,7 @@ QDebug &operator<<(QDebug &stream, const GradientPresetItem &gradient)
QDataStream &operator<<(QDataStream &stream, const GradientPresetItem &gradient) QDataStream &operator<<(QDataStream &stream, const GradientPresetItem &gradient)
{ {
NanotraceHR::Tracer tracer{"gradient preset item operator <<", category()};
stream << gradient.m_gradientVal.stops(); stream << gradient.m_gradientVal.stops();
stream << static_cast<int>(gradient.m_gradientID); stream << static_cast<int>(gradient.m_gradientID);
@@ -165,6 +199,8 @@ QDataStream &operator<<(QDataStream &stream, const GradientPresetItem &gradient)
QDataStream &operator>>(QDataStream &stream, GradientPresetItem &gradient) QDataStream &operator>>(QDataStream &stream, GradientPresetItem &gradient)
{ {
NanotraceHR::Tracer tracer{"gradient preset item operator >>", category()};
QGradientStops stops; QGradientStops stops;
stream >> stops; stream >> stops;
gradient.m_gradientVal.setStops(stops); gradient.m_gradientVal.setStops(stops);

View File

@@ -3,18 +3,23 @@
#include "gradientpresetlistmodel.h" #include "gradientpresetlistmodel.h"
#include "gradientpresetitem.h" #include "gradientpresetitem.h"
#include "propertyeditortracing.h"
#include <QHash> #include <QHash>
#include <QByteArray> #include <QByteArray>
#include <QDebug> #include <QDebug>
static auto category = QmlDesigner::PropertyEditorTracing::category;
GradientPresetListModel::GradientPresetListModel(QObject *parent) GradientPresetListModel::GradientPresetListModel(QObject *parent)
: QAbstractListModel(parent) : QAbstractListModel(parent)
{ {
m_roleNames NanotraceHR::Tracer tracer{"gradient preset list model constructor", category()};
= {{static_cast<int>(GradientPresetItem::Property::objectNameRole), "objectName"},
m_roleNames = {{static_cast<int>(GradientPresetItem::Property::objectNameRole), "objectName"},
{static_cast<int>(GradientPresetItem::Property::stopsPosListRole), "stopsPosList"}, {static_cast<int>(GradientPresetItem::Property::stopsPosListRole), "stopsPosList"},
{static_cast<int>(GradientPresetItem::Property::stopsColorListRole), "stopsColorList"}, {static_cast<int>(GradientPresetItem::Property::stopsColorListRole),
"stopsColorList"},
{static_cast<int>(GradientPresetItem::Property::stopListSizeRole), "stopListSize"}, {static_cast<int>(GradientPresetItem::Property::stopListSizeRole), "stopListSize"},
{static_cast<int>(GradientPresetItem::Property::presetNameRole), "presetName"}, {static_cast<int>(GradientPresetItem::Property::presetNameRole), "presetName"},
{static_cast<int>(GradientPresetItem::Property::presetIDRole), "presetID"}}; {static_cast<int>(GradientPresetItem::Property::presetIDRole), "presetID"}};
@@ -22,16 +27,22 @@ GradientPresetListModel::GradientPresetListModel(QObject *parent)
GradientPresetListModel::~GradientPresetListModel() GradientPresetListModel::~GradientPresetListModel()
{ {
NanotraceHR::Tracer tracer{"gradient preset list model destructor", category()};
clearItems(); clearItems();
} }
int GradientPresetListModel::rowCount(const QModelIndex & /*parent*/) const int GradientPresetListModel::rowCount(const QModelIndex & /*parent*/) const
{ {
NanotraceHR::Tracer tracer{"gradient preset list model row count", category()};
return m_items.size(); return m_items.size();
} }
QVariant GradientPresetListModel::data(const QModelIndex &index, int role) const QVariant GradientPresetListModel::data(const QModelIndex &index, int role) const
{ {
NanotraceHR::Tracer tracer{"gradient preset list model data", category()};
if (index.isValid() && (index.row() >= 0) && (index.row() < m_items.size())) { if (index.isValid() && (index.row() >= 0) && (index.row() < m_items.size())) {
if (m_roleNames.contains(role)) { if (m_roleNames.contains(role)) {
QVariant value = m_items.at(index.row()) QVariant value = m_items.at(index.row())
@@ -53,11 +64,15 @@ QVariant GradientPresetListModel::data(const QModelIndex &index, int role) const
QHash<int, QByteArray> GradientPresetListModel::roleNames() const QHash<int, QByteArray> GradientPresetListModel::roleNames() const
{ {
NanotraceHR::Tracer tracer{"gradient preset list model role names", category()};
return m_roleNames; return m_roleNames;
} }
void GradientPresetListModel::clearItems() void GradientPresetListModel::clearItems()
{ {
NanotraceHR::Tracer tracer{"gradient preset list model clear items", category()};
beginResetModel(); beginResetModel();
m_items.clear(); m_items.clear();
endResetModel(); endResetModel();
@@ -65,6 +80,8 @@ void GradientPresetListModel::clearItems()
void GradientPresetListModel::addItem(const GradientPresetItem &element) void GradientPresetListModel::addItem(const GradientPresetItem &element)
{ {
NanotraceHR::Tracer tracer{"gradient preset list model add item", category()};
beginResetModel(); beginResetModel();
m_items.append(element); m_items.append(element);
endResetModel(); endResetModel();
@@ -72,16 +89,21 @@ void GradientPresetListModel::addItem(const GradientPresetItem &element)
const QList<GradientPresetItem> &GradientPresetListModel::items() const const QList<GradientPresetItem> &GradientPresetListModel::items() const
{ {
NanotraceHR::Tracer tracer{"gradient preset list model items", category()};
return m_items; return m_items;
} }
void GradientPresetListModel::sortItems() void GradientPresetListModel::sortItems()
{ {
NanotraceHR::Tracer tracer{"gradient preset list model sort items", category()};
std::ranges::sort(m_items, {}, &GradientPresetItem::presetID); std::ranges::sort(m_items, {}, &GradientPresetItem::presetID);
} }
void GradientPresetListModel::registerDeclarativeType() void GradientPresetListModel::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"gradient preset list model register declarative type", category()};
qmlRegisterType<GradientPresetListModel>("HelperWidgets", 2, 0, "GradientPresetListModel"); qmlRegisterType<GradientPresetListModel>("HelperWidgets", 2, 0, "GradientPresetListModel");
} }

View File

@@ -2,18 +2,23 @@
// 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 "instanceimageprovider.h" #include "instanceimageprovider.h"
#include "propertyeditortracing.h"
#include <abstractview.h> #include <abstractview.h>
#include <QTimer> #include <QTimer>
static auto category = QmlDesigner::PropertyEditorTracing::category;
static const char INSTANCE_IMAGE_REQUEST_ID[] = "PropertyEditor.InstanceImage"; static const char INSTANCE_IMAGE_REQUEST_ID[] = "PropertyEditor.InstanceImage";
namespace QmlDesigner { namespace QmlDesigner {
InstanceImageProvider::InstanceImageProvider() InstanceImageProvider::InstanceImageProvider()
: QQuickImageProvider(Pixmap) : QQuickImageProvider(Pixmap)
, m_delayTimer(new QTimer(this)) , m_delayTimer(std::make_unique<QTimer>())
{ {
NanotraceHR::Tracer tracer{"instance image provider constructor", category()};
m_delayTimer->setInterval(500); m_delayTimer->setInterval(500);
m_delayTimer->setSingleShot(true); m_delayTimer->setSingleShot(true);
m_delayTimer->callOnTimeout([this] { requestOne(); }); m_delayTimer->callOnTimeout([this] { requestOne(); });
@@ -30,6 +35,8 @@ InstanceImageProvider::InstanceImageProvider()
*/ */
QPixmap InstanceImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) QPixmap InstanceImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
{ {
NanotraceHR::Tracer tracer{"instance image provider request pixmap", category()};
using namespace Qt::StringLiterals; using namespace Qt::StringLiterals;
static const QPixmap defaultImage = QPixmap::fromImage( static const QPixmap defaultImage = QPixmap::fromImage(
QImage(":/propertyeditor/images/defaultmaterialpreview.png")); QImage(":/propertyeditor/images/defaultmaterialpreview.png"));
@@ -69,6 +76,8 @@ bool InstanceImageProvider::feedImage(const ModelNode &node,
const QPixmap &pixmap, const QPixmap &pixmap,
const QByteArray &requestId) const QByteArray &requestId)
{ {
NanotraceHR::Tracer tracer{"instance image provider feed image", category()};
if (!requestId.startsWith(INSTANCE_IMAGE_REQUEST_ID)) if (!requestId.startsWith(INSTANCE_IMAGE_REQUEST_ID))
return false; return false;
@@ -83,16 +92,22 @@ bool InstanceImageProvider::feedImage(const ModelNode &node,
void InstanceImageProvider::setModelNode(const ModelNode &node) void InstanceImageProvider::setModelNode(const ModelNode &node)
{ {
NanotraceHR::Tracer tracer{"instance image provider set model node", category()};
m_requestedNode = node; m_requestedNode = node;
} }
bool InstanceImageProvider::hasPendingRequest() const bool InstanceImageProvider::hasPendingRequest() const
{ {
NanotraceHR::Tracer tracer{"instance image provider has pending request", category()};
return !m_pendingRequest.isEmpty(); return !m_pendingRequest.isEmpty();
} }
void InstanceImageProvider::requestOne() void InstanceImageProvider::requestOne()
{ {
NanotraceHR::Tracer tracer{"instance image provider request one", category()};
if (!m_requestedNode) if (!m_requestedNode)
return; return;
@@ -109,18 +124,24 @@ void InstanceImageProvider::requestOne()
void InstanceImageProvider::requestOne(QSize size) void InstanceImageProvider::requestOne(QSize size)
{ {
NanotraceHR::Tracer tracer{"instance image provider request one with size", category()};
prepareRequest(size); prepareRequest(size);
requestOne(); requestOne();
} }
void InstanceImageProvider::postponeRequest(QSize size) void InstanceImageProvider::postponeRequest(QSize size)
{ {
NanotraceHR::Tracer tracer{"instance image provider postpone request", category()};
prepareRequest(size); prepareRequest(size);
QMetaObject::invokeMethod(m_delayTimer, static_cast<void (QTimer::*)()>(&QTimer::start)); QMetaObject::invokeMethod(m_delayTimer.get(), static_cast<void (QTimer::*)()>(&QTimer::start));
} }
void InstanceImageProvider::prepareRequest(QSize size) void InstanceImageProvider::prepareRequest(QSize size)
{ {
NanotraceHR::Tracer tracer{"instance image provider prepare request", category()};
m_requestedSize = size; m_requestedSize = size;
} }
@@ -131,16 +152,22 @@ void InstanceImageProvider::prepareRequest(QSize size)
*/ */
bool InstanceImageProvider::dataAvailable(const ModelNode &node, QSize size) bool InstanceImageProvider::dataAvailable(const ModelNode &node, QSize size)
{ {
NanotraceHR::Tracer tracer{"instance image provider data available", category()};
return !m_resetRequest && node == m_receivedNode && size == m_receivedImage.size(); return !m_resetRequest && node == m_receivedNode && size == m_receivedImage.size();
} }
void InstanceImageProvider::invalidate() void InstanceImageProvider::invalidate()
{ {
NanotraceHR::Tracer tracer{"instance image provider invalidate", category()};
m_resetRequest = true; m_resetRequest = true;
} }
QPixmap InstanceImageProvider::getScaledImage(QSize size) QPixmap InstanceImageProvider::getScaledImage(QSize size)
{ {
NanotraceHR::Tracer tracer{"instance image provider get scaled image", category()};
if (size == m_receivedImage.size()) if (size == m_receivedImage.size())
return m_receivedImage; return m_receivedImage;
else else

View File

@@ -47,7 +47,7 @@ private:
QPixmap m_receivedImage; QPixmap m_receivedImage;
QTimer *m_delayTimer = nullptr; std::unique_ptr<QTimer> m_delayTimer;
}; };
} // namespace QmlDesigner } // namespace QmlDesigner

View File

@@ -3,6 +3,8 @@
#include "itemfiltermodel.h" #include "itemfiltermodel.h"
#include "propertyeditortracing.h"
#include <abstractview.h> #include <abstractview.h>
#include <model.h> #include <model.h>
#include <nodemetainfo.h> #include <nodemetainfo.h>
@@ -15,6 +17,8 @@
using namespace QmlDesigner; using namespace QmlDesigner;
static auto category = QmlDesigner::PropertyEditorTracing::category;
ItemFilterModel::ItemFilterModel(QObject *parent) ItemFilterModel::ItemFilterModel(QObject *parent)
: QAbstractListModel(parent) : QAbstractListModel(parent)
, m_typeFilter("QtQuick.Item") , m_typeFilter("QtQuick.Item")
@@ -23,7 +27,9 @@ ItemFilterModel::ItemFilterModel(QObject *parent)
void ItemFilterModel::setModelNodeBackend(const QVariant &modelNodeBackend) void ItemFilterModel::setModelNodeBackend(const QVariant &modelNodeBackend)
{ {
auto modelNodeBackendObject = modelNodeBackend.value<QObject*>(); NanotraceHR::Tracer tracer{"item filter model set model node backend", category()};
auto modelNodeBackendObject = modelNodeBackend.value<QObject *>();
const auto backendObjectCasted = const auto backendObjectCasted =
qobject_cast<const QmlModelNodeProxy *>(modelNodeBackendObject); qobject_cast<const QmlModelNodeProxy *>(modelNodeBackendObject);
@@ -44,6 +50,8 @@ void ItemFilterModel::setModelNodeBackend(const QVariant &modelNodeBackend)
void ItemFilterModel::setTypeFilter(const QString &filter) void ItemFilterModel::setTypeFilter(const QString &filter)
{ {
NanotraceHR::Tracer tracer{"item filter model set type filter", category()};
if (m_typeFilter == filter) if (m_typeFilter == filter)
return; return;
@@ -54,6 +62,8 @@ void ItemFilterModel::setTypeFilter(const QString &filter)
void ItemFilterModel::setSelectionOnly(bool value) void ItemFilterModel::setSelectionOnly(bool value)
{ {
NanotraceHR::Tracer tracer{"item filter model set selection only", category()};
if (m_selectionOnly == value) if (m_selectionOnly == value)
return; return;
@@ -64,12 +74,16 @@ void ItemFilterModel::setSelectionOnly(bool value)
void ItemFilterModel::setSelectedItems(const QStringList &selectedItems) void ItemFilterModel::setSelectedItems(const QStringList &selectedItems)
{ {
NanotraceHR::Tracer tracer{"item filter model set selected items", category()};
m_selectedItems = selectedItems; m_selectedItems = selectedItems;
emit selectedItemsChanged(); emit selectedItemsChanged();
} }
void ItemFilterModel::setValidationRoles(const QStringList &validationRoles) void ItemFilterModel::setValidationRoles(const QStringList &validationRoles)
{ {
NanotraceHR::Tracer tracer{"item filter model set validation roles", category()};
auto tmp = validationRoles; auto tmp = validationRoles;
tmp.removeDuplicates(); tmp.removeDuplicates();
@@ -83,21 +97,29 @@ void ItemFilterModel::setValidationRoles(const QStringList &validationRoles)
QString ItemFilterModel::typeFilter() const QString ItemFilterModel::typeFilter() const
{ {
NanotraceHR::Tracer tracer{"item filter model type filter", category()};
return m_typeFilter; return m_typeFilter;
} }
bool ItemFilterModel::selectionOnly() const bool ItemFilterModel::selectionOnly() const
{ {
NanotraceHR::Tracer tracer{"item filter model selection only", category()};
return m_selectionOnly; return m_selectionOnly;
} }
QStringList ItemFilterModel::selectedItems() const QStringList ItemFilterModel::selectedItems() const
{ {
NanotraceHR::Tracer tracer{"item filter model selected items", category()};
return m_selectedItems; return m_selectedItems;
} }
QStringList ItemFilterModel::itemModel() const QStringList ItemFilterModel::itemModel() const
{ {
NanotraceHR::Tracer tracer{"item filter model item model", category()};
AbstractView *view = m_modelNode.view(); AbstractView *view = m_modelNode.view();
if (!view || !view->model()) if (!view || !view->model())
return {}; return {};
@@ -111,16 +133,22 @@ QStringList ItemFilterModel::itemModel() const
QStringList ItemFilterModel::validationRoles() const QStringList ItemFilterModel::validationRoles() const
{ {
NanotraceHR::Tracer tracer{"item filter model validation roles", category()};
return m_validationRoles; return m_validationRoles;
} }
QStringList ItemFilterModel::validationItems() const QStringList ItemFilterModel::validationItems() const
{ {
NanotraceHR::Tracer tracer{"item filter model validation items", category()};
return m_validationItems; return m_validationItems;
} }
QVariant ItemFilterModel::modelItemData(int row) const QVariant ItemFilterModel::modelItemData(int row) const
{ {
NanotraceHR::Tracer tracer{"item filter model model item data", category()};
QModelIndex idx = index(row, 0, {}); QModelIndex idx = index(row, 0, {});
if (!idx.isValid()) if (!idx.isValid())
return {}; return {};
@@ -141,6 +169,8 @@ QVariant ItemFilterModel::modelItemData(int row) const
int ItemFilterModel::indexFromId(const QString &id) const int ItemFilterModel::indexFromId(const QString &id) const
{ {
NanotraceHR::Tracer tracer{"item filter model index from id", category()};
AbstractView *view = m_modelNode.view(); AbstractView *view = m_modelNode.view();
if (!view || !view->model()) if (!view || !view->model())
return -1; return -1;
@@ -156,16 +186,22 @@ int ItemFilterModel::indexFromId(const QString &id) const
void ItemFilterModel::registerDeclarativeType() void ItemFilterModel::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"item filter model register declarative type", category()};
qmlRegisterType<ItemFilterModel>("HelperWidgets", 2, 0, "ItemFilterModel"); qmlRegisterType<ItemFilterModel>("HelperWidgets", 2, 0, "ItemFilterModel");
} }
int ItemFilterModel::rowCount(const QModelIndex &) const int ItemFilterModel::rowCount(const QModelIndex &) const
{ {
NanotraceHR::Tracer tracer{"item filter model row count", category()};
return m_modelInternalIds.size(); return m_modelInternalIds.size();
} }
QVariant ItemFilterModel::data(const QModelIndex &index, int role) const QVariant ItemFilterModel::data(const QModelIndex &index, int role) const
{ {
NanotraceHR::Tracer tracer{"item filter model data", category()};
if (!index.isValid() || index.row() >= rowCount()) if (!index.isValid() || index.row() >= rowCount())
return {}; return {};
@@ -188,6 +224,8 @@ QVariant ItemFilterModel::data(const QModelIndex &index, int role) const
QHash<int, QByteArray> ItemFilterModel::roleNames() const QHash<int, QByteArray> ItemFilterModel::roleNames() const
{ {
NanotraceHR::Tracer tracer{"item filter model role names", category()};
static QHash<int, QByteArray> roleNames{{IdRole, "id"}, static QHash<int, QByteArray> roleNames{{IdRole, "id"},
{NameRole, "name"}, {NameRole, "name"},
{IdAndNameRole, "idAndName"}, {IdAndNameRole, "idAndName"},
@@ -198,11 +236,15 @@ QHash<int, QByteArray> ItemFilterModel::roleNames() const
QVariant ItemFilterModel::modelNodeBackend() const QVariant ItemFilterModel::modelNodeBackend() const
{ {
NanotraceHR::Tracer tracer{"item filter model model node backend", category()};
return {}; return {};
} }
ModelNode ItemFilterModel::modelNodeForRow(const int &row) const ModelNode ItemFilterModel::modelNodeForRow(const int &row) const
{ {
NanotraceHR::Tracer tracer{"item filter model model node for row", category()};
if (row < 0 || row >= m_modelInternalIds.size()) if (row < 0 || row >= m_modelInternalIds.size())
return {}; return {};
@@ -215,6 +257,8 @@ ModelNode ItemFilterModel::modelNodeForRow(const int &row) const
void ItemFilterModel::setupModel() void ItemFilterModel::setupModel()
{ {
NanotraceHR::Tracer tracer{"item filter model setup model", category()};
if (!m_modelNode.isValid() || !m_modelNode.view()->isAttached()) if (!m_modelNode.isValid() || !m_modelNode.view()->isAttached())
return; return;
@@ -238,6 +282,8 @@ void ItemFilterModel::setupModel()
void ItemFilterModel::setupValidationItems() void ItemFilterModel::setupValidationItems()
{ {
NanotraceHR::Tracer tracer{"item filter model setup validation items", category()};
QStringList validationItems; QStringList validationItems;
for (const QString &role : m_validationRoles) { for (const QString &role : m_validationRoles) {

View File

@@ -3,12 +3,20 @@
#include "listvalidator.h" #include "listvalidator.h"
#include "propertyeditortracing.h"
static auto category = QmlDesigner::PropertyEditorTracing::category;
ListValidator::ListValidator(QObject *parent) ListValidator::ListValidator(QObject *parent)
: QValidator{parent} : QValidator{parent}
{} {
NanotraceHR::Tracer tracer{"list validator constructor", category()};
}
QValidator::State ListValidator::validate(QString &input, int &) const QValidator::State ListValidator::validate(QString &input, int &) const
{ {
NanotraceHR::Tracer tracer{"list validator validate", category()};
if (input.isEmpty()) if (input.isEmpty())
return QValidator::Intermediate; return QValidator::Intermediate;
@@ -30,6 +38,8 @@ QValidator::State ListValidator::validate(QString &input, int &) const
void ListValidator::fixup(QString &input) const void ListValidator::fixup(QString &input) const
{ {
NanotraceHR::Tracer tracer{"list validator fixup", category()};
for (const QString &item : m_filterList) { for (const QString &item : m_filterList) {
if (item.compare(input, Qt::CaseInsensitive) == 0) { if (item.compare(input, Qt::CaseInsensitive) == 0) {
input = item; input = item;
@@ -40,6 +50,8 @@ void ListValidator::fixup(QString &input) const
void ListValidator::setFilterList(const QStringList &filterList) void ListValidator::setFilterList(const QStringList &filterList)
{ {
NanotraceHR::Tracer tracer{"list validator set filter list", category()};
if (m_filterList == filterList) if (m_filterList == filterList)
return; return;
@@ -49,10 +61,14 @@ void ListValidator::setFilterList(const QStringList &filterList)
QStringList ListValidator::filterList() const QStringList ListValidator::filterList() const
{ {
NanotraceHR::Tracer tracer{"list validator filter list", category()};
return m_filterList; return m_filterList;
} }
void ListValidator::registerDeclarativeType() void ListValidator::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"list validator register declarative type", category()};
qmlRegisterType<ListValidator>("HelperWidgets", 2, 0, "ListValidator"); qmlRegisterType<ListValidator>("HelperWidgets", 2, 0, "ListValidator");
} }

View File

@@ -3,17 +3,19 @@
#include "propertyeditorcontextobject.h" #include "propertyeditorcontextobject.h"
#include "abstractview.h"
#include "compatibleproperties.h" #include "compatibleproperties.h"
#include "easingcurvedialog.h" #include "propertyeditortracing.h"
#include "nodemetainfo.h"
#include "propertyeditorutils.h" #include "propertyeditorutils.h"
#include "qml3dnode.h"
#include "qmldesignerconstants.h" #include <abstractview.h>
#include "qmldesignerplugin.h" #include <easingcurvedialog.h>
#include "qmlmodelnodeproxy.h" #include <nodemetainfo.h>
#include "qmlobjectnode.h" #include <qml3dnode.h>
#include "qmltimeline.h" #include <qmldesignerconstants.h>
#include <qmldesignerplugin.h>
#include <qmlmodelnodeproxy.h>
#include <qmlobjectnode.h>
#include <qmltimeline.h>
#include <qmldesignerbase/settings/designersettings.h> #include <qmldesignerbase/settings/designersettings.h>
@@ -34,6 +36,8 @@
namespace QmlDesigner { namespace QmlDesigner {
static auto category = QmlDesigner::PropertyEditorTracing::category;
static Q_LOGGING_CATEGORY(urlSpecifics, "qtc.propertyeditor.specifics", QtWarningMsg) static Q_LOGGING_CATEGORY(urlSpecifics, "qtc.propertyeditor.specifics", QtWarningMsg)
PropertyEditorContextObject::PropertyEditorContextObject(QObject *parent) PropertyEditorContextObject::PropertyEditorContextObject(QObject *parent)
@@ -43,10 +47,14 @@ PropertyEditorContextObject::PropertyEditorContextObject(QObject *parent)
, m_backendValues(nullptr) , m_backendValues(nullptr)
, m_qmlComponent(nullptr) , m_qmlComponent(nullptr)
, m_qmlContext(nullptr) , m_qmlContext(nullptr)
{} {
NanotraceHR::Tracer tracer{"property editor context object constructor", category()};
}
QString PropertyEditorContextObject::convertColorToString(const QVariant &color) QString PropertyEditorContextObject::convertColorToString(const QVariant &color)
{ {
NanotraceHR::Tracer tracer{"property editor context object convert color to string", category()};
QString colorString; QString colorString;
QColor theColor; QColor theColor;
if (color.canConvert(QMetaType(QMetaType::QColor))) { if (color.canConvert(QMetaType(QMetaType::QColor))) {
@@ -69,13 +77,16 @@ QString PropertyEditorContextObject::convertColorToString(const QVariant &color)
QColor PropertyEditorContextObject::colorFromString(const QString &colorString) QColor PropertyEditorContextObject::colorFromString(const QString &colorString)
{ {
NanotraceHR::Tracer tracer{"property editor context object color from string", category()};
return QColor::fromString(colorString); return QColor::fromString(colorString);
} }
QString PropertyEditorContextObject::translateFunction() QString PropertyEditorContextObject::translateFunction()
{ {
if (QmlDesignerPlugin::instance()->settings().value( NanotraceHR::Tracer tracer{"property editor context object translate function", category()};
DesignerSettingsKey::TYPE_OF_QSTR_FUNCTION).toInt())
if (QmlDesignerPlugin::instance()->settings().value(DesignerSettingsKey::TYPE_OF_QSTR_FUNCTION).toInt())
switch (QmlDesignerPlugin::instance()->settings().value( switch (QmlDesignerPlugin::instance()->settings().value(
DesignerSettingsKey::TYPE_OF_QSTR_FUNCTION).toInt()) { DesignerSettingsKey::TYPE_OF_QSTR_FUNCTION).toInt()) {
@@ -90,6 +101,8 @@ QString PropertyEditorContextObject::translateFunction()
QStringList PropertyEditorContextObject::autoComplete(const QString &text, int pos, bool explicitComplete, bool filter) QStringList PropertyEditorContextObject::autoComplete(const QString &text, int pos, bool explicitComplete, bool filter)
{ {
NanotraceHR::Tracer tracer{"property editor context object auto complete", category()};
if (m_model && m_model->rewriterView()) if (m_model && m_model->rewriterView())
return Utils::filtered(m_model->rewriterView()->autoComplete(text, pos, explicitComplete), [filter](const QString &string) { return Utils::filtered(m_model->rewriterView()->autoComplete(text, pos, explicitComplete), [filter](const QString &string) {
return !filter || (!string.isEmpty() && string.at(0).isUpper()); }); return !filter || (!string.isEmpty() && string.at(0).isUpper()); });
@@ -99,6 +112,8 @@ QStringList PropertyEditorContextObject::autoComplete(const QString &text, int p
void PropertyEditorContextObject::toggleExportAlias() void PropertyEditorContextObject::toggleExportAlias()
{ {
NanotraceHR::Tracer tracer{"property editor context object toggle export alias", category()};
QTC_ASSERT(m_model && m_model->rewriterView(), return); QTC_ASSERT(m_model && m_model->rewriterView(), return);
/* Ideally we should not missuse the rewriterView /* Ideally we should not missuse the rewriterView
@@ -127,6 +142,8 @@ void PropertyEditorContextObject::toggleExportAlias()
void PropertyEditorContextObject::goIntoComponent() void PropertyEditorContextObject::goIntoComponent()
{ {
NanotraceHR::Tracer tracer{"property editor context object go into component", category()};
QTC_ASSERT(m_model && m_model->rewriterView(), return); QTC_ASSERT(m_model && m_model->rewriterView(), return);
/* Ideally we should not missuse the rewriterView /* Ideally we should not missuse the rewriterView
@@ -142,6 +159,8 @@ void PropertyEditorContextObject::goIntoComponent()
void PropertyEditorContextObject::changeTypeName(const QString &typeName) void PropertyEditorContextObject::changeTypeName(const QString &typeName)
{ {
NanotraceHR::Tracer tracer{"property editor context object change type name", category()};
QTC_ASSERT(m_model && m_model->rewriterView(), return); QTC_ASSERT(m_model && m_model->rewriterView(), return);
/* Ideally we should not missuse the rewriterView /* Ideally we should not missuse the rewriterView
@@ -295,11 +314,15 @@ void PropertyEditorContextObject::insertKeyframe(const QString &propertyName)
QString PropertyEditorContextObject::activeDragSuffix() const QString PropertyEditorContextObject::activeDragSuffix() const
{ {
NanotraceHR::Tracer tracer{"property editor context object active drag suffix", category()};
return m_activeDragSuffix; return m_activeDragSuffix;
} }
void PropertyEditorContextObject::setActiveDragSuffix(const QString &suffix) void PropertyEditorContextObject::setActiveDragSuffix(const QString &suffix)
{ {
NanotraceHR::Tracer tracer{"property editor context object set active drag suffix", category()};
if (m_activeDragSuffix != suffix) { if (m_activeDragSuffix != suffix) {
m_activeDragSuffix = suffix; m_activeDragSuffix = suffix;
emit activeDragSuffixChanged(); emit activeDragSuffixChanged();
@@ -308,22 +331,29 @@ void PropertyEditorContextObject::setActiveDragSuffix(const QString &suffix)
int PropertyEditorContextObject::majorVersion() const int PropertyEditorContextObject::majorVersion() const
{ {
return m_majorVersion; NanotraceHR::Tracer tracer{"property editor context object major version", category()};
return m_majorVersion;
} }
int PropertyEditorContextObject::majorQtQuickVersion() const int PropertyEditorContextObject::majorQtQuickVersion() const
{ {
NanotraceHR::Tracer tracer{"property editor context object major Qt Quick version", category()};
return m_majorQtQuickVersion; return m_majorQtQuickVersion;
} }
int PropertyEditorContextObject::minorQtQuickVersion() const int PropertyEditorContextObject::minorQtQuickVersion() const
{ {
NanotraceHR::Tracer tracer{"property editor context object minor Qt Quick version", category()};
return m_minorQtQuickVersion; return m_minorQtQuickVersion;
} }
void PropertyEditorContextObject::setMajorVersion(int majorVersion) void PropertyEditorContextObject::setMajorVersion(int majorVersion)
{ {
NanotraceHR::Tracer tracer{"property editor context object set major version", category()};
if (m_majorVersion == majorVersion) if (m_majorVersion == majorVersion)
return; return;
@@ -334,6 +364,9 @@ void PropertyEditorContextObject::setMajorVersion(int majorVersion)
void PropertyEditorContextObject::setMajorQtQuickVersion(int majorVersion) void PropertyEditorContextObject::setMajorQtQuickVersion(int majorVersion)
{ {
NanotraceHR::Tracer tracer{"property editor context object set major Qt Quick version",
category()};
if (m_majorQtQuickVersion == majorVersion) if (m_majorQtQuickVersion == majorVersion)
return; return;
@@ -345,6 +378,9 @@ void PropertyEditorContextObject::setMajorQtQuickVersion(int majorVersion)
void PropertyEditorContextObject::setMinorQtQuickVersion(int minorVersion) void PropertyEditorContextObject::setMinorQtQuickVersion(int minorVersion)
{ {
NanotraceHR::Tracer tracer{"property editor context object set minor Qt Quick version",
category()};
if (m_minorQtQuickVersion == minorVersion) if (m_minorQtQuickVersion == minorVersion)
return; return;
@@ -355,6 +391,8 @@ void PropertyEditorContextObject::setMinorQtQuickVersion(int minorVersion)
int PropertyEditorContextObject::minorVersion() const int PropertyEditorContextObject::minorVersion() const
{ {
NanotraceHR::Tracer tracer{"property editor context object minor version", category()};
return m_minorVersion; return m_minorVersion;
} }
@@ -370,11 +408,14 @@ void PropertyEditorContextObject::setMinorVersion(int minorVersion)
bool PropertyEditorContextObject::hasActiveTimeline() const bool PropertyEditorContextObject::hasActiveTimeline() const
{ {
NanotraceHR::Tracer tracer{"property editor context object has active timeline", category()};
return m_setHasActiveTimeline; return m_setHasActiveTimeline;
} }
void PropertyEditorContextObject::setHasActiveTimeline(bool b) void PropertyEditorContextObject::setHasActiveTimeline(bool b)
{ {
NanotraceHR::Tracer tracer{"property editor context object set has active timeline", category()};
if (b == m_setHasActiveTimeline) if (b == m_setHasActiveTimeline)
return; return;
@@ -384,12 +425,16 @@ void PropertyEditorContextObject::setHasActiveTimeline(bool b)
void PropertyEditorContextObject::insertInQmlContext(QQmlContext *context) void PropertyEditorContextObject::insertInQmlContext(QQmlContext *context)
{ {
NanotraceHR::Tracer tracer{"property editor context object insert in QML context", category()};
m_qmlContext = context; m_qmlContext = context;
m_qmlContext->setContextObject(this); m_qmlContext->setContextObject(this);
} }
QQmlComponent *PropertyEditorContextObject::specificQmlComponent() QQmlComponent *PropertyEditorContextObject::specificQmlComponent()
{ {
NanotraceHR::Tracer tracer{"property editor context object specific QML component", category()};
if (m_qmlComponent) if (m_qmlComponent)
return m_qmlComponent; return m_qmlComponent;
@@ -408,11 +453,14 @@ QQmlComponent *PropertyEditorContextObject::specificQmlComponent()
bool PropertyEditorContextObject::hasMultiSelection() const bool PropertyEditorContextObject::hasMultiSelection() const
{ {
NanotraceHR::Tracer tracer{"property editor context object has multi selection", category()};
return m_hasMultiSelection; return m_hasMultiSelection;
} }
void PropertyEditorContextObject::setHasMultiSelection(bool b) void PropertyEditorContextObject::setHasMultiSelection(bool b)
{ {
NanotraceHR::Tracer tracer{"property editor context object set has multi selection", category()};
if (b == m_hasMultiSelection) if (b == m_hasMultiSelection)
return; return;
@@ -422,11 +470,15 @@ void PropertyEditorContextObject::setHasMultiSelection(bool b)
bool PropertyEditorContextObject::isSelectionLocked() const bool PropertyEditorContextObject::isSelectionLocked() const
{ {
NanotraceHR::Tracer tracer{"property editor context object is selection locked", category()};
return m_isSelectionLocked; return m_isSelectionLocked;
} }
void PropertyEditorContextObject::setIsSelectionLocked(bool lock) void PropertyEditorContextObject::setIsSelectionLocked(bool lock)
{ {
NanotraceHR::Tracer tracer{"property editor context object set is selection locked", category()};
if (lock == m_isSelectionLocked) if (lock == m_isSelectionLocked)
return; return;
@@ -436,6 +488,8 @@ void PropertyEditorContextObject::setIsSelectionLocked(bool lock)
void PropertyEditorContextObject::setInsightEnabled(bool value) void PropertyEditorContextObject::setInsightEnabled(bool value)
{ {
NanotraceHR::Tracer tracer{"property editor context object set insight enabled", category()};
if (value != m_insightEnabled) { if (value != m_insightEnabled) {
m_insightEnabled = value; m_insightEnabled = value;
emit insightEnabledChanged(); emit insightEnabledChanged();
@@ -444,12 +498,16 @@ void PropertyEditorContextObject::setInsightEnabled(bool value)
void PropertyEditorContextObject::setInsightCategories(const QStringList &categories) void PropertyEditorContextObject::setInsightCategories(const QStringList &categories)
{ {
NanotraceHR::Tracer tracer{"property editor context object set insight categories", category()};
m_insightCategories = categories; m_insightCategories = categories;
emit insightCategoriesChanged(); emit insightCategoriesChanged();
} }
bool PropertyEditorContextObject::hasQuick3DImport() const bool PropertyEditorContextObject::hasQuick3DImport() const
{ {
NanotraceHR::Tracer tracer{"property editor context object has quick 3D import", category()};
return m_hasQuick3DImport; return m_hasQuick3DImport;
} }
@@ -460,6 +518,8 @@ void PropertyEditorContextObject::setEditorNodes(const ModelNodes &nodes)
void PropertyEditorContextObject::setHasQuick3DImport(bool value) void PropertyEditorContextObject::setHasQuick3DImport(bool value)
{ {
NanotraceHR::Tracer tracer{"property editor context object set has quick 3D import", category()};
if (value == m_hasQuick3DImport) if (value == m_hasQuick3DImport)
return; return;
@@ -469,11 +529,15 @@ void PropertyEditorContextObject::setHasQuick3DImport(bool value)
bool PropertyEditorContextObject::hasMaterialLibrary() const bool PropertyEditorContextObject::hasMaterialLibrary() const
{ {
NanotraceHR::Tracer tracer{"property editor context object has material library", category()};
return m_hasMaterialLibrary; return m_hasMaterialLibrary;
} }
void PropertyEditorContextObject::setHasMaterialLibrary(bool value) void PropertyEditorContextObject::setHasMaterialLibrary(bool value)
{ {
NanotraceHR::Tracer tracer{"property editor context object set has material library", category()};
if (value == m_hasMaterialLibrary) if (value == m_hasMaterialLibrary)
return; return;
@@ -483,11 +547,15 @@ void PropertyEditorContextObject::setHasMaterialLibrary(bool value)
bool PropertyEditorContextObject::isQt6Project() const bool PropertyEditorContextObject::isQt6Project() const
{ {
NanotraceHR::Tracer tracer{"property editor context object is Qt6 project", category()};
return m_isQt6Project; return m_isQt6Project;
} }
void PropertyEditorContextObject::setIsQt6Project(bool value) void PropertyEditorContextObject::setIsQt6Project(bool value)
{ {
NanotraceHR::Tracer tracer{"property editor context object set is Qt6 project", category()};
if (m_isQt6Project == value) if (m_isQt6Project == value)
return; return;
@@ -497,11 +565,15 @@ void PropertyEditorContextObject::setIsQt6Project(bool value)
bool PropertyEditorContextObject::has3DModelSelected() const bool PropertyEditorContextObject::has3DModelSelected() const
{ {
NanotraceHR::Tracer tracer{"property editor context object has 3D model selected", category()};
return m_has3DModelSelected; return m_has3DModelSelected;
} }
void PropertyEditorContextObject::setHas3DModelSelected(bool value) void PropertyEditorContextObject::setHas3DModelSelected(bool value)
{ {
NanotraceHR::Tracer tracer{"property editor context object set has 3D model selected", category()};
if (value == m_has3DModelSelected) if (value == m_has3DModelSelected)
return; return;
@@ -511,6 +583,8 @@ void PropertyEditorContextObject::setHas3DModelSelected(bool value)
void PropertyEditorContextObject::setSpecificsUrl(const QUrl &newSpecificsUrl) void PropertyEditorContextObject::setSpecificsUrl(const QUrl &newSpecificsUrl)
{ {
NanotraceHR::Tracer tracer{"property editor context object set specifics URL", category()};
if (newSpecificsUrl == m_specificsUrl) if (newSpecificsUrl == m_specificsUrl)
return; return;
@@ -522,6 +596,8 @@ void PropertyEditorContextObject::setSpecificsUrl(const QUrl &newSpecificsUrl)
void PropertyEditorContextObject::setSpecificQmlData(const QString &newSpecificQmlData) void PropertyEditorContextObject::setSpecificQmlData(const QString &newSpecificQmlData)
{ {
NanotraceHR::Tracer tracer{"property editor context object set specific QML data", category()};
if (m_specificQmlData == newSpecificQmlData) if (m_specificQmlData == newSpecificQmlData)
return; return;
@@ -536,6 +612,8 @@ void PropertyEditorContextObject::setSpecificQmlData(const QString &newSpecificQ
void PropertyEditorContextObject::setStateName(const QString &newStateName) void PropertyEditorContextObject::setStateName(const QString &newStateName)
{ {
NanotraceHR::Tracer tracer{"property editor context object set state name", category()};
if (newStateName == m_stateName) if (newStateName == m_stateName)
return; return;
@@ -545,6 +623,8 @@ void PropertyEditorContextObject::setStateName(const QString &newStateName)
void PropertyEditorContextObject::setAllStateNames(const QStringList &allStates) void PropertyEditorContextObject::setAllStateNames(const QStringList &allStates)
{ {
NanotraceHR::Tracer tracer{"property editor context object set all state names", category()};
if (allStates == m_allStateNames) if (allStates == m_allStateNames)
return; return;
@@ -554,6 +634,8 @@ void PropertyEditorContextObject::setAllStateNames(const QStringList &allStates)
void PropertyEditorContextObject::setIsBaseState(bool newIsBaseState) void PropertyEditorContextObject::setIsBaseState(bool newIsBaseState)
{ {
NanotraceHR::Tracer tracer{"property editor context object set is base state", category()};
if (newIsBaseState == m_isBaseState) if (newIsBaseState == m_isBaseState)
return; return;
@@ -563,6 +645,8 @@ void PropertyEditorContextObject::setIsBaseState(bool newIsBaseState)
void PropertyEditorContextObject::setSelectionChanged(bool newSelectionChanged) void PropertyEditorContextObject::setSelectionChanged(bool newSelectionChanged)
{ {
NanotraceHR::Tracer tracer{"property editor context object set selection changed", category()};
if (newSelectionChanged == m_selectionChanged) if (newSelectionChanged == m_selectionChanged)
return; return;
@@ -572,6 +656,8 @@ void PropertyEditorContextObject::setSelectionChanged(bool newSelectionChanged)
void PropertyEditorContextObject::setBackendValues(QQmlPropertyMap *newBackendValues) void PropertyEditorContextObject::setBackendValues(QQmlPropertyMap *newBackendValues)
{ {
NanotraceHR::Tracer tracer{"property editor context object set backend values", category()};
if (newBackendValues == m_backendValues) if (newBackendValues == m_backendValues)
return; return;
@@ -581,16 +667,22 @@ void PropertyEditorContextObject::setBackendValues(QQmlPropertyMap *newBackendVa
void PropertyEditorContextObject::setModel(Model *model) void PropertyEditorContextObject::setModel(Model *model)
{ {
NanotraceHR::Tracer tracer{"property editor context object set model", category()};
m_model = model; m_model = model;
} }
void PropertyEditorContextObject::triggerSelectionChanged() void PropertyEditorContextObject::triggerSelectionChanged()
{ {
NanotraceHR::Tracer tracer{"property editor context object trigger selection changed", category()};
setSelectionChanged(!m_selectionChanged); setSelectionChanged(!m_selectionChanged);
} }
void PropertyEditorContextObject::setHasAliasExport(bool hasAliasExport) void PropertyEditorContextObject::setHasAliasExport(bool hasAliasExport)
{ {
NanotraceHR::Tracer tracer{"property editor context object set has alias export", category()};
if (m_aliasExport == hasAliasExport) if (m_aliasExport == hasAliasExport)
return; return;
@@ -600,6 +692,8 @@ void PropertyEditorContextObject::setHasAliasExport(bool hasAliasExport)
void PropertyEditorContextObject::setQuickWidget(QQuickWidget *newQuickWidget) void PropertyEditorContextObject::setQuickWidget(QQuickWidget *newQuickWidget)
{ {
NanotraceHR::Tracer tracer{"property editor context object set quick widget", category()};
m_quickWidget = newQuickWidget; m_quickWidget = newQuickWidget;
} }
@@ -616,6 +710,8 @@ void PropertyEditorContextObject::hideCursor()
void PropertyEditorContextObject::restoreCursor() void PropertyEditorContextObject::restoreCursor()
{ {
NanotraceHR::Tracer tracer{"property editor context object restore cursor", category()};
if (!QApplication::overrideCursor()) if (!QApplication::overrideCursor())
return; return;
@@ -627,6 +723,8 @@ void PropertyEditorContextObject::restoreCursor()
void PropertyEditorContextObject::holdCursorInPlace() void PropertyEditorContextObject::holdCursorInPlace()
{ {
NanotraceHR::Tracer tracer{"property editor context object hold cursor in place", category()};
if (!QApplication::overrideCursor()) if (!QApplication::overrideCursor())
return; return;
@@ -636,6 +734,8 @@ void PropertyEditorContextObject::holdCursorInPlace()
int PropertyEditorContextObject::devicePixelRatio() int PropertyEditorContextObject::devicePixelRatio()
{ {
NanotraceHR::Tracer tracer{"property editor context object device pixel ratio", category()};
if (QWidget *w = QApplication::activeWindow()) if (QWidget *w = QApplication::activeWindow())
return w->devicePixelRatio(); return w->devicePixelRatio();
@@ -644,11 +744,15 @@ int PropertyEditorContextObject::devicePixelRatio()
QStringList PropertyEditorContextObject::styleNamesForFamily(const QString &family) QStringList PropertyEditorContextObject::styleNamesForFamily(const QString &family)
{ {
NanotraceHR::Tracer tracer{"property editor context object style names for family", category()};
return QFontDatabase::styles(family); return QFontDatabase::styles(family);
} }
QStringList PropertyEditorContextObject::allStatesForId(const QString &id) QStringList PropertyEditorContextObject::allStatesForId(const QString &id)
{ {
NanotraceHR::Tracer tracer{"property editor context object all states for id", category()};
if (m_model && m_model->rewriterView()) { if (m_model && m_model->rewriterView()) {
const QmlObjectNode node = m_model->rewriterView()->modelNodeForId(id); const QmlObjectNode node = m_model->rewriterView()->modelNodeForId(id);
if (node.isValid()) if (node.isValid())
@@ -660,6 +764,8 @@ QStringList PropertyEditorContextObject::allStatesForId(const QString &id)
bool PropertyEditorContextObject::isBlocked(const QString &propName) const bool PropertyEditorContextObject::isBlocked(const QString &propName) const
{ {
NanotraceHR::Tracer tracer{"property editor context object is blocked", category()};
if (m_model && m_model->rewriterView()) { if (m_model && m_model->rewriterView()) {
const QList<ModelNode> nodes = m_model->rewriterView()->selectedModelNodes(); const QList<ModelNode> nodes = m_model->rewriterView()->selectedModelNodes();
for (const auto &node : nodes) { for (const auto &node : nodes) {
@@ -672,6 +778,8 @@ bool PropertyEditorContextObject::isBlocked(const QString &propName) const
void PropertyEditorContextObject::verifyInsightImport() void PropertyEditorContextObject::verifyInsightImport()
{ {
NanotraceHR::Tracer tracer{"property editor context object verify insight import", category()};
Import import = Import::createLibraryImport("QtInsightTracker", "1.0"); Import import = Import::createLibraryImport("QtInsightTracker", "1.0");
if (!m_model->hasImport(import)) if (!m_model->hasImport(import))
@@ -680,6 +788,8 @@ void PropertyEditorContextObject::verifyInsightImport()
QRect PropertyEditorContextObject::screenRect() const QRect PropertyEditorContextObject::screenRect() const
{ {
NanotraceHR::Tracer tracer{"property editor context object screen rect", category()};
if (m_quickWidget && m_quickWidget->screen()) if (m_quickWidget && m_quickWidget->screen())
return m_quickWidget->screen()->availableGeometry(); return m_quickWidget->screen()->availableGeometry();
return {}; return {};
@@ -687,6 +797,8 @@ QRect PropertyEditorContextObject::screenRect() const
QPoint PropertyEditorContextObject::globalPos(const QPoint &point) const QPoint PropertyEditorContextObject::globalPos(const QPoint &point) const
{ {
NanotraceHR::Tracer tracer{"property editor context object global pos", category()};
if (m_quickWidget) if (m_quickWidget)
return m_quickWidget->mapToGlobal(point); return m_quickWidget->mapToGlobal(point);
return point; return point;
@@ -694,32 +806,44 @@ QPoint PropertyEditorContextObject::globalPos(const QPoint &point) const
void PropertyEditorContextObject::handleToolBarAction(int action) void PropertyEditorContextObject::handleToolBarAction(int action)
{ {
NanotraceHR::Tracer tracer{"property editor context object handle toolbar action", category()};
emit toolBarAction(action); emit toolBarAction(action);
} }
void PropertyEditorContextObject::saveExpandedState(const QString &sectionName, bool expanded) void PropertyEditorContextObject::saveExpandedState(const QString &sectionName, bool expanded)
{ {
NanotraceHR::Tracer tracer{"property editor context object save expanded state", category()};
s_expandedStateHash.insert(sectionName, expanded); s_expandedStateHash.insert(sectionName, expanded);
} }
bool PropertyEditorContextObject::loadExpandedState(const QString &sectionName, bool defaultValue) const bool PropertyEditorContextObject::loadExpandedState(const QString &sectionName, bool defaultValue) const
{ {
NanotraceHR::Tracer tracer{"property editor context object load expanded state", category()};
return s_expandedStateHash.value(sectionName, defaultValue); return s_expandedStateHash.value(sectionName, defaultValue);
} }
void EasingCurveEditor::registerDeclarativeType() void EasingCurveEditor::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"property editor context object register declarative type", category()};
qmlRegisterType<EasingCurveEditor>("HelperWidgets", 2, 0, "EasingCurveEditor"); qmlRegisterType<EasingCurveEditor>("HelperWidgets", 2, 0, "EasingCurveEditor");
} }
void EasingCurveEditor::runDialog() void EasingCurveEditor::runDialog()
{ {
NanotraceHR::Tracer tracer{"property editor context object run dialog", category()};
if (m_modelNode.isValid()) if (m_modelNode.isValid())
EasingCurveDialog::runDialog({ m_modelNode }, Core::ICore::dialogParent()); EasingCurveDialog::runDialog({ m_modelNode }, Core::ICore::dialogParent());
} }
void EasingCurveEditor::setModelNodeBackend(const QVariant &modelNodeBackend) void EasingCurveEditor::setModelNodeBackend(const QVariant &modelNodeBackend)
{ {
NanotraceHR::Tracer tracer{"property editor context object set model node backend", category()};
if (!modelNodeBackend.isNull() && modelNodeBackend.isValid()) { if (!modelNodeBackend.isNull() && modelNodeBackend.isValid()) {
m_modelNodeBackend = modelNodeBackend; m_modelNodeBackend = modelNodeBackend;
@@ -738,6 +862,8 @@ void EasingCurveEditor::setModelNodeBackend(const QVariant &modelNodeBackend)
QVariant EasingCurveEditor::modelNodeBackend() const QVariant EasingCurveEditor::modelNodeBackend() const
{ {
NanotraceHR::Tracer tracer{"property editor context object model node backend", category()};
return m_modelNodeBackend; return m_modelNodeBackend;
} }

View File

@@ -25,21 +25,31 @@
#include "propertyeditordynamicpropertiesproxymodel.h" #include "propertyeditordynamicpropertiesproxymodel.h"
#include "propertyeditortracing.h"
#include <dynamicpropertiesmodel.h> #include <dynamicpropertiesmodel.h>
#include <propertyeditorview.h> #include <propertyeditorview.h>
namespace QmlDesigner { namespace QmlDesigner {
static auto category = QmlDesigner::PropertyEditorTracing::category;
PropertyEditorDynamicPropertiesProxyModel::PropertyEditorDynamicPropertiesProxyModel(QObject *parent) PropertyEditorDynamicPropertiesProxyModel::PropertyEditorDynamicPropertiesProxyModel(QObject *parent)
: DynamicPropertiesProxyModel(parent) : DynamicPropertiesProxyModel(parent)
{ {
NanotraceHR::Tracer tracer{"property editor dynamic properties proxy model constructor",
category()};
if (PropertyEditorView::instance()) if (PropertyEditorView::instance())
initModel(PropertyEditorView::instance()->dynamicPropertiesModel()); initModel(PropertyEditorView::instance()->dynamicPropertiesModel());
} }
void PropertyEditorDynamicPropertiesProxyModel::registerDeclarativeType() void PropertyEditorDynamicPropertiesProxyModel::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{
"property editor dynamic properties proxy model register declarative type", category()};
DynamicPropertiesProxyModel::registerDeclarativeType(); DynamicPropertiesProxyModel::registerDeclarativeType();
qmlRegisterType<PropertyEditorDynamicPropertiesProxyModel>("HelperWidgets", 2, 0, "PropertyEditorDynamicPropertiesModel"); qmlRegisterType<PropertyEditorDynamicPropertiesProxyModel>("HelperWidgets", 2, 0, "PropertyEditorDynamicPropertiesModel");
} }

View File

@@ -4,6 +4,7 @@
#include "propertyeditorqmlbackend.h" #include "propertyeditorqmlbackend.h"
#include "instanceimageprovider.h" #include "instanceimageprovider.h"
#include "propertyeditortracing.h"
#include "propertyeditortransaction.h" #include "propertyeditortransaction.h"
#include "propertyeditorutils.h" #include "propertyeditorutils.h"
#include "propertyeditorvalue.h" #include "propertyeditorvalue.h"
@@ -51,6 +52,8 @@
#include <tuple> #include <tuple>
static auto category = QmlDesigner::PropertyEditorTracing::category;
static Q_LOGGING_CATEGORY(propertyEditorBenchmark, "qtc.propertyeditor.load", QtWarningMsg) static Q_LOGGING_CATEGORY(propertyEditorBenchmark, "qtc.propertyeditor.load", QtWarningMsg)
static QmlJS::SimpleReaderNode::Ptr s_templateConfiguration = QmlJS::SimpleReaderNode::Ptr(); static QmlJS::SimpleReaderNode::Ptr s_templateConfiguration = QmlJS::SimpleReaderNode::Ptr();
@@ -115,6 +118,8 @@ PropertyEditorQmlBackend::PropertyEditorQmlBackend(PropertyEditorView *propertyE
, m_propertyEditorTransaction(std::make_unique<PropertyEditorTransaction>(propertyEditor)) , m_propertyEditorTransaction(std::make_unique<PropertyEditorTransaction>(propertyEditor))
, m_dummyPropertyEditorValue(std::make_unique<PropertyEditorValue>()) , m_dummyPropertyEditorValue(std::make_unique<PropertyEditorValue>())
{ {
NanotraceHR::Tracer tracer{"property editor backend constructor", category()};
m_contextObject->setQuickWidget(m_view.get()); m_contextObject->setQuickWidget(m_view.get());
m_view->engine()->setOutputWarningsToStandardError(QmlDesignerPlugin::instance() m_view->engine()->setOutputWarningsToStandardError(QmlDesignerPlugin::instance()
->settings().value(DesignerSettingsKey::SHOW_PROPERTYEDITOR_WARNINGS).toBool()); ->settings().value(DesignerSettingsKey::SHOW_PROPERTYEDITOR_WARNINGS).toBool());
@@ -133,12 +138,17 @@ PropertyEditorQmlBackend::PropertyEditorQmlBackend(PropertyEditorView *propertyE
propertyEditor, &PropertyEditorView::changeValue); propertyEditor, &PropertyEditorView::changeValue);
} }
PropertyEditorQmlBackend::~PropertyEditorQmlBackend() = default; PropertyEditorQmlBackend::~PropertyEditorQmlBackend()
{
NanotraceHR::Tracer tracer{"property editor backend destructor", category()};
}
void PropertyEditorQmlBackend::setupPropertyEditorValue(PropertyNameView name, void PropertyEditorQmlBackend::setupPropertyEditorValue(PropertyNameView name,
PropertyEditorView *propertyEditor, PropertyEditorView *propertyEditor,
const NodeMetaInfo &type) const NodeMetaInfo &type)
{ {
NanotraceHR::Tracer tracer{"property editor backend setup property editor value", category()};
QmlDesigner::PropertyName propertyName(name.toByteArray()); QmlDesigner::PropertyName propertyName(name.toByteArray());
propertyName.replace('.', '_'); propertyName.replace('.', '_');
auto valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(backendValuesPropertyMap().value(QString::fromUtf8(propertyName)))); auto valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(backendValuesPropertyMap().value(QString::fromUtf8(propertyName))));
@@ -174,6 +184,8 @@ QVariant properDefaultAuxiliaryProperties(const QmlObjectNode &qmlObjectNode,
QVariant properDefaultLayoutAttachedProperties(const QmlObjectNode &qmlObjectNode, QVariant properDefaultLayoutAttachedProperties(const QmlObjectNode &qmlObjectNode,
PropertyNameView propertyName) PropertyNameView propertyName)
{ {
NanotraceHR::Tracer tracer{"property editor backend proper default layout attached properties",
category()};
const QVariant value = qmlObjectNode.modelValue("Layout."_sv + propertyName); const QVariant value = qmlObjectNode.modelValue("Layout."_sv + propertyName);
QVariant marginsValue = qmlObjectNode.modelValue("Layout.margins"); QVariant marginsValue = qmlObjectNode.modelValue("Layout.margins");
@@ -220,6 +232,8 @@ QVariant properDefaultInsightAttachedProperties(const QmlObjectNode &qmlObjectNo
void PropertyEditorQmlBackend::setupLayoutAttachedProperties(const QmlObjectNode &qmlObjectNode, PropertyEditorView *propertyEditor) void PropertyEditorQmlBackend::setupLayoutAttachedProperties(const QmlObjectNode &qmlObjectNode, PropertyEditorView *propertyEditor)
{ {
NanotraceHR::Tracer tracer{"property editor backend setup layout attached properties", category()};
if (QmlItemNode(qmlObjectNode).isInLayout()) { if (QmlItemNode(qmlObjectNode).isInLayout()) {
static constexpr PropertyNameView propertyNames[] = {"alignment", static constexpr PropertyNameView propertyNames[] = {"alignment",
"column", "column",
@@ -253,6 +267,9 @@ void PropertyEditorQmlBackend::setupLayoutAttachedProperties(const QmlObjectNode
void PropertyEditorQmlBackend::setupInsightAttachedProperties(const QmlObjectNode &qmlObjectNode, void PropertyEditorQmlBackend::setupInsightAttachedProperties(const QmlObjectNode &qmlObjectNode,
PropertyEditorView *propertyEditor) PropertyEditorView *propertyEditor)
{ {
NanotraceHR::Tracer tracer{"property editor backend setup insight attached properties",
category()};
const PropertyName propertyName = "category"; const PropertyName propertyName = "category";
createPropertyEditorValue(qmlObjectNode, createPropertyEditorValue(qmlObjectNode,
"InsightCategory."_sv + propertyName, "InsightCategory."_sv + propertyName,
@@ -263,6 +280,8 @@ void PropertyEditorQmlBackend::setupInsightAttachedProperties(const QmlObjectNod
void PropertyEditorQmlBackend::setupAuxiliaryProperties(const QmlObjectNode &qmlObjectNode, void PropertyEditorQmlBackend::setupAuxiliaryProperties(const QmlObjectNode &qmlObjectNode,
PropertyEditorView *propertyEditor) PropertyEditorView *propertyEditor)
{ {
NanotraceHR::Tracer tracer{"property editor backend setup auxiliary properties", category()};
const QmlItemNode itemNode(qmlObjectNode); const QmlItemNode itemNode(qmlObjectNode);
auto createProperty = [&](auto &&...properties) { auto createProperty = [&](auto &&...properties) {
@@ -336,12 +355,16 @@ void PropertyEditorQmlBackend::setupAuxiliaryProperties(const QmlObjectNode &qml
void PropertyEditorQmlBackend::handleInstancePropertyChangedInModelNodeProxy( void PropertyEditorQmlBackend::handleInstancePropertyChangedInModelNodeProxy(
const ModelNode &modelNode, PropertyNameView propertyName) const ModelNode &modelNode, PropertyNameView propertyName)
{ {
NanotraceHR::Tracer tracer{"property editor backend handle instance property changed", category()};
m_backendModelNode.handleInstancePropertyChanged(modelNode, propertyName); m_backendModelNode.handleInstancePropertyChanged(modelNode, propertyName);
} }
void PropertyEditorQmlBackend::handleAuxiliaryDataChanges(const QmlObjectNode &qmlObjectNode, void PropertyEditorQmlBackend::handleAuxiliaryDataChanges(const QmlObjectNode &qmlObjectNode,
AuxiliaryDataKeyView key) AuxiliaryDataKeyView key)
{ {
NanotraceHR::Tracer tracer{"property editor backend handle auxiliary data changes", category()};
if (qmlObjectNode.isRootModelNode() && isMaterialAuxiliaryKey(key)) { if (qmlObjectNode.isRootModelNode() && isMaterialAuxiliaryKey(key)) {
m_backendMaterialNode.handleAuxiliaryPropertyChanges(); m_backendMaterialNode.handleAuxiliaryPropertyChanges();
m_view->instanceImageProvider()->invalidate(); m_view->instanceImageProvider()->invalidate();
@@ -350,12 +373,16 @@ void PropertyEditorQmlBackend::handleAuxiliaryDataChanges(const QmlObjectNode &q
void PropertyEditorQmlBackend::handleVariantPropertyChangedInModelNodeProxy(const VariantProperty &property) void PropertyEditorQmlBackend::handleVariantPropertyChangedInModelNodeProxy(const VariantProperty &property)
{ {
NanotraceHR::Tracer tracer{"property editor backend handle variant property changed", category()};
m_backendModelNode.handleVariantPropertyChanged(property); m_backendModelNode.handleVariantPropertyChanged(property);
updateInstanceImage(); updateInstanceImage();
} }
void PropertyEditorQmlBackend::handleBindingPropertyChangedInModelNodeProxy(const BindingProperty &property) void PropertyEditorQmlBackend::handleBindingPropertyChangedInModelNodeProxy(const BindingProperty &property)
{ {
NanotraceHR::Tracer tracer{"property editor backend handle binding property changed", category()};
m_backendModelNode.handleBindingPropertyChanged(property); m_backendModelNode.handleBindingPropertyChanged(property);
m_backendTextureNode.handleBindingPropertyChanged(property); m_backendTextureNode.handleBindingPropertyChanged(property);
updateInstanceImage(); updateInstanceImage();
@@ -364,6 +391,9 @@ void PropertyEditorQmlBackend::handleBindingPropertyChangedInModelNodeProxy(cons
void PropertyEditorQmlBackend::handleBindingPropertyInModelNodeProxyAboutToChange( void PropertyEditorQmlBackend::handleBindingPropertyInModelNodeProxyAboutToChange(
const BindingProperty &property) const BindingProperty &property)
{ {
NanotraceHR::Tracer tracer{"property editor backend handle binding property about to change",
category()};
if (m_backendMaterialNode.materialNode()) { if (m_backendMaterialNode.materialNode()) {
ModelNode expressionNode = property.resolveToModelNode(); ModelNode expressionNode = property.resolveToModelNode();
if (expressionNode.metaInfo().isQtQuick3DTexture()) if (expressionNode.metaInfo().isQtQuick3DTexture())
@@ -374,6 +404,8 @@ void PropertyEditorQmlBackend::handleBindingPropertyInModelNodeProxyAboutToChang
void PropertyEditorQmlBackend::handlePropertiesRemovedInModelNodeProxy(const AbstractProperty &property) void PropertyEditorQmlBackend::handlePropertiesRemovedInModelNodeProxy(const AbstractProperty &property)
{ {
NanotraceHR::Tracer tracer{"property editor backend handle properties removed", category()};
m_backendModelNode.handlePropertiesRemoved(property); m_backendModelNode.handlePropertiesRemoved(property);
m_backendTextureNode.handlePropertiesRemoved(property); m_backendTextureNode.handlePropertiesRemoved(property);
updateInstanceImage(); updateInstanceImage();
@@ -395,6 +427,9 @@ void PropertyEditorQmlBackend::handleModelNodePreviewPixmapChanged(const ModelNo
void PropertyEditorQmlBackend::handleModelSelectedNodesChanged(PropertyEditorView *propertyEditor) void PropertyEditorQmlBackend::handleModelSelectedNodesChanged(PropertyEditorView *propertyEditor)
{ {
NanotraceHR::Tracer tracer{"property editor backend handle model selected nodes changed",
category()};
contextObject()->setHas3DModelSelected(!Utils3D::getSelectedModels(propertyEditor).isEmpty()); contextObject()->setHas3DModelSelected(!Utils3D::getSelectedModels(propertyEditor).isEmpty());
m_backendTextureNode.updateSelectionDetails(); m_backendTextureNode.updateSelectionDetails();
} }
@@ -404,6 +439,8 @@ void PropertyEditorQmlBackend::createPropertyEditorValue(const QmlObjectNode &qm
const QVariant &value, const QVariant &value,
PropertyEditorView *propertyEditor) PropertyEditorView *propertyEditor)
{ {
NanotraceHR::Tracer tracer{"property editor backend create property editor value", category()};
PropertyName propertyName(name.toByteArray()); PropertyName propertyName(name.toByteArray());
propertyName.replace('.', '_'); propertyName.replace('.', '_');
auto valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(backendValuesPropertyMap().value(QString::fromUtf8(propertyName)))); auto valueObject = qobject_cast<PropertyEditorValue*>(variantToQObject(backendValuesPropertyMap().value(QString::fromUtf8(propertyName))));
@@ -441,6 +478,8 @@ void PropertyEditorQmlBackend::setValue(const QmlObjectNode &,
PropertyNameView name, PropertyNameView name,
const QVariant &value) const QVariant &value)
{ {
NanotraceHR::Tracer tracer{"property editor backend set value", category()};
// Vector*D values need to be split into their subcomponents // Vector*D values need to be split into their subcomponents
if (value.typeId() == QMetaType::QVector2D) { if (value.typeId() == QMetaType::QVector2D) {
const char *suffix[2] = {"_x", "_y"}; const char *suffix[2] = {"_x", "_y"};
@@ -487,6 +526,8 @@ void PropertyEditorQmlBackend::setValue(const QmlObjectNode &,
void PropertyEditorQmlBackend::setExpression(PropertyNameView propName, const QString &exp) void PropertyEditorQmlBackend::setExpression(PropertyNameView propName, const QString &exp)
{ {
NanotraceHR::Tracer tracer{"property editor backend set expression", category()};
PropertyEditorValue *propertyValue = propertyValueForName(QString::fromUtf8(propName)); PropertyEditorValue *propertyValue = propertyValueForName(QString::fromUtf8(propName));
if (propertyValue) if (propertyValue)
propertyValue->setExpression(exp); propertyValue->setExpression(exp);
@@ -494,21 +535,29 @@ void PropertyEditorQmlBackend::setExpression(PropertyNameView propName, const QS
QQmlContext *PropertyEditorQmlBackend::context() QQmlContext *PropertyEditorQmlBackend::context()
{ {
NanotraceHR::Tracer tracer{"property editor backend context", category()};
return m_view->rootContext(); return m_view->rootContext();
} }
PropertyEditorContextObject *PropertyEditorQmlBackend::contextObject() PropertyEditorContextObject *PropertyEditorQmlBackend::contextObject()
{ {
NanotraceHR::Tracer tracer{"property editor backend context object", category()};
return m_contextObject.get(); return m_contextObject.get();
} }
QQuickWidget *PropertyEditorQmlBackend::widget() QQuickWidget *PropertyEditorQmlBackend::widget()
{ {
NanotraceHR::Tracer tracer{"property editor backend widget", category()};
return m_view.get(); return m_view.get();
} }
void PropertyEditorQmlBackend::setSource(const QUrl &url) void PropertyEditorQmlBackend::setSource(const QUrl &url)
{ {
NanotraceHR::Tracer tracer{"property editor backend set source", category()};
m_view->setSource(url); m_view->setSource(url);
const bool showError = qEnvironmentVariableIsSet(Constants::ENVIRONMENT_SHOW_QML_ERRORS); const bool showError = qEnvironmentVariableIsSet(Constants::ENVIRONMENT_SHOW_QML_ERRORS);
@@ -521,24 +570,37 @@ void PropertyEditorQmlBackend::setSource(const QUrl &url)
QmlAnchorBindingProxy &PropertyEditorQmlBackend::backendAnchorBinding() QmlAnchorBindingProxy &PropertyEditorQmlBackend::backendAnchorBinding()
{ {
NanotraceHR::Tracer tracer{"property editor backend backend anchor binding", category()};
return m_backendAnchorBinding; return m_backendAnchorBinding;
} }
DesignerPropertyMap &PropertyEditorQmlBackend::backendValuesPropertyMap() { DesignerPropertyMap &PropertyEditorQmlBackend::backendValuesPropertyMap()
{
NanotraceHR::Tracer tracer{"property editor backend backend values property map", category()};
return m_backendValuesPropertyMap; return m_backendValuesPropertyMap;
} }
PropertyEditorTransaction *PropertyEditorQmlBackend::propertyEditorTransaction() { PropertyEditorTransaction *PropertyEditorQmlBackend::propertyEditorTransaction()
{
NanotraceHR::Tracer tracer{"property editor backend property editor transaction", category()};
return m_propertyEditorTransaction.get(); return m_propertyEditorTransaction.get();
} }
PropertyEditorValue *PropertyEditorQmlBackend::propertyValueForName(const QString &propertyName) PropertyEditorValue *PropertyEditorQmlBackend::propertyValueForName(const QString &propertyName)
{ {
return qobject_cast<PropertyEditorValue*>(variantToQObject(backendValuesPropertyMap().value(propertyName))); NanotraceHR::Tracer tracer{"property editor backend property value for name", category()};
return qobject_cast<PropertyEditorValue *>(
variantToQObject(backendValuesPropertyMap().value(propertyName)));
} }
void QmlDesigner::PropertyEditorQmlBackend::createPropertyEditorValues(const QmlObjectNode &qmlObjectNode, PropertyEditorView *propertyEditor) void QmlDesigner::PropertyEditorQmlBackend::createPropertyEditorValues(const QmlObjectNode &qmlObjectNode, PropertyEditorView *propertyEditor)
{ {
NanotraceHR::Tracer tracer{"property editor backend create property editor values", category()};
#ifndef QDS_USE_PROJECTSTORAGE #ifndef QDS_USE_PROJECTSTORAGE
for (const auto &property : PropertyEditorUtils::filteredProperties(qmlObjectNode.metaInfo())) { for (const auto &property : PropertyEditorUtils::filteredProperties(qmlObjectNode.metaInfo())) {
auto propertyName = property.name(); auto propertyName = property.name();
@@ -563,6 +625,8 @@ PropertyEditorValue *PropertyEditorQmlBackend::insertValue(const QString &name,
const QVariant &value, const QVariant &value,
const ModelNode &modelNode) const ModelNode &modelNode)
{ {
NanotraceHR::Tracer tracer{"property editor backend insert value", category()};
auto valueObject = qobject_cast<PropertyEditorValue *>( auto valueObject = qobject_cast<PropertyEditorValue *>(
variantToQObject(m_backendValuesPropertyMap.value(name))); variantToQObject(m_backendValuesPropertyMap.value(name)));
if (!valueObject) if (!valueObject)
@@ -586,6 +650,8 @@ PropertyEditorValue *PropertyEditorQmlBackend::insertValue(const QString &name,
void PropertyEditorQmlBackend::updateInstanceImage() void PropertyEditorQmlBackend::updateInstanceImage()
{ {
NanotraceHR::Tracer tracer{"property editor backend update instance image", category()};
m_view->instanceImageProvider()->invalidate(); m_view->instanceImageProvider()->invalidate();
refreshPreview(); refreshPreview();
} }
@@ -595,6 +661,8 @@ void PropertyEditorQmlBackend::setup(const ModelNodes &editorNodes,
const QUrl &qmlSpecificsFile, const QUrl &qmlSpecificsFile,
PropertyEditorView *propertyEditor) PropertyEditorView *propertyEditor)
{ {
NanotraceHR::Tracer tracer{"property editor backend setup", category()};
QmlObjectNode qmlObjectNode(editorNodes.isEmpty() ? ModelNode{} : editorNodes.first()); QmlObjectNode qmlObjectNode(editorNodes.isEmpty() ? ModelNode{} : editorNodes.first());
if (!qmlObjectNode.isValid()) { if (!qmlObjectNode.isValid()) {
qWarning() << "PropertyEditor: invalid node for setup"; qWarning() << "PropertyEditor: invalid node for setup";
@@ -694,11 +762,15 @@ void PropertyEditorQmlBackend::setup(const ModelNodes &editorNodes,
QString PropertyEditorQmlBackend::propertyEditorResourcesPath() QString PropertyEditorQmlBackend::propertyEditorResourcesPath()
{ {
NanotraceHR::Tracer tracer{"property editor backend property editor resources path", category()};
return resourcesPath("propertyEditorQmlSources"); return resourcesPath("propertyEditorQmlSources");
} }
QString PropertyEditorQmlBackend::scriptsEditorResourcesPath() QString PropertyEditorQmlBackend::scriptsEditorResourcesPath()
{ {
NanotraceHR::Tracer tracer{"property editor backend scripts editor resources path", category()};
return resourcesPath("scriptseditor"); return resourcesPath("scriptseditor");
} }
@@ -968,6 +1040,8 @@ QUrl PropertyEditorQmlBackend::getQmlFileUrl(const TypeName &relativeTypeName, c
TypeName PropertyEditorQmlBackend::fixTypeNameForPanes(const TypeName &typeName) TypeName PropertyEditorQmlBackend::fixTypeNameForPanes(const TypeName &typeName)
{ {
NanotraceHR::Tracer tracer{"property editor backend fix type name for panes", category()};
TypeName fixedTypeName = typeName; TypeName fixedTypeName = typeName;
fixedTypeName.replace('.', '/'); fixedTypeName.replace('.', '/');
return fixedTypeName; return fixedTypeName;
@@ -975,6 +1049,8 @@ TypeName PropertyEditorQmlBackend::fixTypeNameForPanes(const TypeName &typeName)
QString PropertyEditorQmlBackend::resourcesPath(const QString &dir) QString PropertyEditorQmlBackend::resourcesPath(const QString &dir)
{ {
NanotraceHR::Tracer tracer{"property editor backend resources path", category()};
#ifdef SHARE_QML_PATH #ifdef SHARE_QML_PATH
if (Utils::qtcEnvironmentVariableIsSet("LOAD_QML_FROM_SOURCE")) if (Utils::qtcEnvironmentVariableIsSet("LOAD_QML_FROM_SOURCE"))
return QLatin1String(SHARE_QML_PATH) + "/" + dir; return QLatin1String(SHARE_QML_PATH) + "/" + dir;
@@ -984,11 +1060,15 @@ QString PropertyEditorQmlBackend::resourcesPath(const QString &dir)
void PropertyEditorQmlBackend::refreshBackendModel() void PropertyEditorQmlBackend::refreshBackendModel()
{ {
NanotraceHR::Tracer tracer{"property editor backend refresh backend model", category()};
m_backendModelNode.refresh(); m_backendModelNode.refresh();
} }
void PropertyEditorQmlBackend::refreshPreview() void PropertyEditorQmlBackend::refreshPreview()
{ {
NanotraceHR::Tracer tracer{"property editor backend refresh preview", category()};
auto qmlPreview = widget()->rootObject(); auto qmlPreview = widget()->rootObject();
if (qmlPreview && qmlPreview->metaObject()->indexOfMethod("refreshPreview()") > -1) if (qmlPreview && qmlPreview->metaObject()->indexOfMethod("refreshPreview()") > -1)
@@ -997,6 +1077,8 @@ void PropertyEditorQmlBackend::refreshPreview()
void PropertyEditorQmlBackend::setupContextProperties() void PropertyEditorQmlBackend::setupContextProperties()
{ {
NanotraceHR::Tracer tracer{"property editor backend setup context properties", category()};
context()->setContextProperties({ context()->setContextProperties({
{"modelNodeBackend", QVariant::fromValue(&m_backendModelNode)}, {"modelNodeBackend", QVariant::fromValue(&m_backendModelNode)},
{"materialNodeBackend", QVariant::fromValue(&m_backendMaterialNode)}, {"materialNodeBackend", QVariant::fromValue(&m_backendMaterialNode)},
@@ -1015,7 +1097,10 @@ TypeName PropertyEditorQmlBackend::qmlFileName(const NodeMetaInfo &nodeInfo)
} }
#endif #endif
QUrl PropertyEditorQmlBackend::fileToUrl(const QString &filePath) { QUrl PropertyEditorQmlBackend::fileToUrl(const QString &filePath)
{
NanotraceHR::Tracer tracer{"property editor backend file to url", category()};
QUrl fileUrl; QUrl fileUrl;
if (filePath.isEmpty()) if (filePath.isEmpty())
@@ -1035,11 +1120,15 @@ QUrl PropertyEditorQmlBackend::fileToUrl(const QString &filePath) {
QUrl PropertyEditorQmlBackend::emptyPaneUrl() QUrl PropertyEditorQmlBackend::emptyPaneUrl()
{ {
NanotraceHR::Tracer tracer{"property editor backend empty pane url", category()};
return fileToUrl(QDir(propertyEditorResourcesPath()).filePath("QtQuick/emptyPane.qml"_L1)); return fileToUrl(QDir(propertyEditorResourcesPath()).filePath("QtQuick/emptyPane.qml"_L1));
} }
QString PropertyEditorQmlBackend::fileFromUrl(const QUrl &url) QString PropertyEditorQmlBackend::fileFromUrl(const QUrl &url)
{ {
NanotraceHR::Tracer tracer{"property editor backend file from url", category()};
if (url.scheme() == QStringLiteral("qrc")) { if (url.scheme() == QStringLiteral("qrc")) {
const QString &path = url.path(); const QString &path = url.path();
return QStringLiteral(":") + path; return QStringLiteral(":") + path;
@@ -1050,23 +1139,32 @@ QString PropertyEditorQmlBackend::fileFromUrl(const QUrl &url)
bool PropertyEditorQmlBackend::checkIfUrlExists(const QUrl &url) bool PropertyEditorQmlBackend::checkIfUrlExists(const QUrl &url)
{ {
NanotraceHR::Tracer tracer{"property editor backend check if url exists", category()};
const QString &file = fileFromUrl(url); const QString &file = fileFromUrl(url);
return !file.isEmpty() && QFileInfo::exists(file); return !file.isEmpty() && QFileInfo::exists(file);
} }
void PropertyEditorQmlBackend::emitSelectionToBeChanged() void PropertyEditorQmlBackend::emitSelectionToBeChanged()
{ {
NanotraceHR::Tracer tracer{"property editor backend emit selection to be changed", category()};
m_backendModelNode.emitSelectionToBeChanged(); m_backendModelNode.emitSelectionToBeChanged();
} }
void PropertyEditorQmlBackend::emitSelectionChanged() void PropertyEditorQmlBackend::emitSelectionChanged()
{ {
NanotraceHR::Tracer tracer{"property editor backend emit selection changed", category()};
m_backendModelNode.emitSelectionChanged(); m_backendModelNode.emitSelectionChanged();
} }
void PropertyEditorQmlBackend::setValueforLayoutAttachedProperties(const QmlObjectNode &qmlObjectNode, void PropertyEditorQmlBackend::setValueforLayoutAttachedProperties(const QmlObjectNode &qmlObjectNode,
PropertyNameView name) PropertyNameView name)
{ {
NanotraceHR::Tracer tracer{"property editor backend set value for layout attached properties",
category()};
PropertyName propertyName = name.toByteArray(); PropertyName propertyName = name.toByteArray();
propertyName.replace("Layout.", ""); propertyName.replace("Layout.", "");
setValue(qmlObjectNode, name, properDefaultLayoutAttachedProperties(qmlObjectNode, propertyName)); setValue(qmlObjectNode, name, properDefaultLayoutAttachedProperties(qmlObjectNode, propertyName));
@@ -1083,6 +1181,9 @@ void PropertyEditorQmlBackend::setValueforLayoutAttachedProperties(const QmlObje
void PropertyEditorQmlBackend::setValueforInsightAttachedProperties(const QmlObjectNode &qmlObjectNode, void PropertyEditorQmlBackend::setValueforInsightAttachedProperties(const QmlObjectNode &qmlObjectNode,
PropertyNameView name) PropertyNameView name)
{ {
NanotraceHR::Tracer tracer{"property editor backend set value for insight attached properties",
category()};
PropertyName propertyName = name.toByteArray(); PropertyName propertyName = name.toByteArray();
propertyName.replace("InsightCategory.", ""); propertyName.replace("InsightCategory.", "");
setValue(qmlObjectNode, name, properDefaultInsightAttachedProperties(qmlObjectNode, propertyName)); setValue(qmlObjectNode, name, properDefaultInsightAttachedProperties(qmlObjectNode, propertyName));
@@ -1091,6 +1192,9 @@ void PropertyEditorQmlBackend::setValueforInsightAttachedProperties(const QmlObj
void PropertyEditorQmlBackend::setValueforAuxiliaryProperties(const QmlObjectNode &qmlObjectNode, void PropertyEditorQmlBackend::setValueforAuxiliaryProperties(const QmlObjectNode &qmlObjectNode,
AuxiliaryDataKeyView key) AuxiliaryDataKeyView key)
{ {
NanotraceHR::Tracer tracer{"property editor backend set value for auxiliary properties",
category()};
const PropertyName propertyName = auxNamePostFix(key.name); const PropertyName propertyName = auxNamePostFix(key.name);
setValue(qmlObjectNode, propertyName, qmlObjectNode.modelNode().auxiliaryDataWithDefault(key)); setValue(qmlObjectNode, propertyName, qmlObjectNode.modelNode().auxiliaryDataWithDefault(key));
} }

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 "propertyeditortracing.h"
#include <tracing/qmldesignertracing.h>
#include <sqlitebasestatement.h>
namespace QmlDesigner::PropertyEditorTracing {
using namespace NanotraceHR::Literals;
namespace {
thread_local Category category_{"model",
Tracing::eventQueueWithStringArguments(),
Tracing::eventQueueWithoutArguments(),
category};
} // namespace
Category &category()
{
return category_;
}
} // namespace QmlDesigner::PropertyEditorTracing

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::PropertyEditorTracing {
constexpr NanotraceHR::Tracing tracingStatus()
{
#ifdef ENABLE_PROPERTY_EDITOR_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::PropertyEditorTracing

View File

@@ -2,18 +2,26 @@
// 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 "propertyeditortransaction.h" #include "propertyeditortransaction.h"
#include "propertyeditortracing.h"
#include <QTimerEvent> #include <QTimerEvent>
#include <QDebug> #include <QDebug>
namespace QmlDesigner { namespace QmlDesigner {
static auto category = QmlDesigner::PropertyEditorTracing::category;
PropertyEditorTransaction::PropertyEditorTransaction(QmlDesigner::PropertyEditorView *propertyEditor) : QObject(propertyEditor), m_propertyEditor(propertyEditor), m_timerId(-1) PropertyEditorTransaction::PropertyEditorTransaction(QmlDesigner::PropertyEditorView *propertyEditor) : QObject(propertyEditor), m_propertyEditor(propertyEditor), m_timerId(-1)
{ {
NanotraceHR::Tracer tracer{"property editor transaction constructor", category()};
} }
void PropertyEditorTransaction::start() void PropertyEditorTransaction::start()
{ {
NanotraceHR::Tracer tracer{"property editor transaction start", category()};
if (!m_propertyEditor->model()) if (!m_propertyEditor->model())
return; return;
if (m_rewriterTransaction.isValid()) if (m_rewriterTransaction.isValid())
@@ -24,6 +32,8 @@ void PropertyEditorTransaction::start()
void PropertyEditorTransaction::end() void PropertyEditorTransaction::end()
{ {
NanotraceHR::Tracer tracer{"property editor transaction end", category()};
if (m_rewriterTransaction.isValid() && m_propertyEditor->model()) { if (m_rewriterTransaction.isValid() && m_propertyEditor->model()) {
killTimer(m_timerId); killTimer(m_timerId);
m_rewriterTransaction.commit(); m_rewriterTransaction.commit();
@@ -32,6 +42,8 @@ void PropertyEditorTransaction::end()
bool PropertyEditorTransaction::active() const bool PropertyEditorTransaction::active() const
{ {
NanotraceHR::Tracer tracer{"property editor transaction active", category()};
return m_rewriterTransaction.isValid(); return m_rewriterTransaction.isValid();
} }
@@ -39,6 +51,9 @@ void PropertyEditorTransaction::timerEvent(QTimerEvent *timerEvent)
{ {
if (timerEvent->timerId() != m_timerId) if (timerEvent->timerId() != m_timerId)
return; return;
NanotraceHR::Tracer tracer{"property editor transaction timer event", category()};
killTimer(timerEvent->timerId()); killTimer(timerEvent->timerId());
if (m_rewriterTransaction.isValid()) if (m_rewriterTransaction.isValid())
m_rewriterTransaction.commit(); m_rewriterTransaction.commit();

View File

@@ -3,10 +3,14 @@
#include "propertyeditorutils.h" #include "propertyeditorutils.h"
#include "propertyeditortracing.h"
namespace QmlDesigner { namespace QmlDesigner {
namespace PropertyEditorUtils { namespace PropertyEditorUtils {
static auto category = QmlDesigner::PropertyEditorTracing::category;
#ifndef QDS_USE_PROJECTSTORAGE #ifndef QDS_USE_PROJECTSTORAGE
static bool checkIfUnkownTypeProperty(const std::vector<PropertyName> &propertyNames, static bool checkIfUnkownTypeProperty(const std::vector<PropertyName> &propertyNames,
@@ -31,6 +35,8 @@ static bool checkIfUnkownTypeProperty(const std::vector<PropertyName> &propertyN
PropertyMetaInfos filteredProperties(const NodeMetaInfo &metaInfo) PropertyMetaInfos filteredProperties(const NodeMetaInfo &metaInfo)
{ {
NanotraceHR::Tracer tracer{"property editor utils filtered properties", category()};
auto properties = metaInfo.properties(); auto properties = metaInfo.properties();
#ifndef QDS_USE_PROJECTSTORAGE #ifndef QDS_USE_PROJECTSTORAGE

View File

@@ -3,20 +3,22 @@
#include "propertyeditorvalue.h" #include "propertyeditorvalue.h"
#include "abstractview.h" #include "propertyeditortracing.h"
#include "bindingproperty.h"
#include "createtexture.h"
#include "designermcumanager.h"
#include "designmodewidget.h"
#include "nodemetainfo.h"
#include "nodeproperty.h"
#include "propertyeditorutils.h" #include "propertyeditorutils.h"
#include "propertyeditorview.h" #include "propertyeditorview.h"
#include "qmldesignerplugin.h"
#include "qmlitemnode.h" #include <abstractview.h>
#include "qmlobjectnode.h" #include <bindingproperty.h>
#include "rewritertransaction.h" #include <createtexture.h>
#include "rewritingexception.h" #include <designermcumanager.h>
#include <designmodewidget.h>
#include <nodemetainfo.h>
#include <nodeproperty.h>
#include <qmldesignerplugin.h>
#include <qmlitemnode.h>
#include <qmlobjectnode.h>
#include <rewritertransaction.h>
#include <rewritingexception.h>
#include <enumeration.h> #include <enumeration.h>
#include <utils3d.h> #include <utils3d.h>
@@ -28,14 +30,19 @@
namespace QmlDesigner { namespace QmlDesigner {
static auto category = QmlDesigner::PropertyEditorTracing::category;
PropertyEditorValue::PropertyEditorValue(QObject *parent) PropertyEditorValue::PropertyEditorValue(QObject *parent)
: QObject(parent), : QObject(parent),
m_complexNode(new PropertyEditorNodeWrapper(this)) m_complexNode(new PropertyEditorNodeWrapper(this))
{ {
NanotraceHR::Tracer tracer{"property editor value constructor", category()};
} }
QVariant PropertyEditorValue::value() const QVariant PropertyEditorValue::value() const
{ {
NanotraceHR::Tracer tracer{"property editor value value", category()};
QVariant returnValue = m_value; QVariant returnValue = m_value;
if (auto metaInfo = modelNode().metaInfo(); metaInfo.property(name()).propertyType().isUrl()) if (auto metaInfo = modelNode().metaInfo(); metaInfo.property(name()).propertyType().isUrl())
returnValue = returnValue.toUrl().toString(); returnValue = returnValue.toUrl().toString();
@@ -107,6 +114,8 @@ static bool compareVariants(const QVariant &value1, const QVariant &value2)
void PropertyEditorValue::setValueWithEmit(const QVariant &value) void PropertyEditorValue::setValueWithEmit(const QVariant &value)
{ {
NanotraceHR::Tracer tracer{"property editor value set value with emit", category()};
if (!compareVariants(value, m_value) || isBound()) { if (!compareVariants(value, m_value) || isBound()) {
QVariant newValue = value; QVariant newValue = value;
if (auto metaInfo = modelNode().metaInfo(); metaInfo.property(name()).propertyType().isUrl()) if (auto metaInfo = modelNode().metaInfo(); metaInfo.property(name()).propertyType().isUrl())
@@ -127,6 +136,8 @@ void PropertyEditorValue::setValueWithEmit(const QVariant &value)
void PropertyEditorValue::setValue(const QVariant &value) void PropertyEditorValue::setValue(const QVariant &value)
{ {
NanotraceHR::Tracer tracer{"property editor value set value", category()};
const bool colorsEqual = cleverColorCompare(value, m_value); const bool colorsEqual = cleverColorCompare(value, m_value);
if (!compareVariants(m_value, value) && !cleverDoubleCompare(value, m_value) && !colorsEqual) if (!compareVariants(m_value, value) && !cleverDoubleCompare(value, m_value) && !colorsEqual)
@@ -145,16 +156,22 @@ void PropertyEditorValue::setValue(const QVariant &value)
QString PropertyEditorValue::enumeration() const QString PropertyEditorValue::enumeration() const
{ {
NanotraceHR::Tracer tracer{"property editor value enumeration", category()};
return m_value.value<Enumeration>().nameToString(); return m_value.value<Enumeration>().nameToString();
} }
QString PropertyEditorValue::expression() const QString PropertyEditorValue::expression() const
{ {
NanotraceHR::Tracer tracer{"property editor value expression", category()};
return m_expression; return m_expression;
} }
void PropertyEditorValue::setExpressionWithEmit(const QString &expression) void PropertyEditorValue::setExpressionWithEmit(const QString &expression)
{ {
NanotraceHR::Tracer tracer{"property editor value set expression with emit", category()};
if (m_expression != expression) { if (m_expression != expression) {
setExpression(expression); setExpression(expression);
m_value.clear(); m_value.clear();
@@ -166,7 +183,9 @@ void PropertyEditorValue::setExpressionWithEmit(const QString &expression)
void PropertyEditorValue::setExpression(const QString &expression) void PropertyEditorValue::setExpression(const QString &expression)
{ {
if ( m_expression != expression) { NanotraceHR::Tracer tracer{"property editor value set expression", category()};
if (m_expression != expression) {
m_expression = expression; m_expression = expression;
emit expressionChanged(QString()); emit expressionChanged(QString());
} }
@@ -174,11 +193,15 @@ void PropertyEditorValue::setExpression(const QString &expression)
QString PropertyEditorValue::valueToString() const QString PropertyEditorValue::valueToString() const
{ {
NanotraceHR::Tracer tracer{"property editor value value to string", category()};
return value().toString(); return value().toString();
} }
bool PropertyEditorValue::isInSubState() const bool PropertyEditorValue::isInSubState() const
{ {
NanotraceHR::Tracer tracer{"property editor value is in sub state", category()};
const QmlObjectNode objectNode(modelNode()); const QmlObjectNode objectNode(modelNode());
return objectNode.isValid() && objectNode.currentState().isValid() return objectNode.isValid() && objectNode.currentState().isValid()
&& objectNode.propertyAffectedByCurrentState(name()); && objectNode.propertyAffectedByCurrentState(name());
@@ -186,42 +209,58 @@ bool PropertyEditorValue::isInSubState() const
bool PropertyEditorValue::isBound() const bool PropertyEditorValue::isBound() const
{ {
NanotraceHR::Tracer tracer{"property editor value is bound", category()};
const QmlObjectNode objectNode(modelNode()); const QmlObjectNode objectNode(modelNode());
return m_forceBound || (objectNode.isValid() && objectNode.hasBindingProperty(name())); return m_forceBound || (objectNode.isValid() && objectNode.hasBindingProperty(name()));
} }
bool PropertyEditorValue::isInModel() const bool PropertyEditorValue::isInModel() const
{ {
NanotraceHR::Tracer tracer{"property editor value is in model", category()};
return modelNode().hasProperty(name()); return modelNode().hasProperty(name());
} }
PropertyNameView PropertyEditorValue::name() const PropertyNameView PropertyEditorValue::name() const
{ {
NanotraceHR::Tracer tracer{"property editor value name", category()};
return m_name; return m_name;
} }
QString PropertyEditorValue::nameAsQString() const QString PropertyEditorValue::nameAsQString() const
{ {
NanotraceHR::Tracer tracer{"property editor value name as QString", category()};
return QString::fromUtf8(m_name); return QString::fromUtf8(m_name);
} }
void PropertyEditorValue::setName(PropertyNameView name) void PropertyEditorValue::setName(PropertyNameView name)
{ {
NanotraceHR::Tracer tracer{"property editor value set name", category()};
m_name = name; m_name = name;
} }
bool PropertyEditorValue::isValid() const bool PropertyEditorValue::isValid() const
{ {
NanotraceHR::Tracer tracer{"property editor value is valid", category()};
return m_isValid; return m_isValid;
} }
void PropertyEditorValue::setIsValid(bool valid) void PropertyEditorValue::setIsValid(bool valid)
{ {
NanotraceHR::Tracer tracer{"property editor value set is valid", category()};
m_isValid = valid; m_isValid = valid;
} }
bool PropertyEditorValue::isTranslated() const bool PropertyEditorValue::isTranslated() const
{ {
NanotraceHR::Tracer tracer{"property editor value is translated", category()};
if (modelNode().isValid()) { if (modelNode().isValid()) {
auto metaInfo = modelNode().metaInfo(); auto metaInfo = modelNode().metaInfo();
auto isString = metaInfo.isValid() && metaInfo.hasProperty(name()) auto isString = metaInfo.isValid() && metaInfo.hasProperty(name())
@@ -249,11 +288,15 @@ bool PropertyEditorValue::isTranslated() const
bool PropertyEditorValue::hasActiveDrag() const bool PropertyEditorValue::hasActiveDrag() const
{ {
NanotraceHR::Tracer tracer{"property editor value has active drag", category()};
return m_hasActiveDrag; return m_hasActiveDrag;
} }
void PropertyEditorValue::setHasActiveDrag(bool val) void PropertyEditorValue::setHasActiveDrag(bool val)
{ {
NanotraceHR::Tracer tracer{"property editor value set has active drag", category()};
if (m_hasActiveDrag != val) { if (m_hasActiveDrag != val) {
m_hasActiveDrag = val; m_hasActiveDrag = val;
emit hasActiveDragChanged(); emit hasActiveDragChanged();
@@ -272,6 +315,8 @@ static bool isAllowedSubclassType(const QString &type, const NodeMetaInfo &metaI
bool PropertyEditorValue::isAvailable() const bool PropertyEditorValue::isAvailable() const
{ {
NanotraceHR::Tracer tracer{"property editor value is available", category()};
if (!m_modelNode.isValid()) if (!m_modelNode.isValid())
return true; return true;
@@ -322,11 +367,15 @@ bool PropertyEditorValue::isAvailable() const
ModelNode PropertyEditorValue::modelNode() const ModelNode PropertyEditorValue::modelNode() const
{ {
NanotraceHR::Tracer tracer{"property editor value model node", category()};
return m_modelNode; return m_modelNode;
} }
void PropertyEditorValue::setModelNode(const ModelNode &modelNode) void PropertyEditorValue::setModelNode(const ModelNode &modelNode)
{ {
NanotraceHR::Tracer tracer{"property editor value set model node", category()};
if (modelNode != m_modelNode) { if (modelNode != m_modelNode) {
m_modelNode = modelNode; m_modelNode = modelNode;
m_complexNode->update(); m_complexNode->update();
@@ -336,11 +385,15 @@ void PropertyEditorValue::setModelNode(const ModelNode &modelNode)
PropertyEditorNodeWrapper *PropertyEditorValue::complexNode() PropertyEditorNodeWrapper *PropertyEditorValue::complexNode()
{ {
NanotraceHR::Tracer tracer{"property editor value complex node", category()};
return m_complexNode; return m_complexNode;
} }
void PropertyEditorValue::resetValue() void PropertyEditorValue::resetValue()
{ {
NanotraceHR::Tracer tracer{"property editor value reset value", category()};
if (m_value.isValid() || !m_expression.isEmpty() || isBound()) { if (m_value.isValid() || !m_expression.isEmpty() || isBound()) {
m_value = QVariant(); m_value = QVariant();
m_isBound = false; m_isBound = false;
@@ -353,6 +406,8 @@ void PropertyEditorValue::resetValue()
void PropertyEditorValue::setEnumeration(const QString &scope, const QString &name) void PropertyEditorValue::setEnumeration(const QString &scope, const QString &name)
{ {
NanotraceHR::Tracer tracer{"property editor value set enumeration", category()};
Enumeration newEnumeration(scope.toUtf8(), name.toUtf8()); Enumeration newEnumeration(scope.toUtf8(), name.toUtf8());
setValueWithEmit(QVariant::fromValue(newEnumeration)); setValueWithEmit(QVariant::fromValue(newEnumeration));
@@ -360,11 +415,15 @@ void PropertyEditorValue::setEnumeration(const QString &scope, const QString &na
void PropertyEditorValue::exportPropertyAsAlias() void PropertyEditorValue::exportPropertyAsAlias()
{ {
NanotraceHR::Tracer tracer{"property editor value export property as alias", category()};
emit exportPropertyAsAliasRequested(nameAsQString()); emit exportPropertyAsAliasRequested(nameAsQString());
} }
bool PropertyEditorValue::hasPropertyAlias() const bool PropertyEditorValue::hasPropertyAlias() const
{ {
NanotraceHR::Tracer tracer{"property editor value has property alias", category()};
if (!modelNode().isValid()) if (!modelNode().isValid())
return false; return false;
@@ -387,16 +446,22 @@ bool PropertyEditorValue::hasPropertyAlias() const
bool PropertyEditorValue::isAttachedProperty() const bool PropertyEditorValue::isAttachedProperty() const
{ {
NanotraceHR::Tracer tracer{"property editor value is attached property", category()};
return !nameAsQString().isEmpty() && nameAsQString().at(0).isUpper(); return !nameAsQString().isEmpty() && nameAsQString().at(0).isUpper();
} }
void PropertyEditorValue::removeAliasExport() void PropertyEditorValue::removeAliasExport()
{ {
NanotraceHR::Tracer tracer{"property editor value remove alias export", category()};
emit removeAliasExportRequested(nameAsQString()); emit removeAliasExportRequested(nameAsQString());
} }
QString PropertyEditorValue::getTranslationContext() const QString PropertyEditorValue::getTranslationContext() const
{ {
NanotraceHR::Tracer tracer{"property editor value get translation context", category()};
if (modelNode().isValid()) { if (modelNode().isValid()) {
if (auto metaInfo = modelNode().metaInfo(); if (auto metaInfo = modelNode().metaInfo();
metaInfo.isValid() && metaInfo.hasProperty(name()) metaInfo.isValid() && metaInfo.hasProperty(name())
@@ -416,7 +481,10 @@ QString PropertyEditorValue::getTranslationContext() const
bool PropertyEditorValue::isIdList() const bool PropertyEditorValue::isIdList() const
{ {
if (modelNode().isValid() && modelNode().metaInfo().isValid() && modelNode().metaInfo().hasProperty(name())) { NanotraceHR::Tracer tracer{"property editor value is id list", category()};
if (modelNode().isValid() && modelNode().metaInfo().isValid()
&& modelNode().metaInfo().hasProperty(name())) {
const QmlObjectNode objectNode(modelNode()); const QmlObjectNode objectNode(modelNode());
if (objectNode.hasBindingProperty(name())) { if (objectNode.hasBindingProperty(name())) {
static const QRegularExpression rx(QRegularExpression::anchoredPattern( static const QRegularExpression rx(QRegularExpression::anchoredPattern(
@@ -436,11 +504,15 @@ bool PropertyEditorValue::isIdList() const
QStringList PropertyEditorValue::getExpressionAsList() const QStringList PropertyEditorValue::getExpressionAsList() const
{ {
NanotraceHR::Tracer tracer{"property editor value get expression as list", category()};
return generateStringList(expression()); return generateStringList(expression());
} }
QVector<double> PropertyEditorValue::getExpressionAsVector() const QVector<double> PropertyEditorValue::getExpressionAsVector() const
{ {
NanotraceHR::Tracer tracer{"property editor value get expression as vector", category()};
const QRegularExpression rx( const QRegularExpression rx(
QRegularExpression::anchoredPattern("Qt.vector(2|3|4)d\\((.*?)\\)")); QRegularExpression::anchoredPattern("Qt.vector(2|3|4)d\\((.*?)\\)"));
const QRegularExpressionMatch match = rx.match(expression()); const QRegularExpressionMatch match = rx.match(expression());
@@ -469,6 +541,8 @@ QVector<double> PropertyEditorValue::getExpressionAsVector() const
bool PropertyEditorValue::idListAdd(const QString &value) bool PropertyEditorValue::idListAdd(const QString &value)
{ {
NanotraceHR::Tracer tracer{"property editor value id list add", category()};
const QmlObjectNode objectNode(modelNode()); const QmlObjectNode objectNode(modelNode());
if (!isIdList() && objectNode.isValid() && objectNode.hasProperty(name())) if (!isIdList() && objectNode.isValid() && objectNode.hasProperty(name()))
return false; return false;
@@ -487,6 +561,8 @@ bool PropertyEditorValue::idListAdd(const QString &value)
bool PropertyEditorValue::idListRemove(int idx) bool PropertyEditorValue::idListRemove(int idx)
{ {
NanotraceHR::Tracer tracer{"property editor value id list remove", category()};
QTC_ASSERT(isIdList(), return false); QTC_ASSERT(isIdList(), return false);
auto stringList = generateStringList(expression()); auto stringList = generateStringList(expression());
@@ -505,6 +581,8 @@ bool PropertyEditorValue::idListRemove(int idx)
bool PropertyEditorValue::idListReplace(int idx, const QString &value) bool PropertyEditorValue::idListReplace(int idx, const QString &value)
{ {
NanotraceHR::Tracer tracer{"property editor value id list replace", category()};
QTC_ASSERT(isIdList(), return false); QTC_ASSERT(isIdList(), return false);
static const QRegularExpression rx(QRegularExpression::anchoredPattern( static const QRegularExpression rx(QRegularExpression::anchoredPattern(
@@ -525,6 +603,8 @@ bool PropertyEditorValue::idListReplace(int idx, const QString &value)
void PropertyEditorValue::commitDrop(const QString &dropData) void PropertyEditorValue::commitDrop(const QString &dropData)
{ {
NanotraceHR::Tracer tracer{"property editor value commit drop", category()};
if (m_modelNode.metaInfo().property(m_name).propertyType().isQtQuick3DTexture()) { if (m_modelNode.metaInfo().property(m_name).propertyType().isQtQuick3DTexture()) {
m_modelNode.view()->executeInTransaction(__FUNCTION__, [&] { m_modelNode.view()->executeInTransaction(__FUNCTION__, [&] {
ModelNode texture = m_modelNode.view()->modelNodeForInternalId(dropData.toInt()); ModelNode texture = m_modelNode.view()->modelNodeForInternalId(dropData.toInt());
@@ -548,6 +628,8 @@ void PropertyEditorValue::commitDrop(const QString &dropData)
void PropertyEditorValue::editMaterial(int idx) void PropertyEditorValue::editMaterial(int idx)
{ {
NanotraceHR::Tracer tracer{"property editor value edit material", category()};
if (ModelNode material = Utils3D::getMaterialOfModel(m_modelNode, idx)) { if (ModelNode material = Utils3D::getMaterialOfModel(m_modelNode, idx)) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("Properties", true); QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("Properties", true);
material.selectNode(); material.selectNode();
@@ -556,6 +638,8 @@ void PropertyEditorValue::editMaterial(int idx)
void PropertyEditorValue::setForceBound(bool b) void PropertyEditorValue::setForceBound(bool b)
{ {
NanotraceHR::Tracer tracer{"property editor value set force bound", category()};
if (m_forceBound == b) if (m_forceBound == b)
return; return;
m_forceBound = b; m_forceBound = b;
@@ -565,6 +649,8 @@ void PropertyEditorValue::setForceBound(bool b)
void PropertyEditorValue::insertKeyframe() void PropertyEditorValue::insertKeyframe()
{ {
NanotraceHR::Tracer tracer{"property editor value insert keyframe", category()};
if (!m_modelNode.isValid()) if (!m_modelNode.isValid())
return; return;
@@ -582,6 +668,8 @@ void PropertyEditorValue::insertKeyframe()
QStringList PropertyEditorValue::generateStringList(const QString &string) const QStringList PropertyEditorValue::generateStringList(const QString &string) const
{ {
NanotraceHR::Tracer tracer{"property editor value generate string list", category()};
QString copy = string; QString copy = string;
copy = copy.remove("[").remove("]"); copy = copy.remove("[").remove("]");
@@ -594,6 +682,8 @@ QStringList PropertyEditorValue::generateStringList(const QString &string) const
QString PropertyEditorValue::generateString(const QStringList &stringList) const QString PropertyEditorValue::generateString(const QStringList &stringList) const
{ {
NanotraceHR::Tracer tracer{"property editor value generate string", category()};
if (stringList.size() > 1) if (stringList.size() > 1)
return "[" + stringList.join(",") + "]"; return "[" + stringList.join(",") + "]";
else if (stringList.isEmpty()) else if (stringList.isEmpty())
@@ -604,6 +694,8 @@ QString PropertyEditorValue::generateString(const QStringList &stringList) const
void PropertyEditorValue::registerDeclarativeTypes() void PropertyEditorValue::registerDeclarativeTypes()
{ {
NanotraceHR::Tracer tracer{"property editor value register declarative types", category()};
qmlRegisterType<PropertyEditorValue>("HelperWidgets", 2, 0, "PropertyEditorValue"); qmlRegisterType<PropertyEditorValue>("HelperWidgets", 2, 0, "PropertyEditorValue");
qmlRegisterType<PropertyEditorNodeWrapper>("HelperWidgets", 2, 0, "PropertyEditorNodeWrapper"); qmlRegisterType<PropertyEditorNodeWrapper>("HelperWidgets", 2, 0, "PropertyEditorNodeWrapper");
qmlRegisterType<QQmlPropertyMap>("HelperWidgets", 2, 0, "QQmlPropertyMap"); qmlRegisterType<QQmlPropertyMap>("HelperWidgets", 2, 0, "QQmlPropertyMap");
@@ -613,6 +705,8 @@ PropertyEditorNodeWrapper::PropertyEditorNodeWrapper(PropertyEditorValue *parent
: QObject(parent), : QObject(parent),
m_valuesPropertyMap(this) m_valuesPropertyMap(this)
{ {
NanotraceHR::Tracer tracer{"property editor value node wrapper constructor", category()};
m_editorValue = parent; m_editorValue = parent;
connect(m_editorValue, &PropertyEditorValue::modelNodeChanged, this, &PropertyEditorNodeWrapper::update); connect(m_editorValue, &PropertyEditorValue::modelNodeChanged, this, &PropertyEditorNodeWrapper::update);
} }
@@ -620,35 +714,48 @@ PropertyEditorNodeWrapper::PropertyEditorNodeWrapper(PropertyEditorValue *parent
PropertyEditorNodeWrapper::PropertyEditorNodeWrapper(QObject *parent) PropertyEditorNodeWrapper::PropertyEditorNodeWrapper(QObject *parent)
: QObject(parent) : QObject(parent)
{ {
NanotraceHR::Tracer tracer{"property editor node wrapper constructor", category()};
} }
bool PropertyEditorNodeWrapper::exists() const bool PropertyEditorNodeWrapper::exists() const
{ {
NanotraceHR::Tracer tracer{"property editor node wrapper exists", category()};
return m_editorValue && m_editorValue->modelNode().isValid() && m_modelNode.isValid(); return m_editorValue && m_editorValue->modelNode().isValid() && m_modelNode.isValid();
} }
QString PropertyEditorNodeWrapper::type() const QString PropertyEditorNodeWrapper::type() const
{ {
NanotraceHR::Tracer tracer{"property editor node wrapper type", category()};
return m_modelNode.simplifiedTypeName(); return m_modelNode.simplifiedTypeName();
} }
ModelNode PropertyEditorNodeWrapper::parentModelNode() const ModelNode PropertyEditorNodeWrapper::parentModelNode() const
{ {
NanotraceHR::Tracer tracer{"property editor node wrapper parent model node", category()};
return m_editorValue->modelNode(); return m_editorValue->modelNode();
} }
PropertyNameView PropertyEditorNodeWrapper::propertyName() const PropertyNameView PropertyEditorNodeWrapper::propertyName() const
{ {
NanotraceHR::Tracer tracer{"property editor node wrapper property name", category()};
return m_editorValue->name(); return m_editorValue->name();
} }
QQmlPropertyMap *PropertyEditorNodeWrapper::properties() QQmlPropertyMap *PropertyEditorNodeWrapper::properties()
{ {
NanotraceHR::Tracer tracer{"property editor node wrapper properties", category()};
return &m_valuesPropertyMap; return &m_valuesPropertyMap;
} }
void PropertyEditorNodeWrapper::add(const QString &type) void PropertyEditorNodeWrapper::add(const QString &type)
{ {
NanotraceHR::Tracer tracer{"property editor node wrapper add", category()};
TypeName propertyType = type.toUtf8(); TypeName propertyType = type.toUtf8();
if ((m_editorValue && m_editorValue->modelNode().isValid())) { if ((m_editorValue && m_editorValue->modelNode().isValid())) {
@@ -683,6 +790,8 @@ void PropertyEditorNodeWrapper::add(const QString &type)
void PropertyEditorNodeWrapper::remove() void PropertyEditorNodeWrapper::remove()
{ {
NanotraceHR::Tracer tracer{"property editor node wrapper remove", category()};
if ((m_editorValue && m_editorValue->modelNode().isValid())) { if ((m_editorValue && m_editorValue->modelNode().isValid())) {
QmlObjectNode(m_modelNode).destroy(); QmlObjectNode(m_modelNode).destroy();
m_editorValue->modelNode().removeProperty(m_editorValue->name()); m_editorValue->modelNode().removeProperty(m_editorValue->name());
@@ -701,6 +810,8 @@ void PropertyEditorNodeWrapper::remove()
void PropertyEditorNodeWrapper::changeValue(const QString &propertyName) void PropertyEditorNodeWrapper::changeValue(const QString &propertyName)
{ {
NanotraceHR::Tracer tracer{"property editor node wrapper change value", category()};
const PropertyName name = propertyName.toUtf8(); const PropertyName name = propertyName.toUtf8();
if (name.isNull()) if (name.isNull())
@@ -718,6 +829,8 @@ void PropertyEditorNodeWrapper::changeValue(const QString &propertyName)
void PropertyEditorNodeWrapper::setup() void PropertyEditorNodeWrapper::setup()
{ {
NanotraceHR::Tracer tracer{"property editor node wrapper setup", category()};
Q_ASSERT(m_editorValue); Q_ASSERT(m_editorValue);
Q_ASSERT(m_editorValue->modelNode().isValid()); Q_ASSERT(m_editorValue->modelNode().isValid());
@@ -748,6 +861,8 @@ void PropertyEditorNodeWrapper::setup()
void PropertyEditorNodeWrapper::update() void PropertyEditorNodeWrapper::update()
{ {
NanotraceHR::Tracer tracer{"property editor node wrapper update", category()};
if (!m_editorValue || !m_editorValue->modelNode().isValid()) if (!m_editorValue || !m_editorValue->modelNode().isValid())
return; return;
@@ -763,6 +878,8 @@ void PropertyEditorNodeWrapper::update()
QQmlPropertyMap *PropertyEditorSubSelectionWrapper::properties() QQmlPropertyMap *PropertyEditorSubSelectionWrapper::properties()
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper properties", category()};
return &m_valuesPropertyMap; return &m_valuesPropertyMap;
} }
@@ -778,6 +895,9 @@ void PropertyEditorSubSelectionWrapper::createPropertyEditorValue(const QmlObjec
PropertyNameView name, PropertyNameView name,
const QVariant &value) const QVariant &value)
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper create property editor value",
category()};
Utils::SmallString propertyName = name.toByteArray(); Utils::SmallString propertyName = name.toByteArray();
propertyName.replace('.', '_'); propertyName.replace('.', '_');
@@ -816,6 +936,9 @@ void PropertyEditorSubSelectionWrapper::createPropertyEditorValue(const QmlObjec
void PropertyEditorSubSelectionWrapper::exportPropertyAsAlias(const QString &name) void PropertyEditorSubSelectionWrapper::exportPropertyAsAlias(const QString &name)
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper export property as alias",
category()};
if (name.isNull()) if (name.isNull())
return; return;
@@ -831,6 +954,9 @@ void PropertyEditorSubSelectionWrapper::exportPropertyAsAlias(const QString &nam
void PropertyEditorSubSelectionWrapper::removeAliasExport(const QString &name) void PropertyEditorSubSelectionWrapper::removeAliasExport(const QString &name)
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper remove alias export",
category()};
if (name.isNull()) if (name.isNull())
return; return;
@@ -846,12 +972,16 @@ void PropertyEditorSubSelectionWrapper::removeAliasExport(const QString &name)
bool PropertyEditorSubSelectionWrapper::locked() const bool PropertyEditorSubSelectionWrapper::locked() const
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper locked", category()};
return m_locked; return m_locked;
} }
PropertyEditorSubSelectionWrapper::PropertyEditorSubSelectionWrapper(const ModelNode &modelNode) PropertyEditorSubSelectionWrapper::PropertyEditorSubSelectionWrapper(const ModelNode &modelNode)
: m_modelNode(modelNode) : m_modelNode(modelNode)
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper constructor", category()};
QmlObjectNode qmlObjectNode(modelNode); QmlObjectNode qmlObjectNode(modelNode);
QTC_ASSERT(qmlObjectNode.isValid(), return ); QTC_ASSERT(qmlObjectNode.isValid(), return );
@@ -867,11 +997,15 @@ PropertyEditorSubSelectionWrapper::PropertyEditorSubSelectionWrapper(const Model
ModelNode PropertyEditorSubSelectionWrapper::modelNode() const ModelNode PropertyEditorSubSelectionWrapper::modelNode() const
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper model node", category()};
return m_modelNode; return m_modelNode;
} }
void PropertyEditorSubSelectionWrapper::deleteModelNode() void PropertyEditorSubSelectionWrapper::deleteModelNode()
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper delete model node", category()};
QmlObjectNode objectNode(m_modelNode); QmlObjectNode objectNode(m_modelNode);
view()->executeInTransaction("PropertyEditorView::changeExpression", [&] { view()->executeInTransaction("PropertyEditorView::changeExpression", [&] {
@@ -882,7 +1016,9 @@ void PropertyEditorSubSelectionWrapper::deleteModelNode()
void PropertyEditorSubSelectionWrapper::changeValue(const QString &name) void PropertyEditorSubSelectionWrapper::changeValue(const QString &name)
{ {
QTC_ASSERT(m_modelNode.isValid(), return ); NanotraceHR::Tracer tracer{"property editor sub selection wrapper change value", category()};
QTC_ASSERT(m_modelNode.isValid(), return);
if (name.isNull()) if (name.isNull())
return; return;
@@ -919,6 +1055,9 @@ void PropertyEditorSubSelectionWrapper::changeValue(const QString &name)
void PropertyEditorSubSelectionWrapper::setValueFromModel(PropertyNameView name, const QVariant &value) void PropertyEditorSubSelectionWrapper::setValueFromModel(PropertyNameView name, const QVariant &value)
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper set value from model",
category()};
m_locked = true; m_locked = true;
QmlObjectNode qmlObjectNode(m_modelNode); QmlObjectNode qmlObjectNode(m_modelNode);
@@ -934,6 +1073,8 @@ void PropertyEditorSubSelectionWrapper::setValueFromModel(PropertyNameView name,
void PropertyEditorSubSelectionWrapper::resetValue(PropertyNameView name) void PropertyEditorSubSelectionWrapper::resetValue(PropertyNameView name)
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper reset value", category()};
auto propertyValue = qobject_cast<PropertyEditorValue *>( auto propertyValue = qobject_cast<PropertyEditorValue *>(
variantToQObject(m_valuesPropertyMap.value(QString::fromUtf8(name)))); variantToQObject(m_valuesPropertyMap.value(QString::fromUtf8(name))));
if (propertyValue) if (propertyValue)
@@ -942,12 +1083,17 @@ void PropertyEditorSubSelectionWrapper::resetValue(PropertyNameView name)
bool PropertyEditorSubSelectionWrapper::isRelevantModelNode(const ModelNode &modelNode) const bool PropertyEditorSubSelectionWrapper::isRelevantModelNode(const ModelNode &modelNode) const
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper is relevant model node",
category()};
QmlObjectNode objectNode(m_modelNode); QmlObjectNode objectNode(m_modelNode);
return modelNode == m_modelNode || objectNode.propertyChangeForCurrentState() == modelNode; return modelNode == m_modelNode || objectNode.propertyChangeForCurrentState() == modelNode;
} }
void PropertyEditorSubSelectionWrapper::changeExpression(const QString &propertyName) void PropertyEditorSubSelectionWrapper::changeExpression(const QString &propertyName)
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper change expression", category()};
PropertyName name = propertyName.toUtf8(); PropertyName name = propertyName.toUtf8();
QTC_ASSERT(m_modelNode.isValid(), return ); QTC_ASSERT(m_modelNode.isValid(), return );
@@ -981,6 +1127,9 @@ void PropertyEditorSubSelectionWrapper::changeExpression(const QString &property
void PropertyEditorSubSelectionWrapper::removePropertyFromModel(PropertyNameView propertyName) void PropertyEditorSubSelectionWrapper::removePropertyFromModel(PropertyNameView propertyName)
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper remove property from model",
category()};
QTC_ASSERT(m_modelNode.isValid(), return ); QTC_ASSERT(m_modelNode.isValid(), return );
m_locked = true; m_locked = true;
@@ -1000,6 +1149,9 @@ void PropertyEditorSubSelectionWrapper::removePropertyFromModel(PropertyNameView
void PropertyEditorSubSelectionWrapper::commitVariantValueToModel(PropertyNameView propertyName, void PropertyEditorSubSelectionWrapper::commitVariantValueToModel(PropertyNameView propertyName,
const QVariant &value) const QVariant &value)
{ {
NanotraceHR::Tracer tracer{
"property editor sub selection wrapper commit variant value to model", category()};
QTC_ASSERT(m_modelNode.isValid(), return ); QTC_ASSERT(m_modelNode.isValid(), return );
try { try {
@@ -1016,6 +1168,7 @@ void PropertyEditorSubSelectionWrapper::commitVariantValueToModel(PropertyNameVi
AbstractView *PropertyEditorSubSelectionWrapper::view() const AbstractView *PropertyEditorSubSelectionWrapper::view() const
{ {
NanotraceHR::Tracer tracer{"property editor sub selection wrapper view", category()};
QTC_CHECK(m_modelNode.isValid()); QTC_CHECK(m_modelNode.isValid());
return m_modelNode.view(); return m_modelNode.view();

View File

@@ -4,6 +4,7 @@
#include "propertyeditorview.h" #include "propertyeditorview.h"
#include "propertyeditorqmlbackend.h" #include "propertyeditorqmlbackend.h"
#include "propertyeditortracing.h"
#include "propertyeditortransaction.h" #include "propertyeditortransaction.h"
#include "propertyeditorvalue.h" #include "propertyeditorvalue.h"
#include "propertyeditorwidget.h" #include "propertyeditorwidget.h"
@@ -50,6 +51,8 @@ enum {
namespace QmlDesigner { namespace QmlDesigner {
static auto category = PropertyEditorTracing::category;
constexpr QStringView quick3dImport{u"QtQuick3D"}; constexpr QStringView quick3dImport{u"QtQuick3D"};
static bool propertyIsAttachedLayoutProperty(PropertyNameView propertyName) static bool propertyIsAttachedLayoutProperty(PropertyNameView propertyName)
@@ -80,6 +83,8 @@ PropertyEditorView::PropertyEditorView(AsynchronousImageCache &imageCache,
, m_propertyComponentGenerator{PropertyEditorQmlBackend::propertyEditorResourcesPath(), model()} , m_propertyComponentGenerator{PropertyEditorQmlBackend::propertyEditorResourcesPath(), model()}
, m_locked(false) , m_locked(false)
{ {
NanotraceHR::Tracer tracer{"property editor view constructor", category()};
m_qmlDir = PropertyEditorQmlBackend::propertyEditorResourcesPath(); m_qmlDir = PropertyEditorQmlBackend::propertyEditorResourcesPath();
if (Utils::HostOsInfo::isMacHost()) if (Utils::HostOsInfo::isMacHost())
@@ -101,11 +106,15 @@ PropertyEditorView::PropertyEditorView(AsynchronousImageCache &imageCache,
PropertyEditorView::~PropertyEditorView() PropertyEditorView::~PropertyEditorView()
{ {
NanotraceHR::Tracer tracer{"property editor view destructor", category()};
qDeleteAll(m_qmlBackendHash); qDeleteAll(m_qmlBackendHash);
} }
void PropertyEditorView::changeValue(const QString &name) void PropertyEditorView::changeValue(const QString &name)
{ {
NanotraceHR::Tracer tracer{"property editor view change value", category()};
PropertyName propertyName = name.toUtf8(); PropertyName propertyName = name.toUtf8();
if (propertyName.isNull()) if (propertyName.isNull())
@@ -231,6 +240,8 @@ static bool isTrueFalseLiteral(const QString &expression)
void PropertyEditorView::changeExpression(const QString &propertyName) void PropertyEditorView::changeExpression(const QString &propertyName)
{ {
NanotraceHR::Tracer tracer{"property editor view change expression", category()};
PropertyName name = propertyName.toUtf8(); PropertyName name = propertyName.toUtf8();
if (name.isNull()) if (name.isNull())
@@ -268,6 +279,8 @@ void PropertyEditorView::changeExpression(const QString &propertyName)
void PropertyEditorView::exportPropertyAsAlias(const QString &name) void PropertyEditorView::exportPropertyAsAlias(const QString &name)
{ {
NanotraceHR::Tracer tracer{"property editor view export property as alias", category()};
if (name.isNull()) if (name.isNull())
return; return;
@@ -283,6 +296,8 @@ void PropertyEditorView::exportPropertyAsAlias(const QString &name)
void PropertyEditorView::removeAliasExport(const QString &name) void PropertyEditorView::removeAliasExport(const QString &name)
{ {
NanotraceHR::Tracer tracer{"property editor view remove alias export", category()};
if (name.isNull()) if (name.isNull())
return; return;
@@ -298,21 +313,30 @@ void PropertyEditorView::removeAliasExport(const QString &name)
bool PropertyEditorView::locked() const bool PropertyEditorView::locked() const
{ {
NanotraceHR::Tracer tracer{"property editor view locked", category()};
return m_locked; return m_locked;
} }
void PropertyEditorView::currentTimelineChanged(const ModelNode &) void PropertyEditorView::currentTimelineChanged(const ModelNode &)
{ {
m_qmlBackEndForCurrentType->contextObject()->setHasActiveTimeline(QmlTimeline::hasActiveTimeline(this)); NanotraceHR::Tracer tracer{"property editor view current timeline changed", category()};
m_qmlBackEndForCurrentType->contextObject()->setHasActiveTimeline(
QmlTimeline::hasActiveTimeline(this));
} }
void PropertyEditorView::refreshMetaInfos(const TypeIds &deletedTypeIds) void PropertyEditorView::refreshMetaInfos(const TypeIds &deletedTypeIds)
{ {
NanotraceHR::Tracer tracer{"property editor view refresh meta infos", category()};
m_propertyComponentGenerator.refreshMetaInfos(deletedTypeIds); m_propertyComponentGenerator.refreshMetaInfos(deletedTypeIds);
} }
DynamicPropertiesModel *PropertyEditorView::dynamicPropertiesModel() const DynamicPropertiesModel *PropertyEditorView::dynamicPropertiesModel() const
{ {
NanotraceHR::Tracer tracer{"property editor view dynamic properties model", category()};
return m_dynamicPropertiesModel.get(); return m_dynamicPropertiesModel.get();
} }
@@ -320,6 +344,8 @@ void PropertyEditorView::setExpressionOnObjectNode(const QmlObjectNode &constObj
PropertyNameView name, PropertyNameView name,
const QString &newExpression) const QString &newExpression)
{ {
NanotraceHR::Tracer tracer{"property editor view set expression on object node", category()};
auto qmlObjectNode = constObjectNode; auto qmlObjectNode = constObjectNode;
auto expression = newExpression; auto expression = newExpression;
if (auto property = qmlObjectNode.modelNode().metaInfo().property(name)) { if (auto property = qmlObjectNode.modelNode().metaInfo().property(name)) {
@@ -374,7 +400,9 @@ void PropertyEditorView::setExpressionOnObjectNode(const QmlObjectNode &constObj
void PropertyEditorView::generateAliasForProperty(const ModelNode &modelNode, const QString &name) void PropertyEditorView::generateAliasForProperty(const ModelNode &modelNode, const QString &name)
{ {
QTC_ASSERT(modelNode.isValid(), return ); NanotraceHR::Tracer tracer{"property editor view generate alias for property", category()};
QTC_ASSERT(modelNode.isValid(), return);
auto view = modelNode.view(); auto view = modelNode.view();
@@ -400,7 +428,9 @@ void PropertyEditorView::generateAliasForProperty(const ModelNode &modelNode, co
void PropertyEditorView::removeAliasForProperty(const ModelNode &modelNode, const QString &propertyName) void PropertyEditorView::removeAliasForProperty(const ModelNode &modelNode, const QString &propertyName)
{ {
QTC_ASSERT(modelNode.isValid(), return ); NanotraceHR::Tracer tracer{"property editor view remove alias for property", category()};
QTC_ASSERT(modelNode.isValid(), return);
auto view = modelNode.view(); auto view = modelNode.view();
@@ -420,6 +450,8 @@ void PropertyEditorView::removeAliasForProperty(const ModelNode &modelNode, cons
PropertyEditorView *PropertyEditorView::instance() PropertyEditorView *PropertyEditorView::instance()
{ {
NanotraceHR::Tracer tracer{"property editor view instance", category()};
static PropertyEditorView *s_instance = nullptr; static PropertyEditorView *s_instance = nullptr;
if (s_instance) if (s_instance)
@@ -438,6 +470,8 @@ PropertyEditorView *PropertyEditorView::instance()
NodeMetaInfo PropertyEditorView::findCommonAncestor(const ModelNode &node) NodeMetaInfo PropertyEditorView::findCommonAncestor(const ModelNode &node)
{ {
NanotraceHR::Tracer tracer{"property editor view find common ancestor", category()};
if (!node.isValid()) if (!node.isValid())
return node.metaInfo(); return node.metaInfo();
@@ -458,6 +492,8 @@ NodeMetaInfo PropertyEditorView::findCommonAncestor(const ModelNode &node)
void PropertyEditorView::updateSize() void PropertyEditorView::updateSize()
{ {
NanotraceHR::Tracer tracer{"property editor view update size", category()};
if (!m_qmlBackEndForCurrentType) if (!m_qmlBackEndForCurrentType)
return; return;
auto frame = m_qmlBackEndForCurrentType->widget()->findChild<QWidget *>("propertyEditorFrame"); auto frame = m_qmlBackEndForCurrentType->widget()->findChild<QWidget *>("propertyEditorFrame");
@@ -467,6 +503,8 @@ void PropertyEditorView::updateSize()
void PropertyEditorView::resetView() void PropertyEditorView::resetView()
{ {
NanotraceHR::Tracer tracer{"property editor view reset view", category()};
if (model() == nullptr) if (model() == nullptr)
return; return;
@@ -498,6 +536,8 @@ void PropertyEditorView::resetView()
void PropertyEditorView::setIsSelectionLocked(bool locked) void PropertyEditorView::setIsSelectionLocked(bool locked)
{ {
NanotraceHR::Tracer tracer{"property editor view set is selection locked", category()};
if (m_isSelectionLocked != locked) { if (m_isSelectionLocked != locked) {
m_isSelectionLocked = locked; m_isSelectionLocked = locked;
for (PropertyEditorQmlBackend *qmlBackend : std::as_const(m_qmlBackendHash)) for (PropertyEditorQmlBackend *qmlBackend : std::as_const(m_qmlBackendHash))
@@ -555,6 +595,8 @@ PropertyEditorQmlBackend *getQmlBackend(QHash<QString, PropertyEditorQmlBackend
PropertyEditorWidget *stackedWidget, PropertyEditorWidget *stackedWidget,
PropertyEditorView *propertyEditorView) PropertyEditorView *propertyEditorView)
{ {
NanotraceHR::Tracer tracer{"property editor view get Qml Backend", category()};
auto qmlFileName = qmlFileUrl.toString(); auto qmlFileName = qmlFileUrl.toString();
PropertyEditorQmlBackend *currentQmlBackend = qmlBackendHash.value(qmlFileName); PropertyEditorQmlBackend *currentQmlBackend = qmlBackendHash.value(qmlFileName);
@@ -649,6 +691,8 @@ void setupWidget(PropertyEditorQmlBackend *currentQmlBackend,
void PropertyEditorView::handleToolBarAction(int action) void PropertyEditorView::handleToolBarAction(int action)
{ {
NanotraceHR::Tracer tracer{"property editor view handle toolbar action", category()};
switch (action) { switch (action) {
case PropertyEditorContextObject::SelectionLock: { case PropertyEditorContextObject::SelectionLock: {
setIsSelectionLocked(true); setIsSelectionLocked(true);
@@ -663,6 +707,8 @@ void PropertyEditorView::handleToolBarAction(int action)
void PropertyEditorView::setupQmlBackend() void PropertyEditorView::setupQmlBackend()
{ {
NanotraceHR::Tracer tracer{"property editor view setup Qml Backend", category()};
#ifdef QDS_USE_PROJECTSTORAGE #ifdef QDS_USE_PROJECTSTORAGE
const NodeMetaInfo commonAncestor = findCommonAncestor(activeNode()); const NodeMetaInfo commonAncestor = findCommonAncestor(activeNode());
auto selfAndPrototypes = commonAncestor.selfAndPrototypes(); auto selfAndPrototypes = commonAncestor.selfAndPrototypes();
@@ -740,6 +786,8 @@ void PropertyEditorView::setupQmlBackend()
void PropertyEditorView::commitVariantValueToModel(PropertyNameView propertyName, const QVariant &value) void PropertyEditorView::commitVariantValueToModel(PropertyNameView propertyName, const QVariant &value)
{ {
NanotraceHR::Tracer tracer{"property editor view commit variant value to model", category()};
m_locked = true; m_locked = true;
try { try {
RewriterTransaction transaction = beginRewriterTransaction("PropertyEditorView::commitVariantValueToMode"); RewriterTransaction transaction = beginRewriterTransaction("PropertyEditorView::commitVariantValueToMode");
@@ -759,6 +807,8 @@ void PropertyEditorView::commitVariantValueToModel(PropertyNameView propertyName
void PropertyEditorView::commitAuxValueToModel(PropertyNameView propertyName, const QVariant &value) void PropertyEditorView::commitAuxValueToModel(PropertyNameView propertyName, const QVariant &value)
{ {
NanotraceHR::Tracer tracer{"property editor view commit aux value to model", category()};
m_locked = true; m_locked = true;
PropertyNameView name = propertyName; PropertyNameView name = propertyName;
@@ -782,6 +832,8 @@ void PropertyEditorView::commitAuxValueToModel(PropertyNameView propertyName, co
void PropertyEditorView::removePropertyFromModel(PropertyNameView propertyName) void PropertyEditorView::removePropertyFromModel(PropertyNameView propertyName)
{ {
NanotraceHR::Tracer tracer{"property editor view remove property from model", category()};
m_locked = true; m_locked = true;
try { try {
RewriterTransaction transaction = beginRewriterTransaction("PropertyEditorView::removePropertyFromModel"); RewriterTransaction transaction = beginRewriterTransaction("PropertyEditorView::removePropertyFromModel");
@@ -802,22 +854,30 @@ void PropertyEditorView::removePropertyFromModel(PropertyNameView propertyName)
bool PropertyEditorView::noValidSelection() const bool PropertyEditorView::noValidSelection() const
{ {
NanotraceHR::Tracer tracer{"property editor view no valid selection", category()};
QTC_ASSERT(m_qmlBackEndForCurrentType, return true); QTC_ASSERT(m_qmlBackEndForCurrentType, return true);
return !QmlObjectNode::isValidQmlObjectNode(activeNode()); return !QmlObjectNode::isValidQmlObjectNode(activeNode());
} }
ModelNode PropertyEditorView::activeNode() const ModelNode PropertyEditorView::activeNode() const
{ {
NanotraceHR::Tracer tracer{"property editor view active node", category()};
return m_activeNode; return m_activeNode;
} }
void PropertyEditorView::setActiveNode(const ModelNode &node) void PropertyEditorView::setActiveNode(const ModelNode &node)
{ {
NanotraceHR::Tracer tracer{"property editor view set active node", category()};
m_activeNode = node; m_activeNode = node;
} }
QList<ModelNode> PropertyEditorView::currentNodes() const QList<ModelNode> PropertyEditorView::currentNodes() const
{ {
NanotraceHR::Tracer tracer{"property editor view current nodes", category()};
if (m_isSelectionLocked) if (m_isSelectionLocked)
return {m_activeNode}; return {m_activeNode};
@@ -827,6 +887,8 @@ QList<ModelNode> PropertyEditorView::currentNodes() const
void PropertyEditorView::selectedNodesChanged(const QList<ModelNode> &, void PropertyEditorView::selectedNodesChanged(const QList<ModelNode> &,
const QList<ModelNode> &) const QList<ModelNode> &)
{ {
NanotraceHR::Tracer tracer{"property editor view selected nodes changed", category()};
if (!m_isSelectionLocked) if (!m_isSelectionLocked)
select(); select();
@@ -837,6 +899,8 @@ void PropertyEditorView::selectedNodesChanged(const QList<ModelNode> &,
bool PropertyEditorView::isNodeOrChildSelected(const ModelNode &node) const bool PropertyEditorView::isNodeOrChildSelected(const ModelNode &node) const
{ {
NanotraceHR::Tracer tracer{"property editor view is node or child selected", category()};
if (activeNode().isValid() && node.isValid()) { if (activeNode().isValid() && node.isValid()) {
const ModelNodes &nodeList = node.allSubModelNodesAndThisNode(); const ModelNodes &nodeList = node.allSubModelNodesAndThisNode();
return nodeList.contains(activeNode()); return nodeList.contains(activeNode());
@@ -846,12 +910,16 @@ bool PropertyEditorView::isNodeOrChildSelected(const ModelNode &node) const
void PropertyEditorView::resetSelectionLocked() void PropertyEditorView::resetSelectionLocked()
{ {
NanotraceHR::Tracer tracer{"property editor view reset selection locked", category()};
if (m_isSelectionLocked) if (m_isSelectionLocked)
setIsSelectionLocked(false); setIsSelectionLocked(false);
} }
void PropertyEditorView::resetIfNodeIsRemoved(const ModelNode &removedNode) void PropertyEditorView::resetIfNodeIsRemoved(const ModelNode &removedNode)
{ {
NanotraceHR::Tracer tracer{"property editor view reset if node is removed", category()};
if (isNodeOrChildSelected(removedNode)) { if (isNodeOrChildSelected(removedNode)) {
resetSelectionLocked(); resetSelectionLocked();
select(); select();
@@ -860,6 +928,8 @@ void PropertyEditorView::resetIfNodeIsRemoved(const ModelNode &removedNode)
void PropertyEditorView::nodeAboutToBeRemoved(const ModelNode &removedNode) void PropertyEditorView::nodeAboutToBeRemoved(const ModelNode &removedNode)
{ {
NanotraceHR::Tracer tracer{"property editor view node about to be removed", category()};
resetIfNodeIsRemoved(removedNode); resetIfNodeIsRemoved(removedNode);
const ModelNodes &allRemovedNodes = removedNode.allSubModelNodesAndThisNode(); const ModelNodes &allRemovedNodes = removedNode.allSubModelNodesAndThisNode();
@@ -880,6 +950,8 @@ void PropertyEditorView::nodeAboutToBeRemoved(const ModelNode &removedNode)
void PropertyEditorView::nodeRemoved(const ModelNode &, const NodeAbstractProperty &, PropertyChangeFlags) void PropertyEditorView::nodeRemoved(const ModelNode &, const NodeAbstractProperty &, PropertyChangeFlags)
{ {
NanotraceHR::Tracer tracer{"property editor view node removed", category()};
if (m_qmlBackEndForCurrentType && m_textureAboutToBeRemoved) if (m_qmlBackEndForCurrentType && m_textureAboutToBeRemoved)
m_qmlBackEndForCurrentType->refreshBackendModel(); m_qmlBackEndForCurrentType->refreshBackendModel();
@@ -888,6 +960,8 @@ void PropertyEditorView::nodeRemoved(const ModelNode &, const NodeAbstractProper
void PropertyEditorView::modelAttached(Model *model) void PropertyEditorView::modelAttached(Model *model)
{ {
NanotraceHR::Tracer tracer{"property editor view model attached", category()};
AbstractView::modelAttached(model); AbstractView::modelAttached(model);
if constexpr (useProjectStorage()) if constexpr (useProjectStorage())
@@ -902,6 +976,8 @@ void PropertyEditorView::modelAttached(Model *model)
void PropertyEditorView::modelAboutToBeDetached(Model *model) void PropertyEditorView::modelAboutToBeDetached(Model *model)
{ {
NanotraceHR::Tracer tracer{"property editor view model about to be detached", category()};
AbstractView::modelAboutToBeDetached(model); AbstractView::modelAboutToBeDetached(model);
m_qmlBackEndForCurrentType->propertyEditorTransaction()->end(); m_qmlBackEndForCurrentType->propertyEditorTransaction()->end();
@@ -911,6 +987,8 @@ void PropertyEditorView::modelAboutToBeDetached(Model *model)
void PropertyEditorView::propertiesRemoved(const QList<AbstractProperty> &propertyList) void PropertyEditorView::propertiesRemoved(const QList<AbstractProperty> &propertyList)
{ {
NanotraceHR::Tracer tracer{"property editor view properties removed", category()};
if (noValidSelection()) if (noValidSelection())
return; return;
@@ -985,12 +1063,16 @@ void PropertyEditorView::propertiesRemoved(const QList<AbstractProperty> &proper
void PropertyEditorView::propertiesAboutToBeRemoved(const QList<AbstractProperty> &propertyList) void PropertyEditorView::propertiesAboutToBeRemoved(const QList<AbstractProperty> &propertyList)
{ {
NanotraceHR::Tracer tracer{"property editor view properties about to be removed", category()};
for (const auto &property : propertyList) for (const auto &property : propertyList)
m_dynamicPropertiesModel->removeItem(property); m_dynamicPropertiesModel->removeItem(property);
} }
void PropertyEditorView::variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags /*propertyChange*/) void PropertyEditorView::variantPropertiesChanged(const QList<VariantProperty>& propertyList, PropertyChangeFlags /*propertyChange*/)
{ {
NanotraceHR::Tracer tracer{"property editor view variant properties changed", category()};
if (noValidSelection()) if (noValidSelection())
return; return;
@@ -1042,6 +1124,8 @@ void PropertyEditorView::variantPropertiesChanged(const QList<VariantProperty>&
void PropertyEditorView::bindingPropertiesChanged(const QList<BindingProperty> &propertyList, void PropertyEditorView::bindingPropertiesChanged(const QList<BindingProperty> &propertyList,
PropertyChangeFlags /*propertyChange*/) PropertyChangeFlags /*propertyChange*/)
{ {
NanotraceHR::Tracer tracer{"property editor view binding properties changed", category()};
if (noValidSelection()) if (noValidSelection())
return; return;
@@ -1085,6 +1169,8 @@ void PropertyEditorView::auxiliaryDataChanged(const ModelNode &node,
[[maybe_unused]] AuxiliaryDataKeyView key, [[maybe_unused]] AuxiliaryDataKeyView key,
const QVariant &data) const QVariant &data)
{ {
NanotraceHR::Tracer tracer{"property editor view auxiliary data changed", category()};
if (noValidSelection()) if (noValidSelection())
return; return;
@@ -1114,12 +1200,17 @@ void PropertyEditorView::auxiliaryDataChanged(const ModelNode &node,
void PropertyEditorView::signalDeclarationPropertiesChanged( void PropertyEditorView::signalDeclarationPropertiesChanged(
const QVector<SignalDeclarationProperty> &propertyList, PropertyChangeFlags /* propertyChange */) const QVector<SignalDeclarationProperty> &propertyList, PropertyChangeFlags /* propertyChange */)
{ {
NanotraceHR::Tracer tracer{"property editor view signal declaration properties changed",
category()};
for (const SignalDeclarationProperty &property : propertyList) for (const SignalDeclarationProperty &property : propertyList)
m_dynamicPropertiesModel->updateItem(property); m_dynamicPropertiesModel->updateItem(property);
} }
void PropertyEditorView::instanceInformationsChanged(const QMultiHash<ModelNode, InformationName> &informationChangedHash) void PropertyEditorView::instanceInformationsChanged(const QMultiHash<ModelNode, InformationName> &informationChangedHash)
{ {
NanotraceHR::Tracer tracer{"property editor view instance informations changed", category()};
if (noValidSelection()) if (noValidSelection())
return; return;
@@ -1133,6 +1224,8 @@ void PropertyEditorView::instanceInformationsChanged(const QMultiHash<ModelNode,
void PropertyEditorView::nodeIdChanged(const ModelNode &node, const QString &newId, const QString &oldId) void PropertyEditorView::nodeIdChanged(const ModelNode &node, const QString &newId, const QString &oldId)
{ {
NanotraceHR::Tracer tracer{"property editor view node id changed", category()};
if (noValidSelection()) if (noValidSelection())
return; return;
@@ -1156,6 +1249,8 @@ void PropertyEditorView::nodeIdChanged(const ModelNode &node, const QString &new
void PropertyEditorView::select() void PropertyEditorView::select()
{ {
NanotraceHR::Tracer tracer{"property editor view select", category()};
if (m_qmlBackEndForCurrentType) if (m_qmlBackEndForCurrentType)
m_qmlBackEndForCurrentType->emitSelectionToBeChanged(); m_qmlBackEndForCurrentType->emitSelectionToBeChanged();
@@ -1164,6 +1259,8 @@ void PropertyEditorView::select()
void PropertyEditorView::setActiveNodeToSelection() void PropertyEditorView::setActiveNodeToSelection()
{ {
NanotraceHR::Tracer tracer{"property editor view set active node to selection", category()};
const auto selectedNodeList = currentNodes(); const auto selectedNodeList = currentNodes();
setActiveNode(ModelNode()); setActiveNode(ModelNode());
@@ -1179,6 +1276,8 @@ void PropertyEditorView::setActiveNodeToSelection()
void PropertyEditorView::forceSelection(const ModelNode &node) void PropertyEditorView::forceSelection(const ModelNode &node)
{ {
NanotraceHR::Tracer tracer{"property editor view force selection", category()};
if (node == activeNode()) if (node == activeNode())
return; return;
@@ -1191,11 +1290,15 @@ void PropertyEditorView::forceSelection(const ModelNode &node)
bool PropertyEditorView::hasWidget() const bool PropertyEditorView::hasWidget() const
{ {
NanotraceHR::Tracer tracer{"property editor view has widget", category()};
return true; return true;
} }
WidgetInfo PropertyEditorView::widgetInfo() WidgetInfo PropertyEditorView::widgetInfo()
{ {
NanotraceHR::Tracer tracer{"property editor view widget info", category()};
return createWidgetInfo(m_stackedWidget, return createWidgetInfo(m_stackedWidget,
QStringLiteral("Properties"), QStringLiteral("Properties"),
WidgetInfo::RightPane, WidgetInfo::RightPane,
@@ -1205,6 +1308,8 @@ WidgetInfo PropertyEditorView::widgetInfo()
void PropertyEditorView::currentStateChanged(const ModelNode &node) void PropertyEditorView::currentStateChanged(const ModelNode &node)
{ {
NanotraceHR::Tracer tracer{"property editor view current state changed", category()};
QmlModelState newQmlModelState(node); QmlModelState newQmlModelState(node);
Q_ASSERT(newQmlModelState.isValid()); Q_ASSERT(newQmlModelState.isValid());
if (debug) if (debug)
@@ -1214,6 +1319,8 @@ void PropertyEditorView::currentStateChanged(const ModelNode &node)
void PropertyEditorView::instancePropertyChanged(const QList<QPair<ModelNode, PropertyName> > &propertyList) void PropertyEditorView::instancePropertyChanged(const QList<QPair<ModelNode, PropertyName> > &propertyList)
{ {
NanotraceHR::Tracer tracer{"property editor view instance property changed", category()};
if (!activeNode().isValid()) if (!activeNode().isValid())
return; return;
@@ -1251,11 +1358,15 @@ void PropertyEditorView::instancePropertyChanged(const QList<QPair<ModelNode, Pr
void PropertyEditorView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVersion*/, int /*minorVersion*/) void PropertyEditorView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVersion*/, int /*minorVersion*/)
{ {
NanotraceHR::Tracer tracer{"property editor view root node type changed", category()};
resetView(); resetView();
} }
void PropertyEditorView::nodeTypeChanged(const ModelNode &node, const TypeName &, int, int) void PropertyEditorView::nodeTypeChanged(const ModelNode &node, const TypeName &, int, int)
{ {
NanotraceHR::Tracer tracer{"property editor view node type changed", category()};
if (node == activeNode()) if (node == activeNode())
resetView(); resetView();
} }
@@ -1265,6 +1376,8 @@ void PropertyEditorView::nodeReparented(const ModelNode &node,
const NodeAbstractProperty & /*oldPropertyParent*/, const NodeAbstractProperty & /*oldPropertyParent*/,
AbstractView::PropertyChangeFlags /*propertyChange*/) AbstractView::PropertyChangeFlags /*propertyChange*/)
{ {
NanotraceHR::Tracer tracer{"property editor view node reparented", category()};
if (node == activeNode()) if (node == activeNode())
m_qmlBackEndForCurrentType->backendAnchorBinding().setup(QmlItemNode(activeNode())); m_qmlBackEndForCurrentType->backendAnchorBinding().setup(QmlItemNode(activeNode()));
@@ -1285,6 +1398,8 @@ void PropertyEditorView::nodeReparented(const ModelNode &node,
void PropertyEditorView::importsChanged(const Imports &addedImports, const Imports &removedImports) void PropertyEditorView::importsChanged(const Imports &addedImports, const Imports &removedImports)
{ {
NanotraceHR::Tracer tracer{"property editor view imports changed", category()};
if (!m_qmlBackEndForCurrentType) if (!m_qmlBackEndForCurrentType)
return; return;
@@ -1299,6 +1414,8 @@ void PropertyEditorView::customNotification([[maybe_unused]] const AbstractView
const QList<ModelNode> &nodeList, const QList<ModelNode> &nodeList,
[[maybe_unused]] const QList<QVariant> &data) [[maybe_unused]] const QList<QVariant> &data)
{ {
NanotraceHR::Tracer tracer{"property editor view custom notification", category()};
if (identifier == "force_editing_node") { if (identifier == "force_editing_node") {
if (!nodeList.isEmpty()) if (!nodeList.isEmpty())
forceSelection(nodeList.first()); forceSelection(nodeList.first());
@@ -1309,6 +1426,8 @@ void PropertyEditorView::modelNodePreviewPixmapChanged(const ModelNode &node,
const QPixmap &pixmap, const QPixmap &pixmap,
const QByteArray &requestId) const QByteArray &requestId)
{ {
NanotraceHR::Tracer tracer{"property editor view model node preview pixmap changed", category()};
if (node != activeNode()) if (node != activeNode())
return; return;
@@ -1318,6 +1437,8 @@ void PropertyEditorView::modelNodePreviewPixmapChanged(const ModelNode &node,
void PropertyEditorView::highlightTextureProperties(bool highlight) void PropertyEditorView::highlightTextureProperties(bool highlight)
{ {
NanotraceHR::Tracer tracer{"property editor view highlight texture properties", category()};
NodeMetaInfo metaInfo = activeNode().metaInfo(); NodeMetaInfo metaInfo = activeNode().metaInfo();
QTC_ASSERT(metaInfo.isValid(), return); QTC_ASSERT(metaInfo.isValid(), return);
@@ -1334,6 +1455,8 @@ void PropertyEditorView::highlightTextureProperties(bool highlight)
void PropertyEditorView::dragStarted(QMimeData *mimeData) void PropertyEditorView::dragStarted(QMimeData *mimeData)
{ {
NanotraceHR::Tracer tracer{"property editor view drag started", category()};
if (mimeData->hasFormat(Constants::MIME_TYPE_ASSETS)) { if (mimeData->hasFormat(Constants::MIME_TYPE_ASSETS)) {
const QString assetPath = QString::fromUtf8(mimeData->data(Constants::MIME_TYPE_ASSETS)) const QString assetPath = QString::fromUtf8(mimeData->data(Constants::MIME_TYPE_ASSETS))
.split(',')[0]; .split(',')[0];
@@ -1354,6 +1477,8 @@ void PropertyEditorView::dragStarted(QMimeData *mimeData)
void PropertyEditorView::dragEnded() void PropertyEditorView::dragEnded()
{ {
NanotraceHR::Tracer tracer{"property editor view drag ended", category()};
m_qmlBackEndForCurrentType->contextObject()->setActiveDragSuffix(""); m_qmlBackEndForCurrentType->contextObject()->setActiveDragSuffix("");
highlightTextureProperties(false); highlightTextureProperties(false);
} }
@@ -1362,6 +1487,8 @@ void PropertyEditorView::setValue(const QmlObjectNode &qmlObjectNode,
PropertyNameView name, PropertyNameView name,
const QVariant &value) const QVariant &value)
{ {
NanotraceHR::Tracer tracer{"property editor view set value", category()};
m_locked = true; m_locked = true;
m_qmlBackEndForCurrentType->setValue(qmlObjectNode, name, value); m_qmlBackEndForCurrentType->setValue(qmlObjectNode, name, value);
m_locked = false; m_locked = false;
@@ -1369,6 +1496,8 @@ void PropertyEditorView::setValue(const QmlObjectNode &qmlObjectNode,
bool PropertyEditorView::eventFilter(QObject *obj, QEvent *event) bool PropertyEditorView::eventFilter(QObject *obj, QEvent *event)
{ {
NanotraceHR::Tracer tracer{"property editor view event filter", category()};
if (event->type() == QEvent::FocusOut) { if (event->type() == QEvent::FocusOut) {
if (m_qmlBackEndForCurrentType && m_qmlBackEndForCurrentType->widget() == obj) if (m_qmlBackEndForCurrentType && m_qmlBackEndForCurrentType->widget() == obj)
QMetaObject::invokeMethod(m_qmlBackEndForCurrentType->widget()->rootObject(), "closeContextMenu"); QMetaObject::invokeMethod(m_qmlBackEndForCurrentType->widget()->rootObject(), "closeContextMenu");
@@ -1378,6 +1507,8 @@ bool PropertyEditorView::eventFilter(QObject *obj, QEvent *event)
void PropertyEditorView::reloadQml() void PropertyEditorView::reloadQml()
{ {
NanotraceHR::Tracer tracer{"property editor view reload Qml", category()};
m_qmlBackendHash.clear(); m_qmlBackendHash.clear();
while (QWidget *widget = m_stackedWidget->widget(0)) { while (QWidget *widget = m_stackedWidget->widget(0)) {
m_stackedWidget->removeWidget(widget); m_stackedWidget->removeWidget(widget);

View File

@@ -3,18 +3,26 @@
#include "propertyeditorwidget.h" #include "propertyeditorwidget.h"
#include "propertyeditortracing.h"
#include <qmldesignerconstants.h> #include <qmldesignerconstants.h>
#include <qmldesignerplugin.h> #include <qmldesignerplugin.h>
namespace QmlDesigner { namespace QmlDesigner {
static auto category = PropertyEditorTracing::category;
PropertyEditorWidget::PropertyEditorWidget(QWidget *parent) : QStackedWidget(parent) PropertyEditorWidget::PropertyEditorWidget(QWidget *parent) : QStackedWidget(parent)
{ {
NanotraceHR::Tracer tracer{"property editor widget constructor", category()};
QmlDesignerPlugin::trackWidgetFocusTime(this, Constants::EVENT_PROPERTYEDITOR_TIME); QmlDesignerPlugin::trackWidgetFocusTime(this, Constants::EVENT_PROPERTYEDITOR_TIME);
} }
void PropertyEditorWidget::resizeEvent(QResizeEvent * event) void PropertyEditorWidget::resizeEvent(QResizeEvent * event)
{ {
NanotraceHR::Tracer tracer{"property editor widget resize event", category()};
QStackedWidget::resizeEvent(event); QStackedWidget::resizeEvent(event);
emit resized(); emit resized();
} }

View File

@@ -3,16 +3,24 @@
#include "propertynamevalidator.h" #include "propertynamevalidator.h"
#include "modelutils.h" #include "propertyeditortracing.h"
#include <modelutils.h>
#include <QRegularExpression> #include <QRegularExpression>
static auto category = QmlDesigner::PropertyEditorTracing::category;
PropertyNameValidator::PropertyNameValidator(QObject *parent) PropertyNameValidator::PropertyNameValidator(QObject *parent)
: QValidator(parent) : QValidator(parent)
{} {
NanotraceHR::Tracer tracer{"property name validator constructor", category()};
}
QValidator::State PropertyNameValidator::validate(QString &input, int &) const QValidator::State PropertyNameValidator::validate(QString &input, int &) const
{ {
NanotraceHR::Tracer tracer{"property name validator validate", category()};
if (input.isEmpty()) if (input.isEmpty())
return QValidator::Intermediate; return QValidator::Intermediate;
@@ -32,5 +40,7 @@ QValidator::State PropertyNameValidator::validate(QString &input, int &) const
void PropertyNameValidator::registerDeclarativeType() void PropertyNameValidator::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"property name validator register declarative type", category()};
qmlRegisterType<PropertyNameValidator>("HelperWidgets", 2, 0, "PropertyNameValidator"); qmlRegisterType<PropertyNameValidator>("HelperWidgets", 2, 0, "PropertyNameValidator");
} }

View File

@@ -3,6 +3,8 @@
#include "qmlanchorbindingproxy.h" #include "qmlanchorbindingproxy.h"
#include "propertyeditortracing.h"
#include <abstractview.h> #include <abstractview.h>
#include <exception.h> #include <exception.h>
#include <modelnodeoperations.h> #include <modelnodeoperations.h>
@@ -22,6 +24,9 @@ class ModelNode;
class NodeState; class NodeState;
namespace { namespace {
static auto category = QmlDesigner::PropertyEditorTracing::category;
const Utils::SmallString auxDataString("anchors_"); const Utils::SmallString auxDataString("anchors_");
Utils::SmallString auxPropertyString(Utils::SmallStringView name) Utils::SmallString auxPropertyString(Utils::SmallStringView name)
@@ -47,12 +52,18 @@ QmlAnchorBindingProxy::QmlAnchorBindingProxy(QObject *parent) :
m_relativeVerticalTarget(Center), m_relativeHorizontalTarget(Center), m_relativeVerticalTarget(Center), m_relativeHorizontalTarget(Center),
m_locked(false), m_ignoreQml(false) m_locked(false), m_ignoreQml(false)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy constructor", category()};
} }
QmlAnchorBindingProxy::~QmlAnchorBindingProxy() = default; QmlAnchorBindingProxy::~QmlAnchorBindingProxy()
{
NanotraceHR::Tracer tracer{"qml anchor binding proxy destructor", category()};
}
void QmlAnchorBindingProxy::setup(const QmlItemNode &fxItemNode) void QmlAnchorBindingProxy::setup(const QmlItemNode &fxItemNode)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy setup", category()};
m_qmlItemNode = fxItemNode; m_qmlItemNode = fxItemNode;
m_ignoreQml = true; m_ignoreQml = true;
@@ -80,6 +91,8 @@ void QmlAnchorBindingProxy::setup(const QmlItemNode &fxItemNode)
void QmlAnchorBindingProxy::invalidate(const QmlItemNode &fxItemNode) void QmlAnchorBindingProxy::invalidate(const QmlItemNode &fxItemNode)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy invalidate", category()};
if (m_locked) if (m_locked)
return; return;
@@ -92,13 +105,8 @@ void QmlAnchorBindingProxy::invalidate(const QmlItemNode &fxItemNode)
return node.modelNode().parentProperty().parentModelNode(); return node.modelNode().parentProperty().parentModelNode();
}; };
m_verticalTarget = m_verticalTarget = m_horizontalTarget = m_topTarget = m_bottomTarget = m_leftTarget = m_rightTarget = parentModelNode(
m_horizontalTarget = m_qmlItemNode);
m_topTarget =
m_bottomTarget =
m_leftTarget =
m_rightTarget =
parentModelNode(m_qmlItemNode);
setupAnchorTargets(); setupAnchorTargets();
@@ -121,6 +129,8 @@ void QmlAnchorBindingProxy::invalidate(const QmlItemNode &fxItemNode)
void QmlAnchorBindingProxy::setupAnchorTargets() void QmlAnchorBindingProxy::setupAnchorTargets()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy setup anchor targets", category()};
if (m_qmlItemNode.modelNode().hasParentProperty()) if (m_qmlItemNode.modelNode().hasParentProperty())
setDefaultAnchorTarget(m_qmlItemNode.modelNode().parentProperty().parentModelNode()); setDefaultAnchorTarget(m_qmlItemNode.modelNode().parentProperty().parentModelNode());
else else
@@ -209,7 +219,9 @@ void QmlAnchorBindingProxy::setupAnchorTargets()
} }
if (horizontalCentered()) { if (horizontalCentered()) {
ModelNode targetNode = m_qmlItemNode.anchors().instanceAnchor(AnchorLineHorizontalCenter).qmlItemNode(); ModelNode targetNode = m_qmlItemNode.anchors()
.instanceAnchor(AnchorLineHorizontalCenter)
.qmlItemNode();
if (targetNode.isValid()) if (targetNode.isValid())
m_horizontalTarget = targetNode; m_horizontalTarget = targetNode;
} }
@@ -217,6 +229,8 @@ void QmlAnchorBindingProxy::setupAnchorTargets()
void QmlAnchorBindingProxy::emitAnchorSignals() void QmlAnchorBindingProxy::emitAnchorSignals()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy emit anchor signals", category()};
emit topAnchorChanged(); emit topAnchorChanged();
emit bottomAnchorChanged(); emit bottomAnchorChanged();
emit leftAnchorChanged(); emit leftAnchorChanged();
@@ -233,6 +247,8 @@ void QmlAnchorBindingProxy::emitAnchorSignals()
void QmlAnchorBindingProxy::setDefaultRelativeTopTarget() void QmlAnchorBindingProxy::setDefaultRelativeTopTarget()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set default relative top target", category()};
if (m_topTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) { if (m_topTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) {
m_relativeTopTarget = SameEdge; m_relativeTopTarget = SameEdge;
} else { } else {
@@ -242,6 +258,9 @@ void QmlAnchorBindingProxy::setDefaultRelativeTopTarget()
void QmlAnchorBindingProxy::setDefaultRelativeBottomTarget() void QmlAnchorBindingProxy::setDefaultRelativeBottomTarget()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set default relative bottom target",
category()};
if (m_bottomTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) { if (m_bottomTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) {
m_relativeBottomTarget = SameEdge; m_relativeBottomTarget = SameEdge;
} else { } else {
@@ -251,6 +270,9 @@ void QmlAnchorBindingProxy::setDefaultRelativeBottomTarget()
void QmlAnchorBindingProxy::setDefaultRelativeLeftTarget() void QmlAnchorBindingProxy::setDefaultRelativeLeftTarget()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set default relative left target",
category()};
if (m_leftTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) { if (m_leftTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) {
m_relativeLeftTarget = SameEdge; m_relativeLeftTarget = SameEdge;
} else { } else {
@@ -260,6 +282,9 @@ void QmlAnchorBindingProxy::setDefaultRelativeLeftTarget()
void QmlAnchorBindingProxy::setDefaultRelativeRightTarget() void QmlAnchorBindingProxy::setDefaultRelativeRightTarget()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set default relative right target",
category()};
if (m_rightTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) { if (m_rightTarget.modelNode() == m_qmlItemNode.modelNode().parentProperty().parentModelNode()) {
m_relativeRightTarget = SameEdge; m_relativeRightTarget = SameEdge;
} else { } else {
@@ -267,23 +292,32 @@ void QmlAnchorBindingProxy::setDefaultRelativeRightTarget()
} }
} }
bool QmlAnchorBindingProxy::executeInTransaction(const QByteArray &identifier, const AbstractView::OperationBlock &lambda) bool QmlAnchorBindingProxy::executeInTransaction(const QByteArray &identifier,
const AbstractView::OperationBlock &lambda)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy execute in transaction", category()};
return m_qmlItemNode.modelNode().view()->executeInTransaction(identifier, lambda); return m_qmlItemNode.modelNode().view()->executeInTransaction(identifier, lambda);
} }
bool QmlAnchorBindingProxy::hasParent() const bool QmlAnchorBindingProxy::hasParent() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy has parent", category()};
return m_qmlItemNode.hasNodeParent(); return m_qmlItemNode.hasNodeParent();
} }
bool QmlAnchorBindingProxy::isInLayout() const bool QmlAnchorBindingProxy::isInLayout() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy is in layout", category()};
return m_qmlItemNode.isInLayout(); return m_qmlItemNode.isInLayout();
} }
bool QmlAnchorBindingProxy::isFilled() const bool QmlAnchorBindingProxy::isFilled() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy is filled", category()};
return hasAnchors() && topAnchored() && bottomAnchored() && leftAnchored() && rightAnchored() return hasAnchors() && topAnchored() && bottomAnchored() && leftAnchored() && rightAnchored()
&& (m_qmlItemNode.instanceValue("anchors.topMargin").toInt() == 0) && (m_qmlItemNode.instanceValue("anchors.topMargin").toInt() == 0)
&& (m_qmlItemNode.instanceValue("anchors.bottomMargin").toInt() == 0) && (m_qmlItemNode.instanceValue("anchors.bottomMargin").toInt() == 0)
@@ -293,32 +327,42 @@ bool QmlAnchorBindingProxy::isFilled() const
bool QmlAnchorBindingProxy::topAnchored() const bool QmlAnchorBindingProxy::topAnchored() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy top anchored", category()};
return m_qmlItemNode.anchors().instanceHasAnchor(AnchorLineTop); return m_qmlItemNode.anchors().instanceHasAnchor(AnchorLineTop);
} }
bool QmlAnchorBindingProxy::bottomAnchored() const bool QmlAnchorBindingProxy::bottomAnchored() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy bottom anchored", category()};
return m_qmlItemNode.anchors().instanceHasAnchor(AnchorLineBottom); return m_qmlItemNode.anchors().instanceHasAnchor(AnchorLineBottom);
} }
bool QmlAnchorBindingProxy::leftAnchored() const bool QmlAnchorBindingProxy::leftAnchored() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy left anchored", category()};
return m_qmlItemNode.anchors().instanceHasAnchor(AnchorLineLeft); return m_qmlItemNode.anchors().instanceHasAnchor(AnchorLineLeft);
} }
bool QmlAnchorBindingProxy::rightAnchored() const bool QmlAnchorBindingProxy::rightAnchored() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy right anchored", category()};
return m_qmlItemNode.anchors().instanceHasAnchor(AnchorLineRight); return m_qmlItemNode.anchors().instanceHasAnchor(AnchorLineRight);
} }
bool QmlAnchorBindingProxy::hasAnchors() const bool QmlAnchorBindingProxy::hasAnchors() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy has anchors", category()};
return m_qmlItemNode.anchors().instanceHasAnchors(); return m_qmlItemNode.anchors().instanceHasAnchors();
} }
void QmlAnchorBindingProxy::setTopTarget(const QString &target) void QmlAnchorBindingProxy::setTopTarget(const QString &target)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set top target", category()};
if (m_ignoreQml) if (m_ignoreQml)
return; return;
@@ -331,7 +375,7 @@ void QmlAnchorBindingProxy::setTopTarget(const QString &target)
if (!newTarget.isValid()) if (!newTarget.isValid())
return; return;
executeInTransaction("QmlAnchorBindingProxy::setTopTarget", [this, newTarget](){ executeInTransaction("QmlAnchorBindingProxy::setTopTarget", [this, newTarget]() {
m_topTarget = newTarget; m_topTarget = newTarget;
setDefaultRelativeTopTarget(); setDefaultRelativeTopTarget();
anchorTop(); anchorTop();
@@ -340,9 +384,10 @@ void QmlAnchorBindingProxy::setTopTarget(const QString &target)
emit topTargetChanged(); emit topTargetChanged();
} }
void QmlAnchorBindingProxy::setBottomTarget(const QString &target) void QmlAnchorBindingProxy::setBottomTarget(const QString &target)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set bottom target", category()};
if (m_ignoreQml) if (m_ignoreQml)
return; return;
@@ -354,11 +399,10 @@ void QmlAnchorBindingProxy::setBottomTarget(const QString &target)
if (!newTarget.isValid()) if (!newTarget.isValid())
return; return;
executeInTransaction("QmlAnchorBindingProxy::setBottomTarget", [this, newTarget](){ executeInTransaction("QmlAnchorBindingProxy::setBottomTarget", [this, newTarget]() {
m_bottomTarget = newTarget; m_bottomTarget = newTarget;
setDefaultRelativeBottomTarget(); setDefaultRelativeBottomTarget();
anchorBottom(); anchorBottom();
}); });
emit bottomTargetChanged(); emit bottomTargetChanged();
@@ -366,6 +410,8 @@ void QmlAnchorBindingProxy::setBottomTarget(const QString &target)
void QmlAnchorBindingProxy::setLeftTarget(const QString &target) void QmlAnchorBindingProxy::setLeftTarget(const QString &target)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set left target", category()};
if (m_ignoreQml) if (m_ignoreQml)
return; return;
@@ -377,7 +423,7 @@ void QmlAnchorBindingProxy::setLeftTarget(const QString &target)
if (!newTarget.isValid()) if (!newTarget.isValid())
return; return;
executeInTransaction("QmlAnchorBindingProxy::setLeftTarget", [this, newTarget](){ executeInTransaction("QmlAnchorBindingProxy::setLeftTarget", [this, newTarget]() {
m_leftTarget = newTarget; m_leftTarget = newTarget;
setDefaultRelativeLeftTarget(); setDefaultRelativeLeftTarget();
anchorLeft(); anchorLeft();
@@ -388,6 +434,8 @@ void QmlAnchorBindingProxy::setLeftTarget(const QString &target)
void QmlAnchorBindingProxy::setRightTarget(const QString &target) void QmlAnchorBindingProxy::setRightTarget(const QString &target)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set right target", category()};
if (m_ignoreQml) if (m_ignoreQml)
return; return;
@@ -399,7 +447,7 @@ void QmlAnchorBindingProxy::setRightTarget(const QString &target)
if (!newTarget.isValid()) if (!newTarget.isValid())
return; return;
executeInTransaction("QmlAnchorBindingProxy::setRightTarget", [this, newTarget](){ executeInTransaction("QmlAnchorBindingProxy::setRightTarget", [this, newTarget]() {
m_rightTarget = newTarget; m_rightTarget = newTarget;
setDefaultRelativeRightTarget(); setDefaultRelativeRightTarget();
anchorRight(); anchorRight();
@@ -410,6 +458,8 @@ void QmlAnchorBindingProxy::setRightTarget(const QString &target)
void QmlAnchorBindingProxy::setVerticalTarget(const QString &target) void QmlAnchorBindingProxy::setVerticalTarget(const QString &target)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set vertical target", category()};
if (m_ignoreQml) if (m_ignoreQml)
return; return;
@@ -421,7 +471,7 @@ void QmlAnchorBindingProxy::setVerticalTarget(const QString &target)
if (!newTarget.isValid()) if (!newTarget.isValid())
return; return;
executeInTransaction("QmlAnchorBindingProxy::setVerticalTarget", [this, newTarget](){ executeInTransaction("QmlAnchorBindingProxy::setVerticalTarget", [this, newTarget]() {
m_verticalTarget = newTarget; m_verticalTarget = newTarget;
anchorVertical(); anchorVertical();
}); });
@@ -431,6 +481,8 @@ void QmlAnchorBindingProxy::setVerticalTarget(const QString &target)
void QmlAnchorBindingProxy::setHorizontalTarget(const QString &target) void QmlAnchorBindingProxy::setHorizontalTarget(const QString &target)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set horizontal target", category()};
if (m_ignoreQml) if (m_ignoreQml)
return; return;
@@ -442,7 +494,7 @@ void QmlAnchorBindingProxy::setHorizontalTarget(const QString &target)
if (!newTarget.isValid()) if (!newTarget.isValid())
return; return;
executeInTransaction("QmlAnchorBindingProxy::setHorizontalTarget", [this, newTarget](){ executeInTransaction("QmlAnchorBindingProxy::setHorizontalTarget", [this, newTarget]() {
m_horizontalTarget = newTarget; m_horizontalTarget = newTarget;
anchorHorizontal(); anchorHorizontal();
}); });
@@ -452,13 +504,15 @@ void QmlAnchorBindingProxy::setHorizontalTarget(const QString &target)
void QmlAnchorBindingProxy::setRelativeAnchorTargetTop(QmlAnchorBindingProxy::RelativeAnchorTarget target) void QmlAnchorBindingProxy::setRelativeAnchorTargetTop(QmlAnchorBindingProxy::RelativeAnchorTarget target)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set relative anchor target top", category()};
if (m_ignoreQml) if (m_ignoreQml)
return; return;
if (target == m_relativeTopTarget) if (target == m_relativeTopTarget)
return; return;
executeInTransaction("QmlAnchorBindingProxy::setRelativeAnchorTargetTop", [this, target](){ executeInTransaction("QmlAnchorBindingProxy::setRelativeAnchorTargetTop", [this, target]() {
m_relativeTopTarget = target; m_relativeTopTarget = target;
anchorTop(); anchorTop();
}); });
@@ -468,13 +522,16 @@ void QmlAnchorBindingProxy::setRelativeAnchorTargetTop(QmlAnchorBindingProxy::Re
void QmlAnchorBindingProxy::setRelativeAnchorTargetBottom(QmlAnchorBindingProxy::RelativeAnchorTarget target) void QmlAnchorBindingProxy::setRelativeAnchorTargetBottom(QmlAnchorBindingProxy::RelativeAnchorTarget target)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set relative anchor target bottom",
category()};
if (m_ignoreQml) if (m_ignoreQml)
return; return;
if (target == m_relativeBottomTarget) if (target == m_relativeBottomTarget)
return; return;
executeInTransaction("QmlAnchorBindingProxy::setRelativeAnchorTargetBottom", [this, target](){ executeInTransaction("QmlAnchorBindingProxy::setRelativeAnchorTargetBottom", [this, target]() {
m_relativeBottomTarget = target; m_relativeBottomTarget = target;
anchorBottom(); anchorBottom();
}); });
@@ -484,16 +541,17 @@ void QmlAnchorBindingProxy::setRelativeAnchorTargetBottom(QmlAnchorBindingProxy:
void QmlAnchorBindingProxy::setRelativeAnchorTargetLeft(QmlAnchorBindingProxy::RelativeAnchorTarget target) void QmlAnchorBindingProxy::setRelativeAnchorTargetLeft(QmlAnchorBindingProxy::RelativeAnchorTarget target)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set relative anchor target left", category()};
if (m_ignoreQml) if (m_ignoreQml)
return; return;
if (target == m_relativeLeftTarget) if (target == m_relativeLeftTarget)
return; return;
executeInTransaction("QmlAnchorBindingProxy::setRelativeAnchorTargetLeft", [this, target](){ executeInTransaction("QmlAnchorBindingProxy::setRelativeAnchorTargetLeft", [this, target]() {
m_relativeLeftTarget = target; m_relativeLeftTarget = target;
anchorLeft(); anchorLeft();
}); });
emit relativeAnchorTargetLeftChanged(); emit relativeAnchorTargetLeftChanged();
@@ -501,31 +559,36 @@ void QmlAnchorBindingProxy::setRelativeAnchorTargetLeft(QmlAnchorBindingProxy::R
void QmlAnchorBindingProxy::setRelativeAnchorTargetRight(QmlAnchorBindingProxy::RelativeAnchorTarget target) void QmlAnchorBindingProxy::setRelativeAnchorTargetRight(QmlAnchorBindingProxy::RelativeAnchorTarget target)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set relative anchor target right",
category()};
if (m_ignoreQml) if (m_ignoreQml)
return; return;
if (target == m_relativeRightTarget) if (target == m_relativeRightTarget)
return; return;
executeInTransaction("QmlAnchorBindingProxy::setRelativeAnchorTargetRight", [this, target](){ executeInTransaction("QmlAnchorBindingProxy::setRelativeAnchorTargetRight", [this, target]() {
m_relativeRightTarget = target; m_relativeRightTarget = target;
anchorRight(); anchorRight();
}); });
emit relativeAnchorTargetRightChanged(); emit relativeAnchorTargetRightChanged();
} }
void QmlAnchorBindingProxy::setRelativeAnchorTargetVertical(QmlAnchorBindingProxy::RelativeAnchorTarget target) void QmlAnchorBindingProxy::setRelativeAnchorTargetVertical(
QmlAnchorBindingProxy::RelativeAnchorTarget target)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set relative anchor target vertical",
category()};
if (m_ignoreQml) if (m_ignoreQml)
return; return;
if (target == m_relativeVerticalTarget) if (target == m_relativeVerticalTarget)
return; return;
executeInTransaction("QmlAnchorBindingProxy::setRelativeAnchorTargetVertical", [this, target]() {
executeInTransaction("QmlAnchorBindingProxy::setRelativeAnchorTargetVertical", [this, target](){
m_relativeVerticalTarget = target; m_relativeVerticalTarget = target;
anchorVertical(); anchorVertical();
}); });
@@ -533,15 +596,19 @@ void QmlAnchorBindingProxy::setRelativeAnchorTargetVertical(QmlAnchorBindingProx
emit relativeAnchorTargetVerticalChanged(); emit relativeAnchorTargetVerticalChanged();
} }
void QmlAnchorBindingProxy::setRelativeAnchorTargetHorizontal(QmlAnchorBindingProxy::RelativeAnchorTarget target) void QmlAnchorBindingProxy::setRelativeAnchorTargetHorizontal(
QmlAnchorBindingProxy::RelativeAnchorTarget target)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set relative anchor target horizontal",
category()};
if (m_ignoreQml) if (m_ignoreQml)
return; return;
if (target == m_relativeHorizontalTarget) if (target == m_relativeHorizontalTarget)
return; return;
executeInTransaction("QmlAnchorBindingProxy::setRelativeAnchorTargetHorizontal", [this, target](){ executeInTransaction("QmlAnchorBindingProxy::setRelativeAnchorTargetHorizontal", [this, target]() {
m_relativeHorizontalTarget = target; m_relativeHorizontalTarget = target;
anchorHorizontal(); anchorHorizontal();
}); });
@@ -551,6 +618,8 @@ void QmlAnchorBindingProxy::setRelativeAnchorTargetHorizontal(QmlAnchorBindingPr
QStringList QmlAnchorBindingProxy::possibleTargetItems() const QStringList QmlAnchorBindingProxy::possibleTargetItems() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy possible target items", category()};
QStringList stringList; QStringList stringList;
if (!m_qmlItemNode.isValid()) if (!m_qmlItemNode.isValid())
return stringList; return stringList;
@@ -563,7 +632,8 @@ QStringList QmlAnchorBindingProxy::possibleTargetItems() const
//We currently have no instanceChildren(). //We currently have no instanceChildren().
//So we double check here if the instanceParents are equal. //So we double check here if the instanceParents are equal.
for (const QmlItemNode &node : std::as_const(itemList)) for (const QmlItemNode &node : std::as_const(itemList))
if (node.isValid() && (node.instanceParent().modelNode() != m_qmlItemNode.instanceParent().modelNode())) if (node.isValid()
&& (node.instanceParent().modelNode() != m_qmlItemNode.instanceParent().modelNode()))
itemList.removeAll(node); itemList.removeAll(node);
for (const QmlItemNode &itemNode : std::as_const(itemList)) { for (const QmlItemNode &itemNode : std::as_const(itemList)) {
@@ -581,7 +651,9 @@ QStringList QmlAnchorBindingProxy::possibleTargetItems() const
void QmlAnchorBindingProxy::registerDeclarativeType() void QmlAnchorBindingProxy::registerDeclarativeType()
{ {
qmlRegisterType<QmlAnchorBindingProxy>("HelperWidgets",2,0,"AnchorBindingProxy"); NanotraceHR::Tracer tracer{"qml anchor binding proxy register declarative type", category()};
qmlRegisterType<QmlAnchorBindingProxy>("HelperWidgets", 2, 0, "AnchorBindingProxy");
} }
int QmlAnchorBindingProxy::indexOfPossibleTargetItem(const QString &targetName) const int QmlAnchorBindingProxy::indexOfPossibleTargetItem(const QString &targetName) const
@@ -591,8 +663,9 @@ int QmlAnchorBindingProxy::indexOfPossibleTargetItem(const QString &targetName)
void QmlAnchorBindingProxy::resetLayout() void QmlAnchorBindingProxy::resetLayout()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy reset layout", category()};
executeInTransaction("QmlAnchorBindingProxy::resetLayout", [this](){ executeInTransaction("QmlAnchorBindingProxy::resetLayout", [this]() {
m_qmlItemNode.anchors().removeAnchors(); m_qmlItemNode.anchors().removeAnchors();
m_qmlItemNode.anchors().removeMargins(); m_qmlItemNode.anchors().removeMargins();
@@ -607,10 +680,12 @@ void QmlAnchorBindingProxy::resetLayout()
emit leftAnchorChanged(); emit leftAnchorChanged();
emit rightAnchorChanged(); emit rightAnchorChanged();
emit anchorsChanged(); emit anchorsChanged();
} }
void QmlAnchorBindingProxy::setBottomAnchor(bool anchor) void QmlAnchorBindingProxy::setBottomAnchor(bool anchor)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set bottom anchor", category()};
if (!m_qmlItemNode.hasNodeParent()) if (!m_qmlItemNode.hasNodeParent())
return; return;
@@ -639,6 +714,8 @@ void QmlAnchorBindingProxy::setBottomAnchor(bool anchor)
void QmlAnchorBindingProxy::setLeftAnchor(bool anchor) void QmlAnchorBindingProxy::setLeftAnchor(bool anchor)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set left anchor", category()};
if (!m_qmlItemNode.hasNodeParent()) if (!m_qmlItemNode.hasNodeParent())
return; return;
@@ -668,6 +745,8 @@ void QmlAnchorBindingProxy::setLeftAnchor(bool anchor)
void QmlAnchorBindingProxy::setRightAnchor(bool anchor) void QmlAnchorBindingProxy::setRightAnchor(bool anchor)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set right anchor", category()};
if (!m_qmlItemNode.hasNodeParent()) if (!m_qmlItemNode.hasNodeParent())
return; return;
@@ -696,6 +775,8 @@ void QmlAnchorBindingProxy::setRightAnchor(bool anchor)
} }
QRectF QmlAnchorBindingProxy::parentBoundingBox() QRectF QmlAnchorBindingProxy::parentBoundingBox()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy parent bounding box", category()};
if (m_qmlItemNode.hasInstanceParent()) { if (m_qmlItemNode.hasInstanceParent()) {
if (m_qmlItemNode.instanceParentItem().instanceContentItemBoundingRect().isValid()) if (m_qmlItemNode.instanceParentItem().instanceContentItemBoundingRect().isValid())
return m_qmlItemNode.instanceParentItem().instanceContentItemBoundingRect(); return m_qmlItemNode.instanceParentItem().instanceContentItemBoundingRect();
@@ -707,6 +788,8 @@ void QmlAnchorBindingProxy::setRightAnchor(bool anchor)
QRectF QmlAnchorBindingProxy::boundingBox(const QmlItemNode &node) QRectF QmlAnchorBindingProxy::boundingBox(const QmlItemNode &node)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy bounding box", category()};
if (node.isValid()) if (node.isValid())
return node.instanceTransformWithContentTransform().mapRect(node.instanceBoundingRect()); return node.instanceTransformWithContentTransform().mapRect(node.instanceBoundingRect());
@@ -715,11 +798,16 @@ QRectF QmlAnchorBindingProxy::boundingBox(const QmlItemNode &node)
QRectF QmlAnchorBindingProxy::transformedBoundingBox() QRectF QmlAnchorBindingProxy::transformedBoundingBox()
{ {
return m_qmlItemNode.instanceTransformWithContentTransform().mapRect(m_qmlItemNode.instanceBoundingRect()); NanotraceHR::Tracer tracer{"qml anchor binding proxy transformed bounding box", category()};
return m_qmlItemNode.instanceTransformWithContentTransform().mapRect(
m_qmlItemNode.instanceBoundingRect());
} }
void QmlAnchorBindingProxy::anchorTop() void QmlAnchorBindingProxy::anchorTop()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy anchor top", category()};
m_locked = true; m_locked = true;
bool topTargetIsParent = m_topTarget == m_qmlItemNode.instanceParentItem(); bool topTargetIsParent = m_topTarget == m_qmlItemNode.instanceParentItem();
@@ -746,6 +834,8 @@ void QmlAnchorBindingProxy::anchorTop()
void QmlAnchorBindingProxy::anchorBottom() void QmlAnchorBindingProxy::anchorBottom()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy anchor bottom", category()};
m_locked = true; m_locked = true;
bool bottomTargetIsParent = m_bottomTarget == m_qmlItemNode.instanceParentItem(); bool bottomTargetIsParent = m_bottomTarget == m_qmlItemNode.instanceParentItem();
@@ -772,6 +862,8 @@ void QmlAnchorBindingProxy::anchorBottom()
void QmlAnchorBindingProxy::anchorLeft() void QmlAnchorBindingProxy::anchorLeft()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy anchor left", category()};
m_locked = true; m_locked = true;
bool leftTargetIsParent = m_leftTarget == m_qmlItemNode.instanceParentItem(); bool leftTargetIsParent = m_leftTarget == m_qmlItemNode.instanceParentItem();
@@ -798,6 +890,8 @@ void QmlAnchorBindingProxy::anchorLeft()
void QmlAnchorBindingProxy::anchorRight() void QmlAnchorBindingProxy::anchorRight()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy anchor right", category()};
m_locked = true; m_locked = true;
bool rightTargetIsParent = m_rightTarget == m_qmlItemNode.instanceParentItem(); bool rightTargetIsParent = m_rightTarget == m_qmlItemNode.instanceParentItem();
@@ -824,6 +918,8 @@ void QmlAnchorBindingProxy::anchorRight()
void QmlAnchorBindingProxy::anchorVertical() void QmlAnchorBindingProxy::anchorVertical()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy anchor vertical", category()};
m_locked = true; m_locked = true;
if (m_relativeVerticalTarget == SameEdge) { if (m_relativeVerticalTarget == SameEdge) {
m_qmlItemNode.anchors().setAnchor(AnchorLineVerticalCenter, m_verticalTarget, AnchorLineRight); m_qmlItemNode.anchors().setAnchor(AnchorLineVerticalCenter, m_verticalTarget, AnchorLineRight);
@@ -839,6 +935,8 @@ void QmlAnchorBindingProxy::anchorVertical()
void QmlAnchorBindingProxy::anchorHorizontal() void QmlAnchorBindingProxy::anchorHorizontal()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy anchor horizontal", category()};
m_locked = true; m_locked = true;
if (m_relativeHorizontalTarget == SameEdge) { if (m_relativeHorizontalTarget == SameEdge) {
m_qmlItemNode.anchors().setAnchor(AnchorLineHorizontalCenter, m_horizontalTarget, AnchorLineRight); m_qmlItemNode.anchors().setAnchor(AnchorLineHorizontalCenter, m_horizontalTarget, AnchorLineRight);
@@ -853,6 +951,8 @@ void QmlAnchorBindingProxy::anchorHorizontal()
QmlItemNode QmlAnchorBindingProxy::targetIdToNode(const QString &id) const QmlItemNode QmlAnchorBindingProxy::targetIdToNode(const QString &id) const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy target id to node", category()};
QmlItemNode itemNode; QmlItemNode itemNode;
if (m_qmlItemNode.isValid() && m_qmlItemNode.view()) { if (m_qmlItemNode.isValid() && m_qmlItemNode.view()) {
@@ -868,6 +968,8 @@ QmlItemNode QmlAnchorBindingProxy::targetIdToNode(const QString &id) const
QString QmlAnchorBindingProxy::idForNode(const QmlItemNode &qmlItemNode) const QString QmlAnchorBindingProxy::idForNode(const QmlItemNode &qmlItemNode) const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy id for node", category()};
if (!qmlItemNode.modelNode().isValid()) if (!qmlItemNode.modelNode().isValid())
return {}; return {};
@@ -882,11 +984,15 @@ QString QmlAnchorBindingProxy::idForNode(const QmlItemNode &qmlItemNode) const
ModelNode QmlAnchorBindingProxy::modelNode() const ModelNode QmlAnchorBindingProxy::modelNode() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy model node", category()};
return m_qmlItemNode.modelNode(); return m_qmlItemNode.modelNode();
} }
void QmlAnchorBindingProxy::setTopAnchor(bool anchor) void QmlAnchorBindingProxy::setTopAnchor(bool anchor)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set top anchor", category()};
if (!m_qmlItemNode.hasNodeParent()) if (!m_qmlItemNode.hasNodeParent())
return ; return ;
@@ -913,7 +1019,9 @@ void QmlAnchorBindingProxy::setTopAnchor(bool anchor)
} }
void QmlAnchorBindingProxy::removeTopAnchor() { void QmlAnchorBindingProxy::removeTopAnchor() {
executeInTransaction("QmlAnchorBindingProxy::removeTopAnchor", [this](){ NanotraceHR::Tracer tracer{"qml anchor binding proxy remove top anchor", category()};
executeInTransaction("QmlAnchorBindingProxy::removeTopAnchor", [this]() {
m_qmlItemNode.anchors().removeAnchor(AnchorLineTop); m_qmlItemNode.anchors().removeAnchor(AnchorLineTop);
m_qmlItemNode.anchors().removeMargin(AnchorLineTop); m_qmlItemNode.anchors().removeMargin(AnchorLineTop);
@@ -925,7 +1033,9 @@ void QmlAnchorBindingProxy::removeTopAnchor() {
void QmlAnchorBindingProxy::removeBottomAnchor() void QmlAnchorBindingProxy::removeBottomAnchor()
{ {
executeInTransaction("QmlAnchorBindingProxy::removeBottomAnchor", [this](){ NanotraceHR::Tracer tracer{"qml anchor binding proxy remove bottom anchor", category()};
executeInTransaction("QmlAnchorBindingProxy::removeBottomAnchor", [this]() {
m_qmlItemNode.anchors().removeAnchor(AnchorLineBottom); m_qmlItemNode.anchors().removeAnchor(AnchorLineBottom);
m_qmlItemNode.anchors().removeMargin(AnchorLineBottom); m_qmlItemNode.anchors().removeMargin(AnchorLineBottom);
@@ -937,7 +1047,9 @@ void QmlAnchorBindingProxy::removeBottomAnchor()
void QmlAnchorBindingProxy::removeLeftAnchor() void QmlAnchorBindingProxy::removeLeftAnchor()
{ {
executeInTransaction("QmlAnchorBindingProxy::removeLeftAnchor", [this](){ NanotraceHR::Tracer tracer{"qml anchor binding proxy remove left anchor", category()};
executeInTransaction("QmlAnchorBindingProxy::removeLeftAnchor", [this]() {
m_qmlItemNode.anchors().removeAnchor(AnchorLineLeft); m_qmlItemNode.anchors().removeAnchor(AnchorLineLeft);
m_qmlItemNode.anchors().removeMargin(AnchorLineLeft); m_qmlItemNode.anchors().removeMargin(AnchorLineLeft);
@@ -949,7 +1061,9 @@ void QmlAnchorBindingProxy::removeLeftAnchor()
void QmlAnchorBindingProxy::removeRightAnchor() void QmlAnchorBindingProxy::removeRightAnchor()
{ {
executeInTransaction("QmlAnchorBindingProxy::removeRightAnchor", [this](){ NanotraceHR::Tracer tracer{"qml anchor binding proxy remove right anchor", category()};
executeInTransaction("QmlAnchorBindingProxy::removeRightAnchor", [this]() {
m_qmlItemNode.anchors().removeAnchor(AnchorLineRight); m_qmlItemNode.anchors().removeAnchor(AnchorLineRight);
m_qmlItemNode.anchors().removeMargin(AnchorLineRight); m_qmlItemNode.anchors().removeMargin(AnchorLineRight);
@@ -961,6 +1075,8 @@ void QmlAnchorBindingProxy::removeRightAnchor()
void QmlAnchorBindingProxy::setVerticalCentered(bool centered) void QmlAnchorBindingProxy::setVerticalCentered(bool centered)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set vertical centered", category()};
if (!m_qmlItemNode.hasNodeParent()) if (!m_qmlItemNode.hasNodeParent())
return ; return ;
@@ -995,6 +1111,8 @@ void QmlAnchorBindingProxy::setVerticalCentered(bool centered)
void QmlAnchorBindingProxy::setHorizontalCentered(bool centered) void QmlAnchorBindingProxy::setHorizontalCentered(bool centered)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set horizontal centered", category()};
if (!m_qmlItemNode.hasNodeParent()) if (!m_qmlItemNode.hasNodeParent())
return ; return ;
@@ -1028,46 +1146,65 @@ void QmlAnchorBindingProxy::setHorizontalCentered(bool centered)
bool QmlAnchorBindingProxy::verticalCentered() bool QmlAnchorBindingProxy::verticalCentered()
{ {
return m_qmlItemNode.isValid() && m_qmlItemNode.anchors().instanceHasAnchor(AnchorLineVerticalCenter); NanotraceHR::Tracer tracer{"qml anchor binding proxy vertical centered", category()};
return m_qmlItemNode.isValid()
&& m_qmlItemNode.anchors().instanceHasAnchor(AnchorLineVerticalCenter);
} }
QString QmlAnchorBindingProxy::topTarget() const QString QmlAnchorBindingProxy::topTarget() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy top target", category()};
return idForNode(m_topTarget); return idForNode(m_topTarget);
} }
QString QmlAnchorBindingProxy::bottomTarget() const QString QmlAnchorBindingProxy::bottomTarget() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy bottom target", category()};
return idForNode(m_bottomTarget); return idForNode(m_bottomTarget);
} }
QString QmlAnchorBindingProxy::leftTarget() const QString QmlAnchorBindingProxy::leftTarget() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy left target", category()};
return idForNode(m_leftTarget); return idForNode(m_leftTarget);
} }
QString QmlAnchorBindingProxy::rightTarget() const QString QmlAnchorBindingProxy::rightTarget() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy right target", category()};
return idForNode(m_rightTarget); return idForNode(m_rightTarget);
} }
QmlAnchorBindingProxy::RelativeAnchorTarget QmlAnchorBindingProxy::relativeAnchorTargetTop() const QmlAnchorBindingProxy::RelativeAnchorTarget QmlAnchorBindingProxy::relativeAnchorTargetTop() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy relative anchor target top", category()};
return m_relativeTopTarget; return m_relativeTopTarget;
} }
QmlAnchorBindingProxy::RelativeAnchorTarget QmlAnchorBindingProxy::relativeAnchorTargetBottom() const QmlAnchorBindingProxy::RelativeAnchorTarget QmlAnchorBindingProxy::relativeAnchorTargetBottom() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy relative anchor target bottom", category()};
return m_relativeBottomTarget; return m_relativeBottomTarget;
} }
QmlAnchorBindingProxy::RelativeAnchorTarget QmlAnchorBindingProxy::relativeAnchorTargetLeft() const QmlAnchorBindingProxy::RelativeAnchorTarget QmlAnchorBindingProxy::relativeAnchorTargetLeft() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy relative anchor target left", category()};
return m_relativeLeftTarget; return m_relativeLeftTarget;
} }
QmlAnchorBindingProxy::RelativeAnchorTarget QmlAnchorBindingProxy::relativeAnchorTargetRight() const QmlAnchorBindingProxy::RelativeAnchorTarget QmlAnchorBindingProxy::relativeAnchorTargetRight() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy relative anchor target right", category()};
return m_relativeRightTarget; return m_relativeRightTarget;
} }
@@ -1078,16 +1215,23 @@ QmlAnchorBindingProxy::RelativeAnchorTarget QmlAnchorBindingProxy::relativeAncho
QmlAnchorBindingProxy::RelativeAnchorTarget QmlAnchorBindingProxy::relativeAnchorTargetHorizontal() const QmlAnchorBindingProxy::RelativeAnchorTarget QmlAnchorBindingProxy::relativeAnchorTargetHorizontal() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy relative anchor target horizontal",
category()};
return m_relativeHorizontalTarget; return m_relativeHorizontalTarget;
} }
QString QmlAnchorBindingProxy::verticalTarget() const QString QmlAnchorBindingProxy::verticalTarget() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy vertical target", category()};
return idForNode(m_verticalTarget); return idForNode(m_verticalTarget);
} }
QString QmlAnchorBindingProxy::horizontalTarget() const QString QmlAnchorBindingProxy::horizontalTarget() const
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy horizontal target", category()};
return idForNode(m_horizontalTarget); return idForNode(m_horizontalTarget);
} }
@@ -1098,6 +1242,8 @@ bool QmlAnchorBindingProxy::horizontalCentered()
void QmlAnchorBindingProxy::fill() void QmlAnchorBindingProxy::fill()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy fill", category()};
executeInTransaction("QmlAnchorBindingProxy::fill", [this](){ executeInTransaction("QmlAnchorBindingProxy::fill", [this](){
backupPropertyAndRemove(modelNode(), "x"); backupPropertyAndRemove(modelNode(), "x");
backupPropertyAndRemove(modelNode(), "y"); backupPropertyAndRemove(modelNode(), "y");
@@ -1122,6 +1268,8 @@ void QmlAnchorBindingProxy::fill()
void QmlAnchorBindingProxy::centerIn() void QmlAnchorBindingProxy::centerIn()
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy center in", category()};
executeInTransaction("QmlAnchorBindingProxy::centerIn", [this]() { executeInTransaction("QmlAnchorBindingProxy::centerIn", [this]() {
backupPropertyAndRemove(modelNode(), "x"); backupPropertyAndRemove(modelNode(), "x");
backupPropertyAndRemove(modelNode(), "y"); backupPropertyAndRemove(modelNode(), "y");
@@ -1139,6 +1287,8 @@ void QmlAnchorBindingProxy::centerIn()
void QmlAnchorBindingProxy::setDefaultAnchorTarget(const ModelNode &modelNode) void QmlAnchorBindingProxy::setDefaultAnchorTarget(const ModelNode &modelNode)
{ {
NanotraceHR::Tracer tracer{"qml anchor binding proxy set default anchor target", category()};
m_verticalTarget = modelNode; m_verticalTarget = modelNode;
m_horizontalTarget = modelNode; m_horizontalTarget = modelNode;
m_topTarget = modelNode; m_topTarget = modelNode;

View File

@@ -3,6 +3,8 @@
#include "qmlmaterialnodeproxy.h" #include "qmlmaterialnodeproxy.h"
#include "propertyeditortracing.h"
#include <auxiliarydataproperties.h> #include <auxiliarydataproperties.h>
#include <designmodewidget.h> #include <designmodewidget.h>
#include <nodeinstanceview.h> #include <nodeinstanceview.h>
@@ -14,6 +16,8 @@
namespace QmlDesigner { namespace QmlDesigner {
static auto category = QmlDesigner::PropertyEditorTracing::category;
using namespace Qt::StringLiterals; using namespace Qt::StringLiterals;
static bool allMaterialTypesAre(const ModelNodes &materials, const QString &materialType) static bool allMaterialTypesAre(const ModelNodes &materials, const QString &materialType)
@@ -33,6 +37,8 @@ QmlMaterialNodeProxy::QmlMaterialNodeProxy()
: QObject() : QObject()
, m_previewUpdateTimer(this) , m_previewUpdateTimer(this)
{ {
NanotraceHR::Tracer tracer{"qml material node proxy constructor", category()};
m_previewUpdateTimer.setInterval(200); m_previewUpdateTimer.setInterval(200);
m_previewUpdateTimer.setSingleShot(true); m_previewUpdateTimer.setSingleShot(true);
m_previewUpdateTimer.callOnTimeout( m_previewUpdateTimer.callOnTimeout(
@@ -43,6 +49,8 @@ QmlMaterialNodeProxy::~QmlMaterialNodeProxy() = default;
void QmlMaterialNodeProxy::setup(const ModelNodes &editorNodes) void QmlMaterialNodeProxy::setup(const ModelNodes &editorNodes)
{ {
NanotraceHR::Tracer tracer{"qml material node proxy setup", category()};
QmlObjectNode objectNode = editorNodes.isEmpty() ? ModelNode{} : editorNodes.first(); QmlObjectNode objectNode = editorNodes.isEmpty() ? ModelNode{} : editorNodes.first();
const QmlObjectNode material = objectNode.metaInfo().isQtQuick3DMaterial() ? objectNode const QmlObjectNode material = objectNode.metaInfo().isQtQuick3DMaterial() ? objectNode
: QmlObjectNode{}; : QmlObjectNode{};
@@ -54,16 +62,22 @@ void QmlMaterialNodeProxy::setup(const ModelNodes &editorNodes)
ModelNode QmlMaterialNodeProxy::materialNode() const ModelNode QmlMaterialNodeProxy::materialNode() const
{ {
NanotraceHR::Tracer tracer{"qml material node proxy material node", category()};
return m_materialNode; return m_materialNode;
} }
ModelNodes QmlMaterialNodeProxy::editorNodes() const ModelNodes QmlMaterialNodeProxy::editorNodes() const
{ {
NanotraceHR::Tracer tracer{"qml material node proxy editor nodes", category()};
return m_editorNodes; return m_editorNodes;
} }
void QmlMaterialNodeProxy::setPossibleTypes(const QStringList &types) void QmlMaterialNodeProxy::setPossibleTypes(const QStringList &types)
{ {
NanotraceHR::Tracer tracer{"qml material node proxy set possible types", category()};
if (types == m_possibleTypes) if (types == m_possibleTypes)
return; return;
@@ -75,6 +89,8 @@ void QmlMaterialNodeProxy::setPossibleTypes(const QStringList &types)
void QmlMaterialNodeProxy::updatePossibleTypes() void QmlMaterialNodeProxy::updatePossibleTypes()
{ {
NanotraceHR::Tracer tracer{"qml material node proxy update possible types", category()};
static const QStringList basicTypes{ static const QStringList basicTypes{
"CustomMaterial", "CustomMaterial",
"DefaultMaterial", "DefaultMaterial",
@@ -107,12 +123,16 @@ void QmlMaterialNodeProxy::updatePossibleTypes()
void QmlMaterialNodeProxy::setCurrentType(const QString &type) void QmlMaterialNodeProxy::setCurrentType(const QString &type)
{ {
NanotraceHR::Tracer tracer{"qml material node proxy set current type", category()};
m_currentType = type.split('.').last(); m_currentType = type.split('.').last();
updatePossibleTypeIndex(); updatePossibleTypeIndex();
} }
void QmlMaterialNodeProxy::toolBarAction(int action) void QmlMaterialNodeProxy::toolBarAction(int action)
{ {
NanotraceHR::Tracer tracer{"qml material node proxy tool bar action", category()};
QTC_ASSERT(hasQuick3DImport(), return); QTC_ASSERT(hasQuick3DImport(), return);
switch (ToolBarAction(action)) { switch (ToolBarAction(action)) {
@@ -151,6 +171,8 @@ void QmlMaterialNodeProxy::toolBarAction(int action)
void QmlMaterialNodeProxy::setPreviewEnv(const QString &envAndValue) void QmlMaterialNodeProxy::setPreviewEnv(const QString &envAndValue)
{ {
NanotraceHR::Tracer tracer{"qml material node proxy set preview env", category()};
if (envAndValue.isEmpty()) if (envAndValue.isEmpty())
return; return;
@@ -188,6 +210,8 @@ void QmlMaterialNodeProxy::setPreviewEnv(const QString &envAndValue)
void QmlMaterialNodeProxy::setPreviewModel(const QString &modelStr) void QmlMaterialNodeProxy::setPreviewModel(const QString &modelStr)
{ {
NanotraceHR::Tracer tracer{"qml material node proxy set preview model", category()};
if (modelStr.isEmpty()) if (modelStr.isEmpty())
return; return;
@@ -212,6 +236,9 @@ void QmlMaterialNodeProxy::setPreviewModel(const QString &modelStr)
void QmlMaterialNodeProxy::handleAuxiliaryPropertyChanges() void QmlMaterialNodeProxy::handleAuxiliaryPropertyChanges()
{ {
NanotraceHR::Tracer tracer{"qml material node proxy handle auxiliary property changes",
category()};
if (!hasQuick3DImport()) if (!hasQuick3DImport())
return; return;
@@ -220,11 +247,15 @@ void QmlMaterialNodeProxy::handleAuxiliaryPropertyChanges()
void QmlMaterialNodeProxy::registerDeclarativeType() void QmlMaterialNodeProxy::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"qml material node proxy register declarative type", category()};
qmlRegisterType<QmlMaterialNodeProxy>("HelperWidgets", 2, 0, "QmlMaterialNodeProxy"); qmlRegisterType<QmlMaterialNodeProxy>("HelperWidgets", 2, 0, "QmlMaterialNodeProxy");
} }
void QmlMaterialNodeProxy::updatePossibleTypeIndex() void QmlMaterialNodeProxy::updatePossibleTypeIndex()
{ {
NanotraceHR::Tracer tracer{"qml material node proxy update possible type index", category()};
int newIndex = -1; int newIndex = -1;
if (!m_currentType.isEmpty()) if (!m_currentType.isEmpty())
newIndex = m_possibleTypes.indexOf(m_currentType); newIndex = m_possibleTypes.indexOf(m_currentType);
@@ -239,6 +270,8 @@ void QmlMaterialNodeProxy::updatePossibleTypeIndex()
void QmlMaterialNodeProxy::updatePreviewModel() void QmlMaterialNodeProxy::updatePreviewModel()
{ {
NanotraceHR::Tracer tracer{"qml material node proxy update preview model", category()};
if (!hasQuick3DImport()) if (!hasQuick3DImport())
return; return;
@@ -275,6 +308,8 @@ void QmlMaterialNodeProxy::updatePreviewModel()
void QmlMaterialNodeProxy::setMaterialNode(const QmlObjectNode &material) void QmlMaterialNodeProxy::setMaterialNode(const QmlObjectNode &material)
{ {
NanotraceHR::Tracer tracer{"qml material node proxy set material node", category()};
if (material == m_materialNode) if (material == m_materialNode)
return; return;
@@ -284,16 +319,22 @@ void QmlMaterialNodeProxy::setMaterialNode(const QmlObjectNode &material)
void QmlMaterialNodeProxy::setEditorNodes(const ModelNodes &editorNodes) void QmlMaterialNodeProxy::setEditorNodes(const ModelNodes &editorNodes)
{ {
NanotraceHR::Tracer tracer{"qml material node proxy set editor nodes", category()};
m_editorNodes = editorNodes; m_editorNodes = editorNodes;
} }
bool QmlMaterialNodeProxy::hasQuick3DImport() const bool QmlMaterialNodeProxy::hasQuick3DImport() const
{ {
NanotraceHR::Tracer tracer{"qml material node proxy has quick3d import", category()};
return materialNode().isValid() && materialNode().model()->hasImport("QtQuick3D"_L1); return materialNode().isValid() && materialNode().model()->hasImport("QtQuick3D"_L1);
} }
AbstractView *QmlMaterialNodeProxy::materialView() const AbstractView *QmlMaterialNodeProxy::materialView() const
{ {
NanotraceHR::Tracer tracer{"qml material node proxy material view", category()};
return materialNode().view(); return materialNode().view();
} }

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 "abstractview.h"
#include "qmlmodelnodeproxy.h" #include "qmlmodelnodeproxy.h"
#include "abstractview.h"
#include "propertyeditortracing.h"
#include <nodemetainfo.h> #include <nodemetainfo.h>
@@ -17,18 +18,25 @@
namespace QmlDesigner { namespace QmlDesigner {
static auto category = QmlDesigner::PropertyEditorTracing::category;
QmlModelNodeProxy::QmlModelNodeProxy(QObject *parent) : QmlModelNodeProxy::QmlModelNodeProxy(QObject *parent) :
QObject(parent) QObject(parent)
{ {
NanotraceHR::Tracer tracer{"qml model node proxy constructor", category()};
} }
void QmlModelNodeProxy::setup(const ModelNode &node) void QmlModelNodeProxy::setup(const ModelNode &node)
{ {
NanotraceHR::Tracer tracer{"qml model node proxy setup", category()};
setup(ModelNodes{node}); setup(ModelNodes{node});
} }
void QmlModelNodeProxy::setup(const ModelNodes &editorNodes) void QmlModelNodeProxy::setup(const ModelNodes &editorNodes)
{ {
NanotraceHR::Tracer tracer{"qml model node proxy setup with editor nodes", category()};
m_qmlObjectNode = editorNodes.isEmpty() ? ModelNode{} : editorNodes.first(); m_qmlObjectNode = editorNodes.isEmpty() ? ModelNode{} : editorNodes.first();
m_editorNodes = editorNodes; m_editorNodes = editorNodes;
@@ -39,11 +47,15 @@ void QmlModelNodeProxy::setup(const ModelNodes &editorNodes)
void QmlModelNodeProxy::registerDeclarativeType() void QmlModelNodeProxy::registerDeclarativeType()
{ {
qmlRegisterType<QmlModelNodeProxy>("HelperWidgets",2,0,"ModelNodeProxy"); NanotraceHR::Tracer tracer{"qml model node proxy register declarative type", category()};
qmlRegisterType<QmlModelNodeProxy>("HelperWidgets", 2, 0, "ModelNodeProxy");
} }
void QmlModelNodeProxy::emitSelectionToBeChanged() void QmlModelNodeProxy::emitSelectionToBeChanged()
{ {
NanotraceHR::Tracer tracer{"qml model node proxy emit selection to be changed", category()};
emit selectionToBeChanged(); emit selectionToBeChanged();
} }
@@ -54,16 +66,22 @@ void QmlModelNodeProxy::emitSelectionChanged()
void QmlModelNodeProxy::refresh() void QmlModelNodeProxy::refresh()
{ {
NanotraceHR::Tracer tracer{"qml model node proxy refresh", category()};
emit refreshRequired(); emit refreshRequired();
} }
QmlObjectNode QmlModelNodeProxy::qmlObjectNode() const QmlObjectNode QmlModelNodeProxy::qmlObjectNode() const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy qml object node", category()};
return m_qmlObjectNode; return m_qmlObjectNode;
} }
ModelNode QmlModelNodeProxy::modelNode() const ModelNode QmlModelNodeProxy::modelNode() const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy model node", category()};
return m_qmlObjectNode.modelNode(); return m_qmlObjectNode.modelNode();
} }
@@ -74,11 +92,15 @@ ModelNodes QmlModelNodeProxy::editorNodes() const
ModelNode QmlModelNodeProxy::singleSelectedNode() const ModelNode QmlModelNodeProxy::singleSelectedNode() const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy single selected node", category()};
return multiSelection() ? ModelNode{} : modelNode(); return multiSelection() ? ModelNode{} : modelNode();
} }
bool QmlModelNodeProxy::multiSelection() const bool QmlModelNodeProxy::multiSelection() const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy multi selection", category()};
if (!m_qmlObjectNode.isValid()) if (!m_qmlObjectNode.isValid())
return false; return false;
@@ -87,6 +109,8 @@ bool QmlModelNodeProxy::multiSelection() const
QString QmlModelNodeProxy::nodeId() const QString QmlModelNodeProxy::nodeId() const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy node id", category()};
if (!m_qmlObjectNode.isValid()) if (!m_qmlObjectNode.isValid())
return {}; return {};
@@ -98,6 +122,8 @@ QString QmlModelNodeProxy::nodeId() const
QString QmlModelNodeProxy::nodeObjectName() const QString QmlModelNodeProxy::nodeObjectName() const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy node object name", category()};
if (!m_qmlObjectNode.isValid()) if (!m_qmlObjectNode.isValid())
return {}; return {};
@@ -109,6 +135,8 @@ QString QmlModelNodeProxy::nodeObjectName() const
QString QmlModelNodeProxy::simplifiedTypeName() const QString QmlModelNodeProxy::simplifiedTypeName() const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy simplified type name", category()};
if (!m_qmlObjectNode.isValid()) if (!m_qmlObjectNode.isValid())
return {}; return {};
@@ -125,6 +153,8 @@ static QList<int> toInternalIdList(const QList<ModelNode> &nodes)
QList<int> QmlModelNodeProxy::allChildren(int internalId) const QList<int> QmlModelNodeProxy::allChildren(int internalId) const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy all children", category()};
ModelNode modelNode = m_qmlObjectNode.modelNode(); ModelNode modelNode = m_qmlObjectNode.modelNode();
QTC_ASSERT(modelNode.isValid(), return {}); QTC_ASSERT(modelNode.isValid(), return {});
@@ -137,6 +167,8 @@ QList<int> QmlModelNodeProxy::allChildren(int internalId) const
QList<int> QmlModelNodeProxy::allChildrenOfType(const QString &typeName, int internalId) const QList<int> QmlModelNodeProxy::allChildrenOfType(const QString &typeName, int internalId) const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy all children of type", category()};
ModelNode modelNode = m_qmlObjectNode.modelNode(); ModelNode modelNode = m_qmlObjectNode.modelNode();
QTC_ASSERT(modelNode.isValid(), return {}); QTC_ASSERT(modelNode.isValid(), return {});
@@ -149,6 +181,8 @@ QList<int> QmlModelNodeProxy::allChildrenOfType(const QString &typeName, int int
QString QmlModelNodeProxy::simplifiedTypeName(int internalId) const QString QmlModelNodeProxy::simplifiedTypeName(int internalId) const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy simplified type name", category()};
ModelNode modelNode = m_qmlObjectNode.modelNode(); ModelNode modelNode = m_qmlObjectNode.modelNode();
QTC_ASSERT(modelNode.isValid(), return {}); QTC_ASSERT(modelNode.isValid(), return {});
@@ -158,6 +192,8 @@ QString QmlModelNodeProxy::simplifiedTypeName(int internalId) const
PropertyEditorSubSelectionWrapper *QmlModelNodeProxy::findWrapper(int internalId) const PropertyEditorSubSelectionWrapper *QmlModelNodeProxy::findWrapper(int internalId) const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy find wrapper", category()};
for (const auto &item : qAsConst(m_subselection)) { for (const auto &item : qAsConst(m_subselection)) {
if (item->modelNode().internalId() == internalId) if (item->modelNode().internalId() == internalId)
return item.data(); return item.data();
@@ -168,6 +204,8 @@ PropertyEditorSubSelectionWrapper *QmlModelNodeProxy::findWrapper(int internalId
PropertyEditorSubSelectionWrapper *QmlModelNodeProxy::registerSubSelectionWrapper(int internalId) PropertyEditorSubSelectionWrapper *QmlModelNodeProxy::registerSubSelectionWrapper(int internalId)
{ {
NanotraceHR::Tracer tracer{"qml model node proxy register sub selection wrapper", category()};
auto result = findWrapper(internalId); auto result = findWrapper(internalId);
if (result) if (result)
@@ -193,6 +231,8 @@ void QmlModelNodeProxy::createModelNode(int internalIdParent,
const QString &typeName, const QString &typeName,
const QString &requiredImport) const QString &requiredImport)
{ {
NanotraceHR::Tracer tracer{"qml model node proxy create model node", category()};
auto parentModelNode = m_qmlObjectNode.modelNode(); auto parentModelNode = m_qmlObjectNode.modelNode();
QTC_ASSERT(parentModelNode.isValid(), return ); QTC_ASSERT(parentModelNode.isValid(), return );
@@ -231,6 +271,8 @@ void QmlModelNodeProxy::moveNode(int internalIdParent,
int fromIndex, int fromIndex,
int toIndex) int toIndex)
{ {
NanotraceHR::Tracer tracer{"qml model node proxy move node", category()};
ModelNode modelNode = m_qmlObjectNode.modelNode(); ModelNode modelNode = m_qmlObjectNode.modelNode();
QTC_ASSERT(modelNode.isValid(), return ); QTC_ASSERT(modelNode.isValid(), return );
@@ -247,6 +289,8 @@ void QmlModelNodeProxy::moveNode(int internalIdParent,
bool QmlModelNodeProxy::isInstanceOf(const QString &typeName, int internalId) const bool QmlModelNodeProxy::isInstanceOf(const QString &typeName, int internalId) const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy is instance of", category()};
ModelNode modelNode = m_qmlObjectNode.modelNode(); ModelNode modelNode = m_qmlObjectNode.modelNode();
QTC_ASSERT(modelNode.isValid(), return {}); QTC_ASSERT(modelNode.isValid(), return {});
@@ -261,6 +305,8 @@ bool QmlModelNodeProxy::isInstanceOf(const QString &typeName, int internalId) co
void QmlModelNodeProxy::changeType(int internalId, const QString &typeName) void QmlModelNodeProxy::changeType(int internalId, const QString &typeName)
{ {
NanotraceHR::Tracer tracer{"qml model node proxy change type", category()};
QTC_ASSERT(m_qmlObjectNode.isValid(), return ); QTC_ASSERT(m_qmlObjectNode.isValid(), return );
ModelNode node = m_qmlObjectNode.view()->modelNodeForInternalId(internalId); ModelNode node = m_qmlObjectNode.view()->modelNodeForInternalId(internalId);
@@ -279,6 +325,8 @@ void QmlModelNodeProxy::changeType(int internalId, const QString &typeName)
void QmlModelNodeProxy::handleInstancePropertyChanged(const ModelNode &modelNode, void QmlModelNodeProxy::handleInstancePropertyChanged(const ModelNode &modelNode,
PropertyNameView propertyName) PropertyNameView propertyName)
{ {
NanotraceHR::Tracer tracer{"qml model node proxy handle instance property changed", category()};
const QmlObjectNode qmlObjectNode(modelNode); const QmlObjectNode qmlObjectNode(modelNode);
for (const auto &item : qAsConst(m_subselection)) { for (const auto &item : qAsConst(m_subselection)) {
@@ -295,6 +343,8 @@ void QmlModelNodeProxy::handleInstancePropertyChanged(const ModelNode &modelNode
void QmlModelNodeProxy::handleBindingPropertyChanged(const BindingProperty &property) void QmlModelNodeProxy::handleBindingPropertyChanged(const BindingProperty &property)
{ {
NanotraceHR::Tracer tracer{"qml model node proxy handle binding property changed", category()};
for (const auto &item : qAsConst(m_subselection)) { for (const auto &item : qAsConst(m_subselection)) {
if (item && item->isRelevantModelNode(property.parentModelNode())) { if (item && item->isRelevantModelNode(property.parentModelNode())) {
QmlObjectNode objectNode(item->modelNode()); QmlObjectNode objectNode(item->modelNode());
@@ -308,6 +358,8 @@ void QmlModelNodeProxy::handleBindingPropertyChanged(const BindingProperty &prop
void QmlModelNodeProxy::handleVariantPropertyChanged(const VariantProperty &property) void QmlModelNodeProxy::handleVariantPropertyChanged(const VariantProperty &property)
{ {
NanotraceHR::Tracer tracer{"qml model node proxy handle variant property changed", category()};
for (const auto &item : qAsConst(m_subselection)) { for (const auto &item : qAsConst(m_subselection)) {
if (item && item->isRelevantModelNode(property.parentModelNode())) { if (item && item->isRelevantModelNode(property.parentModelNode())) {
QmlObjectNode objectNode(item->modelNode()); QmlObjectNode objectNode(item->modelNode());
@@ -321,6 +373,8 @@ void QmlModelNodeProxy::handleVariantPropertyChanged(const VariantProperty &prop
void QmlModelNodeProxy::handlePropertiesRemoved(const AbstractProperty &property) void QmlModelNodeProxy::handlePropertiesRemoved(const AbstractProperty &property)
{ {
NanotraceHR::Tracer tracer{"qml model node proxy handle properties removed", category()};
for (const auto &item : qAsConst(m_subselection)) { for (const auto &item : qAsConst(m_subselection)) {
if (item && item->isRelevantModelNode(property.parentModelNode())) { if (item && item->isRelevantModelNode(property.parentModelNode())) {
QmlObjectNode objectNode(item->modelNode()); QmlObjectNode objectNode(item->modelNode());
@@ -332,11 +386,15 @@ void QmlModelNodeProxy::handlePropertiesRemoved(const AbstractProperty &property
QList<int> QmlModelNodeProxy::allChildren(const ModelNode &modelNode) const QList<int> QmlModelNodeProxy::allChildren(const ModelNode &modelNode) const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy all children", category()};
return toInternalIdList(modelNode.directSubModelNodes()); return toInternalIdList(modelNode.directSubModelNodes());
} }
QList<int> QmlModelNodeProxy::allChildrenOfType(const ModelNode &modelNode, const QString &typeName) const QList<int> QmlModelNodeProxy::allChildrenOfType(const ModelNode &modelNode, const QString &typeName) const
{ {
NanotraceHR::Tracer tracer{"qml model node proxy all children of type", category()};
QTC_ASSERT(modelNode.isValid(), return {}); QTC_ASSERT(modelNode.isValid(), return {});
NodeMetaInfo metaInfo = modelNode.model()->metaInfo(typeName.toUtf8()); NodeMetaInfo metaInfo = modelNode.model()->metaInfo(typeName.toUtf8());

View File

@@ -3,6 +3,8 @@
#include "qmltexturenodeproxy.h" #include "qmltexturenodeproxy.h"
#include "propertyeditortracing.h"
#include <abstractview.h> #include <abstractview.h>
#include <createtexture.h> #include <createtexture.h>
#include <designmodewidget.h> #include <designmodewidget.h>
@@ -13,14 +15,24 @@
namespace QmlDesigner { namespace QmlDesigner {
static auto category = QmlDesigner::PropertyEditorTracing::category;
using namespace Qt::StringLiterals; using namespace Qt::StringLiterals;
QmlTextureNodeProxy::QmlTextureNodeProxy() = default; QmlTextureNodeProxy::QmlTextureNodeProxy()
{
NanotraceHR::Tracer tracer{"qml texture node proxy constructor", category()};
}
QmlTextureNodeProxy::~QmlTextureNodeProxy() = default; QmlTextureNodeProxy::~QmlTextureNodeProxy()
{
NanotraceHR::Tracer tracer{"qml texture node proxy destructor", category()};
}
void QmlTextureNodeProxy::setup(const QmlObjectNode &objectNode) void QmlTextureNodeProxy::setup(const QmlObjectNode &objectNode)
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy setup", category()};
const QmlObjectNode texture = objectNode.metaInfo().isQtQuick3DTexture() ? objectNode const QmlObjectNode texture = objectNode.metaInfo().isQtQuick3DTexture() ? objectNode
: QmlObjectNode{}; : QmlObjectNode{};
@@ -30,6 +42,8 @@ void QmlTextureNodeProxy::setup(const QmlObjectNode &objectNode)
void QmlTextureNodeProxy::updateSelectionDetails() void QmlTextureNodeProxy::updateSelectionDetails()
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy update selection details", category()};
QScopeGuard falseSetter{ QScopeGuard falseSetter{
std::bind_front(&QmlTextureNodeProxy::setSelectedNodeAcceptsMaterial, this, false)}; std::bind_front(&QmlTextureNodeProxy::setSelectedNodeAcceptsMaterial, this, false)};
@@ -46,6 +60,8 @@ void QmlTextureNodeProxy::updateSelectionDetails()
void QmlTextureNodeProxy::handlePropertyChanged(const AbstractProperty &property) void QmlTextureNodeProxy::handlePropertyChanged(const AbstractProperty &property)
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy handle property changed", category()};
if (!textureNode()) if (!textureNode())
return; return;
@@ -65,31 +81,43 @@ void QmlTextureNodeProxy::handlePropertyChanged(const AbstractProperty &property
void QmlTextureNodeProxy::handleBindingPropertyChanged(const BindingProperty &property) void QmlTextureNodeProxy::handleBindingPropertyChanged(const BindingProperty &property)
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy handle binding property changed", category()};
handlePropertyChanged(property); handlePropertyChanged(property);
} }
void QmlTextureNodeProxy::handlePropertiesRemoved(const AbstractProperty &property) void QmlTextureNodeProxy::handlePropertiesRemoved(const AbstractProperty &property)
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy handle properties removed", category()};
handlePropertyChanged(property); handlePropertyChanged(property);
} }
QmlObjectNode QmlTextureNodeProxy::textureNode() const QmlObjectNode QmlTextureNodeProxy::textureNode() const
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy texture node", category()};
return m_textureNode; return m_textureNode;
} }
bool QmlTextureNodeProxy::hasTexture() const bool QmlTextureNodeProxy::hasTexture() const
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy has texture", category()};
return textureNode().isValid(); return textureNode().isValid();
} }
bool QmlTextureNodeProxy::selectedNodeAcceptsMaterial() const bool QmlTextureNodeProxy::selectedNodeAcceptsMaterial() const
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy selected node accepts material", category()};
return m_selectedNodeAcceptsMaterial; return m_selectedNodeAcceptsMaterial;
} }
QString QmlTextureNodeProxy::resolveResourcePath(const QString &path) const QString QmlTextureNodeProxy::resolveResourcePath(const QString &path) const
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy resolve resource path", category()};
if (path.isEmpty()) if (path.isEmpty())
return ":/propertyeditor/images/texture_default.png"; return ":/propertyeditor/images/texture_default.png";
@@ -108,6 +136,8 @@ QString QmlTextureNodeProxy::resolveResourcePath(const QString &path) const
void QmlTextureNodeProxy::toolbarAction(int action) void QmlTextureNodeProxy::toolbarAction(int action)
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy toolbar action", category()};
if (!hasQuick3DImport()) if (!hasQuick3DImport())
return; return;
@@ -146,11 +176,15 @@ void QmlTextureNodeProxy::toolbarAction(int action)
void QmlTextureNodeProxy::registerDeclarativeType() void QmlTextureNodeProxy::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy register declarative type", category()};
qmlRegisterType<QmlTextureNodeProxy>("HelperWidgets", 2, 0, "QmlTextureNodeProxy"); qmlRegisterType<QmlTextureNodeProxy>("HelperWidgets", 2, 0, "QmlTextureNodeProxy");
} }
void QmlTextureNodeProxy::setTextureNode(const QmlObjectNode &node) void QmlTextureNodeProxy::setTextureNode(const QmlObjectNode &node)
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy set texture node", category()};
if (m_textureNode == node) if (m_textureNode == node)
return; return;
m_textureNode = node; m_textureNode = node;
@@ -159,6 +193,9 @@ void QmlTextureNodeProxy::setTextureNode(const QmlObjectNode &node)
void QmlTextureNodeProxy::setSelectedNodeAcceptsMaterial(bool value) void QmlTextureNodeProxy::setSelectedNodeAcceptsMaterial(bool value)
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy set selected node accepts material",
category()};
if (m_selectedNodeAcceptsMaterial == value) if (m_selectedNodeAcceptsMaterial == value)
return; return;
m_selectedNodeAcceptsMaterial = value; m_selectedNodeAcceptsMaterial = value;
@@ -167,6 +204,8 @@ void QmlTextureNodeProxy::setSelectedNodeAcceptsMaterial(bool value)
bool QmlTextureNodeProxy::hasQuick3DImport() const bool QmlTextureNodeProxy::hasQuick3DImport() const
{ {
NanotraceHR::Tracer tracer{"qml texture node proxy has quick3d import", category()};
return textureNode().isValid() && textureNode().model()->hasImport("QtQuick3D"_L1); return textureNode().isValid() && textureNode().model()->hasImport("QtQuick3D"_L1);
} }

View File

@@ -3,14 +3,7 @@
#include "quick2propertyeditorview.h" #include "quick2propertyeditorview.h"
#include <qmldesignerconstants.h>
#include <scripteditorbackend.h>
#include "aligndistribute.h" #include "aligndistribute.h"
#include "annotationeditor/annotationeditor.h"
#include "assetimageprovider.h"
#include "bindingeditor/actioneditor.h"
#include "bindingeditor/bindingeditor.h"
#include "colorpalettebackend.h" #include "colorpalettebackend.h"
#include "fileresourcesmodel.h" #include "fileresourcesmodel.h"
#include "fontresourcesmodel.h" #include "fontresourcesmodel.h"
@@ -22,23 +15,37 @@
#include "listvalidator.h" #include "listvalidator.h"
#include "propertychangesmodel.h" #include "propertychangesmodel.h"
#include "propertyeditorcontextobject.h" #include "propertyeditorcontextobject.h"
#include "propertyeditordynamicpropertiesproxymodel.h"
#include "propertyeditorqmlbackend.h" #include "propertyeditorqmlbackend.h"
#include "propertyeditortracing.h"
#include "propertyeditorvalue.h" #include "propertyeditorvalue.h"
#include "propertymodel.h" #include "propertymodel.h"
#include "propertynamevalidator.h" #include "propertynamevalidator.h"
#include "qmlanchorbindingproxy.h" #include "qmlanchorbindingproxy.h"
#include "qmlmaterialnodeproxy.h" #include "qmlmaterialnodeproxy.h"
#include "qmltexturenodeproxy.h" #include "qmltexturenodeproxy.h"
#include "richtexteditor/richtexteditorproxy.h"
#include "propertyeditordynamicpropertiesproxymodel.h"
#include "theme.h"
#include "tooltip.h" #include "tooltip.h"
#include <qmldesignerconstants.h>
#include <scripteditorbackend.h>
#include <annotationeditor/annotationeditor.h>
#include <assetimageprovider.h>
#include <bindingeditor/actioneditor.h>
#include <bindingeditor/bindingeditor.h>
#include <richtexteditor/richtexteditorproxy.h>
#include <theme.h>
namespace QmlDesigner { namespace QmlDesigner {
static auto category = QmlDesigner::PropertyEditorTracing::category;
Quick2PropertyEditorView::Quick2PropertyEditorView(AsynchronousImageCache &imageCache) Quick2PropertyEditorView::Quick2PropertyEditorView(AsynchronousImageCache &imageCache)
: QQuickWidget() : QQuickWidget()
{ {
NanotraceHR::Tracer tracer{"quick2 property editor view constructor", category()};
setObjectName(Constants::OBJECT_NAME_PROPERTY_EDITOR); setObjectName(Constants::OBJECT_NAME_PROPERTY_EDITOR);
setResizeMode(QQuickWidget::SizeRootObjectToView); setResizeMode(QQuickWidget::SizeRootObjectToView);
Theme::setupTheme(engine()); Theme::setupTheme(engine());

View File

@@ -2,18 +2,27 @@
// 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 "tooltip.h" #include "tooltip.h"
#include "propertyeditortracing.h"
#include <qquickwindow.h> #include <qquickwindow.h>
#include <qquickitem.h> #include <qquickitem.h>
#include <QtQuick/QQuickRenderControl> #include <QtQuick/QQuickRenderControl>
#include <QtWidgets/qtwidgetsglobal.h> #include <QtWidgets/qtwidgetsglobal.h>
#include <qtooltip.h> #include <qtooltip.h>
static auto category = QmlDesigner::PropertyEditorTracing::category;
Tooltip::Tooltip(QObject *parent) Tooltip::Tooltip(QObject *parent)
: QObject(parent) : QObject(parent)
{} {
NanotraceHR::Tracer tracer{"tooltip constructor", category()};
}
void Tooltip::showText(QQuickItem *item, const QPointF &pos, const QString &str) void Tooltip::showText(QQuickItem *item, const QPointF &pos, const QString &str)
{ {
NanotraceHR::Tracer tracer{"tooltip show text", category()};
if (!item || !item->window()) if (!item || !item->window())
return; return;
@@ -29,11 +38,15 @@ void Tooltip::showText(QQuickItem *item, const QPointF &pos, const QString &str)
void Tooltip::hideText() void Tooltip::hideText()
{ {
NanotraceHR::Tracer tracer{"tooltip hide text", category()};
QToolTip::hideText(); QToolTip::hideText();
} }
void Tooltip::registerDeclarativeType() void Tooltip::registerDeclarativeType()
{ {
NanotraceHR::Tracer tracer{"tooltip register declarative type", category()};
qmlRegisterType<Tooltip>("StudioControls", 1, 0, "ToolTipExt"); qmlRegisterType<Tooltip>("StudioControls", 1, 0, "ToolTipExt");
qmlRegisterType<Tooltip>("HelperWidgets", 2, 0, "Tooltip"); qmlRegisterType<Tooltip>("HelperWidgets", 2, 0, "Tooltip");
} }

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 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
PUBLIC_DEPENDS Nanotrace PUBLIC_DEPENDS Nanotrace
PUBLIC_DEFINES PUBLIC_DEFINES
ENABLE_QMLDESIGNER_TRACING ENABLE_QMLDESIGNER_TRACING