Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / chromeos / input_method / input_method_engine_interface.h
blobbf5484202f509f12fdfb10399c8c454c6d2d1583
1 // Copyright 2013 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.
5 #ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_INTERFACE_H_
6 #define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_INTERFACE_H_
8 #include <string>
9 #include <vector>
11 #include "ui/base/ime/chromeos/ime_bridge.h"
13 class GURL;
15 namespace chromeos {
17 namespace input_method {
18 class InputMethodDescriptor;
19 struct KeyEventHandle;
20 } // namespace input_method
22 // InputMethodEngine is used to translate from the Chrome IME API to the native
23 // API.
24 class InputMethodEngineInterface : public IMEEngineHandlerInterface {
25 public:
26 struct KeyboardEvent {
27 KeyboardEvent();
28 virtual ~KeyboardEvent();
30 std::string type;
31 std::string key;
32 std::string code;
33 int key_code; // only used by on-screen keyboards.
34 std::string extension_id;
35 bool alt_key;
36 bool ctrl_key;
37 bool shift_key;
38 bool caps_lock;
41 enum {
42 MENU_ITEM_MODIFIED_LABEL = 0x0001,
43 MENU_ITEM_MODIFIED_STYLE = 0x0002,
44 MENU_ITEM_MODIFIED_VISIBLE = 0x0004,
45 MENU_ITEM_MODIFIED_ENABLED = 0x0008,
46 MENU_ITEM_MODIFIED_CHECKED = 0x0010,
47 MENU_ITEM_MODIFIED_ICON = 0x0020,
50 enum MenuItemStyle {
51 MENU_ITEM_STYLE_NONE,
52 MENU_ITEM_STYLE_CHECK,
53 MENU_ITEM_STYLE_RADIO,
54 MENU_ITEM_STYLE_SEPARATOR,
57 enum MouseButtonEvent {
58 MOUSE_BUTTON_LEFT,
59 MOUSE_BUTTON_RIGHT,
60 MOUSE_BUTTON_MIDDLE,
63 enum SegmentStyle {
64 SEGMENT_STYLE_UNDERLINE,
65 SEGMENT_STYLE_DOUBLE_UNDERLINE,
66 SEGMENT_STYLE_NO_UNDERLINE,
69 enum CandidateWindowPosition {
70 WINDOW_POS_CURSOR,
71 WINDOW_POS_COMPOSITTION,
74 struct MenuItem {
75 MenuItem();
76 virtual ~MenuItem();
78 std::string id;
79 std::string label;
80 MenuItemStyle style;
81 bool visible;
82 bool enabled;
83 bool checked;
85 unsigned int modified;
86 std::vector<MenuItem> children;
89 struct InputContext {
90 int id;
91 std::string type;
92 bool auto_correct;
93 bool auto_complete;
94 bool spell_check;
97 struct UsageEntry {
98 std::string title;
99 std::string body;
102 struct Candidate {
103 Candidate();
104 virtual ~Candidate();
106 std::string value;
107 int id;
108 std::string label;
109 std::string annotation;
110 UsageEntry usage;
111 std::vector<Candidate> candidates;
114 struct CandidateWindowProperty {
115 CandidateWindowProperty();
116 virtual ~CandidateWindowProperty();
117 int page_size;
118 bool is_cursor_visible;
119 bool is_vertical;
120 bool show_window_at_composition;
122 // Auxiliary text is typically displayed in the footer of the candidate
123 // window.
124 std::string auxiliary_text;
125 bool is_auxiliary_text_visible;
128 struct SegmentInfo {
129 int start;
130 int end;
131 SegmentStyle style;
134 class Observer {
135 public:
136 virtual ~Observer();
138 // Called when the IME becomes the active IME.
139 virtual void OnActivate(const std::string& engine_id) = 0;
141 // Called when the IME is no longer active.
142 virtual void OnDeactivated(const std::string& engine_id) = 0;
144 // Called when a text field gains focus, and will be sending key events.
145 virtual void OnFocus(const InputContext& context) = 0;
147 // Called when a text field loses focus, and will no longer generate events.
148 virtual void OnBlur(int context_id) = 0;
150 // Called when an InputContext's properties change while it is focused.
151 virtual void OnInputContextUpdate(const InputContext& context) = 0;
153 // Returns whether the observer is interested in key events.
154 virtual bool IsInterestedInKeyEvent() const = 0;
156 // Called when the user pressed a key with a text field focused.
157 virtual void OnKeyEvent(const std::string& engine_id,
158 const KeyboardEvent& event,
159 input_method::KeyEventHandle* key_data) = 0;
161 // Called when the user clicks on an item in the candidate list.
162 virtual void OnCandidateClicked(const std::string& engine_id,
163 int candidate_id,
164 MouseButtonEvent button) = 0;
166 // Called when a menu item for this IME is interacted with.
167 virtual void OnMenuItemActivated(const std::string& engine_id,
168 const std::string& menu_id) = 0;
170 // Called when a surrounding text is changed.
171 virtual void OnSurroundingTextChanged(const std::string& engine_id,
172 const std::string& text,
173 int cursor_pos,
174 int anchor_pos,
175 int offset_pos) = 0;
177 // Called when composition bounds are changed.
178 virtual void OnCompositionBoundsChanged(
179 const std::vector<gfx::Rect>& bounds) = 0;
181 // Called when Chrome terminates on-going text input session.
182 virtual void OnReset(const std::string& engine_id) = 0;
185 ~InputMethodEngineInterface() override {}
187 // Set the current composition and associated properties.
188 virtual bool SetComposition(int context_id,
189 const char* text,
190 int selection_start,
191 int selection_end,
192 int cursor,
193 const std::vector<SegmentInfo>& segments,
194 std::string* error) = 0;
196 // Clear the current composition.
197 virtual bool ClearComposition(int context_id, std::string* error) = 0;
199 // Commit the specified text to the specified context. Fails if the context
200 // is not focused.
201 virtual bool CommitText(int context_id, const char* text,
202 std::string* error) = 0;
204 // Send the sequence of key events.
205 virtual bool SendKeyEvents(int context_id,
206 const std::vector<KeyboardEvent>& events) = 0;
208 // This function returns the current property of the candidate window.
209 // The caller can use the returned value as the default property and
210 // modify some of specified items.
211 virtual const CandidateWindowProperty&
212 GetCandidateWindowProperty() const = 0;
214 // Change the property of the candidate window and repaint the candidate
215 // window widget.
216 virtual void SetCandidateWindowProperty(
217 const CandidateWindowProperty& property) = 0;
219 // Show or hide the candidate window.
220 virtual bool SetCandidateWindowVisible(bool visible, std::string* error) = 0;
222 // Set the list of entries displayed in the candidate window.
223 virtual bool SetCandidates(int context_id,
224 const std::vector<Candidate>& candidates,
225 std::string* error) = 0;
227 // Set the position of the cursor in the candidate window.
228 virtual bool SetCursorPosition(int context_id, int candidate_id,
229 std::string* error) = 0;
231 // Set the list of items that appears in the language menu when this IME is
232 // active.
233 virtual bool SetMenuItems(const std::vector<MenuItem>& items) = 0;
235 // Update the state of the menu items.
236 virtual bool UpdateMenuItems(const std::vector<MenuItem>& items) = 0;
238 // Returns true if this IME is active, false if not.
239 virtual bool IsActive() const = 0;
241 // Returns the current active input_component id.
242 virtual const std::string& GetActiveComponentId() const = 0;
244 // Deletes |number_of_chars| unicode characters as the basis of |offset| from
245 // the surrounding text. The |offset| is relative position based on current
246 // caret.
247 // NOTE: Currently we are falling back to backspace forwarding workaround,
248 // because delete_surrounding_text is not supported in Chrome. So this
249 // function is restricted for only preceding text.
250 // TODO(nona): Support full spec delete surrounding text.
251 virtual bool DeleteSurroundingText(int context_id,
252 int offset,
253 size_t number_of_chars,
254 std::string* error) = 0;
256 // Hides the input view window (from API call).
257 virtual void HideInputView() = 0;
260 } // namespace chromeos
262 #endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_INTERFACE_H_