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:
Marco Bubke
2022-08-09 13:45:50 +02:00
parent 685c3ee4cb
commit ccc8c7c997
11 changed files with 56 additions and 40 deletions

View File

@@ -37,5 +37,11 @@ using PropertyNameList = QList<PropertyName>;
using PropertyNames = std::vector<PropertyName>;
using TypeName = QByteArray;
enum class AuxiliaryDataType { None, Temporary, Document, NodeInstance };
enum class AuxiliaryDataType {
None,
Temporary,
Document,
NodeInstancePropertyOverwrite,
NodeInstanceAuxiliary
};
}

View File

@@ -1009,7 +1009,7 @@ void NodeInstanceServer::setInstancePropertyVariant(const PropertyValueContainer
void NodeInstanceServer::setInstanceAuxiliaryData(const PropertyValueContainer &auxiliaryContainer)
{
if (auxiliaryContainer.auxiliaryDataType() == AuxiliaryDataType::NodeInstance) {
if (auxiliaryContainer.auxiliaryDataType() == AuxiliaryDataType::NodeInstancePropertyOverwrite) {
if (!auxiliaryContainer.value().isNull())
setInstancePropertyVariant(auxiliaryContainer);
else

View File

@@ -349,7 +349,8 @@ void Qt5InformationNodeInstanceServer::updateRotationBlocks(
QSet<QQuick3DNode *> unblockedNodes;
const PropertyName rotBlocked = "rotBlocked";
for (const auto &container : valueChanges) {
if (container.name() == rotBlocked) {
if (container.name() == rotBlocked
&& container.auxiliaryDataType() == AuxiliaryDataType::NodeInstanceAuxiliary) {
ServerNodeInstance instance = instanceForId(container.instanceId());
if (instance.isValid()) {
auto node = qobject_cast<QQuick3DNode *>(instance.internalObject());

View File

@@ -250,8 +250,11 @@ QTextStream &operator<<(QTextStream &stream, AuxiliaryDataType type)
case AuxiliaryDataType::None:
stream << "None";
break;
case AuxiliaryDataType::NodeInstance:
stream << "NodeInstance";
case AuxiliaryDataType::NodeInstancePropertyOverwrite:
stream << "NodeInstancePropertyOverwrite";
break;
case AuxiliaryDataType::NodeInstanceAuxiliary:
stream << "NodeInstanceAuxiliary";
break;
case AuxiliaryDataType::Document:
stream << "Permanent";

View File

@@ -63,7 +63,7 @@
namespace QmlDesigner {
namespace {
constexpr AuxiliaryDataKeyView formeditorZoomProperty{AuxiliaryDataType::NodeInstance,
constexpr AuxiliaryDataKeyView formeditorZoomProperty{AuxiliaryDataType::NodeInstancePropertyOverwrite,
"formeditorZoom"};
}

View File

@@ -109,7 +109,7 @@ void ImageCacheCollector::start(Utils::SmallStringView name,
if (is3DRoot) {
if (auto libIcon = Utils::get_if<ImageCache::LibraryIconAuxiliaryData>(&auxiliaryData))
rewriterView.rootModelNode().setAuxiliaryData(AuxiliaryDataType::NodeInstance,
rewriterView.rootModelNode().setAuxiliaryData(AuxiliaryDataType::NodeInstancePropertyOverwrite,
"isLibraryIcon",
libIcon->enable);
}

View File

@@ -60,8 +60,10 @@ public:
inline constexpr AuxiliaryDataKeyDefaultValue customIdProperty{AuxiliaryDataType::Document,
"customId",
QStringView{}};
inline constexpr AuxiliaryDataKeyDefaultValue widthProperty{AuxiliaryDataType::NodeInstance, "width", 4};
inline constexpr AuxiliaryDataKeyView heightProperty{AuxiliaryDataType::NodeInstance, "height"};
inline constexpr AuxiliaryDataKeyDefaultValue widthProperty{
AuxiliaryDataType::NodeInstancePropertyOverwrite, "width", 4};
inline constexpr AuxiliaryDataKeyView heightProperty{AuxiliaryDataType::NodeInstancePropertyOverwrite,
"height"};
inline constexpr AuxiliaryDataKeyDefaultValue breakPointProperty{AuxiliaryDataType::Document,
"breakPoint",
50};
@@ -132,13 +134,16 @@ inline constexpr AuxiliaryDataKeyView transitionDurationProperty{AuxiliaryDataTy
"transitionDuration"};
inline constexpr AuxiliaryDataKeyView targetProperty{AuxiliaryDataType::Document, "target"};
inline constexpr AuxiliaryDataKeyView propertyProperty{AuxiliaryDataType::Document, "property"};
inline constexpr AuxiliaryDataKeyView currentFrameProperty{AuxiliaryDataType::NodeInstance,
inline constexpr AuxiliaryDataKeyView currentFrameProperty{AuxiliaryDataType::NodeInstancePropertyOverwrite,
"currentFrame"};
inline constexpr AuxiliaryDataKeyView annotationProperty{AuxiliaryDataType::Document, "annotation"};
inline constexpr AuxiliaryDataKeyView globalAnnotationProperty{AuxiliaryDataType::Document,
"globalAnnotation"};
inline constexpr AuxiliaryDataKeyView globalAnnotationStatus{AuxiliaryDataType::Document,
"globalAnnotationStatus"};
inline constexpr AuxiliaryDataKeyView rotBlockProperty{AuxiliaryDataType::NodeInstanceAuxiliary,
"rotBlock"};
template<typename Type>
QVariant getDefaultValueAsQVariant(const Type &key)
{

View File

@@ -76,6 +76,7 @@
#include "nanotracecommand.h"
#include "nanotrace/nanotrace.h"
#include <auxiliarydataproperties.h>
#include <designersettings.h>
#include <metainfo.h>
#include <model.h>
@@ -676,7 +677,19 @@ void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node,
};
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)) {
NodeInstance instance = instanceForModelNode(node);
if (value.isValid()) {
@@ -707,18 +720,6 @@ void NodeInstanceView::auxiliaryDataChanged(const ModelNode &node,
break;
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 (key.name == "language") {
const QString languageAsString = value.toString();
@@ -1037,9 +1038,9 @@ QList<ModelNode> filterNodesForSkipItems(const QList<ModelNode> &nodeList)
namespace {
bool shouldSendAuxiliary(const AuxiliaryDataKey &key)
{
return key == invisibleProperty || key == lockedProperty
|| key.type == AuxiliaryDataType::NodeInstance
|| (key.type == AuxiliaryDataType::Temporary && key.name == "rotBlocked");
return key.type == AuxiliaryDataType::NodeInstancePropertyOverwrite
|| key.type == AuxiliaryDataType::NodeInstanceAuxiliary || key == invisibleProperty
|| key == lockedProperty;
}
} // namespace
@@ -2237,12 +2238,11 @@ void NodeInstanceView::updateRotationBlocks()
}
}
if (!qml3DNodes.isEmpty()) {
const PropertyName auxDataProp{"rotBlocked"};
for (const auto &node : qAsConst(qml3DNodes)) {
if (rotationKeyframeTargets.contains(node))
node.setAuxiliaryData(AuxiliaryDataType::Temporary, auxDataProp, true);
node.setAuxiliaryData(rotBlockProperty, true);
else
node.setAuxiliaryData(AuxiliaryDataType::Temporary, auxDataProp, false);
node.setAuxiliaryData(rotBlockProperty, false);
}
}
}

View File

@@ -24,15 +24,16 @@
****************************************************************************/
#include "qml3dnode.h"
#include <metainfo.h>
#include "qmlchangeset.h"
#include "nodelistproperty.h"
#include "nodehints.h"
#include "variantproperty.h"
#include "auxiliarydataproperties.h"
#include "bindingproperty.h"
#include "qmlanchors.h"
#include "invalidmodelnodeexception.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 "rewriterview.h"
@@ -92,7 +93,7 @@ void Qml3DNode::setBindingProperty(const PropertyName &name, const QString &expr
bool Qml3DNode::isBlocked(const PropertyName &propName) const
{
if (modelNode().isValid() && propName.startsWith("eulerRotation"))
return modelNode().auxiliaryDataWithDefault(AuxiliaryDataType::Temporary, "rotBlocked").toBool();
return modelNode().auxiliaryDataWithDefault(rotBlockProperty).toBool();
return false;
}

View File

@@ -302,7 +302,7 @@ void QmlTimeline::insertKeyframe(const ModelNode &target, const PropertyName &pr
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);
timelineFrames.setValue(value, frame);

View File

@@ -93,17 +93,17 @@ static inline QHash<PropertyName, QVariant> getProperties(const ModelNode &node)
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)
node.removeAuxiliaryData(AuxiliaryDataType::NodeInstance, element.first);
node.removeAuxiliaryData(AuxiliaryDataType::NodeInstancePropertyOverwrite, element.first);
for (auto propertyIterator = propertyHash.cbegin(), end = propertyHash.cend();
propertyIterator != end;
++propertyIterator) {
const PropertyName propertyName = propertyIterator.key();
if (propertyName == "width" || propertyName == "height") {
node.setAuxiliaryData(AuxiliaryDataType::NodeInstance,
node.setAuxiliaryData(AuxiliaryDataType::NodeInstancePropertyOverwrite,
propertyIterator.key(),
propertyIterator.value());
}