[NUI] Make AnchorClicked event public
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / public / BaseComponents / TextFieldEvent.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
18 using System;
19 using System.ComponentModel;
20 using System.Runtime.InteropServices;
21
22 namespace Tizen.NUI.BaseComponents
23 {
24     /// <summary>
25     /// A control which provides a single line editable text field.
26     /// </summary>
27     /// <since_tizen> 3 </since_tizen>
28     public partial class TextField
29     {
30         private EventHandler<TextChangedEventArgs> textFieldTextChangedEventHandler;
31         private TextChangedCallbackDelegate textFieldTextChangedCallbackDelegate;
32         private EventHandler<MaxLengthReachedEventArgs> textFieldMaxLengthReachedEventHandler;
33         private MaxLengthReachedCallbackDelegate textFieldMaxLengthReachedCallbackDelegate;
34         private EventHandler<AnchorClickedEventArgs> textFieldAnchorClickedEventHandler;
35         private AnchorClickedCallbackDelegate textFieldAnchorClickedCallbackDelegate;
36
37         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
38         private delegate void TextChangedCallbackDelegate(IntPtr textField);
39
40         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
41         private delegate void MaxLengthReachedCallbackDelegate(IntPtr textField);
42
43         [UnmanagedFunctionPointer(CallingConvention.StdCall)]
44         private delegate void AnchorClickedCallbackDelegate(IntPtr textField, IntPtr href, uint hrefLength);
45
46         /// <summary>
47         /// The TextChanged event.
48         /// </summary>
49         /// <since_tizen> 3 </since_tizen>
50         public event EventHandler<TextChangedEventArgs> TextChanged
51         {
52             add
53             {
54                 if (textFieldTextChangedEventHandler == null)
55                 {
56                     textFieldTextChangedCallbackDelegate = (OnTextChanged);
57                     TextChangedSignal().Connect(textFieldTextChangedCallbackDelegate);
58                 }
59                 textFieldTextChangedEventHandler += value;
60             }
61             remove
62             {
63                 textFieldTextChangedEventHandler -= value;
64                 if (textFieldTextChangedEventHandler == null && TextChangedSignal().Empty() == false)
65                 {
66                     TextChangedSignal().Disconnect(textFieldTextChangedCallbackDelegate);
67                 }
68             }
69         }
70
71         /// <summary>
72         /// The MaxLengthReached event.
73         /// </summary>
74         /// <since_tizen> 3 </since_tizen>
75         public event EventHandler<MaxLengthReachedEventArgs> MaxLengthReached
76         {
77             add
78             {
79                 if (textFieldMaxLengthReachedEventHandler == null)
80                 {
81                     textFieldMaxLengthReachedCallbackDelegate = (OnMaxLengthReached);
82                     MaxLengthReachedSignal().Connect(textFieldMaxLengthReachedCallbackDelegate);
83                 }
84                 textFieldMaxLengthReachedEventHandler += value;
85             }
86             remove
87             {
88                 if (textFieldMaxLengthReachedEventHandler == null && MaxLengthReachedSignal().Empty() == false)
89                 {
90                     this.MaxLengthReachedSignal().Disconnect(textFieldMaxLengthReachedCallbackDelegate);
91                 }
92                 textFieldMaxLengthReachedEventHandler -= value;
93             }
94         }
95
96         /// <summary>
97         /// The AnchorClicked signal is emitted when the anchor is clicked.
98         /// </summary>
99         /// <since_tizen> 9 </since_tizen>
100         public event EventHandler<AnchorClickedEventArgs> AnchorClicked
101         {
102             add
103             {
104                 if (textFieldAnchorClickedEventHandler == null)
105                 {
106                     textFieldAnchorClickedCallbackDelegate = (OnAnchorClicked);
107                     AnchorClickedSignal().Connect(textFieldAnchorClickedCallbackDelegate);
108                 }
109                 textFieldAnchorClickedEventHandler += value;
110             }
111             remove
112             {
113                 textFieldAnchorClickedEventHandler -= value;
114                 if (textFieldAnchorClickedEventHandler == null && AnchorClickedSignal().Empty() == false)
115                 {
116                     AnchorClickedSignal().Disconnect(textFieldAnchorClickedCallbackDelegate);
117                 }
118             }
119         }
120
121         internal TextFieldSignal TextChangedSignal()
122         {
123             TextFieldSignal ret = new TextFieldSignal(Interop.TextField.TextChangedSignal(SwigCPtr), false);
124             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
125             return ret;
126         }
127
128         internal TextFieldSignal MaxLengthReachedSignal()
129         {
130             TextFieldSignal ret = new TextFieldSignal(Interop.TextField.MaxLengthReachedSignal(SwigCPtr), false);
131             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
132             return ret;
133         }
134
135         internal TextFieldSignal AnchorClickedSignal()
136         {
137             TextFieldSignal ret = new TextFieldSignal(Interop.TextField.AnchorClickedSignal(SwigCPtr), false);
138             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
139             return ret;
140         }
141
142         private void OnTextChanged(IntPtr textField)
143         {
144             if (textFieldTextChangedEventHandler != null)
145             {
146                 TextChangedEventArgs e = new TextChangedEventArgs();
147
148                 // Populate all members of "e" (TextChangedEventArgs) with real data
149                 e.TextField = Registry.GetManagedBaseHandleFromNativePtr(textField) as TextField;
150                 //here we send all data to user event handlers
151                 textFieldTextChangedEventHandler(this, e);
152             }
153         }
154
155         private void OnMaxLengthReached(IntPtr textField)
156         {
157             if (textFieldMaxLengthReachedEventHandler != null)
158             {
159                 MaxLengthReachedEventArgs e = new MaxLengthReachedEventArgs();
160
161                 // Populate all members of "e" (MaxLengthReachedEventArgs) with real data
162                 e.TextField = Registry.GetManagedBaseHandleFromNativePtr(textField) as TextField;
163                 //here we send all data to user event handlers
164                 textFieldMaxLengthReachedEventHandler(this, e);
165             }
166         }
167
168         private void OnAnchorClicked(IntPtr textField, IntPtr href, uint hrefLength)
169         {
170             // Note: hrefLength is useful for get the length of a const char* (href) in dali-toolkit.
171             // But NUI can get the length of string (href), so hrefLength is not necessary in NUI.
172             AnchorClickedEventArgs e = new AnchorClickedEventArgs();
173
174             // Populate all members of "e" (AnchorClickedEventArgs) with real data
175             e.Href = Marshal.PtrToStringAnsi(href);
176             //here we send all data to user event handlers
177             textFieldAnchorClickedEventHandler?.Invoke(this, e);
178         }
179
180         /// <summary>
181         /// The TextChanged event arguments.
182         /// </summary>
183         /// <since_tizen> 3 </since_tizen>
184         public class TextChangedEventArgs : EventArgs
185         {
186             private TextField textField;
187
188             /// <summary>
189             /// TextField.
190             /// </summary>
191             /// <since_tizen> 3 </since_tizen>
192             public TextField TextField
193             {
194                 get
195                 {
196                     return textField;
197                 }
198                 set
199                 {
200                     textField = value;
201                 }
202             }
203         }
204
205         /// <summary>
206         /// The MaxLengthReached event arguments.
207         /// </summary>
208         /// <since_tizen> 3 </since_tizen>
209         public class MaxLengthReachedEventArgs : EventArgs
210         {
211             private TextField textField;
212
213             /// <summary>
214             /// TextField.
215             /// </summary>
216             /// <since_tizen> 3 </since_tizen>
217             public TextField TextField
218             {
219                 get
220                 {
221                     return textField;
222                 }
223                 set
224                 {
225                     textField = value;
226                 }
227             }
228         }
229     }
230 }