[Inputmethod] Add missing APIs (#647)
[platform/core/csapi/tizenfx.git] / src / Tizen.Uix.InputMethod / Interop / Interop.InputMethod.cs
1 /*
2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
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.Runtime.InteropServices;
20 using Tizen.Uix.InputMethod;
21
22 /// <summary>
23 /// The Partial Interop class.
24 /// </summary>
25 internal static partial class Interop
26 {
27     /// <summary>
28     /// The InputMethod Interop class.
29     /// </summary>
30     internal static class InputMethod
31     {
32         internal static string LogTag = "Tizen.Uix.InputMethod";
33
34         private const int ErrorInputMethod = -0x02F20000;
35
36         internal enum ErrorCode
37         {
38             None = Tizen.Internals.Errors.ErrorCode.None,
39             InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter,
40             PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied,
41             NoCallbackFunction = ErrorInputMethod | 0x0001,
42             NotRunning = ErrorInputMethod | 0x0002,
43             OperationFailed = ErrorInputMethod | 0x0010,
44             OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory
45         };
46
47         internal enum ImeEventType
48         {
49             Language = 1,    /* The language of the input panel */
50             ShiftMode = 2,   /* The shift key state of the input panel */
51             Geometry = 3     /* The size of the input panel */
52         };
53
54         internal enum ImeShiftMode
55         {
56             Off,
57             On
58         };
59
60         [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
61         internal struct ImeCallbackStruct
62         {
63             [MarshalAs(UnmanagedType.FunctionPtr)]
64             internal ImeCreateCb create;
65             [MarshalAs(UnmanagedType.FunctionPtr)]
66             internal ImeTerminateCb terminate;
67             [MarshalAs(UnmanagedType.FunctionPtr)]
68             internal ImeShowCb show;
69             [MarshalAs(UnmanagedType.FunctionPtr)]
70             internal ImeHideCb hide;
71         };
72
73         [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
74         internal struct ImePreEditAttributeStruct
75         {
76             internal uint start;
77             internal uint length;
78             internal int type;
79             internal uint value;
80         };
81
82         internal sealed class ImeCallbackStructGCHandle : IDisposable
83         {
84             internal ImeCallbackStruct _imeCallbackStruct;
85             internal GCHandle _imeCallbackStructHandle;
86             public ImeCallbackStructGCHandle()
87             {
88                 _imeCallbackStruct = new ImeCallbackStruct();
89                 _imeCallbackStructHandle = GCHandle.Alloc(_imeCallbackStruct);
90             }
91
92             #region IDisposable Support
93             private bool disposedValue = false;
94
95             void Dispose(bool disposing)
96             {
97                 Tizen.Log.Info(LogTag, "In Dispose");
98                 if (!disposedValue)
99                 {
100                     if (disposing)
101                     {
102                         Tizen.Log.Info(LogTag, "In Dispose free called");
103                         _imeCallbackStructHandle.Free();
104                     }
105
106                     disposedValue = true;
107                 }
108             }
109
110             public void Dispose()
111             {
112                 Dispose(true);
113             }
114             #endregion
115         }
116
117         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
118         internal delegate void ImeRunCb();
119
120         [DllImport(Libraries.InputMethod, EntryPoint = "ime_run")]
121         internal static extern ErrorCode ImeRun(ref ImeCallbackStruct basicCB, IntPtr userData);
122
123         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_focus_in_cb")]
124         internal static extern ErrorCode ImeEventSetFocusedInCb(ImeFocusedInCb callbackFunction, IntPtr userData);
125
126         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_focus_out_cb")]
127         internal static extern ErrorCode ImeEventSetFocusedOutCb(ImeFocusedOutCb callbackFunction, IntPtr userData);
128
129         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_surrounding_text_updated_cb")]
130         internal static extern ErrorCode ImeEventSetSurroundingTextUpdatedCb(ImeSurroundingTextUpdatedCb callbackFunction, IntPtr userData);
131
132         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_input_context_reset_cb")]
133         internal static extern ErrorCode ImeEventSetInputContextResetCb(ImeInputContextResetCb callbackFunction, IntPtr userData);
134
135         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_cursor_position_updated_cb")]
136         internal static extern ErrorCode ImeEventSetCursorPositionUpdatedCb(ImeCursorPositionUpdatedCb callbackFunction, IntPtr userData);
137
138         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_language_requested_cb")]
139         internal static extern ErrorCode ImeEventSetLanguageRequestedCallbackCb(ImeLanguageRequestedCb callbackFunction, IntPtr userData);
140
141         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_language_set_cb")]
142         internal static extern ErrorCode ImeEventSetLanguageSetCb(ImeLanguageSetCb callbackFunction, IntPtr userData);
143
144         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_imdata_set_cb")]
145         internal static extern ErrorCode ImeEventSetImdataSetCb(ImeImdataSetCb callbackFunction, IntPtr userData);
146
147         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_imdata_requested_cb")]
148         internal static extern ErrorCode ImeEventSetImdataRequestedCb(ImeImdataRequestedCb callbackFunction, IntPtr userData);
149
150         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_layout_set_cb")]
151         internal static extern ErrorCode ImeEventSetLayoutSetCb(ImeLayoutSetCb callbackFunction, IntPtr userData);
152
153         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_return_key_type_set_cb")]
154         internal static extern ErrorCode ImeEventSetReturnKeySetCb(ImeReturnKeySetCb callbackFunction, IntPtr userData);
155
156         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_return_key_state_set_cb")]
157         internal static extern ErrorCode ImeEventSetReturnKeyStateSetCb(ImeReturnKeyStateSetCb callbackFunction, IntPtr userData);
158
159         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_geometry_requested_cb")]
160         internal static extern ErrorCode ImeEventSetGeometryRequestedCallbackCb(ImeGeometryRequestedCb callbackFunction, IntPtr userData);
161
162         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_process_key_event_cb")]
163         internal static extern ErrorCode ImeEventSetProcessKeyEventCb(ImeProcessKeyEventCb callbackFunction, IntPtr userData);
164
165         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_display_language_changed_cb")]
166         internal static extern ErrorCode ImeEventSetDisplayLanguageChangedCb(ImeDisplayLanguageChangedCb callbackFunction, IntPtr userData);
167
168         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_rotation_degree_changed_cb")]
169         internal static extern ErrorCode ImeEventSetRotationChangedCb(ImeRotationChangedCb callbackFunction, IntPtr userData);
170
171         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_accessibility_state_changed_cb")]
172         internal static extern ErrorCode ImeEventSetAccessibilityStateChangedCb(ImeAccessibilityStateChangedCb callbackFunction, IntPtr userData);
173
174         [DllImport(Libraries.InputMethod, EntryPoint = "ime_send_key_event")]
175         internal static extern ErrorCode ImeSendKeyEvent(KeyCode keycode, KeyMask keymask, bool forwardKey);
176
177         [DllImport(Libraries.InputMethod, EntryPoint = "ime_commit_string")]
178         internal static extern ErrorCode ImeCommitString(string str);
179
180         [DllImport(Libraries.InputMethod, EntryPoint = "ime_show_preedit_string")]
181         internal static extern ErrorCode ImeShowPreeditString();
182
183         [DllImport(Libraries.InputMethod, EntryPoint = "ime_hide_preedit_string")]
184         internal static extern ErrorCode ImeHidePreeditString();
185
186         [DllImport(Libraries.InputMethod, EntryPoint = "ime_update_preedit_string")]
187         internal static extern ErrorCode ImeUpdatePreeditString(string str, IntPtr attrs);
188
189         [DllImport(Libraries.InputMethod, EntryPoint = "ime_request_surrounding_text")]
190         internal static extern ErrorCode ImeRequestSurroundingText(int maxlenBefore, int maxlenAfter);
191
192         [DllImport(Libraries.InputMethod, EntryPoint = "ime_delete_surrounding_text")]
193         internal static extern ErrorCode ImeDeleteSurroundingText(int offset, int len);
194
195         [DllImport(Libraries.InputMethod, EntryPoint = "ime_get_surrounding_text")]
196         internal static extern ErrorCode ImeGetSurroundingText(int maxlenBefore, int maxlenAfter, out IntPtr text, out int cursorPos);
197
198         [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_selection")]
199         internal static extern ErrorCode ImeSetSelection(int start, int end);
200
201         [DllImport(Libraries.InputMethod, EntryPoint = "ime_get_main_window")]
202         internal static extern IntPtr ImeGetMainWindow();
203
204         [DllImport(Libraries.InputMethod, EntryPoint = "ime_request_hide")]
205         internal static extern ErrorCode ImeRequestHide();
206
207         [DllImport(Libraries.InputMethod, EntryPoint = "ime_prepare")]
208         internal static extern ErrorCode ImePrepare();
209
210         [DllImport(Libraries.InputMethod, EntryPoint = "ime_initialize")]
211         internal static extern ErrorCode ImeInitialize();
212
213         [DllImport(Libraries.InputMethod, EntryPoint = "ime_finalize")]
214         internal static extern ErrorCode ImeFinalize();
215
216         [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_dotnet_flag")]
217         internal static extern ErrorCode ImeSetDotnetFlag(bool set);
218
219         [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_size")]
220         internal static extern ErrorCode ImeSetSize(int portraitWidth, int portraitHeight, int landscapeWidth, int landscapeHeight);
221
222         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_layout")]
223         internal static extern ErrorCode ImeContextGetLayout(IntPtr context, out InputPanelLayout layout);
224
225         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_layout_variation")]
226         internal static extern ErrorCode ImeContextGetLayoutVariation(IntPtr context, out LayoutVariation layoutVariation);
227
228         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_cursor_position")]
229         internal static extern ErrorCode ImeContextGetCursorPosition(IntPtr context, out int cursorPos);
230
231         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_autocapital_type")]
232         internal static extern ErrorCode ImeContextGetAutocapitalType(IntPtr context, out AutoCapitalization autocapitalType);
233
234         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_return_key_type")]
235         internal static extern ErrorCode ImeContextGetReturnKey(IntPtr context, out InputPanelReturnKey returnKeyType);
236
237         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_return_key_state")]
238         internal static extern ErrorCode ImeContextGetReturnKeyState(IntPtr context, out bool returnKeyState);
239
240         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_prediction_mode")]
241         internal static extern ErrorCode ImeContextGetPredictionMode(IntPtr context, out bool predictionMode);
242
243         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_password_mode")]
244         internal static extern ErrorCode ImeContextGetPasswordMode(IntPtr context, out bool passwordMode);
245
246         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_input_hint")]
247         internal static extern ErrorCode ImeContextGetInputHint(IntPtr context, out InputHints inputHint);
248
249         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_bidi_direction")]
250         internal static extern ErrorCode ImeContextGetBidiDirection(IntPtr context, out BiDirection bidi);
251
252         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_language")]
253         internal static extern ErrorCode ImeContextGetLanguage(IntPtr context, out InputPanelLanguage language);
254
255         [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_name")]
256         internal static extern ErrorCode ImeDeviceInfoGetName(IntPtr dev_info, out string devName);
257
258         [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_class")]
259         internal static extern ErrorCode ImeDeviceInfoGetClass(IntPtr dev_info, out DeviceClass devClass);
260
261         [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_subclass")]
262         internal static extern ErrorCode ImeDeviceInfoGetSubclass(IntPtr dev_info, out DeviceSubclass devSubClass);
263
264         [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_floating_mode")]
265         internal static extern ErrorCode ImeSetFloatingMode(bool floatingMode);
266
267         [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_floating_drag_start")]
268         internal static extern ErrorCode ImeSetFloatingDragStart();
269
270         [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_floating_drag_end")]
271         internal static extern ErrorCode ImeSetFloatingDragEnd();
272
273         [DllImport(Libraries.InputMethod, EntryPoint = "ime_update_input_panel_event")]
274         internal static extern ErrorCode ImeUpdateInputPanelEvent(ImeEventType type, uint value);
275
276         [DllImport(Libraries.InputMethod, EntryPoint = "ime_get_selected_text")]
277         internal static extern ErrorCode ImeGetSelectedText(out IntPtr text);
278
279         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_prediction_hint_set_cb")]
280         internal static extern ErrorCode ImeEventSetPredictionHintSetCb(ImePredictionHintSetCb callbackFunction, IntPtr userData);
281
282         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_prediction_hint_data_set_cb")]
283         internal static extern ErrorCode ImeEventSetPredictionHintDataSetCb(ImePredictionHintDataSetCb callbackFunction, IntPtr userData);
284
285         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_mime_type_set_request_cb")]
286         internal static extern ErrorCode ImeEventSetMimeTypeSetRequestCb(ImeMimeTypeSetRequestCb callbackFunction, IntPtr userData);
287
288         [DllImport(Libraries.InputMethod, EntryPoint = "ime_send_private_command")]
289         internal static extern ErrorCode ImeSendPrivateCommand(string command);
290
291         [DllImport(Libraries.InputMethod, EntryPoint = "ime_commit_content")]
292         internal static extern ErrorCode ImeCommitContent(string content, string description, string mimeType);
293
294         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
295         internal delegate void ImeCreateCb(IntPtr userData);
296
297         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
298         internal delegate void ImeTerminateCb(IntPtr userData);
299
300         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
301         internal delegate void ImeShowCb(int contextId, IntPtr context, IntPtr userData);
302
303         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
304         internal delegate void ImeHideCb(int contextId, IntPtr userData);
305
306         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
307         internal delegate void ImeFocusedInCb(int contextId, IntPtr userData);
308
309         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
310         internal delegate void ImeFocusedOutCb(int contextId, IntPtr userData);
311
312         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
313         internal delegate void ImeSurroundingTextUpdatedCb(int contextId, IntPtr text, int cursorPos, IntPtr userData);
314
315         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
316         internal delegate void ImeInputContextResetCb(IntPtr userData);
317
318         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
319         internal delegate void ImeCursorPositionUpdatedCb(int cursorPos, IntPtr userData);
320
321         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
322         internal delegate void ImeLanguageRequestedCb(IntPtr userData, out IntPtr langCode);
323
324         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
325         internal delegate void ImeLanguageSetCb(InputPanelLanguage language, IntPtr userData);
326
327         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
328         internal delegate void ImeImdataSetCb(IntPtr data, uint dataLength, IntPtr userData);
329
330         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
331         internal delegate void ImeImdataRequestedCb(IntPtr userData, out IntPtr data, out uint dataLength);
332
333         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
334         internal delegate void ImeLayoutSetCb(InputPanelLayout layout, IntPtr userData);
335
336         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
337         internal delegate void ImeReturnKeySetCb(InputPanelReturnKey type, IntPtr userData);
338
339         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
340         internal delegate void ImeReturnKeyStateSetCb(bool disabled, IntPtr userData);
341
342         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
343         internal delegate void ImeGeometryRequestedCb(IntPtr userData, out int x, out int y, out int w, out int h);
344
345         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
346         internal delegate bool ImeProcessKeyEventCb(KeyCode keycode, KeyMask keymask, IntPtr devInfo, IntPtr userData);
347
348         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
349         internal delegate void ImeDisplayLanguageChangedCb(IntPtr language, IntPtr userData);
350
351         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
352         internal delegate void ImeRotationChangedCb(int degree, IntPtr userData);
353
354         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
355         internal delegate void ImeAccessibilityStateChangedCb(bool state, IntPtr userData);
356
357         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
358         internal delegate void ImePredictionHintSetCb(IntPtr predictionHint, IntPtr userData);
359
360         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
361         internal delegate void ImePredictionHintDataSetCb(IntPtr key, IntPtr keyValue, IntPtr userData);
362
363         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
364         internal delegate void ImeMimeTypeSetRequestCb(IntPtr mimeType, IntPtr userData);
365     }
366 }