X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=plugins%2Fdali-script-v8%2Fsrc%2Fsignals%2Fsignal-manager.cpp;h=d806913c9f17198f68bceecfc83c5633ec7585a1;hb=dc1ae31598b8711327a6018455843a56b7031db1;hp=9f61ffc16a8f5eee510839c254b6105f08a82911;hpb=4bf366c7c657eacb5cf150fa52e34263ca16218f;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/plugins/dali-script-v8/src/signals/signal-manager.cpp b/plugins/dali-script-v8/src/signals/signal-manager.cpp index 9f61ffc..d806913 100644 --- a/plugins/dali-script-v8/src/signals/signal-manager.cpp +++ b/plugins/dali-script-v8/src/signals/signal-manager.cpp @@ -25,11 +25,12 @@ #include #include #include -#include +#include #include #include #include #include +#include // INTERNAL INCLUDES #include @@ -53,7 +54,7 @@ namespace V8Plugin namespace // un-named namespace { -const char* const SIGNAL_TOUCHED = "touched"; +const char* const SIGNAL_TOUCH = "touch"; const char* const SIGNAL_HOVERED = "hovered"; const char* const SIGNAL_WHEEL_EVENT = "wheelEvent"; const char* const SIGNAL_ON_STAGE = "onStage"; @@ -63,7 +64,7 @@ const char* const SIGNAL_PAN_DETECTED = "panDetected"; const char* const STAGE_SIGNAL_KEY_EVENT = "keyEvent"; const char* const STAGE_SIGNAL_EVENT_PROCESSING_FINISHED = "eventProcessingFinished"; -const char* const STAGE_SIGNAL_TOUCHED = "touched"; +const char* const STAGE_SIGNAL_TOUCH = "touch"; const char* const SIGNAL_IMAGE_LOADING_FINISHED = "imageLoadingFinished"; const char* const SIGNAL_IMAGE_UPLOADED = "uploaded"; @@ -179,16 +180,17 @@ 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) + bool OnTouch( Actor actor, const TouchData& touch ) { std::vector< Dali::Any > arguments; // Dali::Vector considers Dali::Any to be a non trivial type so won't compile Dali::Any returnValue(false); arguments.push_back( actor ); - arguments.push_back( event ); + arguments.push_back( touch ); CallJavaScript( returnValue, arguments ); bool ret; returnValue.Get(ret); @@ -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; }; @@ -292,11 +308,11 @@ public: Dali::Any returnValue; //no return CallJavaScript( returnValue, arguments ); } - void TouchedSignal( const TouchEvent& touchEvent) + void TouchSignal( const TouchData& touch ) { std::vector< Dali::Any > arguments; Dali::Any returnValue; //no return - arguments.push_back( touchEvent ); + arguments.push_back( touch ); CallJavaScript( returnValue, arguments ); } }; @@ -380,11 +396,11 @@ 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 ) + if( strcmp( signalName.c_str(), SIGNAL_TOUCH ) == 0 ) { - actor.TouchedSignal().Connect( callback, &ActorCallback::OnTouch ); + actor.TouchSignal().Connect( callback, &ActorCallback::OnTouch ); } else if( strcmp( signalName.c_str(), SIGNAL_HOVERED ) == 0 ) { @@ -404,7 +420,7 @@ void ActorConnection( v8::Isolate* isolate, } else { - connected = false; + connected = actor.ConnectSignal( callback, signalName, ActorGenericCallbackFunctor(*callback) ); } if( connected ) @@ -414,6 +430,7 @@ void ActorConnection( v8::Isolate* isolate, else { delete callback; + DALI_SCRIPT_EXCEPTION( isolate, "the signal is not available in this object."); } } @@ -477,9 +494,9 @@ void StageConnection( v8::Isolate* isolate, { stage.EventProcessingFinishedSignal().Connect( callback, &StageCallback::EventProcessingFinishedSignal ); } - else if (strcmp( signalName.c_str(), STAGE_SIGNAL_TOUCHED ) == 0 ) + else if (strcmp( signalName.c_str(), STAGE_SIGNAL_TOUCH ) == 0 ) { - stage.TouchedSignal().Connect( callback, &StageCallback::TouchedSignal ); + stage.TouchSignal().Connect( callback, &StageCallback::TouchSignal ); } else { @@ -581,10 +598,10 @@ void SignalManager::SignalConnect( const v8::FunctionCallbackInfo< v8::Value >& // first paramter = signal to connect to // Second parameter = function ( to run ) // args.This() = myActor - // e.g. myActor.Connect("touched", myJavaScriptActorTouched ); + // e.g. myActor.Connect("touch", myJavaScriptActorTouched ); // Inside Callback on myJavaScriptActorTouched - // myActor.Disconnect("touched", myJavaScriptActorTouched ); + // myActor.Disconnect("touch", myJavaScriptActorTouched ); v8::Isolate* isolate = args.GetIsolate(); v8::HandleScope handleScope( isolate ); @@ -619,47 +636,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; + } } }