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;
22 namespace Tizen.NUI.BaseComponents
25 /// A control which provides a single line editable text field.
27 /// <since_tizen> 3 </since_tizen>
28 public partial class TextField
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;
37 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
38 private delegate void TextChangedCallbackDelegate(IntPtr textField);
40 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
41 private delegate void MaxLengthReachedCallbackDelegate(IntPtr textField);
43 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
44 private delegate void AnchorClickedCallbackDelegate(IntPtr textField, IntPtr href, uint hrefLength);
47 /// The TextChanged event.
49 /// <since_tizen> 3 </since_tizen>
50 public event EventHandler<TextChangedEventArgs> TextChanged
54 if (textFieldTextChangedEventHandler == null)
56 textFieldTextChangedCallbackDelegate = (OnTextChanged);
57 TextChangedSignal().Connect(textFieldTextChangedCallbackDelegate);
59 textFieldTextChangedEventHandler += value;
63 textFieldTextChangedEventHandler -= value;
64 if (textFieldTextChangedEventHandler == null && TextChangedSignal().Empty() == false)
66 TextChangedSignal().Disconnect(textFieldTextChangedCallbackDelegate);
72 /// The MaxLengthReached event.
74 /// <since_tizen> 3 </since_tizen>
75 public event EventHandler<MaxLengthReachedEventArgs> MaxLengthReached
79 if (textFieldMaxLengthReachedEventHandler == null)
81 textFieldMaxLengthReachedCallbackDelegate = (OnMaxLengthReached);
82 MaxLengthReachedSignal().Connect(textFieldMaxLengthReachedCallbackDelegate);
84 textFieldMaxLengthReachedEventHandler += value;
88 if (textFieldMaxLengthReachedEventHandler == null && MaxLengthReachedSignal().Empty() == false)
90 this.MaxLengthReachedSignal().Disconnect(textFieldMaxLengthReachedCallbackDelegate);
92 textFieldMaxLengthReachedEventHandler -= value;
97 /// The AnchorClicked signal is emitted when the anchor is clicked.
99 /// This will be public opened in tizen_6.5 after ACR done. Before ACR, need to be hidden as inhouse API.
100 [EditorBrowsable(EditorBrowsableState.Never)]
101 public event EventHandler<AnchorClickedEventArgs> AnchorClicked
105 if (textFieldAnchorClickedEventHandler == null)
107 textFieldAnchorClickedCallbackDelegate = (OnAnchorClicked);
108 AnchorClickedSignal().Connect(textFieldAnchorClickedCallbackDelegate);
110 textFieldAnchorClickedEventHandler += value;
114 textFieldAnchorClickedEventHandler -= value;
115 if (textFieldAnchorClickedEventHandler == null && AnchorClickedSignal().Empty() == false)
117 AnchorClickedSignal().Disconnect(textFieldAnchorClickedCallbackDelegate);
122 internal TextFieldSignal TextChangedSignal()
124 TextFieldSignal ret = new TextFieldSignal(Interop.TextField.TextChangedSignal(SwigCPtr), false);
125 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
129 internal TextFieldSignal MaxLengthReachedSignal()
131 TextFieldSignal ret = new TextFieldSignal(Interop.TextField.MaxLengthReachedSignal(SwigCPtr), false);
132 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
136 internal TextFieldSignal AnchorClickedSignal()
138 TextFieldSignal ret = new TextFieldSignal(Interop.TextField.AnchorClickedSignal(SwigCPtr), false);
139 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
143 private void OnTextChanged(IntPtr textField)
145 if (textFieldTextChangedEventHandler != null)
147 TextChangedEventArgs e = new TextChangedEventArgs();
149 // Populate all members of "e" (TextChangedEventArgs) with real data
150 e.TextField = Registry.GetManagedBaseHandleFromNativePtr(textField) as TextField;
151 //here we send all data to user event handlers
152 textFieldTextChangedEventHandler(this, e);
156 private void OnMaxLengthReached(IntPtr textField)
158 if (textFieldMaxLengthReachedEventHandler != null)
160 MaxLengthReachedEventArgs e = new MaxLengthReachedEventArgs();
162 // Populate all members of "e" (MaxLengthReachedEventArgs) with real data
163 e.TextField = Registry.GetManagedBaseHandleFromNativePtr(textField) as TextField;
164 //here we send all data to user event handlers
165 textFieldMaxLengthReachedEventHandler(this, e);
169 private void OnAnchorClicked(IntPtr textField, IntPtr href, uint hrefLength)
171 // Note: hrefLength is useful for get the length of a const char* (href) in dali-toolkit.
172 // But NUI can get the length of string (href), so hrefLength is not necessary in NUI.
173 AnchorClickedEventArgs e = new AnchorClickedEventArgs();
175 // Populate all members of "e" (AnchorClickedEventArgs) with real data
176 e.Href = Marshal.PtrToStringAnsi(href);
177 //here we send all data to user event handlers
178 textFieldAnchorClickedEventHandler?.Invoke(this, e);
182 /// The TextChanged event arguments.
184 /// <since_tizen> 3 </since_tizen>
185 public class TextChangedEventArgs : EventArgs
187 private TextField textField;
192 /// <since_tizen> 3 </since_tizen>
193 public TextField TextField
207 /// The MaxLengthReached event arguments.
209 /// <since_tizen> 3 </since_tizen>
210 public class MaxLengthReachedEventArgs : EventArgs
212 private TextField textField;
217 /// <since_tizen> 3 </since_tizen>
218 public TextField TextField