[NUI] Change SelectionChangedEventArgs to TextSelectionChangedEventArgs (#3451)
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / BaseComponents / TextEditorEvent.cs
index 3698917..b97c62c 100755 (executable)
@@ -42,6 +42,9 @@ namespace Tizen.NUI.BaseComponents
         private EventHandler<AnchorClickedEventArgs> textEditorAnchorClickedEventHandler;
         private AnchorClickedCallbackDelegate textEditorAnchorClickedCallbackDelegate;
 
+        private EventHandler<TextSelectionChangedEventArgs> textEditorSelectionChangedEventHandler;
+        private SelectionChangedCallbackDelegate textEditorSelectionChangedCallbackDelegate;
+
         private EventHandler<InputFilteredEventArgs> textEditorInputFilteredEventHandler;
         private InputFilteredCallbackDelegate textEditorInputFilteredCallbackDelegate;
 
@@ -61,6 +64,9 @@ namespace Tizen.NUI.BaseComponents
         private delegate void AnchorClickedCallbackDelegate(IntPtr textEditor, IntPtr href, uint hrefLength);
 
         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
+        private delegate void SelectionChangedCallbackDelegate(IntPtr textEditor, uint oldStart, uint oldEnd);
+
+        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
         private delegate void InputFilteredCallbackDelegate(IntPtr textEditor, InputFilterType type);
 
         /// <summary>
@@ -193,6 +199,32 @@ namespace Tizen.NUI.BaseComponents
         }
 
         /// <summary>
+        /// The SelectionChanged event.
+        /// </summary>
+        /// This will be public opened after ACR done. Before ACR, need to be hidden as inhouse API.
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public event EventHandler<TextSelectionChangedEventArgs> SelectionChanged
+        {
+            add
+            {
+                if (textEditorSelectionChangedEventHandler == null)
+                {
+                    textEditorSelectionChangedCallbackDelegate = (OnSelectionChanged);
+                    SelectionChangedSignal().Connect(textEditorSelectionChangedCallbackDelegate);
+                }
+                textEditorSelectionChangedEventHandler += value;
+            }
+            remove
+            {
+                if (textEditorSelectionChangedEventHandler == null && SelectionChangedSignal().Empty() == false)
+                {
+                    this.SelectionChangedSignal().Disconnect(textEditorSelectionChangedCallbackDelegate);
+                }
+                textEditorSelectionChangedEventHandler -= value;
+            }
+        }
+
+        /// <summary>
         /// The InputFiltered signal is emitted when the input is filtered by InputFilter. <br />
         /// </summary>
         /// <remarks>
@@ -271,6 +303,13 @@ namespace Tizen.NUI.BaseComponents
             return ret;
         }
 
+        internal TextEditorSignal SelectionChangedSignal()
+        {
+            TextEditorSignal ret = new TextEditorSignal(Interop.TextEditor.SelectionChangedSignal(SwigCPtr), false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
         internal TextEditorSignal InputFilteredSignal()
         {
             TextEditorSignal ret = new TextEditorSignal(Interop.TextEditor.InputFilteredSignal(SwigCPtr), false);
@@ -347,6 +386,21 @@ namespace Tizen.NUI.BaseComponents
             textEditorAnchorClickedEventHandler?.Invoke(this, e);
         }
 
+        private void OnSelectionChanged(IntPtr textEditor, uint oldStart, uint oldEnd)
+        {
+            if (textEditorSelectionChangedEventHandler != null)
+            {
+                TextSelectionChangedEventArgs e = new TextSelectionChangedEventArgs();
+
+                // Populate all members of "e" (TextSelectionChangedEventArgs) with real data
+                e.OldSelectionStart = oldStart;
+                e.OldSelectionEnd = oldEnd;
+
+                //here we send all data to user event handlers
+                textEditorSelectionChangedEventHandler?.Invoke(this, e);
+            }
+        }
+
         private void OnInputFiltered(IntPtr textEditor, InputFilterType type)
         {
             InputFilteredEventArgs e = new InputFilteredEventArgs();