namespace ISEDefaultNUI
{
+ public class DefaultValue
+ {
+ public string InputMode;
+ public string SublayoutName;
+ public bool ForceLatin;
+ public DefaultValue(string mode, string name, bool latin)
+ {
+ InputMode = mode;
+ SublayoutName = name;
+ ForceLatin = latin;
+ }
+ }
+
+ public class IMEDefaultValue
+ {
+ public List<DefaultValue> Values;
+ public IMEDefaultValue()
+ {
+ Values = new List<DefaultValue>();
+ Values.Add(new DefaultValue("", "DEFAULT", false));
+ Values.Add(new DefaultValue("SYM_QTY_1", "DEFAULT", false));
+ Values.Add(new DefaultValue("", "EMAIL", true));
+ Values.Add(new DefaultValue("", "URL", true));
+ Values.Add(new DefaultValue("PHONE_3X4", "DEFAULT", false));
+ Values.Add(new DefaultValue("NUMONLY_3X4_DEC", "DEFAULT", false));
+ Values.Add(new DefaultValue("MONTH_3X4", "DEFAULT", false));
+ Values.Add(new DefaultValue("NUMONLY_3X4", "DEFAULT", false));
+ Values.Add(new DefaultValue("", "DEFAULT", false));
+ Values.Add(new DefaultValue("SYM_QTY_1", "DEFAULT", false));
+ Values.Add(new DefaultValue("", "DEFAULT", true));
+ Values.Add(new DefaultValue("", "DEFAULT", true));
+ Values.Add(new DefaultValue("DATETIME_3X4", "DEFAULT", false));
+ Values.Add(new DefaultValue("EMOTICON_LAYOUT", "DEFAULT", false));
+ Values.Add(new DefaultValue("STT_3X4", "DEFAULT", false));
+ Values.Add(new DefaultValue("STICKER_LAYOUT", "DEFAULT", false));
+ Values.Add(new DefaultValue("NUMONLY_3X4_SIG", "DEFAULT", false));
+ Values.Add(new DefaultValue("NUMONLY_3X4_DEC", "DEFAULT", false));
+ Values.Add(new DefaultValue("NUMONLY_3X4_SIGDEC", "DEFAULT", false));
+ Values.Add(new DefaultValue("PASSWD_3X4", "DEFAULT", false));
+ }
+ }
+
public class Common
{
public static void SendString(string text)
private static void Create()
{
+ SclNui = new SCLNUI(navigator);
Task.Run(() => DbusInitialize());
Window.Instance.AddAvailableOrientation(Window.WindowOrientation.Portrait);
private static void Show(InputMethodEditor.ContextId a, Tizen.Uix.InputMethod.InputMethodContext b)
{
+ int inputContext = a.Equals(0) ? 0 : KeyboardState.Instance.FocusedContext;
bool returnKeyState = b.ReturnKeyState;
bool predictionAllow = b.PredictionMode;
bool passwordMode = b.PasswordMode;
break;
}
UpdateCursorPosition(b.CursorPosition);
- SetIMESize();
- SclNui = new SCLNUI(navigator);
- LanguageInfo currentLanguage = LanguageManager.Instance.GetLanguageInfo(IseConfig.Instance.SelectedLanguage);
- SclNui.SetInputMode(currentLanguage.SelectedInputMode);
- SclNui.SetCurrentSublayout("DEFAULT");
- SclNui.SetStringSubstitution("_LANGUAGE_", currentLanguage.DisplayName);
- SclNui.EnableMagnifier(IseConfig.Instance.PreviewOn);
- SclNuiShow();
- KeyboardState.Instance.VisibleState = true;
- SclNuiDisableInputEvent(false);
+ IMEShow(inputContext);
SclNuiSetUpdatePending(false);
navigator.Push(SclNui);
}
KeyboardState.Instance.ResetMultitapState(true);
}
+ private static void IMEShow(int ic)
+ {
+ switch (KeyboardState.Instance.Layout)
+ {
+ case KeyboardLayout.PhoneNumber:
+ case KeyboardLayout.IP:
+ case KeyboardLayout.Month:
+ case KeyboardLayout.NumberOnly:
+ /* FIXME : This comment should be removed when using IMEngine
+ * InputMethodEditor.SetIMEngine(ResourceManager.DefaultKeyboardUuid);
+ */
+ break;
+ default:
+ break;
+ }
+
+ IMEDefaultValue defaultValue = new IMEDefaultValue();
+ LanguageManager languageManager = LanguageManager.Instance;
+ IseConfig iseConfig = IseConfig.Instance;
+ KeyboardState keyboardState = KeyboardState.Instance;
+ string currentLanguage = languageManager.GetCurrentLanguage();
+ IseConfig.Instance.ReadIseConfig();
+ LanguageInfo languageinfo = languageManager.GetLanguageInfo(iseConfig.SelectedLanguage);
+
+ IntPtr inputModePtr;
+ SclNuiGetInputMode(out inputModePtr);
+ string inputMode = Marshal.PtrToStringAnsi(inputModePtr);
+ bool resetInputMode = false;
+
+ SclNui.SetInputMode(languageinfo.SelectedInputMode);
+ SclNui.SetCurrentSublayout("DEFAULT");
+ SclNui.SetStringSubstitution("_LANGUAGE_", languageinfo.DisplayName);
+ SclNui.EnableMagnifier(IseConfig.Instance.PreviewOn);
+
+ KeyboardState.Instance.VisibleState = true;
+
+ if (keyboardState.NeedReset || !iseConfig.SelectedLanguage.Equals(currentLanguage))
+ resetInputMode = true;
+ keyboardState.NeedReset = false;
+
+ bool forcePrimaryLatin = false;
+ if (!languageinfo.IsLatinLanguage)
+ {
+ if (!keyboardState.DisableForceLatin)
+ {
+ if(defaultValue.Values[(int)keyboardState.Layout].ForceLatin)
+ {
+ forcePrimaryLatin = true;
+ }
+ else
+ {
+ if (keyboardState.PreferLatin)
+ forcePrimaryLatin = true;
+ }
+ }
+ }
+
+ if(forcePrimaryLatin)
+ {
+ bool selected = false;
+ for (int loop = 0; !selected && loop < languageManager.GetLanguagesNum(); loop++)
+ {
+ languageinfo = languageManager.GetLanguageInfo(loop);
+ if (languageinfo != null)
+ {
+ if (languageinfo.Enabled && languageinfo.IsLatinLanguage)
+ {
+ selected = languageManager.SelectLanguage(languageinfo);
+ if (selected)
+ forcePrimaryLatin = false;
+ }
+ }
+ }
+ }
+
+ if (resetInputMode)
+ {
+ ResetContext();
+
+ if (!keyboardState.CapsMode)
+ SclNuiSetShiftState((uint)ShiftState.Off);
+
+ if (keyboardState.Layout < KeyboardLayout.Max)
+ {
+ uint layoutIndex = (uint)keyboardState.Layout;
+ if (keyboardState.Layout == KeyboardLayout.NumberOnly && keyboardState.LayoutVariation > 0 &&
+ keyboardState.LayoutVariation < ResourceManager.LayoutNumberOnlyVariationMax)
+ {
+ layoutIndex = (uint)KeyboardLayout.NumberOnlySig + keyboardState.LayoutVariation - 1;
+ }
+ else if (keyboardState.Layout == KeyboardLayout.Password && keyboardState.LayoutVariation > 0)
+ {
+ layoutIndex = (uint)KeyboardLayout.Password_3X4;
+ }
+
+ bool fileNameLayout = false;
+ if (keyboardState.Layout == KeyboardLayout.Normal && keyboardState.LayoutVariation == (uint)KeyboardLayoutNormalVariation.FileName)
+ fileNameLayout = true;
+ else
+ fileNameLayout = false;
+
+ SclNuiEnableButton("exclamation", !fileNameLayout);
+ SclNuiEnableButton("question", !fileNameLayout);
+ SclNuiEnableButton("divide", !fileNameLayout);
+ SclNuiEnableButton("multiply", !fileNameLayout);
+ SclNuiEnableButton("colon", !fileNameLayout);
+ SclNuiEnableButton("quotation", !fileNameLayout);
+ SclNuiEnableButton("CM_KEY", true);
+
+ Log.Info("NUIIME", "new layout index : " + layoutIndex.ToString());
+
+ if(defaultValue.Values[(int)layoutIndex].InputMode.Length > 0)
+ {
+ SclNuiSetInputMode(defaultValue.Values[(int)layoutIndex].InputMode);
+ }
+
+ SclNuiSetCurrentSublayout(defaultValue.Values[(int)layoutIndex].SublayoutName);
+ }
+ }
+
+ LanguageInfo languageInfo = LanguageManager.Instance.GetLanguageInfo(currentLanguage);
+ if (languageInfo != null)
+ {
+ if (languageInfo.AcceptsCapsMode)
+ {
+ if (keyboardState.Layout != KeyboardLayout.Normal)
+ {
+ SclNuiSetAutocapitalShiftState(true);
+ SclNuiSetShiftState((uint)ShiftState.Off);
+ }
+ else
+ {
+ Common.SendKeyEvent((KeyCode)ResourceManager.MVKShiftEnable);
+ if (keyboardState.CapsMode)
+ SclNuiSetAutocapitalShiftState(false);
+ }
+ }
+ else
+ {
+ SclNuiSetAutocapitalShiftState(true);
+ Common.SendKeyEvent((KeyCode)ResourceManager.MVKShiftDisable);
+ SclNuiSetShiftState((uint)ShiftState.Off);
+ }
+ }
+ else
+ {
+ SclNuiSetAutocapitalShiftState(true);
+ }
+
+ UpdateSpaceKey();
+ SclNuiShow();
+ SclNuiDisableInputEvent(false);
+ SetIMESize();
+ }
+
private static void ResetContext()
{
KeyboardState.Instance.ResetMultitapState(true);
+ KeyboardState.Instance.DisableForceLatin = false;
+ LanguageManager.Instance.ResetLanguage(IseConfig.Instance.SelectedLanguage);
}
private static void SetLayout(KeyboardLayout layout, UInt32 layoutVariation)
private static void ReturnKeyStateSetEvent(object sender, ReturnKeyStateSetEventArgs e)
{
Log.Info("NUIIME", "state : " + e.State.ToString());
+ SetReturnKeyDisable(e.State);
}
private static void ReturnKeySetEvent(object sender, ReturnKeySetEventArgs e)
{
Log.Info("NUIIME", "type : " + e.Type.ToString());
+ SetReturnKeyType(e.Type);
+
+ if (KeyboardState.Instance.VisibleState)
+ IMEShow(KeyboardState.Instance.FocusedContext);
}
private static void LayoutSetEvent(object sender, LayoutSetEventArgs e)
{
Log.Info("NUIIME", "layout : " + e.Layout.ToString());
+ KeyboardLayout newLayout = (KeyboardLayout)e.Layout;
+ KeyboardState keyboardState = KeyboardState.Instance;
+
+ if (newLayout < KeyboardLayout.Max)
+ {
+ if (keyboardState.Layout != newLayout)
+ keyboardState.NeedReset = true;
+ keyboardState.Layout = newLayout;
+ }
+
+ if (keyboardState.VisibleState)
+ IMEShow(KeyboardState.Instance.FocusedContext);
}
private static void DataSetEvent(object sender, SetDataEventArgs e)
private static void SurroundingTextUpdatedEvent(object sender, SurroundingTextUpdatedEventArgs e)
{
Log.Info("NUIIME", "context id : " + e.ContextId.ToString() + ", text : " + e.Text + ", cursor position : " + e.CursorPosition.ToString());
+ InputMethodEditor.DeleteSurroundingText(-(e.CursorPosition), e.Text.Length);
}
private static void AccessibilityStateChangedEvent(object sender, AccessibilityStateChangedEventArgs e)
Window.Instance.SetPositionSizeWithOrientation(landscapeRectangle, Window.WindowOrientation.LandscapeInverse);
}
+ private static void UpdateSpaceKey()
+ {
+ int languageNum = LanguageManager.Instance.GetLanguagesNum();
+ Log.Info("NUIIME", "language number : " + languageNum.ToString());
+
+ if (languageNum <= 1)
+ {
+ LanguageInfo languageInfo = LanguageManager.Instance.GetLanguageInfo(LanguageManager.Instance.GetCurrentLanguage());
+ if (languageInfo != null && languageInfo.Enabled)
+ {
+ SclNuiEnableButton("SPACE_ARROW_LEFT", false);
+ SclNuiEnableButton("SPACE_ARROW_RIGHT", false);
+ }
+ }
+ else
+ {
+ SclNuiEnableButton("SPACE_ARROW_LEFT", true);
+ SclNuiEnableButton("SPACE_ARROW_RIGHT", true);
+ }
+ }
+
static void Main(string[] args)
{
InputMethodEditor.Run(Create, Terminate, Show, Hide);
using System;
using System.Collections.Generic;
-using System.Linq;
+using System.IO;
using System.Runtime.InteropServices;
using Tizen;
using Tizen.Applications;
string image_path_str = Marshal.PtrToStringAnsi(image_path);
WindowAttribute.WindowType windowType = (WindowAttribute.WindowType)type;
Log.Info("NUIIME", "image: " + image_path_str + ", x: " + dest_x + ", y: " + dest_y);
- if (image_path_str.EndsWith("/"))
+
+ if (!File.Exists(image_path_str))
return;
switch (windowType)
{
ImageView imageView = image_list.Find(image => image.Position.X == dest_x && image.Position.Y == dest_y &&
image.Size.Width == dest_weight && image.Size.Height == dest_height);
-
if (imageView == null)
{
imageView = draw_image(image_path_str, dest_x, dest_y, dest_weight, dest_height, src_x, src_y, src_width, src_height);
{
keyboardState.ResetMultitapState(false);
}
-
keyboardState.PreviousModifier = (uint)keyModifier;
switch (keyType)
{
case SclNuiKeyType.None:
break;
case SclNuiKeyType.Control:
- break;
+ if (commitTimer.IsRunning())
+ {
+ commitTimer.Stop();
+ CommitTimerTick(null, null);
+ }
+
+ const string longShift = "LongShift";
+ const string capsLock = "CapsLock";
+ const string deleteAll = "DeleteAll";
+ const string hidePanel = "Hide";
+ if (keyValue.Equals(longShift))
+ {
+ Log.Info("NUIIME", "shift key is longpress");
+ SclNuiSetShiftState((uint)ShiftState.On);
+ }
+ else if (keyValue.Equals(capsLock))
+ {
+ // Sends the capsLock event to IMEngine
+ }
+ else if (keyValue.Equals(deleteAll))
+ {
+ InputMethodEditor.DeleteSurroundingText((Int32.MaxValue / 2) * -1, Int32.MaxValue);
+ }
+ else if (keyValue.Equals(hidePanel))
+ {
+ ClearClickCount();
+ SclNuiSetUpdatePending(true);
+ SclNuiDisableInputEvent(true);
+ SclNuiHide();
+
+ KeyboardState.Instance.VisibleState = false;
+ SclNuiSetShiftState((uint)ShiftState.Off);
+ KeyboardState.Instance.ResetMultitapState(true);
+ InputMethodEditor.RequestHide();
+ }
+ else if (key_event > 0)
+ {
+ Common.SendKeyEvent((KeyCode)key_event);
+ }
+ break;
case SclNuiKeyType.Modechange:
break;
case SclNuiKeyType.User:
key_text.TextColor = new Color((float)(r / 255.0), (float)(g / 255.0), (float)(b / 255.0), (float)(a / 255.0));
// FIXME
key_text.PointSize = (float)(font_size * 0.25);
-
Log.Info("NUIIME", "x(" + pos_x + "), y(" + pos_y + ")");
key_text.Position = new Position(pos_x, pos_y);
key_text.Size = new Size(width, height);