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.
5 #ifndef CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_CONTROLLER_IMPL_H_
6 #define CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_CONTROLLER_IMPL_H_
8 #include "chrome/browser/chromeos/input_method/candidate_window_controller.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/observer_list.h"
12 #include "ui/base/ime/chromeos/ime_bridge.h"
13 #include "ui/base/ime/infolist_entry.h"
14 #include "ui/chromeos/ime/candidate_window_view.h"
15 #include "ui/views/widget/widget_observer.h"
18 class CandidateWindow
;
30 namespace input_method
{
32 class DelayableWidget
;
33 class ModeIndicatorController
;
35 // The implementation of CandidateWindowController.
36 // CandidateWindowController controls the CandidateWindow.
37 class CandidateWindowControllerImpl
38 : public CandidateWindowController
,
39 public ui::ime::CandidateWindowView::Observer
,
40 public views::WidgetObserver
,
41 public IMECandidateWindowHandlerInterface
{
43 CandidateWindowControllerImpl();
44 virtual ~CandidateWindowControllerImpl();
46 // CandidateWindowController overrides:
47 virtual void AddObserver(
48 CandidateWindowController::Observer
* observer
) override
;
49 virtual void RemoveObserver(
50 CandidateWindowController::Observer
* observer
) override
;
51 virtual void Hide() override
;
54 static void ConvertLookupTableToInfolistEntry(
55 const ui::CandidateWindow
& candidate_window
,
56 std::vector
<ui::InfolistEntry
>* infolist_entries
,
57 bool* has_highlighted
);
60 // ui::ime::CandidateWindowView::Observer implementation.
61 virtual void OnCandidateCommitted(int index
) override
;
63 // views::WidgetObserver implementation.
64 virtual void OnWidgetClosing(views::Widget
* widget
) override
;
66 // IMECandidateWindowHandlerInterface implementation.
67 virtual void SetCursorBounds(const gfx::Rect
& cursor_bounds
,
68 const gfx::Rect
& composition_head
) override
;
69 virtual void UpdateLookupTable(
70 const ui::CandidateWindow
& candidate_window
,
71 bool visible
) override
;
72 virtual void UpdatePreeditText(const base::string16
& text
,
73 unsigned int cursor
, bool visible
) override
;
74 virtual void FocusStateChanged(bool is_focused
) override
;
76 void InitCandidateWindowView();
78 // The candidate window view.
79 ui::ime::CandidateWindowView
* candidate_window_view_
;
81 // This is the outer frame of the infolist window view. Owned by the widget.
82 ui::ime::InfolistWindow
* infolist_window_
;
84 gfx::Rect cursor_bounds_
;
85 gfx::Rect composition_head_
;
87 // This is the controller of the IME mode indicator.
88 scoped_ptr
<ModeIndicatorController
> mode_indicator_controller_
;
90 // The infolist entries and its focused index which currently shown in
92 std::vector
<ui::InfolistEntry
> latest_infolist_entries_
;
94 ObserverList
<CandidateWindowController::Observer
> observers_
;
96 DISALLOW_COPY_AND_ASSIGN(CandidateWindowControllerImpl
);
99 #endif // CHROME_BROWSER_CHROMEOS_INPUT_METHOD_CANDIDATE_WINDOW_CONTROLLER_IMPL_H_
101 } // namespace input_method
102 } // namespace chromeos