2 * Copyright(c) 2021 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 using System.ComponentModel;
20 using System.Runtime.InteropServices;
21 using Tizen.NUI.Components;
24 namespace Tizen.NUI.BaseComponents
26 [EditorBrowsable(EditorBrowsableState.Never)]
27 [StructLayout(LayoutKind.Sequential)]
28 public struct GestureInfoType : IEquatable<GestureInfoType>
30 [EditorBrowsable(EditorBrowsableState.Never)]
31 public AccessibilityGesture type { get; set; }
33 [EditorBrowsable(EditorBrowsableState.Never)]
34 public int xBeg { get; set; }
36 [EditorBrowsable(EditorBrowsableState.Never)]
37 public int xEnd { get; set; }
39 [EditorBrowsable(EditorBrowsableState.Never)]
40 public int yBeg { get; set; }
42 [EditorBrowsable(EditorBrowsableState.Never)]
43 public int yEnd { get; set; }
45 [EditorBrowsable(EditorBrowsableState.Never)]
46 public AccessibilityGestureState state { get; set; }
48 [EditorBrowsable(EditorBrowsableState.Never)]
49 public uint eventTime { get; set; }
51 [EditorBrowsable(EditorBrowsableState.Never)]
52 public override bool Equals(System.Object obj)
54 if (obj is GestureInfoType)
56 return this.Equals((GestureInfoType)obj);
61 public bool Equals(GestureInfoType other)
63 if ((other == null) || !this.GetType().Equals(other.GetType()))
66 GestureInfoType sec = (GestureInfoType)other;
74 eventTime == sec.eventTime;
77 [EditorBrowsable(EditorBrowsableState.Never)]
78 public static bool operator ==(GestureInfoType arg1, GestureInfoType arg2)
80 return arg1.Equals(arg2);
86 [EditorBrowsable(EditorBrowsableState.Never)]
87 public static bool operator !=(GestureInfoType arg1, GestureInfoType arg2)
89 return !arg1.Equals(arg2);
92 [EditorBrowsable(EditorBrowsableState.Never)]
93 public override int GetHashCode()
95 return Tuple.Create((int)type, xBeg, xEnd, yBeg, yEnd, (int)state, eventTime).GetHashCode();
99 [EditorBrowsable(EditorBrowsableState.Never)]
100 public class GestureInfoEventArgs : EventArgs
102 public GestureInfoType GestureInfo { get; internal set; }
103 public int Consumed { get; set; }
106 [EditorBrowsable(EditorBrowsableState.Never)]
107 public class GetDescriptionEventArgs : EventArgs
109 public string Description { get; set; }
112 [EditorBrowsable(EditorBrowsableState.Never)]
113 public class GetNameEventArgs : EventArgs
115 public string Name { get; set; }
119 /// View is the base class for all views.
121 /// <since_tizen> 3 </since_tizen>
122 public partial class View
124 internal class ControlHandle : SafeHandle
126 public ControlHandle() : base(IntPtr.Zero, true) { }
128 public ControlHandle(IntPtr ptr) : base(ptr, true) { }
130 public override bool IsInvalid
134 return this.handle == IntPtr.Zero;
138 protected override bool ReleaseHandle()
140 Interop.View.DeleteControlHandleView(handle);
141 this.SetHandle(IntPtr.Zero);
146 [EditorBrowsable(EditorBrowsableState.Never)]
147 ControlHandle GetControl()
149 var ret = new ControlHandle(Interop.View.DownCast(SwigCPtr));
150 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
154 ///////////////////////////////////////////////////////////////////
155 // ***************** AccessiblityDoGestureSignal ****************//
156 ///////////////////////////////////////////////////////////////////
158 private delegate void GestureInfoHandlerType(IntPtr data);
159 private GestureInfoHandlerType gestureInfoCallback;
160 private EventHandler<GestureInfoEventArgs> gestureInfoHandler;
161 private AccessibilityDoGestureSignal gestureInfoSignal;
163 private void OnAccessibilityGestureInfoEvent(IntPtr data)
165 if (data == IntPtr.Zero)
168 if (Marshal.SizeOf<GestureInfoType>() != AccessibilityDoGestureSignal.GetSizeOfGestureInfo())
170 throw new global::System.ApplicationException("ABI mismatch SizeOf(C# GestureInfo) != SizeOf(c++ GestureInfo)");
173 var arg = new GestureInfoEventArgs();
175 arg.Consumed = AccessibilityDoGestureSignal.GetResult(data);
176 arg.GestureInfo = (GestureInfoType)Marshal.PtrToStructure(data, typeof(GestureInfoType));
178 gestureInfoHandler?.Invoke(this, arg);
180 AccessibilityDoGestureSignal.SetResult(data, Convert.ToInt32(arg.Consumed));
183 // This uses DoGestureInfo signal from C++ API.
184 [EditorBrowsable(EditorBrowsableState.Never)]
185 public event EventHandler<GestureInfoEventArgs> AccessibilityGestureInfoReceived
189 if (gestureInfoHandler == null)
191 gestureInfoCallback = OnAccessibilityGestureInfoEvent;
192 gestureInfoSignal = this.AccessibilityGestureInfoSignal();
193 gestureInfoSignal?.Connect(gestureInfoCallback);
195 gestureInfoHandler += value;
199 gestureInfoHandler -= value;
200 if (gestureInfoHandler == null && gestureInfoCallback != null)
202 gestureInfoSignal?.Disconnect(gestureInfoCallback);
203 gestureInfoSignal?.Dispose();
204 gestureInfoSignal = null;
209 internal AccessibilityDoGestureSignal AccessibilityGestureInfoSignal()
211 var handle = GetControl();
212 AccessibilityDoGestureSignal ret = new AccessibilityDoGestureSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityDoGestureSignal(handle), false);
213 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
217 ///////////////////////////////////////////////////////////////////
218 // ************** AccessiblityGetDescriptionSignal ************* //
219 ///////////////////////////////////////////////////////////////////
221 private delegate void GetDescriptionHandlerType(IntPtr data);
222 private GetDescriptionHandlerType getDescriptionCallback;
223 private EventHandler<GetDescriptionEventArgs> getDescriptionHandler;
224 private StringToVoidSignal getDescriptionSignal;
226 private void OnGetAccessibilityDescriptionEvent(IntPtr data)
228 if (data == IntPtr.Zero)
231 var arg = new GetDescriptionEventArgs();
232 arg.Description = StringToVoidSignal.GetResult(data);
234 getDescriptionHandler?.Invoke(this, arg);
236 StringToVoidSignal.SetResult(data, arg.Description);
239 // This uses GetDescription signal from C++ API.
240 [EditorBrowsable(EditorBrowsableState.Never)]
241 public event EventHandler<GetDescriptionEventArgs> AccessibilityDescriptionRequested
245 if (getDescriptionHandler == null)
247 getDescriptionCallback = OnGetAccessibilityDescriptionEvent;
248 getDescriptionSignal = this.GetAccessibilityDescriptionSignal();
249 getDescriptionSignal?.Connect(getDescriptionCallback);
251 getDescriptionHandler += value;
255 getDescriptionHandler -= value;
256 if (getDescriptionHandler == null && getDescriptionCallback != null)
258 getDescriptionSignal?.Disconnect(getDescriptionCallback);
259 getDescriptionSignal?.Dispose();
260 getDescriptionSignal = null;
265 internal StringToVoidSignal GetAccessibilityDescriptionSignal()
267 var handle = GetControl();
268 StringToVoidSignal ret = new StringToVoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityGetDescriptionSignal(handle), false);
269 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
273 ///////////////////////////////////////////////////////////////////
274 // ***************** AccessiblityGetNameSignal ***************** //
275 ///////////////////////////////////////////////////////////////////
277 private delegate void GetNameHandlerType(IntPtr data);
278 private GetNameHandlerType getNameCallback;
279 private EventHandler<GetNameEventArgs> getNameHandler;
280 private StringToVoidSignal getNameSignal;
282 private void OnGetAccessibilityNameEvent(IntPtr data)
284 if (data == IntPtr.Zero)
287 var arg = new GetNameEventArgs();
288 arg.Name = StringToVoidSignal.GetResult(data);
290 getNameHandler?.Invoke(this, arg);
292 StringToVoidSignal.SetResult(data, arg.Name);
295 // This uses GetName signal from C++ API.
296 [EditorBrowsable(EditorBrowsableState.Never)]
297 public event EventHandler<GetNameEventArgs> AccessibilityNameRequested
301 if (getNameHandler == null)
303 getNameCallback = OnGetAccessibilityNameEvent;
304 getNameSignal = this.GetAccessibilityNameSignal();
305 getNameSignal?.Connect(getNameCallback);
307 getNameHandler += value;
311 getNameHandler -= value;
312 if (getNameHandler == null && getNameCallback != null)
314 getNameSignal?.Disconnect(getNameCallback);
315 getNameSignal?.Dispose();
316 getNameSignal = null;
321 internal StringToVoidSignal GetAccessibilityNameSignal()
323 var handle = GetControl();
324 StringToVoidSignal ret = new StringToVoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityGetNameSignal(handle), false);
325 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
329 ///////////////////////////////////////////////////////////////////
330 // **************** AccessibilityActivatedSignal **************** //
331 ///////////////////////////////////////////////////////////////////
333 private delegate void VoidHandlerType();
334 private VoidHandlerType activateCallback;
335 private EventHandler activateHandler;
336 internal VoidSignal ActivateSignal;
338 private void OnAccessibilityActivatedEvent()
340 activateHandler?.Invoke(this, null);
343 [EditorBrowsable(EditorBrowsableState.Never)]
344 public event EventHandler AccessibilityActivated
348 if (activateHandler == null)
350 activateCallback = OnAccessibilityActivatedEvent;
351 ActivateSignal = this.AccessibilityActivatedSignal();
352 ActivateSignal?.Connect(activateCallback);
354 activateHandler += value;
358 activateHandler -= value;
359 if (activateHandler == null && activateCallback != null)
361 ActivateSignal?.Disconnect(activateCallback);
362 ActivateSignal?.Dispose();
363 ActivateSignal = null;
368 internal VoidSignal AccessibilityActivatedSignal()
370 var handle = GetControl();
371 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityActivateSignal(handle), false);
372 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
376 ///////////////////////////////////////////////////////////////////
377 // ************ AccessibilityReadingSkippedSignal ************** //
378 ///////////////////////////////////////////////////////////////////
380 private VoidHandlerType readingSkippedCallback;
381 private EventHandler readingSkippedHandler;
382 internal VoidSignal ReadingSkippedSignal;
384 private void OnAccessibilityReadingSkippedEvent()
386 readingSkippedHandler?.Invoke(this, null);
389 [EditorBrowsable(EditorBrowsableState.Never)]
390 public event EventHandler AccessibilityReadingSkipped
394 if (readingSkippedHandler == null)
396 readingSkippedCallback = OnAccessibilityReadingSkippedEvent;
397 ReadingSkippedSignal = this.AccessibilityReadingSkippedSignal();
398 ReadingSkippedSignal?.Connect(readingSkippedCallback);
400 readingSkippedHandler += value;
404 readingSkippedHandler -= value;
405 if (readingSkippedHandler == null && readingSkippedCallback != null)
407 ReadingSkippedSignal?.Disconnect(readingSkippedCallback);
408 ReadingSkippedSignal?.Dispose();
409 ReadingSkippedSignal = null;
414 internal VoidSignal AccessibilityReadingSkippedSignal()
416 var handle = GetControl();
417 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingSkippedSignal(handle), false);
418 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
422 ///////////////////////////////////////////////////////////////////
423 // ************* AccessibilityReadingPausedSignal ************** //
424 ///////////////////////////////////////////////////////////////////
426 private VoidHandlerType readingPausedCallback;
427 private EventHandler readingPausedHandler;
428 internal VoidSignal ReadingPausedSignal;
430 private void OnAccessibilityReadingPausedEvent()
432 readingPausedHandler?.Invoke(this, null);
435 [EditorBrowsable(EditorBrowsableState.Never)]
436 public event EventHandler AccessibilityReadingPaused
440 if (readingPausedHandler == null)
442 readingPausedCallback = OnAccessibilityReadingPausedEvent;
443 ReadingPausedSignal = this.AccessibilityReadingPausedSignal();
444 ReadingPausedSignal?.Connect(readingPausedCallback);
446 readingPausedHandler += value;
450 readingPausedHandler -= value;
451 if (readingPausedHandler == null && readingPausedCallback != null)
453 ReadingPausedSignal?.Disconnect(readingPausedCallback);
454 ReadingPausedSignal?.Dispose();
455 ReadingPausedSignal = null;
460 internal VoidSignal AccessibilityReadingPausedSignal()
462 var handle = GetControl();
463 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingPausedSignal(handle), false);
464 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
468 ///////////////////////////////////////////////////////////////////
469 // ************* AccessibilityReadingResumedSignal ************* //
470 ///////////////////////////////////////////////////////////////////
472 private VoidHandlerType readingResumedCallback;
473 private EventHandler readingResumedHandler;
474 internal VoidSignal ReadingResumedSignal;
476 private void OnAccessibilityReadingResumedEvent()
478 readingResumedHandler?.Invoke(this, null);
481 [EditorBrowsable(EditorBrowsableState.Never)]
482 public event EventHandler AccessibilityReadingResumed
486 if (readingResumedHandler == null)
488 readingResumedCallback = OnAccessibilityReadingResumedEvent;
489 ReadingResumedSignal = this.AccessibilityReadingResumedSignal();
490 ReadingResumedSignal?.Connect(readingResumedCallback);
492 readingResumedHandler += value;
496 readingResumedHandler -= value;
497 if (readingResumedHandler == null && readingResumedCallback != null)
499 ReadingResumedSignal?.Disconnect(readingResumedCallback);
500 ReadingResumedSignal?.Dispose();
501 ReadingResumedSignal = null;
506 internal VoidSignal AccessibilityReadingResumedSignal()
508 var handle = GetControl();
509 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingResumedSignal(handle), false);
510 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
514 ///////////////////////////////////////////////////////////////////
515 // ************ AccessibilityReadingCancelledSignal ************ //
516 ///////////////////////////////////////////////////////////////////
518 private VoidHandlerType readingCancelledCallback;
519 private EventHandler readingCancelledHandler;
520 internal VoidSignal ReadingCancelledSignal;
522 private void OnAccessibilityReadingCancelledEvent()
524 readingCancelledHandler?.Invoke(this, null);
527 [EditorBrowsable(EditorBrowsableState.Never)]
528 public event EventHandler AccessibilityReadingCancelled
532 if (readingCancelledHandler == null)
534 readingCancelledCallback = OnAccessibilityReadingCancelledEvent;
535 ReadingCancelledSignal = this.AccessibilityReadingCancelledSignal();
536 ReadingCancelledSignal?.Connect(readingCancelledCallback);
538 readingCancelledHandler += value;
542 readingCancelledHandler -= value;
543 if (readingCancelledHandler == null && readingCancelledCallback != null)
545 ReadingCancelledSignal?.Disconnect(readingCancelledCallback);
546 ReadingCancelledSignal?.Dispose();
547 ReadingCancelledSignal = null;
552 internal VoidSignal AccessibilityReadingCancelledSignal()
554 var handle = GetControl();
555 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingCancelledSignal(handle), false);
556 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
560 ///////////////////////////////////////////////////////////////////
561 // ************* AccessibilityReadingStoppedSignal ************* //
562 ///////////////////////////////////////////////////////////////////
564 private VoidHandlerType readingStoppedCallback;
565 private EventHandler readingStoppedHandler;
566 internal VoidSignal ReadingStoppedSignal;
568 private void OnAccessibilityReadingStoppedEvent()
570 readingStoppedHandler?.Invoke(this, null);
573 [EditorBrowsable(EditorBrowsableState.Never)]
574 public event EventHandler AccessibilityReadingStopped
578 if (readingStoppedHandler == null)
580 readingStoppedCallback = OnAccessibilityReadingStoppedEvent;
581 ReadingStoppedSignal = this.AccessibilityReadingStoppedSignal();
582 ReadingStoppedSignal?.Connect(readingStoppedCallback);
584 readingStoppedHandler += value;
588 readingStoppedHandler -= value;
589 if (readingStoppedHandler == null && readingStoppedCallback != null)
591 ReadingStoppedSignal?.Disconnect(readingStoppedCallback);
592 ReadingStoppedSignal?.Dispose();
593 ReadingStoppedSignal = null;
598 internal VoidSignal AccessibilityReadingStoppedSignal()
600 var handle = GetControl();
601 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingStoppedSignal(handle), false);
602 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();