X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=plugins%2Fdali-script-v8%2Fsrc%2Fsignals%2Fsignal-manager.cpp;h=3f26d0b64522947560b1e9e280a31af87b195198;hp=9f61ffc16a8f5eee510839c254b6105f08a82911;hb=5beb9bdb5ed4cf321bf1492f94fdaed69d70cc2c;hpb=af4073fd7a4f946e26110ecd608ef8e748c078aa diff --git a/plugins/dali-script-v8/src/signals/signal-manager.cpp b/plugins/dali-script-v8/src/signals/signal-manager.cpp index 9f61ffc..3f26d0b 100644 --- a/plugins/dali-script-v8/src/signals/signal-manager.cpp +++ b/plugins/dali-script-v8/src/signals/signal-manager.cpp @@ -30,6 +30,7 @@ #include #include #include +#include // INTERNAL INCLUDES #include @@ -179,8 +180,9 @@ class ActorCallback : public BaseCallBack { public: - ActorCallback(v8::Isolate* isolate, const v8::Local& callback ,const std::string& signalName ) - : BaseCallBack( isolate, callback, signalName ) + ActorCallback(v8::Isolate* isolate, const v8::Local& callback ,const std::string& signalName, Actor actor ) + : BaseCallBack( isolate, callback, signalName ), + mActor(actor) { } bool OnTouch( Actor actor, const TouchEvent& event) @@ -231,8 +233,22 @@ public: CallJavaScript( returnValue, arguments ); } -private: + WeakHandle< Actor > mActor; + +}; + +struct ActorGenericCallbackFunctor +{ + ActorGenericCallbackFunctor(ActorCallback& callback) : callback(callback) { } + void operator()() + { + std::vector< Dali::Any > arguments; + Dali::Any returnValue; //no return + arguments.push_back(callback.mActor.GetHandle()); //pass the actor handle as the parameter + callback.CallJavaScript( returnValue, arguments ); + } + ActorCallback& callback; }; @@ -380,7 +396,7 @@ void ActorConnection( v8::Isolate* isolate, { bool connected(true); - ActorCallback* callback =new ActorCallback( isolate, javaScriptCallback, signalName ); + ActorCallback* callback =new ActorCallback( isolate, javaScriptCallback, signalName, actor ); if( strcmp( signalName.c_str(), SIGNAL_TOUCHED ) == 0 ) { @@ -404,7 +420,7 @@ void ActorConnection( v8::Isolate* isolate, } else { - connected = false; + connected = actor.ConnectSignal( callback, signalName, ActorGenericCallbackFunctor(*callback) ); } if( connected ) @@ -619,47 +635,47 @@ void SignalManager::SignalConnect( const v8::FunctionCallbackInfo< v8::Value >& // see if we're connecting to an Actor switch( baseObject->GetType() ) { - case BaseWrappedObject::ACTOR: - { - ActorWrapper* actorWrapper = static_cast< ActorWrapper*>( baseObject ); - ActorConnection( isolate, func, actorWrapper, signal, actorWrapper->GetActor() ); - break; - } - case BaseWrappedObject::ANIMATION: - { - AnimationWrapper* animWrapper = static_cast< AnimationWrapper*>( baseObject ); - AnimationConnection( isolate, func, animWrapper, signal, animWrapper->GetAnimation() ); - break; - } - case BaseWrappedObject::IMAGE: - { - ImageWrapper* imageWrapper = static_cast< ImageWrapper*>( baseObject ); - ImageConnection( isolate, func, imageWrapper, signal, imageWrapper->GetImage() ); - break; - } - case BaseWrappedObject::STAGE: - { - StageWrapper* stageWrapper = static_cast< StageWrapper*>( baseObject ); - StageConnection( isolate, func, stageWrapper, signal, stageWrapper->GetStage() ); - break; - } - case BaseWrappedObject::KEYBOARD_FOCUS_MANAGER: - { - KeyboardFocusManagerWrapper* keyboardFocusWrapper = static_cast< KeyboardFocusManagerWrapper*>( baseObject ); - KeyboardFocusManagerConnection( isolate, func, keyboardFocusWrapper, signal, keyboardFocusWrapper->GetKeyboardFocusManager() ); - break; - } - case BaseWrappedObject::PAN_GESTURE_DETECTOR: - { - PanGestureDetectorWrapper* panGestureDetectorWrapper = static_cast< PanGestureDetectorWrapper*>( baseObject ); - PanGestureDetectorConnection( isolate, func, panGestureDetectorWrapper, signal, panGestureDetectorWrapper->GetPanGestureDetector() ); - break; - } - default: - { - DALI_SCRIPT_EXCEPTION( isolate, "object does not support connections"); - break; - } + case BaseWrappedObject::ACTOR: + { + ActorWrapper* actorWrapper = static_cast< ActorWrapper*>( baseObject ); + ActorConnection( isolate, func, actorWrapper, signal, actorWrapper->GetActor() ); + break; + } + case BaseWrappedObject::ANIMATION: + { + AnimationWrapper* animWrapper = static_cast< AnimationWrapper*>( baseObject ); + AnimationConnection( isolate, func, animWrapper, signal, animWrapper->GetAnimation() ); + break; + } + case BaseWrappedObject::IMAGE: + { + ImageWrapper* imageWrapper = static_cast< ImageWrapper*>( baseObject ); + ImageConnection( isolate, func, imageWrapper, signal, imageWrapper->GetImage() ); + break; + } + case BaseWrappedObject::STAGE: + { + StageWrapper* stageWrapper = static_cast< StageWrapper*>( baseObject ); + StageConnection( isolate, func, stageWrapper, signal, stageWrapper->GetStage() ); + break; + } + case BaseWrappedObject::KEYBOARD_FOCUS_MANAGER: + { + KeyboardFocusManagerWrapper* keyboardFocusWrapper = static_cast< KeyboardFocusManagerWrapper*>( baseObject ); + KeyboardFocusManagerConnection( isolate, func, keyboardFocusWrapper, signal, keyboardFocusWrapper->GetKeyboardFocusManager() ); + break; + } + case BaseWrappedObject::PAN_GESTURE_DETECTOR: + { + PanGestureDetectorWrapper* panGestureDetectorWrapper = static_cast< PanGestureDetectorWrapper*>( baseObject ); + PanGestureDetectorConnection( isolate, func, panGestureDetectorWrapper, signal, panGestureDetectorWrapper->GetPanGestureDetector() ); + break; + } + default: + { + DALI_SCRIPT_EXCEPTION( isolate, "object does not support connections"); + break; + } } }