From: Kimmo Hoikka Date: Thu, 28 Aug 2014 15:43:03 +0000 (-0700) Subject: Merge changes Ica8d7442,I39b8ad54 into tizen X-Git-Tag: dali_1.0.8~14 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=8cf2d800d92afd5980dd3ad9826f0d9ef65e4350;hp=17c0a295533e5a9e2e6c9af97710d20b80696714 Merge changes Ica8d7442,I39b8ad54 into tizen * changes: (Control) Can connect to gestures through scripting (Builder) Ensure properties are not applied twice --- diff --git a/base/dali-toolkit/internal/builder/builder-impl.cpp b/base/dali-toolkit/internal/builder/builder-impl.cpp index 544c428..06e95e6 100644 --- a/base/dali-toolkit/internal/builder/builder-impl.cpp +++ b/base/dali-toolkit/internal/builder/builder-impl.cpp @@ -507,9 +507,7 @@ BaseHandle Builder::DoCreate( const TreeNode& root, const TreeNode& node, } } - ApplyProperties( root, node, handle, replacements ); - - if( actor) + if( actor ) { // add children of all the styles if( OptionalChild actors = IsChild( node, KEYNAME_ACTORS ) ) @@ -529,7 +527,10 @@ BaseHandle Builder::DoCreate( const TreeNode& root, const TreeNode& node, parent.Add( actor ); } } - + else + { + ApplyProperties( root, node, handle, replacements ); + } } else { diff --git a/base/dali-toolkit/public-api/controls/control-impl.cpp b/base/dali-toolkit/public-api/controls/control-impl.cpp index 975152e..99174c4 100644 --- a/base/dali-toolkit/public-api/controls/control-impl.cpp +++ b/base/dali-toolkit/public-api/controls/control-impl.cpp @@ -76,6 +76,12 @@ TypeRegistration CONTROL_TYPE( typeid(Control), typeid(CustomActor), Create ); TypeAction ACTION_TYPE_1( CONTROL_TYPE, Toolkit::Control::ACTION_CONTROL_ACTIVATED, &Internal::Control::DoAction ); +SignalConnectorType SIGNAL_CONNECTOR_1( CONTROL_TYPE, Toolkit::Control::SIGNAL_KEY_EVENT, &Internal::Control::DoConnectSignal ); +SignalConnectorType SIGNAL_CONNECTOR_2( CONTROL_TYPE, Toolkit::Control::SIGNAL_TAPPED, &Internal::Control::DoConnectSignal ); +SignalConnectorType SIGNAL_CONNECTOR_3( CONTROL_TYPE, Toolkit::Control::SIGNAL_PANNED, &Internal::Control::DoConnectSignal ); +SignalConnectorType SIGNAL_CONNECTOR_4( CONTROL_TYPE, Toolkit::Control::SIGNAL_PINCHED, &Internal::Control::DoConnectSignal ); +SignalConnectorType SIGNAL_CONNECTOR_5( CONTROL_TYPE, Toolkit::Control::SIGNAL_LONG_PRESSED, &Internal::Control::DoConnectSignal ); + /** * Structure which holds information about the background of a control */ @@ -945,6 +951,50 @@ bool Control::DoAction(BaseObject* object, const std::string& actionName, const return ret; } +bool Control::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ) +{ + Dali::BaseHandle handle( object ); + + bool connected( false ); + Toolkit::Control control = Toolkit::Control::DownCast(handle); + if ( control ) + { + Control& controlImpl( control.GetImplementation() ); + connected = true; + + if ( Toolkit::Control::SIGNAL_KEY_EVENT == signalName ) + { + controlImpl.KeyEventSignal().Connect( tracker, functor ); + } + else if( Toolkit::Control::SIGNAL_TAPPED == signalName ) + { + controlImpl.EnableGestureDetection( Gesture::Tap ); + controlImpl.GetTapGestureDetector().DetectedSignal().Connect( tracker, functor ); + } + else if( Toolkit::Control::SIGNAL_PANNED == signalName ) + { + controlImpl.EnableGestureDetection( Gesture::Pan ); + controlImpl.GetPanGestureDetector().DetectedSignal().Connect( tracker, functor ); + } + else if( Toolkit::Control::SIGNAL_PINCHED == signalName ) + { + controlImpl.EnableGestureDetection( Gesture::Pinch ); + controlImpl.GetPinchGestureDetector().DetectedSignal().Connect( tracker, functor ); + } + else if( Toolkit::Control::SIGNAL_LONG_PRESSED == signalName ) + { + controlImpl.EnableGestureDetection( Gesture::LongPress ); + controlImpl.GetLongPressGestureDetector().DetectedSignal().Connect( tracker, functor ); + } + else + { + // signalName does not match any signal + connected = false; + } + } + return connected; +} + void Control::DoStyleChange( Toolkit::StyleManager styleManager, StyleChange change ) { if( change.themeChange ) diff --git a/base/dali-toolkit/public-api/controls/control-impl.h b/base/dali-toolkit/public-api/controls/control-impl.h index df822ef..71ffabc 100644 --- a/base/dali-toolkit/public-api/controls/control-impl.h +++ b/base/dali-toolkit/public-api/controls/control-impl.h @@ -179,6 +179,17 @@ public: static bool DoAction(BaseObject* object, const std::string& actionName, const std::vector& attributes); /** + * Connects a callback function with the object's signals. + * @param[in] object The object providing the signal. + * @param[in] tracker Used to disconnect the signal. + * @param[in] signalName The signal to connect to. + * @param[in] functor A newly allocated FunctorDelegate. + * @return True if the signal was connected. + * @post If a signal was connected, ownership of functor was passed to CallbackBase. Otherwise the caller is responsible for deleting the unused functor. + */ + static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ); + + /** * @brief If deriving classes wish to fine tune pinch gesture * detection then they can access the gesture detector through this * API and modify the detection. diff --git a/base/dali-toolkit/public-api/controls/control.cpp b/base/dali-toolkit/public-api/controls/control.cpp index 917a5b9..d01ad83 100644 --- a/base/dali-toolkit/public-api/controls/control.cpp +++ b/base/dali-toolkit/public-api/controls/control.cpp @@ -25,7 +25,12 @@ namespace Toolkit { const char* const Control::ACTION_CONTROL_ACTIVATED = "control-activated"; + const char* const Control::SIGNAL_KEY_EVENT = "key-event"; +const char* const Control::SIGNAL_TAPPED = "tapped"; +const char* const Control::SIGNAL_PANNED = "panned"; +const char* const Control::SIGNAL_PINCHED = "pinched"; +const char* const Control::SIGNAL_LONG_PRESSED = "long-pressed"; Control Control::New() { diff --git a/base/dali-toolkit/public-api/controls/control.h b/base/dali-toolkit/public-api/controls/control.h index 82ab066..951c2b6 100644 --- a/base/dali-toolkit/public-api/controls/control.h +++ b/base/dali-toolkit/public-api/controls/control.h @@ -58,6 +58,10 @@ public: /// @name Signals /** @{ */ static const char* const SIGNAL_KEY_EVENT; ///< name "key-event" + static const char* const SIGNAL_TAPPED; ///< name "tapped" + static const char* const SIGNAL_PANNED; ///< name "panned" + static const char* const SIGNAL_PINCHED; ///< name "pinched" + static const char* const SIGNAL_LONG_PRESSED; ///< name "long-pressed" /** @} */ /// @name Actions