#include <dali/public-api/events/wheel-event.h>
#include <dali/public-api/events/key-event.h>
#include <dali/public-api/events/pan-gesture.h>
+#include <dali/devel-api/object/weak-handle.h>
// INTERNAL INCLUDES
#include <v8-utils.h>
{
public:
- ActorCallback(v8::Isolate* isolate, const v8::Local<v8::Function>& callback ,const std::string& signalName )
- : BaseCallBack( isolate, callback, signalName )
+ ActorCallback(v8::Isolate* isolate, const v8::Local<v8::Function>& callback ,const std::string& signalName, Actor actor )
+ : BaseCallBack( isolate, callback, signalName ),
+ mActor(actor)
{
}
bool OnTouch( Actor actor, const TouchEvent& event)
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;
};
{
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 )
{
}
else
{
- connected = false;
+ connected = actor.ConnectSignal( callback, signalName, ActorGenericCallbackFunctor(*callback) );
}
if( connected )
else
{
delete callback;
+ DALI_SCRIPT_EXCEPTION( isolate, "the signal is not available in this object.");
}
}
// 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;
+ }
}
}