Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / ui / base / ime / chromeos / ime_bridge.h
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef UI_BASE_IME_CHROMEOS_IME_BRIDGE_H_
6 #define UI_BASE_IME_CHROMEOS_IME_BRIDGE_H_
7
8 #include <string>
9 #include "base/basictypes.h"
10 #include "base/callback.h"
11 #include "base/strings/string16.h"
12 #include "ui/base/ime/text_input_mode.h"
13 #include "ui/base/ime/text_input_type.h"
14 #include "ui/base/ui_base_export.h"
15
16 namespace gfx {
17 class Rect;
18 }  // namespace gfx
19
20 namespace ui {
21 class CandidateWindow;
22 class KeyEvent;
23 }  // namespace ui
24
25 namespace chromeos {
26
27 class CompositionText;
28
29 class UI_BASE_EXPORT IMEInputContextHandlerInterface {
30  public:
31   // Called when the engine commit a text.
32   virtual void CommitText(const std::string& text) = 0;
33
34   // Called when the engine updates composition text.
35   virtual void UpdateCompositionText(const CompositionText& text,
36                                      uint32 cursor_pos,
37                                      bool visible) = 0;
38
39   // Called when the engine request deleting surrounding string.
40   virtual void DeleteSurroundingText(int32 offset, uint32 length) = 0;
41 };
42
43
44 // A interface to handle the engine handler method call.
45 class UI_BASE_EXPORT IMEEngineHandlerInterface {
46  public:
47   typedef base::Callback<void (bool consumed)> KeyEventDoneCallback;
48
49   // A information about a focused text input field.
50   // A type of each member is based on the html spec, but InputContext can be
51   // used to specify about a non html text field like Omnibox.
52   struct InputContext {
53     InputContext(ui::TextInputType type_, ui::TextInputMode mode_) :
54       type(type_), mode(mode_) {}
55
56     // An attribute of the field defined at
57     // http://www.w3.org/TR/html401/interact/forms.html#input-control-types.
58     ui::TextInputType type;
59     // An attribute of the field defined at
60     // http://www.whatwg.org/specs/web-apps/current-work/multipage/
61     //  association-of-controls-and-forms.html#input-modalities
62     //  :-the-inputmode-attribute.
63     ui::TextInputMode mode;
64   };
65
66   virtual ~IMEEngineHandlerInterface() {}
67
68   // Called when the Chrome input field get the focus.
69   virtual void FocusIn(const InputContext& input_context) = 0;
70
71   // Called when the Chrome input field lose the focus.
72   virtual void FocusOut() = 0;
73
74   // Called when the IME is enabled.
75   virtual void Enable(const std::string& component_id) = 0;
76
77   // Called when the IME is disabled.
78   virtual void Disable() = 0;
79
80   // Called when a property is activated or changed.
81   virtual void PropertyActivate(const std::string& property_name) = 0;
82
83   // Called when the IME is reset.
84   virtual void Reset() = 0;
85
86   // Called when the key event is received.
87   // Actual implementation must call |callback| after key event handling.
88   virtual void ProcessKeyEvent(const ui::KeyEvent& key_event,
89                                const KeyEventDoneCallback& callback) = 0;
90
91   // Called when the candidate in lookup table is clicked. The |index| is 0
92   // based candidate index in lookup table.
93   virtual void CandidateClicked(uint32 index) = 0;
94
95   // Called when a new surrounding text is set. The |text| is surrounding text
96   // and |cursor_pos| is 0 based index of cursor position in |text|. If there is
97   // selection range, |anchor_pos| represents opposite index from |cursor_pos|.
98   // Otherwise |anchor_pos| is equal to |cursor_pos|.
99   virtual void SetSurroundingText(const std::string& text, uint32 cursor_pos,
100                                   uint32 anchor_pos) = 0;
101
102  protected:
103   IMEEngineHandlerInterface() {}
104 };
105
106 // A interface to handle the candidate window related method call.
107 class UI_BASE_EXPORT IMECandidateWindowHandlerInterface {
108  public:
109   virtual ~IMECandidateWindowHandlerInterface() {}
110
111   // Called when the IME updates the lookup table.
112   virtual void UpdateLookupTable(const ui::CandidateWindow& candidate_window,
113                                  bool visible) = 0;
114
115   // Called when the IME updates the preedit text. The |text| is given in
116   // UTF-16 encoding.
117   virtual void UpdatePreeditText(const base::string16& text,
118                                  uint32 cursor_pos,
119                                  bool visible) = 0;
120
121   // Called when the application changes its caret bounds.
122   virtual void SetCursorBounds(const gfx::Rect& cursor_bounds,
123                                const gfx::Rect& composition_head) = 0;
124
125   // Called when the text field's focus state is changed.
126   // |is_focused| is true when the text field gains the focus.
127   virtual void FocusStateChanged(bool is_focused) {}
128
129  protected:
130   IMECandidateWindowHandlerInterface() {}
131 };
132
133
134 // IMEBridge provides access of each IME related handler. This class
135 // is used for IME implementation.
136 class UI_BASE_EXPORT IMEBridge {
137  public:
138   virtual ~IMEBridge();
139
140   // Allocates the global instance. Must be called before any calls to Get().
141   static void Initialize();
142
143   // Releases the global instance.
144   static void Shutdown();
145
146   // Returns IMEBridge global instance. Initialize() must be called first.
147   static IMEBridge* Get();
148
149   // Returns current InputContextHandler. This function returns NULL if input
150   // context is not ready to use.
151   virtual IMEInputContextHandlerInterface* GetInputContextHandler() const = 0;
152
153   // Updates current InputContextHandler. If there is no active input context,
154   // pass NULL for |handler|. Caller must release |handler|.
155   virtual void SetInputContextHandler(
156       IMEInputContextHandlerInterface* handler) = 0;
157
158   // Updates current EngineHandler. If there is no active engine service, pass
159   // NULL for |handler|. Caller must release |handler|.
160   virtual void SetCurrentEngineHandler(IMEEngineHandlerInterface* handler) = 0;
161
162   // Returns current EngineHandler. This function returns NULL if current engine
163   // is not ready to use.
164   virtual IMEEngineHandlerInterface* GetCurrentEngineHandler() const = 0;
165
166   // Returns current CandidateWindowHandler. This function returns NULL if
167   // current candidate window is not ready to use.
168   virtual IMECandidateWindowHandlerInterface* GetCandidateWindowHandler()
169       const = 0;
170
171   // Updates current CandidatWindowHandler. If there is no active candidate
172   // window service, pass NULL for |handler|. Caller must release |handler|.
173   virtual void SetCandidateWindowHandler(
174       IMECandidateWindowHandlerInterface* handler) = 0;
175
176   // Updates current text input type.
177   virtual void SetCurrentTextInputType(ui::TextInputType input_type) = 0;
178
179   // Returns the current text input type.
180   virtual ui::TextInputType GetCurrentTextInputType() const = 0;
181
182  protected:
183   IMEBridge();
184
185  private:
186   DISALLOW_COPY_AND_ASSIGN(IMEBridge);
187 };
188
189 }  // namespace chromeos
190
191 #endif  // UI_BASE_IME_CHROMEOS_IME_BRIDGE_H_