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) 2019 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/public-api/common/vector-wrapper.h>
23 #include <dali/public-api/object/base-object.h>
24 #include <dali/integration-api/events/key-event-integ.h>
27 #include <dali/devel-api/adaptor-framework/input-method-context.h>
41 class InputMethodContext;
42 typedef IntrusivePtr< InputMethodContext > InputMethodContextPtr;
43 using ImfContext = void;
45 class InputMethodContext : public Dali::BaseObject
50 using ActivatedSignalType = Dali::InputMethodContext::ActivatedSignalType;
51 using KeyboardEventSignalType = Dali::InputMethodContext::KeyboardEventSignalType;
52 using StatusSignalType = Dali::InputMethodContext::StatusSignalType;
53 using VoidSignalType = Dali::InputMethodContext::VoidSignalType;
54 using KeyboardTypeSignalType = Dali::InputMethodContext::KeyboardTypeSignalType;
55 using LanguageChangedSignalType = Dali::InputMethodContext::LanguageChangedSignalType;
56 using KeyboardResizedSignalType = Dali::InputMethodContext::KeyboardResizedSignalType;
61 * Create a new input method context instance.
63 static InputMethodContextPtr New();
66 * Initialize the object.
68 virtual void Initialize() {}
71 * Connect Callbacks required for InputMethodContext.
72 * If you don't connect InputMethodContext callbacks, you can't get the key events.
73 * The events are PreeditChanged, Commit, DeleteSurrounding and PrivateCommand.
75 virtual void ConnectCallbacks() {}
78 * Disconnect Callbacks attached to input method context.
80 virtual void DisconnectCallbacks() {}
83 * @copydoc Dali::InputMethodContext::Finalize()
85 virtual void Finalize() {}
88 * @copydoc Dali::InputMethodContext::Activate()
90 virtual void Activate() {}
93 * @copydoc Dali::InputMethodContext::Deactivate()
95 virtual void Deactivate() {}
98 * @copydoc Dali::InputMethodContext::Reset()
100 virtual void Reset() {}
103 * @copydoc Dali::InputMethodContext::GetContext()
105 virtual ImfContext* GetContext() { return nullptr; }
108 * @copydoc Dali::InputMethodContext::RestoreAfterFocusLost()
110 virtual bool RestoreAfterFocusLost() const { return false; }
113 * @copydoc Dali::InputMethodContext::SetRestoreAfterFocusLost()
115 virtual void SetRestoreAfterFocusLost( bool toggle ) {}
118 * @copydoc Dali::InputMethodContext::PreEditChanged()
120 virtual void PreEditChanged( void *data, ImfContext* imfContext, void *event_info ) {}
123 * @copydoc Dali::InputMethodContext::CommitReceived()
125 virtual void CommitReceived( void *data, ImfContext* imfContext, void *event_info ) {}
128 * @copydoc Dali::InputMethodContext::RetrieveSurrounding()
131 virtual bool RetrieveSurrounding( void *data, ImfContext* imfContext, char** text, int* cursorPosition ) { return false; }
134 * @copydoc Dali::InputMethodContext::DeleteSurrounding()
136 virtual void DeleteSurrounding( void *data, ImfContext* imfContext, void *event_info ) {}
139 * @copydoc Dali::InputMethodContext::SendPrivateCommand()
141 virtual void SendPrivateCommand( void* data, ImfContext* imfContext, void* event_info ) {}
145 * @copydoc Dali::InputMethodContext::NotifyCursorPosition()
147 virtual void NotifyCursorPosition() {}
150 * @copydoc Dali::InputMethodContext::SetCursorPosition()
152 virtual void SetCursorPosition( unsigned int cursorPosition ) {}
155 * @copydoc Dali::InputMethodContext::GetCursorPosition()
157 virtual unsigned int GetCursorPosition() const { return 0; }
160 * @copydoc Dali::InputMethodContext::SetSurroundingText()
162 virtual void SetSurroundingText( const std::string& text ) {}
165 * @copydoc Dali::InputMethodContext::GetSurroundingText()
167 virtual const std::string& GetSurroundingText() const;
170 * @copydoc Dali::InputMethodContext::NotifyTextInputMultiLine()
172 virtual void NotifyTextInputMultiLine( bool multiLine ) {}
175 * @copydoc Dali::InputMethodContext::GetTextDirection()
177 virtual Dali::InputMethodContext::TextDirection GetTextDirection() { return Dali::InputMethodContext::TextDirection(); }
180 * @copydoc Dali::InputMethodContext::GetInputMethodArea()
182 virtual Dali::Rect<int> GetInputMethodArea() { return Dali::Rect<int>(); }
185 * @copydoc Dali::InputMethodContext::ApplyOptions()
187 virtual void ApplyOptions( const InputMethodOptions& options ) {}
190 * @copydoc Dali::InputMethodContext::SetInputPanelData()
192 virtual void SetInputPanelData( const std::string& data ) {}
195 * @copydoc Dali::InputMethodContext::GetInputPanelData()
197 virtual void GetInputPanelData( std::string& data ) {}
200 * @copydoc Dali::InputMethodContext::GetInputPanelState()
202 virtual Dali::InputMethodContext::State GetInputPanelState() { return Dali::InputMethodContext::State(); }
205 * @copydoc Dali::InputMethodContext::SetReturnKeyState()
207 virtual void SetReturnKeyState( bool visible ) {}
210 * @copydoc Dali::InputMethodContext::AutoEnableInputPanel()
212 virtual void AutoEnableInputPanel( bool enabled ) {}
215 * @copydoc Dali::InputMethodContext::ShowInputPanel()
217 virtual void ShowInputPanel() {}
220 * @copydoc Dali::InputMethodContext::HideInputPanel()
222 virtual void HideInputPanel() {}
225 * @copydoc Dali::InputMethodContext::GetKeyboardType()
227 virtual Dali::InputMethodContext::KeyboardType GetKeyboardType() { return Dali::InputMethodContext::KeyboardType(); }
230 * @copydoc Dali::InputMethodContext::GetInputPanelLocale()
232 virtual std::string GetInputPanelLocale() { return std::string(); }
235 * @copydoc Dali::InputMethodContext::FilterEventKey()
237 virtual bool FilterEventKey( const Dali::KeyEvent& keyEvent ) { return false; }
240 * @copydoc Dali::InputMethodContext::AllowTextPrediction()
242 virtual void AllowTextPrediction( bool prediction ) {}
245 * @copydoc Dali::InputMethodContext::IsTextPredictionAllowed()
247 virtual bool IsTextPredictionAllowed() const { return false; }
250 * @copydoc Dali::InputMethodContext::SetInputPanelLanguage()
252 virtual void SetInputPanelLanguage( Dali::InputMethodContext::InputPanelLanguage language ) {}
255 * @copydoc Dali::InputMethodContext::GetInputPanelLanguage()
257 virtual Dali::InputMethodContext::InputPanelLanguage GetInputPanelLanguage() const { return Dali::InputMethodContext::InputPanelLanguage(); }
262 * @copydoc Dali::InputMethodContext::ActivatedSignal()
264 ActivatedSignalType& ActivatedSignal() { return mActivatedSignal; }
267 * @copydoc Dali::InputMethodContext::EventReceivedSignal()
269 KeyboardEventSignalType& EventReceivedSignal() { return mEventSignal; }
272 * @copydoc Dali::InputMethodContext::StatusChangedSignal()
274 StatusSignalType& StatusChangedSignal() { return mKeyboardStatusSignal; }
277 * @copydoc Dali::InputMethodContext::ResizedSignal()
279 KeyboardResizedSignalType& ResizedSignal() { return mKeyboardResizeSignal; }
282 * @copydoc Dali::InputMethodContext::LanguageChangedSignal()
284 LanguageChangedSignalType& LanguageChangedSignal() { return mKeyboardLanguageChangedSignal; }
287 * @copydoc Dali::InputMethodContext::KeyboardTypeChangedSignal()
289 KeyboardTypeSignalType& KeyboardTypeChangedSignal() { return mKeyboardTypeChangedSignal; }
296 InputMethodContext() = default;
301 ~InputMethodContext() override = default;
305 InputMethodContext( const InputMethodContext& ) = delete;
306 InputMethodContext& operator=( InputMethodContext& ) = delete;
310 ActivatedSignalType mActivatedSignal;
311 KeyboardEventSignalType mEventSignal;
312 StatusSignalType mKeyboardStatusSignal;
313 KeyboardResizedSignalType mKeyboardResizeSignal;
314 LanguageChangedSignalType mKeyboardLanguageChangedSignal;
315 KeyboardTypeSignalType mKeyboardTypeChangedSignal;
319 inline static Internal::Adaptor::InputMethodContext& GetImplementation(Dali::InputMethodContext& inputMethodContext)
321 DALI_ASSERT_ALWAYS( inputMethodContext && "InputMethodContext handle is empty" );
323 BaseObject& handle = inputMethodContext.GetBaseObject();
325 return static_cast<Internal::Adaptor::InputMethodContext&>(handle);
328 inline static const Internal::Adaptor::InputMethodContext& GetImplementation(const Dali::InputMethodContext& inputMethodContext)
330 DALI_ASSERT_ALWAYS( inputMethodContext && "InputMethodContext handle is empty" );
332 const BaseObject& handle = inputMethodContext.GetBaseObject();
334 return static_cast<const Internal::Adaptor::InputMethodContext&>(handle);
340 } // namespace Adaptor
342 } // namespace Internal
346 #endif // DALI_INTERNAL_INPUT_COMMON_INPUT_METHOD_CONTEXT_IMPL_H