[NUI] Remove duplicate getCPtr from BaseHandle subclasses (#3545)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / Events / RotationGestureDetector.cs
1 /*
2  * Copyright(c) 2021 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     /// <summary>
25     /// It tries to detect when the user moves two touch points in a circular motion.
26     /// </summary>
27     /// This will be made public in the next tizen release after an ACR is done. Till then, it needs to be hidden as an inhouse API.
28     [EditorBrowsable(EditorBrowsableState.Never)]
29     public class RotationGestureDetector : GestureDetector
30     {
31         /// <summary>
32         /// Creates an initialized RotationGestureDetector.
33         /// </summary>
34         /// This will be made public in the next tizen release after an ACR is done. Till then, it needs to be hidden as an inhouse API.
35         [EditorBrowsable(EditorBrowsableState.Never)]
36         public RotationGestureDetector() : this(Interop.RotationGesture.RotationGestureDetectorNew(), true)
37         {
38             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
39
40         }
41
42         /// <summary>
43         /// The copy constructor.
44         /// </summary>
45         /// <param name="handle">A reference to the copied handle</param>
46         /// This will be made public in the next tizen release after an ACR is done. Till then, it needs to be hidden as an inhouse API.
47         [EditorBrowsable(EditorBrowsableState.Never)]
48         public RotationGestureDetector(RotationGestureDetector handle) : this(Interop.RotationGesture.NewRotationGestureDetector(RotationGestureDetector.getCPtr(handle)), true)
49         {
50             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
51         }
52
53         internal RotationGestureDetector(global::System.IntPtr cPtr, bool cMemoryOwn) : base(Interop.RotationGesture.RotationGestureDetectorUpcast(cPtr), cMemoryOwn)
54         {
55         }
56
57         private DaliEventHandler<object, DetectedEventArgs> detectedEventHandler;
58         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
59         private delegate void DetectedCallbackType(IntPtr actor, IntPtr rotationGesture);
60         private DetectedCallbackType detectedCallback;
61
62         /// <summary>
63         /// This signal is emitted when the specified rotation is detected on the attached view.
64         /// </summary>
65         /// This will be made public in the next tizen release after an ACR is done. Till then, it needs to be hidden as an inhouse API.
66         [EditorBrowsable(EditorBrowsableState.Never)]
67         public event DaliEventHandler<object, DetectedEventArgs> Detected
68         {
69             add
70             {
71                 if (detectedEventHandler == null)
72                 {
73                     detectedCallback = OnRotationGestureDetected;
74                     DetectedSignal().Connect(detectedCallback);
75                 }
76
77                 detectedEventHandler += value;
78             }
79
80             remove
81             {
82                 detectedEventHandler -= value;
83
84                 if (detectedEventHandler == null && DetectedSignal().Empty() == false)
85                 {
86                     DetectedSignal().Disconnect(detectedCallback);
87                 }
88             }
89         }
90
91
92         internal static RotationGestureDetector GetRotationGestureDetectorFromPtr(global::System.IntPtr cPtr)
93         {
94             RotationGestureDetector ret = new RotationGestureDetector(cPtr, false);
95             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
96             return ret;
97         }
98
99         internal new static RotationGestureDetector DownCast(BaseHandle handle)
100         {
101             RotationGestureDetector ret = Registry.GetManagedBaseHandleFromNativePtr(handle) as RotationGestureDetector;
102             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
103             return ret;
104         }
105
106         internal RotationGestureDetector Assign(RotationGestureDetector rhs)
107         {
108             RotationGestureDetector ret = new RotationGestureDetector(Interop.RotationGesture.RotationGestureDetectorAssign(SwigCPtr, RotationGestureDetector.getCPtr(rhs)), false);
109             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
110             return ret;
111         }
112
113         internal RotationGestureDetectedSignal DetectedSignal()
114         {
115             RotationGestureDetectedSignal ret = new RotationGestureDetectedSignal(Interop.RotationGesture.RotationGestureDetectorDetectedSignal(SwigCPtr), false);
116             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
117             return ret;
118         }
119
120         /// This will not be public opened.
121         [EditorBrowsable(EditorBrowsableState.Never)]
122         protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
123         {
124             if (detectedCallback != null)
125             {
126                 DetectedSignal().Disconnect(detectedCallback);
127             }
128
129             Interop.RotationGesture.DeleteRotationGestureDetector(swigCPtr);
130         }
131
132         private void OnRotationGestureDetected(IntPtr actor, IntPtr rotationGesture)
133         {
134             if (detectedEventHandler != null)
135             {
136                 DetectedEventArgs e = new DetectedEventArgs();
137
138                 // Populate all members of "e" (DetectedEventArgs) with real data.
139                 e.View = Registry.GetManagedBaseHandleFromNativePtr(actor) as View;
140                 if (null == e.View)
141                 {
142                     e.View = Registry.GetManagedBaseHandleFromRefObject(actor) as View;
143                 }
144
145                 e.RotationGesture = Tizen.NUI.RotationGesture.GetRotationGestureFromPtr(rotationGesture);
146                 //Here we send all data to user event handlers.
147                 detectedEventHandler(this, e);
148             }
149         }
150
151         /// <summary>
152         /// Event arguments that passed via the RotationGestureEvent signal.
153         /// </summary>
154         /// <since_tizen> 5 </since_tizen>
155         /// This will be made public in the next tizen release after an ACR is done. Till then, it needs to be hidden as an inhouse API.
156         [EditorBrowsable(EditorBrowsableState.Never)]
157         public class DetectedEventArgs : EventArgs
158         {
159             private View view;
160             private RotationGesture rotationGesture;
161             private bool handled = true;
162
163             /// <summary>
164             /// The attached view.
165             /// </summary>
166             /// <since_tizen> 5 </since_tizen>
167             /// This will be made public in the next tizen release after an ACR is done. Till then, it needs to be hidden as an inhouse API.
168             [EditorBrowsable(EditorBrowsableState.Never)]
169             public View View
170             {
171                 get
172                 {
173                     return view;
174                 }
175                 set
176                 {
177                     view = value;
178                 }
179             }
180
181             /// <summary>
182             /// The RotationGesture.
183             /// </summary>
184             /// <since_tizen> 5 </since_tizen>
185             /// This will be made public in the next tizen release after an ACR is done. Till then, it needs to be hidden as an inhouse API.
186             [EditorBrowsable(EditorBrowsableState.Never)]
187             public RotationGesture RotationGesture
188             {
189                 get
190                 {
191                     return rotationGesture;
192                 }
193                 set
194                 {
195                     rotationGesture = value;
196                 }
197             }
198
199             /// <summary>
200             /// Gets or sets a value that indicates whether the event handler has completely handled the event or whether the system should continue its own processing.
201             /// </summary>
202             [EditorBrowsable(EditorBrowsableState.Never)]
203             public bool Handled
204             {
205                 get => handled;
206                 set
207                 {
208                     handled = value;
209                     Interop.Actor.SetNeedGesturePropagation(View.getCPtr(view), !value);
210                     if (NDalicPINVOKE.SWIGPendingException.Pending)
211                         throw NDalicPINVOKE.SWIGPendingException.Retrieve();
212                 }
213             }
214         }
215
216     }
217
218 }