07014193a8e3b84b9931b1341a45beac67c3ce5e
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / Events / TapGestureDetector.cs
1 /*
2  * Copyright(c) 2019 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 using System;
18 using System.Runtime.InteropServices;
19 using Tizen.NUI.BaseComponents;
20 using System.ComponentModel;
21
22 namespace Tizen.NUI
23 {
24
25     /// <summary>
26     /// This class emits a signal when a tap gesture occurs that meets the requirements set by the application.<br />
27     /// A TapGesture is a discrete gesture, which means it does not have any state information attached.<br />
28     /// </summary>
29     /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
30     [EditorBrowsable(EditorBrowsableState.Never)]
31     public class TapGestureDetector : GestureDetector
32     {
33         /// <summary>
34         /// Creates an initialized TapGestureDetector.
35         /// </summary>
36         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
37         [EditorBrowsable(EditorBrowsableState.Never)]
38         public TapGestureDetector() : this(Interop.TapGestureDetector.New(), true)
39         {
40             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
41         }
42
43         /// <summary>
44         /// Creates an initialized TapGestureDetector with the specified parameters.
45         /// </summary>
46         /// <param name="tapsRequired">The minimum and maximum number of taps required</param>
47         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
48         [EditorBrowsable(EditorBrowsableState.Never)]
49         public TapGestureDetector(uint tapsRequired) : this(Interop.TapGestureDetector.New(tapsRequired), true)
50         {
51             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
52
53         }
54
55         internal TapGestureDetector(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
56         {
57         }
58
59         private DaliEventHandler<object, DetectedEventArgs> _detectedEventHandler;
60         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
61         private delegate void DetectedCallbackType(IntPtr actor, IntPtr TapGesture);
62         private DetectedCallbackType _detectedCallback;
63
64         /// <summary>
65         /// This signal is emitted when the specified tap is detected on the attached view.
66         /// </summary>
67         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
68         [EditorBrowsable(EditorBrowsableState.Never)]
69         public event DaliEventHandler<object, DetectedEventArgs> Detected
70         {
71             add
72             {
73                 if (_detectedEventHandler == null)
74                 {
75                     _detectedCallback = OnTapGestureDetected;
76                     DetectedSignal().Connect(_detectedCallback);
77                 }
78
79                 _detectedEventHandler += value;
80             }
81
82             remove
83             {
84                 _detectedEventHandler -= value;
85
86                 if (_detectedEventHandler == null && DetectedSignal().Empty() == false)
87                 {
88                     DetectedSignal().Disconnect(_detectedCallback);
89                 }
90             }
91         }
92
93         /// <summary>
94         /// The copy constructor.
95         /// </summary>
96         /// <param name="handle">A reference to the copied handle</param>
97         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
98         [EditorBrowsable(EditorBrowsableState.Never)]
99         public TapGestureDetector(TapGestureDetector handle) : this(Interop.TapGestureDetector.NewTapGestureDetector(TapGestureDetector.getCPtr(handle)), true)
100         {
101             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
102         }
103
104         /// <summary>
105         /// Sets the minimum number of taps required. The tap count is the number of times a user should "tap" the screen.<br />
106         /// The default is 1.<br />
107         /// </summary>
108         /// <param name="minimumTaps">The minimum taps required</param>
109         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
110         [EditorBrowsable(EditorBrowsableState.Never)]
111         public void SetMinimumTapsRequired(uint minimumTaps)
112         {
113             Interop.TapGestureDetector.SetMinimumTapsRequired(SwigCPtr, minimumTaps);
114             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
115         }
116
117         /// <summary>
118         /// Sets the maximum number of taps required. The tap count is the number of times a user should "tap" the screen.<br />
119         /// The default is 1.<br />
120         /// </summary>
121         /// <param name="maximumTaps">The maximum taps required</param>
122         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
123         [EditorBrowsable(EditorBrowsableState.Never)]
124         public void SetMaximumTapsRequired(uint maximumTaps)
125         {
126             Interop.TapGestureDetector.SetMaximumTapsRequired(SwigCPtr, maximumTaps);
127             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
128         }
129
130         /// <summary>
131         /// Retrieves the minimum number of taps required.
132         /// </summary>
133         /// <returns>The minimum taps required</returns>
134         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
135         [EditorBrowsable(EditorBrowsableState.Never)]
136         public uint GetMinimumTapsRequired()
137         {
138             uint ret = Interop.TapGestureDetector.GetMinimumTapsRequired(SwigCPtr);
139             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
140             return ret;
141         }
142
143         /// <summary>
144         /// Retrieves the maximum number of taps required.
145         /// </summary>
146         /// <returns>The maximum taps required</returns>
147         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
148         [EditorBrowsable(EditorBrowsableState.Never)]
149         public uint GetMaximumTapsRequired()
150         {
151             uint ret = Interop.TapGestureDetector.GetMaximumTapsRequired(SwigCPtr);
152             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
153             return ret;
154         }
155
156         internal new static TapGestureDetector DownCast(BaseHandle handle)
157         {
158             TapGestureDetector ret = Registry.GetManagedBaseHandleFromNativePtr(handle) as TapGestureDetector;
159             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
160             return ret;
161         }
162
163         internal static global::System.Runtime.InteropServices.HandleRef getCPtr(TapGestureDetector obj)
164         {
165             return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.SwigCPtr;
166         }
167
168         internal static TapGestureDetector GetTapGestureDetectorFromPtr(global::System.IntPtr cPtr)
169         {
170             TapGestureDetector ret = new TapGestureDetector(cPtr, false);
171             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
172             return ret;
173         }
174
175         internal TapGestureDetectedSignal DetectedSignal()
176         {
177             TapGestureDetectedSignal ret = new TapGestureDetectedSignal(Interop.TapGestureDetector.DetectedSignal(SwigCPtr), false);
178             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
179             return ret;
180         }
181
182         internal TapGestureDetector Assign(TapGestureDetector rhs)
183         {
184             TapGestureDetector ret = new TapGestureDetector(Interop.TapGestureDetector.Assign(SwigCPtr, TapGestureDetector.getCPtr(rhs)), false);
185             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
186             return ret;
187         }
188
189         /// This will not be public opened.
190         [EditorBrowsable(EditorBrowsableState.Never)]
191         protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
192         {
193             if (_detectedCallback != null)
194             {
195                 DetectedSignal().Disconnect(_detectedCallback);
196             }
197
198             Interop.TapGestureDetector.DeleteTapGestureDetector(swigCPtr);
199         }
200
201         private void OnTapGestureDetected(IntPtr actor, IntPtr tapGesture)
202         {
203             DetectedEventArgs e = new DetectedEventArgs();
204
205             // Populate all members of "e" (DetectedEventArgs) with real data
206             e.View = Registry.GetManagedBaseHandleFromNativePtr(actor) as View;
207
208             if (null == e.View)
209             {
210                 e.View = Registry.GetManagedBaseHandleFromRefObject(actor) as View;
211             }
212
213             e.TapGesture = Tizen.NUI.TapGesture.GetTapGestureFromPtr(tapGesture);
214
215             if (_detectedEventHandler != null)
216             {
217                 //here we send all data to user event handlers
218                 _detectedEventHandler(this, e);
219             }
220         }
221
222         /// <summary>
223         /// Event arguments that are passed via the TapGestureEvent signal.
224         /// </summary>
225         /// <since_tizen> 5 </since_tizen>
226         /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
227         [EditorBrowsable(EditorBrowsableState.Never)]
228         public class DetectedEventArgs : EventArgs
229         {
230             private View _view;
231             private TapGesture _tapGesture;
232
233             /// <summary>
234             /// The attached view.
235             /// </summary>
236             /// <since_tizen> 5 </since_tizen>
237             /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
238             [EditorBrowsable(EditorBrowsableState.Never)]
239             public View View
240             {
241                 get
242                 {
243                     return _view;
244                 }
245                 set
246                 {
247                     _view = value;
248                 }
249             }
250
251             /// <summary>
252             /// The TapGesture.
253             /// </summary>
254             /// <since_tizen> 5 </since_tizen>
255             /// This will be public opened in tizen_5.0 after ACR done. Before ACR, need to be hidden as inhouse API.
256             [EditorBrowsable(EditorBrowsableState.Never)]
257             public TapGesture TapGesture
258             {
259                 get
260                 {
261                     return _tapGesture;
262                 }
263                 set
264                 {
265                     _tapGesture = value;
266                 }
267             }
268         }
269     }
270 }