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 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
43 private delegate void TextChangedCallbackDelegate(IntPtr textEditor);
45 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
46 private delegate void ScrollStateChangedCallbackDelegate(IntPtr textEditor, ScrollState state);
48 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
49 private delegate void MaxLengthReachedCallbackDelegate(IntPtr textEditor);
51 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
52 private delegate void AnchorClickedCallbackDelegate(IntPtr textEditor, IntPtr href, uint hrefLength);
55 /// An event for the TextChanged signal which can be used to subscribe or unsubscribe the event handler
56 /// provided by the user. The TextChanged signal is emitted when the text changes.<br />
58 /// <since_tizen> 3 </since_tizen>
59 public event EventHandler<TextChangedEventArgs> TextChanged
63 if (textEditorTextChangedEventHandler == null)
65 textEditorTextChangedCallbackDelegate = (OnTextChanged);
66 TextChangedSignal().Connect(textEditorTextChangedCallbackDelegate);
68 textEditorTextChangedEventHandler += value;
72 textEditorTextChangedEventHandler -= value;
73 if (textEditorTextChangedEventHandler == null && TextChangedSignal().Empty() == false)
75 TextChangedSignal().Disconnect(textEditorTextChangedCallbackDelegate);
81 /// Event for the ScrollStateChanged signal which can be used to subscribe or unsubscribe the event handler
82 /// provided by the user. The ScrollStateChanged signal is emitted when the scroll state changes.<br />
84 /// <since_tizen> 3 </since_tizen>
85 public event EventHandler<ScrollStateChangedEventArgs> ScrollStateChanged
89 if (textEditorScrollStateChangedEventHandler == null)
91 textEditorScrollStateChangedCallbackDelegate = OnScrollStateChanged;
92 ScrollStateChangedSignal(this).Connect(textEditorScrollStateChangedCallbackDelegate);
94 textEditorScrollStateChangedEventHandler += value;
98 textEditorScrollStateChangedEventHandler -= value;
99 if (textEditorScrollStateChangedEventHandler == null && ScrollStateChangedSignal(this).Empty() == false)
101 ScrollStateChangedSignal(this).Disconnect(textEditorScrollStateChangedCallbackDelegate);
107 /// The MaxLengthReached event.
109 /// This will be public opened in tizen_6.5 after ACR done. Before ACR, need to be hidden as inhouse API.
110 [EditorBrowsable(EditorBrowsableState.Never)]
111 public event EventHandler<MaxLengthReachedEventArgs> MaxLengthReached
115 if (textEditorMaxLengthReachedEventHandler == null)
117 textEditorMaxLengthReachedCallbackDelegate = (OnMaxLengthReached);
118 MaxLengthReachedSignal().Connect(textEditorMaxLengthReachedCallbackDelegate);
120 textEditorMaxLengthReachedEventHandler += value;
124 if (textEditorMaxLengthReachedEventHandler == null && MaxLengthReachedSignal().Empty() == false)
126 this.MaxLengthReachedSignal().Disconnect(textEditorMaxLengthReachedCallbackDelegate);
128 textEditorMaxLengthReachedEventHandler -= value;
133 /// The AnchorClicked signal is emitted when the anchor is clicked.
135 /// <since_tizen> 9 </since_tizen>
136 public event EventHandler<AnchorClickedEventArgs> AnchorClicked
140 if (textEditorAnchorClickedEventHandler == null)
142 textEditorAnchorClickedCallbackDelegate = (OnAnchorClicked);
143 AnchorClickedSignal().Connect(textEditorAnchorClickedCallbackDelegate);
145 textEditorAnchorClickedEventHandler += value;
149 textEditorAnchorClickedEventHandler -= value;
150 if (textEditorAnchorClickedEventHandler == null && AnchorClickedSignal().Empty() == false)
152 AnchorClickedSignal().Disconnect(textEditorAnchorClickedCallbackDelegate);
157 internal TextEditorSignal TextChangedSignal()
159 TextEditorSignal ret = new TextEditorSignal(Interop.TextEditor.TextChangedSignal(SwigCPtr), false);
160 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
164 internal ScrollStateChangedSignal ScrollStateChangedSignal(TextEditor textEditor)
166 ScrollStateChangedSignal ret = new ScrollStateChangedSignal(Interop.TextEditor.ScrollStateChangedSignal(TextEditor.getCPtr(textEditor)), false);
167 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
171 internal TextEditorSignal MaxLengthReachedSignal()
173 TextEditorSignal ret = new TextEditorSignal(Interop.TextEditor.MaxLengthReachedSignal(SwigCPtr), false);
174 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
178 internal TextEditorSignal AnchorClickedSignal()
180 TextEditorSignal ret = new TextEditorSignal(Interop.TextEditor.AnchorClickedSignal(SwigCPtr), false);
181 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
185 private void OnTextChanged(IntPtr textEditor)
187 if (textEditorTextChangedEventHandler != null)
189 TextChangedEventArgs e = new TextChangedEventArgs();
191 // Populate all members of "e" (TextChangedEventArgs) with real data
192 e.TextEditor = Registry.GetManagedBaseHandleFromNativePtr(textEditor) as TextEditor;
193 //here we send all data to user event handlers
194 textEditorTextChangedEventHandler(this, e);
198 private void OnScrollStateChanged(IntPtr textEditor, ScrollState state)
200 if (textEditorScrollStateChangedEventHandler != null)
202 ScrollStateChangedEventArgs e = new ScrollStateChangedEventArgs();
204 if (textEditor != global::System.IntPtr.Zero)
206 // Populate all members of "e" (ScrollStateChangedEventArgs) with real data
207 e.TextEditor = Registry.GetManagedBaseHandleFromNativePtr(textEditor) as TextEditor;
208 e.ScrollState = state;
210 //here we send all data to user event handlers
211 textEditorScrollStateChangedEventHandler(this, e);
215 private void OnMaxLengthReached(IntPtr textEditor)
217 if (textEditorMaxLengthReachedEventHandler != null)
219 MaxLengthReachedEventArgs e = new MaxLengthReachedEventArgs();
221 // Populate all members of "e" (MaxLengthReachedEventArgs) with real data
222 e.TextEditor = Registry.GetManagedBaseHandleFromNativePtr(textEditor) as TextEditor;
223 //here we send all data to user event handlers
224 textEditorMaxLengthReachedEventHandler(this, e);
228 private void OnAnchorClicked(IntPtr textEditor, IntPtr href, uint hrefLength)
230 // Note: hrefLength is useful for get the length of a const char* (href) in dali-toolkit.
231 // But NUI can get the length of string (href), so hrefLength is not necessary in NUI.
232 AnchorClickedEventArgs e = new AnchorClickedEventArgs();
234 // Populate all members of "e" (AnchorClickedEventArgs) with real data
235 e.Href = Marshal.PtrToStringAnsi(href);
236 //here we send all data to user event handlers
237 textEditorAnchorClickedEventHandler?.Invoke(this, e);
241 /// Event arguments that passed via the TextChanged signal.
243 /// <since_tizen> 3 </since_tizen>
244 public class TextChangedEventArgs : EventArgs
246 private TextEditor textEditor;
249 /// TextEditor - is the texteditor control which has the text contents changed.
251 /// <since_tizen> 3 </since_tizen>
252 public TextEditor TextEditor
266 /// Event arguments that passed via the ScrollStateChanged signal.
268 /// <since_tizen> 3 </since_tizen>
269 public class ScrollStateChangedEventArgs : EventArgs
271 private TextEditor textEditor;
272 private ScrollState scrollState;
275 /// TextEditor - is the texteditor control which has the scroll state changed.
277 /// <since_tizen> 3 </since_tizen>
278 public TextEditor TextEditor
291 /// ScrollState - is the texteditor control scroll state.
293 /// <since_tizen> 3 </since_tizen>
294 public ScrollState ScrollState
308 /// The MaxLengthReached event arguments.
310 /// This will be public opened in tizen_6.5 after ACR done. Before ACR, need to be hidden as inhouse API.
311 [EditorBrowsable(EditorBrowsableState.Never)]
312 public class MaxLengthReachedEventArgs : EventArgs
314 private TextEditor textEditor;
319 /// This will be public opened in tizen_6.5 after ACR done. Before ACR, need to be hidden as inhouse API.
320 [EditorBrowsable(EditorBrowsableState.Never)]
321 public TextEditor TextEditor