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) 2022 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)
181 * @copydoc Dali::InputMethodContext::SendSelectionSet()
183 virtual void SendSelectionSet(void* data, ImfContext* imfContext, void* eventInfo)
189 * @copydoc Dali::InputMethodContext::NotifyCursorPosition()
191 virtual void NotifyCursorPosition()
196 * @copydoc Dali::InputMethodContext::SetCursorPosition()
198 virtual void SetCursorPosition(unsigned int cursorPosition)
203 * @copydoc Dali::InputMethodContext::GetCursorPosition()
205 virtual unsigned int GetCursorPosition() const
211 * @copydoc Dali::InputMethodContext::SetSurroundingText()
213 virtual void SetSurroundingText(const std::string& text)
218 * @copydoc Dali::InputMethodContext::GetSurroundingText()
220 virtual const std::string& GetSurroundingText() const;
223 * @copydoc Dali::InputMethodContext::NotifyTextInputMultiLine()
225 virtual void NotifyTextInputMultiLine(bool multiLine)
230 * @copydoc Dali::InputMethodContext::GetTextDirection()
232 virtual Dali::InputMethodContext::TextDirection GetTextDirection()
234 return Dali::InputMethodContext::TextDirection();
238 * @copydoc Dali::InputMethodContext::GetInputMethodArea()
240 virtual Dali::Rect<int> GetInputMethodArea()
242 return Dali::Rect<int>();
246 * @copydoc Dali::InputMethodContext::ApplyOptions()
248 virtual void ApplyOptions(const InputMethodOptions& options)
253 * @copydoc Dali::InputMethodContext::SetInputPanelData()
255 virtual void SetInputPanelData(const std::string& data)
260 * @copydoc Dali::InputMethodContext::GetInputPanelData()
262 virtual void GetInputPanelData(std::string& data)
267 * @copydoc Dali::InputMethodContext::GetInputPanelState()
269 virtual Dali::InputMethodContext::State GetInputPanelState()
271 return Dali::InputMethodContext::State();
275 * @copydoc Dali::InputMethodContext::SetReturnKeyState()
277 virtual void SetReturnKeyState(bool visible)
282 * @copydoc Dali::InputMethodContext::AutoEnableInputPanel()
284 virtual void AutoEnableInputPanel(bool enabled)
289 * @copydoc Dali::InputMethodContext::ShowInputPanel()
291 virtual void ShowInputPanel()
296 * @copydoc Dali::InputMethodContext::HideInputPanel()
298 virtual void HideInputPanel()
303 * @copydoc Dali::InputMethodContext::GetKeyboardType()
305 virtual Dali::InputMethodContext::KeyboardType GetKeyboardType()
307 return Dali::InputMethodContext::KeyboardType();
311 * @copydoc Dali::InputMethodContext::GetInputPanelLocale()
313 virtual std::string GetInputPanelLocale()
315 return std::string();
319 * @copydoc Dali::InputMethodContext::SetContentMIMETypes()
321 virtual void SetContentMIMETypes(const std::string& mimeTypes)
326 * @copydoc Dali::InputMethodContext::FilterEventKey()
328 virtual bool FilterEventKey(const Dali::KeyEvent& keyEvent)
334 * @copydoc Dali::InputMethodContext::AllowTextPrediction()
336 virtual void AllowTextPrediction(bool prediction)
341 * @copydoc Dali::InputMethodContext::IsTextPredictionAllowed()
343 virtual bool IsTextPredictionAllowed() const
349 * @copydoc Dali::InputMethodContext::SetInputPanelLanguage()
351 virtual void SetInputPanelLanguage(Dali::InputMethodContext::InputPanelLanguage language)
356 * @copydoc Dali::InputMethodContext::GetInputPanelLanguage()
358 virtual Dali::InputMethodContext::InputPanelLanguage GetInputPanelLanguage() const
360 return Dali::InputMethodContext::InputPanelLanguage();
364 * @copydoc Dali::InputMethodContext::SetInputPanelPosition()
366 virtual void SetInputPanelPosition(unsigned int x, unsigned int y)
371 * @copydoc Dali::InputMethodContext::SetInputPanelPositionAlign()
373 virtual bool SetInputPanelPositionAlign(int x, int y, Dali::InputMethodContext::InputPanelAlign align)
379 * @copydoc Dali::InputMethodContext::GetPreeditStyle()
381 virtual void GetPreeditStyle(Dali::InputMethodContext::PreEditAttributeDataContainer& attrs) const
387 * @copydoc Dali::InputMethodContext::ActivatedSignal()
389 ActivatedSignalType& ActivatedSignal()
391 return mActivatedSignal;
395 * @copydoc Dali::InputMethodContext::EventReceivedSignal()
397 KeyboardEventSignalType& EventReceivedSignal()
403 * @copydoc Dali::InputMethodContext::StatusChangedSignal()
405 StatusSignalType& StatusChangedSignal()
407 return mKeyboardStatusSignal;
411 * @copydoc Dali::InputMethodContext::ResizedSignal()
413 KeyboardResizedSignalType& ResizedSignal()
415 return mKeyboardResizeSignal;
419 * @copydoc Dali::InputMethodContext::LanguageChangedSignal()
421 LanguageChangedSignalType& LanguageChangedSignal()
423 return mKeyboardLanguageChangedSignal;
427 * @copydoc Dali::InputMethodContext::KeyboardTypeChangedSignal()
429 KeyboardTypeSignalType& KeyboardTypeChangedSignal()
431 return mKeyboardTypeChangedSignal;
435 * @copydoc Dali::InputMethodContext::ContentReceivedSignal()
437 ContentReceivedSignalType& ContentReceivedSignal()
439 return mContentReceivedSignal;
446 InputMethodContext();
451 ~InputMethodContext() override = default;
454 InputMethodContext(const InputMethodContext&) = delete;
455 InputMethodContext& operator=(InputMethodContext&) = delete;
459 * @brief Struct for providing Operation enumeration
465 ALLOW_TEXT_PREDICTION = 0,
466 AUTO_ENABLE_INPUT_PANEL,
467 NOTIFY_TEXT_INPUT_MULTILINE,
468 SET_CONTENT_MIME_TYPES,
469 SET_INPUT_PANEL_DATA,
470 SET_INPUT_PANEL_LANGUAGE,
471 SET_INPUT_PANEL_POSITION,
472 SET_INPUT_PANEL_POSITION_ALIGN,
473 SET_RETURN_KEY_STATE,
478 using OperationList = std::vector<std::function<void()> >;
481 * @brief Apply backup operations to the InputMethodContext
483 void ApplyBackupOperations();
486 ActivatedSignalType mActivatedSignal;
487 KeyboardEventSignalType mEventSignal;
488 StatusSignalType mKeyboardStatusSignal;
489 KeyboardResizedSignalType mKeyboardResizeSignal;
490 LanguageChangedSignalType mKeyboardLanguageChangedSignal;
491 KeyboardTypeSignalType mKeyboardTypeChangedSignal;
492 ContentReceivedSignalType mContentReceivedSignal;
493 OperationList mBackupOperations;
496 inline static Internal::Adaptor::InputMethodContext& GetImplementation(Dali::InputMethodContext& inputMethodContext)
498 DALI_ASSERT_ALWAYS(inputMethodContext && "InputMethodContext handle is empty");
500 BaseObject& handle = inputMethodContext.GetBaseObject();
502 return static_cast<Internal::Adaptor::InputMethodContext&>(handle);
505 inline static const Internal::Adaptor::InputMethodContext& GetImplementation(const Dali::InputMethodContext& inputMethodContext)
507 DALI_ASSERT_ALWAYS(inputMethodContext && "InputMethodContext handle is empty");
509 const BaseObject& handle = inputMethodContext.GetBaseObject();
511 return static_cast<const Internal::Adaptor::InputMethodContext&>(handle);
515 } // namespace Adaptor
517 } // namespace Internal
521 #endif // DALI_INTERNAL_INPUT_COMMON_INPUT_METHOD_CONTEXT_IMPL_H