X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=plugins%2Fdali-script-v8%2Fsrc%2Fobject%2Fhandle-wrapper.cpp;h=fed77ce2e8eca66f8a61177db775e4ba41ebc68b;hp=2915670cb6e4813a6f93513deefab8dfd59a764d;hb=5f77331dd43fc3cf8b0fa7c5d4407575dc280982;hpb=f3da11c2818c6d17706fbb2417f21b602b3190f5 diff --git a/plugins/dali-script-v8/src/object/handle-wrapper.cpp b/plugins/dali-script-v8/src/object/handle-wrapper.cpp index 2915670..fed77ce 100644 --- a/plugins/dali-script-v8/src/object/handle-wrapper.cpp +++ b/plugins/dali-script-v8/src/object/handle-wrapper.cpp @@ -42,6 +42,7 @@ namespace // un-named name space const ApiFunction HandleFunctionTable[]= { { "RegisterAnimatableProperty", HandleWrapper::RegisterAnimatableProperty }, + { "RegisterCustomProperty", HandleWrapper::RegisterCustomProperty }, }; const unsigned int HandleFunctionTableCount = sizeof(HandleFunctionTable)/sizeof(HandleFunctionTable[0]); @@ -178,8 +179,14 @@ void HandleWrapper::PropertySet( v8::Local propertyName, } else { - std::string error="Invalid property Set for "+name + "\n"; - DALI_SCRIPT_EXCEPTION( isolate, error ); + // Trying to set the value for a property that is not registered yet. + std::stringstream msg; + msg << "Trying to set the value of an unregistered property: "; + msg << name; + DALI_SCRIPT_WARNING( msg.str().c_str() ); + + // Register the custom property automatically. + handle.RegisterProperty( name, PropertyValueWrapper::ExtractPropertyValue( isolate, javaScriptValue), Property::READ_WRITE ); } } @@ -212,8 +219,8 @@ void HandleWrapper::AddInterceptsToTemplate( v8::Isolate* isolate, v8::Local& args ) @@ -251,6 +258,75 @@ void HandleWrapper::RegisterAnimatableProperty( const v8::FunctionCallbackInfo< } } +/** + * Register a new custom property. + * + * The object should support dynamic properties. + * Property names must be unused. + * Property indices are unique to each registered custom property in a given object. + * Properties can be set as non animatable using property attributes. + * returns dali.PROPERTY_INVALID_INDEX if registration failed. + * + * @method registerCustomProperty + * @for Handle + * @param {string} name The name of the property. + * @param {Object} propertyValue The new value of the property. + * @param {integer} accessMode The property access mode (writable, animatable etc). + * @return {integer} The index of the property or dali.PROPERTY_INVALID_INDEX if registration failed + * @example + * + * // access mode is one of the following + * dali.PROPERTY_READ_ONLY + * dali.PROPERTY_READ_WRITE + * dali.PROPERTY_ANIMATABLE + * + * var cellIndexPropertyIndex = actor.registerCustomProperty("cellIndex", 2, dali.PROPERTY_READ_WRITE); + * var myCustomPropertyIndex = handle.registerCustomProperty("myCustomProperty", [10.0, 25.0, 0.0], dali.PROPERTY_READ_ONLY); + * + */ +void HandleWrapper::RegisterCustomProperty( const v8::FunctionCallbackInfo< v8::Value >& args ) +{ + v8::Isolate* isolate = args.GetIsolate(); + v8::HandleScope handleScope( isolate ); + + // unwrap the object + HandleWrapper* handleWrapper = Unwrap( isolate, args.This() ); + if( !handleWrapper ) + { + return; + } + + Handle handle = handleWrapper->mHandle; + + bool found( false ); + std::string propertyName = V8Utils::GetStringParameter( PARAMETER_0, found, isolate, args ); + if( !found ) + { + DALI_SCRIPT_EXCEPTION( isolate, "bad property name parameter" ); + return; + } + + found = false; + Dali::Property::Value daliPropertyValue = V8Utils::GetPropertyValueParameter(PARAMETER_1, found, isolate, args ); + if( !found || Dali::Property::NONE == daliPropertyValue.GetType() ) + { + DALI_SCRIPT_EXCEPTION( isolate, "bad property value parameter" ); + return; + } + + found = false; + int accessMode = V8Utils::GetIntegerParameter( PARAMETER_2, found, isolate, args, 0 /* default */); + if( !found ) + { + DALI_SCRIPT_EXCEPTION( isolate, "invalid access mode parameter" ); + return; + } + else + { + args.GetReturnValue().Set( v8::Integer::New( isolate, handle.RegisterProperty( propertyName, daliPropertyValue, static_cast(accessMode) ) ) ); + } +} + } // namespace V8Plugin } // namespace Dali