[NUI] Merge branch 'devel/nui'
[platform/core/csapi/tizenfx.git] / NUIsamples / NUIsamples / src / examples / text-test2.cs
1 /*
2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
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.NUI;
21 using Tizen.NUI.UIComponents;
22 using Tizen.NUI.BaseComponents;
23 using Tizen.NUI.Constants;
24
25 namespace TextTest2
26 {
27     class Example : NUIApplication
28     {
29         public Example() : base()
30         {
31         }
32
33         public Example(string stylesheet) : base(stylesheet)
34         {
35         }
36
37         public Example(string stylesheet, WindowMode windowMode) : base(stylesheet, windowMode)
38         {
39         }
40
41         protected override void OnCreate()
42         {
43             base.OnCreate();
44             Initialize();
45         }
46
47         private PushButton button;
48         private TextEditor editor;
49         private ImfManager imfManager;
50
51
52         public void Initialize()
53         {
54             Window window = Window.Instance;
55             window.BackgroundColor = Color.White;
56
57             PropertyMap propertyMap = new PropertyMap();
58             propertyMap.Add("placeholderText", new PropertyValue("TextEditor Placeholder Text"));
59             propertyMap.Add("placeholderColor", new PropertyValue(Color.Red));
60             propertyMap.Add("placeholderPointSize", new PropertyValue(12.0f));
61
62             PropertyMap fontStyleMap = new PropertyMap();
63             fontStyleMap.Add("weight", new PropertyValue("bold"));
64             fontStyleMap.Add("width", new PropertyValue("condensed"));
65             fontStyleMap.Add("slant", new PropertyValue("italic"));
66             propertyMap.Add("placeholderFontStyle", new PropertyValue(fontStyleMap));
67
68
69             editor = new TextEditor()
70             {
71                 Size2D = new Size2D(500, 300),
72                 Position2D = new Position2D(10, 550),
73                 BackgroundColor = Color.Magenta,
74                 Focusable = true,
75                 Placeholder = propertyMap
76             };
77
78             window.Add(editor);
79
80             editor.TextChanged += (obj, e) => {
81                 Tizen.Log.Fatal("NUI", "editor line count: " + e.TextEditor.LineCount);
82             };
83
84             editor.ScrollStateChanged += (obj, e) => {
85                 Tizen.Log.Fatal("NUI", "editor scroll state:" + e.ScrollState);
86             };
87
88             editor.KeyEvent += OnKeyEvent;
89
90
91             Tizen.Log.Debug("NUI", "editor id: " + editor.ID);
92
93             imfManager = ImfManager.Get();
94             imfManager.AutoEnableInputPanel(false);
95             imfManager.SetInputPanelUserData("layouttype = 1 & entrylimit = 255 & action = clearall_for_voice_commit & caller = org.volt.search - all");
96
97
98             // send privatecommand event
99             ImfManager.ImfEventData imfevent = new ImfManager.ImfEventData(ImfManager.ImfEvent.PrivateCommand, "", 0, 0);
100             imfManager.EventReceived += ImfManager_ImfManagerEventReceived;
101
102             imfManager.LanguageChanged += ImfManager_LanguageChanged;
103
104             imfManager.Activated += (obj, e) => {
105                 Tizen.Log.Debug("NUI", "ImfManager Activated !!!!!");
106             };
107             imfManager.StatusChanged += (obj, e) => {
108                 Tizen.Log.Debug("NUI", "ImfManager StatusChanged: !!!!!" + e.StatusChanged);
109             };
110             imfManager.Resized += (obj, e) =>
111             {
112                 Tizen.Log.Debug("NUI", "ImfManager Resized !!!!!");
113             };
114             imfManager.KeyboardTypeChanged += (obj, e) => {
115                 Tizen.Log.Debug("NUI", "ImfManager KeyboardTypeChanged: !!!!!" + e.KeyboardType);
116             };
117
118             button = new PushButton()
119             {
120                 LabelText = "Button",
121                 Size2D = new Size2D(400, 200),
122                 Position2D = new Position2D(10, -10),
123                 ParentOrigin = ParentOrigin.BottomLeft,
124                 PivotPoint = PivotPoint.BottomLeft,
125                 PositionUsesPivotPoint = true,
126                 Focusable = true
127             };
128
129             window.Add(button);
130
131             button.UpFocusableView = editor;
132             editor.DownFocusableView = button;
133
134             FocusManager.Instance.SetCurrentFocusView(button);
135         }
136
137         private bool OnKeyEvent(object source, View.KeyEventArgs e)
138         {
139             Tizen.Log.Debug("NUI", "KeyEvent called !!!!!");
140             if (e.Key.State != Key.StateType.Down || editor.Focusable == false)
141             {
142                 Tizen.Log.Debug("NUI", "KeyEvent ignored !!!!!");
143                 return false;
144             }
145             switch (e.Key.KeyPressedName)
146             {
147                 case "Return":
148                     Tizen.Log.Debug("NUI", "KeyPressedName: Return !!!!!");
149                     ShowImf();
150                     return true;
151                 case "Select":
152                     Tizen.Log.Debug("NUI", "KeyPressedName: Select !!!!!");
153                     HideImf();
154                     return true;
155                 case "Cancel":
156                     Tizen.Log.Debug("NUI", "KeyPressedName: Cancel !!!!!");
157                     HideImf();
158                     return true;
159                 case "Down":
160                     Tizen.Log.Debug("NUI", "KeyPressedName: Down !!!!!");
161                     HideImf();
162                     return MoveFocusTo(button);
163             }
164             return false;
165         }
166
167         private void ShowImf()
168         {
169             imfManager.Activate();
170             imfManager.ShowInputPanel();
171             Tizen.Log.Debug("NUI", "IME showed !!!!!");
172         }
173
174         private bool MoveFocusTo(View view)
175         {
176             if (view == null) return false;
177             return FocusManager.Instance.SetCurrentFocusView(view);
178         }
179
180         private void HideImf()
181         {
182             imfManager.Deactivate();
183             imfManager.HideInputPanel();
184             Tizen.Log.Debug("NUI", "IME hided !!!!!");
185         }
186
187         public ImfManager.ImfCallbackData ImfManager_ImfManagerEventReceived(object sender, ImfManager.EventReceivedEventArgs e)
188         {
189             Tizen.Log.Debug("NUI", "ImfManager_ImfManagerEventReceived()!");
190
191             Tizen.Log.Debug("NUI", "e.ImfEventData.PredictiveString= " + e?.ImfEventData?.PredictiveString);
192             Tizen.Log.Debug("NUI", "e.ImfEventData.CursorOffset= " + e?.ImfEventData?.CursorOffset);
193             Tizen.Log.Debug("NUI", "e.ImfEventData.EventName= " + e?.ImfEventData?.EventName);
194             Tizen.Log.Debug("NUI", "e.ImfEventData.NumberOfChars= " + e?.ImfEventData?.NumberOfChars);
195
196             //Be able to compare VD specific private command with ImfEventData.predictiveString
197             if (e.ImfEventData.PredictiveString == "IME_F31")
198             {
199                 ImfManager.Get().Deactivate();
200                 ImfManager.Get().HideInputPanel();
201                 // Do Something the user wants
202                 Tizen.Log.Debug("NUI", "ImfManager ImfEventData.PredictiveString: IME_F31!!!");
203             }
204             ImfManager.ImfCallbackData callbackData = new ImfManager.ImfCallbackData(true, 0, e.ImfEventData.PredictiveString, false);
205             Tizen.Log.Debug("NUI", "ImfManager return callbackData!!!");
206             return callbackData;
207         }
208
209         public void ImfManager_LanguageChanged(object sender, EventArgs args)
210         {
211             Tizen.Log.Debug("NUI", "ImfManager LanguageChanged!!!");
212             return;
213         }
214
215         [STAThread]
216         static void _Main(string[] args)
217         {
218             Example example = new Example();
219             example.Run(args);
220         }
221     }
222 }