/*
* Copyright(c) 2018 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
using System;
using System.Runtime.InteropServices;
using System.ComponentModel;
namespace Tizen.NUI
{
///
/// Specifically manages the input method framework which enables the virtual or hardware keyboards.
///
/// 3
[Obsolete("Please do not use! This will be deprecated! Please use InputMethodContext instead!")]
[EditorBrowsable(EditorBrowsableState.Never)]
public class ImfManager : BaseHandle
{
private global::System.Runtime.InteropServices.HandleRef swigCPtr;
private ActivatedEventCallbackType _activatedEventCallback;
private EventReceivedEventCallbackType _eventReceivedEventCallback;
private StatusChangedEventCallbackType _statusChangedEventCallback;
private ResizedEventCallbackType _resizedEventCallback;
private LanguageChangedEventCallbackType _languageChangedEventCallback;
private KeyboardTypeChangedEventCallbackType _keyboardTypeChangedEventCallback;
///
/// Constructor.
///
/// 5
public ImfManager() : this(Interop.InputMethodContext.InputMethodContext_New(), true)
{
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
internal ImfManager(ImfManager imfManager) : this(Interop.InputMethodContext.new_InputMethodContext__SWIG_1(ImfManager.getCPtr(imfManager)), true)
{
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
internal ImfManager(IntPtr cPtr, bool cMemoryOwn) : base(Interop.InputMethodContext.InputMethodContext_SWIGUpcast(cPtr), cMemoryOwn)
{
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
}
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
private delegate void ActivatedEventCallbackType(IntPtr data);
private delegate IntPtr EventReceivedEventCallbackType(IntPtr imfManager, IntPtr imfEventData);
private delegate void StatusChangedEventCallbackType(bool statusChanged);
private delegate void ResizedEventCallbackType(int resized);
private delegate void LanguageChangedEventCallbackType(int languageChanged);
private delegate void KeyboardTypeChangedEventCallbackType(KeyboardType type);
///
/// ImfManager activated.
///
/// 4
public event EventHandler Activated
{
add
{
if (_activatedEventHandler == null)
{
_activatedEventCallback = OnActivated;
ActivatedSignal().Connect(_activatedEventCallback);
}
_activatedEventHandler += value;
}
remove
{
_activatedEventHandler -= value;
if (_activatedEventHandler == null && _activatedEventCallback != null)
{
ActivatedSignal().Disconnect(_activatedEventCallback);
}
}
}
///
/// ImfManager event received.
///
/// 4
public event EventHandlerWithReturnType EventReceived
{
add
{
if (_eventReceivedEventHandler == null)
{
_eventReceivedEventCallback = OnEventReceived;
EventReceivedSignal().Connect(_eventReceivedEventCallback);
}
_eventReceivedEventHandler += value;
}
remove
{
_eventReceivedEventHandler -= value;
if (_eventReceivedEventHandler == null && _eventReceivedEventCallback != null)
{
EventReceivedSignal().Disconnect(_eventReceivedEventCallback);
}
}
}
///
/// ImfManager status changed.
///
/// 4
public event EventHandler StatusChanged
{
add
{
if (_statusChangedEventHandler == null)
{
_statusChangedEventCallback = OnStatusChanged;
StatusChangedSignal().Connect(_statusChangedEventCallback);
}
_statusChangedEventHandler += value;
}
remove
{
_statusChangedEventHandler -= value;
if (_statusChangedEventHandler == null && _statusChangedEventCallback != null)
{
StatusChangedSignal().Disconnect(_statusChangedEventCallback);
}
}
}
///
/// ImfManager resized.
///
/// 4
public event EventHandler Resized
{
add
{
if (_resizedEventHandler == null)
{
_resizedEventCallback = OnResized;
ResizedSignal().Connect(_resizedEventCallback);
}
_resizedEventHandler += value;
}
remove
{
_resizedEventHandler -= value;
if (_resizedEventHandler == null && _resizedEventCallback != null)
{
ResizedSignal().Disconnect(_resizedEventCallback);
}
}
}
///
/// ImfManager language changed.
///
/// 4
public event EventHandler LanguageChanged
{
add
{
if (_languageChangedEventHandler == null)
{
_languageChangedEventCallback = OnLanguageChanged;
LanguageChangedSignal().Connect(_languageChangedEventCallback);
}
_languageChangedEventHandler += value;
}
remove
{
_languageChangedEventHandler -= value;
if (_languageChangedEventHandler == null && _languageChangedEventCallback != null)
{
LanguageChangedSignal().Disconnect(_languageChangedEventCallback);
}
}
}
///
/// ImfManager keyboard type changed.
///
/// 4
[EditorBrowsable(EditorBrowsableState.Never)]
public event EventHandler KeyboardTypeChanged
{
add
{
if (_keyboardTypeChangedEventHandler == null)
{
_keyboardTypeChangedEventCallback = OnKeyboardTypeChanged;
KeyboardTypeChangedSignal().Connect(_keyboardTypeChangedEventCallback);
}
_keyboardTypeChangedEventHandler += value;
}
remove
{
_keyboardTypeChangedEventHandler -= value;
if (_keyboardTypeChangedEventHandler == null && _keyboardTypeChangedEventCallback != null)
{
KeyboardTypeChangedSignal().Disconnect(_keyboardTypeChangedEventCallback);
}
}
}
private event EventHandler _activatedEventHandler;
private event EventHandlerWithReturnType _eventReceivedEventHandler;
private event EventHandler _statusChangedEventHandler;
private event EventHandler _resizedEventHandler;
private event EventHandler _languageChangedEventHandler;
private event EventHandler _keyboardTypeChangedEventHandler;
///
/// The direction of the text.
///
/// 3
public enum TextDirection
{
///
/// Left to right.
///
LeftToRight,
///
/// Right to left.
///
RightToLeft
}
///
/// Events that are generated by the IMF.
///
/// 3
public enum ImfEvent
{
///
/// No event.
///
/// 4
Void,
///
/// Pre-Edit changed.
///
/// 4
Preedit,
///
/// Commit received.
///
/// 4
Commit,
///
/// An event to delete a range of characters from the string.
///
/// 4
DeleteSurrounding,
///
/// An event to query string and the cursor position.
///
/// 4
GetSurrounding,
///
/// Private command sent from the input panel.
///
/// 4
PrivateCommand
}
///
/// Enumeration for the state of the input panel.
///
/// 3
public enum State
{
///
/// Unknown state.
///
/// 4
Default = 0,
///
/// Input panel is shown.
///
/// 4
Show,
///
/// Input panel is hidden.
///
/// 4
Hide,
///
/// Input panel in process of being shown.
///
/// 4
WillShow
}
///
/// Enumeration for the types of keyboard.
///
/// 4
public enum KeyboardType
{
///
/// Software keyboard (virtual keyboard) is default.
///
/// 4
SoftwareKeyboard,
///
/// Hardware keyboard.
///
/// 4
HardwareKeyboard
}
///
/// Gets the singleton of the ImfManager object.
///
/// 5
public static ImfManager Instance
{
get
{
return new ImfManager();
}
}
///
/// Retrieves a handle to the instance of the ImfManager.
///
/// A handle to the ImfManager.
/// 3
public static ImfManager Get()
{
return new ImfManager();
}
///
/// Destroys the context of the IMF.
///
/// 5
public void DestroyContext()
{
Interop.InputMethodContext.InputMethodContext_Finalize(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Destroy the context of the IMF.
///
/// 4
/// Please do not use! This will be deprecated, instead please USE Tizen.NUI.ImfManager.Instance.DestroyContext()!
#pragma warning disable 0465
[Obsolete("Please do not use! This will be deprecated! Please use ImfManager.Instance.DestroyContext() instead!")]
[EditorBrowsable(EditorBrowsableState.Never)]
public void Finalize()
{
DestroyContext();
}
#pragma warning restore 0465
///
/// Activates the IMF.
/// It means that the text editing is started somewhere.
/// If the hardware keyboard isn't connected, then it will show the virtual keyboard.
///
/// 3
public void Activate()
{
Interop.InputMethodContext.InputMethodContext_Activate(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Deactivates the IMF.
/// It means that the text editing is finished somewhere.
///
/// 3
public void Deactivate()
{
Interop.InputMethodContext.InputMethodContext_Deactivate(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Gets the restoration status which controls if the keyboard is restored after the focus is lost and then regained.
/// If true, then the keyboard will be restored (activated) after focus is regained.
///
/// The restoration status.
/// 3
public bool RestoreAfterFocusLost()
{
bool ret = Interop.InputMethodContext.InputMethodContext_RestoreAfterFocusLost(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Sets the status whether the IMF has to restore the keyboard after losing focus.
///
/// True means that keyboard should be restored after the focus is lost and regained.
/// 3
public void SetRestoreAfterFocusLost(bool toggle)
{
Interop.InputMethodContext.InputMethodContext_SetRestoreAfterFocusLost(swigCPtr, toggle);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Sends a message reset to the preedit state or the IMF module.
///
/// 3
public new void Reset()
{
Interop.InputMethodContext.InputMethodContext_Reset(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Notifies the IMF context that the cursor position has changed, required for features like auto-capitalization.
///
/// 3
public void NotifyCursorPosition()
{
Interop.InputMethodContext.InputMethodContext_NotifyCursorPosition(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Sets the cursor position stored in VirtualKeyboard, this is required by the IMF context.
///
/// The position of the cursor.
/// 3
public void SetCursorPosition(uint cursorPosition)
{
Interop.InputMethodContext.InputMethodContext_SetCursorPosition(swigCPtr, cursorPosition);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Gets the cursor position stored in VirtualKeyboard, this is required by the IMF context.
///
/// The current position of the cursor.
/// 3
public uint GetCursorPosition()
{
uint ret = Interop.InputMethodContext.InputMethodContext_GetCursorPosition(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// A method to store the string required by the IMF, this is used to provide predictive word suggestions.
///
/// The text string surrounding the current cursor point.
/// 3
public void SetSurroundingText(string text)
{
Interop.InputMethodContext.InputMethodContext_SetSurroundingText(swigCPtr, text);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Gets the current text string set within the IMF manager, this is used to offer predictive suggestions.
///
/// The surrounding text.
/// 3
public string GetSurroundingText()
{
string ret = Interop.InputMethodContext.InputMethodContext_GetSurroundingText(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Notifies the IMF context that text input is set to multiline or not.
///
/// True if multiline text input is used.
/// 3
public void NotifyTextInputMultiLine(bool multiLine)
{
Interop.InputMethodContext.InputMethodContext_NotifyTextInputMultiLine(swigCPtr, multiLine);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Returns the text direction of the keyboard's current input language.
///
/// The direction of the text.
/// 3
public ImfManager.TextDirection GetTextDirection()
{
ImfManager.TextDirection ret = (ImfManager.TextDirection)Interop.InputMethodContext.InputMethodContext_GetTextDirection(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Provides the size and the position of the keyboard.
/// The position is relative to whether the keyboard is visible or not.
/// If the keyboard is not visible, then the position will be off the screen.
/// If the keyboard is not being shown when this method is called, the keyboard is partially setup (IMFContext) to get/>
/// the values then taken down. So ideally, GetInputMethodArea() should be called after Show().
///
/// Rectangle which is keyboard panel x, y, width, height.
/// 3
public Rectangle GetInputMethodArea()
{
Rectangle ret = new Rectangle(Interop.InputMethodContext.InputMethodContext_GetInputMethodArea(swigCPtr), true);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Sets up the input-panel specific data.
///
/// The specific data to be set to the input panel.
/// 3
public void SetInputPanelUserData(string text)
{
Interop.InputMethodContext.InputMethodContext_SetInputPanelUserData(swigCPtr, text);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Gets the specific data of the current active input panel.
///
/// The specific data to be received from the input panel.
/// 4
public void GetInputPanelUserData(out string text)
{
Interop.InputMethodContext.InputMethodContext_GetInputPanelUserData(swigCPtr, out text);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Gets the state of the current active input panel.
///
/// The state of the input panel.
/// 3
public ImfManager.State GetInputPanelState()
{
ImfManager.State ret = (ImfManager.State)Interop.InputMethodContext.InputMethodContext_GetInputPanelState(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Sets the return key on the input panel to be visible or invisible.
/// The default is true.
///
/// True if the return key is visible (enabled), false otherwise.
/// 3
public void SetReturnKeyState(bool visible)
{
Interop.InputMethodContext.InputMethodContext_SetReturnKeyState(swigCPtr, visible);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Enables to show the input panel automatically when focused.
///
/// If true, the input panel will be shown when focused.
/// 3
public void AutoEnableInputPanel(bool enabled)
{
Interop.InputMethodContext.InputMethodContext_AutoEnableInputPanel(swigCPtr, enabled);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Shows the input panel.
///
/// 3
public void ShowInputPanel()
{
Interop.InputMethodContext.InputMethodContext_ShowInputPanel(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Hides the input panel.
///
/// 3
public void HideInputPanel()
{
Interop.InputMethodContext.InputMethodContext_HideInputPanel(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// Gets the keyboard type.
/// The default keyboard type is SoftwareKeyboard.
///
/// The keyboard type.
/// 4
public ImfManager.KeyboardType GetKeyboardType()
{
ImfManager.KeyboardType ret = (ImfManager.KeyboardType)Interop.InputMethodContext.InputMethodContext_GetKeyboardType(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Gets the current language locale of the input panel.
/// For example, en_US, en_GB, en_PH, fr_FR, ...
///
/// The current language locale of the input panel.
/// 4
public string GetInputPanelLocale()
{
string ret = Interop.InputMethodContext.InputMethodContext_GetInputPanelLocale(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal ImfManager Assign(ImfManager imfManager)
{
ImfManager ret = new ImfManager(Interop.InputMethodContext.InputMethodContext_Assign(swigCPtr, ImfManager.getCPtr(imfManager)), false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal static ImfManager DownCast(BaseHandle handle)
{
ImfManager ret = new ImfManager(Interop.InputMethodContext.InputMethodContext_DownCast(BaseHandle.getCPtr(handle)), true);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal void ApplyOptions(InputMethodOptions options)
{
Interop.InputMethodContext.InputMethodContext_ApplyOptions(swigCPtr, InputMethodOptions.getCPtr(options));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ImfManager obj)
{
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
}
internal ActivatedSignalType ActivatedSignal()
{
ActivatedSignalType ret = new ActivatedSignalType(Interop.InputMethodContext.InputMethodContext_ActivatedSignal(swigCPtr), false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal KeyboardEventSignalType EventReceivedSignal()
{
KeyboardEventSignalType ret = new KeyboardEventSignalType(Interop.InputMethodContext.InputMethodContext_EventReceivedSignal(swigCPtr), false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal StatusSignalType StatusChangedSignal()
{
StatusSignalType ret = new StatusSignalType(Interop.InputMethodContext.InputMethodContext_StatusChangedSignal(swigCPtr), false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal KeyboardResizedSignalType ResizedSignal()
{
KeyboardResizedSignalType ret = new KeyboardResizedSignalType(Interop.InputMethodContext.InputMethodContext_ResizedSignal(swigCPtr), false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal LanguageChangedSignalType LanguageChangedSignal()
{
LanguageChangedSignalType ret = new LanguageChangedSignalType(Interop.InputMethodContext.InputMethodContext_LanguageChangedSignal(swigCPtr), false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal KeyboardTypeSignalType KeyboardTypeChangedSignal()
{
KeyboardTypeSignalType ret = new KeyboardTypeSignalType(Interop.InputMethodContext.InputMethodContext_KeyboardTypeChangedSignal(swigCPtr), false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// You can override it to clean-up your own resources.
///
/// Dispose Type
/// 3
/// Please do not use! This will be deprecated!
/// Dispose() method in Singletone classes (ex: FocusManager, StyleManager, VisualFactory, ImfManager, TtsPlayer, Window) is not required.
[EditorBrowsable(EditorBrowsableState.Never)]
protected override void Dispose(DisposeTypes type)
{
if (disposed)
{
return;
}
if (type == DisposeTypes.Explicit)
{
//Called by User
//Release your own managed resources here.
//You should release all of your own disposable objects here.
}
//Release your own unmanaged resources here.
//You should not access any managed member here except static instance
//because the execution order of Finalizes is non-deterministic.
if (_keyboardTypeChangedEventCallback != null)
{
KeyboardTypeChangedSignal().Disconnect(_keyboardTypeChangedEventCallback);
}
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
{
swigCMemOwn = false;
Interop.InputMethodContext.delete_InputMethodContext(swigCPtr);
}
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, IntPtr.Zero);
}
base.Dispose(type);
}
private void OnActivated(IntPtr data)
{
ActivatedEventArgs e = new ActivatedEventArgs();
if (data != null)
{
e.ImfManager = Registry.GetManagedBaseHandleFromNativePtr(data) as ImfManager;
}
if (_activatedEventHandler != null)
{
_activatedEventHandler(this, e);
}
}
private IntPtr OnEventReceived(IntPtr imfManager, IntPtr imfEventData)
{
ImfCallbackData imfCallbackData = null;
EventReceivedEventArgs e = new EventReceivedEventArgs();
if (imfManager != null)
{
e.ImfManager = Registry.GetManagedBaseHandleFromNativePtr(imfManager) as ImfManager;
}
if (imfEventData != null)
{
e.ImfEventData = ImfEventData.GetImfEventDataFromPtr(imfEventData);
}
if (_eventReceivedEventHandler != null)
{
imfCallbackData = _eventReceivedEventHandler(this, e);
}
if (imfCallbackData != null)
{
return imfCallbackData.GetImfCallbackDataPtr();
}
else
{
return new ImfCallbackData().GetImfCallbackDataPtr();
}
}
private void OnStatusChanged(bool statusChanged)
{
StatusChangedEventArgs e = new StatusChangedEventArgs();
e.StatusChanged = statusChanged;
if (_statusChangedEventHandler != null)
{
_statusChangedEventHandler(this, e);
}
}
private void OnResized(int resized)
{
ResizedEventArgs e = new ResizedEventArgs();
e.Resized = resized;
if (_resizedEventHandler != null)
{
_resizedEventHandler(this, e);
}
}
private void OnLanguageChanged(int languageChanged)
{
LanguageChangedEventArgs e = new LanguageChangedEventArgs();
e.LanguageChanged = languageChanged;
if (_languageChangedEventHandler != null)
{
_languageChangedEventHandler(this, e);
}
}
private void OnKeyboardTypeChanged(KeyboardType type)
{
KeyboardTypeChangedEventArgs e = new KeyboardTypeChangedEventArgs();
e.KeyboardType = type;
if (_keyboardTypeChangedEventHandler != null)
{
_keyboardTypeChangedEventHandler(this, e);
}
}
///
/// This structure is used to pass on data from the IMF regarding predictive text.
///
/// 3
public class ImfEventData : global::System.IDisposable
{
///
/// The state if it owns memory
///
/// 3
protected bool swigCMemOwn;
///
/// A flag to check if it is already disposed.
///
/// 3
protected bool disposed = false;
private global::System.Runtime.InteropServices.HandleRef swigCPtr;
//A flag to check who called Dispose(). (By User or DisposeQueue)
private bool isDisposeQueued = false;
///
/// The default constructor.
///
/// 3
public ImfEventData() : this(Interop.InputMethodContext.new_InputMethodContext_EventData__SWIG_0(), true)
{
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// The constructor.
///
/// The name of the event from the IMF.
/// The pre-edit or the commit string.
/// Start the position from the current cursor position to start deleting characters.
/// The number of characters to delete from the cursorOffset.
/// 3
public ImfEventData(ImfManager.ImfEvent aEventName, string aPredictiveString, int aCursorOffset, int aNumberOfChars) : this(Interop.InputMethodContext.new_InputMethodContext_EventData__SWIG_1((int)aEventName, aPredictiveString, aCursorOffset, aNumberOfChars), true)
{
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
internal ImfEventData(IntPtr cPtr, bool cMemoryOwn)
{
swigCMemOwn = cMemoryOwn;
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
}
///
/// Releases the resource.
///
/// 3
~ImfEventData()
{
if (!isDisposeQueued)
{
isDisposeQueued = true;
DisposeQueue.Instance.Add(this);
}
}
///
/// The pre-edit or the commit string.
///
/// 4
public string PredictiveString
{
set
{
Interop.InputMethodContext.InputMethodContext_EventData_predictiveString_set(swigCPtr, value);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
get
{
string ret = Interop.InputMethodContext.InputMethodContext_EventData_predictiveString_get(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
}
///
/// The name of the event from the IMF.
///
/// 4
public ImfManager.ImfEvent EventName
{
set
{
Interop.InputMethodContext.InputMethodContext_EventData_eventName_set(swigCPtr, (int)value);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
get
{
ImfManager.ImfEvent ret = (ImfManager.ImfEvent)Interop.InputMethodContext.InputMethodContext_EventData_eventName_get(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
}
///
/// The start position from the current cursor position to start deleting characters.
///
/// 4
public int CursorOffset
{
set
{
Interop.InputMethodContext.InputMethodContext_EventData_cursorOffset_set(swigCPtr, value);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
get
{
int ret = Interop.InputMethodContext.InputMethodContext_EventData_cursorOffset_get(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
}
///
/// The number of characters to delete from the cursorOffset.
///
/// 4
public int NumberOfChars
{
set
{
Interop.InputMethodContext.InputMethodContext_EventData_numberOfChars_set(swigCPtr, value);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
get
{
int ret = Interop.InputMethodContext.InputMethodContext_EventData_numberOfChars_get(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
}
///
/// The dispose pattern.
///
/// 3
public void Dispose()
{
//Throw excpetion if Dispose() is called in separate thread.
if (!Window.IsInstalled())
{
throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
}
if (isDisposeQueued)
{
Dispose(DisposeTypes.Implicit);
}
else
{
Dispose(DisposeTypes.Explicit);
System.GC.SuppressFinalize(this);
}
}
internal static ImfEventData GetImfEventDataFromPtr(IntPtr cPtr)
{
ImfEventData ret = new ImfEventData(cPtr, false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ImfEventData obj)
{
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
}
///
/// You can override it to clean-up your own resources.
///
/// 3
protected virtual void Dispose(DisposeTypes type)
{
if (disposed)
{
return;
}
if (type == DisposeTypes.Explicit)
{
//Called by User
//Release your own managed resources here.
//You should release all of your own disposable objects here.
}
//Release your own unmanaged resources here.
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
if (swigCPtr.Handle != IntPtr.Zero)
{
if (swigCMemOwn)
{
swigCMemOwn = false;
Interop.InputMethodContext.delete_InputMethodContext_EventData(swigCPtr);
}
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, IntPtr.Zero);
}
disposed = true;
}
}
///
/// Data required by the IMF from the callback.
///
/// 3
public class ImfCallbackData : global::System.IDisposable
{
///
/// The state if it owns memory
///
/// 3
protected bool swigCMemOwn;
///
/// A flag to check if it is already disposed.
///
/// 3
protected bool disposed = false;
private global::System.Runtime.InteropServices.HandleRef swigCPtr;
//A flag to check who called Dispose(). (By User or DisposeQueue)
private bool isDisposeQueued = false;
///
/// The default constructor.
///
/// 3
public ImfCallbackData() : this(Interop.InputMethodContext.new_InputMethodContext_CallbackData__SWIG_0(), true)
{
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// The constructor.
///
/// True if the cursor position needs to be updated.
/// The new position of the cursor.
/// The current text string.
/// Flag if preedit reset is required.
/// 3
public ImfCallbackData(bool aUpdate, int aCursorPosition, string aCurrentText, bool aPreeditResetRequired) : this(Interop.InputMethodContext.new_InputMethodContext_CallbackData__SWIG_1(aUpdate, aCursorPosition, aCurrentText, aPreeditResetRequired), true)
{
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
internal ImfCallbackData(IntPtr cPtr, bool cMemoryOwn)
{
swigCMemOwn = cMemoryOwn;
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
}
///
/// Releases the resource.
///
/// 3
~ImfCallbackData()
{
if (!isDisposeQueued)
{
isDisposeQueued = true;
DisposeQueue.Instance.Add(this);
}
}
///
/// The current text string.
///
/// 4
public string CurrentText
{
set
{
Interop.InputMethodContext.InputMethodContext_CallbackData_currentText_set(swigCPtr, value);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
get
{
string ret = Interop.InputMethodContext.InputMethodContext_CallbackData_currentText_get(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
}
///
/// The current text string.
///
/// 4
public int CursorPosition
{
set
{
Interop.InputMethodContext.InputMethodContext_CallbackData_cursorPosition_set(swigCPtr, value);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
get
{
int ret = Interop.InputMethodContext.InputMethodContext_CallbackData_cursorPosition_get(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
}
///
/// If the cursor position needs to be updated.
///
/// 4
public bool Update
{
set
{
Interop.InputMethodContext.InputMethodContext_CallbackData_update_set(swigCPtr, value);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
get
{
bool ret = Interop.InputMethodContext.InputMethodContext_CallbackData_update_get(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
}
///
/// Flags if preedit reset is required.
///
/// 4
public bool PreeditResetRequired
{
set
{
Interop.InputMethodContext.InputMethodContext_CallbackData_preeditResetRequired_set(swigCPtr, value);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
get
{
bool ret = Interop.InputMethodContext.InputMethodContext_CallbackData_preeditResetRequired_get(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
}
///
/// The dispose pattern.
///
/// 3
public void Dispose()
{
//Throw excpetion if Dispose() is called in separate thread.
if (!Window.IsInstalled())
{
throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
}
if (isDisposeQueued)
{
Dispose(DisposeTypes.Implicit);
}
else
{
Dispose(DisposeTypes.Explicit);
System.GC.SuppressFinalize(this);
}
}
internal IntPtr GetImfCallbackDataPtr()
{
return (IntPtr)swigCPtr;
}
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ImfCallbackData obj)
{
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
}
internal static ImfCallbackData GetImfCallbackDataFromPtr(IntPtr cPtr)
{
ImfCallbackData ret = new ImfCallbackData(cPtr, false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// You can override it to clean-up your own resources.
///
/// 3
protected virtual void Dispose(DisposeTypes type)
{
if (disposed)
{
return;
}
if (type == DisposeTypes.Explicit)
{
//Called by User
//Release your own managed resources here.
//You should release all of your own disposable objects here.
}
//Release your own unmanaged resources here.
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
if (swigCPtr.Handle != IntPtr.Zero)
{
if (swigCMemOwn)
{
swigCMemOwn = false;
Interop.InputMethodContext.delete_InputMethodContext_CallbackData(swigCPtr);
}
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, IntPtr.Zero);
}
disposed = true;
}
}
///
/// ImfManager activated event arguments.
///
/// 4
public class ActivatedEventArgs : EventArgs
{
///
/// The instance of ImfManager
///
/// 4
public ImfManager ImfManager
{
get;
set;
}
}
///
/// ImfManager event received event arguments.
///
/// 4
public class EventReceivedEventArgs : EventArgs
{
///
/// The instance of ImfManager
///
/// 4
public ImfManager ImfManager
{
get;
set;
}
///
/// The event data of IMF
///
/// 4
public ImfEventData ImfEventData
{
get;
set;
}
}
///
/// ImfManager status changed event arguments.
///
/// 4
public class StatusChangedEventArgs : EventArgs
{
///
/// ImfManager status
///
/// 4
public bool StatusChanged
{
get;
set;
}
}
///
/// ImfManager resized event.
///
/// 4
public class ResizedEventArgs : EventArgs
{
///
/// The state if the IMF resized.
///
/// 4
public int Resized
{
get;
set;
}
}
///
/// ImfManager language changed event args.
///
/// 4
public class LanguageChangedEventArgs : EventArgs
{
///
/// language changed.
///
/// 4
public int LanguageChanged
{
get;
set;
}
}
///
/// ImfManager keyboard type changed event arguments.
///
/// 4
public class KeyboardTypeChangedEventArgs : EventArgs
{
///
/// ImfManager keyboard type
///
/// 4
public KeyboardType KeyboardType
{
get;
set;
}
}
}
}