input_method_engine.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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.
4
5#ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_H_
6#define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_H_
7
8#include <map>
9#include <string>
10#include <vector>
11#include "chrome/browser/chromeos/input_method/input_method_engine_interface.h"
12#include "ui/base/ime/chromeos/ibus_bridge.h"
13#include "url/gurl.h"
14
15namespace ui {
16class KeyEvent;
17}  // namespace ui
18
19namespace chromeos {
20
21class IBusText;
22
23namespace input_method {
24class CandidateWindow;
25struct InputMethodProperty;
26struct KeyEventHandle;
27}  // namespace input_method
28
29class InputMethodEngine : public InputMethodEngineInterface,
30                              public IBusEngineHandlerInterface {
31 public:
32  InputMethodEngine();
33
34  virtual ~InputMethodEngine();
35
36  void Initialize(
37      InputMethodEngineInterface::Observer* observer,
38      const char* engine_name,
39      const char* extension_id,
40      const char* engine_id,
41      const std::vector<std::string>& languages,
42      const std::vector<std::string>& layouts,
43      const GURL& options_page,
44      const GURL& input_view);
45
46  // InputMethodEngineInterface overrides.
47  virtual void StartIme() OVERRIDE;
48  virtual bool SetComposition(int context_id,
49                              const char* text,
50                              int selection_start,
51                              int selection_end,
52                              int cursor,
53                              const std::vector<SegmentInfo>& segments,
54                              std::string* error) OVERRIDE;
55  virtual bool ClearComposition(int context_id, std::string* error) OVERRIDE;
56  virtual bool CommitText(int context_id, const char* text,
57                          std::string* error) OVERRIDE;
58  virtual const CandidateWindowProperty&
59    GetCandidateWindowProperty() const OVERRIDE;
60  virtual void SetCandidateWindowProperty(
61      const CandidateWindowProperty& property) OVERRIDE;
62  virtual bool SetCandidateWindowVisible(bool visible,
63                                         std::string* error) OVERRIDE;
64  virtual void SetCandidateWindowAuxText(const char* text) OVERRIDE;
65  virtual void SetCandidateWindowAuxTextVisible(bool visible) OVERRIDE;
66  virtual bool SetCandidates(int context_id,
67                             const std::vector<Candidate>& candidates,
68                             std::string* error) OVERRIDE;
69  virtual bool SetCursorPosition(int context_id, int candidate_id,
70                                 std::string* error) OVERRIDE;
71  virtual bool SetMenuItems(const std::vector<MenuItem>& items) OVERRIDE;
72  virtual bool UpdateMenuItems(const std::vector<MenuItem>& items) OVERRIDE;
73  virtual bool IsActive() const OVERRIDE;
74  virtual void KeyEventDone(input_method::KeyEventHandle* key_data,
75                            bool handled) OVERRIDE;
76  virtual bool DeleteSurroundingText(int context_id,
77                                     int offset,
78                                     size_t number_of_chars,
79                                     std::string* error) OVERRIDE;
80
81  // IBusEngineHandlerInterface overrides.
82  virtual void FocusIn(
83      const IBusEngineHandlerInterface::InputContext& input_context) OVERRIDE;
84  virtual void FocusOut() OVERRIDE;
85  virtual void Enable() OVERRIDE;
86  virtual void Disable() OVERRIDE;
87  virtual void PropertyActivate(const std::string& property_name) OVERRIDE;
88  virtual void Reset() OVERRIDE;
89  virtual void ProcessKeyEvent(const ui::KeyEvent& key_event,
90                               const KeyEventDoneCallback& callback) OVERRIDE;
91  virtual void CandidateClicked(uint32 index) OVERRIDE;
92  virtual void SetSurroundingText(const std::string& text, uint32 cursor_pos,
93                                  uint32 anchor_pos) OVERRIDE;
94
95 private:
96  // Converts MenuItem to InputMethodProperty.
97  void MenuItemToProperty(const MenuItem& item,
98                          input_method::InputMethodProperty* property);
99
100  // True if the current context has focus.
101  bool focused_;
102
103  // True if this engine is active.
104  bool active_;
105
106  // ID that is used for the current input context.  False if there is no focus.
107  int context_id_;
108
109  // Next id that will be assigned to a context.
110  int next_context_id_;
111
112  // This IME ID in Chrome Extension.
113  std::string engine_id_;
114
115  // This IME ID in ibus.
116  std::string ibus_id_;
117
118  // The current auxialy text and it's visiblity.
119  std::string aux_text_;
120  bool aux_text_visible_;
121
122  // Pointer to the object recieving events for this IME.
123  InputMethodEngineInterface::Observer* observer_;
124
125  // The current preedit text, and it's cursor position.
126  scoped_ptr<IBusText> preedit_text_;
127  int preedit_cursor_;
128
129  // The current candidate window.
130  scoped_ptr<input_method::CandidateWindow> candidate_window_;
131
132  // The current candidate window property.
133  CandidateWindowProperty candidate_window_property_;
134
135  // Indicates whether the candidate window is visible.
136  bool window_visible_;
137
138  // Mapping of candidate index to candidate id.
139  std::vector<int> candidate_ids_;
140
141  // Mapping of candidate id to index.
142  std::map<int, int> candidate_indexes_;
143
144  // Used for input view window.
145  GURL input_view_url_;
146};
147
148}  // namespace chromeos
149
150#endif  // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_INPUT_METHOD_ENGINE_H_
151