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.
5 #include "ui/base/ime/chromeos/ime_bridge.h"
8 #include "base/logging.h"
9 #include "base/memory/singleton.h"
13 static IMEBridge* g_ime_bridge = NULL;
15 // An implementation of IMEBridge.
16 class IMEBridgeImpl : public IMEBridge {
19 : input_context_handler_(NULL),
20 engine_handler_(NULL),
21 candidate_window_handler_(NULL) {
24 virtual ~IMEBridgeImpl() {
27 // IMEBridge override.
28 virtual IBusInputContextHandlerInterface*
29 GetInputContextHandler() const OVERRIDE {
30 return input_context_handler_;
33 // IMEBridge override.
34 virtual void SetInputContextHandler(
35 IBusInputContextHandlerInterface* handler) OVERRIDE {
36 input_context_handler_ = handler;
39 // IMEBridge override.
40 virtual void SetEngineHandler(
41 const std::string& engine_id,
42 IMEEngineHandlerInterface* handler) OVERRIDE {
43 DCHECK(!engine_id.empty());
45 engine_handler_map_[engine_id] = handler;
48 // IMEBridge override.
49 virtual IMEEngineHandlerInterface* GetEngineHandler(
50 const std::string& engine_id) OVERRIDE {
51 if (engine_id.empty() ||
52 engine_handler_map_.find(engine_id) == engine_handler_map_.end()) {
55 return engine_handler_map_[engine_id];
58 // IMEBridge override.
59 virtual void SetCurrentEngineHandler(
60 IMEEngineHandlerInterface* handler) OVERRIDE {
61 engine_handler_ = handler;
64 // IMEBridge override.
65 virtual IMEEngineHandlerInterface* SetCurrentEngineHandlerById(
66 const std::string& engine_id) OVERRIDE {
67 std::map<std::string, IMEEngineHandlerInterface*>::const_iterator itor =
68 engine_handler_map_.find(engine_id);
69 // |engine_id| must be found unless it's empty, but if it's not found, fall
70 // back to NULL when non-debug build.
71 DCHECK(itor != engine_handler_map_.end() || engine_id.empty());
72 if (itor == engine_handler_map_.end()) {
73 engine_handler_ = NULL;
77 engine_handler_ = engine_handler_map_[engine_id];
78 return engine_handler_;
81 // IMEBridge override.
82 virtual IMEEngineHandlerInterface* GetCurrentEngineHandler() const OVERRIDE {
83 return engine_handler_;
86 // IMEBridge override.
87 virtual IBusPanelCandidateWindowHandlerInterface*
88 GetCandidateWindowHandler() const OVERRIDE {
89 return candidate_window_handler_;
92 // IMEBridge override.
93 virtual void SetCandidateWindowHandler(
94 IBusPanelCandidateWindowHandlerInterface* handler) OVERRIDE {
95 candidate_window_handler_ = handler;
99 IBusInputContextHandlerInterface* input_context_handler_;
100 IMEEngineHandlerInterface* engine_handler_;
101 IBusPanelCandidateWindowHandlerInterface* candidate_window_handler_;
102 std::map<std::string, IMEEngineHandlerInterface*> engine_handler_map_;
104 DISALLOW_COPY_AND_ASSIGN(IMEBridgeImpl);
107 ///////////////////////////////////////////////////////////////////////////////
109 IMEBridge::IMEBridge() {
112 IMEBridge::~IMEBridge() {
116 void IMEBridge::Initialize() {
118 g_ime_bridge = new IMEBridgeImpl();
122 void IMEBridge::Shutdown() {
128 IMEBridge* IMEBridge::Get() {
132 } // namespace chromeos