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;
57 using ContentReceivedSignalType = Dali::InputMethodContext::ContentReceivedSignalType;
62 * Create a new input method context instance.
64 static InputMethodContextPtr New();
67 * Initialize the object.
69 virtual void Initialize() {}
72 * Connect Callbacks required for InputMethodContext.
73 * If you don't connect InputMethodContext callbacks, you can't get the key events.
74 * The events are PreeditChanged, Commit, DeleteSurrounding and PrivateCommand.
76 virtual void ConnectCallbacks() {}
79 * Disconnect Callbacks attached to input method context.
81 virtual void DisconnectCallbacks() {}
84 * @copydoc Dali::InputMethodContext::Finalize()
86 virtual void Finalize() {}
89 * @copydoc Dali::InputMethodContext::Activate()
91 virtual void Activate() {}
94 * @copydoc Dali::InputMethodContext::Deactivate()
96 virtual void Deactivate() {}
99 * @copydoc Dali::InputMethodContext::Reset()
101 virtual void Reset() {}
104 * @copydoc Dali::InputMethodContext::GetContext()
106 virtual ImfContext* GetContext() { return nullptr; }
109 * @copydoc Dali::InputMethodContext::RestoreAfterFocusLost()
111 virtual bool RestoreAfterFocusLost() const { return false; }
114 * @copydoc Dali::InputMethodContext::SetRestoreAfterFocusLost()
116 virtual void SetRestoreAfterFocusLost( bool toggle ) {}
119 * @copydoc Dali::InputMethodContext::PreEditChanged()
121 virtual void PreEditChanged( void *data, ImfContext* imfContext, void *eventInfo ) {}
124 * @copydoc Dali::InputMethodContext::CommitReceived()
126 virtual void CommitReceived( void *data, ImfContext* imfContext, void *eventInfo ) {}
129 * @copydoc Dali::InputMethodContext::RetrieveSurrounding()
132 virtual bool RetrieveSurrounding( void *data, ImfContext* imfContext, char** text, int* cursorPosition ) { return false; }
135 * @copydoc Dali::InputMethodContext::DeleteSurrounding()
137 virtual void DeleteSurrounding( void *data, ImfContext* imfContext, void *eventInfo ) {}
140 * @copydoc Dali::InputMethodContext::SendPrivateCommand()
142 virtual void SendPrivateCommand( void* data, ImfContext* imfContext, void* eventInfo ) {}
145 * @copydoc Dali::InputMethodContext::SendCommitContent()
147 virtual void SendCommitContent( void* data, ImfContext* imfContext, void* eventInfo ) {}
151 * @copydoc Dali::InputMethodContext::NotifyCursorPosition()
153 virtual void NotifyCursorPosition() {}
156 * @copydoc Dali::InputMethodContext::SetCursorPosition()
158 virtual void SetCursorPosition( unsigned int cursorPosition ) {}
161 * @copydoc Dali::InputMethodContext::GetCursorPosition()
163 virtual unsigned int GetCursorPosition() const { return 0; }
166 * @copydoc Dali::InputMethodContext::SetSurroundingText()
168 virtual void SetSurroundingText( const std::string& text ) {}
171 * @copydoc Dali::InputMethodContext::GetSurroundingText()
173 virtual const std::string& GetSurroundingText() const;
176 * @copydoc Dali::InputMethodContext::NotifyTextInputMultiLine()
178 virtual void NotifyTextInputMultiLine( bool multiLine ) {}
181 * @copydoc Dali::InputMethodContext::GetTextDirection()
183 virtual Dali::InputMethodContext::TextDirection GetTextDirection() { return Dali::InputMethodContext::TextDirection(); }
186 * @copydoc Dali::InputMethodContext::GetInputMethodArea()
188 virtual Dali::Rect<int> GetInputMethodArea() { return Dali::Rect<int>(); }
191 * @copydoc Dali::InputMethodContext::ApplyOptions()
193 virtual void ApplyOptions( const InputMethodOptions& options ) {}
196 * @copydoc Dali::InputMethodContext::SetInputPanelData()
198 virtual void SetInputPanelData( const std::string& data ) {}
201 * @copydoc Dali::InputMethodContext::GetInputPanelData()
203 virtual void GetInputPanelData( std::string& data ) {}
206 * @copydoc Dali::InputMethodContext::GetInputPanelState()
208 virtual Dali::InputMethodContext::State GetInputPanelState() { return Dali::InputMethodContext::State(); }
211 * @copydoc Dali::InputMethodContext::SetReturnKeyState()
213 virtual void SetReturnKeyState( bool visible ) {}
216 * @copydoc Dali::InputMethodContext::AutoEnableInputPanel()
218 virtual void AutoEnableInputPanel( bool enabled ) {}
221 * @copydoc Dali::InputMethodContext::ShowInputPanel()
223 virtual void ShowInputPanel() {}
226 * @copydoc Dali::InputMethodContext::HideInputPanel()
228 virtual void HideInputPanel() {}
231 * @copydoc Dali::InputMethodContext::GetKeyboardType()
233 virtual Dali::InputMethodContext::KeyboardType GetKeyboardType() { return Dali::InputMethodContext::KeyboardType(); }
236 * @copydoc Dali::InputMethodContext::GetInputPanelLocale()
238 virtual std::string GetInputPanelLocale() { return std::string(); }
241 * @copydoc Dali::InputMethodContext::SetContentMIMETypes()
243 virtual void SetContentMIMETypes( const std::string& mimeTypes ) {}
246 * @copydoc Dali::InputMethodContext::FilterEventKey()
248 virtual bool FilterEventKey( const Dali::KeyEvent& keyEvent ) { return false; }
251 * @copydoc Dali::InputMethodContext::AllowTextPrediction()
253 virtual void AllowTextPrediction( bool prediction ) {}
256 * @copydoc Dali::InputMethodContext::IsTextPredictionAllowed()
258 virtual bool IsTextPredictionAllowed() const { return false; }
261 * @copydoc Dali::InputMethodContext::SetInputPanelLanguage()
263 virtual void SetInputPanelLanguage( Dali::InputMethodContext::InputPanelLanguage language ) {}
266 * @copydoc Dali::InputMethodContext::GetInputPanelLanguage()
268 virtual Dali::InputMethodContext::InputPanelLanguage GetInputPanelLanguage() const { return Dali::InputMethodContext::InputPanelLanguage(); }
273 * @copydoc Dali::InputMethodContext::ActivatedSignal()
275 ActivatedSignalType& ActivatedSignal() { return mActivatedSignal; }
278 * @copydoc Dali::InputMethodContext::EventReceivedSignal()
280 KeyboardEventSignalType& EventReceivedSignal() { return mEventSignal; }
283 * @copydoc Dali::InputMethodContext::StatusChangedSignal()
285 StatusSignalType& StatusChangedSignal() { return mKeyboardStatusSignal; }
288 * @copydoc Dali::InputMethodContext::ResizedSignal()
290 KeyboardResizedSignalType& ResizedSignal() { return mKeyboardResizeSignal; }
293 * @copydoc Dali::InputMethodContext::LanguageChangedSignal()
295 LanguageChangedSignalType& LanguageChangedSignal() { return mKeyboardLanguageChangedSignal; }
298 * @copydoc Dali::InputMethodContext::KeyboardTypeChangedSignal()
300 KeyboardTypeSignalType& KeyboardTypeChangedSignal() { return mKeyboardTypeChangedSignal; }
303 * @copydoc Dali::InputMethodContext::ContentReceivedSignal()
305 ContentReceivedSignalType& ContentReceivedSignal() { return mContentReceivedSignal; }
312 InputMethodContext() = default;
317 ~InputMethodContext() override = default;
321 InputMethodContext( const InputMethodContext& ) = delete;
322 InputMethodContext& operator=( InputMethodContext& ) = delete;
326 ActivatedSignalType mActivatedSignal;
327 KeyboardEventSignalType mEventSignal;
328 StatusSignalType mKeyboardStatusSignal;
329 KeyboardResizedSignalType mKeyboardResizeSignal;
330 LanguageChangedSignalType mKeyboardLanguageChangedSignal;
331 KeyboardTypeSignalType mKeyboardTypeChangedSignal;
332 ContentReceivedSignalType mContentReceivedSignal;
336 inline static Internal::Adaptor::InputMethodContext& GetImplementation(Dali::InputMethodContext& inputMethodContext)
338 DALI_ASSERT_ALWAYS( inputMethodContext && "InputMethodContext handle is empty" );
340 BaseObject& handle = inputMethodContext.GetBaseObject();
342 return static_cast<Internal::Adaptor::InputMethodContext&>(handle);
345 inline static const Internal::Adaptor::InputMethodContext& GetImplementation(const Dali::InputMethodContext& inputMethodContext)
347 DALI_ASSERT_ALWAYS( inputMethodContext && "InputMethodContext handle is empty" );
349 const BaseObject& handle = inputMethodContext.GetBaseObject();
351 return static_cast<const Internal::Adaptor::InputMethodContext&>(handle);
357 } // namespace Adaptor
359 } // namespace Internal
363 #endif // DALI_INTERNAL_INPUT_COMMON_INPUT_METHOD_CONTEXT_IMPL_H