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 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)
|
||||
{
|
||||
if (auxiliaryContainer.auxiliaryDataType() == AuxiliaryDataType::NodeInstance) {
|
||||
if (auxiliaryContainer.auxiliaryDataType() == AuxiliaryDataType::NodeInstancePropertyOverwrite) {
|
||||
if (!auxiliaryContainer.value().isNull())
|
||||
setInstancePropertyVariant(auxiliaryContainer);
|
||||
else
|
||||
|
@@ -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());
|
||||
|
@@ -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";
|
||||
|
@@ -63,7 +63,7 @@
|
||||
namespace QmlDesigner {
|
||||
|
||||
namespace {
|
||||
constexpr AuxiliaryDataKeyView formeditorZoomProperty{AuxiliaryDataType::NodeInstance,
|
||||
constexpr AuxiliaryDataKeyView formeditorZoomProperty{AuxiliaryDataType::NodeInstancePropertyOverwrite,
|
||||
"formeditorZoom"};
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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)
|
||||
{
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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());
|
||||
}
|
||||
|
Reference in New Issue
Block a user