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 multi-line editable text editor.
27 /// <since_tizen> 3 </since_tizen>
28 public partial class TextEditor
30 private EventHandler<TextChangedEventArgs> textEditorTextChangedEventHandler;
31 private TextChangedCallbackDelegate textEditorTextChangedCallbackDelegate;
33 private EventHandler<ScrollStateChangedEventArgs> textEditorScrollStateChangedEventHandler;
34 private ScrollStateChangedCallbackDelegate textEditorScrollStateChangedCallbackDelegate;
36 private EventHandler<MaxLengthReachedEventArgs> textEditorMaxLengthReachedEventHandler;
37 private MaxLengthReachedCallbackDelegate textEditorMaxLengthReachedCallbackDelegate;
39 private EventHandler<AnchorClickedEventArgs> textEditorAnchorClickedEventHandler;
40 private AnchorClickedCallbackDelegate textEditorAnchorClickedCallbackDelegate;
42 private EventHandler<InputFilteredEventArgs> textEditorInputFilteredEventHandler;
43 private InputFilteredCallbackDelegate textEditorInputFilteredCallbackDelegate;
45 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
46 private delegate void TextChangedCallbackDelegate(IntPtr textEditor);
48 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
49 private delegate void ScrollStateChangedCallbackDelegate(IntPtr textEditor, ScrollState state);
51 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
52 private delegate void MaxLengthReachedCallbackDelegate(IntPtr textEditor);
54 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
55 private delegate void AnchorClickedCallbackDelegate(IntPtr textEditor, IntPtr href, uint hrefLength);
57 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
58 private delegate void InputFilteredCallbackDelegate(IntPtr textEditor, InputFilterType type);
61 /// An event for the TextChanged signal which can be used to subscribe or unsubscribe the event handler
62 /// provided by the user. The TextChanged signal is emitted when the text changes.<br />
64 /// <since_tizen> 3 </since_tizen>
65 public event EventHandler<TextChangedEventArgs> TextChanged
69 if (textEditorTextChangedEventHandler == null)
71 textEditorTextChangedCallbackDelegate = (OnTextChanged);
72 TextChangedSignal().Connect(textEditorTextChangedCallbackDelegate);
74 textEditorTextChangedEventHandler += value;
78 textEditorTextChangedEventHandler -= value;
79 if (textEditorTextChangedEventHandler == null && TextChangedSignal().Empty() == false)
81 TextChangedSignal().Disconnect(textEditorTextChangedCallbackDelegate);
87 /// Event for the ScrollStateChanged signal which can be used to subscribe or unsubscribe the event handler
88 /// provided by the user. The ScrollStateChanged signal is emitted when the scroll state changes.<br />
90 /// <since_tizen> 3 </since_tizen>
91 public event EventHandler<ScrollStateChangedEventArgs> ScrollStateChanged
95 if (textEditorScrollStateChangedEventHandler == null)
97 textEditorScrollStateChangedCallbackDelegate = OnScrollStateChanged;
98 ScrollStateChangedSignal(this).Connect(textEditorScrollStateChangedCallbackDelegate);
100 textEditorScrollStateChangedEventHandler += value;
104 textEditorScrollStateChangedEventHandler -= value;
105 if (textEditorScrollStateChangedEventHandler == null && ScrollStateChangedSignal(this).Empty() == false)
107 ScrollStateChangedSignal(this).Disconnect(textEditorScrollStateChangedCallbackDelegate);
113 /// The MaxLengthReached event.
115 /// This will be public opened in tizen_6.5 after ACR done. Before ACR, need to be hidden as inhouse API.
116 [EditorBrowsable(EditorBrowsableState.Never)]
117 public event EventHandler<MaxLengthReachedEventArgs> MaxLengthReached
121 if (textEditorMaxLengthReachedEventHandler == null)
123 textEditorMaxLengthReachedCallbackDelegate = (OnMaxLengthReached);
124 MaxLengthReachedSignal().Connect(textEditorMaxLengthReachedCallbackDelegate);
126 textEditorMaxLengthReachedEventHandler += value;
130 if (textEditorMaxLengthReachedEventHandler == null && MaxLengthReachedSignal().Empty() == false)
132 this.MaxLengthReachedSignal().Disconnect(textEditorMaxLengthReachedCallbackDelegate);
134 textEditorMaxLengthReachedEventHandler -= value;
139 /// The AnchorClicked signal is emitted when the anchor is clicked.
141 /// <since_tizen> 9 </since_tizen>
142 public event EventHandler<AnchorClickedEventArgs> AnchorClicked
146 if (textEditorAnchorClickedEventHandler == null)
148 textEditorAnchorClickedCallbackDelegate = (OnAnchorClicked);
149 AnchorClickedSignal().Connect(textEditorAnchorClickedCallbackDelegate);
151 textEditorAnchorClickedEventHandler += value;
155 textEditorAnchorClickedEventHandler -= value;
156 if (textEditorAnchorClickedEventHandler == null && AnchorClickedSignal().Empty() == false)
158 AnchorClickedSignal().Disconnect(textEditorAnchorClickedCallbackDelegate);
164 /// The InputFiltered signal is emitted when the input is filtered by InputFilter. <br />
167 /// See <see cref="InputFilterType"/> and <see cref="InputFilteredEventArgs"/> for a detailed description. <br />
170 /// The following example demonstrates how to use the InputFiltered event.
172 /// editor.InputFiltered += (s, e) =>
174 /// if (e.Type == InputFilterType.Accept)
176 /// // If input is filtered by InputFilter of Accept type.
178 /// else if (e.Type == InputFilterType.Reject)
180 /// // If input is filtered by InputFilter of Reject type.
185 [EditorBrowsable(EditorBrowsableState.Never)]
186 public event EventHandler<InputFilteredEventArgs> InputFiltered
190 if (textEditorInputFilteredEventHandler == null)
192 textEditorInputFilteredCallbackDelegate = (OnInputFiltered);
193 InputFilteredSignal().Connect(textEditorInputFilteredCallbackDelegate);
195 textEditorInputFilteredEventHandler += value;
199 textEditorInputFilteredEventHandler -= value;
200 if (textEditorInputFilteredEventHandler == null && InputFilteredSignal().Empty() == false)
202 InputFilteredSignal().Disconnect(textEditorInputFilteredCallbackDelegate);
207 internal TextEditorSignal TextChangedSignal()
209 TextEditorSignal ret = new TextEditorSignal(Interop.TextEditor.TextChangedSignal(SwigCPtr), false);
210 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
214 internal ScrollStateChangedSignal ScrollStateChangedSignal(TextEditor textEditor)
216 ScrollStateChangedSignal ret = new ScrollStateChangedSignal(Interop.TextEditor.ScrollStateChangedSignal(TextEditor.getCPtr(textEditor)), false);
217 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
221 internal TextEditorSignal MaxLengthReachedSignal()
223 TextEditorSignal ret = new TextEditorSignal(Interop.TextEditor.MaxLengthReachedSignal(SwigCPtr), false);
224 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
228 internal TextEditorSignal AnchorClickedSignal()
230 TextEditorSignal ret = new TextEditorSignal(Interop.TextEditor.AnchorClickedSignal(SwigCPtr), false);
231 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
235 internal TextEditorSignal InputFilteredSignal()
237 TextEditorSignal ret = new TextEditorSignal(Interop.TextEditor.InputFilteredSignal(SwigCPtr), false);
238 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
242 private void OnTextChanged(IntPtr textEditor)
244 if (textEditorTextChangedEventHandler != null)
246 TextChangedEventArgs e = new TextChangedEventArgs();
248 // Populate all members of "e" (TextChangedEventArgs) with real data
249 e.TextEditor = Registry.GetManagedBaseHandleFromNativePtr(textEditor) as TextEditor;
250 //here we send all data to user event handlers
251 textEditorTextChangedEventHandler(this, e);
255 private void OnScrollStateChanged(IntPtr textEditor, ScrollState state)
257 if (textEditorScrollStateChangedEventHandler != null)
259 ScrollStateChangedEventArgs e = new ScrollStateChangedEventArgs();
261 if (textEditor != global::System.IntPtr.Zero)
263 // Populate all members of "e" (ScrollStateChangedEventArgs) with real data
264 e.TextEditor = Registry.GetManagedBaseHandleFromNativePtr(textEditor) as TextEditor;
265 e.ScrollState = state;
267 //here we send all data to user event handlers
268 textEditorScrollStateChangedEventHandler(this, e);
272 private void OnMaxLengthReached(IntPtr textEditor)
274 if (textEditorMaxLengthReachedEventHandler != null)
276 MaxLengthReachedEventArgs e = new MaxLengthReachedEventArgs();
278 // Populate all members of "e" (MaxLengthReachedEventArgs) with real data
279 e.TextEditor = Registry.GetManagedBaseHandleFromNativePtr(textEditor) as TextEditor;
280 //here we send all data to user event handlers
281 textEditorMaxLengthReachedEventHandler(this, e);
285 private void OnAnchorClicked(IntPtr textEditor, IntPtr href, uint hrefLength)
287 // Note: hrefLength is useful for get the length of a const char* (href) in dali-toolkit.
288 // But NUI can get the length of string (href), so hrefLength is not necessary in NUI.
289 AnchorClickedEventArgs e = new AnchorClickedEventArgs();
291 // Populate all members of "e" (AnchorClickedEventArgs) with real data
292 e.Href = Marshal.PtrToStringAnsi(href);
293 //here we send all data to user event handlers
294 textEditorAnchorClickedEventHandler?.Invoke(this, e);
297 private void OnInputFiltered(IntPtr textEditor, InputFilterType type)
299 InputFilteredEventArgs e = new InputFilteredEventArgs();
301 // Populate all members of "e" (InputFilteredEventArgs) with real data
303 //here we send all data to user event handlers
304 textEditorInputFilteredEventHandler?.Invoke(this, e);
308 /// Event arguments that passed via the TextChanged signal.
310 /// <since_tizen> 3 </since_tizen>
311 public class TextChangedEventArgs : EventArgs
313 private TextEditor textEditor;
316 /// TextEditor - is the texteditor control which has the text contents changed.
318 /// <since_tizen> 3 </since_tizen>
319 public TextEditor TextEditor
333 /// Event arguments that passed via the ScrollStateChanged signal.
335 /// <since_tizen> 3 </since_tizen>
336 public class ScrollStateChangedEventArgs : EventArgs
338 private TextEditor textEditor;
339 private ScrollState scrollState;
342 /// TextEditor - is the texteditor control which has the scroll state changed.
344 /// <since_tizen> 3 </since_tizen>
345 public TextEditor TextEditor
358 /// ScrollState - is the texteditor control scroll state.
360 /// <since_tizen> 3 </since_tizen>
361 public ScrollState ScrollState
375 /// The MaxLengthReached event arguments.
377 /// This will be public opened in tizen_6.5 after ACR done. Before ACR, need to be hidden as inhouse API.
378 [EditorBrowsable(EditorBrowsableState.Never)]
379 public class MaxLengthReachedEventArgs : EventArgs
381 private TextEditor textEditor;
386 /// This will be public opened in tizen_6.5 after ACR done. Before ACR, need to be hidden as inhouse API.
387 [EditorBrowsable(EditorBrowsableState.Never)]
388 public TextEditor TextEditor