1 #ifndef DALI_INTERNAL_INPUT_COMMON_INPUT_METHOD_CONTEXT_IMPL_H
2 #define DALI_INTERNAL_INPUT_COMMON_INPUT_METHOD_CONTEXT_IMPL_H
5 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/integration-api/events/key-event-integ.h>
23 #include <dali/public-api/actors/actor.h>
24 #include <dali/public-api/common/vector-wrapper.h>
25 #include <dali/public-api/object/base-object.h>
30 #include <dali/devel-api/adaptor-framework/input-method-context.h>
40 class InputMethodContext;
41 typedef IntrusivePtr<InputMethodContext> InputMethodContextPtr;
42 using ImfContext = void;
44 class InputMethodContext : public Dali::BaseObject
47 using ActivatedSignalType = Dali::InputMethodContext::ActivatedSignalType;
48 using KeyboardEventSignalType = Dali::InputMethodContext::KeyboardEventSignalType;
49 using StatusSignalType = Dali::InputMethodContext::StatusSignalType;
50 using VoidSignalType = Dali::InputMethodContext::VoidSignalType;
51 using KeyboardTypeSignalType = Dali::InputMethodContext::KeyboardTypeSignalType;
52 using LanguageChangedSignalType = Dali::InputMethodContext::LanguageChangedSignalType;
53 using KeyboardResizedSignalType = Dali::InputMethodContext::KeyboardResizedSignalType;
54 using ContentReceivedSignalType = Dali::InputMethodContext::ContentReceivedSignalType;
58 * Create a new input method context instance.
60 static InputMethodContextPtr New(Dali::Actor actor);
63 * Initialize the object.
65 virtual void Initialize()
70 * Connect Callbacks required for InputMethodContext.
71 * If you don't connect InputMethodContext callbacks, you can't get the key events.
72 * The events are PreeditChanged, Commit, DeleteSurrounding and PrivateCommand.
74 virtual void ConnectCallbacks()
79 * Disconnect Callbacks attached to input method context.
81 virtual void DisconnectCallbacks()
86 * @copydoc Dali::InputMethodContext::Finalize()
88 virtual void Finalize()
93 * @copydoc Dali::InputMethodContext::Activate()
95 virtual void Activate()
100 * @copydoc Dali::InputMethodContext::Deactivate()
102 virtual void Deactivate()
107 * @copydoc Dali::InputMethodContext::Reset()
114 * @copydoc Dali::InputMethodContext::GetContext()
116 virtual ImfContext* GetContext()
122 * @copydoc Dali::InputMethodContext::RestoreAfterFocusLost()
124 virtual bool RestoreAfterFocusLost() const
130 * @copydoc Dali::InputMethodContext::SetRestoreAfterFocusLost()
132 virtual void SetRestoreAfterFocusLost(bool toggle)
137 * @copydoc Dali::InputMethodContext::PreEditChanged()
139 virtual void PreEditChanged(void* data, ImfContext* imfContext, void* eventInfo)
144 * @copydoc Dali::InputMethodContext::CommitReceived()
146 virtual void CommitReceived(void* data, ImfContext* imfContext, void* eventInfo)
151 * @copydoc Dali::InputMethodContext::RetrieveSurrounding()
154 virtual bool RetrieveSurrounding(void* data, ImfContext* imfContext, char** text, int* cursorPosition)
160 * @copydoc Dali::InputMethodContext::DeleteSurrounding()
162 virtual void DeleteSurrounding(void* data, ImfContext* imfContext, void* eventInfo)
167 * @copydoc Dali::InputMethodContext::SendPrivateCommand()
169 virtual void SendPrivateCommand(void* data, ImfContext* imfContext, void* eventInfo)
174 * @copydoc Dali::InputMethodContext::SendCommitContent()
176 virtual void SendCommitContent(void* data, ImfContext* imfContext, void* eventInfo)
182 * @copydoc Dali::InputMethodContext::NotifyCursorPosition()
184 virtual void NotifyCursorPosition()
189 * @copydoc Dali::InputMethodContext::SetCursorPosition()
191 virtual void SetCursorPosition(unsigned int cursorPosition)
196 * @copydoc Dali::InputMethodContext::GetCursorPosition()
198 virtual unsigned int GetCursorPosition() const
204 * @copydoc Dali::InputMethodContext::SetSurroundingText()
206 virtual void SetSurroundingText(const std::string& text)
211 * @copydoc Dali::InputMethodContext::GetSurroundingText()
213 virtual const std::string& GetSurroundingText() const;
216 * @copydoc Dali::InputMethodContext::NotifyTextInputMultiLine()
218 virtual void NotifyTextInputMultiLine(bool multiLine)
223 * @copydoc Dali::InputMethodContext::GetTextDirection()
225 virtual Dali::InputMethodContext::TextDirection GetTextDirection()
227 return Dali::InputMethodContext::TextDirection();
231 * @copydoc Dali::InputMethodContext::GetInputMethodArea()
233 virtual Dali::Rect<int> GetInputMethodArea()
235 return Dali::Rect<int>();
239 * @copydoc Dali::InputMethodContext::ApplyOptions()
241 virtual void ApplyOptions(const InputMethodOptions& options)
246 * @copydoc Dali::InputMethodContext::SetInputPanelData()
248 virtual void SetInputPanelData(const std::string& data)
253 * @copydoc Dali::InputMethodContext::GetInputPanelData()
255 virtual void GetInputPanelData(std::string& data)
260 * @copydoc Dali::InputMethodContext::GetInputPanelState()
262 virtual Dali::InputMethodContext::State GetInputPanelState()
264 return Dali::InputMethodContext::State();
268 * @copydoc Dali::InputMethodContext::SetReturnKeyState()
270 virtual void SetReturnKeyState(bool visible)
275 * @copydoc Dali::InputMethodContext::AutoEnableInputPanel()
277 virtual void AutoEnableInputPanel(bool enabled)
282 * @copydoc Dali::InputMethodContext::ShowInputPanel()
284 virtual void ShowInputPanel()
289 * @copydoc Dali::InputMethodContext::HideInputPanel()
291 virtual void HideInputPanel()
296 * @copydoc Dali::InputMethodContext::GetKeyboardType()
298 virtual Dali::InputMethodContext::KeyboardType GetKeyboardType()
300 return Dali::InputMethodContext::KeyboardType();
304 * @copydoc Dali::InputMethodContext::GetInputPanelLocale()
306 virtual std::string GetInputPanelLocale()
308 return std::string();
312 * @copydoc Dali::InputMethodContext::SetContentMIMETypes()
314 virtual void SetContentMIMETypes(const std::string& mimeTypes)
319 * @copydoc Dali::InputMethodContext::FilterEventKey()
321 virtual bool FilterEventKey(const Dali::KeyEvent& keyEvent)
327 * @copydoc Dali::InputMethodContext::AllowTextPrediction()
329 virtual void AllowTextPrediction(bool prediction)
334 * @copydoc Dali::InputMethodContext::IsTextPredictionAllowed()
336 virtual bool IsTextPredictionAllowed() const
342 * @copydoc Dali::InputMethodContext::SetInputPanelLanguage()
344 virtual void SetInputPanelLanguage(Dali::InputMethodContext::InputPanelLanguage language)
349 * @copydoc Dali::InputMethodContext::GetInputPanelLanguage()
351 virtual Dali::InputMethodContext::InputPanelLanguage GetInputPanelLanguage() const
353 return Dali::InputMethodContext::InputPanelLanguage();
357 * @copydoc Dali::InputMethodContext::SetInputPanelPosition()
359 virtual void SetInputPanelPosition(unsigned int x, unsigned int y)
364 * @copydoc Dali::InputMethodContext::GetPreeditStyle()
366 virtual void GetPreeditStyle(Dali::InputMethodContext::PreEditAttributeDataContainer& attrs) const
372 * @copydoc Dali::InputMethodContext::ActivatedSignal()
374 ActivatedSignalType& ActivatedSignal()
376 return mActivatedSignal;
380 * @copydoc Dali::InputMethodContext::EventReceivedSignal()
382 KeyboardEventSignalType& EventReceivedSignal()
388 * @copydoc Dali::InputMethodContext::StatusChangedSignal()
390 StatusSignalType& StatusChangedSignal()
392 return mKeyboardStatusSignal;
396 * @copydoc Dali::InputMethodContext::ResizedSignal()
398 KeyboardResizedSignalType& ResizedSignal()
400 return mKeyboardResizeSignal;
404 * @copydoc Dali::InputMethodContext::LanguageChangedSignal()
406 LanguageChangedSignalType& LanguageChangedSignal()
408 return mKeyboardLanguageChangedSignal;
412 * @copydoc Dali::InputMethodContext::KeyboardTypeChangedSignal()
414 KeyboardTypeSignalType& KeyboardTypeChangedSignal()
416 return mKeyboardTypeChangedSignal;
420 * @copydoc Dali::InputMethodContext::ContentReceivedSignal()
422 ContentReceivedSignalType& ContentReceivedSignal()
424 return mContentReceivedSignal;
431 InputMethodContext();
436 ~InputMethodContext() override = default;
439 InputMethodContext(const InputMethodContext&) = delete;
440 InputMethodContext& operator=(InputMethodContext&) = delete;
444 * @brief Struct for providing Operation enumeration
450 ALLOW_TEXT_PREDICTION = 0,
451 AUTO_ENABLE_INPUT_PANEL,
452 NOTIFY_TEXT_INPUT_MULTILINE,
453 SET_CONTENT_MIME_TYPES,
454 SET_INPUT_PANEL_DATA,
455 SET_INPUT_PANEL_LANGUAGE,
456 SET_INPUT_PANEL_POSITION,
457 SET_RETURN_KEY_STATE,
462 using OperationList = std::vector<std::function<void()> >;
465 * @brief Apply backup operations to the InputMethodContext
467 void ApplyBackupOperations();
470 ActivatedSignalType mActivatedSignal;
471 KeyboardEventSignalType mEventSignal;
472 StatusSignalType mKeyboardStatusSignal;
473 KeyboardResizedSignalType mKeyboardResizeSignal;
474 LanguageChangedSignalType mKeyboardLanguageChangedSignal;
475 KeyboardTypeSignalType mKeyboardTypeChangedSignal;
476 ContentReceivedSignalType mContentReceivedSignal;
477 OperationList mBackupOperations;
480 inline static Internal::Adaptor::InputMethodContext& GetImplementation(Dali::InputMethodContext& inputMethodContext)
482 DALI_ASSERT_ALWAYS(inputMethodContext && "InputMethodContext handle is empty");
484 BaseObject& handle = inputMethodContext.GetBaseObject();
486 return static_cast<Internal::Adaptor::InputMethodContext&>(handle);
489 inline static const Internal::Adaptor::InputMethodContext& GetImplementation(const Dali::InputMethodContext& inputMethodContext)
491 DALI_ASSERT_ALWAYS(inputMethodContext && "InputMethodContext handle is empty");
493 const BaseObject& handle = inputMethodContext.GetBaseObject();
495 return static_cast<const Internal::Adaptor::InputMethodContext&>(handle);
499 } // namespace Adaptor
501 } // namespace Internal
505 #endif // DALI_INTERNAL_INPUT_COMMON_INPUT_METHOD_CONTEXT_IMPL_H