Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / input_method / candidate_window_controller_impl.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 CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_CONTROLLER_IMPL_H_
6 #define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_CONTROLLER_IMPL_H_
7
8 #include "chrome/browser/chromeos/input_method/candidate_window_controller.h"
9
10 #include "ash/ime/candidate_window_view.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/observer_list.h"
13 #include "ui/base/ime/chromeos/ime_bridge.h"
14 #include "ui/base/ime/infolist_entry.h"
15 #include "ui/views/widget/widget_observer.h"
16
17 namespace ash {
18 namespace ime {
19 class InfolistWindow;
20 }  // namespace ime
21 }  // namespace ash
22
23 namespace ui {
24 class CandidateWindow;
25 }  // namespace ui
26
27 namespace views {
28 class Widget;
29 }  // namespace views
30
31 namespace chromeos {
32 namespace input_method {
33
34 class DelayableWidget;
35 class ModeIndicatorController;
36
37 // The implementation of CandidateWindowController.
38 // CandidateWindowController controls the CandidateWindow.
39 class CandidateWindowControllerImpl
40     : public CandidateWindowController,
41       public ash::ime::CandidateWindowView::Observer,
42       public views::WidgetObserver,
43       public IMECandidateWindowHandlerInterface {
44  public:
45   CandidateWindowControllerImpl();
46   virtual ~CandidateWindowControllerImpl();
47
48   // CandidateWindowController overrides:
49   virtual void AddObserver(
50       CandidateWindowController::Observer* observer) override;
51   virtual void RemoveObserver(
52       CandidateWindowController::Observer* observer) override;
53   virtual void Hide() override;
54
55  protected:
56   static void ConvertLookupTableToInfolistEntry(
57       const ui::CandidateWindow& candidate_window,
58       std::vector<ui::InfolistEntry>* infolist_entries,
59       bool* has_highlighted);
60
61  private:
62   // ash::ime::CandidateWindowView::Observer implementation.
63   virtual void OnCandidateCommitted(int index) override;
64
65   // views::WidgetObserver implementation.
66   virtual void OnWidgetClosing(views::Widget* widget) override;
67
68   // IMECandidateWindowHandlerInterface implementation.
69   virtual void SetCursorBounds(const gfx::Rect& cursor_bounds,
70                                const gfx::Rect& composition_head) override;
71   virtual void UpdateLookupTable(
72       const ui::CandidateWindow& candidate_window,
73       bool visible) override;
74   virtual void UpdatePreeditText(const base::string16& text,
75                                  unsigned int cursor, bool visible) override;
76   virtual void FocusStateChanged(bool is_focused) override;
77
78   void InitCandidateWindowView();
79
80   // The candidate window view.
81   ash::ime::CandidateWindowView* candidate_window_view_;
82
83   // This is the outer frame of the infolist window view. Owned by the widget.
84   ash::ime::InfolistWindow* infolist_window_;
85
86   gfx::Rect cursor_bounds_;
87   gfx::Rect composition_head_;
88
89   // This is the controller of the IME mode indicator.
90   scoped_ptr<ModeIndicatorController> mode_indicator_controller_;
91
92   // The infolist entries and its focused index which currently shown in
93   // Infolist window.
94   std::vector<ui::InfolistEntry> latest_infolist_entries_;
95
96   ObserverList<CandidateWindowController::Observer> observers_;
97
98   DISALLOW_COPY_AND_ASSIGN(CandidateWindowControllerImpl);
99 };
100
101 #endif  // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_CONTROLLER_IMPL_H_
102
103 }  // namespace input_method
104 }  // namespace chromeos