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
27 /// Gesture information type containing all values needed to AccessibilityDoGestureSignal.
29 [EditorBrowsable(EditorBrowsableState.Never)]
30 [StructLayout(LayoutKind.Sequential)]
31 public struct GestureInfoType : IEquatable<GestureInfoType>
34 /// Accessibility enumerated gesture type.
36 [EditorBrowsable(EditorBrowsableState.Never)]
37 public AccessibilityGesture Type { get; set; }
40 /// The X position where the gesture begins.
42 [EditorBrowsable(EditorBrowsableState.Never)]
43 public int StartPositionX { get; set; }
46 /// The X position where the gesture ends.
48 [EditorBrowsable(EditorBrowsableState.Never)]
49 public int EndPositionX { get; set; }
52 /// The Y position where the gesture begins.
54 [EditorBrowsable(EditorBrowsableState.Never)]
55 public int StartPositionY { get; set; }
58 /// The Y position where the gesture ends.
60 [EditorBrowsable(EditorBrowsableState.Never)]
61 public int EndPositionY { get; set; }
64 /// The enumerated state of gesture.
66 [EditorBrowsable(EditorBrowsableState.Never)]
67 public AccessibilityGestureState State { get; set; }
70 /// The time when event occured.
72 [EditorBrowsable(EditorBrowsableState.Never)]
73 public uint EventTime { get; set; }
76 /// Determines whether the specified object is equal to the current object.
78 /// <param name="obj">The object to compare with the current object</param>
79 /// <returns>True if the specified object is equal to the current object, otherwise false</returns>
80 [EditorBrowsable(EditorBrowsableState.Never)]
81 public override bool Equals(System.Object obj)
83 if (obj is GestureInfoType)
85 return this.Equals((GestureInfoType)obj);
91 /// Determines whether the specified object is equal to the current object.
93 /// <param name="other">The GestureInfoType to compare with the current GestureInfoType</param>
94 /// <returns>True if equal GestureInfoType, otherwise false</returns>
95 public bool Equals(GestureInfoType other)
97 if ((other == null) || !this.GetType().Equals(other.GetType()))
102 GestureInfoType compared = (GestureInfoType)other;
103 // Return true if the fields match:
104 return (Type == compared.Type &&
105 StartPositionX == compared.StartPositionX &&
106 EndPositionX == compared.EndPositionX &&
107 StartPositionY == compared.StartPositionY &&
108 EndPositionY == compared.EndPositionY &&
109 State == compared.State &&
110 EventTime == compared.EventTime);
116 /// <param name="arg1">The first value</param>
117 /// <param name="arg2">The second value</param>
118 /// <returns>True if GestureInfoTypes are equal</returns>
119 [EditorBrowsable(EditorBrowsableState.Never)]
120 public static bool operator ==(GestureInfoType arg1, GestureInfoType arg2)
122 return arg1.Equals(arg2);
128 /// <param name="arg1">The first value</param>
129 /// <param name="arg2">The second value</param>
130 /// <returns>True if GestureInfoTypes are not equal</returns>
131 [EditorBrowsable(EditorBrowsableState.Never)]
132 public static bool operator !=(GestureInfoType arg1, GestureInfoType arg2)
134 return !arg1.Equals(arg2);
138 /// Gets the hash code of this baseHandle.
140 /// <returns>The Hash Code</returns>
141 [EditorBrowsable(EditorBrowsableState.Never)]
142 public override int GetHashCode()
144 return Tuple.Create((int)Type, StartPositionX, EndPositionX, StartPositionY, EndPositionY, (int)State, EventTime).GetHashCode();
149 /// Accessibility gesture information event arguments.
151 [EditorBrowsable(EditorBrowsableState.Never)]
152 public class GestureInfoEventArgs : EventArgs
155 /// The gesture information type.
157 [EditorBrowsable(EditorBrowsableState.Never)]
158 public GestureInfoType GestureInfo { get; internal set; }
161 /// True if the event is consumed.
163 [EditorBrowsable(EditorBrowsableState.Never)]
164 public int Consumed { get; set; }
168 /// Accessibility description event arguments.
170 [EditorBrowsable(EditorBrowsableState.Never)]
171 public class GetDescriptionEventArgs : EventArgs
174 /// Accessibility description.
176 public string Description { get; set; }
180 /// Accessibility name event arguments.
182 [EditorBrowsable(EditorBrowsableState.Never)]
183 public class GetNameEventArgs : EventArgs
186 /// Accessibility name.
188 public string Name { get; set; }
192 /// View is the base class for all views.
194 /// <since_tizen> 3 </since_tizen>
195 public partial class View
197 internal class ControlHandle : SafeHandle
199 public ControlHandle() : base(IntPtr.Zero, true) { }
201 public ControlHandle(IntPtr ptr) : base(ptr, true) { }
203 public override bool IsInvalid
207 return this.handle == IntPtr.Zero;
211 protected override bool ReleaseHandle()
213 Interop.View.DeleteControlHandleView(handle);
214 this.SetHandle(IntPtr.Zero);
220 /// Gets the control handle.
222 /// <returns>The control handle of the view</returns>
223 [EditorBrowsable(EditorBrowsableState.Never)]
224 ControlHandle GetControl()
226 var result = new ControlHandle(Interop.View.DownCast(SwigCPtr));
227 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
231 ///////////////////////////////////////////////////////////////////
232 // ***************** AccessiblityDoGestureSignal ****************//
233 ///////////////////////////////////////////////////////////////////
235 private delegate void GestureInfoHandlerType(IntPtr data);
236 private GestureInfoHandlerType gestureInfoCallback;
237 private EventHandler<GestureInfoEventArgs> gestureInfoHandler;
238 private AccessibilityDoGestureSignal gestureInfoSignal;
240 private void OnAccessibilityGestureInfoEvent(IntPtr data)
242 if (data == IntPtr.Zero)
247 if (Marshal.SizeOf<GestureInfoType>() != AccessibilityDoGestureSignal.GetSizeOfGestureInfo())
249 throw new global::System.ApplicationException("ABI mismatch SizeOf(C# GestureInfo) != SizeOf(c++ GestureInfo)");
252 var arg = new GestureInfoEventArgs()
254 Consumed = AccessibilityDoGestureSignal.GetResult(data),
255 GestureInfo = (GestureInfoType)Marshal.PtrToStructure(data, typeof(GestureInfoType)),
257 gestureInfoHandler?.Invoke(this, arg);
259 AccessibilityDoGestureSignal.SetResult(data, Convert.ToInt32(arg.Consumed));
263 /// AccessibilityGestureInfo is received.
265 [EditorBrowsable(EditorBrowsableState.Never)]
266 public event EventHandler<GestureInfoEventArgs> AccessibilityGestureInfoReceived
268 // This uses DoGestureInfo signal from C++ API.
271 if (gestureInfoHandler == null)
273 gestureInfoCallback = OnAccessibilityGestureInfoEvent;
274 gestureInfoSignal = this.AccessibilityGestureInfoSignal();
275 gestureInfoSignal?.Connect(gestureInfoCallback);
277 gestureInfoHandler += value;
281 gestureInfoHandler -= value;
282 if (gestureInfoHandler == null && gestureInfoCallback != null)
284 gestureInfoSignal?.Disconnect(gestureInfoCallback);
285 gestureInfoSignal?.Dispose();
286 gestureInfoSignal = null;
291 internal AccessibilityDoGestureSignal AccessibilityGestureInfoSignal()
293 var handle = GetControl();
294 AccessibilityDoGestureSignal ret = new AccessibilityDoGestureSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityDoGestureSignal(handle), false);
295 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
299 ///////////////////////////////////////////////////////////////////
300 // ************** AccessiblityGetDescriptionSignal ************* //
301 ///////////////////////////////////////////////////////////////////
303 private delegate void GetDescriptionHandlerType(IntPtr data);
304 private GetDescriptionHandlerType getDescriptionCallback;
305 private EventHandler<GetDescriptionEventArgs> getDescriptionHandler;
306 private StringToVoidSignal getDescriptionSignal;
308 private void OnGetAccessibilityDescriptionEvent(IntPtr data)
310 if (data == IntPtr.Zero)
315 var arg = new GetDescriptionEventArgs()
317 Description = StringToVoidSignal.GetResult(data)
319 getDescriptionHandler?.Invoke(this, arg);
321 StringToVoidSignal.SetResult(data, arg.Description);
325 /// AccessibilityDescription is requested.
327 [EditorBrowsable(EditorBrowsableState.Never)]
328 public event EventHandler<GetDescriptionEventArgs> AccessibilityDescriptionRequested
330 // This uses GetDescription signal from C++ API.
333 if (getDescriptionHandler == null)
335 getDescriptionCallback = OnGetAccessibilityDescriptionEvent;
336 getDescriptionSignal = this.GetAccessibilityDescriptionSignal();
337 getDescriptionSignal?.Connect(getDescriptionCallback);
339 getDescriptionHandler += value;
343 getDescriptionHandler -= value;
344 if (getDescriptionHandler == null && getDescriptionCallback != null)
346 getDescriptionSignal?.Disconnect(getDescriptionCallback);
347 getDescriptionSignal?.Dispose();
348 getDescriptionSignal = null;
353 internal StringToVoidSignal GetAccessibilityDescriptionSignal()
355 var handle = GetControl();
356 StringToVoidSignal ret = new StringToVoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityGetDescriptionSignal(handle), false);
357 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
361 ///////////////////////////////////////////////////////////////////
362 // ***************** AccessiblityGetNameSignal ***************** //
363 ///////////////////////////////////////////////////////////////////
365 private delegate void GetNameHandlerType(IntPtr data);
366 private GetNameHandlerType getNameCallback;
367 private EventHandler<GetNameEventArgs> getNameHandler;
368 private StringToVoidSignal getNameSignal;
370 private void OnGetAccessibilityNameEvent(IntPtr data)
372 if (data == IntPtr.Zero)
377 var arg = new GetNameEventArgs()
379 Name = StringToVoidSignal.GetResult(data)
381 getNameHandler?.Invoke(this, arg);
383 StringToVoidSignal.SetResult(data, arg.Name);
387 /// AccessibilityName is requested.
389 [EditorBrowsable(EditorBrowsableState.Never)]
390 public event EventHandler<GetNameEventArgs> AccessibilityNameRequested
392 // This uses GetName signal from C++ API.
395 if (getNameHandler == null)
397 getNameCallback = OnGetAccessibilityNameEvent;
398 getNameSignal = this.GetAccessibilityNameSignal();
399 getNameSignal?.Connect(getNameCallback);
401 getNameHandler += value;
405 getNameHandler -= value;
406 if (getNameHandler == null && getNameCallback != null)
408 getNameSignal?.Disconnect(getNameCallback);
409 getNameSignal?.Dispose();
410 getNameSignal = null;
415 internal StringToVoidSignal GetAccessibilityNameSignal()
417 var handle = GetControl();
418 StringToVoidSignal ret = new StringToVoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityGetNameSignal(handle), false);
419 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
423 ///////////////////////////////////////////////////////////////////
424 // **************** AccessibilityActivatedSignal **************** //
425 ///////////////////////////////////////////////////////////////////
427 private delegate void VoidHandlerType();
428 private VoidHandlerType activateCallback;
429 private EventHandler activateHandler;
430 internal VoidSignal ActivateSignal;
432 private void OnAccessibilityActivatedEvent()
434 activateHandler?.Invoke(this, null);
438 /// Accessibility is activated.
440 [EditorBrowsable(EditorBrowsableState.Never)]
441 public event EventHandler AccessibilityActivated
445 if (activateHandler == null)
447 activateCallback = OnAccessibilityActivatedEvent;
448 ActivateSignal = this.AccessibilityActivatedSignal();
449 ActivateSignal?.Connect(activateCallback);
451 activateHandler += value;
455 activateHandler -= value;
456 if (activateHandler == null && activateCallback != null)
458 ActivateSignal?.Disconnect(activateCallback);
459 ActivateSignal?.Dispose();
460 ActivateSignal = null;
465 internal VoidSignal AccessibilityActivatedSignal()
467 var handle = GetControl();
468 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityActivateSignal(handle), false);
469 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
473 ///////////////////////////////////////////////////////////////////
474 // ************ AccessibilityReadingSkippedSignal ************** //
475 ///////////////////////////////////////////////////////////////////
477 private VoidHandlerType readingSkippedCallback;
478 private EventHandler readingSkippedHandler;
479 internal VoidSignal ReadingSkippedSignal;
481 private void OnAccessibilityReadingSkippedEvent()
483 readingSkippedHandler?.Invoke(this, null);
487 /// AccessibilityReading is skipped.
489 [EditorBrowsable(EditorBrowsableState.Never)]
490 public event EventHandler AccessibilityReadingSkipped
494 if (readingSkippedHandler == null)
496 readingSkippedCallback = OnAccessibilityReadingSkippedEvent;
497 ReadingSkippedSignal = this.AccessibilityReadingSkippedSignal();
498 ReadingSkippedSignal?.Connect(readingSkippedCallback);
500 readingSkippedHandler += value;
504 readingSkippedHandler -= value;
505 if (readingSkippedHandler == null && readingSkippedCallback != null)
507 ReadingSkippedSignal?.Disconnect(readingSkippedCallback);
508 ReadingSkippedSignal?.Dispose();
509 ReadingSkippedSignal = null;
514 internal VoidSignal AccessibilityReadingSkippedSignal()
516 var handle = GetControl();
517 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingSkippedSignal(handle), false);
518 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
522 ///////////////////////////////////////////////////////////////////
523 // ************* AccessibilityReadingPausedSignal ************** //
524 ///////////////////////////////////////////////////////////////////
526 private VoidHandlerType readingPausedCallback;
527 private EventHandler readingPausedHandler;
528 internal VoidSignal ReadingPausedSignal;
530 private void OnAccessibilityReadingPausedEvent()
532 readingPausedHandler?.Invoke(this, null);
536 /// AccessibilityReading is paused.
538 [EditorBrowsable(EditorBrowsableState.Never)]
539 public event EventHandler AccessibilityReadingPaused
543 if (readingPausedHandler == null)
545 readingPausedCallback = OnAccessibilityReadingPausedEvent;
546 ReadingPausedSignal = this.AccessibilityReadingPausedSignal();
547 ReadingPausedSignal?.Connect(readingPausedCallback);
549 readingPausedHandler += value;
553 readingPausedHandler -= value;
554 if (readingPausedHandler == null && readingPausedCallback != null)
556 ReadingPausedSignal?.Disconnect(readingPausedCallback);
557 ReadingPausedSignal?.Dispose();
558 ReadingPausedSignal = null;
563 internal VoidSignal AccessibilityReadingPausedSignal()
565 var handle = GetControl();
566 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingPausedSignal(handle), false);
567 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
571 ///////////////////////////////////////////////////////////////////
572 // ************* AccessibilityReadingResumedSignal ************* //
573 ///////////////////////////////////////////////////////////////////
575 private VoidHandlerType readingResumedCallback;
576 private EventHandler readingResumedHandler;
577 internal VoidSignal ReadingResumedSignal;
579 private void OnAccessibilityReadingResumedEvent()
581 readingResumedHandler?.Invoke(this, null);
585 /// AccessibilityReading is resumed.
587 [EditorBrowsable(EditorBrowsableState.Never)]
588 public event EventHandler AccessibilityReadingResumed
592 if (readingResumedHandler == null)
594 readingResumedCallback = OnAccessibilityReadingResumedEvent;
595 ReadingResumedSignal = this.AccessibilityReadingResumedSignal();
596 ReadingResumedSignal?.Connect(readingResumedCallback);
598 readingResumedHandler += value;
602 readingResumedHandler -= value;
603 if (readingResumedHandler == null && readingResumedCallback != null)
605 ReadingResumedSignal?.Disconnect(readingResumedCallback);
606 ReadingResumedSignal?.Dispose();
607 ReadingResumedSignal = null;
612 internal VoidSignal AccessibilityReadingResumedSignal()
614 var handle = GetControl();
615 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingResumedSignal(handle), false);
616 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
620 ///////////////////////////////////////////////////////////////////
621 // ************ AccessibilityReadingCancelledSignal ************ //
622 ///////////////////////////////////////////////////////////////////
624 private VoidHandlerType readingCancelledCallback;
625 private EventHandler readingCancelledHandler;
626 internal VoidSignal ReadingCancelledSignal;
628 private void OnAccessibilityReadingCancelledEvent()
630 readingCancelledHandler?.Invoke(this, null);
634 /// AccessibilityReading is cancelled.
636 [EditorBrowsable(EditorBrowsableState.Never)]
637 public event EventHandler AccessibilityReadingCancelled
641 if (readingCancelledHandler == null)
643 readingCancelledCallback = OnAccessibilityReadingCancelledEvent;
644 ReadingCancelledSignal = this.AccessibilityReadingCancelledSignal();
645 ReadingCancelledSignal?.Connect(readingCancelledCallback);
647 readingCancelledHandler += value;
651 readingCancelledHandler -= value;
652 if (readingCancelledHandler == null && readingCancelledCallback != null)
654 ReadingCancelledSignal?.Disconnect(readingCancelledCallback);
655 ReadingCancelledSignal?.Dispose();
656 ReadingCancelledSignal = null;
661 internal VoidSignal AccessibilityReadingCancelledSignal()
663 var handle = GetControl();
664 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingCancelledSignal(handle), false);
665 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
669 ///////////////////////////////////////////////////////////////////
670 // ************* AccessibilityReadingStoppedSignal ************* //
671 ///////////////////////////////////////////////////////////////////
673 private VoidHandlerType readingStoppedCallback;
674 private EventHandler readingStoppedHandler;
675 internal VoidSignal ReadingStoppedSignal;
677 private void OnAccessibilityReadingStoppedEvent()
679 readingStoppedHandler?.Invoke(this, null);
683 /// AccessibilityReading is stopped.
685 [EditorBrowsable(EditorBrowsableState.Never)]
686 public event EventHandler AccessibilityReadingStopped
690 if (readingStoppedHandler == null)
692 readingStoppedCallback = OnAccessibilityReadingStoppedEvent;
693 ReadingStoppedSignal = this.AccessibilityReadingStoppedSignal();
694 ReadingStoppedSignal?.Connect(readingStoppedCallback);
696 readingStoppedHandler += value;
700 readingStoppedHandler -= value;
701 if (readingStoppedHandler == null && readingStoppedCallback != null)
703 ReadingStoppedSignal?.Disconnect(readingStoppedCallback);
704 ReadingStoppedSignal?.Dispose();
705 ReadingStoppedSignal = null;
710 internal VoidSignal AccessibilityReadingStoppedSignal()
712 var handle = GetControl();
713 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingStoppedSignal(handle), false);
714 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();