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