Tizen 2.4.0 rev3 SDK Public Release
[framework/graphics/dali.git] / dali / public-api / events / tap-gesture-detector.h
1 #ifndef __DALI_TAP_GESTURE_DETECTOR_H__
2 #define __DALI_TAP_GESTURE_DETECTOR_H__
3
4 /*
5  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6  *
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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 // INTERNAL INCLUDES
22 #include <dali/public-api/events/gesture-detector.h>
23 #include <dali/public-api/signals/dali-signal.h>
24
25 namespace Dali
26 {
27 /**
28  * @addtogroup dali_core_events
29  * @{
30  */
31
32 namespace Internal DALI_INTERNAL
33 {
34 class TapGestureDetector;
35 }
36
37 struct TapGesture;
38
39 /**
40  * @brief This class emits a signal when a tap gesture occurs that meets the requirements set by the
41  * application.
42  *
43  * See @ref TapGestureDetector::SetTapsRequired
44  *
45  * A TapGesture is a discrete gesture, which means it does not have any state information attached
46  * to it.  Please see TapGesture for more information.
47  *
48  * The application programmer can use this gesture detector as follows:
49  * @code
50  * TapGestureDetector detector = TapGestureDetector::New();
51  * detector.Attach(myActor);
52  * detector.DetectedSignal().Connect(this, &MyApplication::OnTap);
53  * @endcode
54  *
55  * @since_tizen 2.4
56  * @note Multi-touch taps are not currently supported. However, multiple taps (double & triple tap etc.) ARE supported.
57  *
58  * @see TapGesture
59  *
60  */
61 class DALI_IMPORT_API TapGestureDetector : public GestureDetector
62 {
63 public: // Typedefs
64
65   /**
66    * @brief Signal type for detected signal.
67    * @since_tizen 2.4
68    */
69   typedef Signal< void ( Actor, const TapGesture& ) > DetectedSignalType;
70
71 public: // Creation & Destruction
72
73   /**
74    * @brief Create an uninitialized TapGestureDetector; this can be initialized with TapGestureDetector::New().
75    *
76    * Calling member functions with an uninitialized TapGestureDetector handle is not allowed.
77    * @since_tizen 2.4
78    */
79   TapGestureDetector();
80
81   /**
82    * @brief Create an initialized TapGestureDetector.
83    *
84    * By default, this would create a gesture detector which requires one tap with one touch.
85    * @since_tizen 2.4
86    * @return A handle to a newly allocated Dali resource.
87    */
88   static TapGestureDetector New();
89
90   /**
91    * @brief Create an initialized TapGestureDetector with the specified parameters.
92    *
93    * @since_tizen 2.4
94    * @param[in] tapsRequired The minimum & maximum number of taps required.
95    * @return A handle to a newly allocated Dali resource.
96    */
97   static TapGestureDetector New( unsigned int tapsRequired );
98
99   /**
100    * @brief Downcast a handle to TapGestureDetector handle.
101    *
102    * If handle points to a TapGestureDetector object the
103    * downcast produces valid handle. If not the returned handle is left uninitialized.
104    * @since_tizen 2.4
105    * @param[in] handle Handle to an object
106    * @return Handle to a TapGestureDetector object or an uninitialized handle
107    */
108   static TapGestureDetector DownCast( BaseHandle handle );
109
110   /**
111    * @brief Destructor
112    *
113    * This is non-virtual since derived Handle types must not contain data or virtual methods.
114    * @since_tizen 2.4
115    */
116   ~TapGestureDetector();
117
118   /**
119    * @brief This copy constructor is required for (smart) pointer semantics.
120    *
121    * @since_tizen 2.4
122    * @param [in] handle A reference to the copied handle
123    */
124   TapGestureDetector(const TapGestureDetector& handle);
125
126   /**
127    * @brief This assignment operator is required for (smart) pointer semantics.
128    *
129    * @since_tizen 2.4
130    * @param [in] rhs  A reference to the copied handle
131    * @return A reference to this
132    */
133   TapGestureDetector& operator=(const TapGestureDetector& rhs);
134
135 public: // Setters
136
137   /**
138    * @brief Set the minimum number of taps required.
139    *
140    * The tap count is the number of times a user should "tap" the screen.
141    * @since_tizen 2.4
142    * @param[in]  minimumTaps  The minimum taps required.
143    * @pre The gesture detector has been initialized.
144    * @note The default is '1'.
145    */
146   void SetMinimumTapsRequired( unsigned int minimumTaps );
147
148   /**
149    * @brief Set the maximum number of taps required.
150    *
151    * The tap count is the number of times a user should "tap" the screen.
152    * @since_tizen 2.4
153    * @param[in]  maximumTaps  The maximum taps required.
154    * @pre The gesture detector has been initialized.
155    * @note The default is '1'.
156    */
157   void SetMaximumTapsRequired( unsigned int maximumTaps );
158
159 public: // Getters
160
161   /**
162    * @brief Retrieves the minimum number of taps required.
163    *
164    * @since_tizen 2.4
165    * @return The minimum taps required.
166    * @pre The gesture detector has been initialized.
167    */
168   unsigned int GetMinimumTapsRequired() const;
169
170   /**
171    * @brief Retrieves the maximum number of taps required.
172    *
173    * @since_tizen 2.4
174    * @return The maximum taps required.
175    * @pre The gesture detector has been initialized.
176    */
177   unsigned int GetMaximumTapsRequired() const;
178
179 public: // Signals
180
181   /**
182    * @brief This signal is emitted when the specified tap is detected on the attached actor.
183    *
184    * A callback of the following type may be connected:
185    * @code
186    *   void YourCallbackName( Actor actor, const TapGesture& gesture );
187    * @endcode
188    * @since_tizen 2.4
189    * @return The signal to connect to.
190    * @pre The gesture detector has been initialized.
191    */
192   DetectedSignalType& DetectedSignal();
193
194 public: // Not intended for Application developers
195
196   /**
197    * @brief This constructor is used by TapGestureDetector::New() methods.
198    *
199    * @since_tizen 2.4
200    * @param [in] internal A pointer to a newly allocated Dali resource.
201    */
202   explicit DALI_INTERNAL TapGestureDetector(Internal::TapGestureDetector* internal);
203 };
204
205 /**
206  * @}
207  */
208
209 } // namespace Dali
210
211 #endif // __DALI_TAP_GESTURE_DETECTOR_H__