- add sources.
[platform/framework/web/crosswalk.git] / src / ui / base / ime / win / tsf_event_router.h
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_