1 // Copyright (c) 2012 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_WIN_TSF_EVENT_ROUTER_H_ 6 #define UI_BASE_IME_WIN_TSF_EVENT_ROUTER_H_ 7 8 #include <atlbase.h> 9 #include <atlcom.h> 10 #include <msctf.h> 11 12 #include <set> 13 14 #include "base/basictypes.h" 15 #include "base/callback.h" 16 #include "base/compiler_specific.h" 17 #include "ui/base/ime/text_input_type.h" 18 #include "ui/base/ui_export.h" 19 #include "ui/gfx/range/range.h" 20 21 struct ITfDocumentMgr; 22 23 namespace ui { 24 25 class TSFEventRouterObserver { 26 public: 27 TSFEventRouterObserver() {} 28 29 // Called when the number of currently opened candidate windows changes. 30 virtual void OnCandidateWindowCountChanged(size_t window_count) {} 31 32 // Called when a composition is started. 33 virtual void OnTSFStartComposition() {} 34 35 // Called when the text contents are updated. If there is no composition, 36 // gfx::Range::InvalidRange is passed to |composition_range|. 37 virtual void OnTextUpdated(const gfx::Range& composition_range) {} 38 39 // Called when a composition is terminated. 40 virtual void OnTSFEndComposition() {} 41 42 protected: 43 virtual ~TSFEventRouterObserver() {} 44 45 private: 46 DISALLOW_COPY_AND_ASSIGN(TSFEventRouterObserver); 47 }; 48 49 // This class monitores TSF related events and forwards them to given 50 // |observer|. 51 class UI_EXPORT TSFEventRouter { 52 public: 53 // Do not pass NULL to |observer|. 54 explicit TSFEventRouter(TSFEventRouterObserver* observer); 55 virtual ~TSFEventRouter(); 56 57 // Returns true if the IME is composing text. 58 bool IsImeComposing(); 59 60 // Callbacks from the TSFEventRouterDelegate: 61 void OnCandidateWindowCountChanged(size_t window_count); 62 void OnTSFStartComposition(); 63 void OnTextUpdated(const gfx::Range& composition_range); 64 void OnTSFEndComposition(); 65 66 // Sets |thread_manager| to be monitored. |thread_manager| can be NULL. 67 void SetManager(ITfThreadMgr* thread_manager); 68 69 private: 70 class Delegate; 71 72 CComPtr<Delegate> delegate_; 73 74 TSFEventRouterObserver* observer_; 75 76 DISALLOW_COPY_AND_ASSIGN(TSFEventRouter); 77 }; 78 79 } // namespace ui 80 81 #endif // UI_BASE_IME_WIN_TSF_EVENT_ROUTER_H_ 82