Add to set MIME type to the input panel and add the callback
[platform/core/uifw/dali-adaptor.git] / dali / internal / input / windows / input-method-context-impl-win.h
1 #ifndef DALI_INTERNAL_INPUT_METHOD_CONTEXT_IMPL_WIN_H\r
2 #define DALI_INTERNAL_INPUT_METHOD_CONTEXT_IMPL_WIN_H\r
3 \r
4 /*\r
5  * Copyright (c) 2018 Samsung Electronics Co., Ltd.\r
6  *\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  *\r
11  * http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  *\r
19  */\r
20 \r
21 // EXTERNAL INCLUDES\r
22 #include <dali/public-api/object/base-object.h>\r
23 \r
24 // INTERNAL INCLUDES\r
25 #include <dali/devel-api/adaptor-framework/input-method-context.h>\r
26 #include <dali/internal/input/common/input-method-context-impl.h>\r
27 #include <dali/internal/window-system/windows/platform-implement-win.h>\r
28 \r
29 namespace Dali\r
30 {\r
31 \r
32 class RenderSurface;\r
33 \r
34 namespace Internal\r
35 {\r
36 \r
37 namespace Adaptor\r
38 {\r
39 \r
40 class InputMethodContextWin : public Dali::Internal::Adaptor::InputMethodContext\r
41 {\r
42 public:\r
43   /**\r
44    * @brief Creates a new InputMethodContext handle\r
45    *\r
46    * @return InputMethodContext pointer\r
47    */\r
48   static InputMethodContextPtr New();\r
49 \r
50   /**\r
51    * Constructor\r
52    * @param[in] win32Window, The window is created by application.\r
53    */\r
54   explicit InputMethodContextWin( WinWindowHandle win32Window );\r
55 \r
56 public:\r
57 \r
58   /**\r
59    * @brief Initializes member data.\r
60    */\r
61   void Initialize() override;\r
62 \r
63   /**\r
64    * Connect Callbacks required for InputMethodContext.\r
65    * If you don't connect InputMethodContext callbacks, you can't get the key events.\r
66    * The events are PreeditChanged, Commit and DeleteSurrounding.\r
67    */\r
68   void ConnectCallbacks() override;\r
69 \r
70   /**\r
71    * Disconnect Callbacks attached to input method context.\r
72    */\r
73   void DisconnectCallbacks() override;\r
74 \r
75   /**\r
76    * @copydoc Dali::InputMethodContext::Finalize()\r
77    */\r
78   void Finalize() override;\r
79 \r
80   /**\r
81    * @copydoc Dali::InputMethodContext::Activate()\r
82    */\r
83   void Activate() override;\r
84 \r
85   /**\r
86    * @copydoc Dali::InputMethodContext::Deactivate()\r
87    */\r
88   void Deactivate() override;\r
89 \r
90   /**\r
91    * @copydoc Dali::InputMethodContext::Reset()\r
92    */\r
93   void Reset() override;\r
94 \r
95   /**\r
96    * @copydoc Dali::InputMethodContext::GetContext()\r
97    */\r
98   ImfContext* GetContext() override;\r
99 \r
100   /**\r
101    * @copydoc Dali::InputMethodContext::RestoreAfterFocusLost()\r
102    */\r
103   bool RestoreAfterFocusLost() const override;\r
104 \r
105   /**\r
106    * @copydoc Dali::InputMethodContext::SetRestoreAfterFocusLost()\r
107    */\r
108   void SetRestoreAfterFocusLost( bool toggle ) override;\r
109 \r
110   /**\r
111    * @copydoc Dali::InputMethodContext::PreEditChanged()\r
112    */\r
113   void PreEditChanged( void* data, ImfContext* imfContext, void* eventInfo ) override;\r
114 \r
115   /**\r
116    * @copydoc Dali::InputMethodContext::NotifyCursorPosition()\r
117    */\r
118   void CommitReceived( void* data, ImfContext* imfContext, void* eventInfo ) override;\r
119 \r
120   /**\r
121    * @copydoc Dali::InputMethodContext::NotifyCursorPosition()\r
122    */\r
123   bool RetrieveSurrounding( void* data, ImfContext* imfContext, char** text, int* cursorPosition ) override;\r
124 \r
125   /**\r
126    * @copydoc Dali::InputMethodContext::DeleteSurrounding()\r
127    */\r
128   void DeleteSurrounding( void* data, ImfContext* imfContext, void* eventInfo ) override;\r
129 \r
130   /**\r
131    * @copydoc Dali::InputMethodContext::SendPrivateCommand()\r
132    */\r
133   void SendPrivateCommand( void* data, ImfContext* imfContext, void* eventInfo ) override\r
134   {}\r
135 \r
136   /**\r
137    * @copydoc Dali::InputMethodContext::SendCommitContent()\r
138    */\r
139   void SendCommitContent( void* data, ImfContext* imfContext, void* eventInfo ) override\r
140   {}\r
141 \r
142   // Cursor related\r
143   /**\r
144    * @copydoc Dali::InputMethodContext::NotifyCursorPosition()\r
145    */\r
146   void NotifyCursorPosition() override;\r
147 \r
148   /**\r
149    * @copydoc Dali::InputMethodContext::SetCursorPosition()\r
150    */\r
151   void SetCursorPosition( unsigned int cursorPosition ) override;\r
152 \r
153   /**\r
154    * @copydoc Dali::InputMethodContext::GetCursorPosition()\r
155    */\r
156   unsigned int GetCursorPosition() const override;\r
157 \r
158   /**\r
159    * @copydoc Dali::InputMethodContext::SetSurroundingText()\r
160    */\r
161   void SetSurroundingText( const std::string& text ) override;\r
162 \r
163   /**\r
164    * @copydoc Dali::InputMethodContext::GetSurroundingText()\r
165    */\r
166   const std::string& GetSurroundingText() const override;\r
167 \r
168   /**\r
169   * @copydoc Dali::InputMethodContext::NotifyTextInputMultiLine()\r
170   */\r
171   void NotifyTextInputMultiLine( bool multiLine ) override;\r
172 \r
173   /**\r
174   * @copydoc Dali::InputMethodContext::GetTextDirection()\r
175   */\r
176   Dali::InputMethodContext::TextDirection GetTextDirection() override;\r
177 \r
178   /**\r
179   * @copydoc Dali::InputMethodContext::GetInputMethodArea()\r
180   */\r
181   Dali::Rect<int> GetInputMethodArea() override;\r
182 \r
183   /**\r
184   * @copydoc Dali::InputMethodContext::ApplyOptions()\r
185   */\r
186   void ApplyOptions( const InputMethodOptions& options ) override;\r
187 \r
188   /**\r
189    * @copydoc Dali::InputMethodContext::SetInputPanelData()\r
190    */\r
191   void SetInputPanelData( const std::string& data ) override;\r
192 \r
193   /**\r
194    * @copydoc Dali::InputMethodContext::GetInputPanelData()\r
195    */\r
196   void GetInputPanelData( std::string& data ) override;\r
197 \r
198   /**\r
199    * @copydoc Dali::InputMethodContext::GetInputPanelState()\r
200    */\r
201   Dali::InputMethodContext::State GetInputPanelState() override;\r
202 \r
203   /**\r
204    * @copydoc Dali::InputMethodContext::SetReturnKeyState()\r
205    */\r
206   void SetReturnKeyState( bool visible ) override;\r
207 \r
208   /**\r
209    * @copydoc Dali::InputMethodContext::AutoEnableInputPanel()\r
210    */\r
211   void AutoEnableInputPanel( bool enabled ) override;\r
212 \r
213   /**\r
214    * @copydoc Dali::InputMethodContext::ShowInputPanel()\r
215    */\r
216   void ShowInputPanel() override;\r
217 \r
218   /**\r
219    * @copydoc Dali::InputMethodContext::HideInputPanel()\r
220    */\r
221   void HideInputPanel() override;\r
222 \r
223   /**\r
224    * @copydoc Dali::InputMethodContext::GetKeyboardType()\r
225    */\r
226   Dali::InputMethodContext::KeyboardType GetKeyboardType() override;\r
227 \r
228   /**\r
229    * @copydoc Dali::InputMethodContext::GetInputPanelLocale()\r
230    */\r
231   std::string GetInputPanelLocale() override;\r
232 \r
233   /**\r
234    * @copydoc Dali::InputMethodContext::SetContentMIMETypes()\r
235    */\r
236   void SetContentMIMETypes( const std::string& mimeTypes ) override;\r
237 \r
238   /**\r
239    * @copydoc Dali::InputMethodContext::FilterEventKey()\r
240    */\r
241   bool FilterEventKey( const Dali::KeyEvent& keyEvent ) override;\r
242 \r
243   /**\r
244    * @copydoc Dali::InputMethodContext::SetInputPanelLanguage()\r
245    */\r
246   void SetInputPanelLanguage( Dali::InputMethodContext::InputPanelLanguage language ) override;\r
247 \r
248   /**\r
249    * @copydoc Dali::InputMethodContext::GetInputPanelLanguage()\r
250    */\r
251   Dali::InputMethodContext::InputPanelLanguage GetInputPanelLanguage() const override;\r
252 \r
253 private:\r
254   /**\r
255    * Context created the first time and kept until deleted.\r
256    * @param[in] win32Window, The window is created by application.\r
257    */\r
258   void CreateContext( WinWindowHandle win32Window );\r
259 \r
260   /**\r
261    * @copydoc Dali::InputMethodContext::DeleteContext()\r
262    */\r
263   void DeleteContext();\r
264 \r
265 private:\r
266 \r
267   /**\r
268    * @brief Process event key down, whether filter a key to isf.\r
269    *\r
270    * @param[in] keyEvent The event key to be handled.\r
271    * @return Whether the event key is handled.\r
272    */\r
273   bool ProcessEventKeyDown( const KeyEvent& keyEvent );\r
274 \r
275   /**\r
276    * @brief Process event key up, whether filter a key to isf.\r
277    *\r
278    * @param[in] keyEvent The event key to be handled.\r
279    * @return Whether the event key is handled.\r
280    */\r
281   bool ProcessEventKeyUp( const KeyEvent& keyEvent );\r
282 \r
283 public:\r
284 \r
285   /**\r
286    * Destructor.\r
287    */\r
288   virtual ~InputMethodContextWin();\r
289 \r
290 private:\r
291 \r
292   // Undefined copy constructor\r
293   InputMethodContextWin( const InputMethodContextWin& inputMethodContext) = delete;\r
294 \r
295   // Undefined assignment operator\r
296   InputMethodContextWin& operator=( const InputMethodContextWin& inputMethodContext ) = delete;\r
297 \r
298 private:\r
299   WinWindowHandle mWin32Window;\r
300   int mIMFCursorPosition;\r
301   std::string mSurroundingText;\r
302 \r
303   bool mRestoreAfterFocusLost:1;             ///< Whether the keyboard needs to be restored (activated ) after focus regained.\r
304   bool mIdleCallbackConnected:1;             ///< Whether the idle callback is already connected.\r
305   InputMethodOptions        mOptions;\r
306 };\r
307 \r
308 } // namespace Adaptor\r
309 \r
310 } // namespace Internal\r
311 \r
312 } // namespace Dali\r
313 \r
314 #endif // DALI_INTERNAL_INPUT_METHOD_CONTEXT_IMPL_WIN_H\r