forked from qt-creator/qt-creator
QmlDesigner: rotBlock is using it own aux type
rotBlock was using the mechanism to overwrite values but actually it is only for communication to the puppet. So now there is NodeInstanceAuxiliary as a generic way. NodeInstance was renamed NodeInstancePropertyOverwrite to make it clear that it is for overwriting properties. Task-number: QDS-7338 Change-Id: Id5ab1f5c4761a184964a347f00d1449ae2d7d77f Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -37,5 +37,11 @@ using PropertyNameList = QList<PropertyName>;
|
|||||||
using PropertyNames = std::vector<PropertyName>;
|
using PropertyNames = std::vector<PropertyName>;
|
||||||
using TypeName = QByteArray;
|
using TypeName = QByteArray;
|
||||||
|
|
||||||
enum class AuxiliaryDataType { None, Temporary, Document, NodeInstance };
|
enum class AuxiliaryDataType {
|
||||||
|
None,
|
||||||
|
Temporary,
|
||||||
|
Document,
|
||||||
|
NodeInstancePropertyOverwrite,
|
||||||
|
NodeInstanceAuxiliary
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
@@ -1009,7 +1009,7 @@ void NodeInstanceServer::setInstancePropertyVariant(const PropertyValueContainer
|
|||||||
|
|
||||||
void NodeInstanceServer::setInstanceAuxiliaryData(const PropertyValueContainer &auxiliaryContainer)
|
void NodeInstanceServer::setInstanceAuxiliaryData(const PropertyValueContainer &auxiliaryContainer)
|
||||||
{
|
{
|
||||||
if (auxiliaryContainer.auxiliaryDataType() == AuxiliaryDataType::NodeInstance) {
|
if (auxiliaryContainer.auxiliaryDataType() == AuxiliaryDataType::NodeInstancePropertyOverwrite) {
|
||||||
if (!auxiliaryContainer.value().isNull())
|
if (!auxiliaryContainer.value().isNull())
|
||||||
setInstancePropertyVariant(auxiliaryContainer);
|
setInstancePropertyVariant(auxiliaryContainer);
|
||||||
else
|
else
|
||||||
|
@@ -349,7 +349,8 @@ void Qt5InformationNodeInstanceServer::updateRotationBlocks(
|
|||||||
QSet<QQuick3DNode *> unblockedNodes;
|
QSet<QQuick3DNode *> unblockedNodes;
|
||||||
const PropertyName rotBlocked = "rotBlocked";
|
const PropertyName rotBlocked = "rotBlocked";
|
||||||
for (const auto &container : valueChanges) {
|
for (const auto &container : valueChanges) {
|
||||||
if (container.name() == rotBlocked) {
|
if (container.name() == rotBlocked
|
||||||
|
&& container.auxiliaryDataType() == AuxiliaryDataType::NodeInstanceAuxiliary) {
|
||||||
ServerNodeInstance instance = instanceForId(container.instanceId());
|
ServerNodeInstance instance = instanceForId(container.instanceId());
|
||||||
if (instance.isValid()) {
|
if (instance.isValid()) {
|
||||||
auto node = qobject_cast<QQuick3DNode *>(instance.internalObject());
|
auto node = qobject_cast<QQuick3DNode *>(instance.internalObject());
|
||||||
|
@@ -250,8 +250,11 @@ QTextStream &operator<<(QTextStream &stream, AuxiliaryDataType type)
|
|||||||
case AuxiliaryDataType::None:
|
case AuxiliaryDataType::None:
|
||||||
stream << "None";
|
stream << "None";
|
||||||
break;
|
break;
|
||||||
case AuxiliaryDataType::NodeInstance:
|
case AuxiliaryDataType::NodeInstancePropertyOverwrite:
|
||||||
stream << "NodeInstance";
|
stream << "NodeInstancePropertyOverwrite";
|
||||||
|
break;
|
||||||
|
case AuxiliaryDataType::NodeInstanceAuxiliary:
|
||||||
|
stream << "NodeInstanceAuxiliary";
|
||||||
break;
|
break;
|
||||||
case AuxiliaryDataType::Document:
|
case AuxiliaryDataType::Document:
|
||||||
stream << "Permanent";
|
stream << "Permanent";
|
||||||
|
@@ -63,7 +63,7 @@
|
|||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
constexpr AuxiliaryDataKeyView formeditorZoomProperty{AuxiliaryDataType::NodeInstance,
|
constexpr AuxiliaryDataKeyView formeditorZoomProperty{AuxiliaryDataType::NodeInstancePropertyOverwrite,
|
||||||
"formeditorZoom"};
|
"formeditorZoom"};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -109,7 +109,7 @@ void ImageCacheCollector::start(Utils::SmallStringView name,
|
|||||||
|
|
||||||
if (is3DRoot) {
|
if (is3DRoot) {
|
||||||
if (auto libIcon = Utils::get_if<ImageCache::LibraryIconAuxiliaryData>(&auxiliaryData))
|
if (auto libIcon = Utils::get_if<ImageCache::LibraryIconAuxiliaryData>(&auxiliaryData))
|
||||||
rewriterView.rootModelNode().setAuxiliaryData(AuxiliaryDataType::NodeInstance,
|
rewriterView.rootModelNode().setAuxiliaryData(AuxiliaryDataType::NodeInstancePropertyOverwrite,
|
||||||
"isLibraryIcon",
|
"isLibraryIcon",
|
||||||
libIcon->enable);
|
libIcon->enable);
|
||||||
}
|
}
|
||||||
|
@@ -60,8 +60,10 @@ public:
|
|||||||
inline constexpr AuxiliaryDataKeyDefaultValue customIdProperty{AuxiliaryDataType::Document,
|
inline constexpr AuxiliaryDataKeyDefaultValue customIdProperty{AuxiliaryDataType::Document,
|
||||||
"customId",
|
"customId",
|
||||||
QStringView{}};
|
QStringView{}};
|
||||||
inline constexpr AuxiliaryDataKeyDefaultValue widthProperty{AuxiliaryDataType::NodeInstance, "width", 4};
|
inline constexpr AuxiliaryDataKeyDefaultValue widthProperty{
|
||||||
inline constexpr AuxiliaryDataKeyView heightProperty{AuxiliaryDataType::NodeInstance, "height"};
|
AuxiliaryDataType::NodeInstancePropertyOverwrite, "width", 4};
|
||||||
|
inline constexpr AuxiliaryDataKeyView heightProperty{AuxiliaryDataType::NodeInstancePropertyOverwrite,
|
||||||
|
"height"};
|
||||||
inline constexpr AuxiliaryDataKeyDefaultValue breakPointProperty{AuxiliaryDataType::Document,
|
inline constexpr AuxiliaryDataKeyDefaultValue breakPointProperty{AuxiliaryDataType::Document,
|
||||||
"breakPoint",
|
"breakPoint",
|
||||||
50};
|
50};
|
||||||
@@ -132,13 +134,16 @@ inline constexpr AuxiliaryDataKeyView transitionDurationProperty{AuxiliaryDataTy
|
|||||||
"transitionDuration"};
|
"transitionDuration"};
|
||||||
inline constexpr AuxiliaryDataKeyView targetProperty{AuxiliaryDataType::Document, "target"};
|
inline constexpr AuxiliaryDataKeyView targetProperty{AuxiliaryDataType::Document, "target"};
|
||||||
inline constexpr AuxiliaryDataKeyView propertyProperty{AuxiliaryDataType::Document, "property"};
|
inline constexpr AuxiliaryDataKeyView propertyProperty{AuxiliaryDataType::Document, "property"};
|
||||||
inline constexpr AuxiliaryDataKeyView currentFrameProperty{AuxiliaryDataType::NodeInstance,
|
inline constexpr AuxiliaryDataKeyView currentFrameProperty{AuxiliaryDataType::NodeInstancePropertyOverwrite,
|
||||||
"currentFrame"};
|
"currentFrame"};
|
||||||
inline constexpr AuxiliaryDataKeyView annotationProperty{AuxiliaryDataType::Document, "annotation"};
|
inline constexpr AuxiliaryDataKeyView annotationProperty{AuxiliaryDataType::Document, "annotation"};
|
||||||
inline constexpr AuxiliaryDataKeyView globalAnnotationProperty{AuxiliaryDataType::Document,
|
inline constexpr AuxiliaryDataKeyView globalAnnotationProperty{AuxiliaryDataType::Document,
|
||||||
"globalAnnotation"};
|
"globalAnnotation"};
|
||||||
inline constexpr AuxiliaryDataKeyView globalAnnotationStatus{AuxiliaryDataType::Document,
|
inline constexpr AuxiliaryDataKeyView globalAnnotationStatus{AuxiliaryDataType::Document,
|
||||||
"globalAnnotationStatus"};
|
"globalAnnotationStatus"};
|
||||||
|
inline constexpr AuxiliaryDataKeyView rotBlockProperty{AuxiliaryDataType::NodeInstanceAuxiliary,
|
||||||
|
"rotBlock"};
|
||||||
|
|
||||||
template<typename Type>
|
template<typename Type>
|
||||||
QVariant getDefaultValueAsQVariant(const Type &key)
|
QVariant getDefaultValueAsQVariant(const Type &key)
|
||||||
{
|
{
|
||||||
|
@@ -76,6 +76,7 @@
|
|||||||
#include "nanotracecommand.h"
|
#include "nanotracecommand.h"
|
||||||
#include "nanotrace/nanotrace.h"
|
#include "nanotrace/nanotrace.h"
|
||||||
|
|
||||||
|
#include <auxiliarydataproperties.h>
|
||||||
#include <designersettings.h>
|
#include <designersettings.h>
|
||||||
#include <metainfo.h>
|
#include <metainfo.h>
|
||||||
#include <model.h>
|
#include <model.h>
|
||||||
@@ -676,7 +677,19 @@ void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node,
|
|||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AuxiliaryDataType::NodeInstance:
|
case AuxiliaryDataType::NodeInstanceAuxiliary:
|
||||||
|
if (hasInstanceForModelNode(node)) {
|
||||||
|
NodeInstance instance = instanceForModelNode(node);
|
||||||
|
PropertyValueContainer container{instance.instanceId(),
|
||||||
|
PropertyName{key.name},
|
||||||
|
value,
|
||||||
|
TypeName(),
|
||||||
|
key.type};
|
||||||
|
m_nodeInstanceServer->changeAuxiliaryValues({{container}});
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
|
||||||
|
case AuxiliaryDataType::NodeInstancePropertyOverwrite:
|
||||||
if (hasInstanceForModelNode(node)) {
|
if (hasInstanceForModelNode(node)) {
|
||||||
NodeInstance instance = instanceForModelNode(node);
|
NodeInstance instance = instanceForModelNode(node);
|
||||||
if (value.isValid()) {
|
if (value.isValid()) {
|
||||||
@@ -707,18 +720,6 @@ void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case AuxiliaryDataType::Temporary:
|
case AuxiliaryDataType::Temporary:
|
||||||
if (key.name == "rotBlocked" && hasInstanceForModelNode(node)) {
|
|
||||||
NodeInstance instance = instanceForModelNode(node);
|
|
||||||
if (value.isValid()) {
|
|
||||||
PropertyValueContainer container{instance.instanceId(),
|
|
||||||
PropertyName{key.name},
|
|
||||||
value,
|
|
||||||
TypeName(),
|
|
||||||
key.type};
|
|
||||||
m_nodeInstanceServer->changeAuxiliaryValues({{container}});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
if (node.isRootNode()) {
|
if (node.isRootNode()) {
|
||||||
if (key.name == "language") {
|
if (key.name == "language") {
|
||||||
const QString languageAsString = value.toString();
|
const QString languageAsString = value.toString();
|
||||||
@@ -1037,9 +1038,9 @@ QList<ModelNode> filterNodesForSkipItems(const QList<ModelNode> &nodeList)
|
|||||||
namespace {
|
namespace {
|
||||||
bool shouldSendAuxiliary(const AuxiliaryDataKey &key)
|
bool shouldSendAuxiliary(const AuxiliaryDataKey &key)
|
||||||
{
|
{
|
||||||
return key == invisibleProperty || key == lockedProperty
|
return key.type == AuxiliaryDataType::NodeInstancePropertyOverwrite
|
||||||
|| key.type == AuxiliaryDataType::NodeInstance
|
|| key.type == AuxiliaryDataType::NodeInstanceAuxiliary || key == invisibleProperty
|
||||||
|| (key.type == AuxiliaryDataType::Temporary && key.name == "rotBlocked");
|
|| key == lockedProperty;
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
@@ -2237,12 +2238,11 @@ void NodeInstanceView::updateRotationBlocks()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!qml3DNodes.isEmpty()) {
|
if (!qml3DNodes.isEmpty()) {
|
||||||
const PropertyName auxDataProp{"rotBlocked"};
|
|
||||||
for (const auto &node : qAsConst(qml3DNodes)) {
|
for (const auto &node : qAsConst(qml3DNodes)) {
|
||||||
if (rotationKeyframeTargets.contains(node))
|
if (rotationKeyframeTargets.contains(node))
|
||||||
node.setAuxiliaryData(AuxiliaryDataType::Temporary, auxDataProp, true);
|
node.setAuxiliaryData(rotBlockProperty, true);
|
||||||
else
|
else
|
||||||
node.setAuxiliaryData(AuxiliaryDataType::Temporary, auxDataProp, false);
|
node.setAuxiliaryData(rotBlockProperty, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -24,15 +24,16 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "qml3dnode.h"
|
#include "qml3dnode.h"
|
||||||
#include <metainfo.h>
|
#include "auxiliarydataproperties.h"
|
||||||
#include "qmlchangeset.h"
|
|
||||||
#include "nodelistproperty.h"
|
|
||||||
#include "nodehints.h"
|
|
||||||
#include "variantproperty.h"
|
|
||||||
#include "bindingproperty.h"
|
#include "bindingproperty.h"
|
||||||
#include "qmlanchors.h"
|
|
||||||
#include "invalidmodelnodeexception.h"
|
#include "invalidmodelnodeexception.h"
|
||||||
#include "itemlibraryinfo.h"
|
#include "itemlibraryinfo.h"
|
||||||
|
#include "nodehints.h"
|
||||||
|
#include "nodelistproperty.h"
|
||||||
|
#include "qmlanchors.h"
|
||||||
|
#include "qmlchangeset.h"
|
||||||
|
#include "variantproperty.h"
|
||||||
|
#include <metainfo.h>
|
||||||
|
|
||||||
#include "plaintexteditmodifier.h"
|
#include "plaintexteditmodifier.h"
|
||||||
#include "rewriterview.h"
|
#include "rewriterview.h"
|
||||||
@@ -92,7 +93,7 @@ void Qml3DNode::setBindingProperty(const PropertyName &name, const QString &expr
|
|||||||
bool Qml3DNode::isBlocked(const PropertyName &propName) const
|
bool Qml3DNode::isBlocked(const PropertyName &propName) const
|
||||||
{
|
{
|
||||||
if (modelNode().isValid() && propName.startsWith("eulerRotation"))
|
if (modelNode().isValid() && propName.startsWith("eulerRotation"))
|
||||||
return modelNode().auxiliaryDataWithDefault(AuxiliaryDataType::Temporary, "rotBlocked").toBool();
|
return modelNode().auxiliaryDataWithDefault(rotBlockProperty).toBool();
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -302,7 +302,7 @@ void QmlTimeline::insertKeyframe(const ModelNode &target, const PropertyName &pr
|
|||||||
|
|
||||||
QTC_ASSERT(timelineFrames.isValid(), return );
|
QTC_ASSERT(timelineFrames.isValid(), return );
|
||||||
|
|
||||||
const qreal frame = modelNode().auxiliaryData(currentFrameProperty)->toReal();
|
const qreal frame = modelNode().auxiliaryDataWithDefault(currentFrameProperty).toReal();
|
||||||
const QVariant value = QmlObjectNode(targetNode).instanceValue(propertyName);
|
const QVariant value = QmlObjectNode(targetNode).instanceValue(propertyName);
|
||||||
|
|
||||||
timelineFrames.setValue(value, frame);
|
timelineFrames.setValue(value, frame);
|
||||||
|
@@ -93,17 +93,17 @@ static inline QHash<PropertyName, QVariant> getProperties(const ModelNode &node)
|
|||||||
|
|
||||||
static inline void applyProperties(ModelNode &node, const QHash<PropertyName, QVariant> &propertyHash)
|
static inline void applyProperties(ModelNode &node, const QHash<PropertyName, QVariant> &propertyHash)
|
||||||
{
|
{
|
||||||
const auto auxiliaryData = node.auxiliaryData(AuxiliaryDataType::NodeInstance);
|
const auto auxiliaryData = node.auxiliaryData(AuxiliaryDataType::NodeInstancePropertyOverwrite);
|
||||||
|
|
||||||
for (const auto &element : auxiliaryData)
|
for (const auto &element : auxiliaryData)
|
||||||
node.removeAuxiliaryData(AuxiliaryDataType::NodeInstance, element.first);
|
node.removeAuxiliaryData(AuxiliaryDataType::NodeInstancePropertyOverwrite, element.first);
|
||||||
|
|
||||||
for (auto propertyIterator = propertyHash.cbegin(), end = propertyHash.cend();
|
for (auto propertyIterator = propertyHash.cbegin(), end = propertyHash.cend();
|
||||||
propertyIterator != end;
|
propertyIterator != end;
|
||||||
++propertyIterator) {
|
++propertyIterator) {
|
||||||
const PropertyName propertyName = propertyIterator.key();
|
const PropertyName propertyName = propertyIterator.key();
|
||||||
if (propertyName == "width" || propertyName == "height") {
|
if (propertyName == "width" || propertyName == "height") {
|
||||||
node.setAuxiliaryData(AuxiliaryDataType::NodeInstance,
|
node.setAuxiliaryData(AuxiliaryDataType::NodeInstancePropertyOverwrite,
|
||||||
propertyIterator.key(),
|
propertyIterator.key(),
|
||||||
propertyIterator.value());
|
propertyIterator.value());
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user