1 #ifndef __DALI_TOOLKIT_INTERNAL_BUTTON_H__
2 #define __DALI_TOOLKIT_INTERNAL_BUTTON_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/dali.h>
23 #include <dali-toolkit/public-api/controls/buttons/button.h>
24 #include <dali-toolkit/public-api/controls/control-impl.h>
25 #include "button-painter-impl.h"
39 * Button is the base class implementation for all buttons.
41 class Button : public Control
48 BUTTON_PROPERTY_START_INDEX = Control::CONTROL_PROPERTY_END_INDEX + 1,
49 BUTTON_PROPERTY_END_INDEX = BUTTON_PROPERTY_START_INDEX + 1000 ///< Reserving 1000 property indices
55 * Construct a new Button.
60 * A reference counted object may only be deleted by calling Unreference()
67 * @copydoc Dali::Toolkit::Button::SetDimmed( bool dimmed )
69 void SetDimmed( bool dimmed );
72 * @copydoc Dali::Toolkit::Button::IsDimmed() const
74 bool IsDimmed() const;
77 * @copydoc Dali::Toolkit::Button::SetAnimationTime()
79 void SetAnimationTime( float animationTime );
82 * @copydoc Dali::Toolkit::Button::GetAnimationTime()
84 float GetAnimationTime() const;
89 * This method is called after the button initialization.
90 * Could be reimplemented in subclasses to provide specific behaviour.
92 virtual void OnButtonInitialize() { }
95 * This method is called from the OnTouchEvent method when the button is down.
96 * Could be reimplemented in subclasses to provide specific behaviour.
98 virtual void OnButtonDown() { }
101 * This method is called from the OnTouchEvent method when the button is up.
102 * Could be reimplemented in subclasses to provide specific behaviour.
104 virtual void OnButtonUp() { }
107 * This method is called from the OnTouchEvent method when the touch point leaves the boundary of the button or
108 * more than one touch points are received.
109 * Could be reimplemented in subclasses to provide specific behaviour.
111 virtual void OnTouchPointLeave() { }
114 * This method is called from the OnTouchEvent method when the touch point is interrupted.
115 * Could be reimplemented in subclasses to provide specific behaviour.
117 virtual void OnTouchPointInterrupted() { }
120 * This method is called when the animation time is set.
121 * Needs to be reimplemented in subclasses to set the animation time in different buttons.
122 * @param animationTime The animation time in seconds.
124 virtual void OnAnimationTimeSet( float animationTime );
127 * This method is called when the animation time is requested.
128 * Needs to be reimplemented in subclases to return the animation time.
129 * @return The animation time in seconds.
131 virtual float OnAnimationTimeRequested() const;
134 * This method is called when the button is removed from the stage.
135 * Could be reimplemented in subclasses to provide specific behaviour.
137 virtual void OnButtonStageDisconnection() { }
142 * @copydoc Dali::Toolkit::Button::ClickedSignal()
144 Toolkit::Button::ClickedSignalV2& ClickedSignal();
147 * @copydoc Dali::Toolkit::Button::ToggledSignal()
149 Toolkit::Button::ToggledSignalV2& ToggledSignal();
152 * Connects a callback function with the object's signals.
153 * @param[in] object The object providing the signal.
154 * @param[in] tracker Used to disconnect the signal.
155 * @param[in] signalName The signal to connect to.
156 * @param[in] functor A newly allocated FunctorDelegate.
157 * @return True if the signal was connected.
158 * @post If a signal was connected, ownership of functor was passed to CallbackBase. Otherwise the caller is responsible for deleting the unused functor.
160 static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor );
165 * Called when a property of an object of this type is set.
166 * @param[in] object The object whose property is set.
167 * @param[in] index The property index.
168 * @param[in] value The new property value.
170 static void SetProperty( BaseObject* object, Property::Index index, const Property::Value& value );
173 * Called to retrieve a property of an object of this type.
174 * @param[in] object The object whose property is to be retrieved.
175 * @param[in] index The property index.
176 * @return The current value of the property.
178 static Property::Value GetProperty( BaseObject* object, Property::Index propertyIndex );
180 protected: // From CustomActorImpl
183 * @copydoc Dali::CustomActorImpl::OnTouchEvent( const TouchEvent& event )
185 virtual bool OnTouchEvent( const TouchEvent& event );
187 private: // From Control
190 * @copydoc Toolkit::Control::OnInitialize()
192 virtual void OnInitialize();
195 * @copydoc Toolkit::Control::OnControlSizeSet( const Vector3& targetSize )
197 virtual void OnControlSizeSet( const Vector3& targetSize );
200 * Callback received when the button is disconnected from the stage.
201 * It resets the button status.
203 void OnControlStageDisconnection();
208 * Handler for tap events.
209 * We do not actually do anything when we receive a tap as the button handles tap event through
210 * the touch event system itself as it requires more than just tap handling (e.g. leave events).
211 * This stops any of our parents receiving a tap gesture when it occurs within our area.
212 * @param[in] actor The tapped actor.
213 * @param[in] tap The tap gesture.
215 void OnTap(Actor actor, TapGesture tap);
220 Button( const Button& );
223 Button& operator = ( const Button& );
225 protected: // Signals
229 ButtonUp, ///< The button is up.
230 ButtonDown, ///< The button is down.
233 ButtonState mState; ///< Stores the button state.
235 bool mDimmed; ///< Stores the dimmed property.
237 ButtonPainterPtr mPainter; ///< Pointer to a ButtonPainter base class.
239 Toolkit::Button::ClickedSignalV2 mClickedSignalV2; ///< Signal emitted when the button is clicked.
240 Toolkit::Button::ToggledSignalV2 mToggledSignalV2; ///< Signal emitted when the button is toggled.
242 TapGestureDetector mTapDetector;
245 } // namespace Internal
248 // Helpers for public-api forwarding methods
250 inline Toolkit::Internal::Button& GetImplementation( Toolkit::Button& button )
252 DALI_ASSERT_ALWAYS( button );
254 Dali::RefObject& handle = button.GetImplementation();
256 return static_cast<Toolkit::Internal::Button&>( handle );
259 inline const Toolkit::Internal::Button& GetImplementation( const Toolkit::Button& button )
261 DALI_ASSERT_ALWAYS( button );
263 const Dali::RefObject& handle = button.GetImplementation();
265 return static_cast<const Toolkit::Internal::Button&>( handle );
268 } // namespace Toolkit
272 #endif // __DALI_TOOLKIT_INTERNAL_BUTTON_H__