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 (!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 bool 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, 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 // AccessibilityValueTextRequested
425 [EditorBrowsable(EditorBrowsableState.Never)]
426 public class AccessibilityValueTextRequestedEventArgs : EventArgs
428 [EditorBrowsable(EditorBrowsableState.Never)]
429 public string Text { get; set; }
432 [EditorBrowsable(EditorBrowsableState.Never)]
433 public event EventHandler<AccessibilityValueTextRequestedEventArgs> AccessibilityValueTextRequested;
435 ///////////////////////////////////////////////////////////////////
436 // **************** AccessibilityActivatedSignal **************** //
437 ///////////////////////////////////////////////////////////////////
439 private delegate void VoidHandlerType();
440 private VoidHandlerType activateCallback;
441 private EventHandler activateHandler;
442 internal VoidSignal ActivateSignal;
444 private void OnAccessibilityActivatedEvent()
446 activateHandler?.Invoke(this, null);
450 /// Accessibility is activated.
452 [EditorBrowsable(EditorBrowsableState.Never)]
453 public event EventHandler AccessibilityActivated
457 if (activateHandler == null)
459 activateCallback = OnAccessibilityActivatedEvent;
460 ActivateSignal = this.AccessibilityActivatedSignal();
461 ActivateSignal?.Connect(activateCallback);
463 activateHandler += value;
467 activateHandler -= value;
468 if (activateHandler == null && activateCallback != null)
470 ActivateSignal?.Disconnect(activateCallback);
471 ActivateSignal?.Dispose();
472 ActivateSignal = null;
477 internal VoidSignal AccessibilityActivatedSignal()
479 var handle = GetControl();
480 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityActivateSignal(handle), false);
481 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
485 ///////////////////////////////////////////////////////////////////
486 // ************ AccessibilityReadingSkippedSignal ************** //
487 ///////////////////////////////////////////////////////////////////
489 private VoidHandlerType readingSkippedCallback;
490 private EventHandler readingSkippedHandler;
491 internal VoidSignal ReadingSkippedSignal;
493 private void OnAccessibilityReadingSkippedEvent()
495 readingSkippedHandler?.Invoke(this, null);
499 /// AccessibilityReading is skipped.
501 [EditorBrowsable(EditorBrowsableState.Never)]
502 public event EventHandler AccessibilityReadingSkipped
506 if (readingSkippedHandler == null)
508 readingSkippedCallback = OnAccessibilityReadingSkippedEvent;
509 ReadingSkippedSignal = this.AccessibilityReadingSkippedSignal();
510 ReadingSkippedSignal?.Connect(readingSkippedCallback);
512 readingSkippedHandler += value;
516 readingSkippedHandler -= value;
517 if (readingSkippedHandler == null && readingSkippedCallback != null)
519 ReadingSkippedSignal?.Disconnect(readingSkippedCallback);
520 ReadingSkippedSignal?.Dispose();
521 ReadingSkippedSignal = null;
526 internal VoidSignal AccessibilityReadingSkippedSignal()
528 var handle = GetControl();
529 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingSkippedSignal(handle), false);
530 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
534 ///////////////////////////////////////////////////////////////////
535 // ************* AccessibilityReadingPausedSignal ************** //
536 ///////////////////////////////////////////////////////////////////
538 private VoidHandlerType readingPausedCallback;
539 private EventHandler readingPausedHandler;
540 internal VoidSignal ReadingPausedSignal;
542 private void OnAccessibilityReadingPausedEvent()
544 readingPausedHandler?.Invoke(this, null);
548 /// AccessibilityReading is paused.
550 [EditorBrowsable(EditorBrowsableState.Never)]
551 public event EventHandler AccessibilityReadingPaused
555 if (readingPausedHandler == null)
557 readingPausedCallback = OnAccessibilityReadingPausedEvent;
558 ReadingPausedSignal = this.AccessibilityReadingPausedSignal();
559 ReadingPausedSignal?.Connect(readingPausedCallback);
561 readingPausedHandler += value;
565 readingPausedHandler -= value;
566 if (readingPausedHandler == null && readingPausedCallback != null)
568 ReadingPausedSignal?.Disconnect(readingPausedCallback);
569 ReadingPausedSignal?.Dispose();
570 ReadingPausedSignal = null;
575 internal VoidSignal AccessibilityReadingPausedSignal()
577 var handle = GetControl();
578 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingPausedSignal(handle), false);
579 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
583 ///////////////////////////////////////////////////////////////////
584 // ************* AccessibilityReadingResumedSignal ************* //
585 ///////////////////////////////////////////////////////////////////
587 private VoidHandlerType readingResumedCallback;
588 private EventHandler readingResumedHandler;
589 internal VoidSignal ReadingResumedSignal;
591 private void OnAccessibilityReadingResumedEvent()
593 readingResumedHandler?.Invoke(this, null);
597 /// AccessibilityReading is resumed.
599 [EditorBrowsable(EditorBrowsableState.Never)]
600 public event EventHandler AccessibilityReadingResumed
604 if (readingResumedHandler == null)
606 readingResumedCallback = OnAccessibilityReadingResumedEvent;
607 ReadingResumedSignal = this.AccessibilityReadingResumedSignal();
608 ReadingResumedSignal?.Connect(readingResumedCallback);
610 readingResumedHandler += value;
614 readingResumedHandler -= value;
615 if (readingResumedHandler == null && readingResumedCallback != null)
617 ReadingResumedSignal?.Disconnect(readingResumedCallback);
618 ReadingResumedSignal?.Dispose();
619 ReadingResumedSignal = null;
624 internal VoidSignal AccessibilityReadingResumedSignal()
626 var handle = GetControl();
627 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingResumedSignal(handle), false);
628 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
632 ///////////////////////////////////////////////////////////////////
633 // ************ AccessibilityReadingCancelledSignal ************ //
634 ///////////////////////////////////////////////////////////////////
636 private VoidHandlerType readingCancelledCallback;
637 private EventHandler readingCancelledHandler;
638 internal VoidSignal ReadingCancelledSignal;
640 private void OnAccessibilityReadingCancelledEvent()
642 readingCancelledHandler?.Invoke(this, null);
646 /// AccessibilityReading is cancelled.
648 [EditorBrowsable(EditorBrowsableState.Never)]
649 public event EventHandler AccessibilityReadingCancelled
653 if (readingCancelledHandler == null)
655 readingCancelledCallback = OnAccessibilityReadingCancelledEvent;
656 ReadingCancelledSignal = this.AccessibilityReadingCancelledSignal();
657 ReadingCancelledSignal?.Connect(readingCancelledCallback);
659 readingCancelledHandler += value;
663 readingCancelledHandler -= value;
664 if (readingCancelledHandler == null && readingCancelledCallback != null)
666 ReadingCancelledSignal?.Disconnect(readingCancelledCallback);
667 ReadingCancelledSignal?.Dispose();
668 ReadingCancelledSignal = null;
673 internal VoidSignal AccessibilityReadingCancelledSignal()
675 var handle = GetControl();
676 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingCancelledSignal(handle), false);
677 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
681 ///////////////////////////////////////////////////////////////////
682 // ************* AccessibilityReadingStoppedSignal ************* //
683 ///////////////////////////////////////////////////////////////////
685 private VoidHandlerType readingStoppedCallback;
686 private EventHandler readingStoppedHandler;
687 internal VoidSignal ReadingStoppedSignal;
689 private void OnAccessibilityReadingStoppedEvent()
691 readingStoppedHandler?.Invoke(this, null);
695 /// AccessibilityReading is stopped.
697 [EditorBrowsable(EditorBrowsableState.Never)]
698 public event EventHandler AccessibilityReadingStopped
702 if (readingStoppedHandler == null)
704 readingStoppedCallback = OnAccessibilityReadingStoppedEvent;
705 ReadingStoppedSignal = this.AccessibilityReadingStoppedSignal();
706 ReadingStoppedSignal?.Connect(readingStoppedCallback);
708 readingStoppedHandler += value;
712 readingStoppedHandler -= value;
713 if (readingStoppedHandler == null && readingStoppedCallback != null)
715 ReadingStoppedSignal?.Disconnect(readingStoppedCallback);
716 ReadingStoppedSignal?.Dispose();
717 ReadingStoppedSignal = null;
722 internal VoidSignal AccessibilityReadingStoppedSignal()
724 var handle = GetControl();
725 VoidSignal ret = new VoidSignal(Interop.ControlDevel.DaliToolkitDevelControlAccessibilityReadingStoppedSignal(handle), false);
726 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();