From 27e6f99debfed792ef0ad4a5fb95e51f3a0e070f Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Fri, 20 Feb 2015 16:54:58 -0800 Subject: [PATCH] use strings for shapeType for JS Entity properties --- examples/html/entityProperties.html | 8 ++-- .../entities/src/EntityItemProperties.cpp | 44 +++++++++++++++++-- libraries/entities/src/EntityItemProperties.h | 3 ++ .../entities/src/EntityItemPropertiesMacros.h | 9 ---- 4 files changed, 47 insertions(+), 17 deletions(-) diff --git a/examples/html/entityProperties.html b/examples/html/entityProperties.html index 84a8d23a74..ad2b359e79 100644 --- a/examples/html/entityProperties.html +++ b/examples/html/entityProperties.html @@ -406,7 +406,7 @@ elModelAnimationFrame.addEventListener('change', createEmitNumberPropertyUpdateFunction('animationFrameIndex')); elModelAnimationSettings.addEventListener('change', createEmitTextPropertyUpdateFunction('animationSettings')); elModelTextures.addEventListener('change', createEmitTextPropertyUpdateFunction('textures')); - elModelShapeType.addEventListener('change', createEmitNumberPropertyUpdateFunction('shapeType')); + elModelShapeType.addEventListener('change', createEmitTextPropertyUpdateFunction('shapeType')); elTextText.addEventListener('change', createEmitTextPropertyUpdateFunction('text')); elTextLineHeight.addEventListener('change', createEmitNumberPropertyUpdateFunction('lineHeight')); @@ -671,9 +671,9 @@
Shape Type
diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 353aab0a64..7f37799bbc 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -10,6 +10,7 @@ // #include +#include #include #include @@ -170,6 +171,35 @@ void EntityItemProperties::setLastEdited(quint64 usecTime) { _lastEdited = usecTime > _created ? usecTime : _created; } +const char* shapeTypeNames[] = {"none", "box", "sphere"}; + +QString EntityItemProperties::getShapeTypeString() const { + return QString(shapeTypeNames[_shapeType]); +} + +QHash stringToShapeTypeLookup; + +void buildStringToShapeTypeLookup() { + stringToShapeTypeLookup["none"] = SHAPE_TYPE_NONE; + stringToShapeTypeLookup["box"] = SHAPE_TYPE_BOX; + stringToShapeTypeLookup["sphere"] = SHAPE_TYPE_SPHERE; +} + +void EntityItemProperties::setShapeTypeFromString(const QString& shapeName) { + if (stringToShapeTypeLookup.empty()) { + buildStringToShapeTypeLookup(); + } + auto shapeTypeItr = stringToShapeTypeLookup.find(shapeName.toLower()); + ShapeType newShapeType = SHAPE_TYPE_NONE; + if (shapeTypeItr != stringToShapeTypeLookup.end()) { + newShapeType = shapeTypeItr.value(); + } + if (newShapeType != _shapeType) { + _shapeType = newShapeType; + _shapeTypeChanged = true; + } +} + EntityPropertyFlags EntityItemProperties::getChangedProperties() const { EntityPropertyFlags changedProperties; @@ -270,7 +300,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine) cons COPY_PROPERTY_TO_QSCRIPTVALUE(lineHeight); COPY_PROPERTY_TO_QSCRIPTVALUE_COLOR_GETTER(textColor, getTextColor()); COPY_PROPERTY_TO_QSCRIPTVALUE_COLOR_GETTER(backgroundColor, getBackgroundColor()); - COPY_PROPERTY_TO_QSCRIPTVALUE(shapeType); + properties.setProperty("shapeType", getShapeTypeString()); // Sitting properties support QScriptValue sittingPoints = engine->newObject(); @@ -303,8 +333,6 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine) cons } void EntityItemProperties::copyFromScriptValue(const QScriptValue& object) { - - QScriptValue typeScriptValue = object.property("type"); if (typeScriptValue.isValid()) { setType(typeScriptValue.toVariant().toString()); @@ -350,7 +378,15 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object) { COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(lineHeight, setLineHeight); COPY_PROPERTY_FROM_QSCRIPTVALUE_COLOR(textColor, setTextColor); COPY_PROPERTY_FROM_QSCRIPTVALUE_COLOR(backgroundColor, setBackgroundColor); - COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(shapeType, setShapeType, ShapeType); + + QScriptValue shapeType = object.property("shapeType"); + if (shapeType.isValid()) { + QString newValue = shapeType.toVariant().toString(); + if (_defaultSettings || newValue != getShapeTypeString()) { + setShapeTypeFromString(newValue); + } + } + _lastEdited = usecTimestampNow(); } diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 51779d3f56..070b80f754 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -183,6 +183,9 @@ public: DEFINE_PROPERTY_REF(PROP_BACKGROUND_COLOR, BackgroundColor, backgroundColor, xColor); DEFINE_PROPERTY_REF(PROP_SHAPE_TYPE, ShapeType, shapeType, ShapeType); + QString getShapeTypeString() const; + void setShapeTypeFromString(const QString& shapeName); + public: float getMaxDimension() const { return glm::max(_dimensions.x, _dimensions.y, _dimensions.z); } diff --git a/libraries/entities/src/EntityItemPropertiesMacros.h b/libraries/entities/src/EntityItemPropertiesMacros.h index 592f808e1a..9cf16c7a05 100644 --- a/libraries/entities/src/EntityItemPropertiesMacros.h +++ b/libraries/entities/src/EntityItemPropertiesMacros.h @@ -180,15 +180,6 @@ #define COPY_PROPERTY_TO_QSCRIPTVALUE(P) \ properties.setProperty(#P, _##P); -#define COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(P, S, E) \ - QScriptValue P = object.property(#P); \ - if (P.isValid()) { \ - E newValue = (E)(P.toVariant().toInt()); \ - if (_defaultSettings || newValue != _##P) { \ - S(newValue); \ - } \ - } - #define COPY_PROPERTY_FROM_QSCRIPTVALUE_FLOAT(P, S) \ QScriptValue P = object.property(#P); \ if (P.isValid()) { \